Pārlūkot izejas kodu

0.0.46.beta13
- 增加所有对话框组件的 Lifecycle 支持;
- 修复 CustomDialog#hideWithExitAnim 时对话框未能正确完全隐藏的 bug;
- 修复 BottomMenu#setAllowInterceptTouch(false) 且菜单过长时可能导致部分菜单在屏幕外无法点击到的问题;

kongzue 2 gadi atpakaļ
vecāks
revīzija
bd48292206

+ 6 - 1
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomDialog.java

@@ -22,6 +22,8 @@ import android.widget.TextView;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.ColorRes;
+import androidx.annotation.NonNull;
+import androidx.lifecycle.Lifecycle;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
@@ -330,7 +332,8 @@ public class BottomDialog extends BaseDialog {
                     
                     isShow = true;
                     preShow = false;
-                    
+    
+                    lifecycle.setCurrentState(Lifecycle.State.CREATED);
                     getDialogLifecycleCallback().onShow(me);
                     
                     onDialogShow();
@@ -354,6 +357,7 @@ public class BottomDialog extends BaseDialog {
                                 cancelBlurView.setRadiusPx(style.messageDialogBlurSettings().blurBackgroundRoundRadiusPx());
                                 boxCancel.addView(cancelBlurView, 0, cancelButtonLp);
                             }
+                            lifecycle.setCurrentState(Lifecycle.State.RESUMED);
                         }
                     });
                     
@@ -367,6 +371,7 @@ public class BottomDialog extends BaseDialog {
                     dialogImpl = null;
                     bottomDialogTouchEventInterceptor = null;
                     dialogLifecycleCallback = null;
+                    lifecycle.setCurrentState(Lifecycle.State.DESTROYED);
                     System.gc();
                 }
             });

+ 7 - 1
DialogX/src/main/java/com/kongzue/dialogx/dialogs/CustomDialog.java

@@ -14,6 +14,7 @@ import android.view.animation.DecelerateInterpolator;
 import android.widget.RelativeLayout;
 
 import androidx.annotation.ColorInt;
+import androidx.lifecycle.Lifecycle;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
@@ -179,10 +180,12 @@ public class CustomDialog extends BaseDialog {
                 public void onShow() {
                     isShow = true;
                     preShow = false;
+    
+                    lifecycle.setCurrentState(Lifecycle.State.CREATED);
                     
+                    getDialogLifecycleCallback().onShow(me);
                     onDialogShow();
                     
-                    getDialogLifecycleCallback().onShow(me);
                     boxCustom.setVisibility(View.GONE);
                 }
                 
@@ -192,6 +195,7 @@ public class CustomDialog extends BaseDialog {
                     getDialogLifecycleCallback().onDismiss(me);
                     dialogImpl = null;
                     dialogLifecycleCallback = null;
+                    lifecycle.setCurrentState(Lifecycle.State.DESTROYED);
                     System.gc();
                 }
             });
@@ -223,6 +227,8 @@ public class CustomDialog extends BaseDialog {
                         }
                     });
                     getDialogImpl().boxCustom.setVisibility(View.VISIBLE);
+    
+                    lifecycle.setCurrentState(Lifecycle.State.RESUMED);
                 }
             });
             

+ 5 - 1
DialogX/src/main/java/com/kongzue/dialogx/dialogs/FullScreenDialog.java

@@ -15,6 +15,7 @@ import android.widget.RelativeLayout;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.ColorRes;
+import androidx.lifecycle.Lifecycle;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
@@ -162,7 +163,8 @@ public class FullScreenDialog extends BaseDialog {
                 public void onShow() {
                     isShow = true;
                     preShow = false;
-                    
+    
+                    lifecycle.setCurrentState(Lifecycle.State.CREATED);
                     onDialogShow();
                     
                     getDialogLifecycleCallback().onShow(me);
@@ -175,6 +177,7 @@ public class FullScreenDialog extends BaseDialog {
                     fullScreenDialogTouchEventInterceptor = null;
                     dialogImpl = null;
                     dialogLifecycleCallback = null;
+                    lifecycle.setCurrentState(Lifecycle.State.DESTROYED);
                     System.gc();
                 }
             });
