Browse Source

1.修复部分手机登录注册返回主页后闪退的bug
2.暂时去掉侧滑功能
3.添加全局捕捉异常库
4.修复Bugly上的bug

hegj 5 years ago
parent
commit
00cee9a112
27 changed files with 513 additions and 542 deletions
  1. 2 0
      app/build.gradle
  2. 249 366
      app/priguardMapping.txt
  3. 1 1
      app/release/output.json
  4. 9 1
      app/src/main/AndroidManifest.xml
  5. 18 8
      app/src/main/java/me/hegj/wandroid/app/AppLifecyclesImpl.kt
  6. 1 4
      app/src/main/java/me/hegj/wandroid/mvp/ui/BaseActivity.kt
  7. 48 0
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/error/ErrorActivity.kt
  8. 15 20
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/home/HomeFragment.kt
  9. 14 13
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/home/search/SearchActivity.kt
  10. 12 17
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/home/search/SearchResultActivity.kt
  11. 12 17
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/project/ProjectChildFragment.kt
  12. 9 6
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/project/ProjectFragment.kt
  13. 12 17
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/publicNumber/PublicChildFragment.kt
  14. 6 3
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/publicNumber/PublicFragment.kt
  15. 13 18
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/tree/NavigationFragment.kt
  16. 12 17
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/tree/treeinfo/TreeinfoFragment.kt
  17. 0 1
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/setting/GeneralPreferenceFragment.kt
  18. 1 0
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/setting/OpenProjectActivity.kt
  19. 7 12
      app/src/main/java/me/hegj/wandroid/mvp/ui/activity/web/WebviewActivity.kt
  20. 1 1
      app/src/main/java/me/hegj/wandroid/mvp/ui/adapter/AriticleAdapter.kt
  21. 1 1
      app/src/main/java/me/hegj/wandroid/mvp/ui/adapter/CollectAdapter.kt
  22. 4 13
      app/src/main/java/me/hegj/wandroid/mvp/ui/adapter/TodoAdapter.kt
  23. BIN
      app/src/main/res/drawable-xxxhdpi/ic_custom_drawable.png
  24. 54 0
      app/src/main/res/layout/activity_error.xml
  25. 4 0
      app/src/main/res/values/strings.xml
  26. 2 2
      app/src/main/res/xml/root_preferences.xml
  27. 6 4
      config.gradle

+ 2 - 0
app/build.gradle

