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
This commit is contained in:
Jerry Chang 2021-08-27 13:29:01 +08:00
parent 64af7acc1d
commit 09b40241fc
1 changed files with 11 additions and 5 deletions

View File

@ -554,6 +554,14 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
AbstractFloatingView.closeOpenViews(this, false, TYPE_ICON_SURFACE);
}
@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);
@ -592,11 +600,9 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
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);