@@ -211,6 +214,7 @@ public class FullScreenDialog extends BaseDialog {
                 @Override
                 public void run() {
                     getDialogXAnimImpl().doShowAnim(me, null);
+                    lifecycle.setCurrentState(Lifecycle.State.RESUMED);
                 }
             });
             

+ 10 - 3
DialogX/src/main/java/com/kongzue/dialogx/dialogs/MessageDialog.java

@@ -27,6 +27,7 @@ import android.widget.TextView;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.ColorRes;
+import androidx.lifecycle.Lifecycle;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
@@ -330,6 +331,11 @@ public class MessageDialog extends BaseDialog {
                     isShow = true;
                     preShow = false;
                     
+                    lifecycle.setCurrentState(Lifecycle.State.CREATED);
+                    
+                    onDialogShow();
+                    getDialogLifecycleCallback().onShow(me);
+    
                     getDialogXAnimImpl().doShowAnim(me, new ObjectRunnable<Float>() {
                         @Override
                         public void run(Float value) {
@@ -337,9 +343,6 @@ public class MessageDialog extends BaseDialog {
                         }
                     });
                     
-                    onDialogShow();
-                    getDialogLifecycleCallback().onShow(me);
-                    
                     if (style.messageDialogBlurSettings() != null && style.messageDialogBlurSettings().blurBackground()) {
                         bkg.post(new Runnable() {
                             @Override
@@ -352,6 +355,8 @@ public class MessageDialog extends BaseDialog {
                                 blurView.setTag("blurView");
                                 blurView.setRadiusPx(style.messageDialogBlurSettings().blurBackgroundRoundRadiusPx());
                                 bkg.addView(blurView, 0, params);
+    
+                                lifecycle.setCurrentState(Lifecycle.State.RESUMED);
                             }
                         });
                     }
@@ -385,6 +390,8 @@ public class MessageDialog extends BaseDialog {
                     getDialogLifecycleCallback().onDismiss(me);
                     dialogView = null;
                     dialogLifecycleCallback = null;
+    
+                    lifecycle.setCurrentState(Lifecycle.State.DESTROYED);
                     System.gc();
                 }
             });

+ 5 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopMenu.java

@@ -23,6 +23,8 @@ import android.widget.AdapterView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import androidx.lifecycle.Lifecycle;
+
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.interfaces.BaseDialog;
@@ -294,6 +296,7 @@ public class PopMenu extends BaseDialog {
                 public void onShow() {
                     isShow = true;
                     preShow = false;
+                    lifecycle.setCurrentState(Lifecycle.State.CREATED);
                     onDialogShow();
                     getDialogLifecycleCallback().onShow(me);
                     refreshUI();
@@ -307,6 +310,7 @@ public class PopMenu extends BaseDialog {
                     dialogImpl = null;
                     baseView = null;
                     dialogLifecycleCallback = null;
+                    lifecycle.setCurrentState(Lifecycle.State.DESTROYED);
                     System.gc();
                 }
             });
@@ -339,6 +343,7 @@ public class PopMenu extends BaseDialog {
                             boxRoot.setBkgAlpha(value);
                         }
                     });
+                    lifecycle.setCurrentState(Lifecycle.State.RESUMED);
                 }
             });
             

+ 6 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopNotification.java

@@ -23,6 +23,7 @@ import android.widget.TextView;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.ColorRes;
+import androidx.lifecycle.Lifecycle;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
@@ -532,7 +533,10 @@ public class PopNotification extends BaseDialog implements NoTouchInterface {
                 public void onShow() {
                     isShow = true;
                     preShow = false;
+    
+                    lifecycle.setCurrentState(Lifecycle.State.CREATED);
                     boxRoot.setAlpha(0f);
+                    
                     onDialogShow();
                     getDialogLifecycleCallback().onShow(me);
                 }
@@ -545,6 +549,7 @@ public class PopNotification extends BaseDialog implements NoTouchInterface {
                     isShow = false;
                     getDialogLifecycleCallback().onDismiss(me);
                     dialogImpl = null;
+                    lifecycle.setCurrentState(Lifecycle.State.DESTROYED);
                     System.gc();
                 }
             });
