mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-02 08:56:55 +00:00
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
This commit is contained in:
@@ -19,10 +19,7 @@ import static android.content.pm.PackageManager.FEATURE_PC;
|
||||
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 @@ public class TaskbarManager implements DisplayController.DisplayInfoChangeListen
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user