@@ -107,6 +107,8 @@ dependencies {
     implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0"
     //项目用到的库大部分封装在里面 具体在 config.gradle
     implementation rootProject.ext.customLibs
+
+    implementation 'cn.simonlee.widget:swipeback:1.0.15'
 }
 repositories {
     mavenCentral()

+ 249 - 366
app/priguardMapping.txt

@@ -1,6 +1,6 @@
 # compiler: R8
 # compiler_version: 1.4.94
-# min_api: 16
+# min_api: 21
 butterknife.-$$Lambda$Unbinder$aAZZEjRDCcxQlrGZAdKWmLXqruY -> butterknife.a:
     butterknife.-$$Lambda$Unbinder$aAZZEjRDCcxQlrGZAdKWmLXqruY INSTANCE -> a
 butterknife.Unbinder$-CC -> butterknife.b:
@@ -9,6 +9,131 @@ butterknife.internal.-$$Lambda$DebouncingOnClickListener$EDavjG1Da3G8JTdFPVGk_7O
     butterknife.internal.-$$Lambda$DebouncingOnClickListener$EDavjG1Da3G8JTdFPVGk_7OErB8 INSTANCE -> a
 butterknife.internal.DebouncingOnClickListener -> butterknife.internal.DebouncingOnClickListener:
     void lambda$static$0() -> a
+cat.ereza.customactivityoncrash.CustomActivityOnCrash -> cat.ereza.customactivityoncrash.CustomActivityOnCrash:
+    java.util.Deque activityLog -> c
+    android.app.Application application -> a
+    cat.ereza.customactivityoncrash.config.CaocConfig config -> b
+    java.lang.ref.WeakReference lastActivityCreated -> d
+    boolean isInBackground -> e
+    cat.ereza.customactivityoncrash.config.CaocConfig access$000() -> a
+    boolean access$200(android.content.Context) -> a
+    void access$300(android.content.Context,long) -> a
+    boolean access$500(java.lang.Throwable,java.lang.Class) -> a
+    boolean access$602(boolean) -> a
+    java.lang.ref.WeakReference access$902(java.lang.ref.WeakReference) -> a
+    java.lang.String capitalize(java.lang.String) -> a
+    void closeApplication(android.app.Activity,cat.ereza.customactivityoncrash.config.CaocConfig) -> a
+    java.lang.String getActivityLogFromIntent(android.content.Intent) -> a
+    java.lang.String getAllErrorDetailsFromIntent(android.content.Context,android.content.Intent) -> a
+    java.lang.String getBuildDateAsString(android.content.Context,java.text.DateFormat) -> a
+    void restartApplicationWithIntent(android.app.Activity,android.content.Intent,cat.ereza.customactivityoncrash.config.CaocConfig) -> a
+    void setConfig(cat.ereza.customactivityoncrash.config.CaocConfig) -> a
+    android.app.Application access$100() -> b
+    java.lang.Class access$400(android.content.Context) -> b
+    cat.ereza.customactivityoncrash.config.CaocConfig getConfigFromIntent(android.content.Intent) -> b
+    boolean isStackTraceLikelyConflictive(java.lang.Throwable,java.lang.Class) -> b
+    void restartApplication(android.app.Activity,cat.ereza.customactivityoncrash.config.CaocConfig) -> b
+    void setLastCrashTimestamp(android.content.Context,long) -> b
+    void access$1000() -> c
+    java.lang.Class access$800(android.content.Context) -> c
+    java.lang.String getStackTraceFromIntent(android.content.Intent) -> c
+    boolean access$600() -> d
+    void install(android.content.Context) -> d
+    java.util.Deque access$700() -> e
+    java.lang.Class getErrorActivityClassWithIntentFilter(android.content.Context) -> e
+    java.lang.ref.WeakReference access$900() -> f
+    long getLastCrashTimestamp(android.content.Context) -> f
+    cat.ereza.customactivityoncrash.config.CaocConfig getConfig() -> g
+    java.lang.Class getLauncherActivity(android.content.Context) -> g
+    java.lang.String getDeviceModelName() -> h
+    java.lang.Class getRestartActivityClassWithIntentFilter(android.content.Context) -> h
+    java.lang.String getVersionName(android.content.Context) -> i
+    void killCurrentProcess() -> i
+    java.lang.Class guessErrorActivityClass(android.content.Context) -> j
+    java.lang.Class guessRestartActivityClass(android.content.Context) -> k
+    boolean hasCrashedInTheLastSeconds(android.content.Context) -> l
+cat.ereza.customactivityoncrash.CustomActivityOnCrash$1 -> cat.ereza.customactivityoncrash.a:
+    java.lang.Thread$UncaughtExceptionHandler val$oldHandler -> a
+cat.ereza.customactivityoncrash.CustomActivityOnCrash$2 -> cat.ereza.customactivityoncrash.b:
+    java.text.DateFormat dateFormat -> b
+    int currentlyStartedActivities -> a
+cat.ereza.customactivityoncrash.CustomActivityOnCrash$EventListener -> cat.ereza.customactivityoncrash.CustomActivityOnCrash$EventListener:
+    void onLaunchErrorActivity() -> c
+    void onCloseAppFromErrorActivity() -> d
+    void onRestartAppFromErrorActivity() -> e
+cat.ereza.customactivityoncrash.activity.DefaultErrorActivity -> cat.ereza.customactivityoncrash.activity.DefaultErrorActivity:
+    void access$000(cat.ereza.customactivityoncrash.activity.DefaultErrorActivity) -> a
+    void copyErrorToClipboard() -> a
+cat.ereza.customactivityoncrash.activity.DefaultErrorActivity$1 -> cat.ereza.customactivityoncrash.activity.a:
+    cat.ereza.customactivityoncrash.config.CaocConfig val$config -> a
+    cat.ereza.customactivityoncrash.activity.DefaultErrorActivity this$0 -> b
+cat.ereza.customactivityoncrash.activity.DefaultErrorActivity$2 -> cat.ereza.customactivityoncrash.activity.b:
+    cat.ereza.customactivityoncrash.config.CaocConfig val$config -> a
+    cat.ereza.customactivityoncrash.activity.DefaultErrorActivity this$0 -> b
+cat.ereza.customactivityoncrash.activity.DefaultErrorActivity$3 -> cat.ereza.customactivityoncrash.activity.d:
+    cat.ereza.customactivityoncrash.activity.DefaultErrorActivity this$0 -> a
+cat.ereza.customactivityoncrash.activity.DefaultErrorActivity$3$1 -> cat.ereza.customactivityoncrash.activity.c:
+    cat.ereza.customactivityoncrash.activity.DefaultErrorActivity$3 this$1 -> a
+cat.ereza.customactivityoncrash.config.CaocConfig -> cat.ereza.customactivityoncrash.config.CaocConfig:
+    java.lang.Class restartActivityClass -> j
+    cat.ereza.customactivityoncrash.CustomActivityOnCrash$EventListener eventListener -> k
+    java.lang.Integer errorDrawable -> h
+    java.lang.Class errorActivityClass -> i
+    boolean logErrorOnRestart -> e
+    boolean trackActivities -> f
+    int minTimeBetweenCrashesMs -> g
+    boolean enabled -> b
+    boolean showErrorDetails -> c
+    int backgroundMode -> a
+    boolean showRestartButton -> d
+    int access$000(cat.ereza.customactivityoncrash.config.CaocConfig) -> a
+    int access$002(cat.ereza.customactivityoncrash.config.CaocConfig,int) -> a
+    cat.ereza.customactivityoncrash.CustomActivityOnCrash$EventListener access$1002(cat.ereza.customactivityoncrash.config.CaocConfig,cat.ereza.customactivityoncrash.CustomActivityOnCrash$EventListener) -> a
+    boolean access$102(cat.ereza.customactivityoncrash.config.CaocConfig,boolean) -> a
+    java.lang.Integer access$702(cat.ereza.customactivityoncrash.config.CaocConfig,java.lang.Integer) -> a
+    java.lang.Class access$802(cat.ereza.customactivityoncrash.config.CaocConfig,java.lang.Class) -> a
+    int getBackgroundMode() -> a
+    void setRestartActivityClass(java.lang.Class) -> a
+    boolean access$100(cat.ereza.customactivityoncrash.config.CaocConfig) -> b
+    boolean access$202(cat.ereza.customactivityoncrash.config.CaocConfig,boolean) -> b
+    int access$602(cat.ereza.customactivityoncrash.config.CaocConfig,int) -> b
+    java.lang.Class access$902(cat.ereza.customactivityoncrash.config.CaocConfig,java.lang.Class) -> b
+    java.lang.Class getErrorActivityClass() -> b
+    cat.ereza.customactivityoncrash.CustomActivityOnCrash$EventListener access$1000(cat.ereza.customactivityoncrash.config.CaocConfig) -> c
+    boolean access$302(cat.ereza.customactivityoncrash.config.CaocConfig,boolean) -> c
+    boolean access$200(cat.ereza.customactivityoncrash.config.CaocConfig) -> d
+    boolean access$402(cat.ereza.customactivityoncrash.config.CaocConfig,boolean) -> d
+    boolean access$300(cat.ereza.customactivityoncrash.config.CaocConfig) -> e
+    boolean access$502(cat.ereza.customactivityoncrash.config.CaocConfig,boolean) -> e
+    boolean access$400(cat.ereza.customactivityoncrash.config.CaocConfig) -> f
+    java.lang.Integer getErrorDrawable() -> f
+    boolean access$500(cat.ereza.customactivityoncrash.config.CaocConfig) -> g
+    cat.ereza.customactivityoncrash.CustomActivityOnCrash$EventListener getEventListener() -> g
+    int access$600(cat.ereza.customactivityoncrash.config.CaocConfig) -> h
+    int getMinTimeBetweenCrashesMs() -> h
+    java.lang.Integer access$700(cat.ereza.customactivityoncrash.config.CaocConfig) -> i
+    java.lang.Class getRestartActivityClass() -> i
+    java.lang.Class access$800(cat.ereza.customactivityoncrash.config.CaocConfig) -> j
+    boolean isEnabled() -> j
+    java.lang.Class access$900(cat.ereza.customactivityoncrash.config.CaocConfig) -> k
+    boolean isLogErrorOnRestart() -> k
+    boolean isShowErrorDetails() -> l
+    boolean isShowRestartButton() -> m
+    boolean isTrackActivities() -> n
+cat.ereza.customactivityoncrash.config.CaocConfig$Builder -> cat.ereza.customactivityoncrash.config.CaocConfig$a:
+    cat.ereza.customactivityoncrash.config.CaocConfig config -> a
+    void apply() -> a
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder backgroundMode(int) -> a
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder enabled(boolean) -> a
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder errorActivity(java.lang.Class) -> a
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder eventListener(cat.ereza.customactivityoncrash.CustomActivityOnCrash$EventListener) -> a
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder create() -> b
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder logErrorOnRestart(boolean) -> b
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder minTimeBetweenCrashesMs(int) -> b
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder restartActivity(java.lang.Class) -> b
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder showErrorDetails(boolean) -> c
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder showRestartButton(boolean) -> d
+    cat.ereza.customactivityoncrash.config.CaocConfig$Builder trackActivities(boolean) -> e
 cn.bingoogolapple.bgabanner.BGABanner -> cn.bingoogolapple.bgabanner.BGABanner:
     int mPointContainerLeftRightPadding -> n
     float mAspectRatio -> L
@@ -207,6 +332,17 @@ cn.bingoogolapple.bgabanner.transformer.ZoomStackPageTransformer -> cn.bingoogol
     void handleInvisiblePage(android.view.View,float) -> a
     void handleLeftPage(android.view.View,float) -> b
     void handleRightPage(android.view.View,float) -> c
+cn.simonlee.widget.swipeback.ShadowView -> cn.simonlee.widget.swipeback.ShadowView:
+    int[] colors -> f
+    float[] positions -> g
+    android.graphics.Paint mShadowBarPaint -> b
+    boolean isShowShadowBar -> e
+    int mShadowColor -> d
+    float density -> a
+    int mLinearShaderWidth -> c
+    int getShadowAlpha(float) -> a
+    float getShadowPosition(int) -> a
+    void setShowColor(int,boolean,boolean) -> a
 com.afollestad.date.CalendarsKt -> com.afollestad.date.a:
     java.util.Calendar decrementMonth(java.util.Calendar) -> a
     void setDayOfMonth(java.util.Calendar,int) -> a
@@ -236,23 +372,23 @@ com.afollestad.date.DatePicker -> com.afollestad.date.DatePicker:
 com.afollestad.date.DatePicker$1 -> com.afollestad.date.DatePicker$1:
     java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
     void invoke(java.util.Calendar,java.util.Calendar) -> a
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    java.lang.String getSignature() -> k
 com.afollestad.date.DatePicker$10 -> com.afollestad.date.DatePicker$10:
     com.afollestad.date.DatePicker this$0 -> a
     void invoke(int) -> a
 com.afollestad.date.DatePicker$2 -> com.afollestad.date.DatePicker$2:
     void invoke(java.util.List) -> a
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    java.lang.String getSignature() -> k
 com.afollestad.date.DatePicker$3 -> com.afollestad.date.DatePicker$3:
     void invoke(boolean) -> a
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    java.lang.String getSignature() -> k
 com.afollestad.date.DatePicker$4 -> com.afollestad.date.DatePicker$4:
     void invoke(boolean) -> a
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    java.lang.String getSignature() -> k
 com.afollestad.date.DatePicker$5 -> com.afollestad.date.DatePicker$5:
     com.afollestad.date.DatePicker this$0 -> a
     java.lang.Object invoke() -> b
@@ -279,13 +415,13 @@ com.afollestad.date.DatePicker$onDateChanged$1 -> com.afollestad.date.DatePicker
 com.afollestad.date.DatePicker$onFinishInflate$1 -> com.afollestad.date.DatePicker$onFinishInflate$1:
     java.lang.Object invoke() -> b
     void invoke() -> b
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    java.lang.String getSignature() -> k
 com.afollestad.date.DatePicker$onFinishInflate$2 -> com.afollestad.date.DatePicker$onFinishInflate$2:
     java.lang.Object invoke() -> b
     void invoke() -> b
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    java.lang.String getSignature() -> k
 com.afollestad.date.adapters.MonthAdapter -> com.afollestad.date.adapters.MonthAdapter:
     java.util.Calendar calendar -> b
     kotlin.jvm.functions.Function1 onSelection -> g
@@ -1049,8 +1185,8 @@ com.afollestad.materialdialogs.internal.list.DialogRecyclerView -> com.afollesta
 com.afollestad.materialdialogs.internal.list.DialogRecyclerView$attach$1 -> com.afollestad.materialdialogs.internal.list.DialogRecyclerView$attach$1:
     java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
     void invoke(boolean,boolean) -> a
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    java.lang.String getSignature() -> k
 com.afollestad.materialdialogs.internal.list.DialogRecyclerView$onAttachedToWindow$1 -> com.afollestad.materialdialogs.internal.list.DialogRecyclerView$onAttachedToWindow$1:
     com.afollestad.materialdialogs.internal.list.DialogRecyclerView$onAttachedToWindow$1 INSTANCE -> a
     void invoke(com.afollestad.materialdialogs.internal.list.DialogRecyclerView) -> a
@@ -1300,74 +1436,49 @@ com.afollestad.viewpagerdots.UtilKt -> com.afollestad.viewpagerdots.a:
     android.graphics.drawable.Drawable tint(android.graphics.drawable.Drawable,int) -> a
 com.billy.android.swipe.SmartSwipe -> com.billy.android.swipe.a:
     com.billy.android.swipe.SmartSwipe$IWrapperFactory factory -> a
-    com.billy.android.swipe.SmartSwipeWrapper createNewWrapper(android.content.Context) -> a
     int dp2px(int,android.content.Context) -> a
     float ensureBetween(float,float,float) -> a
     int ensureBetween(int,int,int) -> a
     boolean initFactoryByClassName(java.lang.String) -> a
-    com.billy.android.swipe.SmartSwipeWrapper peekWrapperFor(android.app.Activity) -> a
-    com.billy.android.swipe.SmartSwipeWrapper peekWrapperFor(android.view.View) -> a
     void setFactory(com.billy.android.swipe.SmartSwipe$IWrapperFactory) -> a
-    com.billy.android.swipe.SmartSwipeWrapper wrap(android.app.Activity) -> b
-    com.billy.android.swipe.SmartSwipeWrapper wrap(android.view.View) -> b
 com.billy.android.swipe.SmartSwipe$IWrapperFactory -> com.billy.android.swipe.a$a:
-    com.billy.android.swipe.SmartSwipeWrapper createWrapper(android.content.Context) -> a
-com.billy.android.swipe.SmartSwipeBack -> com.billy.android.swipe.b:
-    com.billy.android.swipe.SmartSwipeBack$IPreviousFinder mPreviousFinder -> b
-    java.util.ArrayList ACTIVITIES -> a
-    com.billy.android.swipe.SmartSwipeBack$ActivitySwipeBackListener activitySwipeBackListener -> c
-    void activityBack(android.app.Application,com.billy.android.swipe.SmartSwipeBack$SwipeBackConsumerFactory,com.billy.android.swipe.SmartSwipeBack$ActivitySwipeBackFilter) -> a
-    android.app.Activity findPreviousActivity(android.app.Activity) -> a
-com.billy.android.swipe.SmartSwipeBack$ActivitySwipeBackFilter -> com.billy.android.swipe.b$a:
-    boolean onFilter(android.app.Activity) -> a
-com.billy.android.swipe.SmartSwipeBack$ActivitySwipeBackListener -> com.billy.android.swipe.b$b:
-    com.billy.android.swipe.SmartSwipeBack$SwipeBackConsumerFactory mFactory -> a
-    com.billy.android.swipe.SmartSwipeBack$ActivitySwipeBackFilter mFilter -> b
-    com.billy.android.swipe.SmartSwipeBack$SwipeBackConsumerFactory access$002(com.billy.android.swipe.SmartSwipeBack$ActivitySwipeBackListener,com.billy.android.swipe.SmartSwipeBack$SwipeBackConsumerFactory) -> a
-    com.billy.android.swipe.SmartSwipeBack$ActivitySwipeBackFilter access$102(com.billy.android.swipe.SmartSwipeBack$ActivitySwipeBackListener,com.billy.android.swipe.SmartSwipeBack$ActivitySwipeBackFilter) -> a
-com.billy.android.swipe.SmartSwipeBack$IPreviousFinder -> com.billy.android.swipe.b$c:
-    android.app.Activity findPreviousActivity(android.app.Activity) -> a
-com.billy.android.swipe.SmartSwipeBack$SwipeBackConsumerFactory -> com.billy.android.swipe.b$d:
-    com.billy.android.swipe.SwipeConsumer createSwipeBackConsumer(android.app.Activity) -> a
-com.billy.android.swipe.SmartSwipeRefresh$RefreshView -> com.billy.android.swipe.c:
-com.billy.android.swipe.SmartSwipeRefresh$SmartSwipeRefreshFooter -> com.billy.android.swipe.d:
-com.billy.android.swipe.SmartSwipeRefresh$SmartSwipeRefreshHeader -> com.billy.android.swipe.e:
+com.billy.android.swipe.SmartSwipeRefresh$RefreshView -> com.billy.android.swipe.b:
+com.billy.android.swipe.SmartSwipeRefresh$SmartSwipeRefreshFooter -> com.billy.android.swipe.c:
+com.billy.android.swipe.SmartSwipeRefresh$SmartSwipeRefreshHeader -> com.billy.android.swipe.d:
 com.billy.android.swipe.SmartSwipeWrapper$LayoutParams -> com.billy.android.swipe.SmartSwipeWrapper$a:
     int gravity -> a
-com.billy.android.swipe.SwipeConsumer -> com.billy.android.swipe.g:
-    int mCurDisplayDistanceY -> l
-    boolean mOpenDistanceSpecified -> i
-    int mSwipeMaxDistance -> j
-    java.util.List mListeners -> v
+com.billy.android.swipe.SwipeConsumer -> com.billy.android.swipe.f:
+    boolean mSwiping -> m
+    com.billy.android.swipe.internal.SwipeHelper mSwipeHelper -> n
+    int mCurDisplayDistanceX -> j
     int mSwipeOpenDistance -> h
     int mCurSwipeDistanceX -> f
     int mCachedSwipeDistanceX -> d
-    int mHeight -> E
+    int mWidth -> C
     com.billy.android.swipe.SmartSwipeWrapper mWrapper -> b
-    android.view.animation.Interpolator mInterpolator -> r
-    com.billy.android.swipe.calculator.SwipeDistanceCalculator mSwipeDistanceCalculator -> y
-    int mOpenDistance -> w
-    int mReleaseMode -> u
-    int mEdgeSize -> s
-    boolean mDisableNestedFly -> C
-    float mProgress -> m
-    int mLockDirection -> q
-    boolean mSwiping -> n
-    com.billy.android.swipe.internal.SwipeHelper mSwipeHelper -> o
-    int mCurDisplayDistanceX -> k
+    boolean mDisableSwipeOnSettling -> y
+    float mOverSwipeFactor -> w
+    java.lang.Integer mMaxSettleDuration -> z
+    float mSensitivity -> s
+    boolean mDisableNestedScroll -> A
+    float mProgress -> l
+    int mEnableDirection -> o
+    int mCurDisplayDistanceY -> k
+    java.util.List mListeners -> u
+    int mSwipeMaxDistance -> i
     int mCurSwipeDistanceY -> g
-    int mWidth -> D
+    int mHeight -> D
     int mCachedSwipeDistanceY -> e
     int mDirection -> c
-    java.lang.Integer mMaxSettleDuration -> A
     int DEFAULT_OPEN_DISTANCE_IN_DP -> a
-    float mOverSwipeFactor -> x
-    boolean mDisableSwipeOnSettling -> z
-    float mSensitivity -> t
-    boolean mDisableNestedScroll -> B
-    int mEnableDirection -> p
+    android.view.animation.Interpolator mInterpolator -> q
+    com.billy.android.swipe.calculator.SwipeDistanceCalculator mSwipeDistanceCalculator -> x
+    int mOpenDistance -> v
+    int mReleaseMode -> t
+    int mEdgeSize -> r
+    boolean mDisableNestedFly -> B
+    int mLockDirection -> p
     void reset() -> A
-    com.billy.android.swipe.SwipeConsumer smoothClose() -> B
     com.billy.android.swipe.SwipeConsumer addListener(com.billy.android.swipe.listener.SwipeListener) -> a
     boolean canChildScroll(android.view.ViewGroup,int,int,int,float,float) -> a
     int clampDistanceHorizontal(int,int) -> a
@@ -1413,11 +1524,9 @@ com.billy.android.swipe.SwipeConsumer -> com.billy.android.swipe.g:
     com.billy.android.swipe.internal.SwipeHelper getSwipeHelper() -> h
     void onStateChanged(int) -> h
     int getSwipeOpenDistance() -> i
-    com.billy.android.swipe.SwipeConsumer setEdgeSize(int) -> i
+    com.billy.android.swipe.SwipeConsumer unlockDirection(int) -> i
     void initChildrenFormXml() -> j
-    com.billy.android.swipe.SwipeConsumer setReleaseMode(int) -> j
     boolean isBottomEnable() -> k
-    com.billy.android.swipe.SwipeConsumer unlockDirection(int) -> k
     boolean isBottomLocked() -> l
     boolean isLeftEnable() -> m
     boolean isLeftLocked() -> n
@@ -1433,119 +1542,12 @@ com.billy.android.swipe.SwipeConsumer -> com.billy.android.swipe.g:
     void onClosed() -> x
     void onDetachFromWrapper() -> y
     void onOpened() -> z
-com.billy.android.swipe.SwipeConsumer$2 -> com.billy.android.swipe.f:
+com.billy.android.swipe.SwipeConsumer$2 -> com.billy.android.swipe.e:
     com.billy.android.swipe.SwipeConsumer this$0 -> a
     void onSwipeClosed(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int) -> a
 com.billy.android.swipe.calculator.SwipeDistanceCalculator -> com.billy.android.swipe.a.a:
     int calculateSwipeDistance(int,float) -> a
     int calculateSwipeOpenDistance(int) -> a
-com.billy.android.swipe.consumer.ActivitySlidingBackConsumer -> com.billy.android.swipe.b.a:
-    android.view.View mPreviousActivityContentView -> Y
-    android.app.Activity mActivity -> W
-    boolean mHorizontalSwiping -> Z
-    int initTranslation -> X
-    com.billy.android.swipe.internal.ActivityTranslucentUtil mActivityTranslucentUtil -> V
-    void resetPreviousActivityContentView() -> I
-    int clampDistanceHorizontal(int,int) -> a
-    void layoutContentView(android.view.View) -> a
-    void onAttachToWrapper(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.internal.SwipeHelper) -> a
-    void onDisplayDistanceChanged(int,int,int,int) -> a
-    void onSwipeAccepted(int,boolean,float,float) -> a
-    boolean tryAcceptMoving(int,float,float,float,float) -> a
-    boolean tryAcceptSettling(int,float,float) -> a
-    int clampDistanceVertical(int,int) -> b
-    void initChildrenFormXml() -> j
-    void movePreviousActivityContentView(int) -> r
-    void onClosed() -> x
-    void onDetachFromWrapper() -> y
-    void onOpened() -> z
-com.billy.android.swipe.consumer.DrawerConsumer -> com.billy.android.swipe.b.b:
-    int mShadowSize -> O
-    int mScrimColor -> L
-    int mShadowColor -> M
-    boolean mDrawerViewRequired -> P
-    int r -> J
-    android.view.View[] mDrawerViews -> F
-    int b -> K
-    com.billy.android.swipe.internal.ScrimView mScrimView -> N
-    int l -> H
-    int t -> I
-    boolean mShowScrimAndShadowOutsideContentView -> Q
-    android.view.View mCurDrawerView -> G
-    void initScrimView() -> C
-    void layoutChildren() -> D
-    void layoutDrawerView() -> E
-    void layoutScrimView() -> F
-    void orderChildren() -> G
-    com.billy.android.swipe.consumer.DrawerConsumer showScrimAndShadowOutsideContentView() -> H
-    void calculateDrawerDirectionInitPosition(int,int,int) -> a
-    void layoutContentView(android.view.View) -> a
-    void onAttachToWrapper(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.internal.SwipeHelper) -> a
-    boolean onLayout(boolean,int,int,int,int) -> a
-    void onSwipeAccepted(int,boolean,float,float) -> a
-    boolean tryAcceptMoving(int,float,float,float,float) -> a
-    void notifySwipeProgress(boolean) -> b
-    void notifySwipeRelease(float,float) -> c
-    com.billy.android.swipe.consumer.DrawerConsumer setDrawerViewRequired(boolean) -> c
-    int getOpenDistance() -> e
-    void changeDrawerViewVisibility(int) -> l
-    android.view.View getDrawerView(int) -> m
-    com.billy.android.swipe.consumer.DrawerConsumer setScrimColor(int) -> n
-    com.billy.android.swipe.consumer.DrawerConsumer setShadowColor(int) -> o
-    com.billy.android.swipe.consumer.DrawerConsumer setShadowSize(int) -> p
-    void attachDrawerView(int) -> q
-    void notifySwipeStart() -> w
-    void onClosed() -> x
-    void onDetachFromWrapper() -> y
-    void onOpened() -> z
-com.billy.android.swipe.consumer.SlidingConsumer -> com.billy.android.swipe.b.c:
-    float mRelativeMoveFactor -> R
-    int mDrawerW -> T
-    int mDrawerH -> U
-    boolean mEdgeAffinity -> S
-    void orderChildren() -> G
-    void calculateDrawerDirectionInitPosition(int,int,int) -> a
-    com.billy.android.swipe.consumer.SlidingConsumer setRelativeMoveFactor(float) -> b
-    void onDetachFromWrapper() -> y
-com.billy.android.swipe.consumer.TranslucentSlidingConsumer -> com.billy.android.swipe.b.d:
-    void layoutDrawerView() -> E
-    void changeDrawerViewVisibility(int) -> l
-    android.view.View getDrawerView(int) -> m
-com.billy.android.swipe.internal.ActivityTranslucentUtil -> com.billy.android.swipe.internal.d:
-    long convertTranslucentTimeStamp -> k
-    boolean mIsTranslucent -> i
-    java.lang.ref.WeakReference convertingActivity -> g
-    android.app.Activity mActivity -> h
-    android.os.MessageQueue$IdleHandler convertActivityToTranslucentIdleHandler -> j
-    java.lang.reflect.Method mMethodConvertToTranslucent -> c
-    boolean mInitialedConvertToTranslucent -> e
-    java.lang.reflect.Method mMethodGetActivityOptions -> d
-    boolean mInitialedConvertFromTranslucent -> f
-    java.lang.Class mTranslucentConversionListenerClass -> a
-    java.lang.reflect.Method mMethodConvertFromTranslucent -> b
-    long access$000(com.billy.android.swipe.internal.ActivityTranslucentUtil) -> a
-    void access$100(com.billy.android.swipe.internal.ActivityTranslucentUtil,boolean) -> a
-    void access$200(com.billy.android.swipe.internal.ActivityTranslucentUtil$TranslucentCallback,boolean) -> a
-    void convertActivityFromTranslucent() -> a
-    void convertActivityFromTranslucent(android.app.Activity) -> a
-    void convertActivityToTranslucent(android.app.Activity,com.billy.android.swipe.internal.ActivityTranslucentUtil$TranslucentCallback) -> a
-    void convertActivityToTranslucent(boolean) -> a
-    void convertActivityToTranslucent() -> b
-    void convertCallback(com.billy.android.swipe.internal.ActivityTranslucentUtil$TranslucentCallback,boolean) -> b
-    void convertWindowToTranslucent(android.app.Activity) -> b
-    void setTranslucent(boolean) -> b
-    boolean isTranslucent() -> c
-com.billy.android.swipe.internal.ActivityTranslucentUtil$1 -> com.billy.android.swipe.internal.a:
-    com.billy.android.swipe.internal.ActivityTranslucentUtil this$0 -> a
-com.billy.android.swipe.internal.ActivityTranslucentUtil$2 -> com.billy.android.swipe.internal.b:
-    long val$callbackTimeStamp -> a
-    com.billy.android.swipe.internal.ActivityTranslucentUtil this$0 -> c
-    boolean val$retry -> b
-    void onTranslucentCallback(boolean) -> a
-com.billy.android.swipe.internal.ActivityTranslucentUtil$3 -> com.billy.android.swipe.internal.c:
-    com.billy.android.swipe.internal.ActivityTranslucentUtil$TranslucentCallback val$callback -> a
-com.billy.android.swipe.internal.ActivityTranslucentUtil$TranslucentCallback -> com.billy.android.swipe.internal.d$a:
-    void onTranslucentCallback(boolean) -> a
 com.billy.android.swipe.internal.ScrimView -> com.billy.android.swipe.internal.ScrimView:
     android.graphics.Paint mShadowPaint -> i
     int mShadowDirection -> l
@@ -1559,8 +1561,7 @@ com.billy.android.swipe.internal.ScrimView -> com.billy.android.swipe.internal.S
     android.graphics.Rect mBounds -> e
     float MAX_PROGRESS -> a
     int mSize -> c
-    void setDirection(int,int,int,int,int,int) -> a
-com.billy.android.swipe.internal.SwipeHelper -> com.billy.android.swipe.internal.f:
+com.billy.android.swipe.internal.SwipeHelper -> com.billy.android.swipe.internal.b:
     android.view.ViewGroup mParentView -> r
     android.view.animation.Interpolator sInterpolator -> a
     float[] mLastMotionX -> i
@@ -1616,30 +1617,19 @@ com.billy.android.swipe.internal.SwipeHelper -> com.billy.android.swipe.internal
     void nestedScrollingRelease() -> f
     void clearMotionHistory() -> g
     void releaseViewForPointerUp() -> h
-com.billy.android.swipe.internal.SwipeHelper$1 -> com.billy.android.swipe.internal.e:
-com.billy.android.swipe.internal.SwipeUtil -> com.billy.android.swipe.internal.h:
-    java.util.concurrent.ThreadFactory sThreadFactory -> d
-    java.util.concurrent.Executor THREAD_POOL_EXECUTOR -> f
-    int CORE_POOL_SIZE -> b
-    int MAXIMUM_POOL_SIZE -> c
-    int CPU_COUNT -> a
-    java.util.concurrent.BlockingQueue sPoolWorkQueue -> e
-    int getReverseDirection(int) -> a
-com.billy.android.swipe.internal.SwipeUtil$1 -> com.billy.android.swipe.internal.g:
-    java.util.concurrent.atomic.AtomicInteger mCount -> a
-com.billy.android.swipe.internal.ViewCompat -> com.billy.android.swipe.internal.i:
+com.billy.android.swipe.internal.SwipeHelper$1 -> com.billy.android.swipe.internal.a:
+com.billy.android.swipe.internal.ViewCompat -> com.billy.android.swipe.internal.c:
     boolean canListViewScrollVertical(android.widget.AbsListView,int) -> a
     void postInvalidateOnAnimation(android.view.View) -> a
-com.billy.android.swipe.listener.SimpleSwipeListener -> com.billy.android.swipe.c.a:
+com.billy.android.swipe.listener.SimpleSwipeListener -> com.billy.android.swipe.b.a:
     void onConsumerDetachedFromWrapper(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer) -> a
-    void onSwipeClosed(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int) -> a
     void onSwipeProcess(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int,boolean,float) -> a
     void onSwipeRelease(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int,float,float,float) -> a
     void onSwipeStateChanged(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int,int,float) -> a
     void onConsumerAttachedToWrapper(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer) -> b
     void onSwipeStart(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int) -> b
     void onSwipeOpened(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int) -> c
-com.billy.android.swipe.listener.SwipeListener -> com.billy.android.swipe.c.b:
+com.billy.android.swipe.listener.SwipeListener -> com.billy.android.swipe.b.b:
     void onConsumerDetachedFromWrapper(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer) -> a
     void onSwipeClosed(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int) -> a
     void onSwipeProcess(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int,boolean,float) -> a
@@ -4231,8 +4221,8 @@ kotlin.Pair -> kotlin.Pair:
     java.lang.Object first -> a
     java.lang.Object component1() -> a
     java.lang.Object component2() -> b
-    java.lang.Object getFirst() -> c
-    java.lang.Object getSecond() -> d
+    java.lang.Object getFirst() -> f
+    java.lang.Object getSecond() -> g
 kotlin.Result -> kotlin.Result:
     kotlin.Result$Companion Companion -> a
     java.lang.Object constructor-impl(java.lang.Object) -> a
@@ -4444,8 +4434,8 @@ kotlin.coroutines.jvm.internal.BaseContinuationImpl -> kotlin.coroutines.jvm.int
     void resumeWith(java.lang.Object) -> a
     java.lang.StackTraceElement getStackTraceElement() -> b
     java.lang.Object invokeSuspend(java.lang.Object) -> b
-    kotlin.coroutines.Continuation getCompletion() -> c
-    void releaseIntercepted() -> d
+    kotlin.coroutines.Continuation getCompletion() -> f
+    void releaseIntercepted() -> g
 kotlin.coroutines.jvm.internal.Boxing -> kotlin.coroutines.jvm.internal.a:
     java.lang.Integer boxInt(int) -> a
 kotlin.coroutines.jvm.internal.CompletedContinuation -> kotlin.coroutines.jvm.internal.b:
@@ -4454,8 +4444,8 @@ kotlin.coroutines.jvm.internal.CompletedContinuation -> kotlin.coroutines.jvm.in
 kotlin.coroutines.jvm.internal.ContinuationImpl -> kotlin.coroutines.jvm.internal.ContinuationImpl:
     kotlin.coroutines.Continuation intercepted -> b
     kotlin.coroutines.CoroutineContext _context -> c
-    void releaseIntercepted() -> d
-    kotlin.coroutines.Continuation intercepted() -> e
+    void releaseIntercepted() -> g
+    kotlin.coroutines.Continuation intercepted() -> h
 kotlin.coroutines.jvm.internal.CoroutineStackFrame -> kotlin.coroutines.jvm.internal.c:
     kotlin.coroutines.jvm.internal.CoroutineStackFrame getCallerFrame() -> a
     java.lang.StackTraceElement getStackTraceElement() -> b
@@ -4516,12 +4506,12 @@ kotlin.jvm.internal.CallableReference -> kotlin.jvm.internal.CallableReference:
     java.lang.Object receiver -> c
     java.lang.Object NO_RECEIVER -> a
     kotlin.reflect.KCallable reflected -> b
-    kotlin.reflect.KCallable compute() -> c
-    kotlin.reflect.KCallable computeReflected() -> d
-    java.lang.Object getBoundReceiver() -> e
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    kotlin.reflect.KCallable getReflected() -> g
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KCallable compute() -> f
+    kotlin.reflect.KCallable computeReflected() -> g
+    java.lang.Object getBoundReceiver() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    kotlin.reflect.KCallable getReflected() -> j
+    java.lang.String getSignature() -> k
 kotlin.jvm.internal.CallableReference$NoReceiver -> kotlin.jvm.internal.CallableReference$NoReceiver:
     kotlin.jvm.internal.CallableReference$NoReceiver INSTANCE -> a
     kotlin.jvm.internal.CallableReference$NoReceiver access$000() -> a
@@ -4538,7 +4528,7 @@ kotlin.jvm.internal.DefaultConstructorMarker -> kotlin.jvm.internal.f:
 kotlin.jvm.internal.FunctionBase -> kotlin.jvm.internal.g:
 kotlin.jvm.internal.FunctionReference -> kotlin.jvm.internal.FunctionReference:
     int arity -> d
-    kotlin.reflect.KCallable computeReflected() -> d
+    kotlin.reflect.KCallable computeReflected() -> g
 kotlin.jvm.internal.InlineMarker -> kotlin.jvm.internal.h:
     void mark(int) -> a
 kotlin.jvm.internal.Intrinsics -> kotlin.jvm.internal.i:
@@ -4556,28 +4546,28 @@ kotlin.jvm.internal.Intrinsics -> kotlin.jvm.internal.i:
     void throwParameterIsNullException(java.lang.String) -> d
 kotlin.jvm.internal.MutablePropertyReference1 -> kotlin.jvm.internal.MutablePropertyReference1:
     kotlin.reflect.KProperty1$Getter getGetter() -> a
-    kotlin.reflect.KCallable computeReflected() -> d
+    kotlin.reflect.KCallable computeReflected() -> g
 kotlin.jvm.internal.MutablePropertyReference1Impl -> kotlin.jvm.internal.MutablePropertyReference1Impl:
     java.lang.String signature -> f
     kotlin.reflect.KDeclarationContainer owner -> d
     java.lang.String name -> e
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    java.lang.String getSignature() -> k
 kotlin.jvm.internal.PackageReference -> kotlin.jvm.internal.j:
     java.lang.Class jClass -> a
     java.lang.String moduleName -> b
     java.lang.Class getJClass() -> a
 kotlin.jvm.internal.PropertyReference -> kotlin.jvm.internal.PropertyReference:
-    kotlin.reflect.KProperty getReflected() -> g
+    kotlin.reflect.KProperty getReflected() -> j
 kotlin.jvm.internal.PropertyReference1 -> kotlin.jvm.internal.PropertyReference1:
     kotlin.reflect.KProperty1$Getter getGetter() -> a
-    kotlin.reflect.KCallable computeReflected() -> d
+    kotlin.reflect.KCallable computeReflected() -> g
 kotlin.jvm.internal.PropertyReference1Impl -> kotlin.jvm.internal.PropertyReference1Impl:
     java.lang.String signature -> f
     kotlin.reflect.KDeclarationContainer owner -> d
     java.lang.String name -> e
-    kotlin.reflect.KDeclarationContainer getOwner() -> f
-    java.lang.String getSignature() -> h
+    kotlin.reflect.KDeclarationContainer getOwner() -> i
+    java.lang.String getSignature() -> k
 kotlin.jvm.internal.Ref$IntRef -> kotlin.jvm.internal.Ref$IntRef:
     int element -> a
 kotlin.jvm.internal.Ref$ObjectRef -> kotlin.jvm.internal.Ref$ObjectRef:
@@ -5662,42 +5652,33 @@ kotlinx.coroutines.scheduling.WorkQueue -> kotlinx.coroutines.scheduling.m:
 kotlinx.coroutines.selects.SelectClause0 -> kotlinx.coroutines.b.a:
 kotlinx.coroutines.selects.SelectClause1 -> kotlinx.coroutines.b.b:
 me.hegj.wandroid.app.ActivityLifecycleCallbacksImpl -> me.hegj.wandroid.app.a:
-me.hegj.wandroid.app.AppLifecyclesImpl -> me.hegj.wandroid.app.e:
+me.hegj.wandroid.app.AppLifecyclesImpl -> me.hegj.wandroid.app.b:
     void attachBaseContext(android.content.Context) -> a
     void onCreate(android.app.Application) -> a
     void onTerminate(android.app.Application) -> b
-me.hegj.wandroid.app.AppLifecyclesImpl$onCreate$1 -> me.hegj.wandroid.app.c:
-    android.app.Application $application -> a
-    com.billy.android.swipe.SwipeConsumer createSwipeBackConsumer(android.app.Activity) -> a
-me.hegj.wandroid.app.AppLifecyclesImpl$onCreate$1$1 -> me.hegj.wandroid.app.b:
-    android.app.Activity $activity -> a
-    void onSwipeOpened(com.billy.android.swipe.SmartSwipeWrapper,com.billy.android.swipe.SwipeConsumer,int) -> c
-me.hegj.wandroid.app.AppLifecyclesImpl$onCreate$2 -> me.hegj.wandroid.app.d:
-    me.hegj.wandroid.app.AppLifecyclesImpl$onCreate$2 INSTANCE -> a
-    boolean onFilter(android.app.Activity) -> a
 me.hegj.wandroid.app.GlobalConfiguration -> me.hegj.wandroid.app.GlobalConfiguration:
     void applyOptions(android.content.Context,com.jess.arms.di.module.GlobalConfigModule$Builder) -> a
     void injectFragmentLifecycle(android.content.Context,java.util.List) -> a
     void injectAppLifecycle(android.content.Context,java.util.List) -> b
     void injectActivityLifecycle(android.content.Context,java.util.List) -> c
-me.hegj.wandroid.app.GlobalConfiguration$applyOptions$1 -> me.hegj.wandroid.app.f:
+me.hegj.wandroid.app.GlobalConfiguration$applyOptions$1 -> me.hegj.wandroid.app.c:
     me.hegj.wandroid.app.GlobalConfiguration$applyOptions$1 INSTANCE -> a
     void configGson(android.content.Context,com.google.gson.GsonBuilder) -> a
-me.hegj.wandroid.app.GlobalConfiguration$applyOptions$2 -> me.hegj.wandroid.app.g:
+me.hegj.wandroid.app.GlobalConfiguration$applyOptions$2 -> me.hegj.wandroid.app.d:
     me.hegj.wandroid.app.GlobalConfiguration$applyOptions$2 INSTANCE -> a
     void configRetrofit(android.content.Context,retrofit2.Retrofit$Builder) -> a
-me.hegj.wandroid.app.GlobalConfiguration$applyOptions$3 -> me.hegj.wandroid.app.h:
+me.hegj.wandroid.app.GlobalConfiguration$applyOptions$3 -> me.hegj.wandroid.app.e:
     me.hegj.wandroid.app.GlobalConfiguration$applyOptions$3 INSTANCE -> a
     void configOkhttp(android.content.Context,okhttp3.OkHttpClient$Builder) -> a
-me.hegj.wandroid.app.GlobalConfiguration$applyOptions$4 -> me.hegj.wandroid.app.i:
+me.hegj.wandroid.app.GlobalConfiguration$applyOptions$4 -> me.hegj.wandroid.app.f:
     me.hegj.wandroid.app.GlobalConfiguration$applyOptions$4 INSTANCE -> a
     io.rx_cache2.internal.RxCache configRxCache(android.content.Context,io.rx_cache2.internal.RxCache$Builder) -> a
     java.lang.Void configRxCache(android.content.Context,io.rx_cache2.internal.RxCache$Builder) -> a
-me.hegj.wandroid.app.GlobalHttpHandlerImpl -> me.hegj.wandroid.app.j:
+me.hegj.wandroid.app.GlobalHttpHandlerImpl -> me.hegj.wandroid.app.g:
     android.content.Context context -> a
     okhttp3.Request onHttpRequestBefore(okhttp3.Interceptor$Chain,okhttp3.Request) -> a
     okhttp3.Response onHttpResultResponse(java.lang.String,okhttp3.Interceptor$Chain,okhttp3.Response) -> a
-me.hegj.wandroid.app.ResponseErrorListenerImpl -> me.hegj.wandroid.app.k:
+me.hegj.wandroid.app.ResponseErrorListenerImpl -> me.hegj.wandroid.app.h:
 me.hegj.wandroid.app.utils.CacheDataManager -> me.hegj.wandroid.app.utils.a:
     me.hegj.wandroid.app.utils.CacheDataManager INSTANCE -> a
     void clearAllCache(android.content.Context) -> a
@@ -5813,8 +5794,6 @@ me.hegj.wandroid.app.utils.StatusBarUtil -> me.hegj.wandroid.app.utils.q:
     void setColor(android.app.Activity,int,int) -> a
     void setRootView(android.app.Activity) -> a
     android.view.View createStatusBarView(android.app.Activity,int,int) -> b
-me.hegj.wandroid.app.utils.sliding.MyActivitySlidingBackConsumer -> me.hegj.wandroid.app.utils.a.a:
-    boolean tryAcceptMoving(int,float,float,float,float) -> a
 me.hegj.wandroid.di.component.DaggerMainComponent -> me.hegj.wandroid.a.a.b:
     javax.inject.Provider mainModelProvider -> d
     javax.inject.Provider applicationProvider -> c
@@ -8001,6 +7980,17 @@ me.hegj.wandroid.mvp.ui.activity.collect.CollectUrlFragment$initView$1 -> me.heg
 me.hegj.wandroid.mvp.ui.activity.collect.CollectUrlFragment$requestDataFaild$1 -> me.hegj.wandroid.mvp.ui.activity.collect.o:
     me.hegj.wandroid.mvp.ui.activity.collect.CollectUrlFragment this$0 -> a
     java.lang.String $errorMsg -> b
+me.hegj.wandroid.mvp.ui.activity.error.ErrorActivity -> me.hegj.wandroid.mvp.ui.activity.error.ErrorActivity:
+    java.util.HashMap _$_findViewCache -> e
+    void initData(android.os.Bundle) -> a
+    void setupActivityComponent(com.jess.arms.di.component.AppComponent) -> a
+    int initView(android.os.Bundle) -> b
+    android.view.View _$_findCachedViewById(int) -> e
+me.hegj.wandroid.mvp.ui.activity.error.ErrorActivity$initData$2 -> me.hegj.wandroid.mvp.ui.activity.error.a:
+    cat.ereza.customactivityoncrash.config.CaocConfig $config -> b
+    me.hegj.wandroid.mvp.ui.activity.error.ErrorActivity this$0 -> a
+me.hegj.wandroid.mvp.ui.activity.error.ErrorActivity$initData$3 -> me.hegj.wandroid.mvp.ui.activity.error.b:
+    me.hegj.wandroid.mvp.ui.activity.error.ErrorActivity this$0 -> a
 me.hegj.wandroid.mvp.ui.activity.integral.IntegralActivity -> me.hegj.wandroid.mvp.ui.activity.integral.IntegralActivity:
     com.kingja.loadsir.core.LoadService loadsir -> e
     int myRank -> k
@@ -8142,21 +8132,6 @@ me.hegj.wandroid.mvp.ui.activity.main.home.HomeFragment$collectChange$1$1 -> me.
     kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
     java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
     java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.home.HomeFragment$freshLogin$1 -> me.hegj.wandroid.mvp.ui.activity.main.home.HomeFragment$freshLogin$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    me.hegj.wandroid.mvp.ui.activity.main.home.HomeFragment this$0 -> g
-    int label -> f
-    me.hegj.wandroid.app.event.LoginFreshEvent $event -> h
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.home.HomeFragment$freshLogin$1$1 -> me.hegj.wandroid.mvp.ui.activity.main.home.HomeFragment$freshLogin$1$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    me.hegj.wandroid.mvp.ui.activity.main.home.HomeFragment$freshLogin$1 this$0 -> g
-    int label -> f
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
 me.hegj.wandroid.mvp.ui.activity.main.home.HomeFragment$initData$$inlined$apply$lambda$1 -> me.hegj.wandroid.mvp.ui.activity.main.home.a:
     me.hegj.wandroid.mvp.ui.adapter.AriticleAdapter $this_apply -> a
     me.hegj.wandroid.mvp.ui.activity.main.home.HomeFragment this$0 -> b
@@ -8264,21 +8239,6 @@ me.hegj.wandroid.mvp.ui.activity.main.home.search.SearchResultActivity$collectCh
     kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
     java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
     java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.home.search.SearchResultActivity$freshLogin$1 -> me.hegj.wandroid.mvp.ui.activity.main.home.search.SearchResultActivity$freshLogin$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    me.hegj.wandroid.app.event.LoginFreshEvent $event -> h
-    me.hegj.wandroid.mvp.ui.activity.main.home.search.SearchResultActivity this$0 -> g
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.home.search.SearchResultActivity$freshLogin$1$1 -> me.hegj.wandroid.mvp.ui.activity.main.home.search.SearchResultActivity$freshLogin$1$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    me.hegj.wandroid.mvp.ui.activity.main.home.search.SearchResultActivity$freshLogin$1 this$0 -> g
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
 me.hegj.wandroid.mvp.ui.activity.main.home.search.SearchResultActivity$initData$$inlined$apply$lambda$1 -> me.hegj.wandroid.mvp.ui.activity.main.home.search.g:
     me.hegj.wandroid.mvp.ui.adapter.AriticleAdapter $this_apply -> a
     me.hegj.wandroid.mvp.ui.activity.main.home.search.SearchResultActivity this$0 -> b
@@ -8323,11 +8283,11 @@ me.hegj.wandroid.mvp.ui.activity.main.me.MeFragment$initData$$inlined$run$lambda
     me.hegj.wandroid.mvp.ui.activity.main.me.MeFragment this$0 -> a
 me.hegj.wandroid.mvp.ui.activity.main.me.MeFragment_ViewBinding -> me.hegj.wandroid.mvp.ui.activity.main.me.MeFragment_ViewBinding:
     me.hegj.wandroid.mvp.ui.activity.main.me.MeFragment target -> a
-    android.view.View view7f090129 -> c
-    android.view.View view7f09012e -> b
-    android.view.View view7f090130 -> e
-    android.view.View view7f09012c -> d
-    android.view.View view7f09012b -> f
+    android.view.View view7f09012e -> c
+    android.view.View view7f090133 -> b
+    android.view.View view7f090135 -> e
+    android.view.View view7f090131 -> d
+    android.view.View view7f090130 -> f
 me.hegj.wandroid.mvp.ui.activity.main.me.MeFragment_ViewBinding$1 -> me.hegj.wandroid.mvp.ui.activity.main.me.b:
     me.hegj.wandroid.mvp.ui.activity.main.me.MeFragment_ViewBinding this$0 -> b
     me.hegj.wandroid.mvp.ui.activity.main.me.MeFragment val$target -> a
@@ -8390,21 +8350,6 @@ me.hegj.wandroid.mvp.ui.activity.main.project.ProjectChildFragment$collectChange
     kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
     java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
     java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.project.ProjectChildFragment$freshLogin$1 -> me.hegj.wandroid.mvp.ui.activity.main.project.ProjectChildFragment$freshLogin$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    me.hegj.wandroid.mvp.ui.activity.main.project.ProjectChildFragment this$0 -> g
-    me.hegj.wandroid.app.event.LoginFreshEvent $event -> h
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.project.ProjectChildFragment$freshLogin$1$1 -> me.hegj.wandroid.mvp.ui.activity.main.project.ProjectChildFragment$freshLogin$1$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    me.hegj.wandroid.mvp.ui.activity.main.project.ProjectChildFragment$freshLogin$1 this$0 -> g
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
 me.hegj.wandroid.mvp.ui.activity.main.project.ProjectChildFragment$initData$$inlined$apply$lambda$1 -> me.hegj.wandroid.mvp.ui.activity.main.project.a:
     me.hegj.wandroid.mvp.ui.activity.main.project.ProjectChildFragment this$0 -> a
     void onClick(com.chad.library.adapter.base.BaseViewHolder,me.hegj.wandroid.app.weight.CollectView,int) -> a
@@ -8498,21 +8443,6 @@ me.hegj.wandroid.mvp.ui.activity.main.publicNumber.PublicChildFragment$collectCh
     kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
     java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
     java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.publicNumber.PublicChildFragment$freshLogin$1 -> me.hegj.wandroid.mvp.ui.activity.main.publicNumber.PublicChildFragment$freshLogin$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    me.hegj.wandroid.mvp.ui.activity.main.publicNumber.PublicChildFragment this$0 -> g
-    int label -> f
-    me.hegj.wandroid.app.event.LoginFreshEvent $event -> h
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.publicNumber.PublicChildFragment$freshLogin$1$1 -> me.hegj.wandroid.mvp.ui.activity.main.publicNumber.PublicChildFragment$freshLogin$1$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    me.hegj.wandroid.mvp.ui.activity.main.publicNumber.PublicChildFragment$freshLogin$1 this$0 -> g
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
 me.hegj.wandroid.mvp.ui.activity.main.publicNumber.PublicChildFragment$initData$$inlined$apply$lambda$1 -> me.hegj.wandroid.mvp.ui.activity.main.publicNumber.a:
     me.hegj.wandroid.mvp.ui.activity.main.publicNumber.PublicChildFragment this$0 -> a
     void onClick(com.chad.library.adapter.base.BaseViewHolder,me.hegj.wandroid.app.weight.CollectView,int) -> a
@@ -8594,21 +8524,6 @@ me.hegj.wandroid.mvp.ui.activity.main.tree.NavigationFragment$collectChange$1$1
     kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
     java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
     java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.tree.NavigationFragment$freshLogin$1 -> me.hegj.wandroid.mvp.ui.activity.main.tree.NavigationFragment$freshLogin$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    me.hegj.wandroid.app.event.LoginFreshEvent $event -> h
-    me.hegj.wandroid.mvp.ui.activity.main.tree.NavigationFragment this$0 -> g
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.tree.NavigationFragment$freshLogin$1$1 -> me.hegj.wandroid.mvp.ui.activity.main.tree.NavigationFragment$freshLogin$1$1:
-    me.hegj.wandroid.mvp.ui.activity.main.tree.NavigationFragment$freshLogin$1 this$0 -> g
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
 me.hegj.wandroid.mvp.ui.activity.main.tree.NavigationFragment$initData$$inlined$apply$lambda$1 -> me.hegj.wandroid.mvp.ui.activity.main.tree.a:
     me.hegj.wandroid.mvp.ui.activity.main.tree.NavigationFragment this$0 -> a
     void onClick(int,int) -> a
@@ -8740,21 +8655,6 @@ me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.TreeinfoFragment$collectChan
     kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
     java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
     java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.TreeinfoFragment$freshLogin$1 -> me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.TreeinfoFragment$freshLogin$1:
-    me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.TreeinfoFragment this$0 -> g
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    me.hegj.wandroid.app.event.LoginFreshEvent $event -> h
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.TreeinfoFragment$freshLogin$1$1 -> me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.TreeinfoFragment$freshLogin$1$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.TreeinfoFragment$freshLogin$1 this$0 -> g
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
 me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.TreeinfoFragment$initData$$inlined$apply$lambda$1 -> me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.d:
     me.hegj.wandroid.mvp.ui.activity.main.tree.treeinfo.TreeinfoFragment this$0 -> a
     void onClick(com.chad.library.adapter.base.BaseViewHolder,me.hegj.wandroid.app.weight.CollectView,int) -> a
@@ -8856,9 +8756,9 @@ me.hegj.wandroid.mvp.ui.activity.start.LoginActivity$initData$4 -> me.hegj.wandr
     me.hegj.wandroid.mvp.ui.activity.start.LoginActivity this$0 -> a
 me.hegj.wandroid.mvp.ui.activity.start.LoginActivity_ViewBinding -> me.hegj.wandroid.mvp.ui.activity.start.LoginActivity_ViewBinding:
     me.hegj.wandroid.mvp.ui.activity.start.LoginActivity target -> a
-    android.view.View view7f090110 -> c
-    android.view.View view7f09010c -> b
-    android.view.View view7f09010d -> d
+    android.view.View view7f090115 -> c
+    android.view.View view7f090111 -> b
+    android.view.View view7f090112 -> d
 me.hegj.wandroid.mvp.ui.activity.start.LoginActivity_ViewBinding$1 -> me.hegj.wandroid.mvp.ui.activity.start.e:
     me.hegj.wandroid.mvp.ui.activity.start.LoginActivity_ViewBinding this$0 -> b
     me.hegj.wandroid.mvp.ui.activity.start.LoginActivity val$target -> a
@@ -8888,9 +8788,9 @@ me.hegj.wandroid.mvp.ui.activity.start.RegisterActivity$initData$5 -> me.hegj.wa
 me.hegj.wandroid.mvp.ui.activity.start.RegisterActivity$initData$6 -> me.hegj.wandroid.mvp.ui.activity.start.m:
     me.hegj.wandroid.mvp.ui.activity.start.RegisterActivity this$0 -> a
 me.hegj.wandroid.mvp.ui.activity.start.RegisterActivity_ViewBinding -> me.hegj.wandroid.mvp.ui.activity.start.RegisterActivity_ViewBinding:
-    android.view.View view7f090178 -> c
+    android.view.View view7f09017d -> c
     me.hegj.wandroid.mvp.ui.activity.start.RegisterActivity target -> a
-    android.view.View view7f090173 -> b
+    android.view.View view7f090178 -> b
 me.hegj.wandroid.mvp.ui.activity.start.RegisterActivity_ViewBinding$1 -> me.hegj.wandroid.mvp.ui.activity.start.n:
     me.hegj.wandroid.mvp.ui.activity.start.RegisterActivity_ViewBinding this$0 -> b
     me.hegj.wandroid.mvp.ui.activity.start.RegisterActivity val$target -> a
@@ -9006,25 +8906,8 @@ me.hegj.wandroid.mvp.ui.activity.web.WebviewActivity -> me.hegj.wandroid.mvp.ui.
     void collectUrlSucc(boolean,me.hegj.wandroid.mvp.model.entity.CollectUrlResponse) -> a
     void initData(android.os.Bundle) -> a
     void setupActivityComponent(com.jess.arms.di.component.AppComponent) -> a
-    int getId() -> b
     int initView(android.os.Bundle) -> b
-    void setCollect(boolean) -> b
     android.view.View _$_findCachedViewById(int) -> e
-me.hegj.wandroid.mvp.ui.activity.web.WebviewActivity$freshLogin$1 -> me.hegj.wandroid.mvp.ui.activity.web.WebviewActivity$freshLogin$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    me.hegj.wandroid.mvp.ui.activity.web.WebviewActivity this$0 -> g
-    int label -> f
-    me.hegj.wandroid.app.event.LoginFreshEvent $event -> h
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
-me.hegj.wandroid.mvp.ui.activity.web.WebviewActivity$freshLogin$1$1 -> me.hegj.wandroid.mvp.ui.activity.web.WebviewActivity$freshLogin$1$1:
-    kotlinx.coroutines.CoroutineScope p$ -> e
-    int label -> f
-    me.hegj.wandroid.mvp.ui.activity.web.WebviewActivity$freshLogin$1 this$0 -> g
-    kotlin.coroutines.Continuation create(java.lang.Object,kotlin.coroutines.Continuation) -> a
-    java.lang.Object invoke(java.lang.Object,java.lang.Object) -> a
-    java.lang.Object invokeSuspend(java.lang.Object) -> b
 me.hegj.wandroid.mvp.ui.activity.web.WebviewActivity$initData$$inlined$run$lambda$1 -> me.hegj.wandroid.mvp.ui.activity.web.a:
     me.hegj.wandroid.mvp.ui.activity.web.WebviewActivity this$0 -> a
 me.hegj.wandroid.mvp.ui.adapter.AriticleAdapter -> me.hegj.wandroid.mvp.ui.adapter.AriticleAdapter:
@@ -9965,15 +9848,15 @@ okio.ByteString -> okio.ByteString:
     java.lang.String hex() -> b
     boolean startsWith(okio.ByteString) -> b
     okio.ByteString encodeUtf8(java.lang.String) -> c
-    byte[] internalArray() -> c
     okio.ByteString digest(java.lang.String) -> d
-    okio.ByteString md5() -> d
-    okio.ByteString sha1() -> e
-    okio.ByteString sha256() -> f
-    int size() -> g
-    okio.ByteString toAsciiLowercase() -> h
-    byte[] toByteArray() -> i
-    java.lang.String utf8() -> j
+    byte[] internalArray() -> f
+    okio.ByteString md5() -> g
+    okio.ByteString sha1() -> h
+    okio.ByteString sha256() -> i
+    int size() -> j
+    okio.ByteString toAsciiLowercase() -> k
+    byte[] toByteArray() -> l
+    java.lang.String utf8() -> m
 okio.ForwardingSink -> okio.j:
 okio.ForwardingSource -> okio.k:
 okio.ForwardingTimeout -> okio.l:
@@ -10091,15 +9974,15 @@ okio.SegmentedByteString -> okio.SegmentedByteString:
     void write(okio.Buffer) -> a
     java.lang.String hex() -> b
     int segment(int) -> b
-    byte[] internalArray() -> c
-    okio.ByteString md5() -> d
-    okio.ByteString sha1() -> e
-    okio.ByteString sha256() -> f
-    int size() -> g
-    okio.ByteString toAsciiLowercase() -> h
-    byte[] toByteArray() -> i
-    java.lang.String utf8() -> j
-    okio.ByteString toByteString() -> k
+    byte[] internalArray() -> f
+    okio.ByteString md5() -> g
+    okio.ByteString sha1() -> h
+    okio.ByteString sha256() -> i
+    int size() -> j
+    okio.ByteString toAsciiLowercase() -> k
+    byte[] toByteArray() -> l
+    java.lang.String utf8() -> m
+    okio.ByteString toByteString() -> n
 okio.Sink -> okio.y:
 okio.Source -> okio.z:
 okio.Timeout -> okio.B:

+ 1 - 1
app/release/output.json

@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":3,"versionName":"1.0.3","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":4,"versionName":"1.0.3","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]

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

