kongzue пре 3 година
родитељ
комит
63cc04b5fd

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

@@ -7,9 +7,6 @@ import android.os.Handler;
 import android.os.Looper;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -458,7 +455,7 @@ public class BottomDialog extends BaseDialog {
         
         @Override
         public void refreshView() {
-            if (boxRoot == null || getContext() == null) {
+            if (boxRoot == null || getTopActivity() == null) {
                 return;
             }
             if (backgroundColor != -1) {
@@ -557,7 +554,7 @@ public class BottomDialog extends BaseDialog {
         @Override
         public void doDismiss(View v) {
             if (v != null) v.setEnabled(false);
-            if (getContext() == null) return;
+            if (getTopActivity() == null) return;
             
             if (!dismissAnimFlag) {
                 dismissAnimFlag = true;
@@ -608,7 +605,7 @@ public class BottomDialog extends BaseDialog {
                 if (exitAnimDuration >= 0) {
                     exitAnimDurationTemp = exitAnimDuration;
                 }
-                ObjectAnimator exitAnim = ObjectAnimator.ofFloat(boxBkg, "y", boxBkg.getY(), boxBkg.getHeight());
+                ObjectAnimator exitAnim = ObjectAnimator.ofFloat(boxBkg, "y", boxBkg.getY(),boxRoot.getUnsafePlace().top );
                 exitAnim.setDuration(exitAnimDurationTemp);
                 exitAnim.start();
             }

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

@@ -491,9 +491,9 @@ public class BottomMenu extends BottomDialog {
             
             
             if (!isLightTheme()) {
-                listView = new BottomDialogListView(dialog, getContext(), R.style.DialogXCompatThemeDark);
+                listView = new BottomDialogListView(dialog, getTopActivity(), R.style.DialogXCompatThemeDark);
             } else {
-                listView = new BottomDialogListView(dialog, getContext());
+                listView = new BottomDialogListView(dialog, getTopActivity());
             }
             listView.setOverScrollMode(OVER_SCROLL_NEVER);
             listView.setDivider(getResources().getDrawable(dividerDrawableResId));
@@ -619,7 +619,7 @@ public class BottomMenu extends BottomDialog {
         if (getDialogImpl() == null) return;
         if (listView != null) {
             if (menuListAdapter == null) {
-                menuListAdapter = new BottomMenuArrayAdapter(me, getContext(), menuList);
+                menuListAdapter = new BottomMenuArrayAdapter(me, getTopActivity(), menuList);
             }
             if (listView.getAdapter() == null) {
                 listView.setAdapter(menuListAdapter);

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

@@ -183,7 +183,7 @@ public class CustomDialog extends BaseDialog {
                                 exitAnimResId = R.anim.anim_dialogx_right_exit;
                                 break;
                         }
-                        enterAnim = AnimationUtils.loadAnimation(getContext(), enterAnimResId);
+                        enterAnim = AnimationUtils.loadAnimation(getTopActivity(), enterAnimResId);
                         enterAnim.setInterpolator(new DecelerateInterpolator(2f));
                     } else {
                         int enterAnimResIdTemp = R.anim.anim_dialogx_default_enter;
@@ -193,7 +193,7 @@ public class CustomDialog extends BaseDialog {
                         if (enterAnimResId != 0) {
                             enterAnimResIdTemp = enterAnimResId;
                         }
-                        enterAnim = AnimationUtils.loadAnimation(getContext(), enterAnimResIdTemp);
+                        enterAnim = AnimationUtils.loadAnimation(getTopActivity(), enterAnimResIdTemp);
                     }
                     long enterAnimDurationTemp = enterAnim.getDuration();
                     if (overrideEnterDuration >= 0) {
@@ -208,7 +208,7 @@ public class CustomDialog extends BaseDialog {
                     
                     boxRoot.setBackgroundColor(maskColor);
                     if (overrideMaskEnterAnimRes != 0) {
-                        Animation maskEnterAnim = AnimationUtils.loadAnimation(getContext(), overrideMaskEnterAnimRes);
+                        Animation maskEnterAnim = AnimationUtils.loadAnimation(getTopActivity(), overrideMaskEnterAnimRes);
                         maskEnterAnim.setInterpolator(new DecelerateInterpolator(2f));
                         maskEnterAnim.setDuration(enterAnimDurationTemp);
                         boxRoot.startAnimation(maskEnterAnim);
@@ -230,7 +230,7 @@ public class CustomDialog extends BaseDialog {
         
         @Override
         public void refreshView() {
-            if (boxRoot == null || getContext() == null) {
+            if (boxRoot == null || getTopActivity() == null) {
                 return;
             }
             RelativeLayout.LayoutParams rlp;
@@ -302,7 +302,7 @@ public class CustomDialog extends BaseDialog {
                             exitAnimResIdTemp = exitAnimResId;
                         }
                         
-                        Animation exitAnim = AnimationUtils.loadAnimation(getContext() == null ? boxCustom.getContext() : getContext(), exitAnimResIdTemp);
+                        Animation exitAnim = AnimationUtils.loadAnimation(getTopActivity() == null ? boxCustom.getContext() : getTopActivity(), exitAnimResIdTemp);
                         
                         long exitAnimDurationTemp = exitAnim.getDuration();
                         if (overrideExitDuration >= 0) {
@@ -331,7 +331,7 @@ public class CustomDialog extends BaseDialog {
                         boxCustom.startAnimation(exitAnim);
                         
                         if (overrideMaskExitAnimRes != 0) {
-                            Animation maskExitAnim = AnimationUtils.loadAnimation(getContext(), overrideMaskExitAnimRes);
+                            Animation maskExitAnim = AnimationUtils.loadAnimation(getTopActivity(), overrideMaskExitAnimRes);
                             maskExitAnim.setDuration(exitAnimDurationTemp);
                             maskExitAnim.setInterpolator(new DecelerateInterpolator(2f));
                             boxRoot.startAnimation(maskExitAnim);

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

@@ -3,7 +3,6 @@ package com.kongzue.dialogx.dialogs;
 import android.animation.ObjectAnimator;
 import android.animation.ValueAnimator;
 import android.app.Activity;
-import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.os.Handler;
 import android.os.Looper;
@@ -24,10 +23,8 @@ import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.OnSafeInsetsChangeListener;
 import com.kongzue.dialogx.interfaces.ScrollController;
-import com.kongzue.dialogx.util.DialogXImplModeAgent;
 import com.kongzue.dialogx.util.FullScreenDialogTouchEventInterceptor;
 import com.kongzue.dialogx.util.views.ActivityScreenShotImageView;
-import com.kongzue.dialogx.util.views.BottomDialogScrollView;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 import com.kongzue.dialogx.util.views.MaxRelativeLayout;
 
@@ -251,7 +248,7 @@ public class FullScreenDialog extends BaseDialog {
         
         @Override
         public void refreshView() {
-            if (boxRoot == null || getContext() == null) {
+            if (boxRoot == null || getTopActivity() == null) {
                 return;
             }
             if (backgroundColor != -1) {
@@ -297,7 +294,7 @@ public class FullScreenDialog extends BaseDialog {
         @Override
         public void doDismiss(View v) {
             if (v != null) v.setEnabled(false);
-            if (getContext() == null) return;
+            if (getTopActivity() == null) return;
             
             if (!dismissAnimFlag) {
                 dismissAnimFlag = true;

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

@@ -302,7 +302,7 @@ public class MessageDialog extends BaseDialog {
                     if (customEnterAnimResId != 0) {
                         enterAnimResId = customEnterAnimResId;
                     }
-                    Animation enterAnim = AnimationUtils.loadAnimation(getContext(), enterAnimResId);
+                    Animation enterAnim = AnimationUtils.loadAnimation(getTopActivity(), enterAnimResId);
                     long enterAnimDurationTemp = enterAnim.getDuration();
                     if (overrideEnterDuration >= 0) {
                         enterAnimDurationTemp = overrideEnterDuration;
@@ -461,7 +461,7 @@ public class MessageDialog extends BaseDialog {
         
         public void refreshView() {
             log("#refreshView");
-            if (boxRoot == null || getContext() == null) {
+            if (boxRoot == null || getTopActivity() == null) {
                 return;
             }
             if (backgroundColor != -1) {
@@ -565,13 +565,13 @@ public class MessageDialog extends BaseDialog {
                                 }
                                 break;
                             case DialogXStyle.SPACE:
-                                Space space = new Space(getContext());
+                                Space space = new Space(getTopActivity());
                                 LinearLayout.LayoutParams spaceLp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
                                 spaceLp.weight = 1;
                                 boxButton.addView(space, spaceLp);
                                 break;
                             case DialogXStyle.SPLIT:
-                                View splitView = new View(getContext());
+                                View splitView = new View(getTopActivity());
                                 splitView.setBackgroundColor(getResources().getColor(style.splitColorRes(isLightTheme())));
                                 LinearLayout.LayoutParams viewLp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, style.splitWidthPx());
                                 boxButton.addView(splitView, viewLp);
@@ -617,7 +617,7 @@ public class MessageDialog extends BaseDialog {
                                 } else {
                                     break;
                                 }
-                                Space space = new Space(getContext());
+                                Space space = new Space(getTopActivity());
                                 LinearLayout.LayoutParams spaceLp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                                 spaceLp.weight = 1;
                                 boxButton.addView(space, spaceLp);
@@ -630,7 +630,7 @@ public class MessageDialog extends BaseDialog {
                                 } else {
                                     break;
                                 }
-                                View splitView = new View(getContext());
+                                View splitView = new View(getTopActivity());
                                 splitView.setBackgroundColor(getResources().getColor(style.splitColorRes(isLightTheme())));
                                 LinearLayout.LayoutParams viewLp = new LinearLayout.LayoutParams(style.splitWidthPx(), ViewGroup.LayoutParams.MATCH_PARENT);
                                 boxButton.addView(splitView, viewLp);
@@ -666,7 +666,7 @@ public class MessageDialog extends BaseDialog {
         
         public void doDismiss(View v) {
             if (v != null) v.setEnabled(false);
-            if (getContext() == null) return;
+            if (getTopActivity() == null) return;
             
             if (!dismissAnimFlag) {
                 dismissAnimFlag = true;
@@ -677,7 +677,7 @@ public class MessageDialog extends BaseDialog {
                 if (customExitAnimResId != 0) {
                     exitAnimResId = customExitAnimResId;
                 }
-                Animation exitAnim = AnimationUtils.loadAnimation(getContext(), exitAnimResId);
+                Animation exitAnim = AnimationUtils.loadAnimation(getTopActivity(), exitAnimResId);
                 long exitAnimDurationTemp = exitAnim.getDuration();
                 exitAnim.setInterpolator(new AccelerateInterpolator());
                 if (overrideExitDuration >= 0) {

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

@@ -3,7 +3,6 @@ package com.kongzue.dialogx.dialogs;
 import static android.view.View.OVER_SCROLL_NEVER;
 
 import android.animation.ValueAnimator;
-import android.content.res.Configuration;
 import android.os.Build;
 import android.os.Handler;
 import android.os.Looper;
@@ -34,7 +33,6 @@ import com.kongzue.dialogx.util.PopMenuArrayAdapter;
 import com.kongzue.dialogx.util.TextInfo;
 import com.kongzue.dialogx.util.views.BlurView;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
-import com.kongzue.dialogx.util.views.MaxLinearLayout;
 import com.kongzue.dialogx.util.views.MaxRelativeLayout;
 import com.kongzue.dialogx.util.views.PopMenuListView;
 
@@ -252,7 +250,7 @@ public class PopMenu extends BaseDialog {
         @Override
         public void init() {
             if (menuListAdapter == null) {
-                menuListAdapter = new PopMenuArrayAdapter(me, getContext(), menuList);
+                menuListAdapter = new PopMenuArrayAdapter(me, getTopActivity(), menuList);
             }
             
             boxRoot.setParentDialog(me);
@@ -548,7 +546,7 @@ public class PopMenu extends BaseDialog {
         
         @Override
         public void refreshView() {
-            if (boxRoot == null || getContext() == null) {
+            if (boxRoot == null || getTopActivity() == null) {
                 return;
             }
             if (listMenu.getAdapter() == null) {
@@ -605,7 +603,7 @@ public class PopMenu extends BaseDialog {
                         if (overrideExitDuration != -1) {
                             exitAnimDuration = overrideExitDuration;
                         }
-                        Animation exitAnim = AnimationUtils.loadAnimation(getContext() == null ? boxRoot.getContext() : getContext(), R.anim.anim_dialogx_default_exit);
+                        Animation exitAnim = AnimationUtils.loadAnimation(getTopActivity() == null ? boxRoot.getContext() : getTopActivity(), R.anim.anim_dialogx_default_exit);
                         if (exitAnimDuration != -1) {
                             exitAnim.setDuration(exitAnimDuration);
                         }

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

@@ -1,14 +1,11 @@
 package com.kongzue.dialogx.dialogs;
 
-import android.animation.Animator;
 import android.app.Activity;
-import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.os.Build;
 import android.os.Handler;
 import android.os.Looper;
 import android.view.View;
-import android.view.ViewGroup;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
@@ -20,11 +17,9 @@ import android.widget.TextView;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.ColorRes;
-import androidx.annotation.IdRes;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
-import com.kongzue.dialogx.impl.AnimatorListenerEndCallBack;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
@@ -33,11 +28,9 @@ import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnSafeInsetsChangeListener;
-import com.kongzue.dialogx.style.MaterialStyle;
 import com.kongzue.dialogx.util.TextInfo;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 
-import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Timer;
@@ -507,7 +500,7 @@ public class PopTip extends BaseDialog {
             boxRoot.post(new Runnable() {
                 @Override
                 public void run() {
-                    Animation enterAnim = AnimationUtils.loadAnimation(getContext(), enterAnimResId == 0 ? R.anim.anim_dialogx_default_enter : enterAnimResId);
+                    Animation enterAnim = AnimationUtils.loadAnimation(getTopActivity(), enterAnimResId == 0 ? R.anim.anim_dialogx_default_enter : enterAnimResId);
                     enterAnim.setInterpolator(new DecelerateInterpolator(2f));
                     if (enterAnimDuration != -1) {
                         enterAnim.setDuration(enterAnimDuration);
@@ -539,7 +532,7 @@ public class PopTip extends BaseDialog {
         
         @Override
         public void refreshView() {
-            if (boxRoot == null || getContext() == null) {
+            if (boxRoot == null || getTopActivity() == null) {
                 return;
             }
             if (backgroundColor != -1) {
@@ -598,7 +591,7 @@ public class PopTip extends BaseDialog {
                     @Override
                     public void run() {
             
-                        Animation exitAnim = AnimationUtils.loadAnimation(getContext() == null ? boxRoot.getContext() : getContext(), exitAnimResId == 0 ? R.anim.anim_dialogx_default_exit : exitAnimResId);
+                        Animation exitAnim = AnimationUtils.loadAnimation(getTopActivity() == null ? boxRoot.getContext() : getTopActivity(), exitAnimResId == 0 ? R.anim.anim_dialogx_default_exit : exitAnimResId);
                         if (exitAnimDuration != -1) {
                             exitAnim.setDuration(exitAnimDuration);
                         }

+ 16 - 17
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -3,7 +3,6 @@ package com.kongzue.dialogx.dialogs;
 import android.animation.ValueAnimator;
 import android.app.Activity;
 import android.content.Context;
-import android.content.res.Configuration;
 import android.graphics.Color;
 import android.os.Handler;
 import android.os.Looper;
@@ -267,9 +266,9 @@ public class WaitDialog extends BaseDialog {
             bkg = dialogView.findViewById(R.id.bkg);
             blurView = dialogView.findViewById(R.id.blurView);
             boxProgress = dialogView.findViewById(R.id.box_progress);
-            View progressViewCache = (View) style.overrideWaitTipRes().overrideWaitView(getContext(), isLightTheme());
+            View progressViewCache = (View) style.overrideWaitTipRes().overrideWaitView(getTopActivity(), isLightTheme());
             if (progressViewCache == null) {
-                progressViewCache = new ProgressView(getContext());
+                progressViewCache = new ProgressView(getTopActivity());
             }
             progressView = (ProgressViewInterface) progressViewCache;
             boxProgress.addView(progressViewCache, new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
@@ -286,9 +285,9 @@ public class WaitDialog extends BaseDialog {
             bkg = convertView.findViewById(R.id.bkg);
             blurView = convertView.findViewById(R.id.blurView);
             boxProgress = convertView.findViewById(R.id.box_progress);
-            View progressViewCache = (View) style.overrideWaitTipRes().overrideWaitView(getContext(), isLightTheme());
+            View progressViewCache = (View) style.overrideWaitTipRes().overrideWaitView(getTopActivity(), isLightTheme());
             if (progressViewCache == null) {
-                progressViewCache = new ProgressView(getContext());
+                progressViewCache = new ProgressView(getTopActivity());
             }
             progressView = (ProgressViewInterface) progressViewCache;
             boxProgress.addView(progressViewCache, new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
@@ -319,7 +318,7 @@ public class WaitDialog extends BaseDialog {
                     bkg.post(new Runnable() {
                         @Override
                         public void run() {
-                            if (getContext() == null) return;
+                            if (getTopActivity() == null) return;
                             int enterAnimResId = R.anim.anim_dialogx_default_enter;
                             if (overrideEnterAnimRes != 0) {
                                 enterAnimResId = overrideEnterAnimRes;
@@ -327,7 +326,7 @@ public class WaitDialog extends BaseDialog {
                             if (customEnterAnimResId != 0) {
                                 enterAnimResId = customEnterAnimResId;
                             }
-                            Animation enterAnim = AnimationUtils.loadAnimation(getContext(), enterAnimResId);
+                            Animation enterAnim = AnimationUtils.loadAnimation(getTopActivity(), enterAnimResId);
                             long enterAnimDurationTemp = enterAnim.getDuration();
                             enterAnim.setInterpolator(new DecelerateInterpolator());
                             if (overrideEnterDuration >= 0) {
@@ -406,7 +405,7 @@ public class WaitDialog extends BaseDialog {
         private float oldProgress;
         
         public void refreshView() {
-            if (boxRoot == null || getContext() == null) {
+            if (boxRoot == null || getTopActivity() == null) {
                 return;
             }
             
@@ -479,14 +478,14 @@ public class WaitDialog extends BaseDialog {
         
         public void doDismiss(final View v) {
             if (boxRoot == null) return;
-            if (getContext() == null) return;
+            if (getTopActivity() == null) return;
             
             if (!dismissAnimFlag) {
                 dismissAnimFlag = true;
                 boxRoot.post(new Runnable() {
                     @Override
                     public void run() {
-                        Context context = getContext();
+                        Context context = getTopActivity();
                         if (context == null) context = boxRoot.getContext();
                         if (context == null) return;
                         
@@ -651,7 +650,7 @@ public class WaitDialog extends BaseDialog {
     protected static WaitDialog me() {
         for (BaseDialog baseDialog : getRunningDialogList()) {
             if (baseDialog instanceof WaitDialog) {
-                if (baseDialog.isShow() && baseDialog.getActivity() == getContext()) {
+                if (baseDialog.isShow() && baseDialog.getOwnActivity() == getTopActivity()) {
                     return (WaitDialog) baseDialog;
                 }
             }
@@ -907,23 +906,23 @@ public class WaitDialog extends BaseDialog {
     }
     
     protected static boolean noInstance() {
-        if (getContext() != null && getContext() instanceof Activity && getInstance((Activity) getContext()) != null) {
+        if (getTopActivity() != null && getTopActivity() instanceof Activity && getInstance((Activity) getTopActivity()) != null) {
             return false;
         }
-        return me == null || me.get() == null || me.get().getActivity() == null || me.get().getActivity() != getContext();
+        return me == null || me.get() == null || me.get().getOwnActivity() == null || me.get().getOwnActivity() != getTopActivity();
     }
     
     protected static boolean noInstance(Activity activity) {
-        if (getContext() != null && getInstance(activity) != null) {
+        if (getTopActivity() != null && getInstance(activity) != null) {
             return false;
         }
-        return me == null || me.get() == null || me.get().getActivity() == null || me.get().getActivity() != activity;
+        return me == null || me.get() == null || me.get().getOwnActivity() == null || me.get().getOwnActivity() != activity;
     }
     
     public static WaitDialog getInstanceNotNull(Activity activity) {
         for (BaseDialog baseDialog : getRunningDialogList()) {
             if (baseDialog instanceof WaitDialog) {
-                if (baseDialog.isShow() && baseDialog.getActivity() == activity) {
+                if (baseDialog.isShow() && baseDialog.getOwnActivity() == activity) {
                     return (WaitDialog) baseDialog;
                 }
             }
@@ -934,7 +933,7 @@ public class WaitDialog extends BaseDialog {
     public static WaitDialog getInstance(Activity activity) {
         for (BaseDialog baseDialog : getRunningDialogList()) {
             if (baseDialog instanceof WaitDialog) {
-                if (baseDialog.isShow() && baseDialog.getActivity() == activity) {
+                if (baseDialog.isShow() && baseDialog.getOwnActivity() == activity) {
                     return (WaitDialog) baseDialog;
                 }
             }

+ 35 - 18
DialogX/src/main/java/com/kongzue/dialogx/impl/ActivityLifecycleImpl.java

@@ -2,26 +2,17 @@ package com.kongzue.dialogx.impl;
 
 import android.app.Activity;
 import android.app.Application;
-import android.content.ComponentCallbacks2;
 import android.content.Context;
-import android.content.res.Configuration;
 import android.os.Build;
 import android.os.Bundle;
-import android.os.Looper;
 import android.util.ArrayMap;
-import android.util.Log;
-import android.view.View;
-import android.view.Window;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
 
-import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 import com.kongzue.dialogx.util.DialogXFloatingWindowActivity;
 
-import java.lang.ref.WeakReference;
 import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.Map;
@@ -39,21 +30,30 @@ public class ActivityLifecycleImpl implements Application.ActivityLifecycleCallb
     
     private onActivityResumeCallBack onActivityResumeCallBack;
     private static ActivityLifecycleImpl activityLifecycle;
+    private static Application application;
     
     public ActivityLifecycleImpl(ActivityLifecycleImpl.onActivityResumeCallBack onActivityResumeCallBack) {
         this.onActivityResumeCallBack = onActivityResumeCallBack;
     }
     
     public static void init(Context context, ActivityLifecycleImpl.onActivityResumeCallBack onActivityResumeCallBack) {
-        Application application = getApplicationContext(context);
-        if (application == null) {
-            error("DialogX 未初始化。\n请检查是否在启动对话框前进行初始化操作,使用以下代码进行初始化:\nDialogX.init(context);\n\n另外建议您前往查看 DialogX 的文档进行使用:https://github.com/kongzue/DialogX");
-            return;
-        }
-        if (activityLifecycle != null) {
-            application.unregisterActivityLifecycleCallbacks(activityLifecycle);
+        if (context != null) {
+            Application application = getApplicationContext(context);
+            if (application == null) {
+                error("DialogX 未初始化。\n请检查是否在启动对话框前进行初始化操作,使用以下代码进行初始化:\nDialogX.init(context);\n\n另外建议您前往查看 DialogX 的文档进行使用:https://github.com/kongzue/DialogX");
+                return;
+            }
+            
+            ActivityLifecycleImpl.application = application;
+            if (activityLifecycle != null) {
+                application.unregisterActivityLifecycleCallbacks(activityLifecycle);
+            }
+            application.registerActivityLifecycleCallbacks(activityLifecycle = new ActivityLifecycleImpl(onActivityResumeCallBack));
+        } else {
+            if (ActivityLifecycleImpl.application != null) {
+                init(ActivityLifecycleImpl.application, onActivityResumeCallBack);
+            }
         }
-        application.registerActivityLifecycleCallbacks(activityLifecycle = new ActivityLifecycleImpl(onActivityResumeCallBack));
     }
     
     public static Application getApplicationContext(Context context) {
@@ -74,6 +74,23 @@ public class ActivityLifecycleImpl implements Application.ActivityLifecycleCallb
         return null;
     }
     
+    public static Application getApplicationContext() {
+        if (application != null) {
+            return application;
+        }
+        try {
+            Application application = (Application) Class.forName("android.app.ActivityThread").getMethod("currentApplication").invoke(null, (Object[]) null);
+            return application;
+        } catch (Exception e) {
+        }
+        try {
+            Application application = (Application) Class.forName("android.app.AppGlobals").getMethod("getInitialApplication").invoke(null, (Object[]) null);
+            return application;
+        } catch (Exception e) {
+        }
+        return null;
+    }
+    
     public static Activity getTopActivity() {
         try {
             Class activityThreadClass = Class.forName("android.app.ActivityThread");
@@ -147,7 +164,7 @@ public class ActivityLifecycleImpl implements Application.ActivityLifecycleCallb
     
     @Override
     public void onActivityDestroyed(@NonNull Activity activity) {
-        if (BaseDialog.getContext() == activity) {
+        if (BaseDialog.getTopActivity() == activity) {
             BaseDialog.cleanContext();
         }
     }

+ 3 - 6
DialogX/src/main/java/com/kongzue/dialogx/impl/DialogFragmentImpl.java

@@ -19,9 +19,6 @@ import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
-import com.kongzue.dialogx.R;
-import com.kongzue.dialogx.dialogs.BottomDialog;
-import com.kongzue.dialogx.dialogs.FullScreenDialog;
 import com.kongzue.dialogx.dialogs.PopTip;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 
@@ -58,8 +55,8 @@ public class DialogFragmentImpl extends DialogFragment {
     @Override
     public void onStart() {
         super.onStart();
-        if (BaseDialog.getContext() != null && BaseDialog.getContext() instanceof Activity) {
-            activityWeakReference = new WeakReference<>(((Activity) BaseDialog.getContext()));
+        if (BaseDialog.getTopActivity() != null && BaseDialog.getTopActivity() instanceof Activity) {
+            activityWeakReference = new WeakReference<>(((Activity) BaseDialog.getTopActivity()));
         }
         if (activityWeakReference == null || activityWeakReference.get() == null) return;
         final Activity activity = activityWeakReference.get();
@@ -80,7 +77,7 @@ public class DialogFragmentImpl extends DialogFragment {
             @Override
             public boolean onTouch(View v, MotionEvent event) {
                 for (BaseDialog baseDialog : BaseDialog.getRunningDialogList()) {
-                    if (baseDialog.getActivity() == activity) {
+                    if (baseDialog.getOwnActivity() == activity) {
                         if (!(baseDialog instanceof PopTip)) {
                             return false;
                         }

+ 54 - 68
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java

@@ -12,7 +12,6 @@ import android.os.Handler;
 import android.os.Looper;
 import android.text.TextUtils;
 import android.util.Log;
-import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -37,7 +36,6 @@ import com.kongzue.dialogx.impl.ActivityLifecycleImpl;
 import com.kongzue.dialogx.impl.DialogFragmentImpl;
 import com.kongzue.dialogx.util.ActivityRunnable;
 import com.kongzue.dialogx.util.DialogXFloatingWindowActivity;
-import com.kongzue.dialogx.util.DialogXImplModeAgent;
 import com.kongzue.dialogx.util.TextInfo;
 import com.kongzue.dialogx.util.WindowUtil;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
@@ -60,9 +58,9 @@ import static com.kongzue.dialogx.DialogX.DEBUGMODE;
  */
 public abstract class BaseDialog {
     
-    protected static WeakReference<Thread> uiThread;
+    protected static Thread uiThread;
     private static WeakReference<FrameLayout> rootFrameLayout;
-    private static WeakReference<Activity> contextWeakReference;
+    private static WeakReference<Activity> activityWeakReference;
     protected WeakReference<Activity> ownActivity;
     private static List<BaseDialog> runningDialogList;
     private WeakReference<View> dialogView;
@@ -87,8 +85,8 @@ public abstract class BaseDialog {
     
     private static void initActivityContext(Activity activity) {
         try {
-            uiThread = new WeakReference<>(Thread.currentThread());
-            contextWeakReference = new WeakReference<>(activity);
+            uiThread = Thread.currentThread();
+            activityWeakReference = new WeakReference<>(activity);
             rootFrameLayout = new WeakReference<>((FrameLayout) activity.getWindow().getDecorView());
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                 publicWindowInsets(rootFrameLayout.get().getRootWindowInsets());
@@ -116,7 +114,7 @@ public abstract class BaseDialog {
             CopyOnWriteArrayList<BaseDialog> copyOnWriteList = new CopyOnWriteArrayList<>(runningDialogList);
             for (int i = copyOnWriteList.size() - 1; i >= 0; i--) {
                 BaseDialog baseDialog = copyOnWriteList.get(i);
-                if (baseDialog.getActivity() == activity && baseDialog.isShow && baseDialog.getDialogView() != null) {
+                if (baseDialog.getOwnActivity() == activity && baseDialog.isShow && baseDialog.getDialogView() != null) {
                     View boxRoot = baseDialog.getDialogView().findViewById(R.id.box_root);
                     if (boxRoot instanceof DialogXBaseRelativeLayout) {
                         if (((DialogXBaseRelativeLayout) boxRoot).isBaseFocusable()) {
@@ -130,8 +128,8 @@ public abstract class BaseDialog {
     }
     
     private static void requestDialogFocus() {
-        if (getContext() instanceof Activity) {
-            onActivityResume((Activity) getContext());
+        if (getTopActivity() instanceof Activity) {
+            onActivityResume((Activity) getTopActivity());
         }
     }
     
@@ -151,7 +149,7 @@ public abstract class BaseDialog {
                 error(((BaseDialog) view.getTag()).dialogKey() + "已处于显示状态,请勿重复执行 show() 指令。");
                 return;
             }
-            baseDialog.ownActivity = new WeakReference<>(contextWeakReference.get());
+            baseDialog.ownActivity = new WeakReference<>(activityWeakReference.get());
             baseDialog.dialogView = new WeakReference<>(view);
             
             log(baseDialog.dialogKey() + ".show");
@@ -163,13 +161,13 @@ public abstract class BaseDialog {
                     runOnMain(new Runnable() {
                         @Override
                         public void run() {
-                            WindowUtil.show(contextWeakReference.get(), view, !(baseDialog instanceof PopTip));
+                            WindowUtil.show(activityWeakReference.get(), view, !(baseDialog instanceof PopTip));
                         }
                     });
                     break;
                 case DIALOG_FRAGMENT:
                     DialogFragmentImpl dialogFragment = new DialogFragmentImpl(baseDialog, view);
-                    dialogFragment.show(getSupportFragmentManager(contextWeakReference.get()), "DialogX");
+                    dialogFragment.show(getSupportFragmentManager(activityWeakReference.get()), "DialogX");
                     baseDialog.ownDialogFragmentImpl = new WeakReference<>(dialogFragment);
                     break;
                 case FLOATING_ACTIVITY:
@@ -200,18 +198,18 @@ public abstract class BaseDialog {
                         }
                     });
                     DialogXFloatingWindowActivity dialogXFloatingWindowActivity = DialogXFloatingWindowActivity.getDialogXFloatingWindowActivity();
-                    if (dialogXFloatingWindowActivity != null && dialogXFloatingWindowActivity.isSameFrom(contextWeakReference.get().hashCode())) {
+                    if (dialogXFloatingWindowActivity != null && dialogXFloatingWindowActivity.isSameFrom(activityWeakReference.get().hashCode())) {
                         dialogXFloatingWindowActivity.showDialogX(baseDialog.dialogKey());
                         return;
                     }
-                    Intent intent = new Intent(contextWeakReference.get(), DialogXFloatingWindowActivity.class);
+                    Intent intent = new Intent(activityWeakReference.get(), DialogXFloatingWindowActivity.class);
                     intent.putExtra("dialogXKey", baseDialog.dialogKey());
-                    intent.putExtra("fromActivityUiStatus", contextWeakReference.get().getWindow().getDecorView().getSystemUiVisibility());
-                    intent.putExtra("from", contextWeakReference.get().hashCode());
-                    contextWeakReference.get().startActivity(intent);
+                    intent.putExtra("fromActivityUiStatus", activityWeakReference.get().getWindow().getDecorView().getSystemUiVisibility());
+                    intent.putExtra("from", activityWeakReference.get().hashCode());
+                    activityWeakReference.get().startActivity(intent);
                     int version = Integer.valueOf(Build.VERSION.SDK_INT);
                     if (version > 5) {
-                        contextWeakReference.get().overridePendingTransition(0, 0);
+                        activityWeakReference.get().overridePendingTransition(0, 0);
                     }
                     break;
                 default:
@@ -253,7 +251,7 @@ public abstract class BaseDialog {
         if (activity == null || view == null) {
             return;
         }
-        if (contextWeakReference == null || contextWeakReference.get() == null) {
+        if (activityWeakReference == null || activityWeakReference.get() == null) {
             initActivityContext(activity);
         }
         final BaseDialog baseDialog = (BaseDialog) view.getTag();
@@ -421,15 +419,19 @@ public abstract class BaseDialog {
         }
     }
     
-    public static Context getContext() {
-        if (contextWeakReference == null) {
+    public static Activity getTopActivity() {
+        if (activityWeakReference == null) {
             init(null);
-            if (contextWeakReference == null) {
+            if (activityWeakReference == null) {
                 return ActivityLifecycleImpl.getTopActivity();
             }
-            return contextWeakReference.get();
+            return activityWeakReference.get();
         }
-        return contextWeakReference.get();
+        return activityWeakReference.get();
+    }
+    
+    public static Context getApplicationContext() {
+        return ActivityLifecycleImpl.getApplicationContext();
     }
     
     /**
@@ -438,10 +440,10 @@ public abstract class BaseDialog {
      * @hide
      */
     public static void cleanContext() {
-        if (contextWeakReference != null) {
-            contextWeakReference.clear();
+        if (activityWeakReference != null) {
+            activityWeakReference.clear();
         }
-        contextWeakReference = null;
+        activityWeakReference = null;
         System.gc();
     }
     
@@ -470,11 +472,11 @@ public abstract class BaseDialog {
     public abstract boolean isCancelable();
     
     public View createView(int layoutId) {
-        if (getContext() == null) {
+        if (getApplicationContext() == null) {
             error("DialogX 未初始化。\n请检查是否在启动对话框前进行初始化操作,使用以下代码进行初始化:\nDialogX.init(context);\n\n另外建议您前往查看 DialogX 的文档进行使用:https://github.com/kongzue/DialogX");
             return null;
         }
-        return LayoutInflater.from(getContext()).inflate(layoutId, null);
+        return LayoutInflater.from(getApplicationContext()).inflate(layoutId, null);
     }
     
     public boolean isShow() {
@@ -532,22 +534,6 @@ public abstract class BaseDialog {
         }
     }
     
-    protected View createHorizontalSplitView(int color) {
-        View splitView = new View(getContext());
-        splitView.setBackgroundColor(color);
-        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1);
-        splitView.setLayoutParams(lp);
-        return splitView;
-    }
-    
-    protected View createVerticalSplitView(int color, int height) {
-        View splitView = new View(getContext());
-        splitView.setBackgroundColor(color);
-        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(1, dip2px(height));
-        splitView.setLayoutParams(lp);
-        return splitView;
-    }
-    
     public static boolean isNull(String s) {
         if (s == null || s.trim().isEmpty() || "null".equals(s) || "(null)".equals(s)) {
             return true;
@@ -564,23 +550,23 @@ public abstract class BaseDialog {
     }
     
     public Resources getResources() {
-        if (getContext() == null) {
+        if (getApplicationContext() == null) {
             return Resources.getSystem();
         }
-        return getContext().getResources();
+        return getApplicationContext().getResources();
     }
     
     public int dip2px(float dpValue) {
-        final float scale = getContext().getResources().getDisplayMetrics().density;
+        final float scale = getResources().getDisplayMetrics().density;
         return (int) (dpValue * scale + 0.5f);
     }
     
     public boolean isLightTheme() {
         if (theme == DialogX.THEME.AUTO) {
-            if (getContext() == null) {
+            if (getApplicationContext() == null) {
                 return theme == DialogX.THEME.LIGHT;
             }
-            return (getContext().getApplicationContext().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO;
+            return (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO;
         }
         return theme == DialogX.THEME.LIGHT;
     }
@@ -609,9 +595,9 @@ public abstract class BaseDialog {
     
     protected void beforeShow() {
         dismissAnimFlag = false;
-        if (getContext() == null) {
+        if (getTopActivity() == null) {
             init(null);
-            if (getContext() == null) {
+            if (getTopActivity() == null) {
                 error("DialogX 未初始化。\n请检查是否在启动对话框前进行初始化操作,使用以下代码进行初始化:\nDialogX.init(context);\n\n另外建议您前往查看 DialogX 的文档进行使用:https://github.com/kongzue/DialogX");
                 return;
             }
@@ -620,36 +606,36 @@ public abstract class BaseDialog {
             error("DialogX 所引用的 Style 不符合当前适用版本:" + DialogXStyle.styleVer + " 引入的 Style(" + style.getClass().getSimpleName() + ") 版本" + style.styleVer);
         }
         
-        if (dialogImplMode != DialogX.IMPL_MODE.VIEW && getContext() instanceof LifecycleOwner) {
-            Lifecycle lifecycle = ((LifecycleOwner) getContext()).getLifecycle();
+        if (dialogImplMode != DialogX.IMPL_MODE.VIEW && getTopActivity() instanceof LifecycleOwner) {
+            Lifecycle lifecycle = ((LifecycleOwner) getTopActivity()).getLifecycle();
             lifecycle.addObserver(new LifecycleEventObserver() {
                 @Override
                 public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
                     if (event == Lifecycle.Event.ON_DESTROY) {
-                        recycleDialog((Activity) getContext());
+                        recycleDialog(getTopActivity());
                     }
                 }
             });
         }
         
         //Hide IME
-        View view = ((Activity) BaseDialog.getContext()).getCurrentFocus();
+        View view = (BaseDialog.getTopActivity()).getCurrentFocus();
         if (view != null) {
-            InputMethodManager imm = (InputMethodManager) BaseDialog.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+            InputMethodManager imm = (InputMethodManager) BaseDialog.getTopActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
             imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
         }
     }
     
     protected String getString(int titleResId) {
-        if (getContext() == null) {
+        if (getApplicationContext() == null) {
             error("DialogX 未初始化。\n请检查是否在启动对话框前进行初始化操作,使用以下代码进行初始化:\nDialogX.init(context);\n\n另外建议您前往查看 DialogX 的文档进行使用:https://github.com/kongzue/DialogX");
             return null;
         }
-        return getContext().getString(titleResId);
+        return getResources().getString(titleResId);
     }
     
     protected int getColor(int backgroundRes) {
-        if (getContext() == null) {
+        if (getApplicationContext() == null) {
             error("DialogX 未初始化。\n请检查是否在启动对话框前进行初始化操作,使用以下代码进行初始化:\nDialogX.init(context);\n\n另外建议您前往查看 DialogX 的文档进行使用:https://github.com/kongzue/DialogX");
             return Color.BLACK;
         }
@@ -663,7 +649,7 @@ public abstract class BaseDialog {
     public abstract String dialogKey();
     
     protected static void runOnMain(Runnable runnable) {
-        if (!DialogX.autoRunOnUIThread || (uiThread != null && Thread.currentThread() == uiThread.get())) {
+        if (!DialogX.autoRunOnUIThread || (uiThread != null && Thread.currentThread() == uiThread)) {
             runnable.run();
             return;
         }
@@ -688,7 +674,7 @@ public abstract class BaseDialog {
         return dialogView.get();
     }
     
-    public Activity getActivity() {
+    public Activity getOwnActivity() {
         return ownActivity == null ? null : ownActivity.get();
     }
     
@@ -718,7 +704,7 @@ public abstract class BaseDialog {
                 if (runningDialogList != null) {
                     CopyOnWriteArrayList<BaseDialog> copyOnWriteList = new CopyOnWriteArrayList<>(runningDialogList);
                     for (BaseDialog baseDialog : copyOnWriteList) {
-                        if (baseDialog.getActivity() == activity && baseDialog.dialogView != null) {
+                        if (baseDialog.getOwnActivity() == activity && baseDialog.dialogView != null) {
                             WindowUtil.dismiss(baseDialog.dialogView.get());
                         }
                     }
@@ -728,7 +714,7 @@ public abstract class BaseDialog {
                 if (runningDialogList != null) {
                     CopyOnWriteArrayList<BaseDialog> copyOnWriteList = new CopyOnWriteArrayList<>(runningDialogList);
                     for (BaseDialog baseDialog : copyOnWriteList) {
-                        if (baseDialog.getActivity() == activity && baseDialog.ownDialogFragmentImpl != null && baseDialog.ownDialogFragmentImpl.get() != null) {
+                        if (baseDialog.getOwnActivity() == activity && baseDialog.ownDialogFragmentImpl != null && baseDialog.ownDialogFragmentImpl.get() != null) {
                             baseDialog.ownDialogFragmentImpl.get().dismiss();
                         }
                     }
@@ -741,7 +727,7 @@ public abstract class BaseDialog {
                 if (runningDialogList != null) {
                     CopyOnWriteArrayList<BaseDialog> copyOnWriteList = new CopyOnWriteArrayList<>(runningDialogList);
                     for (BaseDialog baseDialog : copyOnWriteList) {
-                        if (baseDialog.getActivity() == activity) {
+                        if (baseDialog.getOwnActivity() == activity) {
                             baseDialog.cleanActivityContext();
                             runningDialogList.remove(baseDialog);
                         }
@@ -749,7 +735,7 @@ public abstract class BaseDialog {
                 }
                 break;
         }
-        if (activity == getContext()) {
+        if (activity == getTopActivity()) {
             cleanContext();
         }
     }
@@ -762,10 +748,10 @@ public abstract class BaseDialog {
     }
     
     protected void imeShow(EditText editText, boolean show) {
-        if (getContext() == null) {
+        if (getTopActivity() == null) {
             return;
         }
-        InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+        InputMethodManager imm = (InputMethodManager) getTopActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
         if (show) {
             imm.showSoftInput(editText, InputMethodManager.RESULT_UNCHANGED_SHOWN);
         } else {

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

@@ -27,12 +27,12 @@ public abstract class OnBindView<D> {
     View customView;
     
     public OnBindView(int layoutResId) {
-        if (BaseDialog.getContext() == null) {
+        if (BaseDialog.getTopActivity() == null) {
             DialogX.error(ERROR_INIT_TIPS);
             return;
         }
         this.layoutResId = layoutResId;
-        customView = LayoutInflater.from(BaseDialog.getContext()).inflate(layoutResId, new RelativeLayout(BaseDialog.getContext()), false);
+        customView = LayoutInflater.from(BaseDialog.getTopActivity()).inflate(layoutResId, new RelativeLayout(BaseDialog.getTopActivity()), false);
     }
     
     public OnBindView(View customView) {
@@ -43,16 +43,16 @@ public abstract class OnBindView<D> {
     private android.app.Fragment supportFragment;
     
     public OnBindView(androidx.fragment.app.Fragment fragment) {
-        if (BaseDialog.getContext() == null) return;
-        this.customView = new FrameLayout(BaseDialog.getContext());
+        if (BaseDialog.getTopActivity() == null) return;
+        this.customView = new FrameLayout(BaseDialog.getTopActivity());
         this.customView.setId(R.id.id_frame_layout_custom);
         this.fragment = fragment;
         this.supportFragment = null;
     }
     
     public OnBindView(android.app.Fragment supportFragment) {
-        if (BaseDialog.getContext() == null) return;
-        this.customView = new FrameLayout(BaseDialog.getContext());
+        if (BaseDialog.getTopActivity() == null) return;
+        this.customView = new FrameLayout(BaseDialog.getTopActivity());
         this.customView.setId(R.id.id_frame_layout_custom);
         this.supportFragment = supportFragment;
         this.fragment = null;
@@ -77,7 +77,7 @@ public abstract class OnBindView<D> {
     
     public View getCustomView() {
         if (customView == null) {
-            customView = LayoutInflater.from(BaseDialog.getContext()).inflate(layoutResId, new RelativeLayout(BaseDialog.getContext()), false);
+            customView = LayoutInflater.from(BaseDialog.getTopActivity()).inflate(layoutResId, new RelativeLayout(BaseDialog.getTopActivity()), false);
             customView.setId(R.id.id_frame_layout_custom);
         }
         return customView;
@@ -127,15 +127,15 @@ public abstract class OnBindView<D> {
         if (fragment != null || supportFragment != null) getCustomView().post(new Runnable() {
             @Override
             public void run() {
-                if (fragment != null && getCustomView() instanceof FrameLayout && BaseDialog.getContext() instanceof AppCompatActivity) {
-                    AppCompatActivity appCompatActivity = (AppCompatActivity) BaseDialog.getContext();
+                if (fragment != null && getCustomView() instanceof FrameLayout && BaseDialog.getTopActivity() instanceof AppCompatActivity) {
+                    AppCompatActivity appCompatActivity = (AppCompatActivity) BaseDialog.getTopActivity();
                     androidx.fragment.app.FragmentTransaction transaction = appCompatActivity.getSupportFragmentManager().beginTransaction();
                     transaction.add(R.id.id_frame_layout_custom, fragment);
                     transaction.commit();
                     onFragmentBind((D) dialog, getCustomView(), fragment, appCompatActivity.getSupportFragmentManager());
                 }
-                if (supportFragment != null && getCustomView() instanceof FrameLayout && BaseDialog.getContext() instanceof Activity) {
-                    Activity activity = (Activity) BaseDialog.getContext();
+                if (supportFragment != null && getCustomView() instanceof FrameLayout && BaseDialog.getTopActivity() instanceof Activity) {
+                    Activity activity = (Activity) BaseDialog.getTopActivity();
                     android.app.FragmentTransaction transaction = activity.getFragmentManager().beginTransaction();
                     transaction.add(R.id.id_frame_layout_custom, supportFragment);
                     transaction.commit();

+ 2 - 5
DialogX/src/main/java/com/kongzue/dialogx/util/DialogXFloatingWindowActivity.java

@@ -1,7 +1,6 @@
 package com.kongzue.dialogx.util;
 
 import android.app.Activity;
-import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
 import android.view.MotionEvent;
@@ -11,13 +10,11 @@ import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 
 import com.kongzue.dialogx.R;
-import com.kongzue.dialogx.dialogs.PopTip;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 
 /**
  * @author: Kongzue
@@ -59,8 +56,8 @@ public class DialogXFloatingWindowActivity extends AppCompatActivity {
             @Override
             public boolean onTouch(View v, MotionEvent event) {
                 if (event.getAction() != MotionEvent.ACTION_CANCEL) {
-                    if (BaseDialog.getContext() != null && !(BaseDialog.getContext() instanceof DialogXFloatingWindowActivity)) {
-                        return ((Activity) BaseDialog.getContext()).dispatchTouchEvent(event);
+                    if (BaseDialog.getTopActivity() != null && !(BaseDialog.getTopActivity() instanceof DialogXFloatingWindowActivity)) {
+                        return ((Activity) BaseDialog.getTopActivity()).dispatchTouchEvent(event);
                     }
                 }
                 return false;

+ 3 - 7
DialogX/src/main/java/com/kongzue/dialogx/util/WindowUtil.java

@@ -4,16 +4,12 @@ import android.app.Activity;
 import android.content.Context;
 import android.graphics.PixelFormat;
 import android.os.Build;
-import android.util.Log;
 import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.widget.FrameLayout;
-import android.widget.Toast;
 
-import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.dialogs.PopTip;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 
@@ -67,7 +63,7 @@ public class WindowUtil {
                 public boolean onTouch(View v, MotionEvent event) {
                     for (int i = BaseDialog.getRunningDialogList().size() - 1; i >= 0; i--) {
                         BaseDialog baseDialog = BaseDialog.getRunningDialogList().get(i);
-                        if (!(baseDialog instanceof PopTip)  && baseDialog.getActivity() == activity) {
+                        if (!(baseDialog instanceof PopTip)  && baseDialog.getOwnActivity() == activity) {
                             if (baseDialog.getDialogView() == null) {
                                 return false;
                             }
@@ -86,8 +82,8 @@ public class WindowUtil {
     
     public static void dismiss(View dialogView) {
         BaseDialog baseDialog = (BaseDialog) dialogView.getTag();
-        if (baseDialog != null && baseDialog.getActivity() != null) {
-            WindowManager manager = (WindowManager) baseDialog.getActivity().getSystemService(Context.WINDOW_SERVICE);
+        if (baseDialog != null && baseDialog.getOwnActivity() != null) {
+            WindowManager manager = (WindowManager) baseDialog.getOwnActivity().getSystemService(Context.WINDOW_SERVICE);
             manager.removeViewImmediate((View) dialogView.getParent());
         }
     }

+ 7 - 12
DialogX/src/main/java/com/kongzue/dialogx/util/views/DialogXBaseRelativeLayout.java

@@ -4,14 +4,10 @@ import android.app.Activity;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
 import android.graphics.Rect;
 import android.os.Build;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
-import android.util.Log;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
@@ -19,7 +15,6 @@ import android.view.ViewParent;
 import android.view.ViewTreeObserver;
 import android.view.WindowInsets;
 import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
 import android.widget.RelativeLayout;
 
 import androidx.core.view.ViewCompat;
@@ -148,9 +143,9 @@ public class DialogXBaseRelativeLayout extends RelativeLayout {
                 ViewCompat.setFitsSystemWindows(this, ViewCompat.getFitsSystemWindows((View) parent));
             ViewCompat.requestApplyInsets(this);
             
-            if (BaseDialog.getContext() == null) return;
+            if (BaseDialog.getTopActivity() == null) return;
             
-            ((Activity) BaseDialog.getContext()).getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(decorViewLayoutListener);
+            ((Activity) BaseDialog.getTopActivity()).getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(decorViewLayoutListener);
             decorViewLayoutListener.onGlobalLayout();
             
             if (onLifecycleCallBack != null) {
@@ -166,11 +161,11 @@ public class DialogXBaseRelativeLayout extends RelativeLayout {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                 paddingView(getRootWindowInsets());
             } else {
-                if (BaseDialog.getContext() == null) return;
+                if (BaseDialog.getTopActivity() == null) return;
                 DisplayMetrics displayMetrics = new DisplayMetrics();
-                ((Activity) BaseDialog.getContext()).getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
+                ((Activity) BaseDialog.getTopActivity()).getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
                 Rect rect = new Rect();
-                ((Activity) BaseDialog.getContext()).getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
+                ((Activity) BaseDialog.getTopActivity()).getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
                 paddingView(rect.left, rect.top, displayMetrics.widthPixels - rect.right, displayMetrics.heightPixels - rect.bottom);
             }
         }
@@ -178,8 +173,8 @@ public class DialogXBaseRelativeLayout extends RelativeLayout {
     
     @Override
     protected void onDetachedFromWindow() {
-        if (decorViewLayoutListener != null && ((Activity) BaseDialog.getContext()) != null) {
-            ((Activity) BaseDialog.getContext()).getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(decorViewLayoutListener);
+        if (decorViewLayoutListener != null && ((Activity) BaseDialog.getTopActivity()) != null) {
+            ((Activity) BaseDialog.getTopActivity()).getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(decorViewLayoutListener);
         }
         if (onLifecycleCallBack != null) {
             onLifecycleCallBack.onDismiss();

+ 45 - 52
app/src/main/java/com/kongzue/dialogxdemo/activity/MainActivity.java

@@ -563,58 +563,51 @@ public class MainActivity extends BaseActivity {
             public void onClick(View v) {
                 if (rdoMaterial.isChecked()) {
                     //Material 可滑动展开 BottomMenu 演示
-                    //因数据量大,尝试异步线程启动
-                    new Thread() {
-                        @Override
-                        public void run() {
-                            super.run();
-                            BottomMenu.build()
-                                    .setBottomDialogMaxHeight(0.6f)
-                                    .setMenuList(new String[]{"添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐", "添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐"})
-                                    .setOnIconChangeCallBack(new OnIconChangeCallBack<BottomMenu>(true) {
-                                        @Override
-                                        public int getIcon(BottomMenu bottomMenu, int index, String menuText) {
-                                            switch (menuText) {
-                                                case "添加":
-                                                    return R.mipmap.img_dialogx_demo_add;
-                                                case "查看":
-                                                    return R.mipmap.img_dialogx_demo_view;
-                                                case "编辑":
-                                                    return R.mipmap.img_dialogx_demo_edit;
-                                                case "删除":
-                                                    return R.mipmap.img_dialogx_demo_delete;
-                                                case "分享":
-                                                    return R.mipmap.img_dialogx_demo_share;
-                                                case "评论":
-                                                    return R.mipmap.img_dialogx_demo_comment;
-                                                case "下载":
-                                                    return R.mipmap.img_dialogx_demo_download;
-                                                case "收藏":
-                                                    return R.mipmap.img_dialogx_demo_favorite;
-                                                case "赞!":
-                                                    return R.mipmap.img_dialogx_demo_good;
-                                                case "不喜欢":
-                                                    return R.mipmap.img_dialogx_demo_dislike;
-                                                case "所属专辑":
-                                                    return R.mipmap.img_dialogx_demo_album;
-                                                case "复制链接":
-                                                    return R.mipmap.img_dialogx_demo_link;
-                                                case "类似推荐":
-                                                    return R.mipmap.img_dialogx_demo_recommend;
-                                            }
-                                            return 0;
-                                        }
-                                    })
-                                    .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
-                                        @Override
-                                        public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
-                                            PopTip.show(text);
-                                            return false;
-                                        }
-                                    })
-                                    .show();
-                        }
-                    }.start();
+                    BottomMenu.build()
+                            .setBottomDialogMaxHeight(0.6f)
+                            .setMenuList(new String[]{"添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐", "添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐"})
+                            .setOnIconChangeCallBack(new OnIconChangeCallBack<BottomMenu>(true) {
+                                @Override
+                                public int getIcon(BottomMenu bottomMenu, int index, String menuText) {
+                                    switch (menuText) {
+                                        case "添加":
+                                            return R.mipmap.img_dialogx_demo_add;
+                                        case "查看":
+                                            return R.mipmap.img_dialogx_demo_view;
+                                        case "编辑":
+                                            return R.mipmap.img_dialogx_demo_edit;
+                                        case "删除":
+                                            return R.mipmap.img_dialogx_demo_delete;
+                                        case "分享":
+                                            return R.mipmap.img_dialogx_demo_share;
+                                        case "评论":
+                                            return R.mipmap.img_dialogx_demo_comment;
+                                        case "下载":
+                                            return R.mipmap.img_dialogx_demo_download;
+                                        case "收藏":
+                                            return R.mipmap.img_dialogx_demo_favorite;
+                                        case "赞!":
+                                            return R.mipmap.img_dialogx_demo_good;
+                                        case "不喜欢":
+                                            return R.mipmap.img_dialogx_demo_dislike;
+                                        case "所属专辑":
+                                            return R.mipmap.img_dialogx_demo_album;
+                                        case "复制链接":
+                                            return R.mipmap.img_dialogx_demo_link;
+                                        case "类似推荐":
+                                            return R.mipmap.img_dialogx_demo_recommend;
+                                    }
+                                    return 0;
+                                }
+                            })
+                            .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
+                                @Override
+                                public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
+                                    PopTip.show(text);
+                                    return false;
+                                }
+                            })
+                            .show();
                 } else {
                     BottomMenu.show(new String[]{"新标签页中打开", "稍后阅读", "复制链接网址"})
                             .setMessage("http://www.kongzue.com/DialogX")

+ 1 - 1
gradle.properties

@@ -19,5 +19,5 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.45.beta13
+BUILD_VERSION=0.0.45.beta14
 BUILD_VERSION_INT=44