Ver Fonte

0.0.44.beta4

kongzue há 3 anos atrás
pai
commit
10851e234a

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

@@ -1026,4 +1026,9 @@ public class BottomDialog extends BaseDialog {
         refreshUI();
         return this;
     }
+    
+    public BottomDialog setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

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

@@ -1091,4 +1091,9 @@ public class BottomMenu extends BottomDialog {
         refreshUI();
         return this;
     }
+    
+    public BottomMenu setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

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

@@ -531,4 +531,9 @@ public class CustomDialog extends BaseDialog {
     protected void shutdown() {
         dismiss();
     }
+    
+    public CustomDialog setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

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

@@ -494,4 +494,9 @@ public class FullScreenDialog extends BaseDialog {
         refreshUI();
         return this;
     }
+    
+    public FullScreenDialog setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

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

@@ -574,4 +574,9 @@ public class InputDialog extends MessageDialog {
         refreshUI();
         return this;
     }
+    
+    public InputDialog setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

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

@@ -1100,4 +1100,9 @@ public class MessageDialog extends BaseDialog {
         refreshUI();
         return this;
     }
+    
+    public MessageDialog setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

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

@@ -21,6 +21,7 @@ import android.widget.AdapterView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
@@ -707,4 +708,9 @@ public class PopMenu extends BaseDialog {
         this.alignGravity = alignGravity;
         return this;
     }
+    
+    public PopMenu setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

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

@@ -962,4 +962,9 @@ public class PopTip extends BaseDialog {
     protected void shutdown() {
         dismiss();
     }
+    
+    public PopTip setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

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

@@ -2,6 +2,7 @@ package com.kongzue.dialogx.dialogs;
 
 import android.app.Activity;
 
+import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
 
 import java.lang.ref.WeakReference;
@@ -159,4 +160,9 @@ public class TipDialog extends WaitDialog {
         refreshUI();
         return this;
     }
+    
+    public TipDialog setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

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

@@ -933,4 +933,9 @@ public class WaitDialog extends BaseDialog {
         refreshUI();
         return this;
     }
+    
+    public WaitDialog setDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
+        this.dialogImplMode = dialogImplMode;
+        return this;
+    }
 }

+ 35 - 3
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java