@@ -99,10 +99,18 @@
             android:label="开源项目"
             android:launchMode="singleTask"
             android:screenOrientation="portrait" />
+        <activity
+            android:name=".mvp.ui.activity.error.ErrorActivity"
+            android:label="错误界面"
+            android:process =":error_activity"
+            android:launchMode="singleTask"
+            android:screenOrientation="portrait" />
         <activity
             android:name="com.tencent.bugly.beta.ui.BetaActivity"
             android:configChanges="keyboardHidden|orientation|screenSize|locale"
-            android:theme="@android:style/Theme.Translucent" /> <!-- Arms 配置 -->
+            android:theme="@android:style/Theme.Translucent" />
+
+        <!-- Arms 配置 -->
         <meta-data
             android:name="design_width_in_dp"
             android:value="375" />

+ 18 - 8
app/src/main/java/me/hegj/wandroid/app/AppLifecyclesImpl.kt

@@ -19,9 +19,7 @@ import android.app.Application
 import android.content.Context
 import androidx.multidex.MultiDex
 import butterknife.ButterKnife
-import com.billy.android.swipe.*
-import com.billy.android.swipe.SwipeConsumer.DIRECTION_LEFT
-import com.billy.android.swipe.listener.SimpleSwipeListener
+import cat.ereza.customactivityoncrash.config.CaocConfig
 import com.jess.arms.base.delegate.AppLifecycles
 import com.jess.arms.integration.cache.IntelligentCache
 import com.jess.arms.utils.ArmsUtils
