From 54cbb78d8e2b784ec411cb569aec05ccc3c7bea7 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sat, 6 Oct 2018 11:16:27 +0800 Subject: [PATCH] fix(target O): floating window cannot be shown --- .../autojs/autojs/ui/common/ScriptOperations.java | 4 ++-- .../autojs/ui/floating/CircularMenuWindow.java | 7 +++++-- .../autojs/ui/floating/FloatyWindowManger.java | 12 ++++++++++++ .../stardust/autojs/core/console/ConsoleFloaty.java | 4 ++-- .../com/stardust/autojs/core/floaty/RawWindow.java | 8 +++++++- .../src/main/java/com/stardust/app/DialogUtils.java | 10 +++++++++- 6 files changed, 37 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java b/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java index 5803da69..3b1b4511 100644 --- a/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java +++ b/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java @@ -291,14 +291,14 @@ public class ScriptOperations { } public void delete(final ScriptFile scriptFile) { - new ThemeColorMaterialDialogBuilder(mContext) + DialogUtils.showDialog(new ThemeColorMaterialDialogBuilder(mContext) .title(mContext.getString(R.string.text_are_you_sure_to_delete, scriptFile.getName())) .positiveText(R.string.cancel) .negativeText(R.string.ok) .onNegative((dialog, which) -> { deleteWithoutConfirm(scriptFile); }) - .show(); + .build()); } diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenuWindow.java b/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenuWindow.java index 8f57a5e6..12ef5e99 100644 --- a/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenuWindow.java +++ b/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenuWindow.java @@ -3,6 +3,7 @@ package org.autojs.autojs.ui.floating; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; +import android.view.Gravity; import android.view.OrientationEventListener; import android.view.View; import android.view.WindowManager; @@ -94,8 +95,10 @@ public class CircularMenuWindow implements FloatyWindow { } private WindowManager.LayoutParams createWindowLayoutParams() { - WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(-2, -2, 2003, 520, -3); - layoutParams.gravity = 51; + WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams( + WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, + FloatyWindowManger.getWindowType(), 520, -3); + layoutParams.gravity = Gravity.LEFT | Gravity.TOP; return layoutParams; } diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/FloatyWindowManger.java b/app/src/main/java/org/autojs/autojs/ui/floating/FloatyWindowManger.java index 54dec712..6bb1f31e 100644 --- a/app/src/main/java/org/autojs/autojs/ui/floating/FloatyWindowManger.java +++ b/app/src/main/java/org/autojs/autojs/ui/floating/FloatyWindowManger.java @@ -2,6 +2,8 @@ package org.autojs.autojs.ui.floating; import android.content.Context; import android.content.Intent; +import android.os.Build; +import android.view.WindowManager; import android.widget.Toast; import com.stardust.app.GlobalAppContext; @@ -9,9 +11,11 @@ import com.stardust.autojs.util.FloatingPermission; import com.stardust.enhancedfloaty.FloatyService; import com.stardust.enhancedfloaty.FloatyWindow; import com.stardust.enhancedfloaty.util.FloatingWindowPermissionUtil; + import org.autojs.autojs.App; import org.autojs.autojs.R; import org.autojs.autojs.ui.floating.CircularMenu; + import com.stardust.util.IntentUtil; import java.lang.ref.WeakReference; @@ -74,4 +78,12 @@ public class FloatyWindowManger { menu.close(); sCircularMenu = null; } + + public static int getWindowType() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + return WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + return WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; + } + } } diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java index a6349951..a6a91a51 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java @@ -80,7 +80,7 @@ public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableEx } private void initConsoleTitle(View view) { - mTitleView = (TextView) view.findViewById(R.id.title); + mTitleView = view.findViewById(R.id.title); if (mTitle != null) { mTitleView.setText(mTitle); } @@ -91,7 +91,7 @@ public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableEx } private void setUpConsole(View view, ResizableExpandableFloatyWindow window) { - ConsoleView consoleView = (ConsoleView) view.findViewById(R.id.console); + ConsoleView consoleView = view.findViewById(R.id.console); consoleView.setConsole(mConsole); consoleView.setWindow(window); initConsoleTitle(view); diff --git a/autojs/src/main/java/com/stardust/autojs/core/floaty/RawWindow.java b/autojs/src/main/java/com/stardust/autojs/core/floaty/RawWindow.java index d7d9e7a7..a2dbc401 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/floaty/RawWindow.java +++ b/autojs/src/main/java/com/stardust/autojs/core/floaty/RawWindow.java @@ -66,10 +66,16 @@ public class RawWindow implements FloatyWindow { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; } + int type; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; + } WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, - WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, + type, flags, PixelFormat.TRANSLUCENT); layoutParams.gravity = Gravity.TOP | Gravity.START; diff --git a/common/src/main/java/com/stardust/app/DialogUtils.java b/common/src/main/java/com/stardust/app/DialogUtils.java index 4cadcde9..8dd77860 100644 --- a/common/src/main/java/com/stardust/app/DialogUtils.java +++ b/common/src/main/java/com/stardust/app/DialogUtils.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.ContextWrapper; +import android.os.Build; import android.view.Window; import android.view.WindowManager; @@ -15,10 +16,17 @@ public class DialogUtils { public static T showDialog(T dialog) { Context context = dialog.getContext(); + if (!isActivityContext(context)) { Window window = dialog.getWindow(); + int type; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + type = WindowManager.LayoutParams.TYPE_PHONE; + } if (window != null) - window.setType(WindowManager.LayoutParams.TYPE_PHONE); + window.setType(type); } dialog.show(); return dialog;