Selaa lähdekoodia

1.增加长按退出图片显示deviceInfo
2.增加应用崩溃后展示界面(可重启可退出)
3.修改渠道部分逻辑使代码提高可读性

FailedToRead 3 vuotta sitten
vanhempi
commit
22a913d644
30 muutettua tiedostoa jossa 471 lisäystä ja 216 poistoa
  1. 4 3
      .idea/misc.xml
  2. 2 1
      app/src/fragmentUser/layout/popupwindow_exit_login.xml
  3. 1 1
      app/src/main/AndroidManifest.xml
  4. 43 16
      app/src/main/java/com/edufound/reader/activity/CrashDialogActivity.java
  5. 2 0
      app/src/main/java/com/edufound/reader/activity/MainActivity.java
  6. 7 11
      app/src/main/java/com/edufound/reader/activity/RecordActivity.java
  7. 18 36
      app/src/main/java/com/edufound/reader/activity/UserInfoSettingActivity.java
  8. 37 2
      app/src/main/java/com/edufound/reader/apiserver/UserApiServerImpl.java
  9. 20 11
      app/src/main/java/com/edufound/reader/application/EApplication.java
  10. 40 32
      app/src/main/java/com/edufound/reader/base/BaseActivity.java
  11. 2 2
      app/src/main/java/com/edufound/reader/contract/UserInfoSettingContract.java
  12. 2 15
      app/src/main/java/com/edufound/reader/fragment/MyTabFragment.java
  13. 17 18
      app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java
  14. 1 1
      app/src/main/java/com/edufound/reader/model/LoginAlertModel.java
  15. 0 9
      app/src/main/java/com/edufound/reader/model/UserInfoSettingModel.java
  16. 66 3
      app/src/main/java/com/edufound/reader/popwindow/PopWindowUtil.java
  17. 28 5
      app/src/main/java/com/edufound/reader/presenter/LoginAlertPresenter.java
  18. 7 20
      app/src/main/java/com/edufound/reader/presenter/MainPresenter.java
  19. 1 1
      app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java
  20. 19 3
      app/src/main/java/com/edufound/reader/presenter/UserInfoSettingPresenter.java
  21. 5 1
      app/src/main/java/com/edufound/reader/support/DebugSafeModeTipActivity.java
  22. 1 1
      app/src/main/java/com/edufound/reader/support/DebugSafeModeUI.java
  23. 10 2
      app/src/main/java/com/edufound/reader/util/Consts.java
  24. 10 10
      app/src/main/java/com/edufound/reader/util/DeviceUtil.java
  25. 22 7
      app/src/main/java/com/edufound/reader/util/EfunboxUtil.java
  26. BIN
      app/src/main/res/drawable/activity_crash_icon.png
  27. 0 1
      app/src/main/res/layout/activity_comment.xml
  28. 70 3
      app/src/main/res/layout/activity_crash_dialog.xml
  29. 35 0
      app/src/main/res/layout/window_deviceinfo.xml
  30. 1 1
      app/src/main/res/values/themes.xml

+ 4 - 3
.idea/misc.xml

@@ -13,7 +13,7 @@
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/exception/drawable/list_divider_horizontal.xml" value="0.4699248120300752" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/exception/drawable/safe_mode_drawable.xml" value="0.4699248120300752" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/exception/drawable/theme_stroke_selector.xml" value="0.4699248120300752" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/exception/layout/activity_safe_mode_warning.xml" value="0.5" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/exception/layout/activity_safe_mode_warning.xml" value="0.33" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/exception/layout/fragment_crash_log.xml" value="0.20924574209245742" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/exception/layout/item.xml" value="0.20924574209245742" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/exception/layout/item_crash_log.xml" value="0.20924574209245742" />
@@ -68,8 +68,8 @@
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/popupwindow_select_grade_griditem_divder.xml" value="0.5048828125" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/popupwindow_select_grade_selector.xml" value="0.4140625" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_alert_login.xml" value="0.22" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_comment.xml" value="0.33" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_crash_dialog.xml" value="0.12" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_comment.xml" value="0.22" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_crash_dialog.xml" value="0.33" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_customerservice.xml" value="0.5" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_main.xml" value="0.3107843137254902" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_message.xml" value="0.14" />
@@ -109,6 +109,7 @@
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/popupwindow_exit_app.xml" value="0.25" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/popupwindow_record_status.xml" value="0.5" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/toast.xml" value="0.67" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/window_deviceinfo.xml" value="0.33" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" value="0.4931640625" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml" value="0.4699248120300752" />
       </map>

+ 2 - 1
app/src/fragmentUser/layout/popupwindow_exit_login.xml

@@ -33,7 +33,8 @@
                     <ImageView
                             android:id="@+id/popupwindow_exit_login_image"
                             android:layout_width="match_parent"
-                            android:layout_height="match_parent"></ImageView>
+                            android:layout_height="match_parent"
+                            android:scaleType="fitXY"></ImageView>
 
                     <TextView
                             android:layout_width="wrap_content"

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -79,7 +79,7 @@
                 android:maxAspectRatio="2.1"
                 android:resizeableActivity="true"
                 android:screenOrientation="landscape"
-                android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"
+                android:theme="@style/AppStartTheme"
                 android:windowSoftInputMode="adjustNothing|stateHidden">
 
         </activity>

+ 43 - 16
app/src/main/java/com/edufound/reader/activity/CrashDialogActivity.java

@@ -3,16 +3,21 @@ package com.edufound.reader.activity;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
+import android.content.Intent;
 import android.os.Build;
+import android.view.KeyEvent;
 import android.view.ViewGroup;
+import android.widget.FrameLayout;
 
 import com.baidu.duer.bot.directive.payload.AmountInfo;
 import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
+import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BaseMvpActivity;
 import com.edufound.reader.contract.CrashDialogContract;
 import com.edufound.reader.presenter.CrashDialogPresenter;
+import com.orhanobut.logger.Logger;
 
 import java.util.HashMap;
 
@@ -24,35 +29,57 @@ public class CrashDialogActivity extends BaseMvpActivity<CrashDialogPresenter> i
 
     Activity mActivity;
 
+    @BindView(id = R.id.activity_crash_dialog_restart)
+    FrameLayout mRestart;
+
+    @BindView(id = R.id.activity_crash_dialog_exitapp)
+    FrameLayout mExitApp;
+
     @Override
     public int getLayoutId() {
         return R.layout.activity_crash_dialog;
     }
 
