Don't recreate taskbar on rotation
This was a regression due to ag/17241303, since technically the size changes when rotating (width and height swap). Now we detect that case and don't recreate, but instead propagate the new DeviceProfile via TaskbarActivityContext#updateDeviceProfile()
Test: Open an app, rotate device, ensure taskbar isn't recreated. Changing properties such as dark theme does still recreate taskbar.
Bug: 219981733
Change-Id: Ic827c8e697a284a085609ea8653d77900686306a
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
index 494d21e..8e31a74 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
@@ -19,10 +19,7 @@
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
-import static com.android.launcher3.util.DisplayController.CHANGE_ACTIVE_SCREEN;
-import static com.android.launcher3.util.DisplayController.CHANGE_DENSITY;
import static com.android.launcher3.util.DisplayController.CHANGE_NAVIGATION_MODE;
-import static com.android.launcher3.util.DisplayController.CHANGE_SUPPORTED_BOUNDS;
import android.content.ComponentCallbacks;
import android.content.Context;
@@ -120,19 +117,24 @@
int configsRequiringRecreate = ActivityInfo.CONFIG_ASSETS_PATHS
| ActivityInfo.CONFIG_LAYOUT_DIRECTION | ActivityInfo.CONFIG_UI_MODE
| ActivityInfo.CONFIG_DENSITY | ActivityInfo.CONFIG_SCREEN_SIZE;
- if ((configDiff & configsRequiringRecreate) != 0) {
- if ((configDiff & ActivityInfo.CONFIG_SCREEN_SIZE) != 0 &&
- mTaskbarActivityContext != null && dp != null) {
- DeviceProfile oldDp = mTaskbarActivityContext.getDeviceProfile();
- // Additional check since this callback gets fired multiple times w/o
- // screen size changing
- if (dp.widthPx != oldDp.widthPx || dp.heightPx != oldDp.heightPx) {
- recreateTaskbar();
- }
- } else {
- // Color has changed, recreate taskbar to reload background color & icons.
- recreateTaskbar();
+ boolean requiresRecreate = (configDiff & configsRequiringRecreate) != 0;
+ if ((configDiff & ActivityInfo.CONFIG_SCREEN_SIZE) != 0
+ && mTaskbarActivityContext != null && dp != null) {
+ // Additional check since this callback gets fired multiple times w/o
+ // screen size changing, or when simply rotating the device.
+ DeviceProfile oldDp = mTaskbarActivityContext.getDeviceProfile();
+ boolean isOrientationChange =
+ (configDiff & ActivityInfo.CONFIG_ORIENTATION) != 0;
+ int oldWidth = isOrientationChange ? oldDp.heightPx : oldDp.widthPx;
+ int oldHeight = isOrientationChange ? oldDp.widthPx : oldDp.heightPx;
+ if (dp.widthPx == oldWidth && dp.heightPx == oldHeight) {
+ configDiff &= ~ActivityInfo.CONFIG_SCREEN_SIZE;
+ requiresRecreate = (configDiff & configsRequiringRecreate) != 0;
}
+ }
+
+ if (requiresRecreate) {
+ recreateTaskbar();
} else {
// Config change might be handled without re-creating the taskbar
if (mTaskbarActivityContext != null) {