فهرست منبع

卡哇伊配置

詹子聪 5 سال پیش
والد
کامیت
c0d9c6164a

+ 3 - 0
app/build.gradle

@@ -128,6 +128,9 @@ dependencies {
     //implementation 'com.jude:swipebackhelper:3.1.2'
     // 图片点击可以放大缩小
     implementation 'com.github.chrisbanes:PhotoView:1.2.6'
+
+    implementation 'cn.hutool:hutool-all:5.4.3'
+    implementation 'com.alibaba:fastjson:1.2.73'
 }
 repositories {
     mavenCentral()

+ 156 - 0
app/src/main/java/com/miekir/eden/kawayi/AES.java

@@ -0,0 +1,156 @@
+package com.miekir.eden.kawayi;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.security.DigestException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import java.util.Base64;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+
+import cn.hutool.core.codec.Base64Decoder;
+
+public class AES {
+
+    private static SecretKeySpec secretKey;
+    private static byte[] key;
+
+    public static void setKey(String myKey) {
+        MessageDigest sha = null;
+        try {
+            key = myKey.getBytes("UTF-8");
+            sha = MessageDigest.getInstance("SHA-1");
+            key = sha.digest(key);
+            key = Arrays.copyOf(key, 16);
+            secretKey = new SecretKeySpec(key, "AES");
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static String encrypt(String strToEncrypt, String secret) {
+        try {
+            setKey(secret);
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
+            return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
+        } catch (Exception e) {
+            System.out.println("Error while encrypting: " + e.toString());
+        }
+        return null;
+    }
+
+    public static String decrypt(String strToDecrypt, String secret) {
+        try {
+            setKey(secret);
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
+            cipher.init(Cipher.DECRYPT_MODE, secretKey);
+            return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
+        } catch (Exception e) {
+            System.out.println("Error while decrypting: " + e.toString());
+        }
+        return null;
+    }
+
+
+    /*----------------------------------------CryptoJS----------------------------------------*/
+
+    /*
+    https://stackoverflow.com/questions/41432896/cryptojs-aes-encryption-and-java-aes-decryption
+    var text = "The quick brown fox jumps over the lazy dog. 👻 👻";
+    var secret = "René Über";
+    var encrypted = CryptoJS.AES.encrypt(text, secret);
+    encrypted = encrypted.toString();
+    console.log("Cipher text: " + encrypted);
+    Crypto.js 加密和 Java解密
+    */
+    public static String decryptKawayi(String cipherText, String secret) throws Exception {
+        byte[] cipherData;
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
+            cipherData = Base64.getDecoder().decode(cipherText);
+        } else {
+            cipherData =  Base64Decoder.decode(cipherText);
+        }
+        byte[] saltData = Arrays.copyOfRange(cipherData, 8, 16);
+
+        MessageDigest md5 = MessageDigest.getInstance("MD5");
+        final byte[][] keyAndIV = GenerateKeyAndIV(32, 16, 1, saltData, secret.getBytes(StandardCharsets.UTF_8), md5);
+        SecretKeySpec key = new SecretKeySpec(keyAndIV[0], "AES");
+        IvParameterSpec iv = new IvParameterSpec(keyAndIV[1]);
+
+        byte[] encrypted = Arrays.copyOfRange(cipherData, 16, cipherData.length);
+        Cipher aesCBC = Cipher.getInstance("AES/CBC/PKCS5Padding");
+        aesCBC.init(Cipher.DECRYPT_MODE, key, iv);
+        byte[] decryptedData = aesCBC.doFinal(encrypted);
+
+        return new String(decryptedData, StandardCharsets.UTF_8);
+    }
+
+    /**
+     * Generates a key and an initialization vector (IV) with the given salt and password.
+     * <p>
+     * This method is equivalent to OpenSSL's EVP_BytesToKey function
+     * (see https://github.com/openssl/openssl/blob/master/crypto/evp/evp_key.c).
+     * By default, OpenSSL uses a single iteration, MD5 as the algorithm and UTF-8 encoded password data.
+     * </p>
+     * @param keyLength the length of the generated key (in bytes)
+     * @param ivLength the length of the generated IV (in bytes)
+     * @param iterations the number of digestion rounds
+     * @param salt the salt data (8 bytes of data or <code>null</code>)
+     * @param password the password data (optional)
+     * @param md the message digest algorithm to use
+     * @return an two-element array with the generated key and IV
+     */
+    public static byte[][] GenerateKeyAndIV(int keyLength, int ivLength, int iterations, byte[] salt, byte[] password, MessageDigest md) {
+
+        int digestLength = md.getDigestLength();
+        int requiredLength = (keyLength + ivLength + digestLength - 1) / digestLength * digestLength;
+        byte[] generatedData = new byte[requiredLength];
+        int generatedLength = 0;
+
+        try {
+            md.reset();
+
+            // Repeat process until sufficient data has been generated
+            while (generatedLength < keyLength + ivLength) {
+
+                // Digest data (last digest if available, password data, salt if available)
+                if (generatedLength > 0)
+                    md.update(generatedData, generatedLength - digestLength, digestLength);
+                md.update(password);
+                if (salt != null)
+                    md.update(salt, 0, 8);
+                md.digest(generatedData, generatedLength, digestLength);
+
+                // additional rounds
+                for (int i = 1; i < iterations; i++) {
+                    md.update(generatedData, generatedLength, digestLength);
+                    md.digest(generatedData, generatedLength, digestLength);
+                }
+
+                generatedLength += digestLength;
+            }
+
+            // Copy key and IV into separate byte arrays
+            byte[][] result = new byte[2][];
+            result[0] = Arrays.copyOfRange(generatedData, 0, keyLength);
+            if (ivLength > 0)
+                result[1] = Arrays.copyOfRange(generatedData, keyLength, keyLength + ivLength);
+
+            return result;
+
+        } catch (DigestException e) {
+            throw new RuntimeException(e);
+
+        } finally {
+            // Clean out temporary data
+            Arrays.fill(generatedData, (byte)0);
+        }
+    }
+}

+ 7 - 0
app/src/main/java/com/miekir/eden/kawayi/API.java

@@ -0,0 +1,7 @@
+package com.miekir.eden.kawayi;
+
+public interface API {
+    String PHOTO_LIST = "http://hao.bynote.top/api/album/home";
+    String PHOTO_DETAIL = "http://hao.bynote.top/api/album/single?_id=";
+    String VIDEO = "http://hao.bynote.top/api/jiejie/video";
+}

+ 150 - 0
app/src/main/java/com/miekir/eden/kawayi/WalkApp.java

@@ -0,0 +1,150 @@
+package com.miekir.eden.kawayi;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+import com.miekir.eden.kawayi.bean.BaseBean;
+import com.miekir.eden.kawayi.bean.EncryptBean;
+
+import java.io.File;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.http.HttpUtil;
+
+public class WalkApp {
+    public static final String KEY_SECRET = "kexikehe";
+
+    public static void main(String[] args) {
+        ExecutorService service = Executors.newFixedThreadPool(3);
+        service.submit(new Runnable() {
+            @Override
+            public void run() {
+                parsePhoto();
+            }
+        });
+
+        service.submit(new Runnable() {
+            @Override
+            public void run() {
+                //parseVideo();
+            }
+        });
+    }
+
+    private static void parsePhoto() {
+        File photoDir = new File("F:\\kawayi\\photo\\");
+        if (!photoDir.exists()) {
+            photoDir.mkdirs();
+        }
+
+        while (true) {
+            String result = HttpUtil.get(API.PHOTO_LIST);
+            try {
+                BaseBean homeBean = JSON.parseObject(result, BaseBean.class);
+                if (homeBean == null) {
+                    continue;
+                }
+
+                String detailJson = AES.decryptKawayi(homeBean.getJson(), KEY_SECRET);
+                List<EncryptBean> photoList = JSON.parseObject(detailJson, new TypeReference<List<EncryptBean>>() {});
+                if (photoList == null || photoList.size() == 0) {
+                    continue;
+                }
+                for (EncryptBean photo : photoList) {
+                    String albumName = photo.getAlbumName();
+                    File albumFile = new File(photoDir, albumName);
+                    if (albumFile.exists()) {
+                        continue;
+                    } else {
+                        albumFile.mkdirs();
+                    }
+
+                    List<String> photoUrlList = photo.getFiles();
+                    if (photoUrlList == null || photoUrlList.size() == 0) {
+                        continue;
+                    }
+
+                    for (String url : photoUrlList) {
+                        downloadFile(url.replace("?v=2", ""), albumFile);
+                    }
+                }
+
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    private static void parseVideo() {
+        File videoDir = new File("F:\\kawayi\\video\\");
+        if (!videoDir.exists()) {
+            videoDir.mkdirs();
+        }
+        while (true) {
+            String result = HttpUtil.get(API.VIDEO);
+            try {
+                BaseBean baseBean = JSON.parseObject(result, BaseBean.class);
+                if (baseBean == null) {
+                    continue;
+                }
+
+                String videoUrl = baseBean.getJson();
+                if (videoUrl == null || videoUrl.length() == 0) {
+                    continue;
+                }
+
+                downloadFile(videoUrl, videoDir);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private static int mNum = 0;
+    private static final Random mRandom = new Random();
+    private static void downloadFile(String url, File parentDir) {
+        int index = url.lastIndexOf("/");
+        if (index == -1 || index == url.length() - 1) {
+            return;
+        }
+
+        String name = url.substring(index + 1);
+        File videoFile = new File(parentDir, name);
+        if (videoFile.exists()) {
+            return;
+        }
+
+        try {
+            HttpUtil.downloadFile(url, videoFile, 30000);
+            savePath(url);
+            mNum++;
+            System.out.println("下载了一个文件,共:" + mNum + "个");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // 休息一下
+        try {
+            int seconds = mRandom.nextInt(10) + 5;
+            System.out.println("休息:" + seconds + "秒");
+            Thread.sleep(seconds * 1000);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void savePath(String url) {
+        if (url.endsWith("mp4")) {
+            File videoUrlFile = new File("F:\\kawayi\\video.txt");
+            FileUtil.appendUtf8String(url+"\n", videoUrlFile);
+        } else {
+            File photoUrlFile = new File("F:\\kawayi\\photo.txt");
+            FileUtil.appendUtf8String(url+"\n", photoUrlFile);
+        }
+    }
+}

+ 48 - 0
app/src/main/java/com/miekir/eden/kawayi/bean/BaseBean.java

@@ -0,0 +1,48 @@
+package com.miekir.eden.kawayi.bean;
+
+public class BaseBean {
+
+    /**
+     * success : true
+     * json : http://txmov2.a.yximgs.com/upic/2019/07/06/21/BMjAxOTA3MDYyMTQyNDRfNDIzMjYwMzZfMTQ4Njg2NDMzMDBfMV8z_b_Bdd083150ec7430462f1ebd18e13202d1.mp4
+     * msg :
+     * e : 0
+     */
+
+    private boolean success;
+    private String json;
+    private String msg;
+    private int e;
+
+    public boolean isSuccess() {
+        return success;
+    }
+
+    public void setSuccess(boolean success) {
+        this.success = success;
+    }
+
+    public String getJson() {
+        return json;
+    }
+
+    public void setJson(String json) {
+        this.json = json;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public int getE() {
+        return e;
+    }
+
+    public void setE(int e) {
+        this.e = e;
+    }
+}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 90 - 0
app/src/main/java/com/miekir/eden/kawayi/bean/EncryptBean.java


+ 26 - 13
app/src/main/java/com/miekir/eden/manager/UserInfoManager.java

@@ -12,25 +12,26 @@ import com.miekir.eden.bean.SystemBean;
  * @date 2020/6/27 20:40
  * Description: 用户信息
  */
-public class UserInfoManager {
-    private static volatile UserInfoManager userInfoManager;
-    private UserInfoManager() {}
+public class EdenManager {
+    private static volatile EdenManager edenManager;
+    private EdenManager() {}
     private BeiUser mBeiUser;
     private SystemBean systemBean;
 
-    private boolean isLogin;
+    private boolean isKwyPhotoReady;
+    private boolean isKwyVideoReady;
 
-    public static UserInfoManager getInstance() {
-        if (userInfoManager == null) {
+    public static EdenManager getInstance() {
+        if (edenManager == null) {
             init();
         }
 
-        return userInfoManager;
+        return edenManager;
     }
 
     private static synchronized void init() {
-        if (userInfoManager == null) {
-            userInfoManager = new UserInfoManager();
+        if (edenManager == null) {
+            edenManager = new EdenManager();
         }
     }
 
@@ -52,12 +53,24 @@ public class UserInfoManager {
         PreferenceManager.getInstance().putSerializable(PreferenceManager.KEY_USER, beiUser);
     }
 
-    public boolean isLogin() {
-        return getBeiUser() != null && !TextUtils.isEmpty(getBeiUser().email) && !TextUtils.isEmpty(getBeiUser().token);
+    public boolean isKwyPhotoReady() {
+        return isKwyPhotoReady;
+    }
+
+    public void setKwyPhotoReady(boolean kwyPhotoReady) {
+        isKwyPhotoReady = kwyPhotoReady;
+    }
+
+    public boolean isKwyVideoReady() {
+        return isKwyVideoReady;
+    }
+
+    public void setKwyVideoReady(boolean kwyVideoReady) {
+        isKwyVideoReady = kwyVideoReady;
     }
 
-    public void setLogin(boolean login) {
-        isLogin = login;
+    public boolean isLogin() {
+        return getBeiUser() != null && !TextUtils.isEmpty(getBeiUser().email) && !TextUtils.isEmpty(getBeiUser().token);
     }
 
     public SystemBean getSystemBean() {

+ 4 - 4
app/src/main/java/com/miekir/eden/net/RetrofitHelper.java

@@ -4,7 +4,7 @@ import android.content.Context;
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.miekir.eden.manager.UserInfoManager;
+import com.miekir.eden.manager.EdenManager;
 import com.miekir.network.BuildConfig;
 import com.miekir.network.core.RetrofitInstaller;
 import com.readystatesoftware.chuck.ChuckInterceptor;
@@ -56,9 +56,9 @@ public class RetrofitHelper {
         public Response intercept(Chain chain) throws IOException {
             String token = "";
             String email = "";
-            if (UserInfoManager.getInstance().isLogin()) {
-                token = UserInfoManager.getInstance().getBeiUser().token;
-                email = UserInfoManager.getInstance().getBeiUser().email;
+            if (EdenManager.getInstance().isLogin()) {
+                token = EdenManager.getInstance().getBeiUser().token;
+                email = EdenManager.getInstance().getBeiUser().email;
             }
 
             Request.Builder builder = chain.request().newBuilder();

+ 6 - 6
app/src/main/java/com/miekir/eden/ui/home/about/AboutFragment.java

@@ -12,7 +12,7 @@ import com.miekir.common.utils.ToastTool;
 import com.miekir.eden.R;
 import com.miekir.eden.bean.UpgradeBean;
 import com.miekir.eden.common.ICommonView;
-import com.miekir.eden.manager.UserInfoManager;
+import com.miekir.eden.manager.EdenManager;
 import com.miekir.eden.tool.StringTool;
 import com.miekir.eden.tool.SystemTool;
 import com.miekir.eden.ui.home.about.upgrade.UpgradePresenter;
@@ -46,7 +46,7 @@ public class AboutFragment extends BaseMVPFragment implements View.OnClickListen
         tv_active = rootView.findViewById(R.id.tv_active);
         ll_about = rootView.findViewById(R.id.ll_about);
         TextView tv_email = rootView.findViewById(R.id.tv_email);
-        tv_email.setText(UserInfoManager.getInstance().getBeiUser().email);
+        tv_email.setText(EdenManager.getInstance().getBeiUser().email);
 
         rootView.findViewById(R.id.tv_feedback).setOnClickListener(this);
         rootView.findViewById(R.id.tv_update).setOnClickListener(this);
@@ -64,7 +64,7 @@ public class AboutFragment extends BaseMVPFragment implements View.OnClickListen
             return;
         }
 
-        boolean isActive = UserInfoManager.getInstance().getBeiUser().vip;
+        boolean isActive = EdenManager.getInstance().getBeiUser().vip;
         String title = String.format(TITLE_FORMAT, SystemTool.getVersionName(getActivity()), isActive ?
                 StringTool.getString(R.string.about_active) : StringTool.getString(R.string.about_not_active));
         tv_title.setText(title);
@@ -95,7 +95,7 @@ public class AboutFragment extends BaseMVPFragment implements View.OnClickListen
                 break;
 
             case R.id.ll_email:
-                SystemTool.copyText(getActivity(), UserInfoManager.getInstance().getBeiUser().email);
+                SystemTool.copyText(getActivity(), EdenManager.getInstance().getBeiUser().email);
                 ToastTool.showLong(StringTool.getString(R.string.about_copy_account));
                 break;
 
@@ -106,7 +106,7 @@ public class AboutFragment extends BaseMVPFragment implements View.OnClickListen
 
             case R.id.tv_active:
                 // 立即激活
-                String zfb = UserInfoManager.getInstance().getSystemBean().zfb;
+                String zfb = EdenManager.getInstance().getSystemBean().zfb;
                 if (TextUtils.isEmpty(zfb)) {
                     ToastTool.showShort(StringTool.getString(R.string.about_upgrade_not_available));
                     return;
@@ -122,7 +122,7 @@ public class AboutFragment extends BaseMVPFragment implements View.OnClickListen
                     ToastTool.showShort(StringTool.getString(R.string.about_upgrade_not_available));
                     return;
                 }
-                SystemTool.copyText(getActivity(), UserInfoManager.getInstance().getBeiUser().email);
+                SystemTool.copyText(getActivity(), EdenManager.getInstance().getBeiUser().email);
                 ToastTool.showLong(StringTool.getString(R.string.about_active_copy_account));
                 ActivityTool.openUrl(getActivity(), realZfb);
                 break;

+ 5 - 5
app/src/main/java/com/miekir/eden/ui/home/goods/GoodsAdapter.java

@@ -25,7 +25,7 @@ import com.miekir.eden.BuildConfig;
 import com.miekir.eden.R;
 import com.miekir.eden.base.BaseBeiActivity;
 import com.miekir.eden.constant.ConstantString;
-import com.miekir.eden.manager.UserInfoManager;
+import com.miekir.eden.manager.EdenManager;
 import com.miekir.eden.tool.StringTool;
 import com.miekir.eden.ui.TabActivity;
 import com.miekir.eden.ui.home.goods.detail.GoodsDetailActivity;
@@ -44,7 +44,7 @@ import static android.app.Activity.RESULT_OK;
 //    fl_video_play.setOnClickListener(new View.OnClickListener() {
 //        @Override
 //        public void onClick(View v) {
-//            if (!UserInfoManager.getInstance().getBeiUser().vip) {
+//            if (!EdenManager.getInstance().getBeiUser().vip) {
 //                ToastTool.showShort("请先激活会员");
 //                if (mContext instanceof TabActivity) {
 //                    ((TabActivity) mContext).setCurrentPage(2);
@@ -90,7 +90,7 @@ public class GoodsAdapter extends BaseQuickAdapter<GoodsBean, BaseViewHolder> {
         if (goodsBean.enable) {
             holder.setText(R.id.tv_title, goodsBean.title);
         } else {
-            if (TextUtils.equals(ConstantString.NAME_ADMIN, UserInfoManager.getInstance().getBeiUser().email)) {
+            if (TextUtils.equals(ConstantString.NAME_ADMIN, EdenManager.getInstance().getBeiUser().email)) {
                 holder.setText(R.id.tv_title, goodsBean.title + StringTool.getString(R.string.limited));
             } else {
                 holder.setText(R.id.tv_title, StringTool.getString(R.string.limited_title));
@@ -176,8 +176,8 @@ public class GoodsAdapter extends BaseQuickAdapter<GoodsBean, BaseViewHolder> {
 
 
         // 长按弹出操作
-        if (UserInfoManager.getInstance().isLogin() &&
-                TextUtils.equals(ConstantString.NAME_ADMIN, UserInfoManager.getInstance().getBeiUser().email)) {
+        if (EdenManager.getInstance().isLogin() &&
+                TextUtils.equals(ConstantString.NAME_ADMIN, EdenManager.getInstance().getBeiUser().email)) {
             View view = holder.getView(R.id.cv_goods);
             view.setOnLongClickListener(v -> {
                 // 长按

+ 4 - 4
app/src/main/java/com/miekir/eden/ui/home/goods/detail/MagnetAdapter.java

@@ -17,7 +17,7 @@ import com.miekir.common.utils.ActivityTool;
 import com.miekir.common.utils.ToastTool;
 import com.miekir.eden.R;
 import com.miekir.eden.base.BaseBeiActivity;
-import com.miekir.eden.manager.UserInfoManager;
+import com.miekir.eden.manager.EdenManager;
 import com.miekir.eden.tool.StringTool;
 import com.miekir.eden.ui.home.goods.MagnetBean;
 
@@ -50,7 +50,7 @@ public class MagnetAdapter extends BaseQuickAdapter<MagnetBean, BaseViewHolder>
         //String realUrl = magnetBean.url.startsWith("http") ? magnetBean.url : BuildConfig.HOST_STATIC_RESOURCE+magnetBean.url;
         tv_detail_magnet.setOnClickListener(v -> {
             // 是VIP,直接下载
-            if (UserInfoManager.getInstance().getBeiUser().vip) {
+            if (EdenManager.getInstance().getBeiUser().vip) {
                 if (mContext instanceof BaseBeiActivity) {
                     ((BaseBeiActivity) mContext).showLoading();
                 }
@@ -59,7 +59,7 @@ public class MagnetAdapter extends BaseQuickAdapter<MagnetBean, BaseViewHolder>
             }
 
             // 不是VIP
-            if (UserInfoManager.getInstance().getSystemBean().isAdMode) {
+            if (EdenManager.getInstance().getSystemBean().isAdMode) {
                 // 广告模式,先看广告(领取优惠券)然后继续
                 if (AdManager.getInstance().isAdFinished()) {
                     // 已经看过广告了
@@ -70,7 +70,7 @@ public class MagnetAdapter extends BaseQuickAdapter<MagnetBean, BaseViewHolder>
                     return;
                 }
 
-                String zfb = UserInfoManager.getInstance().getSystemBean().zfb;
+                String zfb = EdenManager.getInstance().getSystemBean().zfb;
                 if (TextUtils.isEmpty(zfb)) {
                     ToastTool.showShort(StringTool.getString(R.string.about_upgrade_not_available));
                     return;

+ 4 - 4
app/src/main/java/com/miekir/eden/ui/mine/MineActivity.java

@@ -20,7 +20,7 @@ import com.miekir.eden.base.BaseBeiActivity;
 import com.miekir.eden.bean.BeiUser;
 import com.miekir.eden.bean.SystemBean;
 import com.miekir.eden.constant.ConstantString;
-import com.miekir.eden.manager.UserInfoManager;
+import com.miekir.eden.manager.EdenManager;
 import com.miekir.eden.tool.StringTool;
 import com.miekir.eden.tool.TimeTool;
 import com.miekir.eden.ui.home.tool.ISystemView;
@@ -55,7 +55,7 @@ public class MineActivity extends BaseBeiActivity implements View.OnClickListene
 
     @Override
     public void initViews(Bundle savedInstanceState) {
-        mUser = UserInfoManager.getInstance().getBeiUser();
+        mUser = EdenManager.getInstance().getBeiUser();
         setTitle(String.format(getString(R.string.mine_hello), TimeTool.getCurrentTimePeriod()));
         ViewTool.setOnClickListener(this, this,
                 new int[]{R.id.tv_my_fav, R.id.btn_exit_login, R.id.btn_set_vip, R.id.btn_set_zfb, R.id.btn_ali_go});
@@ -74,7 +74,7 @@ public class MineActivity extends BaseBeiActivity implements View.OnClickListene
         switch_rest = findViewById(R.id.switch_rest);
         switch_walk = findViewById(R.id.switch_walk);
         switch_ad = findViewById(R.id.switch_ad);
-        mSystemBean = UserInfoManager.getInstance().getSystemBean();
+        mSystemBean = EdenManager.getInstance().getSystemBean();
         if (mSystemBean == null) {
             ToastTool.showShort(StringTool.getString(R.string.reboot));
             finish();
@@ -155,7 +155,7 @@ public class MineActivity extends BaseBeiActivity implements View.OnClickListene
                 .setNegativeButton(StringTool.getString(R.string.cancel), (dialog, which) -> dialog.dismiss())
                 .setPositiveButton(StringTool.getString(R.string.confirm), (DialogInterface dialog, int which) -> {
                     dialog.dismiss();
-                    UserInfoManager.getInstance().setBeiUser(null);
+                    EdenManager.getInstance().setBeiUser(null);
                     setResult(RESULT_OK);
                     finish();
                 }).create();

+ 4 - 4
app/src/main/java/com/miekir/eden/ui/mine/login/LoginActivity.java

@@ -14,7 +14,7 @@ import com.miekir.eden.base.BaseBeiActivity;
 import com.miekir.eden.bean.BeiUser;
 import com.miekir.eden.bean.SystemBean;
 import com.miekir.eden.constant.ConstantString;
-import com.miekir.eden.manager.UserInfoManager;
+import com.miekir.eden.manager.EdenManager;
 import com.miekir.eden.tool.StringTool;
 import com.miekir.eden.ui.TabActivity;
 import com.miekir.eden.ui.home.tool.ISystemView;
@@ -52,7 +52,7 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
         et_password = findViewById(R.id.et_password);
         ViewTool.setOnClickListener(this, this, new int[]{R.id.btn_login, R.id.tv_forget, R.id.toolbar});
 
-        //BeiUser user = UserInfoManager.getInstance().getBeiUser();
+        //BeiUser user = EdenManager.getInstance().getBeiUser();
         //if (user != null && !TextUtils.isEmpty(user.email)) {
         //    et_email.setText(user.email);
         //}
@@ -126,7 +126,7 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
     @Override
     public void onLoginResult(BeiUser user, int code) {
         if (user != null) {
-            UserInfoManager.getInstance().setBeiUser(user);
+            EdenManager.getInstance().setBeiUser(user);
             systemPresenter.getSystemConfig();
         } else {
             dismissLoading();
@@ -139,7 +139,7 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
         dismissLoading();
         if (success) {
             if (resultBean != null) {
-                UserInfoManager.getInstance().setSystemBean(resultBean);
+                EdenManager.getInstance().setSystemBean(resultBean);
             }
 
             ToastTool.showShort(StringTool.getString(R.string.login_success));

+ 85 - 4
app/src/main/java/com/miekir/eden/ui/welcome/WelcomeActivity.java

@@ -2,15 +2,23 @@ package com.miekir.eden.ui.welcome;
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.text.TextUtils;
 
 import androidx.annotation.Nullable;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
 import com.miekir.common.utils.ToastTool;
 import com.miekir.eden.R;
 import com.miekir.eden.base.BaseBeiActivity;
 import com.miekir.eden.bean.BeiUser;
 import com.miekir.eden.bean.SystemBean;
-import com.miekir.eden.manager.UserInfoManager;
+import com.miekir.eden.kawayi.AES;
+import com.miekir.eden.kawayi.API;
+import com.miekir.eden.kawayi.WalkApp;
+import com.miekir.eden.kawayi.bean.BaseBean;
+import com.miekir.eden.kawayi.bean.EncryptBean;
+import com.miekir.eden.manager.EdenManager;
 import com.miekir.eden.tool.StringTool;
 import com.miekir.eden.ui.TabActivity;
 import com.miekir.eden.ui.home.tool.ISystemView;
@@ -19,6 +27,16 @@ import com.miekir.eden.ui.mine.login.ILoginView;
 import com.miekir.eden.ui.mine.login.LoginActivity;
 import com.miekir.mvp.presenter.InjectPresenter;
 
+import java.util.List;
+
+import cn.hutool.http.HttpUtil;
+import io.reactivex.Observable;
+import io.reactivex.ObservableEmitter;
+import io.reactivex.ObservableOnSubscribe;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.functions.Action;
+import io.reactivex.schedulers.Schedulers;
+
 /**
  * Copyright (C), 2019-2020, Miekir
  *
@@ -55,7 +73,70 @@ public class WelcomeActivity extends BaseBeiActivity implements ILoginView, ISys
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         // 不需要动画
         super.onCreate(savedInstanceState);
-        if (UserInfoManager.getInstance().isLogin()) {
+
+        getKawayiSetting();
+    }
+
+    private void getKawayiSetting() {
+        Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
+            @Override
+            //将事件发射出去,持有观察者的对象
+            public void subscribe(ObservableEmitter<String> e) throws Exception {
+                // 图片
+                boolean isPhotoReady = false;
+                String result = HttpUtil.get(API.PHOTO_LIST, 5000);
+                try {
+                    BaseBean homeBean = JSON.parseObject(result, BaseBean.class);
+                    if (homeBean != null) {
+                        String detailJson = AES.decryptKawayi(homeBean.getJson(), WalkApp.KEY_SECRET);
+                        List<EncryptBean> photoList = JSON.parseObject(detailJson, new TypeReference<List<EncryptBean>>() {});
+                        if (photoList != null && photoList.size() > 0) {
+                            isPhotoReady = true;
+                        }
+                    }
+                } catch (Exception photoException) {
+                    photoException.printStackTrace();
+                }
+
+                EdenManager.getInstance().setKwyPhotoReady(isPhotoReady);
+
+                // 视频
+                boolean isVideoReady = false;
+                String videoResult = HttpUtil.get(API.VIDEO, 5000);
+                try {
+                    BaseBean baseBean = JSON.parseObject(videoResult, BaseBean.class);
+                    String videoUrl = baseBean.getJson();
+                    if (!TextUtils.isEmpty(videoUrl)) {
+                        isVideoReady = true;
+                    }
+                } catch (Exception videoException) {
+                    videoException.printStackTrace();
+                }
+                EdenManager.getInstance().setKwyVideoReady(isVideoReady);
+
+                e.onComplete();
+            }
+        });
+
+        observable.observeOn(AndroidSchedulers.mainThread())
+                .subscribeOn(Schedulers.io())
+                .doOnNext(result -> {
+                    // 这里是主线程
+                    //boolean isMain = Looper.getMainLooper().getThread().getId() == Thread.currentThread().getId();
+                })
+                .doOnError(err -> {
+                    err.printStackTrace();
+                })
+                .doOnComplete(new Action() {
+                    @Override
+                    public void run() throws Exception {
+                        goOnActivity();
+                    }
+                }).subscribe();
+    }
+
+    private void goOnActivity() {
+        if (EdenManager.getInstance().isLogin()) {
             presenter.submitLogin();
         } else {
             startActivity(new Intent(WelcomeActivity.this, LoginActivity.class));
@@ -66,7 +147,7 @@ public class WelcomeActivity extends BaseBeiActivity implements ILoginView, ISys
     @Override
     public void onLoginResult(BeiUser user, int code) {
         if (user != null) {
-            UserInfoManager.getInstance().setBeiUser(user);
+            EdenManager.getInstance().setBeiUser(user);
             mSystemPresenter.getSystemConfig();
         } else {
             ToastTool.showShort(StringTool.getString(R.string.init_fail));
@@ -78,7 +159,7 @@ public class WelcomeActivity extends BaseBeiActivity implements ILoginView, ISys
     @Override
     public void onGetConfigResult(boolean success, int code, SystemBean systemBean) {
         if (success && systemBean != null) {
-            UserInfoManager.getInstance().setSystemBean(systemBean);
+            EdenManager.getInstance().setSystemBean(systemBean);
             startActivity(new Intent(WelcomeActivity.this, TabActivity.class));
         } else {
             ToastTool.showShort(StringTool.getString(R.string.init_fail));