@@ -621,6 +626,7 @@ public class PopNotification extends BaseDialog implements NoTouchInterface {
                         blurBody.setContentView(boxBody);
                         blurBody.addView(blurView, 0, params);
                     }
+                    lifecycle.setCurrentState(Lifecycle.State.RESUMED);
                 }
             });
             

+ 4 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java

@@ -21,6 +21,7 @@ import android.widget.TextView;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.ColorRes;
+import androidx.lifecycle.Lifecycle;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
@@ -468,6 +469,7 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
                 public void onShow() {
                     isShow = true;
                     preShow = false;
+                    lifecycle.setCurrentState(Lifecycle.State.CREATED);
                     boxRoot.setAlpha(0f);
                     onDialogShow();
                     getDialogLifecycleCallback().onShow(me);
@@ -479,6 +481,7 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
                     isShow = false;
                     getDialogLifecycleCallback().onDismiss(me);
                     dialogImpl = null;
+                    lifecycle.setCurrentState(Lifecycle.State.DESTROYED);
                     System.gc();
                 }
             });
@@ -526,6 +529,7 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
                 @Override
                 public void run() {
                     getDialogXAnimImpl().doShowAnim(me, null);
+                    lifecycle.setCurrentState(Lifecycle.State.RESUMED);
                 }
             });
             

+ 5 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -20,6 +20,7 @@ import android.widget.TextView;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.ColorRes;
+import androidx.lifecycle.Lifecycle;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
@@ -331,6 +332,7 @@ public class WaitDialog extends BaseDialog {
                 public void onShow() {
                     isShow = true;
                     preShow = false;
+                    lifecycle.setCurrentState(Lifecycle.State.CREATED);
                     boxRoot.setAlpha(0f);
                     bkg.post(new Runnable() {
                         @Override
@@ -346,6 +348,8 @@ public class WaitDialog extends BaseDialog {
                             
                             onDialogShow();
                             getDialogLifecycleCallback().onShow(me());
+    
+                            lifecycle.setCurrentState(Lifecycle.State.RESUMED);
                         }
                     });
                 }
@@ -361,6 +365,7 @@ public class WaitDialog extends BaseDialog {
                     dialogLifecycleCallback = null;
                     if (me != null) me.clear();
                     me = null;
+                    lifecycle.setCurrentState(Lifecycle.State.DESTROYED);
                     System.gc();
                 }
             });

+ 9 - 1
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java

@@ -29,6 +29,7 @@ import androidx.fragment.app.FragmentManager;
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleEventObserver;
 import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.LifecycleRegistry;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
@@ -58,7 +59,7 @@ import static com.kongzue.dialogx.DialogX.DEBUGMODE;
  * @mail: myzcxhh@live.cn
  * @createTime: 2020/9/22 14:10
  */
-public abstract class BaseDialog {
+public abstract class BaseDialog implements LifecycleOwner {
     
     private static Thread uiThread;
     private static WeakReference<FrameLayout> rootFrameLayout;
@@ -70,6 +71,7 @@ public abstract class BaseDialog {
     protected DialogX.IMPL_MODE dialogImplMode = DialogX.implIMPLMode;
     protected WeakReference<DialogXFloatingWindowActivity> floatingWindowActivity;
     private WeakReference<DialogListBuilder> dialogListBuilder;
+    protected LifecycleRegistry lifecycle = new LifecycleRegistry(this);
     
     public static void init(Context context) {
         if (context == null) {
@@ -854,4 +856,10 @@ public abstract class BaseDialog {
     
     protected void onDialogRefreshUI() {
     }
+    
+    @NonNull
+    @Override
+    public Lifecycle getLifecycle() {
+        return lifecycle;
+    }
 }