Allow non-resizable apps in split-screen (3/n)

Update the developer option for enabling non-resizable for multi window
(freeform/splitscreen) instead of only freeform

Bug: 176061101
Test: manual
Test: make RunSettingsRoboTests
Change-Id: I56a9d8edca502d9449967f557c075b1408375a8a
This commit is contained in:
Chris Li
2021-01-14 16:15:08 -08:00
parent 1f09c95571
commit 9cbc62824b
5 changed files with 33 additions and 30 deletions

View File

@@ -12186,10 +12186,10 @@
<string name="force_desktop_mode">Force desktop mode</string> <string name="force_desktop_mode">Force desktop mode</string>
<!-- UI debug setting: force desktop mode summary [CHAR LIMIT=NONE] --> <!-- UI debug setting: force desktop mode summary [CHAR LIMIT=NONE] -->
<string name="force_desktop_mode_summary">Force experimental desktop mode on secondary displays</string> <string name="force_desktop_mode_summary">Force experimental desktop mode on secondary displays</string>
<!-- UI debug setting: enable non-resizables in freeform [CHAR LIMIT=60] --> <!-- UI debug setting: enable non-resizables in multi window [CHAR LIMIT=60] -->
<string name="enable_sizecompat_freeform">Enable freeform sizecompat</string> <string name="enable_non_resizable_multi_window">Enable non-resizable in multi window</string>
<!-- UI debug setting: enable non-resizables in freeform summary [CHAR LIMIT=NONE] --> <!-- UI debug setting: enable non-resizables in multi window summary [CHAR LIMIT=NONE] -->
<string name="enable_sizecompat_freeform_summary">Allows sizecompat apps to be in freeform</string> <string name="enable_non_resizable_multi_window_summary">Allows non-resizable apps to be in multi window</string>
<!-- UI debug setting: Force enable "smart dark" UI rendering feature [CHAR LIMIT=60] --> <!-- UI debug setting: Force enable "smart dark" UI rendering feature [CHAR LIMIT=60] -->
<string name="hwui_force_dark_title">Override force-dark</string> <string name="hwui_force_dark_title">Override force-dark</string>

View File

@@ -640,9 +640,9 @@
android:summary="@string/force_desktop_mode_summary" /> android:summary="@string/force_desktop_mode_summary" />
<SwitchPreference <SwitchPreference
android:key="enable_sizecompat_freeform" android:key="enable_non_resizable_multi_window"
android:title="@string/enable_sizecompat_freeform" android:title="@string/enable_non_resizable_multi_window"
android:summary="@string/enable_sizecompat_freeform_summary" /> android:summary="@string/enable_non_resizable_multi_window_summary" />
<Preference <Preference
android:key="reset_shortcut_manager_throttling" android:key="reset_shortcut_manager_throttling"

View File

@@ -553,7 +553,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
controllers.add(new ResizableActivityPreferenceController(context)); controllers.add(new ResizableActivityPreferenceController(context));
controllers.add(new FreeformWindowsPreferenceController(context)); controllers.add(new FreeformWindowsPreferenceController(context));
controllers.add(new DesktopModePreferenceController(context)); controllers.add(new DesktopModePreferenceController(context));
controllers.add(new SizeCompatFreeformPreferenceController(context)); controllers.add(new NonResizableMultiWindowPreferenceController(context));
controllers.add(new ShortcutManagerThrottlingPreferenceController(context)); controllers.add(new ShortcutManagerThrottlingPreferenceController(context));
controllers.add(new EnableGnssRawMeasFullTrackingPreferenceController(context)); controllers.add(new EnableGnssRawMeasFullTrackingPreferenceController(context));
controllers.add(new DefaultLaunchPreferenceController(context, "running_apps")); controllers.add(new DefaultLaunchPreferenceController(context, "running_apps"));

View File

@@ -16,7 +16,7 @@
package com.android.settings.development; package com.android.settings.development;
import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM; import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW;
import android.content.Context; import android.content.Context;
import android.provider.Settings; import android.provider.Settings;
@@ -29,32 +29,35 @@ import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController; import com.android.settingslib.development.DeveloperOptionsPreferenceController;
/** /**
* Preference Controller for whether to allow launching size-compat apps in freeform windows. * Preference Controller for whether to allow launching non-resizable apps in multi window,
* such as freeform and splitscreen.
*/ */
public class SizeCompatFreeformPreferenceController extends DeveloperOptionsPreferenceController public class NonResizableMultiWindowPreferenceController
extends DeveloperOptionsPreferenceController
implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin { implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String ENABLE_SIZECOMPAT_FREEFORM_KEY = "enable_sizecompat_freeform"; private static final String ENABLE_NON_RESIZABLE_MULTI_WINDOW_KEY =
"enable_non_resizable_multi_window";
@VisibleForTesting @VisibleForTesting
static final int SETTING_VALUE_OFF = 0; static final int SETTING_VALUE_OFF = 0;
@VisibleForTesting @VisibleForTesting
static final int SETTING_VALUE_ON = 1; static final int SETTING_VALUE_ON = 1;
public SizeCompatFreeformPreferenceController(Context context) { public NonResizableMultiWindowPreferenceController(Context context) {
super(context); super(context);
} }
@Override @Override
public String getPreferenceKey() { public String getPreferenceKey() {
return ENABLE_SIZECOMPAT_FREEFORM_KEY; return ENABLE_NON_RESIZABLE_MULTI_WINDOW_KEY;
} }
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean isEnabled = (Boolean) newValue; final boolean isEnabled = (Boolean) newValue;
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(mContext.getContentResolver(),
DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM, DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW,
isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF); isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
return true; return true;
} }
@@ -62,7 +65,7 @@ public class SizeCompatFreeformPreferenceController extends DeveloperOptionsPref
@Override @Override
public void updateState(Preference preference) { public void updateState(Preference preference) {
final int mode = Settings.Global.getInt(mContext.getContentResolver(), final int mode = Settings.Global.getInt(mContext.getContentResolver(),
DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM, SETTING_VALUE_OFF); DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, SETTING_VALUE_OFF);
((SwitchPreference) mPreference).setChecked(mode != SETTING_VALUE_OFF); ((SwitchPreference) mPreference).setChecked(mode != SETTING_VALUE_OFF);
} }
@@ -70,7 +73,7 @@ public class SizeCompatFreeformPreferenceController extends DeveloperOptionsPref
protected void onDeveloperOptionsSwitchDisabled() { protected void onDeveloperOptionsSwitchDisabled() {
super.onDeveloperOptionsSwitchDisabled(); super.onDeveloperOptionsSwitchDisabled();
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(mContext.getContentResolver(),
DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM, SETTING_VALUE_OFF); DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, SETTING_VALUE_OFF);
((SwitchPreference) mPreference).setChecked(false); ((SwitchPreference) mPreference).setChecked(false);
} }
} }