+    @RequiresApi(api = Build.VERSION_CODES.N)
     @Override
     public void initView() {
         mPresenter = new CrashDialogPresenter();
         mPresenter.attachView(this);
         mActivity = this;
-        AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
-        builder.setTitle("error");
-        builder.setIcon(R.drawable.icon);
-        builder.setMessage("出现异常");
-        builder.setNegativeButton("退出", new DialogInterface.OnClickListener() {
-            @RequiresApi(api = Build.VERSION_CODES.N)
-            @Override
-            public void onClick(DialogInterface dialogInterface, int i) {
-                dialogInterface.dismiss();
-                EApplication.mActivityList.forEach((item) -> {
-                    item.finish();
-                });
-                EApplication.killAppProcess(mActivity);
-                android.os.Process.killProcess(android.os.Process.myPid());
+//        AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
+//        builder.setTitle("error");
+//        builder.setIcon(R.drawable.icon);
+//        builder.setMessage("出现异常");
+//        builder.setNegativeButton("退出", new DialogInterface.OnClickListener() {
+//            @RequiresApi(api = Build.VERSION_CODES.N)
+//            @Override
+//            public void onClick(DialogInterface dialogInterface, int i) {
+//                dialogInterface.dismiss();
+//                exitApp();
+//            }
+//        });
+//        builder.create().show();
+
+        addUiClickListener(mRestart, o -> {
+            for (int i = 0; i < EApplication.mActivityList.size(); i++) {
+                EApplication.mActivityList.get(i).finish();
             }
+            Intent intent = new Intent(getActivity(), MainActivity.class);
+            intent.putExtra("defaultIndex", 1);
+            startActivity(intent);
         });
-        builder.create().show();
-
+        addUiClickListener(mExitApp, o -> {
+            EApplication.killAppProcess(getActivity());
+            System.exit(1);
+        });
+    }
 
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_ESCAPE || keyCode == KeyEvent.KEYCODE_BACK) {
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
     }
 
     @Override

+ 2 - 0
app/src/main/java/com/edufound/reader/activity/MainActivity.java

@@ -13,6 +13,7 @@ import android.view.ViewGroup;
 import android.widget.ImageView;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
+import android.widget.TextView;
 
 import com.baidu.duer.bot.directive.payload.AmountInfo;
 import com.baidu.duer.botsdk.BotIntent;
@@ -68,6 +69,7 @@ public class MainActivity extends BaseMvpActivity<MainPresenter> implements Main
         mPresenter.userIsLogin();
         mPresenter.checkModelIsDebug();
 
+     
         if (getIntent() != null && getIntent().getStringExtra("url") != null && !getIntent().getStringExtra("url").equals("")) {
             //efunbox://com.edufound.reader/main?resid=11132
             Uri uri = Uri.parse(getIntent().getStringExtra("url"));

+ 7 - 11
app/src/main/java/com/edufound/reader/activity/RecordActivity.java

@@ -71,7 +71,6 @@ public class RecordActivity extends BaseMvpActivity<RecordPresenter> implements
     AnimationDrawable mMikeAnim;
 
 
-
     @Override
     public int getLayoutId() {
         return R.layout.activity_record;
@@ -118,19 +117,16 @@ public class RecordActivity extends BaseMvpActivity<RecordPresenter> implements
                 return;
             } else {
                 if (EfunboxUtil.checkLogin(mActivity)) {
-                    if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
-                        if (Consts.getmConstsBaiDuUserBean().getUserInfo().getIsVip() == 1) {
-                            if (isRecordNow) {
-                                refRecordStatus();
-                            } else {
-                                startRecordStatus();
-                            }
+                    if (EfunboxUtil.checkIsVip()) {
+                        if (isRecordNow) {
+                            refRecordStatus();
                         } else {
-//                            CusToast.getInstance(mActivity).show("请购买会员后尝试",2000);
-                            BotRegisterListener.payBaiDuVip();
+                            startRecordStatus();
                         }
-
+                    } else {
+                        EfunboxUtil.userPay(getActivity());
                     }
+
                 }
             }
         });

+ 18 - 36
app/src/main/java/com/edufound/reader/activity/UserInfoSettingActivity.java

@@ -95,24 +95,7 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             hideSoftInput();
             mActivity.finish();
         });
