Always refresh device profile when multi window mode changed
Launcher monitors multi-window mode changed and updates device profile
through configuration chagned callback. It's possible that a new
configuration contains multi-window mode changed but without screen
size size change that across screen layout qualifier. Client apps might
not even receive onConfingurationChagned.
Updates Launcher to monitor multi-window mode changed through
onMultiWindowModeChanged to make sure it always refreshes device profile
that matches with the latest mulati-window mode.
Fix: 197835119
Test: manual check the repo steps.
Change-Id: Ie99045a1fc8493ff37645b95e7ccd9d15478d862
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 6ea7b17..a02f8ee 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -555,6 +555,14 @@
}
@Override
+ public void onMultiWindowModeChanged(boolean isInMultiWindowMode, Configuration newConfig) {
+ super.onMultiWindowModeChanged(isInMultiWindowMode, newConfig);
+ // Always update device profile when multi window mode changed.
+ initDeviceProfile(mDeviceProfile.inv);
+ dispatchDeviceProfileChanged();
+ }
+
+ @Override
public void onConfigurationChanged(Configuration newConfig) {
int diff = newConfig.diff(mOldConfig);
if ((diff & (CONFIG_ORIENTATION | CONFIG_SCREEN_SIZE)) != 0) {
@@ -592,11 +600,9 @@
private void initDeviceProfile(InvariantDeviceProfile idp) {
// Load configuration-specific DeviceProfile
- mDeviceProfile = idp.getDeviceProfile(this);
- if (isInMultiWindowMode()) {
- mDeviceProfile = mDeviceProfile.getMultiWindowProfile(
- this, getMultiWindowDisplaySize());
- }
+ mDeviceProfile = isInMultiWindowMode()
+ ? mDeviceProfile.getMultiWindowProfile(this, getMultiWindowDisplaySize())
+ : idp.getDeviceProfile(this);
onDeviceProfileInitiated();
mModelWriter = mModel.getWriter(getDeviceProfile().isVerticalBarLayout(), true, this);