Enable all aspect ratio options in UserAspectRatioManagerTest
testGetUserMinAspectRatioEntry fails for foldables and tablets due to some aspect ratio options being disabled. Mock Resources to return all default aspect ratio options and strings to make test device agnostic. Clean up unused variables and remove getLauncherApps in UserAspectRatioManager. Add more tests in UserAspectRatioManagerTest. Fix: 304685321 Test: atest SettingsUnitTests:UserAspectRatioManagerTest Change-Id: I6f4bbd60863be0c66139955507157619a5fc6662
This commit is contained in:
@@ -24,7 +24,6 @@ import static java.lang.Boolean.FALSE;
|
||||
|
||||
import android.app.AppGlobals;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.LauncherApps;
|
||||
@@ -48,10 +47,6 @@ import java.util.Map;
|
||||
* {@link PackageManager.UserMinAspectRatio} set by user
|
||||
*/
|
||||
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;
|
||||
@VisibleForTesting
|
||||
static final String KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS =
|
||||
@@ -173,12 +168,9 @@ public class UserAspectRatioManager {
|
||||
DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_FULLSCREEN);
|
||||
}
|
||||
|
||||
LauncherApps getLauncherApps() {
|
||||
return mContext.getSystemService(LauncherApps.class);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -232,7 +224,7 @@ public class UserAspectRatioManager {
|
||||
|
||||
@NonNull
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
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_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_SPLIT_SCREEN;
|
||||
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 org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@@ -43,10 +48,6 @@ import android.content.pm.LauncherActivityInfo;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.content.pm.PackageManager;
|
||||
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 androidx.test.core.app.ApplicationProvider;
|
||||
@@ -57,9 +58,7 @@ import com.android.settings.testutils.ResourcesUtils;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TestRule;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import java.util.List;
|
||||
@@ -68,7 +67,6 @@ import java.util.List;
|
||||
* To run this test: atest SettingsUnitTests:UserAspectRatioManagerTest
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@LargeScreenOnly
|
||||
public class UserAspectRatioManagerTest {
|
||||
|
||||
private Context mContext;
|
||||
@@ -80,23 +78,19 @@ public class UserAspectRatioManagerTest {
|
||||
private LauncherApps mLauncherApps;
|
||||
private List<LauncherActivityInfo> mLauncherActivities;
|
||||
|
||||
@Rule
|
||||
public TestRule mDeviceTypeRule = new DeviceTypeRule();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||
mResources = spy(mContext.getResources());
|
||||
mResources = mock(Resources.class);
|
||||
mLauncherApps = mock(LauncherApps.class);
|
||||
mLauncherActivities = mock(List.class);
|
||||
mUtils = new UserAspectRatioManager(mContext) {
|
||||
@Override
|
||||
LauncherApps getLauncherApps() {
|
||||
return mLauncherApps;
|
||||
}
|
||||
};
|
||||
|
||||
when(mContext.getResources()).thenReturn(mResources);
|
||||
when(mContext.getSystemService(LauncherApps.class)).thenReturn(mLauncherApps);
|
||||
enableAllDefaultAspectRatioOptions();
|
||||
|
||||
mUtils = new UserAspectRatioManager(mContext);
|
||||
|
||||
doReturn(mLauncherActivities).when(mLauncherApps).getActivityList(anyString(), any());
|
||||
|
||||
mOriginalSettingsFlag = DeviceConfig.getProperty(
|
||||
@@ -136,7 +130,7 @@ public class UserAspectRatioManagerTest {
|
||||
public void testCanDisplayAspectRatioUi_hasLauncher_propertyFalse_returnFalse()
|
||||
throws PackageManager.NameNotFoundException {
|
||||
mockProperty(PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE, false);
|
||||
doReturn(true).when(mLauncherActivities).isEmpty();
|
||||
doReturn(false).when(mLauncherActivities).isEmpty();
|
||||
|
||||
final ApplicationInfo canDisplay = new ApplicationInfo();
|
||||
canDisplay.packageName = mPackageName;
|
||||
@@ -228,10 +222,10 @@ public class UserAspectRatioManagerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@FoldableOnly
|
||||
public void testGetUserMinAspectRatioEntry_Foldable() {
|
||||
public void testGetUserMinAspectRatioEntry() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
// R.string.user_aspect_ratio_app_default
|
||||
final String appDefault = ResourcesUtils.getResourcesString(mContext,
|
||||
final String appDefault = ResourcesUtils.getResourcesString(context,
|
||||
"user_aspect_ratio_app_default");
|
||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName))
|
||||
.isEqualTo(appDefault);
|
||||
@@ -240,33 +234,24 @@ public class UserAspectRatioManagerTest {
|
||||
.isEqualTo(appDefault);
|
||||
// R.string.user_aspect_ratio_half_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"));
|
||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN,
|
||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(mContext,
|
||||
"user_aspect_ratio_fullscreen"));
|
||||
}
|
||||
|
||||
@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"));
|
||||
// R.string.user_aspect_ratio_display_size
|
||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_DISPLAY_SIZE,
|
||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(context,
|
||||
"user_aspect_ratio_device_size"));
|
||||
// R.string.user_aspect_ratio_16_9
|
||||
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
|
||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN,
|
||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(mContext,
|
||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(context,
|
||||
"user_aspect_ratio_fullscreen"));
|
||||
}
|
||||
|
||||
@@ -274,10 +259,71 @@ public class UserAspectRatioManagerTest {
|
||||
public void testGetUserMinAspectRatioEntry_fullscreenDisabled_shouldReturnDefault() {
|
||||
setAspectRatioFullscreenBuildTimeFlagEnabled(false);
|
||||
assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN,
|
||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(mContext,
|
||||
mPackageName)).isEqualTo(ResourcesUtils.getResourcesString(
|
||||
ApplicationProvider.getApplicationContext(),
|
||||
"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)
|
||||
throws PackageManager.NameNotFoundException {
|
||||
PackageManager.Property prop = new PackageManager.Property(
|
||||
|
||||
Reference in New Issue
Block a user