@@ -17,6 +17,7 @@ import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.view.WindowManager;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
@@ -62,6 +63,7 @@ public abstract class BaseDialog {
     private static List<BaseDialog> runningDialogList;
     private WeakReference<View> dialogView;
     protected WeakReference<DialogFragmentImpl> ownDialogFragmentImpl;
+    protected DialogX.IMPL_MODE dialogImplMode = DialogX.implIMPLMode;
     
     public static void init(Context context) {
         if (context == null) context = ActivityLifecycleImpl.getTopActivity();
@@ -80,7 +82,11 @@ public abstract class BaseDialog {
         try {
             contextWeakReference = new WeakReference<>(activity);
             rootFrameLayout = new WeakReference<>((FrameLayout) activity.getWindow().getDecorView());
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+                publicWindowInsets(rootFrameLayout.get().getRootWindowInsets());
+            }
         } catch (Exception e) {
+            e.printStackTrace();
             error("DialogX.init: 初始化异常,找不到Activity的根布局");
         }
     }
@@ -137,7 +143,7 @@ public abstract class BaseDialog {
             log(baseDialog.dialogKey() + ".show");
             addDialogToRunningList(baseDialog);
             
-            switch (DialogX.implIMPLMode) {
+            switch (baseDialog.dialogImplMode) {
                 case WINDOW:
                     runOnMain(new Runnable() {
                         @Override
@@ -198,7 +204,7 @@ public abstract class BaseDialog {
             
             log(baseDialog + ".show");
             addDialogToRunningList(baseDialog);
-            switch (DialogX.implIMPLMode) {
+            switch (baseDialog.dialogImplMode) {
                 case WINDOW:
                     runOnMain(new Runnable() {
                         @Override
@@ -242,7 +248,7 @@ public abstract class BaseDialog {
         removeDialogToRunningList(baseDialog);
         if (baseDialog.dialogView != null) baseDialog.dialogView.clear();
         
-        switch (DialogX.implIMPLMode) {
+        switch (baseDialog.dialogImplMode) {
             case WINDOW:
                 runOnMain(new Runnable() {
                     @Override
@@ -586,4 +592,30 @@ public abstract class BaseDialog {
         if (maxWidth == 0) return DialogX.dialogMaxWidth;
         return maxWidth;
     }
+    
+    public DialogX.IMPL_MODE getDialogImplMode() {
+        return dialogImplMode;
+    }
+    
+    protected static WindowInsets windowInsets;
+    
+    public static WindowInsets publicWindowInsets() {
+        return windowInsets;
+    }
+    
+    public static void publicWindowInsets(WindowInsets windowInsets) {
+        if (windowInsets != null) BaseDialog.windowInsets = windowInsets;
+        if (runningDialogList != null) {
+            CopyOnWriteArrayList<BaseDialog> copyOnWriteList = new CopyOnWriteArrayList<>(runningDialogList);
+            for (int i = copyOnWriteList.size() - 1; i >= 0; i--) {
+                BaseDialog baseDialog = copyOnWriteList.get(i);
+                if (baseDialog.isShow && baseDialog.getDialogView() != null) {
+                    View boxRoot = baseDialog.getDialogView().findViewById(R.id.box_root);
+                    if (boxRoot instanceof DialogXBaseRelativeLayout) {
+                        ((DialogXBaseRelativeLayout) boxRoot).paddingView(windowInsets);
+                    }
+                }
+            }
+        }
+    }
 }

+ 18 - 2
DialogX/src/main/java/com/kongzue/dialogx/util/views/DialogXBaseRelativeLayout.java

@@ -76,6 +76,7 @@ public class DialogXBaseRelativeLayout extends RelativeLayout {
                 focusable = a.getBoolean(R.styleable.DialogXBaseRelativeLayout_baseFocusable, true);
                 autoUnsafePlacePadding = a.getBoolean(R.styleable.DialogXBaseRelativeLayout_autoSafeArea, true);
                 a.recycle();
+                isInited = true;
             }
             if (focusable) {
                 setFocusable(true);
@@ -83,7 +84,9 @@ public class DialogXBaseRelativeLayout extends RelativeLayout {
                 requestFocus();
             }
             setBkgAlpha(0f);
-            isInited = true;
+            if (parentDialog != null && parentDialog.getDialogImplMode() != DialogX.IMPL_MODE.VIEW) {
+                setFitsSystemWindows(true);
+            }
         }
     }
     
@@ -96,6 +99,7 @@ public class DialogXBaseRelativeLayout extends RelativeLayout {
     
     @Override
     public WindowInsets dispatchApplyWindowInsets(WindowInsets insets) {
+        BaseDialog.publicWindowInsets(insets);
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             if (DialogX.useActivityLayoutTranslationNavigationBar)
                 paddingView(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom());
@@ -104,7 +108,13 @@ public class DialogXBaseRelativeLayout extends RelativeLayout {
     }
     
     public void paddingView(WindowInsets insets) {
-        if (insets == null) return;
+        if (insets == null) {
+            if (BaseDialog.publicWindowInsets() != null) {
+                insets = BaseDialog.publicWindowInsets();
+            } else {
+                return;
+            }
+        }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             paddingView(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom());
         }
@@ -270,6 +280,12 @@ public class DialogXBaseRelativeLayout extends RelativeLayout {
     
     public DialogXBaseRelativeLayout setParentDialog(BaseDialog parentDialog) {
         this.parentDialog = parentDialog;
+        if (parentDialog.getDialogImplMode() != DialogX.IMPL_MODE.VIEW) {
+            setFitsSystemWindows(true);
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+                paddingView(getRootWindowInsets());
+            }
+        }
         return this;
     }
     

+ 1 - 1
gradle.properties

@@ -18,5 +18,5 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.44.alpha3
+BUILD_VERSION=0.0.44.beta4
 BUILD_VERSION_INT=43