View File

@@ -16,10 +16,10 @@
package com.android.settings.development; package com.android.settings.development;
import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM; import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW;
import static com.android.settings.development.SizeCompatFreeformPreferenceController.SETTING_VALUE_OFF; import static com.android.settings.development.NonResizableMultiWindowPreferenceController.SETTING_VALUE_OFF;
import static com.android.settings.development.SizeCompatFreeformPreferenceController.SETTING_VALUE_ON; import static com.android.settings.development.NonResizableMultiWindowPreferenceController.SETTING_VALUE_ON;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -41,7 +41,7 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class SizeCompatFreeformPreferenceControllerTest { public class NonResizableMultiWindowPreferenceControllerTest {
@Mock @Mock
private SwitchPreference mPreference; private SwitchPreference mPreference;
@@ -49,39 +49,39 @@ public class SizeCompatFreeformPreferenceControllerTest {
private PreferenceScreen mScreen; private PreferenceScreen mScreen;
private Context mContext; private Context mContext;
private SizeCompatFreeformPreferenceController mController; private NonResizableMultiWindowPreferenceController mController;
@Before @Before
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mController = new SizeCompatFreeformPreferenceController(mContext); mController = new NonResizableMultiWindowPreferenceController(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
} }
@Test @Test
public void onPreferenceChange_switchEnabled_shouldEnableSizeCompatFreeform() { public void onPreferenceChange_switchEnabled_shouldEnableNonResizableMultiWindow() {
mController.onPreferenceChange(mPreference, true /* new value */); mController.onPreferenceChange(mPreference, true /* new value */);
final int mode = Settings.Global.getInt(mContext.getContentResolver(), final int mode = Settings.Global.getInt(mContext.getContentResolver(),
DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM, -1 /* default */); DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, -1 /* default */);
assertThat(mode).isEqualTo(SETTING_VALUE_ON); assertThat(mode).isEqualTo(SETTING_VALUE_ON);
} }
@Test @Test
public void onPreferenceChange_switchDisabled_shouldDisableSizeCompatFreeform() { public void onPreferenceChange_switchDisabled_shouldDisableNonResizableMultiWindow() {
mController.onPreferenceChange(mPreference, false /* new value */); mController.onPreferenceChange(mPreference, false /* new value */);
final int mode = Settings.Global.getInt(mContext.getContentResolver(), final int mode = Settings.Global.getInt(mContext.getContentResolver(),
DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM, -1 /* default */); DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, -1 /* default */);
assertThat(mode).isEqualTo(SETTING_VALUE_OFF); assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
} }
@Test @Test
public void updateState_settingEnabled_preferenceShouldBeChecked() { public void updateState_settingEnabled_preferenceShouldBeChecked() {
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(mContext.getContentResolver(),
DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM, SETTING_VALUE_ON); DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, SETTING_VALUE_ON);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -91,7 +91,7 @@ public class SizeCompatFreeformPreferenceControllerTest {
@Test @Test
public void updateState_settingDisabled_preferenceShouldNotBeChecked() { public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(mContext.getContentResolver(),
DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM, SETTING_VALUE_OFF); DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, SETTING_VALUE_OFF);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -103,7 +103,7 @@ public class SizeCompatFreeformPreferenceControllerTest {
mController.onDeveloperOptionsSwitchDisabled(); mController.onDeveloperOptionsSwitchDisabled();
final int mode = Settings.Global.getInt(mContext.getContentResolver(), final int mode = Settings.Global.getInt(mContext.getContentResolver(),
DEVELOPMENT_ENABLE_SIZECOMPAT_FREEFORM, -1 /* default */); DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, -1 /* default */);
assertThat(mode).isEqualTo(SETTING_VALUE_OFF); assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
verify(mPreference).setEnabled(false); verify(mPreference).setEnabled(false);
} }