Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b7a391c authored by Tony Wickham's avatar Tony Wickham
Browse files

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
parent 8d06bb89
Loading
Loading
Loading
Loading
+17 −15
Original line number Original line Diff line number Diff line
@@ -19,10 +19,7 @@ import static android.content.pm.PackageManager.FEATURE_PC;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
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_NAVIGATION_MODE;
import static com.android.launcher3.util.DisplayController.CHANGE_SUPPORTED_BOUNDS;


import android.content.ComponentCallbacks;
import android.content.ComponentCallbacks;
import android.content.Context;
import android.content.Context;
@@ -120,19 +117,24 @@ public class TaskbarManager implements DisplayController.DisplayInfoChangeListen
                int configsRequiringRecreate = ActivityInfo.CONFIG_ASSETS_PATHS
                int configsRequiringRecreate = ActivityInfo.CONFIG_ASSETS_PATHS
                        | ActivityInfo.CONFIG_LAYOUT_DIRECTION | ActivityInfo.CONFIG_UI_MODE
                        | ActivityInfo.CONFIG_LAYOUT_DIRECTION | ActivityInfo.CONFIG_UI_MODE
                        | ActivityInfo.CONFIG_DENSITY | ActivityInfo.CONFIG_SCREEN_SIZE;
                        | ActivityInfo.CONFIG_DENSITY | ActivityInfo.CONFIG_SCREEN_SIZE;
                if ((configDiff & configsRequiringRecreate) != 0) {
                boolean requiresRecreate = (configDiff & configsRequiringRecreate) != 0;
                    if ((configDiff & ActivityInfo.CONFIG_SCREEN_SIZE) != 0 &&
                if ((configDiff & ActivityInfo.CONFIG_SCREEN_SIZE) != 0
                            mTaskbarActivityContext != null && dp != null) {
                        && mTaskbarActivityContext != null && dp != null) {
                        DeviceProfile oldDp = mTaskbarActivityContext.getDeviceProfile();
                    // Additional check since this callback gets fired multiple times w/o
                    // Additional check since this callback gets fired multiple times w/o
                        // screen size changing
                    // screen size changing, or when simply rotating the device.
                        if (dp.widthPx != oldDp.widthPx || dp.heightPx != oldDp.heightPx) {
                    DeviceProfile oldDp = mTaskbarActivityContext.getDeviceProfile();
                            recreateTaskbar();
                    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;
                    }
                    }
                    } else {
                        // Color has changed, recreate taskbar to reload background color & icons.
                        recreateTaskbar();
                }
                }

                if (requiresRecreate) {
                    recreateTaskbar();
                } else {
                } else {
                    // Config change might be handled without re-creating the taskbar
                    // Config change might be handled without re-creating the taskbar
                    if (mTaskbarActivityContext != null) {
                    if (mTaskbarActivityContext != null) {