Merge "Enable all aspect ratio options in UserAspectRatioManagerTest" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
5c06348c93
@@ -24,7 +24,6 @@ import static java.lang.Boolean.FALSE;
|
|||||||
|
|
||||||
import android.app.AppGlobals;
|
import android.app.AppGlobals;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.IPackageManager;
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.LauncherApps;
|
import android.content.pm.LauncherApps;
|
||||||
@@ -48,10 +47,6 @@ import java.util.Map;
|
|||||||
* {@link PackageManager.UserMinAspectRatio} set by user
|
* {@link PackageManager.UserMinAspectRatio} set by user
|
||||||
*/
|
*/
|
||||||
public class UserAspectRatioManager {
|
public class UserAspectRatioManager {
|
||||||
private static final Intent LAUNCHER_ENTRY_INTENT =
|
|
||||||
new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);
|
|
||||||
|
|
||||||
// TODO(b/288142656): Enable user aspect ratio settings by default
|
|
||||||
private static final boolean DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_SETTINGS = true;
|
private static final boolean DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_SETTINGS = true;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final String KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS =
|
static final String KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS =
|
||||||
@@ -173,12 +168,9 @@ public class UserAspectRatioManager {
|
|||||||
DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_FULLSCREEN);
|
DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_FULLSCREEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
LauncherApps getLauncherApps() {
|
|
||||||
return mContext.getSystemService(LauncherApps.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean hasLauncherEntry(@NonNull ApplicationInfo app) {
|
private boolean hasLauncherEntry(@NonNull ApplicationInfo app) {
|
||||||
return !getLauncherApps().getActivityList(app.packageName, getUserHandleForUid(app.uid))
|
return !mContext.getSystemService(LauncherApps.class)
|
||||||
|
.getActivityList(app.packageName, getUserHandleForUid(app.uid))
|
||||||
.isEmpty();
|
.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,7 +224,7 @@ public class UserAspectRatioManager {
|
|||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private String getAccessibleOption(String numerator, String denominator) {
|
private String getAccessibleOption(String numerator, String denominator) {
|
||||||
return mContext.getResources().getString(R.string.user_aspect_ratio_option_a11y,
|
return mContext.getString(R.string.user_aspect_ratio_option_a11y,
|
||||||
numerator, denominator);
|
numerator, denominator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,6 +17,9 @@
|
|||||||
package com.android.settings.applications.appcompat;
|
package com.android.settings.applications.appcompat;
|
||||||
|
|
||||||
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_16_9;
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_16_9;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_3_2;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_4_3;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_DISPLAY_SIZE;
|
||||||
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_FULLSCREEN;
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_FULLSCREEN;
|
||||||
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_SPLIT_SCREEN;
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_SPLIT_SCREEN;
|
||||||
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_UNSET;
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_UNSET;
|
||||||
@@ -29,8 +32,10 @@ import static com.android.settings.applications.appcompat.UserAspectRatioManager
|
|||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertThrows;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
@@ -43,10 +48,6 @@ import android.content.pm.LauncherActivityInfo;
|
|||||||
import android.content.pm.LauncherApps;
|
import android.content.pm.LauncherApps;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.platform.test.rule.DeviceTypeRule;
|
|
||||||
import android.platform.test.rule.FoldableOnly;
|
|
||||||
import android.platform.test.rule.LargeScreenOnly;
|
|
||||||
import android.platform.test.rule.TabletOnly;
|
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
@@ -57,9 +58,7 @@ import com.android.settings.testutils.ResourcesUtils;
|
|||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.rules.TestRule;
|
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -68,7 +67,6 @@ import java.util.List;
|
|||||||
* To run this test: atest SettingsUnitTests:UserAspectRatioManagerTest
|
* To run this test: atest SettingsUnitTests:UserAspectRatioManagerTest
|
||||||
*/
|
*/
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
@LargeScreenOnly
|
|
||||||
public class UserAspectRatioManagerTest {
|
public class UserAspectRatioManagerTest {
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -80,23 +78,19 @@ public class UserAspectRatioManagerTest {
|
|||||||
private LauncherApps mLauncherApps;
|
private LauncherApps mLauncherApps;
|
||||||
private List<LauncherActivityInfo> mLauncherActivities;
|
private List<LauncherActivityInfo> mLauncherActivities;
|
||||||
|
|
||||||
@Rule
|
|
||||||
public TestRule mDeviceTypeRule = new DeviceTypeRule();
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||||
mResources = spy(mContext.getResources());
|
mResources = mock(Resources.class);
|
||||||
mLauncherApps = mock(LauncherApps.class);
|
mLauncherApps = mock(LauncherApps.class);
|
||||||
mLauncherActivities = mock(List.class);
|
mLauncherActivities = mock(List.class);
|
||||||
mUtils = new UserAspectRatioManager(mContext) {
|
|
||||||
@Override
|
|
||||||
LauncherApps getLauncherApps() {
|
|
||||||
return mLauncherApps;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
when(mContext.getResources()).thenReturn(mResources);
|
when(mContext.getResources()).thenReturn(mResources);
|
||||||
|
when(mContext.getSystemService(LauncherApps.class)).thenReturn(mLauncherApps);
|
||||||
|
enableAllDefaultAspectRatioOptions();
|
||||||
|
|
||||||
|
mUtils = new UserAspectRatioManager(mContext);
|
||||||
|
|
||||||
doReturn(mLauncherActivities).when(mLauncherApps).getActivityList(anyString(), any());
|
doReturn(mLauncherActivities).when(mLauncherApps).getActivityList(anyString(), any());
|
||||||
|
|
||||||
mOriginalSettingsFlag = DeviceConfig.getProperty(
|
mOriginalSettingsFlag = DeviceConfig.getProperty(
|
||||||
@@ -136,7 +130,7 @@ public class UserAspectRatioManagerTest {
|
|||||||
public void testCanDisplayAspectRatioUi_hasLauncher_propertyFalse_returnFalse()
|
public void testCanDisplayAspectRatioUi_hasLauncher_propertyFalse_returnFalse()
|
||||||
throws PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
mockProperty(PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE, false);
|
mockProperty(PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE, false);
|
||||||
doReturn(true).when(mLauncherActivities).isEmpty();
|
doReturn(false).when(mLauncherActivities).isEmpty();
|
||||||
|
|
||||||
final ApplicationInfo canDisplay = new ApplicationInfo();
|
final ApplicationInfo canDisplay = new ApplicationInfo();
|
||||||
canDisplay.packageName = mPackageName;
|
canDisplay.packageName = mPackageName;
|
||||||
@@ -228,10 +222,10 @@ public class UserAspectRatioManagerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@FoldableOnly
|
public void testGetUserMinAspectRatioEntry() {
|
||||||
public void testGetUserMinAspectRatioEntry_Foldable() {
|
final Context context = ApplicationProvider.getApplicationContext();
|
||||||
// R.string.user_aspect_ratio_app_default
|
// R.string.user_aspect_ratio_app_default
|
||||||
final String appDefault = ResourcesUtils.getResourcesString(mContext,
|
final String appDefault = ResourcesUtils.getResourcesString(context,
|
||||||
"user_aspect_ratio_app_default");
|
"user_aspect_ratio_app_default");
|
||||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName))
|
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName))
|
||||||
.isEqualTo(appDefault);
|
.isEqualTo(appDefault);
|
||||||
@@ -240,33 +234,24 @@ public class UserAspectRatioManagerTest {
|
|||||||
.isEqualTo(appDefault);
|
.isEqualTo(appDefault);
|
||||||
// R.string.user_aspect_ratio_half_screen
|
// R.string.user_aspect_ratio_half_screen
|
||||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_SPLIT_SCREEN,
|
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_SPLIT_SCREEN,
|
||||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(mContext,
|
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(context,
|
||||||
"user_aspect_ratio_half_screen"));
|
"user_aspect_ratio_half_screen"));
|
||||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN,
|
// R.string.user_aspect_ratio_display_size
|
||||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(mContext,
|
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_DISPLAY_SIZE,
|
||||||
"user_aspect_ratio_fullscreen"));
|
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(context,
|
||||||
}
|
"user_aspect_ratio_device_size"));
|
||||||
|
// R.string.user_aspect_ratio_16_9
|
||||||
@Test
|
|
||||||
@TabletOnly
|
|
||||||
public void testGetUserMinAspectRatioEntry_Tablet() {
|
|
||||||
// R.string.user_aspect_ratio_app_default
|
|
||||||
final String appDefault = ResourcesUtils.getResourcesString(mContext,
|
|
||||||
"user_aspect_ratio_app_default");
|
|
||||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName))
|
|
||||||
.isEqualTo(appDefault);
|
|
||||||
// should always return default if value does not correspond to anything
|
|
||||||
assertThat(mUtils.getUserMinAspectRatioEntry(-1, mPackageName))
|
|
||||||
.isEqualTo(appDefault);
|
|
||||||
// R.string.user_aspect_ratio_half_screen
|
|
||||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_SPLIT_SCREEN,
|
|
||||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(mContext,
|
|
||||||
"user_aspect_ratio_half_screen"));
|
|
||||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_16_9, mPackageName))
|
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_16_9, mPackageName))
|
||||||
.isEqualTo(ResourcesUtils.getResourcesString(mContext, "user_aspect_ratio_16_9"));
|
.isEqualTo(ResourcesUtils.getResourcesString(context, "user_aspect_ratio_16_9"));
|
||||||
|
// R.string.user_aspect_ratio_4_3
|
||||||
|
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_4_3, mPackageName))
|
||||||
|
.isEqualTo(ResourcesUtils.getResourcesString(context, "user_aspect_ratio_4_3"));
|
||||||
|
// R.string.user_aspect_ratio_3_2
|
||||||
|
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_3_2, mPackageName))
|
||||||
|
.isEqualTo(ResourcesUtils.getResourcesString(context, "user_aspect_ratio_3_2"));
|
||||||
// R.string.user_aspect_ratio_fullscreen
|
// R.string.user_aspect_ratio_fullscreen
|
||||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN,
|
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN,
|
||||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(mContext,
|
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(context,
|
||||||
"user_aspect_ratio_fullscreen"));
|
"user_aspect_ratio_fullscreen"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,10 +259,71 @@ public class UserAspectRatioManagerTest {
|
|||||||
public void testGetUserMinAspectRatioEntry_fullscreenDisabled_shouldReturnDefault() {
|
public void testGetUserMinAspectRatioEntry_fullscreenDisabled_shouldReturnDefault() {
|
||||||
setAspectRatioFullscreenBuildTimeFlagEnabled(false);
|
setAspectRatioFullscreenBuildTimeFlagEnabled(false);
|
||||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN,
|
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN,
|
||||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(mContext,
|
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(
|
||||||
|
ApplicationProvider.getApplicationContext(),
|
||||||
"user_aspect_ratio_app_default"));
|
"user_aspect_ratio_app_default"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetUserMinAspectRatioEntry_nonDefaultString_shouldReturnNewString() {
|
||||||
|
final String newOptionName = "new_option_name";
|
||||||
|
when(mResources.getIntArray(anyInt())).thenReturn(new int[] {USER_MIN_ASPECT_RATIO_UNSET});
|
||||||
|
when(mResources.getStringArray(anyInt())).thenReturn(new String[] {newOptionName});
|
||||||
|
|
||||||
|
mUtils = new UserAspectRatioManager(mContext);
|
||||||
|
|
||||||
|
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName))
|
||||||
|
.isEqualTo(newOptionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetUserMinAspectRatioMapping_noAppDefault_shouldThrowException() {
|
||||||
|
when(mResources.getIntArray(anyInt())).thenReturn(new int[] {USER_MIN_ASPECT_RATIO_4_3});
|
||||||
|
when(mResources.getStringArray(anyInt())).thenReturn(new String[] {"4:3"});
|
||||||
|
|
||||||
|
assertThrows(RuntimeException.class, () -> new UserAspectRatioManager(mContext));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetUserMinAspectRatioMapping_configLengthMismatch_shouldThrowException() {
|
||||||
|
when(mResources.getIntArray(anyInt())).thenReturn(new int[] {
|
||||||
|
USER_MIN_ASPECT_RATIO_UNSET,
|
||||||
|
USER_MIN_ASPECT_RATIO_4_3});
|
||||||
|
when(mResources.getStringArray(anyInt())).thenReturn(new String[] {"4:3"});
|
||||||
|
|
||||||
|
assertThrows(RuntimeException.class, () -> new UserAspectRatioManager(mContext));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableAllDefaultAspectRatioOptions() {
|
||||||
|
final int[] aspectRatioOptions = new int[] {
|
||||||
|
USER_MIN_ASPECT_RATIO_UNSET,
|
||||||
|
USER_MIN_ASPECT_RATIO_SPLIT_SCREEN,
|
||||||
|
USER_MIN_ASPECT_RATIO_DISPLAY_SIZE,
|
||||||
|
USER_MIN_ASPECT_RATIO_4_3,
|
||||||
|
USER_MIN_ASPECT_RATIO_16_9,
|
||||||
|
USER_MIN_ASPECT_RATIO_3_2,
|
||||||
|
USER_MIN_ASPECT_RATIO_FULLSCREEN};
|
||||||
|
when(mResources.getIntArray(anyInt())).thenReturn(aspectRatioOptions);
|
||||||
|
// String array config overlay with @null values so default strings should be used
|
||||||
|
when(mResources.getStringArray(anyInt())).thenReturn(new String[aspectRatioOptions.length]);
|
||||||
|
|
||||||
|
final Context context = ApplicationProvider.getApplicationContext();
|
||||||
|
mockString(context, "user_aspect_ratio_app_default");
|
||||||
|
mockString(context, "user_aspect_ratio_half_screen");
|
||||||
|
mockString(context, "user_aspect_ratio_device_size");
|
||||||
|
mockString(context, "user_aspect_ratio_4_3");
|
||||||
|
mockString(context, "user_aspect_ratio_16_9");
|
||||||
|
mockString(context, "user_aspect_ratio_3_2");
|
||||||
|
mockString(context, "user_aspect_ratio_fullscreen");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void mockString(Context context, String stringResName) {
|
||||||
|
final int resId = ResourcesUtils.getResourcesId(context, "string", stringResName);
|
||||||
|
final String string = ResourcesUtils.getResourcesString(context, stringResName);
|
||||||
|
when(mContext.getString(resId)).thenReturn(string);
|
||||||
|
}
|
||||||
|
|
||||||
private void mockProperty(String propertyName, boolean value)
|
private void mockProperty(String propertyName, boolean value)
|
||||||
throws PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
PackageManager.Property prop = new PackageManager.Property(
|
PackageManager.Property prop = new PackageManager.Property(
|
||||||
|
Reference in New Issue
Block a user