diff --git a/Android.bp b/Android.bp index 8f7bd1befac..087030b37cf 100644 --- a/Android.bp +++ b/Android.bp @@ -132,6 +132,7 @@ android_library { flags_packages: [ "aconfig_settings_flags", "android.app.flags-aconfig", + "android.provider.flags-aconfig", ], } diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 11d97797474..cdd95355962 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -5297,7 +5297,7 @@ android:name="Settings$ContactsStorageSettingsActivity" android:label="@string/contacts_storage_settings_title" android:exported="true" - android:featureFlag="com.android.settings.flags.enable_contacts_default_account_in_settings"> + android:featureFlag="android.provider.new_default_account_api_enabled"> diff --git a/aconfig/catalyst/network_and_internet.aconfig b/aconfig/catalyst/network_and_internet.aconfig index 130905f538a..e8943e66d84 100644 --- a/aconfig/catalyst/network_and_internet.aconfig +++ b/aconfig/catalyst/network_and_internet.aconfig @@ -35,3 +35,11 @@ flag { description: "Flag for Wi-Fi calling screen" bug: "323791114" } + +flag { + name: "catalyst_restrict_background_parent_entry" + namespace: "android_settings" + description: "Flag for Data Saver" + bug: "323791114" +} + diff --git a/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java b/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java index 0550a9af426..db239aabffc 100644 --- a/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java +++ b/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java @@ -36,6 +36,7 @@ import static java.lang.Boolean.FALSE; import android.app.AppGlobals; import android.app.compat.CompatChanges; import android.content.Context; +import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.LauncherApps; @@ -44,6 +45,7 @@ import android.os.RemoteException; import android.os.UserHandle; import android.provider.DeviceConfig; import android.util.ArrayMap; +import android.util.Log; import android.util.SparseIntArray; import androidx.annotation.NonNull; @@ -71,6 +73,7 @@ public class UserAspectRatioManager { private static final boolean DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_FULLSCREEN = true; final boolean mIsUserMinAspectRatioAppDefaultFlagEnabled = Flags.userMinAspectRatioAppDefault(); + private final boolean mIgnoreActivityOrientationRequest; private final Context mContext; private final IPackageManager mIPm; @@ -90,6 +93,8 @@ public class UserAspectRatioManager { mUserAspectRatioA11yMap = new ArrayMap<>(); mUserAspectRatioOrder = new SparseIntArray(); mUserAspectRatioMap = getUserMinAspectRatioMapping(); + mIgnoreActivityOrientationRequest = getValueFromDeviceConfig( + "ignore_activity_orientation_request", false); } /** @@ -113,6 +118,24 @@ public class UserAspectRatioManager { ? aspectRatio : USER_MIN_ASPECT_RATIO_UNSET; } + // TODO b/374903057 reuse method from ActivityRecord + boolean isUniversalResizeable(@NonNull String packageName, int userId) { + try { + final ApplicationInfo info = mIPm.getApplicationInfo( + packageName, 0 /* flags */, userId); + if (info == null || info.category == ApplicationInfo.CATEGORY_GAME) { + return false; + } + final boolean compatEnabled = Flags.universalResizableByDefault() + && info.isChangeEnabled(ActivityInfo.UNIVERSAL_RESIZABLE_BY_DEFAULT); + return compatEnabled || mIgnoreActivityOrientationRequest; + } catch (RemoteException e) { + Log.e("UserAspectRatioManager", "Could not access application info for " + + packageName + ":\n" + e); + return false; + } + } + /** * @return corresponding string for {@link PackageManager.UserMinAspectRatio} value */ @@ -127,7 +150,7 @@ public class UserAspectRatioManager { return appDefault; } - return isCurrentSelectionFromManufacturerOverride(packageName, userId, aspectRatio) + return isUnsetAndRequiresFullscreenOverride(packageName, userId, aspectRatio) ? getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN, packageName, userId) : mUserAspectRatioMap.getOrDefault(aspectRatio, appDefault); } @@ -139,7 +162,7 @@ public class UserAspectRatioManager { public CharSequence getAccessibleEntry(@PackageManager.UserMinAspectRatio int aspectRatio, @NonNull String packageName) { final int userId = mContext.getUserId(); - return isCurrentSelectionFromManufacturerOverride(packageName, userId, aspectRatio) + return isUnsetAndRequiresFullscreenOverride(packageName, userId, aspectRatio) ? getAccessibleEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN, packageName) : mUserAspectRatioA11yMap.getOrDefault(aspectRatio, getUserMinAspectRatioEntry(aspectRatio, packageName, userId)); @@ -203,7 +226,7 @@ public class UserAspectRatioManager { @PackageManager.UserMinAspectRatio int userOverride) { return (userOverride != USER_MIN_ASPECT_RATIO_UNSET && userOverride != USER_MIN_ASPECT_RATIO_APP_DEFAULT) - || isCurrentSelectionFromManufacturerOverride(app.packageName, getUserId(app.uid), + || isUnsetAndRequiresFullscreenOverride(app.packageName, getUserId(app.uid), userOverride); } @@ -224,7 +247,7 @@ public class UserAspectRatioManager { /** * Whether the device manufacturer has overridden app's orientation to * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER} to force app to fullscreen - * and app has not opted-out from the treatment + * or app is universal resizeable, and app has not opted-out from the treatment */ boolean isOverrideToFullscreenEnabled(String pkgName, int userId) { Boolean appAllowsOrientationOverride = readComponentProperty(mContext.getPackageManager(), @@ -232,7 +255,8 @@ public class UserAspectRatioManager { return mIsUserMinAspectRatioAppDefaultFlagEnabled && hasAspectRatioOption(USER_MIN_ASPECT_RATIO_FULLSCREEN, pkgName) && !FALSE.equals(appAllowsOrientationOverride) - && isFullscreenCompatChangeEnabled(pkgName, userId); + && (isFullscreenCompatChangeEnabled(pkgName, userId) + || isUniversalResizeable(pkgName, userId)); } boolean isFullscreenCompatChangeEnabled(String pkgName, int userId) { @@ -240,7 +264,11 @@ public class UserAspectRatioManager { OVERRIDE_ANY_ORIENTATION_TO_USER, pkgName, UserHandle.of(userId)); } - private boolean isCurrentSelectionFromManufacturerOverride(String pkgName, int userId, + /** + * Whether the aspect ratio is unset and we desire to interpret it as fullscreen rather than + * app default because of manufacturer override or because the app is universal resizeable + */ + private boolean isUnsetAndRequiresFullscreenOverride(String pkgName, int userId, @PackageManager.UserMinAspectRatio int aspectRatio) { return aspectRatio == USER_MIN_ASPECT_RATIO_UNSET && isOverrideToFullscreenEnabled(pkgName, userId); diff --git a/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java b/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java index 6c179da9325..dd227818b42 100644 --- a/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java +++ b/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java @@ -21,11 +21,11 @@ import android.accounts.Account; import android.content.Context; import android.os.UserHandle; import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState; +import android.provider.Flags; import android.util.Log; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; -import com.android.settings.flags.Flags; import com.android.settingslib.accounts.AuthenticatorHelper; /** @@ -54,7 +54,7 @@ public class ContactsStoragePreferenceController extends BasePreferenceControlle @Override public int getAvailabilityStatus() { - return (Flags.enableContactsDefaultAccountInSettings() + return (Flags.newDefaultAccountApiEnabled() && mCurrentDefaultAccountAndState != null) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/datausage/DataSaverScreen.kt b/src/com/android/settings/datausage/DataSaverScreen.kt new file mode 100644 index 00000000000..171f0025957 --- /dev/null +++ b/src/com/android/settings/datausage/DataSaverScreen.kt @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.datausage + +import android.content.Context +import com.android.settings.R +import com.android.settings.flags.Flags +import com.android.settingslib.metadata.ProvidePreferenceScreen +import com.android.settingslib.metadata.preferenceHierarchy +import com.android.settingslib.preference.PreferenceScreenCreator + +@ProvidePreferenceScreen +class DataSaverScreen : PreferenceScreenCreator { + override val key + get() = KEY + + override val title + get() = R.string.data_saver_title + + override val icon: Int + get() = R.drawable.ic_settings_data_usage + + override fun order(context: Context) = 10 + + override fun isFlagEnabled(context: Context) = Flags.catalystRestrictBackgroundParentEntry() + + override fun fragmentClass() = DataSaverSummary::class.java + + override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} + + override fun hasCompleteHierarchy() = false + + companion object { + const val KEY = "restrict_background_parent_entry" + } +} diff --git a/src/com/android/settings/datausage/DataSaverSummary.kt b/src/com/android/settings/datausage/DataSaverSummary.kt index e118bd67b8b..8db633331bc 100644 --- a/src/com/android/settings/datausage/DataSaverSummary.kt +++ b/src/com/android/settings/datausage/DataSaverSummary.kt @@ -79,6 +79,8 @@ class DataSaverSummary : DashboardFragment() { override fun getHelpResource() = R.string.help_url_data_saver override fun getLogTag() = TAG + override fun getPreferenceScreenBindingKey(context: Context) = DataSaverScreen.KEY + private val dataSaverBackendListener = object : DataSaverBackend.Listener { override fun onDataSaverChanged(isDataSaving: Boolean) { synchronized(this) { diff --git a/src/com/android/settings/network/tether/TetherSettings.java b/src/com/android/settings/network/tether/TetherSettings.java index 77ef4b6ef12..74585149fe6 100644 --- a/src/com/android/settings/network/tether/TetherSettings.java +++ b/src/com/android/settings/network/tether/TetherSettings.java @@ -54,8 +54,8 @@ import androidx.preference.Preference; import androidx.preference.TwoStatePreference; import com.android.settings.R; -import com.android.settings.RestrictedSettingsFragment; import com.android.settings.Utils; +import com.android.settings.dashboard.RestrictedDashboardFragment; import com.android.settings.datausage.DataSaverBackend; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.wifi.tether.WifiTetherPreferenceController; @@ -75,7 +75,7 @@ import java.util.concurrent.atomic.AtomicReference; * Displays preferences for Tethering. */ @SearchIndexable -public class TetherSettings extends RestrictedSettingsFragment +public class TetherSettings extends RestrictedDashboardFragment implements DataSaverBackend.Listener { @VisibleForTesting @@ -143,11 +143,19 @@ public class TetherSettings extends RestrictedSettingsFragment super(UserManager.DISALLOW_CONFIG_TETHERING); } + @Override + protected String getLogTag() { + return TAG; + } + + @Override + protected int getPreferenceScreenResId() { + return R.xml.tether_prefs; + } + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - // Even when the UI is restricted, addPreferencesFromResource cannot be omitted. - addPreferencesFromResource(R.xml.tether_prefs); setIfOnlyAvailableForAdmins(true); if (isUiRestricted()) { return; diff --git a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java index f55cbb44f72..45600c2e044 100644 --- a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java @@ -43,9 +43,9 @@ import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.ContactsContract; import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState; +import android.provider.Flags; import com.android.settings.R; -import com.android.settings.flags.Flags; import com.android.settings.testutils.shadow.ShadowAuthenticationHelper; import org.junit.Before; @@ -108,20 +108,20 @@ public class ContactsStoragePreferenceControllerTest { } @Test - @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS) + @EnableFlags(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED) public void getAvailabilityStatus_flagIsOn_shouldReturnAvailable() { assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(AVAILABLE); } @Test - @RequiresFlagsDisabled(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS) + @RequiresFlagsDisabled(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED) public void getAvailabilityStatus_flagIsOff_shouldReturnConditionallyUnavailable() { assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo( CONDITIONALLY_UNAVAILABLE); } @Test - @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS) + @EnableFlags(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED) public void getAvailabilityStatus_illegalStateExceptionThrown_shouldReturnConditionallyUnavailable() throws Exception { when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(), @@ -135,7 +135,7 @@ public class ContactsStoragePreferenceControllerTest { } @Test - @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS) + @EnableFlags(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED) public void getAvailabilityStatus_runtimeExceptionThrown_shouldReturnConditionallyUnavailable() throws Exception { when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(), diff --git a/tests/robotests/src/com/android/settings/datausage/DataSaverScreenTest.kt b/tests/robotests/src/com/android/settings/datausage/DataSaverScreenTest.kt new file mode 100644 index 00000000000..08af4c0e862 --- /dev/null +++ b/tests/robotests/src/com/android/settings/datausage/DataSaverScreenTest.kt @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.datausage + +import com.android.settings.flags.Flags +import com.android.settingslib.preference.CatalystScreenTestCase +import com.google.common.truth.Truth.assertThat +import org.junit.Test + +class DataSaverScreenTest : CatalystScreenTestCase() { + override val preferenceScreenCreator = DataSaverScreen() + override val flagName + get() = Flags.FLAG_CATALYST_RESTRICT_BACKGROUND_PARENT_ENTRY + + override fun migration() {} + + @Test + fun key() { + assertThat(preferenceScreenCreator.key).isEqualTo(DataSaverScreen.KEY) + } +} diff --git a/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java index 4e0fb03cefe..8c537e036cc 100644 --- a/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java @@ -54,7 +54,7 @@ import androidx.preference.Preference; import androidx.preference.SwitchPreference; import com.android.settings.R; -import com.android.settings.RestrictedSettingsFragment; +import com.android.settings.dashboard.RestrictedDashboardFragment; import com.android.settings.wifi.tether.WifiTetherPreferenceController; import com.android.settingslib.RestrictedSwitchPreference; @@ -130,14 +130,12 @@ public class TetherSettingsTest { } @Test - @Config(shadows = ShadowRestrictedSettingsFragment.class) + @Config(shadows = ShadowRestrictedDashboardFragment.class) public void onCreate_isUiRestricted_doNotSetupViewModel() { - doNothing().when(mTetherSettings).addPreferencesFromResource(anyInt()); when(mTetherSettings.isUiRestricted()).thenReturn(true); mTetherSettings.onCreate(null); - verify(mTetherSettings).addPreferencesFromResource(anyInt()); verify(mTetherSettings, never()).setupViewModel(); } @@ -454,8 +452,8 @@ public class TetherSettingsTest { } } - @Implements(RestrictedSettingsFragment.class) - public static final class ShadowRestrictedSettingsFragment { + @Implements(RestrictedDashboardFragment.class) + public static final class ShadowRestrictedDashboardFragment { @Implementation public void onCreate(Bundle icicle) { // do nothing diff --git a/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java b/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java index 342212afc7b..4c0755510b6 100644 --- a/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java +++ b/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java @@ -331,9 +331,7 @@ public class UserAspectRatioManagerTest { .isEqualTo(getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName)); } - @Test - public void testGetUserMinAspectRatioEntry_enabledFullscreenOverride_returnsFullscreen() { - setIsOverrideToFullscreenEnabled(true); + private void assertUnsetIsFullscreen() { // Fullscreen option is pre-selected assertThat(getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName)) .isEqualTo(ResourcesUtils.getResourcesString( @@ -347,9 +345,7 @@ public class UserAspectRatioManagerTest { "user_aspect_ratio_app_default")); } - @Test - public void testGetUserMinAspectRatioEntry_disabledFullscreenOverride_returnsUnchanged() { - setIsOverrideToFullscreenEnabled(false); + private void assertUnsetIsAppDefault() { // Fullscreen option is not pre-selected assertThat(getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName)) .isEqualTo(ResourcesUtils.getResourcesString( @@ -358,9 +354,43 @@ public class UserAspectRatioManagerTest { } @Test - public void testIsOverrideToFullscreenEnabled_returnsTrue() + public void testGetUserMinAspectRatioEntry_enabledFullscreenCompatChange_returnsFullscreen() { + setIsOverrideToFullscreenEnabledBecauseCompatChange(true); + assertUnsetIsFullscreen(); + } + + @Test + public void testGetUserMinAspectRatioEntry_enabledFullscreenOverrideUniRes_returnsFullscreen() { + setIsOverrideToFullscreenEnabledBecauseUniversalResizeable(true); + assertUnsetIsFullscreen(); + } + + @Test + public void testGetUserMinAspectRatioEntry_noFullscreenCompatChange_returnsUnchanged() { + setIsOverrideToFullscreenEnabledBecauseCompatChange(false); + assertUnsetIsAppDefault(); + } + + @Test + public void testGetUserMinAspectRatioEntry_noFullscreenUnivRes_returnsUnchanged() { + setIsOverrideToFullscreenEnabledBecauseUniversalResizeable(false); + assertUnsetIsAppDefault(); + } + + @Test + public void testIsOverrideToFullscreenEnabledCompatChange_returnsTrue() throws PackageManager.NameNotFoundException { - setIsOverrideToFullscreenEnabled(true); + setIsOverrideToFullscreenEnabledBecauseCompatChange(true); + assertTrue(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId())); + + mockProperty(PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE, true); + assertTrue(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId())); + } + + @Test + public void testIsOverrideToFullscreenEnabledUnivRes_returnsTrue() + throws PackageManager.NameNotFoundException { + setIsOverrideToFullscreenEnabledBecauseUniversalResizeable(true); assertTrue(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId())); mockProperty(PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE, true); @@ -370,7 +400,7 @@ public class UserAspectRatioManagerTest { @Test public void testIsOverrideToFullscreenEnabled_optOut_returnsFalse() throws PackageManager.NameNotFoundException { - setIsOverrideToFullscreenEnabled(true); + setIsOverrideToFullscreenEnabledBecauseCompatChange(true); mockProperty(PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE, false); assertFalse(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId())); } @@ -381,6 +411,12 @@ public class UserAspectRatioManagerTest { assertFalse(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId())); } + @Test + public void testIsOverrideToFullscreenEnabledUnivRes_flagDisabled_returnsFalse() { + mUtils.setFullscreenCompatChange(true); + assertFalse(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId())); + } + @Test public void testIsOverrideToFullscreenEnabled_optionDisabled_returnsFalse() { mUtils.setFullscreenCompatChange(true); @@ -389,7 +425,7 @@ public class UserAspectRatioManagerTest { assertFalse(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId())); } - private void setIsOverrideToFullscreenEnabled(boolean enabled) { + private void setIsOverrideToFullscreenEnabledBecauseCompatChange(boolean enabled) { if (enabled) { mSetFlagsRule.enableFlags(FLAG_USER_MIN_ASPECT_RATIO_APP_DEFAULT); mUtils = new FakeUserAspectRatioManager(mContext, mIPm); @@ -399,6 +435,16 @@ public class UserAspectRatioManagerTest { .thenReturn(enabled); } + private void setIsOverrideToFullscreenEnabledBecauseUniversalResizeable(boolean enabled) { + if (enabled) { + mSetFlagsRule.enableFlags(FLAG_USER_MIN_ASPECT_RATIO_APP_DEFAULT); + mUtils = new FakeUserAspectRatioManager(mContext, mIPm); + } + mUtils.setUniversalResizeable(enabled); + when(mUtils.hasAspectRatioOption(USER_MIN_ASPECT_RATIO_FULLSCREEN, mPackageName)) + .thenReturn(enabled); + } + private void enableAllDefaultAspectRatioOptions() { final int[] aspectRatioOptions = new int[] { USER_MIN_ASPECT_RATIO_UNSET, @@ -457,6 +503,7 @@ public class UserAspectRatioManagerTest { private static class FakeUserAspectRatioManager extends UserAspectRatioManager { private boolean mFullscreenCompatChange = false; + private boolean mIsUniversalResizeable = false; private FakeUserAspectRatioManager(@NonNull Context context, IPackageManager pm) { super(context, pm); @@ -467,8 +514,17 @@ public class UserAspectRatioManagerTest { return mFullscreenCompatChange; } + @Override + boolean isUniversalResizeable(String pkgName, int userId) { + return mIsUniversalResizeable; + } + void setFullscreenCompatChange(boolean enabled) { mFullscreenCompatChange = enabled; } + + void setUniversalResizeable(boolean enabled) { + mIsUniversalResizeable = enabled; + } } }