From 091b2099966d6da74d7d570380b5dec62a78aa08 Mon Sep 17 00:00:00 2001 From: Braden Farmer Date: Tue, 28 Sep 2021 13:43:12 -0600 Subject: [PATCH] Cache display windowing mode since it's not consistent on Android 12 --- .../taskbar/activity/HomeActivityDelegate.java | 11 +++-- .../activity/InvisibleActivityFreeform.java | 2 +- .../farmerbb/taskbar/activity/MainActivity.java | 3 +- .../com/farmerbb/taskbar/helper/DisplayHelper.java | 51 ++++++++++++++++++++++ .../farmerbb/taskbar/receiver/QuitReceiver.java | 3 +- .../taskbar/receiver/ShowHideTaskbarReceiver.java | 3 +- .../taskbar/service/NotificationService.java | 3 +- app/src/main/java/com/farmerbb/taskbar/util/U.java | 17 +++++++- 8 files changed, 78 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/com/farmerbb/taskbar/helper/DisplayHelper.java diff --git a/app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java b/app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java index 6d4a512c..14ba6280 100644 --- a/app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java +++ b/app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java @@ -54,6 +54,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.farmerbb.taskbar.R; +import com.farmerbb.taskbar.helper.DisplayHelper; import com.farmerbb.taskbar.helper.GlobalHelper; import com.farmerbb.taskbar.util.Callbacks; import com.farmerbb.taskbar.util.TaskbarPosition; @@ -580,7 +581,7 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost { if(startMenuController != null) startMenuController.onDestroyHost(this); if(dashboardController != null) dashboardController.onDestroyHost(this); - IconCache.getInstance(this).clearCache(); + U.clearCaches(this); // Stop using HomeActivityDelegate as UI host and restart services if needed if(pref.getBoolean(PREF_TASKBAR_ACTIVE, false) && !pref.getBoolean(PREF_IS_HIDDEN, false)) { @@ -597,7 +598,7 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost { if(!pref.getBoolean(PREF_DONT_STOP_DASHBOARD, false)) stopService(new Intent(this, DashboardService.class)); - IconCache.getInstance(this).clearCache(); + U.clearCaches(this); } } @@ -657,8 +658,7 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost { if(startMenuController != null) startMenuController.onDestroyHost(this); if(dashboardController != null) dashboardController.onDestroyHost(this); - IconCache.getInstance(this).clearCache(); - + U.clearCaches(this); U.stopFreeformHack(this); // Stop using HomeActivityDelegate as UI host and restart services if needed @@ -676,8 +676,7 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost { stopService(new Intent(this, StartMenuService.class)); stopService(new Intent(this, DashboardService.class)); - IconCache.getInstance(this).clearCache(); - + U.clearCaches(this); U.stopFreeformHack(this); } } diff --git a/app/src/main/java/com/farmerbb/taskbar/activity/InvisibleActivityFreeform.java b/app/src/main/java/com/farmerbb/taskbar/activity/InvisibleActivityFreeform.java index 25febde1..ec892e6e 100644 --- a/app/src/main/java/com/farmerbb/taskbar/activity/InvisibleActivityFreeform.java +++ b/app/src/main/java/com/farmerbb/taskbar/activity/InvisibleActivityFreeform.java @@ -243,7 +243,7 @@ public class InvisibleActivityFreeform extends Activity { stopService(new Intent(this, StartMenuService.class)); stopService(new Intent(this, DashboardService.class)); - IconCache.getInstance(this).clearCache(); + U.clearCaches(this); } } } diff --git a/app/src/main/java/com/farmerbb/taskbar/activity/MainActivity.java b/app/src/main/java/com/farmerbb/taskbar/activity/MainActivity.java index bb59dfd4..876cdbdd 100644 --- a/app/src/main/java/com/farmerbb/taskbar/activity/MainActivity.java +++ b/app/src/main/java/com/farmerbb/taskbar/activity/MainActivity.java @@ -403,8 +403,7 @@ public class MainActivity extends AppCompatActivity { stopService(new Intent(this, StartMenuService.class)); stopService(new Intent(this, DashboardService.class)); - IconCache.getInstance(this).clearCache(); - + U.clearCaches(this); U.sendBroadcast(this, ACTION_START_MENU_DISAPPEARING); } diff --git a/app/src/main/java/com/farmerbb/taskbar/helper/DisplayHelper.java b/app/src/main/java/com/farmerbb/taskbar/helper/DisplayHelper.java new file mode 100644 index 00000000..5fbc781d --- /dev/null +++ b/app/src/main/java/com/farmerbb/taskbar/helper/DisplayHelper.java @@ -0,0 +1,51 @@ +/* Copyright 2021 Braden Farmer + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.farmerbb.taskbar.helper; + +import android.annotation.TargetApi; +import android.os.Build; + +import java.util.HashMap; +import java.util.Map; + +public class DisplayHelper { + + private final Map displayMap = new HashMap<>(); + + private static DisplayHelper theInstance; + + private DisplayHelper() {} + + public static DisplayHelper getInstance() { + if(theInstance == null) theInstance = new DisplayHelper(); + + return theInstance; + } + + @TargetApi(Build.VERSION_CODES.N) + public boolean get(int displayID) { + Boolean value = displayMap.getOrDefault(displayID, false); + return value != null && value; + } + + public void put(int displayID) { + displayMap.put(displayID, true); + } + + public void clear() { + displayMap.clear(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/farmerbb/taskbar/receiver/QuitReceiver.java b/app/src/main/java/com/farmerbb/taskbar/receiver/QuitReceiver.java index b663f7ab..4656c49c 100644 --- a/app/src/main/java/com/farmerbb/taskbar/receiver/QuitReceiver.java +++ b/app/src/main/java/com/farmerbb/taskbar/receiver/QuitReceiver.java @@ -49,8 +49,7 @@ public class QuitReceiver extends BroadcastReceiver { context.stopService(startMenuIntent); context.stopService(dashboardIntent); - IconCache.getInstance(context).clearCache(); - + U.clearCaches(context); U.sendBroadcast(context, ACTION_START_MENU_DISAPPEARING); } diff --git a/app/src/main/java/com/farmerbb/taskbar/receiver/ShowHideTaskbarReceiver.java b/app/src/main/java/com/farmerbb/taskbar/receiver/ShowHideTaskbarReceiver.java index e1168ed8..e3a6d2be 100644 --- a/app/src/main/java/com/farmerbb/taskbar/receiver/ShowHideTaskbarReceiver.java +++ b/app/src/main/java/com/farmerbb/taskbar/receiver/ShowHideTaskbarReceiver.java @@ -70,8 +70,7 @@ public class ShowHideTaskbarReceiver extends BroadcastReceiver { context.stopService(startMenuIntent); context.stopService(dashboardIntent); - IconCache.getInstance(context).clearCache(); - + U.clearCaches(context); U.sendBroadcast(context, ACTION_START_MENU_DISAPPEARING); } diff --git a/app/src/main/java/com/farmerbb/taskbar/service/NotificationService.java b/app/src/main/java/com/farmerbb/taskbar/service/NotificationService.java index fc84ad0e..71ae01ad 100644 --- a/app/src/main/java/com/farmerbb/taskbar/service/NotificationService.java +++ b/app/src/main/java/com/farmerbb/taskbar/service/NotificationService.java @@ -34,6 +34,7 @@ import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; import com.farmerbb.taskbar.activity.MainActivity; import com.farmerbb.taskbar.R; +import com.farmerbb.taskbar.helper.DisplayHelper; import com.farmerbb.taskbar.util.DependencyUtils; import com.farmerbb.taskbar.util.IconCache; import com.farmerbb.taskbar.util.U; @@ -76,7 +77,7 @@ public class NotificationService extends Service { stopService(new Intent(context, StartMenuService.class)); stopService(new Intent(context, DashboardService.class)); - IconCache.getInstance(context).clearCache(); + U.clearCaches(context); } }; diff --git a/app/src/main/java/com/farmerbb/taskbar/util/U.java b/app/src/main/java/com/farmerbb/taskbar/util/U.java index b38c57af..fe4e0a2a 100644 --- a/app/src/main/java/com/farmerbb/taskbar/util/U.java +++ b/app/src/main/java/com/farmerbb/taskbar/util/U.java @@ -79,6 +79,7 @@ import com.farmerbb.taskbar.activity.DummyActivity; import com.farmerbb.taskbar.activity.InvisibleActivityFreeform; import com.farmerbb.taskbar.activity.MainActivity; import com.farmerbb.taskbar.activity.TouchAbsorberActivity; +import com.farmerbb.taskbar.helper.DisplayHelper; import com.farmerbb.taskbar.helper.GlobalHelper; import com.farmerbb.taskbar.helper.FreeformHackHelper; import com.farmerbb.taskbar.helper.LauncherHelper; @@ -2150,8 +2151,22 @@ public class U { } private static boolean displayDefaultsToFreeform(Context context, Display display) { + if(!canEnableFreeform()) return false; + + DisplayHelper helper = DisplayHelper.getInstance(); + int id = display.getDisplayId(); + if(helper.get(id)) return true; + Context dispContext = context.createDisplayContext(display); String configString = dispContext.getResources().getConfiguration().toString(); - return configString.contains("mDisplayWindowingMode=freeform"); + boolean value = configString.contains("mDisplayWindowingMode=freeform"); + + if(value) helper.put(id); + return value; + } + + public static void clearCaches(Context context) { + IconCache.getInstance(context).clearCache(); + DisplayHelper.getInstance().clear(); } } -- 2.11.0