Browse Source

0.0.50.beta26
- 修复了 DialogX.dialogLifeCycleListener 不执行的问题;
- 新增加了 BaseDialog.getRunningDialogList(activity) 用于匹配对应 activity 上正在显示的 Dialog。

Kongzue 3 months ago
parent
commit
633895efe4

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

@@ -186,7 +186,7 @@ public abstract class BaseDialog implements LifecycleOwner {
             }
             dialog.dialogView = new WeakReference<>(view);
 
-            log(dialog.dialogKey() + ".show on " +( dialog.isActivityImplMode()? dialog.getOwnActivity():"window"));
+            log(dialog.dialogKey() + ".show on " + (dialog.isActivityImplMode() ? dialog.getOwnActivity() : "window"));
 
             addDialogToRunningList(dialog);
             switch (dialog.dialogImplMode) {
@@ -887,6 +887,16 @@ public abstract class BaseDialog implements LifecycleOwner {
         return new CopyOnWriteArrayList<>(runningDialogList);
     }
 
+    public static List<BaseDialog> getRunningDialogList(Activity activity) {
+        List<BaseDialog> result = new ArrayList<>();
+        for (BaseDialog dialog : runningDialogList) {
+            if (dialog != null && dialog.isShow && dialog.getOwnActivity() == activity) {
+                result.add(dialog);
+            }
+        }
+        return result;
+    }
+
     protected void imeShow(EditText editText, boolean show) {
         if (getOwnActivity() == null) {
             return;

+ 12 - 4
DialogX/src/main/java/com/kongzue/dialogx/interfaces/DialogLifecycleCallback.java

@@ -5,6 +5,8 @@ import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleOwner;
 import androidx.lifecycle.LifecycleRegistry;
 
+import com.kongzue.dialogx.DialogX;
+
 /**
  * @author: Kongzue
  * @github: https://github.com/kongzue/
@@ -13,9 +15,9 @@ import androidx.lifecycle.LifecycleRegistry;
  * @createTime: 2020/9/22 14:09
  */
 public abstract class DialogLifecycleCallback<T extends BaseDialog> implements LifecycleOwner {
-    
+
     private final LifecycleRegistry registry = new LifecycleRegistry(this);
-    
+
     public void onShow(T dialog) {
         try {
             //概率性报 no event down from INITIALIZED,目前尚不清楚为何
@@ -24,8 +26,11 @@ public abstract class DialogLifecycleCallback<T extends BaseDialog> implements L
             }
         } catch (Exception e) {
         }
+        if (DialogX.dialogLifeCycleListener != null && DialogX.dialogLifeCycleListener != this) {
+            DialogX.dialogLifeCycleListener.onShow(dialog);
+        }
     }
-    
+
     public void onDismiss(T dialog) {
         try {
             if (registry.getCurrentState() != Lifecycle.State.DESTROYED) {
@@ -34,8 +39,11 @@ public abstract class DialogLifecycleCallback<T extends BaseDialog> implements L
             }
         } catch (Exception e) {
         }
+        if (DialogX.dialogLifeCycleListener != null && DialogX.dialogLifeCycleListener != this) {
+            DialogX.dialogLifeCycleListener.onDismiss(dialog);
+        }
     }
-    
+
     @NonNull
     @Override
     public Lifecycle getLifecycle() {

+ 2 - 2
app/build.gradle

@@ -1,12 +1,12 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 30
+    compileSdkVersion 31
 
     defaultConfig {
         applicationId "com.kongzue.dialogxdemo"
         minSdkVersion 19
-        targetSdkVersion 30
+        targetSdkVersion 31
         versionCode BUILD_VERSION_INT as int
         versionName BUILD_VERSION
 

+ 31 - 9
app/src/main/java/com/kongzue/dialogxdemo/App.java

@@ -1,14 +1,9 @@
 package com.kongzue.dialogxdemo;
 
-import android.content.Intent;
-
 import com.kongzue.baseframework.BaseApp;
 import com.kongzue.baseframework.BaseFrameworkSettings;
 import com.kongzue.dialogx.DialogX;
-import com.kongzue.dialogx.interfaces.BaseDialog;
-import com.kongzue.dialogx.style.IOSStyle;
 import com.kongzue.dialogx.style.MaterialStyle;
-import com.kongzue.dialogxdemo.service.TestBackgroundService;
 
 /**
  * @author: Kongzue
@@ -21,7 +16,7 @@ public class App extends BaseApp<App> {
     @Override
     public void init() {
         BaseFrameworkSettings.DEBUGMODE = BuildConfig.DEBUG;
-        
+
         DialogX.init(this);
         DialogX.implIMPLMode = DialogX.IMPL_MODE.VIEW;
         DialogX.useHaptic = true;
@@ -42,10 +37,37 @@ public class App extends BaseApp<App> {
 
         DialogX.globalTheme = DialogX.THEME.AUTO;
         DialogX.onlyOnePopTip = false;
-        DialogX.onlyOnePopNotification=false;
+        DialogX.onlyOnePopNotification = false;
         DialogX.DEBUGMODE = BuildConfig.DEBUG;
-        DialogX.defaultWaitDialogWaitingText="hahah";
-        DialogX.defaultTipDialogSuccessText="okok!!!";
+        DialogX.defaultWaitDialogWaitingText = "hahah";
+        DialogX.defaultTipDialogSuccessText = "okok!!!";
+
+        // 全局背景遮罩层模糊范例(Android 12+)
+//        DialogX.dialogLifeCycleListener = new DialogLifecycleCallback<BaseDialog>() {
+//            @Override
+//            public void onShow(BaseDialog dialog) {
+//                super.onShow(dialog);
+//                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S && !(dialog instanceof NoTouchInterface) ) {
+//                    RenderEffect blurEffect = RenderEffect.createBlurEffect(20f, 20f, Shader.TileMode.CLAMP);
+//                    ((ViewGroup) dialog.getOwnActivity().getWindow().getDecorView()).getChildAt(0).setRenderEffect(blurEffect);
+//                }
+//            }
+
+//            @Override
+//            public void onDismiss(BaseDialog dialog) {
+//                super.onDismiss(dialog);
+//                List<BaseDialog> sameActivityRunningDialog = BaseDialog.getRunningDialogList(dialog.getOwnActivity());
+//                Iterator<BaseDialog> iterator = sameActivityRunningDialog.iterator();
+//                while (iterator.hasNext()) {
+//                    if (iterator.next() instanceof NoTouchInterface) {
+//                        iterator.remove();
+//                    }
+//                }
+//                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S && !(dialog instanceof PopTip) && !(dialog instanceof PopNotification) && (sameActivityRunningDialog.isEmpty() || sameActivityRunningDialog.get(0) == dialog)) {
+//                    ((ViewGroup) dialog.getOwnActivity().getWindow().getDecorView()).getChildAt(0).setRenderEffect(null);
+//                }
+//            }
+//        };
         //DialogX.ignoreUnsafeInsetsHorizontal = true;
 
         //以下代码用于测试后台 Service 启动对话框

+ 19 - 0
app/src/main/java/com/kongzue/dialogxdemo/activity/MainActivity.java

@@ -12,6 +12,8 @@ import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Color;
 import android.graphics.Rect;
+import android.graphics.RenderEffect;
+import android.graphics.Shader;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
@@ -1128,6 +1130,23 @@ public class MainActivity extends BaseActivity {
                         return false;
                     }
                 }).setMaskColor(getResources().getColor(com.kongzue.dialogx.iostheme.R.color.black30))
+                        //实验性,RenderEffect实现的背景模糊效果
+                        .setDialogLifecycleCallback(new DialogLifecycleCallback<CustomDialog>() {
+                            @Override
+                            public void onShow(CustomDialog dialog) {
+                                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
+                                    RenderEffect blurEffect = RenderEffect.createBlurEffect(20f, 20f, Shader.TileMode.CLAMP);
+                                    ((ViewGroup) getWindow().getDecorView()).getChildAt(0).setRenderEffect(blurEffect);
+                                }
+                            }
+
+                            @Override
+                            public void onDismiss(CustomDialog dialog) {
+                                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
+                                    ((ViewGroup) getWindow().getDecorView()).getChildAt(0).setRenderEffect(null);
+                                }
+                            }
+                        })
 //                        .setAlign(CustomDialog.ALIGN.LEFT)
                 //.setAnimResId(R.anim.anim_right_in, R.anim.anim_right_out)
 

+ 1 - 1
gradle.properties

@@ -19,7 +19,7 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.50.beta25
+BUILD_VERSION=0.0.50.beta26
 BUILD_VERSION_INT=50
 DIALOGX_STYLE_VERSION=5
 android.nonTransitiveRClass=true