[1/n] Aspect ratio settings app list refinement
All apps list for work profile currently only shows work apps that are also installed on the normal user. Update filter for list to show all launcher apps for both users in their respective lists. Fixes: 301373413 Test: atest SettingsUnitTests:UserAspectRatioManagerTest Test: atest SettingsSpaUnitTests:UserAspectRatioAppPreferenceTest Change-Id: Ia0bf15340d1b37dcd926d81598d3e94f448a46fc
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settings.applications.appcompat;
|
package com.android.settings.applications.appcompat;
|
||||||
|
|
||||||
|
import static android.os.UserHandle.getUserHandleForUid;
|
||||||
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE;
|
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE;
|
||||||
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE;
|
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE;
|
||||||
|
|
||||||
@@ -26,8 +27,8 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
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.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
@@ -40,7 +41,6 @@ import com.android.settings.Utils;
|
|||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -63,15 +63,12 @@ public class UserAspectRatioManager {
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final IPackageManager mIPm;
|
private final IPackageManager mIPm;
|
||||||
/** Apps that have launcher entry defined in manifest */
|
/** Apps that have launcher entry defined in manifest */
|
||||||
private final List<ResolveInfo> mInfoHasLauncherEntryList;
|
|
||||||
private final Map<Integer, String> mUserAspectRatioMap;
|
private final Map<Integer, String> mUserAspectRatioMap;
|
||||||
private final Map<Integer, CharSequence> mUserAspectRatioA11yMap;
|
private final Map<Integer, CharSequence> mUserAspectRatioA11yMap;
|
||||||
|
|
||||||
public UserAspectRatioManager(@NonNull Context context) {
|
public UserAspectRatioManager(@NonNull Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mIPm = AppGlobals.getPackageManager();
|
mIPm = AppGlobals.getPackageManager();
|
||||||
mInfoHasLauncherEntryList = mContext.getPackageManager().queryIntentActivities(
|
|
||||||
UserAspectRatioManager.LAUNCHER_ENTRY_INTENT, PackageManager.GET_META_DATA);
|
|
||||||
mUserAspectRatioA11yMap = new ArrayMap<>();
|
mUserAspectRatioA11yMap = new ArrayMap<>();
|
||||||
mUserAspectRatioMap = getUserMinAspectRatioMapping();
|
mUserAspectRatioMap = getUserMinAspectRatioMapping();
|
||||||
}
|
}
|
||||||
@@ -159,9 +156,7 @@ public class UserAspectRatioManager {
|
|||||||
Boolean appAllowsUserAspectRatioOverride = readComponentProperty(
|
Boolean appAllowsUserAspectRatioOverride = readComponentProperty(
|
||||||
mContext.getPackageManager(), app.packageName,
|
mContext.getPackageManager(), app.packageName,
|
||||||
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE);
|
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE);
|
||||||
boolean hasLauncherEntry = mInfoHasLauncherEntryList.stream()
|
return !FALSE.equals(appAllowsUserAspectRatioOverride) && hasLauncherEntry(app);
|
||||||
.anyMatch(info -> info.activityInfo.packageName.equals(app.packageName));
|
|
||||||
return !FALSE.equals(appAllowsUserAspectRatioOverride) && hasLauncherEntry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -178,6 +173,15 @@ 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) {
|
||||||
|
return !getLauncherApps().getActivityList(app.packageName, getUserHandleForUid(app.uid))
|
||||||
|
.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean getValueFromDeviceConfig(String name, boolean defaultValue) {
|
private static boolean getValueFromDeviceConfig(String name, boolean defaultValue) {
|
||||||
return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_WINDOW_MANAGER, name, defaultValue);
|
return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_WINDOW_MANAGER, name, defaultValue);
|
||||||
}
|
}
|
||||||
@@ -267,9 +271,4 @@ public class UserAspectRatioManager {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
void addInfoHasLauncherEntry(@NonNull ResolveInfo infoHasLauncherEntry) {
|
|
||||||
mInfoHasLauncherEntryList.add(infoHasLauncherEntry);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,10 +17,10 @@
|
|||||||
package com.android.settings.spa.app.appcompat
|
package com.android.settings.spa.app.appcompat
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.ActivityInfo
|
|
||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
|
import android.content.pm.LauncherActivityInfo
|
||||||
|
import android.content.pm.LauncherApps
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.content.pm.ResolveInfo
|
|
||||||
import android.provider.DeviceConfig.NAMESPACE_WINDOW_MANAGER
|
import android.provider.DeviceConfig.NAMESPACE_WINDOW_MANAGER
|
||||||
import android.view.WindowManager.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
|
import android.view.WindowManager.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
|
||||||
import androidx.compose.runtime.CompositionLocalProvider
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
@@ -46,9 +46,9 @@ import org.junit.Before
|
|||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.ArgumentMatchers.anyString
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.Mockito.any
|
import org.mockito.Mockito.any
|
||||||
import org.mockito.Mockito.anyInt
|
|
||||||
import org.mockito.MockitoSession
|
import org.mockito.MockitoSession
|
||||||
import org.mockito.Spy
|
import org.mockito.Spy
|
||||||
import org.mockito.quality.Strictness
|
import org.mockito.quality.Strictness
|
||||||
@@ -76,6 +76,12 @@ class UserAspectRatioAppPreferenceTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private lateinit var packageManager: PackageManager
|
private lateinit var packageManager: PackageManager
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var launcherApps: LauncherApps
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var launcherActivities: List<LauncherActivityInfo>
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
mockSession = ExtendedMockito.mockitoSession()
|
mockSession = ExtendedMockito.mockitoSession()
|
||||||
@@ -86,6 +92,8 @@ class UserAspectRatioAppPreferenceTest {
|
|||||||
.startMocking()
|
.startMocking()
|
||||||
whenever(context.resources).thenReturn(resources)
|
whenever(context.resources).thenReturn(resources)
|
||||||
whenever(context.packageManager).thenReturn(packageManager)
|
whenever(context.packageManager).thenReturn(packageManager)
|
||||||
|
whenever(context.getSystemService(Context.LAUNCHER_APPS_SERVICE)).thenReturn(launcherApps)
|
||||||
|
whenever(launcherApps.getActivityList(anyString(), any())).thenReturn(launcherActivities)
|
||||||
// True is ignored but need this here or getBoolean will complain null object
|
// True is ignored but need this here or getBoolean will complain null object
|
||||||
mockProperty(PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE, true)
|
mockProperty(PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE, true)
|
||||||
}
|
}
|
||||||
@@ -107,6 +115,8 @@ class UserAspectRatioAppPreferenceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun whenCannotDisplayAspectRatioUi_notDisplayed() {
|
fun whenCannotDisplayAspectRatioUi_notDisplayed() {
|
||||||
|
whenever(launcherActivities.isEmpty()).thenReturn(true)
|
||||||
|
|
||||||
setContent()
|
setContent()
|
||||||
|
|
||||||
composeTestRule.onRoot().assertIsNotDisplayed()
|
composeTestRule.onRoot().assertIsNotDisplayed()
|
||||||
@@ -115,8 +125,7 @@ class UserAspectRatioAppPreferenceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun whenCanDisplayAspectRatioUiAndConfigFalse_notDisplayed() {
|
fun whenCanDisplayAspectRatioUiAndConfigFalse_notDisplayed() {
|
||||||
setConfig(false)
|
setConfig(false)
|
||||||
whenever(packageManager.queryIntentActivities(any(), anyInt()))
|
whenever(launcherActivities.isEmpty()).thenReturn(false)
|
||||||
.thenReturn(listOf(RESOLVE_INFO))
|
|
||||||
|
|
||||||
setContent()
|
setContent()
|
||||||
|
|
||||||
@@ -127,6 +136,8 @@ class UserAspectRatioAppPreferenceTest {
|
|||||||
fun whenCannotDisplayAspectRatioUiAndConfigTrue_notDisplayed() {
|
fun whenCannotDisplayAspectRatioUiAndConfigTrue_notDisplayed() {
|
||||||
setConfig(true)
|
setConfig(true)
|
||||||
|
|
||||||
|
whenever(launcherActivities.isEmpty()).thenReturn(true)
|
||||||
|
|
||||||
setContent()
|
setContent()
|
||||||
|
|
||||||
composeTestRule.onRoot().assertIsNotDisplayed()
|
composeTestRule.onRoot().assertIsNotDisplayed()
|
||||||
@@ -135,9 +146,7 @@ class UserAspectRatioAppPreferenceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun whenCanDisplayAspectRatioUiAndConfigTrue_Displayed() {
|
fun whenCanDisplayAspectRatioUiAndConfigTrue_Displayed() {
|
||||||
setConfig(true)
|
setConfig(true)
|
||||||
whenever(packageManager.queryIntentActivities(any(), anyInt()))
|
whenever(launcherActivities.isEmpty()).thenReturn(false)
|
||||||
.thenReturn(listOf(RESOLVE_INFO))
|
|
||||||
|
|
||||||
setContent()
|
setContent()
|
||||||
|
|
||||||
composeTestRule.onNode(
|
composeTestRule.onNode(
|
||||||
@@ -151,8 +160,7 @@ class UserAspectRatioAppPreferenceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun onClick_startActivity() {
|
fun onClick_startActivity() {
|
||||||
setConfig(true)
|
setConfig(true)
|
||||||
whenever(packageManager.queryIntentActivities(any(), anyInt()))
|
whenever(launcherActivities.isEmpty()).thenReturn(false)
|
||||||
.thenReturn(listOf(RESOLVE_INFO))
|
|
||||||
|
|
||||||
setContent()
|
setContent()
|
||||||
composeTestRule.onRoot().performClick()
|
composeTestRule.onRoot().performClick()
|
||||||
@@ -196,10 +204,5 @@ class UserAspectRatioAppPreferenceTest {
|
|||||||
packageName = PACKAGE_NAME
|
packageName = PACKAGE_NAME
|
||||||
uid = UID
|
uid = UID
|
||||||
}
|
}
|
||||||
private val RESOLVE_INFO = ResolveInfo().apply {
|
|
||||||
activityInfo = ActivityInfo().apply {
|
|
||||||
packageName = PACKAGE_NAME
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -32,15 +32,18 @@ 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.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ActivityInfo;
|
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.LauncherActivityInfo;
|
||||||
|
import android.content.pm.LauncherApps;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
|
|
||||||
@@ -55,6 +58,8 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To run this test: atest SettingsUnitTests:UserAspectRatioManagerTest
|
* To run this test: atest SettingsUnitTests:UserAspectRatioManagerTest
|
||||||
*/
|
*/
|
||||||
@@ -67,14 +72,23 @@ public class UserAspectRatioManagerTest {
|
|||||||
private String mOriginalSettingsFlag;
|
private String mOriginalSettingsFlag;
|
||||||
private String mOriginalFullscreenFlag;
|
private String mOriginalFullscreenFlag;
|
||||||
private String mPackageName = "com.test.mypackage";
|
private String mPackageName = "com.test.mypackage";
|
||||||
|
private LauncherApps mLauncherApps;
|
||||||
|
private List<LauncherActivityInfo> mLauncherActivities;
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||||
mResources = spy(mContext.getResources());
|
mResources = spy(mContext.getResources());
|
||||||
mUtils = new UserAspectRatioManager(mContext);
|
mLauncherApps = mock(LauncherApps.class);
|
||||||
|
mLauncherActivities = mock(List.class);
|
||||||
|
mUtils = new UserAspectRatioManager(mContext) {
|
||||||
|
@Override
|
||||||
|
LauncherApps getLauncherApps() {
|
||||||
|
return mLauncherApps;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
when(mContext.getResources()).thenReturn(mResources);
|
when(mContext.getResources()).thenReturn(mResources);
|
||||||
|
doReturn(mLauncherActivities).when(mLauncherApps).getActivityList(anyString(), any());
|
||||||
|
|
||||||
mOriginalSettingsFlag = DeviceConfig.getProperty(
|
mOriginalSettingsFlag = DeviceConfig.getProperty(
|
||||||
DeviceConfig.NAMESPACE_WINDOW_MANAGER, KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS);
|
DeviceConfig.NAMESPACE_WINDOW_MANAGER, KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS);
|
||||||
@@ -98,13 +112,14 @@ public class UserAspectRatioManagerTest {
|
|||||||
public void testCanDisplayAspectRatioUi() {
|
public void testCanDisplayAspectRatioUi() {
|
||||||
final ApplicationInfo canDisplay = new ApplicationInfo();
|
final ApplicationInfo canDisplay = new ApplicationInfo();
|
||||||
canDisplay.packageName = "com.app.candisplay";
|
canDisplay.packageName = "com.app.candisplay";
|
||||||
addResolveInfoLauncherEntry(canDisplay.packageName);
|
|
||||||
|
|
||||||
|
doReturn(false).when(mLauncherActivities).isEmpty();
|
||||||
assertTrue(mUtils.canDisplayAspectRatioUi(canDisplay));
|
assertTrue(mUtils.canDisplayAspectRatioUi(canDisplay));
|
||||||
|
|
||||||
final ApplicationInfo noLauncherEntry = new ApplicationInfo();
|
final ApplicationInfo noLauncherEntry = new ApplicationInfo();
|
||||||
noLauncherEntry.packageName = "com.app.nolauncherentry";
|
noLauncherEntry.packageName = "com.app.nolauncherentry";
|
||||||
|
|
||||||
|
doReturn(true).when(mLauncherActivities).isEmpty();
|
||||||
assertFalse(mUtils.canDisplayAspectRatioUi(noLauncherEntry));
|
assertFalse(mUtils.canDisplayAspectRatioUi(noLauncherEntry));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,10 +127,10 @@ 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();
|
||||||
|
|
||||||
final ApplicationInfo canDisplay = new ApplicationInfo();
|
final ApplicationInfo canDisplay = new ApplicationInfo();
|
||||||
canDisplay.packageName = mPackageName;
|
canDisplay.packageName = mPackageName;
|
||||||
addResolveInfoLauncherEntry(canDisplay.packageName);
|
|
||||||
|
|
||||||
assertFalse(mUtils.canDisplayAspectRatioUi(canDisplay));
|
assertFalse(mUtils.canDisplayAspectRatioUi(canDisplay));
|
||||||
}
|
}
|
||||||
@@ -124,6 +139,7 @@ public class UserAspectRatioManagerTest {
|
|||||||
public void testCanDisplayAspectRatioUi_noLauncher_propertyTrue_returnFalse()
|
public void testCanDisplayAspectRatioUi_noLauncher_propertyTrue_returnFalse()
|
||||||
throws PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
mockProperty(PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE, true);
|
mockProperty(PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE, true);
|
||||||
|
doReturn(true).when(mLauncherActivities).isEmpty();
|
||||||
|
|
||||||
final ApplicationInfo noLauncherEntry = new ApplicationInfo();
|
final ApplicationInfo noLauncherEntry = new ApplicationInfo();
|
||||||
noLauncherEntry.packageName = mPackageName;
|
noLauncherEntry.packageName = mPackageName;
|
||||||
@@ -267,12 +283,4 @@ public class UserAspectRatioManagerTest {
|
|||||||
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
|
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
|
||||||
KEY_ENABLE_USER_ASPECT_RATIO_FULLSCREEN, enabled, makeDefault);
|
KEY_ENABLE_USER_ASPECT_RATIO_FULLSCREEN, enabled, makeDefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addResolveInfoLauncherEntry(String packageName) {
|
|
||||||
final ResolveInfo resolveInfo = mock(ResolveInfo.class);
|
|
||||||
final ActivityInfo activityInfo = mock(ActivityInfo.class);
|
|
||||||
activityInfo.packageName = packageName;
|
|
||||||
resolveInfo.activityInfo = activityInfo;
|
|
||||||
mUtils.addInfoHasLauncherEntry(resolveInfo);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user