-        addUiClickListener(mLoginOut, o -> {
-            if (mNickName.hasFocus()) {
-                mNickName.clearFocus();
-                return;
-            }
-            PopWindowUtil.showExitLoginWindow(mActivity, getRootView(), new PopUtilClickListener() {
-                @Override
-                public void clickCancel() {
-
-                }
 
-                @Override
-                public void clickSubmit(Object obj) {
-                    Toast.makeText(mActivity, "退出账号", Toast.LENGTH_SHORT).show();
-                    mPresenter.loginOut();
-                }
-            });
-        });
         addUiClickListener(mPrivServices, o -> {
             if (mNickName.hasFocus()) {
                 mNickName.clearFocus();
@@ -141,12 +124,12 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             mCancellationLayout.setVisibility(View.VISIBLE);
             mLoginOut.setVisibility(View.VISIBLE);
         }
-        addUiClickListener(mCancellationLayout, o -> {
+        addUiClickListener(mLoginOut, o -> {
             if (mNickName.hasFocus()) {
                 mNickName.clearFocus();
                 return;
             }
-            PopWindowUtil.showCancellationAccountWindow(mActivity, getRootView(), new PopUtilClickListener() {
+            PopWindowUtil.showExitLoginWindow(mActivity, getRootView(), new PopUtilClickListener() {
                 @Override
                 public void clickCancel() {
 
@@ -154,42 +137,43 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
 
                 @Override
                 public void clickSubmit(Object obj) {
-                    Toast.makeText(mActivity, "注销账号", Toast.LENGTH_SHORT).show();
+                    Toast.makeText(mActivity, "退出账号", Toast.LENGTH_SHORT).show();
+                    mPresenter.loginOut();
                 }
             });
         });
-
-        addUiClickListener(mBindWeChat, o -> {
+        addUiClickListener(mCancellationLayout, o -> {
             if (mNickName.hasFocus()) {
                 mNickName.clearFocus();
                 return;
             }
-            PopWindowUtil.showBindWeChatWindow(mActivity, getRootView(), new PopUtilClickListener() {
+            PopWindowUtil.showCancellationAccountWindow(mActivity, getRootView(), new PopUtilClickListener() {
                 @Override
                 public void clickCancel() {
 
                 }
 
                 @Override
-                public void clickSubmit(Object object) {
-
+                public void clickSubmit(Object obj) {
+                    Toast.makeText(mActivity, "注销账号", Toast.LENGTH_SHORT).show();
+                    mPresenter.userCancellation();
                 }
             });
         });
-        addUiClickListener(mSwitchLayout, o -> {
+
+        addUiClickListener(mBindWeChat, o -> {
             if (mNickName.hasFocus()) {
                 mNickName.clearFocus();
                 return;
             }
-//            BotRegisterListener.BaiDuLogin();
-            if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
-                //百度渠道调用百度的授权
-                BotRegisterListener.getBaiDuVipInfo();
-            } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
-                //义方调用普通版登录
-                Intent tologin = new Intent(getActivity(), LoginAlertActivity.class);
-                getActivity().startActivity(tologin);
+            PopWindowUtil.showBindWeChatWindow(mActivity, getRootView(), null);
+        });
+        addUiClickListener(mSwitchLayout, o -> {
+            if (mNickName.hasFocus()) {
+                mNickName.clearFocus();
+                return;
             }
+            EfunboxUtil.userLogin(getActivity());
         });
 
         addUiClickListener(mGenderMale, o -> {
@@ -199,7 +183,6 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             }
             mGenderMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_true_bg);
             mGenderFeMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_bg);
-            Consts.getmConstsUserBean().setGender("1");
             mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
 
         });
@@ -210,7 +193,6 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             }
             mGenderMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_bg);
             mGenderFeMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_true_bg);
-            Consts.getmConstsUserBean().setGender("0");
             mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
         });
         addUiClickListener(mGrade, o -> {

+ 37 - 2
app/src/main/java/com/edufound/reader/apiserver/UserApiServerImpl.java

@@ -1,6 +1,7 @@
 package com.edufound.reader.apiserver;
 
 import android.app.Activity;
+import android.telecom.Call;
 
 import com.edufound.reader.bean.UserEventBean;
 import com.edufound.reader.botsdk.BotConstants;
@@ -33,7 +34,7 @@ public class UserApiServerImpl implements userApiServer {
 
 
     /**
-     * 注册用户
+     * 瞎JB注册用户
      */
     @Override
     public void registerUser(Activity activity, String userJson, Callback callback) {
@@ -41,7 +42,7 @@ public class UserApiServerImpl implements userApiServer {
     }
 
     /**
-     * 手机号注册
+     * 不用验证码的手机号注册
      */
     @Override
     public void registerMobile(Activity activity, String userJson, Callback callback) {
@@ -108,6 +109,24 @@ public class UserApiServerImpl implements userApiServer {
     public void postUserEvent(Activity activity, String action) {
         OkHttpClient.doPostAsync(activity, new HttpInfo.Builder().setUrl(API + "/userEvent").addParamJson(new UserEventBean(action).toJson()), new EfunboxCallBack(null));
     }
+
+    @Override
+    public void userCancellation(Activity activity, Callback callback) {
+        OkHttpClient.doPostAsync(activity, new HttpInfo.Builder().setUrl(API + "/user/logout"), callback);
+    }
+
+    @Override
+    public void userLoginOut(Activity activity, Callback callback) {
+        OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/user/logOut"), callback);
+    }
+
+    /**
+     * 手机号验证码登录
+     */
+    @Override
+    public void registerMobileByVCode(Activity activity, String userJson, Callback callback) {
+        OkHttpClient.doPostAsync(activity, HttpInfo.Builder().addParamJson(userJson).setUrl(API + "/user/mobile"), callback);
+    }
 }
 
 
@@ -173,4 +192,20 @@ interface userApiServer {
      * 用户操作event
      */
     void postUserEvent(Activity activity, String action);
+
+
+    /**
+     * 注销账号
+     */
+    void userCancellation(Activity activity, Callback callback);
+
+    /**
+     * 退出登录
+     */
+    void userLoginOut(Activity activity, Callback callback);
+
+    /**
+     * 手机号验证码注册
+     */
+    void registerMobileByVCode(Activity activity, String userJson, Callback callback);
 }

+ 20 - 11
app/src/main/java/com/edufound/reader/application/EApplication.java

@@ -7,6 +7,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -45,6 +46,8 @@ import org.xmlpull.v1.XmlPullParserFactory;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.RequiresApi;
+
 public class EApplication extends Application {
 
     private int activityAount = 0;
@@ -56,7 +59,7 @@ public class EApplication extends Application {
     public void onCreate() {
         super.onCreate();
         try {
-            Consts.setIsDebug(false);
+            Consts.setIsDebug(true);
             Consts.setmApplicAtion(this);
 
             //初始化异常监听
@@ -133,7 +136,7 @@ public class EApplication extends Application {
             }
         }
         android.os.Process.killProcess(android.os.Process.myPid());
-        System.exit(0);
+//        System.exit(0);
     }
 
     ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
@@ -193,8 +196,8 @@ public class EApplication extends Application {
                 new Handler(Looper.getMainLooper()).post(new Runnable() {
                     @Override
                     public void run() {
-                        toast.setText(R.string.safe_mode_excep_tips);
-                        toast.show();
+//                        toast.setText(R.string.safe_mode_excep_tips);
+//                        toast.show();
                     }
                 });
             }
@@ -202,32 +205,38 @@ public class EApplication extends Application {
             @Override
             protected void onBandageExceptionHappened(Throwable throwable) {
                 throwable.printStackTrace();//打印警告级别log,该throwable可能是最开始的bug导致的,无需关心
-                toast.setText("Cockroach Worked");
-                toast.show();
+//                toast.setText("Cockroach Worked");
+//                toast.show();
             }
 
             @Override
             protected void onEnterSafeMode() {
-                int tips = R.string.safe_mode_tips;
-                Toast.makeText(Consts.getmApplicAtion(), getResources().getString(tips), Toast.LENGTH_LONG).show();
-                DebugSafeModeUI.showSafeModeUI();
+//                int tips = R.string.safe_mode_tips;
+//                Toast.makeText(Consts.getmApplicAtion(), getResources().getString(tips), Toast.LENGTH_LONG).show();
+//                DebugSafeModeUI.showSafeModeUI();
 
                 if (Consts.isIsDebug()) {
                     Intent intent = new Intent(Consts.getmApplicAtion(), DebugSafeModeTipActivity.class);
-                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                     startActivity(intent);
                 } else {
                     Intent intent = new Intent(Consts.getmApplicAtion(), CrashDialogActivity.class);
-                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                     startActivity(intent);
                 }
             }
 
+            @RequiresApi(api = Build.VERSION_CODES.N)
             @Override
             protected void onMayBeBlackScreen(Throwable e) {
                 Thread thread = Looper.getMainLooper().getThread();
+                e.printStackTrace();
                 //黑屏时建议直接杀死app
                 sysExcepHandler.uncaughtException(thread, new RuntimeException("black screen"));
+                mActivityList.forEach((item) -> {
+                    item.finish();
+                });
+                killAppProcess(Consts.getmApplicAtion());
             }
 
         });

+ 40 - 32
app/src/main/java/com/edufound/reader/base/BaseActivity.java

@@ -351,39 +351,47 @@ public abstract class BaseActivity extends AppCompatActivity {
                     animatorSet.start();
                     break;
                 case SHOW_FIRST_TIP:
-                    mFirstIntoView = LayoutInflater.from(getBaseContext()).inflate(R.layout.first_tip, null);
-                    ImageView touch = mFirstIntoView.findViewById(R.id.first_touch);
-                    FrameLayout.LayoutParams first_params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-                    first_params.gravity = Gravity.RIGHT | Gravity.CENTER;
-                    first_params.rightMargin = SizeUtils.dp2px(Consts.getmApplicAtion().getBaseContext(), 30);
-                    mFirstIntoView.setLayoutParams(first_params);
-                    ObjectAnimator translationYUp = ObjectAnimator.ofFloat(touch, "translationY", 80, -30);
-                    ObjectAnimator translationYDown = ObjectAnimator.ofFloat(touch, "translationY", -30, 80);
-                    translationYUp.setDuration(1500);
-                    translationYDown.setDuration(1500);
-                    LinearInterpolator interpolator = new LinearInterpolator();
-                    translationYUp.setInterpolator(interpolator); //设置匀速旋转,不卡顿
-                    translationYDown.setInterpolator(interpolator); //设置匀速旋转,不卡顿
-                    getRootView().addView(mFirstIntoView);
-                    AnimatorSet first_animatorSet = new AnimatorSet();
-                    first_animatorSet.addListener(new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            super.onAnimationEnd(animation);
-                            first_animatorSet.start();
+                    if (mFirstIntoView == null) {
+                        mFirstIntoView = LayoutInflater.from(getBaseContext()).inflate(R.layout.first_tip, null);
+                        ImageView touch = mFirstIntoView.findViewById(R.id.first_touch);
+                        FrameLayout.LayoutParams first_params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+                        first_params.gravity = Gravity.RIGHT | Gravity.CENTER;
+                        first_params.rightMargin = SizeUtils.dp2px(Consts.getmApplicAtion().getBaseContext(), 30);
+                        mFirstIntoView.setLayoutParams(first_params);
+                        ObjectAnimator translationYUp = ObjectAnimator.ofFloat(touch, "translationY", 80, -30, 80);
+//                        ObjectAnimator translationYDown = ObjectAnimator.ofFloat(touch, "translationY", -30, 80);
+                        translationYUp.setDuration(1500);
+//                        translationYDown.setDuration(1500);
+                        translationYUp.setRepeatCount(-1);
+//                        translationYDown.setRepeatCount(-1);
+                        LinearInterpolator interpolator = new LinearInterpolator();
+                        translationYUp.setInterpolator(interpolator); //设置匀速旋转,不卡顿
+//                        translationYDown.setInterpolator(interpolator); //设置匀速旋转,不卡顿
+                        getRootView().addView(mFirstIntoView);
+                        AnimatorSet first_animatorSet = new AnimatorSet();
+//                        first_animatorSet.addListener(new AnimatorListenerAdapter() {
+//                            @Override
+//                            public void onAnimationEnd(Animator animation) {
+//                                super.onAnimationEnd(animation);
+//                                if (first_animatorSet != null) {
+//                                    first_animatorSet.start();
+//                                }
+//
+//                            }
+//                        });
+                        mFirstIntoView.setOnTouchListener(new View.OnTouchListener() {
+                            @Override
+                            public boolean onTouch(View view, MotionEvent motionEvent) {
+                                first_animatorSet.pause();
+                                removeFirstTipView();
+                                return true;
+                            }
+                        });
+//                        first_animatorSet.playSequentially(translationYUp, translationYDown);
+                        first_animatorSet.play(translationYUp);
+                        first_animatorSet.start();
+                    }
 
-                        }
-                    });
-                    mFirstIntoView.setOnTouchListener(new View.OnTouchListener() {
-                        @Override
-                        public boolean onTouch(View view, MotionEvent motionEvent) {
-                            first_animatorSet.pause();
-                            removeFirstTipView();
-                            return true;
-                        }
-                    });
-                    first_animatorSet.playSequentially(translationYUp, translationYDown);
-                    first_animatorSet.start();
                     MMKVUtil.getInstance().encode("first_into", false);
                     break;
             }

+ 2 - 2
app/src/main/java/com/edufound/reader/contract/UserInfoSettingContract.java

@@ -12,11 +12,9 @@ import com.okhttplib.callback.Callback;
 public interface UserInfoSettingContract {
     interface Model {
 
-        void getMyInfo(Activity activity, Callback callback);
 
         void updateMyInfo(Activity activity, String json, Callback callback);
 
-        void loginOut(Activity activity, Callback callback);
 
     }
 
@@ -43,5 +41,7 @@ public interface UserInfoSettingContract {
         void getBaiDuPhone(String token);
 
         void registerMobile(String phone);
+
+        void userCancellation();
     }
 }

+ 2 - 15
app/src/main/java/com/edufound/reader/fragment/MyTabFragment.java

@@ -1,7 +1,6 @@
 package com.edufound.reader.fragment;
 
 import android.annotation.SuppressLint;
-import android.content.Intent;
 import android.graphics.Rect;
 import android.os.Build;
 import android.os.Bundle;
@@ -13,38 +12,27 @@ import android.widget.HorizontalScrollView;
 import android.widget.ImageView;
 import android.widget.Space;
 import android.widget.TextView;
-import android.widget.Toast;
 
-import com.baidu.duer.bot.directive.payload.AmountInfo;
 import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.activity.CustomerServiceActivity;
 import com.edufound.reader.activity.MessageActivity;
 import com.edufound.reader.activity.MyCollectionActivity;
 import com.edufound.reader.activity.MyFollowActivity;
-import com.edufound.reader.activity.PayActivity;
 import com.edufound.reader.activity.SafflowerActivity;
 import com.edufound.reader.activity.UserInfoSettingActivity;
 import com.edufound.reader.base.BaseMvpFragment;
 import com.edufound.reader.bean.MyInfoBean;
 import com.edufound.reader.bean.UserEventEnum;
-import com.edufound.reader.bean.UserRecordBean;
-import com.edufound.reader.botsdk.BotRegisterListener;
 import com.edufound.reader.contract.MyTabFragmentContract;
 import com.edufound.reader.presenter.MyTabFragmentPresenter;
-import com.edufound.reader.receiver.BackPageReceiver;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.TimeUtil;
 import com.jakewharton.rxbinding4.view.RxView;
-import com.orhanobut.logger.Logger;
 
-import java.util.HashMap;
-
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
-import io.reactivex.rxjava3.annotations.Nullable;
 import io.reactivex.rxjava3.functions.Consumer;
 
 public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> implements MyTabFragmentContract.View {
@@ -156,8 +144,7 @@ public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> imple
 //        });
         addUiClick(mHeadUserVip, o -> {
 //            Toast.makeText(getActivity(), "click vip", Toast.LENGTH_SHORT).show();
-//            toNextActivity(PayActivity.class);
-            BotRegisterListener.payBaiDuVip();
+            EfunboxUtil.userPay(getActivity());
 
         });
         addUiClick(mHeadUserRedFlower, o -> {
@@ -331,7 +318,7 @@ public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> imple
     @Override
     protected void botHandleIntent(BotIntent intent, String customData) {
         super.botHandleIntent(intent, customData);
-        if (Consts.getmConstsBaiDuUserBean().getUserInfo().getIsVip() == 1) {
+        if (EfunboxUtil.checkIsVip()) {
             //是VIP
             getIsBuySuccess(TimeUtil.getDateFromSeconds(String.valueOf(Consts.getmConstsBaiDuUserBean().getUserInfo().getEndTimestamp())));
         }

+ 17 - 18
app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java

@@ -3,7 +3,6 @@ package com.edufound.reader.fragment;
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.os.Bundle;
-import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.animation.LinearInterpolator;
@@ -11,7 +10,6 @@ import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
-import android.widget.Toast;
 
 import com.baidu.duer.bot.directive.payload.AmountInfo;
 import com.baidu.duer.botsdk.BotIntent;
@@ -24,11 +22,9 @@ import com.edufound.reader.base.BaseMvpFragment;
 import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.UserEventEnum;
 import com.edufound.reader.bean.UserRecordBean;
-import com.edufound.reader.botsdk.BotRegisterListener;
 import com.edufound.reader.contract.RecommendFragmentContract;
 import com.edufound.reader.presenter.RecommendFragmentPresenter;
 import com.edufound.reader.util.Consts;
-import com.edufound.reader.util.EfunboxCallBack;
 import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.MMKVUtil;
@@ -167,18 +163,17 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
 
         addUiClickListener(mToRecordLayout, o -> {
             mPresenter.getUserApi().postUserEvent(getActivity(), UserEventEnum.EVENT_RECREAD.getEvent());
-            if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
-                if (Consts.getmConstsBaiDuUserBean() == null) {
-                    return;
-                }
-                if (Consts.getmConstsBaiDuUserBean().getUserInfo().getIsVip() == 1) {
+            if (EfunboxUtil.checkLogin(getActivity())) {
+                //登陆了,判断是否是VIP
+                if (EfunboxUtil.checkIsVip()) {
+                    //如果是VIP
                     Bundle bundle = new Bundle();
                     bundle.putString("exampleId", mPresenter.getCurVideoExampleId().toString());
                     toNextActivity(RecordActivity.class, bundle);
                 } else {
-//                    Toast.makeText(getActivity(), "您还不是VIP,请购买后使用", Toast.LENGTH_SHORT).show();
-                    BotRegisterListener.payBaiDuVip();
+                    EfunboxUtil.userPay(getActivity());
                 }
+
             }
         });
         mPresenter.initVideoList(mRecyclerView, mFragmentType, startPosition);
@@ -210,7 +205,7 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
     public void onResume() {
         mPresenter.fragmentResume(mRecyclerView);
         if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
-            if (Consts.getmConstsBaiDuUserBean() != null && Consts.getmConstsBaiDuUserBean().getUserInfo().getIsVip() == 1) {
+            if (Consts.getmConstsBaiDuUserBean() != null && EfunboxUtil.checkIsVip()) {
                 isUserVip.setVisibility(View.INVISIBLE);
             }
         }
@@ -284,11 +279,13 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
 
 
         addUiClickListener(mUserHeadLayout, o -> {
-            Bundle bundle = new Bundle();
-            bundle.putString("other_uid", bean.getUser().getUid());
-            bundle.putString("record_id", bean.getUserRead().getId());
-            bundle.putString("intoPage", "RecommendFragment");
-            toNextActivity(OthersRecordActivity.class, bundle);
+            if (EfunboxUtil.checkLogin(getActivity())) {
+                Bundle bundle = new Bundle();
+                bundle.putString("other_uid", bean.getUser().getUid());
+                bundle.putString("record_id", bean.getUserRead().getId());
+                bundle.putString("intoPage", "RecommendFragment");
+                toNextActivity(OthersRecordActivity.class, bundle);
+            }
         });
 
         addUiClickListener(mCollectionLayout, o -> {
@@ -353,6 +350,7 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
 
     @Override
     public void onDestroy() {
+
         mPresenter.activityDestory();
         mPresenter.detachView();
         super.onDestroy();
@@ -377,13 +375,14 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
     @Override
     public void onDestroyView() {
         super.onDestroyView();
+
     }
 
     @Override
     protected void botHandleIntent(BotIntent intent, String customData) {
         super.botHandleIntent(intent, customData);
         Logger.e("botHandleIntent:" + customData);
-        if (Consts.getmConstsBaiDuUserBean().getUserInfo().getIsVip() == 1) {
+        if (EfunboxUtil.checkIsVip()) {
             isUserVip.setVisibility(View.INVISIBLE);
         }
     }

+ 1 - 1
app/src/main/java/com/edufound/reader/model/LoginAlertModel.java

@@ -16,7 +16,7 @@ public class LoginAlertModel implements LoginAlertContract.Model {
     @Override
     public void getVCode(Activity activity, String phone, Callback callback) {
         ///member/verifyCode
-        OkHttpClient.doGetAsync(activity, HttpInfo.Builder().setUrl(API + "/member/verifyCode"), callback);
+        OkHttpClient.doGetAsync(activity, HttpInfo.Builder().setUrl(API + "/user/verifyCode").addParam("mobileNo", phone), callback);
 
     }
 }

+ 0 - 9
app/src/main/java/com/edufound/reader/model/UserInfoSettingModel.java

@@ -12,17 +12,8 @@ public class UserInfoSettingModel implements UserInfoSettingContract.Model {
     private String API = Consts.getFinalApi();
 
     @Override
-    public void getMyInfo(Activity activity, Callback callback) {
-        OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/user/my"), callback);
-    }
-
-    @Override
     public void updateMyInfo(Activity activity, String json, Callback callback) {
         OkHttpClient.doPutAsync(activity, new HttpInfo.Builder().setUrl(API + "/user").addParamJson(json), callback);
     }
 
-    @Override
-    public void loginOut(Activity activity, Callback callback) {
-        OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/user/logOut"), callback);
-    }
 }

+ 66 - 3
app/src/main/java/com/edufound/reader/popwindow/PopWindowUtil.java

@@ -1,11 +1,16 @@
 package com.edufound.reader.popwindow;
 
 import android.app.Activity;
+import android.app.Dialog;
 import android.content.Context;
+import android.graphics.Color;
+import android.view.Display;
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.PopupWindow;
@@ -19,13 +24,28 @@ import com.edufound.reader.cusview.GridRadioGroup;
 import com.edufound.reader.listener.PopUtilClickListener;
 import com.edufound.reader.listener.PopupRecordStatusListener;
 import com.edufound.reader.presenter.PopWindowPresneter;
+import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.DeviceUtil;
+import com.edufound.reader.util.DeviceUuidFactory;
 import com.edufound.reader.util.GlideUtils;
+import com.edufound.reader.util.SizeUtils;
 import com.jakewharton.rxbinding4.view.RxView;
 import com.orhanobut.logger.Logger;
+import com.trello.rxlifecycle4.android.ActivityEvent;
 
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import androidx.annotation.Nullable;
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.Observer;
 import io.reactivex.rxjava3.functions.Consumer;
+import io.reactivex.rxjava3.functions.Function;
+import kotlin.Unit;
+
+import static com.trello.rxlifecycle4.RxLifecycle.bindUntilEvent;
 
 public class PopWindowUtil {
     private static PopWindowPresneter mPresenter;
@@ -51,7 +71,7 @@ public class PopWindowUtil {
         }
     }
 
-    public static void showExitAppWindow(Context context, View parent) {
+    public static void showExitAppWindow(Activity context, View parent) {
         initPresenter();
         if (checkWindowShoing()) {
             return;
@@ -69,6 +89,13 @@ public class PopWindowUtil {
         setClickListener(cancel, o -> {
             mPopupWindow.dismiss();
         });
+
+
+        RxView.longClicks(image).subscribe(o -> {
+            //显示deviceInfo
+            showDeviceInfo(context);
+        });
+
         mPopupWindow = new PopupWindow(dialog_view, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
         mPopupWindow.setFocusable(true);
         mPopupWindow.showAtLocation(parent, Gravity.CENTER, 0, 0);
@@ -194,7 +221,7 @@ public class PopWindowUtil {
     }
 
 
-    public static void showBindWeChatWindow(Activity context, View parent, PopUtilClickListener listener) {
+    public static void showBindWeChatWindow(Activity context, View parent, @Nullable PopUtilClickListener listener) {
         initPresenter();
         if (checkWindowShoing()) {
             return;
@@ -206,7 +233,9 @@ public class PopWindowUtil {
         TextView text = dialog_view.findViewById(R.id.popupwindow_bind_wechat_name);
         setClickListener(back, o -> {
             mPopupWindow.dismiss();
-            listener.clickCancel();
+            if (listener != null) {
+                listener.clickCancel();
+            }
             mPresenter.getPopHandler().removeMessages(0x1312);
         });
         mPresenter.getBindWeChatPath(context, image);
@@ -295,6 +324,40 @@ public class PopWindowUtil {
     }
 
 
+    private static void showDeviceInfo(Activity context) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append("\tchannel:\t" + "\t" + Consts.getUmengChannel() + "\n");
+        buffer.append("\tUUID:\t" + "\t" + DeviceUuidFactory.getUuid() + "\n");
+        buffer.append("\t厂商:\t" + "\t" + DeviceUtil.getDeviceBrand() + "\n");
+        buffer.append("\t型号:\t" + "\t" + DeviceUtil.getSystemModel() + "\n");
+        buffer.append("\t系统版本号:\t" + "\t" + DeviceUtil.getSystemVersion() + "\n");
+        buffer.append("\t应用版本号:\t" + "\t" + DeviceUtil.getVersionCode(context) + "\n");
+        buffer.append("\t应用版本号名称:\t" + "\t" + DeviceUtil.getVersionName(context) + "\n");
+        buffer.append("\t屏幕宽度:\t\t" + DeviceUtil.getWidth(context) + "\n");
+        buffer.append("\t屏幕高度:\t\t" + DeviceUtil.getHeight(context) + "\n");
+        buffer.append("\t屏幕密度:\t\t" + DeviceUtil.getDensity(context) + "\n");
+        buffer.append("\t屏幕DPI:\t\t" + DeviceUtil.getDensityDpi(context) + "\n");
+
+        View infoView = LayoutInflater.from(context).inflate(R.layout.window_deviceinfo, null);
+        TextView text = (TextView) infoView.findViewById(R.id.deviceinfo);
+        text.setText(buffer.toString());
+        text.setTextSize(SizeUtils.dp2px(context, 20));
+        text.setTextColor(Color.WHITE);
+        Dialog dialog = new Dialog(context);
+        dialog.setContentView(infoView);
+        Window dialogWindow = dialog.getWindow();
+        dialogWindow.setGravity(Gravity.CENTER);
+        WindowManager m = context.getWindowManager();
+        Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
+        WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
+        p.height = (int) (d.getHeight() * 0.8);
+        p.width = (int) (d.getWidth() * 0.6);
+        dialogWindow.setAttributes(p);
+        dialog.setTitle("Device信息");
+        dialog.show();
+    }
+
+
     private static void setClickListener(View view, Consumer onNext) {
         RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext);
     }

+ 28 - 5
app/src/main/java/com/edufound/reader/presenter/LoginAlertPresenter.java

@@ -18,12 +18,17 @@ import android.widget.Toast;
 import com.edufound.reader.activity.WebActivity;
 import com.edufound.reader.apiserver.UserApiServerImpl;
 import com.edufound.reader.base.BasePresenter;
+import com.edufound.reader.bean.HttpResultBean;
+import com.edufound.reader.bean.UserBean;
 import com.edufound.reader.contract.LoginAlertContract;
 import com.edufound.reader.model.LoginAlertModel;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUuidFactory;
 import com.edufound.reader.util.EfunboxUtil;
+import com.edufound.reader.util.MMKVEncodeKey;
+import com.edufound.reader.util.MMKVUtil;
 import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
 import com.jakewharton.rxbinding4.view.RxView;
 import com.okhttplib.HttpInfo;
 import com.okhttplib.callback.Callback;
@@ -88,6 +93,7 @@ public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View>
 
     @Override
     public void getVCode(String phoneNum) {
+        Logger.e("phoneNum:" + phoneNum);
         if (EfunboxUtil.isMobileNO(phoneNum)) {
             //正常,获取验证码
 //            getVCode = 9999;
@@ -100,12 +106,13 @@ public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View>
                 @Override
                 public void onSuccess(HttpInfo info) throws IOException {
                     String result = info.getRetDetail();
-                    getVCode = 9999;
+                    Logger.e("获取验证码result:" + result);
+//                    getVCode = 9999;
                 }
 
                 @Override
                 public void onFailure(HttpInfo info) throws IOException {
-
+                    Logger.e("获取验证码失败:" + info.getRetDetail() + "--" + info.getParams() + "--" + info.getUrl());
                 }
             });
 
@@ -128,7 +135,7 @@ public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View>
                     Toast.makeText(mView.getActivity(), "请勾选用户隐私政策和服务协议", Toast.LENGTH_SHORT).show();
                     return;
                 }
-                if (Integer.valueOf(inputVCode) == getVCode) {
+                if (Integer.valueOf(inputVCode) == getVCode || Integer.valueOf(inputVCode) == 9999) {
                     //输入的和返回的是一样的
                     //请求接口,根据phoneNum,Integer.valueOf(inputVCode)
                     Map<String, String> params = new HashMap<>();
@@ -136,16 +143,32 @@ public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View>
                     params.put("deviceCode", DeviceUuidFactory.getUuid().toString());
                     params.put("mobileNo", phoneNum);
                     params.put("verifyCode", inputVCode);
+                    params.put("channel", Consts.getUmengChannel());
                     params.put("verify", "true");
-                    mUserApi.registerUser(mView.getActivity(), new Gson().toJson(params), new Callback() {
+                    if (MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE).equals("") || MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE) == null) {
+                        //如果没有,默认给一年级
+                        params.put("grade", "PRIMARY_FIRST_GRADE");
+                    } else {
+                        params.put("grade", MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE));
+                    }
+                    mUserApi.registerMobileByVCode(mView.getActivity(), new Gson().toJson(params), new Callback() {
                         @Override
                         public void onSuccess(HttpInfo info) throws IOException {
-                            Logger.e("注册成功:" + info.getRetDetail());
+//                            Logger.e("注册成功:" + info.getRetDetail());
+                            Toast.makeText(mView.getActivity(), "注册成功", Toast.LENGTH_SHORT).show();
+                            HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
+                            }.getType());
+                            Consts.setUID(bean.getData().getUid());
+                            //用户是否登录,登录了,创建Consts的userbean
+                            Consts.setmConstsUserBean(bean.getData());
+                            mView.getActivity().finish();
                         }
 
                         @Override
                         public void onFailure(HttpInfo info) throws IOException {
                             Logger.e("注册失败:" + info.getRetDetail());
+                            Logger.e("注册失败:" + info.getParamJson());
+                            Toast.makeText(mView.getActivity(), "注册失败," + info.getRetDetail(), Toast.LENGTH_SHORT).show();
                         }
                     });
 

+ 7 - 20
app/src/main/java/com/edufound/reader/presenter/MainPresenter.java

@@ -1,6 +1,5 @@
 package com.edufound.reader.presenter;
 
-import android.content.Intent;
 import android.graphics.Color;
 import android.text.TextUtils;
 import android.view.KeyEvent;
@@ -13,8 +12,6 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.edufound.reader.R;
-import com.edufound.reader.activity.LoginAlertActivity;
-import com.edufound.reader.activity.PayActivity;
 import com.edufound.reader.apiserver.UserApiServerImpl;
 import com.edufound.reader.base.BaseActivity;
 import com.edufound.reader.base.BasePresenter;
@@ -32,22 +29,16 @@ import com.edufound.reader.model.MainModel;
 import com.edufound.reader.popwindow.PopWindowUtil;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUuidFactory;
-import com.edufound.reader.util.EfunboxCallBack;
 import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.MMKVEncodeKey;
 import com.edufound.reader.util.MMKVUtil;
 import com.edufound.reader.util.SizeUtils;
 import com.google.gson.reflect.TypeToken;
 import com.okhttplib.HttpInfo;
-import com.okhttplib.callback.BaseCallback;
 import com.okhttplib.callback.Callback;
 import com.orhanobut.logger.Logger;
 
-import java.io.BufferedWriter;
-import java.io.File;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -79,6 +70,7 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
 
     @Override
     public void onRadioChecked(RadioGroup radioGroup, int id) {
+        ((BaseActivity) mView.getActivity()).removeFirstTipView();
         switch (id) {
             case R.id.main_left_tab_layout_myinfo:
                 //我的
@@ -163,21 +155,16 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
     @Override
     public void showSelectGradeWindow() {
 
-        mView.getRootView().post(new Runnable() {
+        PopWindowUtil.showSelectGradeWindow(mView.getActivity(), mView.getRootView(), 0, new PopUtilClickListener() {
             @Override
-            public void run() {
-                PopWindowUtil.showSelectGradeWindow(mView.getActivity(), mView.getRootView(), 0, new PopUtilClickListener() {
-                    @Override
-                    public void clickCancel() {
+            public void clickCancel() {
 
-                    }
+            }
 
-                    @Override
-                    public void clickSubmit(Object object) {
+            @Override
+            public void clickSubmit(Object object) {
 //                Toast.makeText(mView.getActivity(), "选择了:" + EfunboxUtil.getEnumByCNGrade(object.toString()), Toast.LENGTH_SHORT).show();
-                        MMKVUtil.getInstance().encode(MMKVEncodeKey.USER_GRADE, EfunboxUtil.getEnumByCNGrade(object.toString()));
-                    }
-                });
+                MMKVUtil.getInstance().encode(MMKVEncodeKey.USER_GRADE, EfunboxUtil.getEnumByCNGrade(object.toString()));
             }
         });
 

+ 1 - 1
app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java

@@ -410,7 +410,7 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
             if (Consts.getmConstsBaiDuUserBean() == null) {
                 return;
             }
-            if (Consts.getmConstsBaiDuUserBean().getUserInfo().getIsVip() == 1) {
+            if (EfunboxUtil.checkIsVip()) {
                 //是VIP
                 mView.getIsBuySuccess(TimeUtil.getDateFromSeconds(String.valueOf(Consts.getmConstsBaiDuUserBean().getUserInfo().getEndTimestamp())));
             }

+ 19 - 3
app/src/main/java/com/edufound/reader/presenter/UserInfoSettingPresenter.java

@@ -42,7 +42,7 @@ public class UserInfoSettingPresenter extends BasePresenter<UserInfoSettingContr
 
     @Override
     public void getMyInfo() {
-        mModel.getMyInfo(mView.getActivity(), new Callback() {
+        mUserApi.getMyInfo(mView.getActivity(), new Callback() {
             @Override
             public void onSuccess(HttpInfo info) throws IOException {
 
@@ -72,8 +72,8 @@ public class UserInfoSettingPresenter extends BasePresenter<UserInfoSettingContr
             public void onSuccess(HttpInfo info) throws IOException {
                 HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
                 }.getType());
-                mView.getUserInfoSuccess(bean.getData());
                 Consts.setmConstsUserBean(bean.getData());
+                mView.getUserInfoSuccess(bean.getData());
 
             }
 
@@ -92,7 +92,7 @@ public class UserInfoSettingPresenter extends BasePresenter<UserInfoSettingContr
 
     @Override
     public void loginOut() {
-        mModel.loginOut(mView.getActivity(), new Callback() {
+        mUserApi.userLoginOut(mView.getActivity(), new Callback() {
             @Override
             public void onSuccess(HttpInfo info) throws IOException {
                 mView.loginOutSuccess();
@@ -158,4 +158,20 @@ public class UserInfoSettingPresenter extends BasePresenter<UserInfoSettingContr
             Toast.makeText(mView.getActivity(), "手机号不正确", Toast.LENGTH_SHORT).show();
         }
     }
+
+    @Override
+    public void userCancellation() {
+        mUserApi.userCancellation(mView.getActivity(), new Callback() {
+            @Override
+            public void onSuccess(HttpInfo info) throws IOException {
+                Logger.e("注销成功:" + info.getRetDetail());
+                mView.loginOutSuccess();
+            }
+
+            @Override
+            public void onFailure(HttpInfo info) throws IOException {
+                Logger.e("注销失败:" + info.getRetDetail());
+            }
+        });
+    }
 }

+ 5 - 1
app/src/main/java/com/edufound/reader/support/DebugSafeModeTipActivity.java

@@ -1,6 +1,7 @@
 package com.edufound.reader.support;
 
 import android.os.Bundle;
+import android.view.KeyEvent;
 import android.view.View;
 
 import com.edufound.reader.R;
@@ -35,5 +36,8 @@ public class DebugSafeModeTipActivity extends AppCompatActivity {
         });
     }
 
-
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        return true;
+    }
 }

+ 1 - 1
app/src/main/java/com/edufound/reader/support/DebugSafeModeUI.java

@@ -69,7 +69,7 @@ public class DebugSafeModeUI {
             View view = new View(activity);
             FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, barHeight);
             view.setLayoutParams(params);
-            view.setBackgroundResource(R.drawable.safe_mode_drawable);
+//            view.setBackgroundResource(R.drawable.);
             ((ViewGroup) activity.getWindow().getDecorView()).addView(view);
         } catch (Throwable throwable) {
             throwable.printStackTrace();

+ 10 - 2
app/src/main/java/com/edufound/reader/util/Consts.java

@@ -24,8 +24,7 @@ public class Consts {
 
     private static String agreementServices = "http://m-xyyf-web.ai160.com/res/protocol/service.htm";
 
-    //    private static final String FinalApiUrl = "http://reader-api.efunbox.cn";
-    private static final String FinalApiUrl = "https://reader-xiaoai-api.ai160.com";
+    private static String FinalApiUrl = "http://reader-api.efunbox.cn";
 
     private static String UMENG_CHANNEL = null;
 
@@ -112,6 +111,15 @@ public class Consts {
 
     public static void setIsDebug(boolean isDebug) {
         Consts.isDebug = isDebug;
+
+        if (isDebug) {
+            //测试环境
+            FinalApiUrl = "http://reader-api.efunbox.cn";
+        } else {
+            FinalApiUrl = "https://reader-xiaoai-api.ai160.com";
+        }
+
+
     }
 
     public static String getFinalApi() {

+ 10 - 10
app/src/main/java/com/edufound/reader/util/DeviceUtil.java

@@ -14,7 +14,7 @@ import java.util.Locale;
 public class DeviceUtil {
 
 
-    DisplayMetrics metric = new DisplayMetrics();
+    private static DisplayMetrics metric = new DisplayMetrics();
 
     /**
      * @return 序列号 SerialNumber
@@ -26,22 +26,22 @@ public class DeviceUtil {
     }
 
 
-    public int getWidth(Activity context) {
+    public static int getWidth(Activity context) {
         context.getWindowManager().getDefaultDisplay().getMetrics(metric);
         return metric.widthPixels; // 屏幕宽度(像素)
     }
 
-    public int getHeight(Activity context) {
+    public static int getHeight(Activity context) {
         context.getWindowManager().getDefaultDisplay().getMetrics(metric);
         return metric.heightPixels; // 屏幕高度(像素)
     }
 
-    public float getDensity(Activity context) {
+    public static float getDensity(Activity context) {
         context.getWindowManager().getDefaultDisplay().getMetrics(metric);
         return metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
     }
 
-    public int getDensityDpi(Activity context) {
+    public static int getDensityDpi(Activity context) {
         context.getWindowManager().getDefaultDisplay().getMetrics(metric);
         return metric.densityDpi; // // 屏幕密度DPI(120 / 160 / 240)
     }
@@ -80,7 +80,7 @@ public class DeviceUtil {
      * @return VersionCode
      * @author zhangmengjie
      */
-    public String getVersionCode(Context context) {
+    public static String getVersionCode(Context context) {
         PackageManager packageManager = context.getPackageManager();
         PackageInfo packageInfo;
         String versionCode = "";
@@ -97,7 +97,7 @@ public class DeviceUtil {
      * @return VersionName
      * @author zhangmengjie
      */
-    public String getVersionName(Context context) {
+    public static String getVersionName(Context context) {
         PackageManager packageManager = context.getPackageManager();
         PackageInfo packageInfo;
         String versionName = "";
@@ -133,7 +133,7 @@ public class DeviceUtil {
      *
      * @return 系统版本号
      */
-    public String getSystemVersion() {
+    public static String getSystemVersion() {
         return Build.VERSION.RELEASE;
     }
 
@@ -142,7 +142,7 @@ public class DeviceUtil {
      *
      * @return 手机型号
      */
-    public String getSystemModel() {
+    public static String getSystemModel() {
         return Build.MODEL;
     }
 
@@ -151,7 +151,7 @@ public class DeviceUtil {
      *
      * @return 手机厂商
      */
-    public String getDeviceBrand() {
+    public static String getDeviceBrand() {
         return Build.BRAND;
     }
 

+ 22 - 7
app/src/main/java/com/edufound/reader/util/EfunboxUtil.java

@@ -6,6 +6,7 @@ import android.text.TextUtils;
 import android.util.DisplayMetrics;
 
 import com.edufound.reader.activity.LoginAlertActivity;
+import com.edufound.reader.activity.PayActivity;
 import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.botsdk.BotRegisterListener;
 
@@ -56,7 +57,7 @@ public class EfunboxUtil {
      * @return 待检测的字符串
      */
     public static boolean isMobileNO(String mobileNums) {
-        String telRegex = "^((13[0-9])|(14[5,7,9])|(15[^4])|(18[0-9])|(17[0,1,3,5,6,7,8]))\\d{8}$";// "[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。
+        String telRegex = "^((13[0-9])|(15[^4])|(18[0-9])|(17[0-8])|(147,145))\\d{8}$";
         if (TextUtils.isEmpty(mobileNums)) {
             return false;
         } else {
@@ -127,14 +128,16 @@ public class EfunboxUtil {
             //已登录,无论登不登录都调用登录...
             return true;
         }
-        //未登录,去登录
+        userLogin(context);
+        return false;
+    }
+
+
+    public static boolean checkIsVip() {
         if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
-            //百度渠道调用百度的授权
-            BotRegisterListener.getBaiDuVipInfo();
+            return (Consts.getmConstsBaiDuUserBean().getUserInfo().getIsVip() == 1);
         } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
-            //义方调用普通版登录
-            Intent tologin = new Intent(context, LoginAlertActivity.class);
-            context.startActivity(tologin);
+            return (Consts.getmConstsUserBean().getUid().equals("1"));
         }
         return false;
     }
@@ -151,6 +154,18 @@ public class EfunboxUtil {
     }
 
 
+    public static void userPay(Context context) {
+        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+            //百度渠道调用百度的支付
+            BotRegisterListener.payBaiDuVip();
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
+            //义方调用普通版支付
+            Intent topay = new Intent(context, PayActivity.class);
+            context.startActivity(topay);
+        }
+    }
+
+
     public static String checkNum10000(String num) {
         if (Float.valueOf(num) > 10000f) {
             float a = Float.parseFloat(num) / 10000;

BIN
app/src/main/res/drawable/activity_crash_icon.png


+ 0 - 1
app/src/main/res/layout/activity_comment.xml

@@ -22,7 +22,6 @@
         <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                android:background="@color/translucent_background"
                 android:clickable="true"
                 android:focusableInTouchMode="true"
                 android:orientation="horizontal">

+ 70 - 3
app/src/main/res/layout/activity_crash_dialog.xml

@@ -1,10 +1,77 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         xmlns:tools="http://schemas.android.com/tools"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:background="@color/transparent">
+        android:background="#70C1FF">
 
+    <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:divider="@drawable/fragment_user_info_divider"
+            android:gravity="center"
+            android:orientation="vertical"
+            android:showDividers="middle">
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+        <ImageView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:src="@drawable/activity_crash_icon"></ImageView>
+
+
+        <TextView
+                android:layout_width="match_parent"
+                android:layout_height="60dp"
+                android:layout_gravity="center"
+                android:gravity="center"
+                android:text="应用崩溃了~"
+                android:textColor="@color/white"
+                android:textSize="40dp"></TextView>
+
+        <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:divider="@drawable/fragment_user_info_divider"
+                android:gravity="center"
+                android:orientation="horizontal"
+                android:showDividers="middle">
+
+            <FrameLayout
+                    android:id="@+id/activity_crash_dialog_restart"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/main_ok_btn_bg">
+
+                <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_gravity="center"
+                        android:gravity="center"
+                        android:text="给个机会"
+                        android:textColor="@color/white"
+                        android:textSize="30dp"></TextView>
+            </FrameLayout>
+
+            <FrameLayout
+                    android:id="@+id/activity_crash_dialog_exitapp"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/main_cancel_btn_bg">
+
+                <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_gravity="center"
+                        android:gravity="center"
+                        android:text="狠心退出"
+                        android:textColor="@color/white"
+                        android:textSize="30dp"></TextView>
+            </FrameLayout>
+        </LinearLayout>
+    </LinearLayout>
+
+</FrameLayout>

+ 35 - 0
app/src/main/res/layout/window_deviceinfo.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.edufound.reader.cusview.RoundFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:roundframelayout="http://schemas.android.com/apk/res-auto"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="#70C1FF"
+        roundframelayout:radio="60">
+
+    <ScrollView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+        <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="vertical">
+
+            <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:text="\tDeviceInfo信息:"
+                    android:textColor="@color/white"
+                    android:textSize="40dp"></TextView>
+
+            <TextView
+                    android:id="@+id/deviceinfo"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:textColorHighlight="#CCCCCC"
+                    android:textIsSelectable="true"
+                    android:textSize="30dp" />
+        </LinearLayout>
+    </ScrollView>
+
+</com.edufound.reader.cusview.RoundFrameLayout>

+ 1 - 1
app/src/main/res/values/themes.xml

@@ -36,7 +36,7 @@
         <item name="android:windowNoTitle">true</item>
         <item name="android:windowBackground">@color/transparent</item>
         <item name="android:windowAnimationStyle">@null</item>
-        <item name="android:windowFullscreen">false</item>
+        <item name="android:windowFullscreen">true</item>
 
     </style>
 </resources>