@@ -33,12 +31,12 @@ import com.tencent.bugly.Bugly
 import com.tencent.bugly.crashreport.CrashReport.UserStrategy
 import com.tencent.mmkv.MMKV
 import me.hegj.wandroid.BuildConfig
+import me.hegj.wandroid.R
 import me.hegj.wandroid.app.utils.HttpUtils
-import me.hegj.wandroid.app.utils.sliding.MyActivitySlidingBackConsumer
 import me.hegj.wandroid.app.weight.loadCallBack.EmptyCallback
 import me.hegj.wandroid.app.weight.loadCallBack.ErrorCallback
 import me.hegj.wandroid.app.weight.loadCallBack.LoadingCallback
-import me.hegj.wandroid.mvp.ui.activity.MainActivity
+import me.hegj.wandroid.mvp.ui.activity.error.ErrorActivity
 import me.hegj.wandroid.mvp.ui.activity.start.SplashActivity
 
 
@@ -58,7 +56,7 @@ class AppLifecyclesImpl : AppLifecycles {
 
     override fun onCreate(application: Application) {
         //初始化 SmartSwipeBack
-        SmartSwipeBack.activityBack(application, { activity ->
+      /*  SmartSwipeBack.activityBack(application, { activity ->
             MyActivitySlidingBackConsumer(activity)
                     .setRelativeMoveFactor(0.5f)
                     .setScrimColor(-0x80000000)
@@ -74,7 +72,7 @@ class AppLifecyclesImpl : AppLifecycles {
                     })
         }, {
             it !is MainActivity || it is SplashActivity//禁止主Activity滑动返回
-        })
+        })*/
 
         //初始化MMKV
         MMKV.initialize(application.filesDir.absolutePath + "/mmkv")
@@ -93,7 +91,6 @@ class AppLifecyclesImpl : AppLifecycles {
                 .addCallback(EmptyCallback())//空
                 .setDefaultCallback(SuccessCallback::class.java)//设置默认加载状态页
                 .commit()
-
         //初始化Bugly
         val context = application.applicationContext
         // 获取当前包名
@@ -105,6 +102,19 @@ class AppLifecyclesImpl : AppLifecycles {
         strategy.isUploadProcess = processName == null || processName == packageName
         // 初始化Bugly
         Bugly.init(context, "5a5f6366fc", BuildConfig.DEBUG)
+
+        CaocConfig.Builder.create()
+                .backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT) //default: CaocConfig.BACKGROUND_MODE_SHOW_CUSTOM
+                .enabled(true)//是否启用CustomActivityOnCrash崩溃拦截机制 必须启用!不然集成这个库干啥???
+                .showErrorDetails(false) //是否必须显示包含错误详细信息的按钮 default: true
+                .showRestartButton(false) //是否必须显示“重新启动应用程序”按钮或“关闭应用程序”按钮default: true
+                .logErrorOnRestart(false) //是否必须重新堆栈堆栈跟踪 default: true
+                .trackActivities(true) //是否必须跟踪用户访问的活动及其生命周期调用 default: false
+                .minTimeBetweenCrashesMs(2000) //应用程序崩溃之间必须经过的时间 default: 3000
+                .restartActivity(SplashActivity::class.java) // 重启的activity
+                .errorActivity(ErrorActivity::class.java) //发生错误跳转的activity
+                .eventListener(null) //允许你指定事件侦听器,以便在库显示错误活动 default: null
+                .apply()
     }
 
     override fun onTerminate(application: Application) {

+ 1 - 4
app/src/main/java/me/hegj/wandroid/mvp/ui/BaseActivity.kt

@@ -20,12 +20,10 @@ import com.jess.arms.utils.ThirdViewUtil.convertAutoView
 import com.trello.rxlifecycle2.android.ActivityEvent
 import io.reactivex.subjects.BehaviorSubject
 import io.reactivex.subjects.Subject
-import me.hegj.wandroid.app.event.SettingChangeEvent
 import me.hegj.wandroid.app.utils.SettingUtil
 import me.hegj.wandroid.app.utils.ShowUtils
 import me.hegj.wandroid.app.utils.StatusBarUtil
 import me.yokeyword.fragmentation.SupportActivity
-import org.greenrobot.eventbus.Subscribe
 import javax.inject.Inject
 
 abstract class BaseActivity<P : IPresenter> : SupportActivity(), IActivity, ActivityLifecycleable, IView {
@@ -36,7 +34,6 @@ abstract class BaseActivity<P : IPresenter> : SupportActivity(), IActivity, Acti
     @Inject
     @JvmField
     var mPresenter: P? = null//如果当前页面逻辑简单, Presenter 可以为 null
-
     @Synchronized
     override fun provideCache(): Cache<String, Any> {
         if (mCache == null) {
@@ -120,7 +117,6 @@ abstract class BaseActivity<P : IPresenter> : SupportActivity(), IActivity, Acti
     }
 
 
-
     override fun showLoading() {
         ShowUtils.showLoading(this)
     }
@@ -133,4 +129,5 @@ abstract class BaseActivity<P : IPresenter> : SupportActivity(), IActivity, Acti
         ShowUtils.showDialog(this, message)
     }
 
+
 }

+ 48 - 0
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/error/ErrorActivity.kt

@@ -0,0 +1,48 @@
+package me.hegj.wandroid.mvp.ui.activity.error
+
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
+import android.os.Bundle
+import cat.ereza.customactivityoncrash.CustomActivityOnCrash
+import com.jess.arms.di.component.AppComponent
+import com.jess.arms.mvp.IPresenter
+import kotlinx.android.synthetic.main.activity_error.*
+import kotlinx.android.synthetic.main.include_toolbar.*
+import me.hegj.wandroid.R
+import me.hegj.wandroid.app.utils.ShowUtils
+import me.hegj.wandroid.mvp.ui.BaseActivity
+
+
+class ErrorActivity : BaseActivity<IPresenter>() {
+    override fun setupActivityComponent(appComponent: AppComponent) {
+    }
+
+    override fun initView(savedInstanceState: Bundle?): Int {
+        return R.layout.activity_error
+    }
+
+    override fun initData(savedInstanceState: Bundle?) {
+        toolbar.run {
+            setSupportActionBar(this)
+            title = "发生错误"
+        }
+
+        val config = CustomActivityOnCrash.getConfigFromIntent(intent)
+        error_restart.setOnClickListener {
+            config?.run {
+                CustomActivityOnCrash.restartApplication(this@ErrorActivity, this)
+            }
+        }
+        error_sendError.setOnClickListener {
+            //获取剪贴板管理器:
+            val cm = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+            // 创建普通字符型ClipData
+            val mClipData = ClipData.newPlainText("Label", CustomActivityOnCrash.getStackTraceFromIntent(intent))
+            // 将ClipData内容放到系统剪贴板里。
+            cm.primaryClip = mClipData
+            ShowUtils.showToast(this, "已复制错误日志到粘贴板")
+            ShowUtils.showDialog(this, "扣 扣:824868922\n\n微 信:hgj840\n\n邮 箱:824868922@qq.com", "联系我")
+        }
+    }
+}

+ 15 - 20
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/home/HomeFragment.kt

@@ -203,7 +203,7 @@ class HomeFragment : BaseFragment<HomePresenter>(), HomeContract.View {
         val view = LayoutInflater.from(_mActivity).inflate(R.layout.include_banner, null).apply {
             banner.run {
                 setAdapter(BGABanner.Adapter<ImageView, BannerResponse> { _: BGABanner, view: ImageView, banner: BannerResponse?, i: Int ->
-                    ArmsUtils.obtainAppComponentFromContext(_mActivity).imageLoader().loadImage(_mActivity,
+                    ArmsUtils.obtainAppComponentFromContext(_mActivity).imageLoader().loadImage(_mActivity.applicationContext,
                             ImageConfigImpl
                                     .builder()
                                     .url(banner?.imagePath)
@@ -293,27 +293,22 @@ class HomeFragment : BaseFragment<HomePresenter>(), HomeContract.View {
     @Subscribe
     fun freshLogin(event: LoginFreshEvent) {
         //如果是登录了, 当前界面的数据与账户收藏集合id匹配的值需要设置已经收藏
-        GlobalScope.launch{
-            async{
-                if (event.login) {
-                    event.collectIds.forEach {
-                        for (item in adapter.data) {
-                            if (item.id == it.toInt()) {
-                                item.collect = true
-                                break
-                            }
-                        }
-                    }
-                } else {
-                    //退出了,把所有的收藏全部变为未收藏
-                    for (item in adapter.data) {
-                        item.collect = false
+        if (event.login) {
+            event.collectIds.forEach {
+                for (item in adapter.data) {
+                    if (item.id == it.toInt()) {
+                        item.collect = true
+                        break
                     }
                 }
-            }.run {
-                adapter.notifyDataSetChanged()
+            }
+        } else {
+            //退出了,把所有的收藏全部变为未收藏
+            for (item in adapter.data) {
+                item.collect = false
             }
         }
+        adapter.notifyDataSetChanged()
     }
 
     /**
@@ -322,7 +317,7 @@ class HomeFragment : BaseFragment<HomePresenter>(), HomeContract.View {
     @Subscribe
     fun collectChange(event: CollectEvent) {
         //使用协程做耗时操作
-        GlobalScope.launch{
+        GlobalScope.launch {
             async {
                 var indexResult = -1
                 for (index in adapter.data.indices) {
@@ -334,7 +329,7 @@ class HomeFragment : BaseFragment<HomePresenter>(), HomeContract.View {
                 }
                 indexResult
             }.run {
-                if(await()!=-1){
+                if (await() != -1) {
                     adapter.notifyItemChanged(await())
                 }
             }

+ 14 - 13
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/home/search/SearchActivity.kt

@@ -7,6 +7,7 @@ import android.view.Menu
 import android.view.View
 import android.widget.ImageView
 import androidx.appcompat.widget.SearchView
+import androidx.core.content.ContextCompat
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.afollestad.materialdialogs.MaterialDialog
 import com.google.gson.Gson
@@ -70,7 +71,7 @@ class SearchActivity : BaseActivity<SearchPresenter>(), SearchContract.View {
             MaterialDialog(this).show {
                 title(text = "温馨提示")
                 message(text = "确定清空搜索历史吗?")
-                positiveButton(text = "清空"){
+                positiveButton(text = "清空") {
                     historyData.clear()
                     adapter.setNewData(historyData)
                     CacheUtil.setSearchHistoryData(Gson().toJson(historyData))
@@ -84,14 +85,14 @@ class SearchActivity : BaseActivity<SearchPresenter>(), SearchContract.View {
                 if (historyData.contains(name)) {
                     //当搜索历史中包含该数据时 删除添加
                     historyData.remove(name)
-                }else if(historyData.size>=10){
-                    historyData.removeAt(historyData.size-1)
+                } else if (historyData.size >= 10) {
+                    historyData.removeAt(historyData.size - 1)
                 }
-                historyData.add(0,name)
+                historyData.add(0, name)
                 this@SearchActivity.adapter.setNewData(historyData)
                 CacheUtil.setSearchHistoryData(Gson().toJson(historyData))
-                launchActivity(Intent(this@SearchActivity,SearchResultActivity::class.java).apply {
-                    putExtra("searchKey",name)
+                launchActivity(Intent(this@SearchActivity, SearchResultActivity::class.java).apply {
+                    putExtra("searchKey", name)
                 })
                 false
             }
@@ -107,8 +108,8 @@ class SearchActivity : BaseActivity<SearchPresenter>(), SearchContract.View {
             }
             //点击了搜索历史的某一个
             setOnItemClickListener { adapter, view, position ->
-                launchActivity(Intent(this@SearchActivity,SearchResultActivity::class.java).apply {
-                    putExtra("searchKey",historyData[position])
+                launchActivity(Intent(this@SearchActivity, SearchResultActivity::class.java).apply {
+                    putExtra("searchKey", historyData[position])
                 })
             }
         }
@@ -136,14 +137,14 @@ class SearchActivity : BaseActivity<SearchPresenter>(), SearchContract.View {
                         if (historyData.contains(it)) {
                             //当搜索历史中包含该数据时 删除
                             historyData.remove(it)
-                        }else if(historyData.size>=10){
+                        } else if (historyData.size >= 10) {
                             //如果集合的size 有10个以上了,删除最后一个
-                            historyData.removeAt(historyData.size-1)
+                            historyData.removeAt(historyData.size - 1)
                         }
-                        launchActivity(Intent(this@SearchActivity,SearchResultActivity::class.java).apply {
-                            putExtra("searchKey",it)
+                        launchActivity(Intent(this@SearchActivity, SearchResultActivity::class.java).apply {
+                            putExtra("searchKey", it)
                         })
-                        historyData.add(0,it)//添加新数据到第一条
+                        historyData.add(0, it)//添加新数据到第一条
                         this@SearchActivity.adapter.setNewData(historyData)//刷新适配器
                         CacheUtil.setSearchHistoryData(Gson().toJson(historyData))//保存到本地
                     }

+ 12 - 17
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/home/search/SearchResultActivity.kt

@@ -226,27 +226,22 @@ class SearchResultActivity : BaseActivity<SearchResultPresenter>(), SearchResult
     @Subscribe
     fun freshLogin(event: LoginFreshEvent) {
         //如果是登录了, 当前界面的数据与账户收藏集合id匹配的值需要设置已经收藏
-        GlobalScope.launch {
-            async {
-                if (event.login) {
-                    event.collectIds.forEach {
-                        for (item in ariticleAdapter.data) {
-                            if (item.id == it.toInt()) {
-                                item.collect = true
-                                break
-                            }
-                        }
-                    }
-                } else {
-                    //退出了,把所有的收藏全部变为未收藏
-                    for (item in ariticleAdapter.data) {
-                        item.collect = false
+        if (event.login) {
+            event.collectIds.forEach {
+                for (item in ariticleAdapter.data) {
+                    if (item.id == it.toInt()) {
+                        item.collect = true
+                        break
                     }
                 }
-            }.run {
-                ariticleAdapter.notifyDataSetChanged()
+            }
+        } else {
+            //退出了,把所有的收藏全部变为未收藏
+            for (item in ariticleAdapter.data) {
+                item.collect = false
             }
         }
+        ariticleAdapter.notifyDataSetChanged()
     }
 
     /**

+ 12 - 17
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/project/ProjectChildFragment.kt

@@ -263,27 +263,22 @@ class ProjectChildFragment : BaseFragment<ProjectChildPresenter>(), ProjectChild
     @Subscribe
     fun freshLogin(event: LoginFreshEvent) {
         //如果是登录了, 当前界面的数据与账户收藏集合id匹配的值需要设置已经收藏
-        GlobalScope.launch{
-            async{
-                if (event.login) {
-                    event.collectIds.forEach {
-                        for (item in adapter.data) {
-                            if (item.id == it.toInt()) {
-                                item.collect = true
-                                break
-                            }
-                        }
-                    }
-                } else {
-                    //退出了,把所有的收藏全部变为未收藏
-                    for (item in adapter.data) {
-                        item.collect = false
+        if (event.login) {
+            event.collectIds.forEach {
+                for (item in adapter.data) {
+                    if (item.id == it.toInt()) {
+                        item.collect = true
+                        break
                     }
                 }
-            }.run {
-                adapter.notifyDataSetChanged()
+            }
+        } else {
+            //退出了,把所有的收藏全部变为未收藏
+            for (item in adapter.data) {
+                item.collect = false
             }
         }
+        adapter.notifyDataSetChanged()
     }
 
     /**

+ 9 - 6
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/project/ProjectFragment.kt

@@ -128,13 +128,16 @@ class ProjectFragment : BaseFragment<ProjectPresenter>(), ProjectContract.View {
         } else {
             loadsir.showSuccess()
             this.mDataList = titles
-            //根据头部集合循环添加对应的Fragment
-            for (i in titles.indices) {
-                fragments.add(ProjectChildFragment.newInstance(titles[i].id, 1))//分类项目页码从1开始
+            if(fragments.size==0){
+                //防止重复添加,出现 Can't change tag of fragment xxx bug
+                //根据头部集合循环添加对应的Fragment
+                for (i in titles.indices) {
+                    fragments.add(ProjectChildFragment.newInstance(titles[i].id, 1))//分类项目页码从1开始
+                }
+                //在第一个添加 最新项目Fragment
+                this.mDataList.add(0, ClassifyResponse(arrayListOf(), 0, 0, "最新项目", 0, 0, false, 0))
+                fragments.add(0, ProjectChildFragment.newInstance(true, 0))//最新项目页码从0开始
             }
-            //在第一个添加 最新项目Fragment
-            this.mDataList.add(0, ClassifyResponse(arrayListOf(), 0, 0, "最新项目", 0, 0, false, 0))
-            fragments.add(0, ProjectChildFragment.newInstance(true, 0))//最新项目页码从0开始
             //如果viewpager和 magicindicator 不为空的话,刷新他们 为空的话说明 用户还没有进来 这个Fragment
             pagerAdapter?.notifyDataSetChanged()
             magic_indicator?.navigator?.notifyDataSetChanged()

+ 12 - 17
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/publicNumber/PublicChildFragment.kt

@@ -232,27 +232,22 @@ class PublicChildFragment : BaseFragment<PublicChildPresenter>(), PublicChildCon
     @Subscribe
     fun freshLogin(event: LoginFreshEvent) {
         //如果是登录了, 当前界面的数据与账户收藏集合id匹配的值需要设置已经收藏
-        GlobalScope.launch{
-            async{
-                if (event.login) {
-                    event.collectIds.forEach {
-                        for (item in adapter.data) {
-                            if (item.id == it.toInt()) {
-                                item.collect = true
-                                break
-                            }
-                        }
-                    }
-                } else {
-                    //退出了,把所有的收藏全部变为未收藏
-                    for (item in adapter.data) {
-                        item.collect = false
+        if (event.login) {
+            event.collectIds.forEach {
+                for (item in adapter.data) {
+                    if (item.id == it.toInt()) {
+                        item.collect = true
+                        break
                     }
                 }
-            }.run {
-                adapter.notifyDataSetChanged()
+            }
+        } else {
+            //退出了,把所有的收藏全部变为未收藏
+            for (item in adapter.data) {
+                item.collect = false
             }
         }
+        adapter.notifyDataSetChanged()
     }
 
     /**

+ 6 - 3
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/publicNumber/PublicFragment.kt

@@ -123,9 +123,11 @@ class PublicFragment : BaseFragment<PublicPresenter>(), PublicContract.View {
         } else {
             loadsir.showSuccess()
             this.mDataList = titles
-            //根据头部集合循环添加对应的Fragment
-            for (i in titles.indices) {
-                fragments.add(PublicChildFragment.newInstance(titles[i].id))
+            if (fragments.size == 0) {
+                //根据头部集合循环添加对应的Fragment
+                for (i in titles.indices) {
+                    fragments.add(PublicChildFragment.newInstance(titles[i].id))
+                }
             }
             //如果viewpager和 magicindicator 不为空的话,刷新他们 为空的话说明 用户还没有进来 这个Fragment
             pagerAdapter?.notifyDataSetChanged()
@@ -133,6 +135,7 @@ class PublicFragment : BaseFragment<PublicPresenter>(), PublicContract.View {
             view_pager?.offscreenPageLimit = fragments.size
         }
     }
+
     /**
      * 接收到event时,重新设置当前界面控件的主题颜色和一些其他配置
      */

+ 13 - 18
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/tree/NavigationFragment.kt

@@ -167,29 +167,24 @@ class NavigationFragment : BaseFragment<NavigationPresenter>(), NavigationContra
     fun freshLogin(event: LoginFreshEvent) {
         //因为导航界面没有需要显示是否收藏,所以只要改动数据就好了
         //如果是登录了, 当前界面的数据与账户收藏集合id匹配的值需要设置已经收藏
-        GlobalScope.launch{
-            async{
-                if (event.login) {
-                    event.collectIds.forEach {
-                        for (item in adapter.data) {
-                            for (actri in item.articles) {
-                                if (it.toInt() == actri.id) {
-                                    actri.collect = true
-                                }
-                            }
-                        }
-                    }
-                } else {
-                    //退出了,把所有的收藏全部变为未收藏
-                    for (item in adapter.data) {
-                        for (actri in item.articles) {
-                            actri.collect = false
+        if (event.login) {
+            event.collectIds.forEach {
+                for (item in adapter.data) {
+                    for (actri in item.articles) {
+                        if (it.toInt() == actri.id) {
+                            actri.collect = true
                         }
                     }
                 }
             }
+        } else {
+            //退出了,把所有的收藏全部变为未收藏
+            for (item in adapter.data) {
+                for (actri in item.articles) {
+                    actri.collect = false
+                }
+            }
         }
-
     }
 
     /**

+ 12 - 17
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/main/tree/treeinfo/TreeinfoFragment.kt

@@ -232,27 +232,22 @@ class TreeinfoFragment : BaseFragment<TreeinfoPresenter>(), TreeinfoContract.Vie
     @Subscribe
     fun freshLogin(event: LoginFreshEvent) {
         //如果是登录了, 当前界面的数据与账户收藏集合id匹配的值需要设置已经收藏
-        GlobalScope.launch{
-            async{
-                if (event.login) {
-                    event.collectIds.forEach {
-                        for (item in adapter.data) {
-                            if (item.id == it.toInt()) {
-                                item.collect = true
-                                break
-                            }
-                        }
-                    }
-                } else {
-                    //退出了,把所有的收藏全部变为未收藏
-                    for (item in adapter.data) {
-                        item.collect = false
+        if (event.login) {
+            event.collectIds.forEach {
+                for (item in adapter.data) {
+                    if (item.id == it.toInt()) {
+                        item.collect = true
+                        break
                     }
                 }
-            }.run {
-                adapter.notifyDataSetChanged()
+            }
+        } else {
+            //退出了,把所有的收藏全部变为未收藏
+            for (item in adapter.data) {
+                item.collect = false
             }
         }
+        adapter.notifyDataSetChanged()
     }
 
     /**

+ 0 - 1
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/setting/GeneralPreferenceFragment.kt

@@ -116,7 +116,6 @@ class GeneralPreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.
             parentActivity.launchActivity(Intent(parentActivity, OpenProjectActivity::class.java))
             false
         }
-
     }
 
     /**

+ 1 - 0
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/setting/OpenProjectActivity.kt

@@ -83,5 +83,6 @@ class OpenProjectActivity : BaseActivity<IPresenter>() {
         openData.add(OpenProject("FlowLayout", "Android流式布局,支持单选、多选等,适合用于产品标签等。", "https://github.com/hongyangAndroid/FlowLayout"))
         openData.add(OpenProject("MMKV", "An efficient, small mobile key-value storage framework developed by WeChat. Works on iOS, Android, macOS and Windows.", "https://github.com/Tencent/MMKV"))
         openData.add(OpenProject("SmartSwipe", "An android library to make swipe more easier and more powerful. 关于侧滑,有这一个就够了", "https://github.com/luckybilly/SmartSwipe"))
+        openData.add(OpenProject("CustomActivityOnCrash", "Android库允许在应用崩溃时启动自定义活动,而不是显示讨厌的“不幸的是,X已经停止”对话框。", "https://github.com/Ereza/CustomActivityOnCrash"))
     }
 }

+ 7 - 12
app/src/main/java/me/hegj/wandroid/mvp/ui/activity/web/WebviewActivity.kt

@@ -213,21 +213,16 @@ class WebviewActivity : BaseActivity<WebviewPresenter>(), WebviewContract.View {
     @Subscribe
     fun freshLogin(event: LoginFreshEvent) {
         //如果是登录了, 当前界面的id与账户收藏集合id匹配的值需要设置已经收藏 并刷新menu
-        GlobalScope.launch{
-            async{
-                if (event.login) {
-                    event.collectIds.forEach {
-                        if (it.toInt() == id) {
-                            collect = true
-                            window.invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL)
-                            invalidateOptionsMenu()
-                            return@forEach
-                        }
-                    }
+        if (event.login) {
+            event.collectIds.forEach {
+                if (it.toInt() == id) {
+                    collect = true
+                    window.invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL)
+                    invalidateOptionsMenu()
+                    return@forEach
                 }
             }
         }
-
     }
 
     override fun onPause() {

+ 1 - 1
app/src/main/java/me/hegj/wandroid/mvp/ui/adapter/AriticleAdapter.kt

@@ -95,7 +95,7 @@ class AriticleAdapter(data: ArrayList<AriticleResponse>?) : BaseQuickAdapter<Ari
                             helper.setGone(R.id.item_project_new, false)
                         }
                         helper.getView<CollectView>(R.id.item_project_collect).isChecked = collect
-                        ArmsUtils.obtainAppComponentFromContext(mContext).imageLoader().loadImage(mContext,
+                        ArmsUtils.obtainAppComponentFromContext(mContext).imageLoader().loadImage(mContext.applicationContext,
                                 ImageConfigImpl
                                         .builder()
                                         .url(envelopePic)

+ 1 - 1
app/src/main/java/me/hegj/wandroid/mvp/ui/adapter/CollectAdapter.kt

@@ -71,7 +71,7 @@ class CollectAdapter(data: ArrayList<CollectResponse>?) : BaseQuickAdapter<Colle
                         helper.setGone(R.id.item_project_type1, false)
                         helper.setGone(R.id.item_project_new, false)
                         helper.getView<CollectView>(R.id.item_project_collect).isChecked = true
-                        ArmsUtils.obtainAppComponentFromContext(mContext).imageLoader().loadImage(mContext,
+                        ArmsUtils.obtainAppComponentFromContext(mContext).imageLoader().loadImage(mContext.applicationContext,
                                 ImageConfigImpl
                                         .builder()
                                         .url(envelopePic)

+ 4 - 13
app/src/main/java/me/hegj/wandroid/mvp/ui/adapter/TodoAdapter.kt

@@ -1,6 +1,5 @@
 package me.hegj.wandroid.mvp.ui.adapter
 
-import android.os.Build
 import android.util.TypedValue
 import android.widget.ImageView
 import androidx.cardview.widget.CardView
@@ -32,32 +31,24 @@ class TodoAdapter(data: ArrayList<TodoResponse>?) : BaseQuickAdapter<TodoRespons
                 //已完成
                 helper.setVisible(R.id.item_todo_status, true)
                 helper.setImageResource(R.id.item_todo_status, R.drawable.ic_done)
-                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                    helper.getView<CardView>(R.id.item_todo_cardview).foreground = mContext.getDrawable(R.drawable.forground_shap)
-                }
+                helper.getView<CardView>(R.id.item_todo_cardview).foreground = mContext.getDrawable(R.drawable.forground_shap)
             } else {
                 if (date < DatetimeUtil.nows.time) {
                     //未完成并且超过了预定完成时间
                     helper.setVisible(R.id.item_todo_status, true)
                     helper.setImageResource(R.id.item_todo_status, R.drawable.ic_yiguoqi)
-                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                        helper.getView<CardView>(R.id.item_todo_cardview).foreground = mContext.getDrawable(R.drawable.forground_shap)
-                    }
+                    helper.getView<CardView>(R.id.item_todo_cardview).foreground = mContext.getDrawable(R.drawable.forground_shap)
                 } else {
                     //未完成
                     helper.setVisible(R.id.item_todo_status, false)
                     TypedValue().apply {
                         mContext.theme.resolveAttribute(R.attr.selectableItemBackground, this, true)
                     }.run {
-                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                            helper.getView<CardView>(R.id.item_todo_cardview).foreground = mContext.getDrawable(resourceId)
-                        }
+                        helper.getView<CardView>(R.id.item_todo_cardview).foreground = mContext.getDrawable(resourceId)
                     }
                 }
             }
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                helper.getView<ImageView>(R.id.item_todo_tag).imageTintList = SettingUtil.getOneColorStateList(TodoType.byType(priority).color)
-            }
+            helper.getView<ImageView>(R.id.item_todo_tag).imageTintList = SettingUtil.getOneColorStateList(TodoType.byType(priority).color)
         }
     }
 }

BIN
app/src/main/res/drawable-xxxhdpi/ic_custom_drawable.png


+ 54 - 0
app/src/main/res/layout/activity_error.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <include layout="@layout/include_toolbar" />
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:fillViewport="true">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:orientation="vertical">
+
+            <ImageView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:contentDescription="@null"
+                android:src="@drawable/customactivityoncrash_error_image" />
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:gravity="center"
+                android:lineSpacingMultiplier="1.5"
+                android:text="@string/error_occurred"
+                android:textSize="15dp"
+                android:textStyle="bold" />
+
+            <Button
+                android:id="@+id/error_restart"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:text="重新启动"
+                android:textSize="15dp" />
+
+            <Button
+                android:id="@+id/error_sendError"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:text="反馈错误给我"
+                android:textSize="15dp" />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>

+ 4 - 0
app/src/main/res/values/strings.xml

@@ -42,4 +42,8 @@
     <string name="todo_update">编辑</string>
     <string name="todo_confirm">完成</string>
 
+
+    <string name="error_occurred">发生了意外错误。\n抱歉给老哥你带来了不便。</string>
+    <string name="error_details">错误详情</string>
+
 </resources>

+ 2 - 2
app/src/main/res/xml/root_preferences.xml

@@ -26,10 +26,10 @@
             android:key="mode"
             android:summary="@string/setting_modetip"
             android:title="@string/setting_mode" />
-        <SwitchPreferenceCompat
+       <!-- <SwitchPreferenceCompat
             android:key="slidable"
             android:summary="@string/setting_slidable_summary"
-            android:title="@string/setting_slidable_title" />
+            android:title="@string/setting_slidable_title" />-->
         <me.hegj.wandroid.app.weight.IconPreference
             android:key="color"
             android:summary="@string/choose_theme_color_summary"

+ 6 - 4
config.gradle

@@ -3,10 +3,10 @@ ext {
     android = [
             compileSdkVersion: 28,
             buildToolsVersion: "28.0.3",
-            minSdkVersion    : 16,
+            minSdkVersion    : 21,
             targetSdkVersion : 28,
-            versionCode      : 3,
-            versionName      : "1.0.2"
+            versionCode      : 4,
+            versionName      : "1.0.3"
     ]
 
     version = [
@@ -151,7 +151,9 @@ ext {
             //高性能通用 key-value 组件
             "mmkv"                  : 'com.tencent:mmkv:1.0.22',
             //侧滑返回
-            "swipe"                 : 'com.billy.android:smart-swipe:1.0.6',
+            "swipe"                 : 'com.billy.android:smart-swipe:1.0.7',
+            //阻止app崩溃
+            "customactivityoncrash" : 'cat.ereza:customactivityoncrash:2.2.0',
 
     ]
     customLibs = customDeps.values()