From 1e5f5a242e17cf681f074ed406e08851e3659a0e Mon Sep 17 00:00:00 2001 From: kongzue Date: Wed, 23 Jun 2021 13:11:08 +0800 Subject: [PATCH] 0.0.40.beta4 --- .../kongzue/dialogx/dialogs/BottomMenu.java | 10 +---- .../com/kongzue/dialogx/dialogs/PopTip.java | 5 +++ .../dialogx/interfaces/BaseDialog.java | 11 ++++++ .../com/kongzue/dialogx/util/WindowUtil.java | 37 ++++++++++++++++++- .../kongzue/dialogx/util/views/BlurView.java | 2 +- .../java/com/kongzue/dialogxdemo/App.java | 2 +- .../com/kongzue/dialogxdemo/MainActivity.java | 2 +- gradle.properties | 2 +- 8 files changed, 57 insertions(+), 14 deletions(-) diff --git a/DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java b/DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java index 1febee44..c28ce7aa 100644 --- a/DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java +++ b/DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java @@ -528,16 +528,10 @@ public void onItemClick(AdapterView parent, View view, int position, long id) if (!onMenuItemSelectListener.onClick(me, menuList.get(position), position)) { dismiss(); } else { - boolean select = false; - if (selectionIndex == position) { - selectionIndex = -1; - } else { - selectionIndex = position; - select = true; - } + selectionIndex = position; menuListAdapter.notifyDataSetInvalidated(); menuListAdapter.notifyDataSetChanged(); - onMenuItemSelectListener.onOneItemSelect(me, menuList.get(position), position, select); + onMenuItemSelectListener.onOneItemSelect(me, menuList.get(position), position, true); } } else { if (onMenuItemClickListener != null) { diff --git a/DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java b/DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java index 7f2decea..2b60f77c 100644 --- a/DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java +++ b/DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java @@ -77,6 +77,11 @@ protected PopTip() { super(); } + @Override + public boolean isCancelable() { + return false; + } + public static PopTip build() { return new PopTip(); } diff --git a/DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java b/DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java index e1aebce4..95dab126 100644 --- a/DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java +++ b/DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java @@ -215,6 +215,8 @@ public BaseDialog() { autoShowInputKeyboard = DialogX.autoShowInputKeyboard; } + public abstract boolean isCancelable(); + public View createView(int layoutId) { if (getContext() == null) { error("DialogX 未初始化。\n请检查是否在启动对话框前进行初始化操作,使用以下代码进行初始化:\nDialogX.init(context);\n\n另外建议您前往查看 DialogX 的文档进行使用:https://github.com/kongzue/DialogX"); @@ -361,6 +363,11 @@ protected static void runOnMain(Runnable runnable) { new Handler(Looper.getMainLooper()).post(runnable); } + public View getDialogView() { + if (dialogView == null) return null; + return dialogView.get(); + } + public Activity getActivity() { return ownActivity == null ? null : ownActivity.get(); } @@ -381,4 +388,8 @@ public static void recycleDialog(Activity activity) { } } } + + public static List getRunningDialogList() { + return new CopyOnWriteArrayList<>(runningDialogList); + } } diff --git a/DialogX/src/main/java/com/kongzue/dialogx/util/WindowUtil.java b/DialogX/src/main/java/com/kongzue/dialogx/util/WindowUtil.java index 24b8312c..b4448da3 100644 --- a/DialogX/src/main/java/com/kongzue/dialogx/util/WindowUtil.java +++ b/DialogX/src/main/java/com/kongzue/dialogx/util/WindowUtil.java @@ -6,12 +6,14 @@ 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.Toast; import com.kongzue.dialogx.R; +import com.kongzue.dialogx.dialogs.PopTip; import com.kongzue.dialogx.interfaces.BaseDialog; import static android.view.WindowManager.LayoutParams.*; @@ -26,6 +28,25 @@ public class WindowUtil { public static void show(Activity activity, View dialogView, boolean touchEnable) { + try { + if (activity.getWindow().getDecorView().isAttachedToWindow()) { + showNow(activity, dialogView, touchEnable); + } else { + activity.getWindow().getDecorView().post(new Runnable() { + @Override + public void run() { + showNow(activity, dialogView, touchEnable); + } + }); + } + } catch (Exception e) { + if (activity != null && !activity.isDestroyed()) { + showNow(activity, dialogView, touchEnable); + } + } + } + + private static void showNow(Activity activity, View dialogView, boolean touchEnable) { WindowManager manager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); @@ -38,12 +59,24 @@ public static void show(Activity activity, View dialogView, boolean touchEnable) FLAG_LAYOUT_IN_SCREEN ; if (!touchEnable) { - layoutParams.flags = layoutParams.flags | FLAG_NOT_FOCUSABLE; + dialogView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + for (BaseDialog baseDialog : BaseDialog.getRunningDialogList()) { + if (!(baseDialog instanceof PopTip) && !baseDialog.isCancelable() && baseDialog.getActivity() == activity) { + if (baseDialog.getDialogView() == null) { + return false; + } + return baseDialog.getDialogView().dispatchTouchEvent(event); + } + } + return activity.dispatchTouchEvent(event); + } + }); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { layoutParams.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; } - manager.addView(dialogView, layoutParams); } diff --git a/DialogX/src/main/java/com/kongzue/dialogx/util/views/BlurView.java b/DialogX/src/main/java/com/kongzue/dialogx/util/views/BlurView.java index 993fa133..8b36bafb 100644 --- a/DialogX/src/main/java/com/kongzue/dialogx/util/views/BlurView.java +++ b/DialogX/src/main/java/com/kongzue/dialogx/util/views/BlurView.java @@ -445,7 +445,7 @@ static boolean isDebug() { return DEBUGMODE && DialogX.DEBUGMODE; } - public static void log(Object o) { + private static void log(Object o) { if (isDebug()) Log.i(">>>", o.toString()); } diff --git a/app/src/main/java/com/kongzue/dialogxdemo/App.java b/app/src/main/java/com/kongzue/dialogxdemo/App.java index 3ad27e75..36e5dfc7 100644 --- a/app/src/main/java/com/kongzue/dialogxdemo/App.java +++ b/app/src/main/java/com/kongzue/dialogxdemo/App.java @@ -26,7 +26,7 @@ public class App extends BaseApp { @Override public void init() { DialogX.init(this); - DialogX.implIMPLMode= DialogX.IMPL_MODE.VIEW; + DialogX.implIMPLMode= DialogX.IMPL_MODE.WINDOW; DialogX.useHaptic = false; DialogX.globalStyle = new MaterialStyle() { @Override diff --git a/app/src/main/java/com/kongzue/dialogxdemo/MainActivity.java b/app/src/main/java/com/kongzue/dialogxdemo/MainActivity.java index f9cbfede..7c11b73f 100644 --- a/app/src/main/java/com/kongzue/dialogxdemo/MainActivity.java +++ b/app/src/main/java/com/kongzue/dialogxdemo/MainActivity.java @@ -671,7 +671,7 @@ public void onClick(View v) { @Override public boolean onClick(PopTip popTip, View v) { //点击“撤回”按钮回调 - toastS("邮件已撤回"); + toast("邮件已撤回"); return false; } }).showLong(); diff --git a/gradle.properties b/gradle.properties index 0e240ec9..90b49283 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,5 +18,5 @@ android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true -BUILD_VERSION=0.0.40.beta3 +BUILD_VERSION=0.0.40.beta4 BUILD_VERSION_INT=39