Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6d05839 authored by Nishant Singh's avatar Nishant Singh Committed by Automerger Merge Worker
Browse files

Merge "Replace PackageManagerInternal with PackageManager." into tm-dev am:...

Merge "Replace PackageManagerInternal with PackageManager." into tm-dev am: 0920a8d7 am: 5d28d283

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17536788



Change-Id: Icfcc5d22e6f82ad9cca2c15f7a85f6258f3a9cf9
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 0b40de46 5d28d283
Loading
Loading
Loading
Loading
+7 −9
Original line number Original line Diff line number Diff line
@@ -30,8 +30,6 @@ import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.os.Binder;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.LocaleList;
import android.os.LocaleList;
import android.os.RemoteException;
import android.os.RemoteException;
@@ -78,7 +76,7 @@ class LocaleManagerBackupHelper {
    private static final Duration STAGE_DATA_RETENTION_PERIOD = Duration.ofDays(3);
    private static final Duration STAGE_DATA_RETENTION_PERIOD = Duration.ofDays(3);


    private final LocaleManagerService mLocaleManagerService;
    private final LocaleManagerService mLocaleManagerService;
    private final PackageManagerInternal mPackageManagerInternal;
    private final PackageManager mPackageManager;
    private final Clock mClock;
    private final Clock mClock;
    private final Context mContext;
    private final Context mContext;
    private final Object mStagedDataLock = new Object();
    private final Object mStagedDataLock = new Object();
@@ -90,18 +88,18 @@ class LocaleManagerBackupHelper {
    private final BroadcastReceiver mUserMonitor;
    private final BroadcastReceiver mUserMonitor;


    LocaleManagerBackupHelper(LocaleManagerService localeManagerService,
    LocaleManagerBackupHelper(LocaleManagerService localeManagerService,
            PackageManagerInternal pmInternal, HandlerThread broadcastHandlerThread) {
            PackageManager packageManager, HandlerThread broadcastHandlerThread) {
        this(localeManagerService.mContext, localeManagerService, pmInternal, Clock.systemUTC(),
        this(localeManagerService.mContext, localeManagerService, packageManager, Clock.systemUTC(),
                new SparseArray<>(), broadcastHandlerThread);
                new SparseArray<>(), broadcastHandlerThread);
    }
    }


    @VisibleForTesting LocaleManagerBackupHelper(Context context,
    @VisibleForTesting LocaleManagerBackupHelper(Context context,
            LocaleManagerService localeManagerService,
            LocaleManagerService localeManagerService,
            PackageManagerInternal pmInternal, Clock clock, SparseArray<StagedData> stagedData,
            PackageManager packageManager, Clock clock, SparseArray<StagedData> stagedData,
            HandlerThread broadcastHandlerThread) {
            HandlerThread broadcastHandlerThread) {
        mContext = context;
        mContext = context;
        mLocaleManagerService = localeManagerService;
        mLocaleManagerService = localeManagerService;
        mPackageManagerInternal = pmInternal;
        mPackageManager = packageManager;
        mClock = clock;
        mClock = clock;
        mStagedData = stagedData;
        mStagedData = stagedData;


@@ -130,8 +128,8 @@ class LocaleManagerBackupHelper {
        }
        }


        HashMap<String, String> pkgStates = new HashMap<>();
        HashMap<String, String> pkgStates = new HashMap<>();
        for (ApplicationInfo appInfo : mPackageManagerInternal.getInstalledApplications(/*flags*/0,
        for (ApplicationInfo appInfo : mPackageManager.getInstalledApplicationsAsUser(
                userId, Binder.getCallingUid())) {
                PackageManager.ApplicationInfoFlags.of(0), userId)) {
            try {
            try {
                LocaleList appLocales = mLocaleManagerService.getApplicationLocales(
                LocaleList appLocales = mLocaleManagerService.getApplicationLocales(
                        appInfo.packageName,
                        appInfo.packageName,
+12 −8
Original line number Original line Diff line number Diff line
@@ -28,7 +28,7 @@ import android.app.ILocaleManager;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageManager.PackageInfoFlags;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.os.Binder;
import android.os.Binder;
import android.os.HandlerThread;
import android.os.HandlerThread;
@@ -60,7 +60,7 @@ public class LocaleManagerService extends SystemService {
    private final LocaleManagerService.LocaleManagerBinderService mBinderService;
    private final LocaleManagerService.LocaleManagerBinderService mBinderService;
    private ActivityTaskManagerInternal mActivityTaskManagerInternal;
    private ActivityTaskManagerInternal mActivityTaskManagerInternal;
    private ActivityManagerInternal mActivityManagerInternal;
    private ActivityManagerInternal mActivityManagerInternal;
    private PackageManagerInternal mPackageManagerInternal;
    private PackageManager mPackageManager;


    private LocaleManagerBackupHelper mBackupHelper;
    private LocaleManagerBackupHelper mBackupHelper;


@@ -74,7 +74,7 @@ public class LocaleManagerService extends SystemService {
        mBinderService = new LocaleManagerBinderService();
        mBinderService = new LocaleManagerBinderService();
        mActivityTaskManagerInternal = LocalServices.getService(ActivityTaskManagerInternal.class);
        mActivityTaskManagerInternal = LocalServices.getService(ActivityTaskManagerInternal.class);
        mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class);
        mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class);
        mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class);
        mPackageManager = mContext.getPackageManager();


        HandlerThread broadcastHandlerThread = new HandlerThread(TAG,
        HandlerThread broadcastHandlerThread = new HandlerThread(TAG,
                Process.THREAD_PRIORITY_BACKGROUND);
                Process.THREAD_PRIORITY_BACKGROUND);
@@ -90,7 +90,7 @@ public class LocaleManagerService extends SystemService {
        });
        });


        mBackupHelper = new LocaleManagerBackupHelper(this,
        mBackupHelper = new LocaleManagerBackupHelper(this,
                mPackageManagerInternal, broadcastHandlerThread);
                mPackageManager, broadcastHandlerThread);


        mPackageMonitor = new LocaleManagerServicePackageMonitor(mBackupHelper,
        mPackageMonitor = new LocaleManagerServicePackageMonitor(mBackupHelper,
                systemAppUpdateTracker);
                systemAppUpdateTracker);
@@ -102,7 +102,7 @@ public class LocaleManagerService extends SystemService {
    @VisibleForTesting
    @VisibleForTesting
    LocaleManagerService(Context context, ActivityTaskManagerInternal activityTaskManagerInternal,
    LocaleManagerService(Context context, ActivityTaskManagerInternal activityTaskManagerInternal,
            ActivityManagerInternal activityManagerInternal,
            ActivityManagerInternal activityManagerInternal,
            PackageManagerInternal packageManagerInternal,
            PackageManager packageManager,
            LocaleManagerBackupHelper localeManagerBackupHelper,
            LocaleManagerBackupHelper localeManagerBackupHelper,
            PackageMonitor packageMonitor) {
            PackageMonitor packageMonitor) {
        super(context);
        super(context);
@@ -110,7 +110,7 @@ public class LocaleManagerService extends SystemService {
        mBinderService = new LocaleManagerBinderService();
        mBinderService = new LocaleManagerBinderService();
        mActivityTaskManagerInternal = activityTaskManagerInternal;
        mActivityTaskManagerInternal = activityTaskManagerInternal;
        mActivityManagerInternal = activityManagerInternal;
        mActivityManagerInternal = activityManagerInternal;
        mPackageManagerInternal = packageManagerInternal;
        mPackageManager = packageManager;
        mBackupHelper = localeManagerBackupHelper;
        mBackupHelper = localeManagerBackupHelper;
        mPackageMonitor = packageMonitor;
        mPackageMonitor = packageMonitor;
    }
    }
@@ -419,8 +419,12 @@ public class LocaleManagerService extends SystemService {
    }
    }


    private int getPackageUid(String appPackageName, int userId) {
    private int getPackageUid(String appPackageName, int userId) {
        return mPackageManagerInternal
        try {
                .getPackageUid(appPackageName, /* flags */ 0, userId);
            return mPackageManager
                    .getPackageUidAsUser(appPackageName, PackageInfoFlags.of(0), userId);
        } catch (PackageManager.NameNotFoundException e) {
            return Process.INVALID_UID;
        }
    }
    }


    @Nullable
    @Nullable
+13 −18
Original line number Original line Diff line number Diff line
@@ -22,7 +22,6 @@ import static junit.framework.Assert.assertNull;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doNothing;
@@ -39,7 +38,6 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.os.Binder;
import android.os.Binder;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.LocaleList;
import android.os.LocaleList;
@@ -102,8 +100,6 @@ public class LocaleManagerBackupRestoreTest {
    @Mock
    @Mock
    private Context mMockContext;
    private Context mMockContext;
    @Mock
    @Mock
    private PackageManagerInternal mMockPackageManagerInternal;
    @Mock
    private PackageManager mMockPackageManager;
    private PackageManager mMockPackageManager;
    @Mock
    @Mock
    private LocaleManagerService mMockLocaleManagerService;
    private LocaleManagerService mMockLocaleManagerService;
@@ -129,7 +125,6 @@ public class LocaleManagerBackupRestoreTest {
    @Before
    @Before
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        mMockContext = mock(Context.class);
        mMockContext = mock(Context.class);
        mMockPackageManagerInternal = mock(PackageManagerInternal.class);
        mMockPackageManager = mock(PackageManager.class);
        mMockPackageManager = mock(PackageManager.class);
        mMockLocaleManagerService = mock(LocaleManagerService.class);
        mMockLocaleManagerService = mock(LocaleManagerService.class);
        SystemAppUpdateTracker systemAppUpdateTracker = mock(SystemAppUpdateTracker.class);
        SystemAppUpdateTracker systemAppUpdateTracker = mock(SystemAppUpdateTracker.class);
@@ -141,7 +136,7 @@ public class LocaleManagerBackupRestoreTest {
        broadcastHandlerThread.start();
        broadcastHandlerThread.start();


        mBackupHelper = spy(new ShadowLocaleManagerBackupHelper(mMockContext,
        mBackupHelper = spy(new ShadowLocaleManagerBackupHelper(mMockContext,
                mMockLocaleManagerService, mMockPackageManagerInternal, mClock, STAGE_DATA,
                mMockLocaleManagerService, mMockPackageManager, mClock, STAGE_DATA,
                broadcastHandlerThread));
                broadcastHandlerThread));
        doNothing().when(mBackupHelper).notifyBackupManager();
        doNothing().when(mBackupHelper).notifyBackupManager();


@@ -158,8 +153,8 @@ public class LocaleManagerBackupRestoreTest {


    @Test
    @Test
    public void testBackupPayload_noAppsInstalled_returnsNull() throws Exception {
    public void testBackupPayload_noAppsInstalled_returnsNull() throws Exception {
        doReturn(List.of()).when(mMockPackageManagerInternal)
        doReturn(List.of()).when(mMockPackageManager)
                .getInstalledApplications(anyLong(), anyInt(), anyInt());
                .getInstalledApplicationsAsUser(any(), anyInt());


        assertNull(mBackupHelper.getBackupPayload(DEFAULT_USER_ID));
        assertNull(mBackupHelper.getBackupPayload(DEFAULT_USER_ID));
    }
    }
@@ -198,8 +193,8 @@ public class LocaleManagerBackupRestoreTest {
        ApplicationInfo anotherAppInfo = new ApplicationInfo();
        ApplicationInfo anotherAppInfo = new ApplicationInfo();
        defaultAppInfo.packageName = DEFAULT_PACKAGE_NAME;
        defaultAppInfo.packageName = DEFAULT_PACKAGE_NAME;
        anotherAppInfo.packageName = "com.android.anotherapp";
        anotherAppInfo.packageName = "com.android.anotherapp";
        doReturn(List.of(defaultAppInfo, anotherAppInfo)).when(mMockPackageManagerInternal)
        doReturn(List.of(defaultAppInfo, anotherAppInfo)).when(mMockPackageManager)
                .getInstalledApplications(anyLong(), anyInt(), anyInt());
                .getInstalledApplicationsAsUser(any(), anyInt());


        setUpLocalesForPackage(DEFAULT_PACKAGE_NAME, DEFAULT_LOCALES);
        setUpLocalesForPackage(DEFAULT_PACKAGE_NAME, DEFAULT_LOCALES);
        // Exception when getting locales for anotherApp.
        // Exception when getting locales for anotherApp.
@@ -447,8 +442,8 @@ public class LocaleManagerBackupRestoreTest {
        // Retention period has not elapsed.
        // Retention period has not elapsed.
        setCurrentTimeMillis(
        setCurrentTimeMillis(
                DEFAULT_CREATION_TIME_MILLIS + RETENTION_PERIOD.minusHours(1).toMillis());
                DEFAULT_CREATION_TIME_MILLIS + RETENTION_PERIOD.minusHours(1).toMillis());
        doReturn(List.of()).when(mMockPackageManagerInternal)
        doReturn(List.of()).when(mMockPackageManager)
                .getInstalledApplications(anyLong(), anyInt(), anyInt());
                .getInstalledApplicationsAsUser(any(), anyInt());
        assertNull(mBackupHelper.getBackupPayload(DEFAULT_USER_ID));
        assertNull(mBackupHelper.getBackupPayload(DEFAULT_USER_ID));


        checkStageDataExists(DEFAULT_USER_ID);
        checkStageDataExists(DEFAULT_USER_ID);
@@ -456,8 +451,8 @@ public class LocaleManagerBackupRestoreTest {
        // Exactly RETENTION_PERIOD amount of time has passed so stage data should still not be
        // Exactly RETENTION_PERIOD amount of time has passed so stage data should still not be
        // removed.
        // removed.
        setCurrentTimeMillis(DEFAULT_CREATION_TIME_MILLIS + RETENTION_PERIOD.toMillis());
        setCurrentTimeMillis(DEFAULT_CREATION_TIME_MILLIS + RETENTION_PERIOD.toMillis());
        doReturn(List.of()).when(mMockPackageManagerInternal)
        doReturn(List.of()).when(mMockPackageManager)
                .getInstalledApplications(anyLong(), anyInt(), anyInt());
                .getInstalledApplicationsAsUser(any(), anyInt());
        assertNull(mBackupHelper.getBackupPayload(DEFAULT_USER_ID));
        assertNull(mBackupHelper.getBackupPayload(DEFAULT_USER_ID));


        checkStageDataExists(DEFAULT_USER_ID);
        checkStageDataExists(DEFAULT_USER_ID);
@@ -465,8 +460,8 @@ public class LocaleManagerBackupRestoreTest {
        // Retention period has now expired, stage data should be deleted.
        // Retention period has now expired, stage data should be deleted.
        setCurrentTimeMillis(
        setCurrentTimeMillis(
                DEFAULT_CREATION_TIME_MILLIS + RETENTION_PERIOD.plusSeconds(1).toMillis());
                DEFAULT_CREATION_TIME_MILLIS + RETENTION_PERIOD.plusSeconds(1).toMillis());
        doReturn(List.of()).when(mMockPackageManagerInternal)
        doReturn(List.of()).when(mMockPackageManager)
                .getInstalledApplications(anyLong(), anyInt(), anyInt());
                .getInstalledApplicationsAsUser(any(), anyInt());
        assertNull(mBackupHelper.getBackupPayload(DEFAULT_USER_ID));
        assertNull(mBackupHelper.getBackupPayload(DEFAULT_USER_ID));


        checkStageDataDoesNotExist(DEFAULT_USER_ID);
        checkStageDataDoesNotExist(DEFAULT_USER_ID);
@@ -577,8 +572,8 @@ public class LocaleManagerBackupRestoreTest {
    private void setUpDummyAppForPackageManager(String packageName) {
    private void setUpDummyAppForPackageManager(String packageName) {
        ApplicationInfo dummyApp = new ApplicationInfo();
        ApplicationInfo dummyApp = new ApplicationInfo();
        dummyApp.packageName = packageName;
        dummyApp.packageName = packageName;
        doReturn(List.of(dummyApp)).when(mMockPackageManagerInternal)
        doReturn(List.of(dummyApp)).when(mMockPackageManager)
                .getInstalledApplications(anyLong(), anyInt(), anyInt());
                .getInstalledApplicationsAsUser(any(), anyInt());
    }
    }


    /**
    /**
+24 −27
Original line number Original line Diff line number Diff line
@@ -23,7 +23,6 @@ import static junit.framework.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doNothing;
@@ -40,7 +39,6 @@ import android.content.Context;
import android.content.pm.InstallSourceInfo;
import android.content.pm.InstallSourceInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.os.Binder;
import android.os.Binder;
import android.os.LocaleList;
import android.os.LocaleList;


@@ -80,7 +78,7 @@ public class LocaleManagerServiceTest {
    @Mock
    @Mock
    private Context mMockContext;
    private Context mMockContext;
    @Mock
    @Mock
    private PackageManagerInternal mMockPackageManagerInternal;
    private PackageManager mMockPackageManager;
    @Mock
    @Mock
    private FakePackageConfigurationUpdater mFakePackageConfigurationUpdater;
    private FakePackageConfigurationUpdater mFakePackageConfigurationUpdater;
    @Mock
    @Mock
@@ -95,14 +93,13 @@ public class LocaleManagerServiceTest {
        mMockContext = mock(Context.class);
        mMockContext = mock(Context.class);
        mMockActivityTaskManager = mock(ActivityTaskManagerInternal.class);
        mMockActivityTaskManager = mock(ActivityTaskManagerInternal.class);
        mMockActivityManager = mock(ActivityManagerInternal.class);
        mMockActivityManager = mock(ActivityManagerInternal.class);
        mMockPackageManagerInternal = mock(PackageManagerInternal.class);
        mMockPackageManager = mock(PackageManager.class);
        mMockPackageMonitor = mock(PackageMonitor.class);
        mMockPackageMonitor = mock(PackageMonitor.class);


        // For unit tests, set the default installer info
        // For unit tests, set the default installer info
        PackageManager mockPackageManager = mock(PackageManager.class);
        doReturn(DEFAULT_INSTALL_SOURCE_INFO).when(mMockPackageManager)
        doReturn(DEFAULT_INSTALL_SOURCE_INFO).when(mockPackageManager)
                .getInstallSourceInfo(anyString());
                .getInstallSourceInfo(anyString());
        doReturn(mockPackageManager).when(mMockContext).getPackageManager();
        doReturn(mMockPackageManager).when(mMockContext).getPackageManager();


        mFakePackageConfigurationUpdater = new FakePackageConfigurationUpdater();
        mFakePackageConfigurationUpdater = new FakePackageConfigurationUpdater();
        doReturn(mFakePackageConfigurationUpdater)
        doReturn(mFakePackageConfigurationUpdater)
@@ -117,14 +114,14 @@ public class LocaleManagerServiceTest {


        mMockBackupHelper = mock(ShadowLocaleManagerBackupHelper.class);
        mMockBackupHelper = mock(ShadowLocaleManagerBackupHelper.class);
        mLocaleManagerService = new LocaleManagerService(mMockContext, mMockActivityTaskManager,
        mLocaleManagerService = new LocaleManagerService(mMockContext, mMockActivityTaskManager,
                mMockActivityManager, mMockPackageManagerInternal,
                mMockActivityManager, mMockPackageManager,
                mMockBackupHelper, mMockPackageMonitor);
                mMockBackupHelper, mMockPackageMonitor);
    }
    }


    @Test(expected = SecurityException.class)
    @Test(expected = SecurityException.class)
    public void testSetApplicationLocales_arbitraryAppWithoutPermissions_fails() throws Exception {
    public void testSetApplicationLocales_arbitraryAppWithoutPermissions_fails() throws Exception {
        doReturn(DEFAULT_UID)
        doReturn(DEFAULT_UID)
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyLong(), anyInt());
                .when(mMockPackageManager).getPackageUidAsUser(anyString(), any(), anyInt());
        setUpFailingPermissionCheckFor(Manifest.permission.CHANGE_CONFIGURATION);
        setUpFailingPermissionCheckFor(Manifest.permission.CHANGE_CONFIGURATION);


        try {
        try {
@@ -170,7 +167,7 @@ public class LocaleManagerServiceTest {
    @Test
    @Test
    public void testSetApplicationLocales_arbitraryAppWithPermission_succeeds() throws Exception {
    public void testSetApplicationLocales_arbitraryAppWithPermission_succeeds() throws Exception {
        doReturn(DEFAULT_UID)
        doReturn(DEFAULT_UID)
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyLong(), anyInt());
                .when(mMockPackageManager).getPackageUidAsUser(anyString(), any(), anyInt());
        // if package is not owned by the caller, the calling app should have the following
        // if package is not owned by the caller, the calling app should have the following
        //   permission. We will mock this to succeed to imitate that.
        //   permission. We will mock this to succeed to imitate that.
        setUpPassingPermissionCheckFor(Manifest.permission.CHANGE_CONFIGURATION);
        setUpPassingPermissionCheckFor(Manifest.permission.CHANGE_CONFIGURATION);
@@ -186,7 +183,7 @@ public class LocaleManagerServiceTest {
    @Test
    @Test
    public void testSetApplicationLocales_callerOwnsPackage_succeeds() throws Exception {
    public void testSetApplicationLocales_callerOwnsPackage_succeeds() throws Exception {
        doReturn(Binder.getCallingUid())
        doReturn(Binder.getCallingUid())
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyLong(), anyInt());
                .when(mMockPackageManager).getPackageUidAsUser(anyString(), any(), anyInt());


        mLocaleManagerService.setApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID,
        mLocaleManagerService.setApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID,
                DEFAULT_LOCALES);
                DEFAULT_LOCALES);
@@ -197,8 +194,8 @@ public class LocaleManagerServiceTest {


    @Test(expected = IllegalArgumentException.class)
    @Test(expected = IllegalArgumentException.class)
    public void testSetApplicationLocales_invalidPackageOrUserId_fails() throws Exception {
    public void testSetApplicationLocales_invalidPackageOrUserId_fails() throws Exception {
        doReturn(INVALID_UID)
        doThrow(new PackageManager.NameNotFoundException("Mock"))
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyLong(), anyInt());
                .when(mMockPackageManager).getPackageUidAsUser(anyString(), any(), anyInt());
        try {
        try {
            mLocaleManagerService.setApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID,
            mLocaleManagerService.setApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID,
                    LocaleList.getEmptyLocaleList());
                    LocaleList.getEmptyLocaleList());
@@ -211,8 +208,8 @@ public class LocaleManagerServiceTest {


    @Test(expected = SecurityException.class)
    @Test(expected = SecurityException.class)
    public void testGetApplicationLocales_arbitraryAppWithoutPermission_fails() throws Exception {
    public void testGetApplicationLocales_arbitraryAppWithoutPermission_fails() throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
        doReturn(DEFAULT_UID).when(mMockPackageManager)
                .getPackageUid(anyString(), anyLong(), anyInt());
                .getPackageUidAsUser(anyString(), any(), anyInt());
        setUpFailingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        setUpFailingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);


        try {
        try {
@@ -229,8 +226,8 @@ public class LocaleManagerServiceTest {
    public void testGetApplicationLocales_appSpecificConfigAbsent_returnsEmptyList()
    public void testGetApplicationLocales_appSpecificConfigAbsent_returnsEmptyList()
            throws Exception {
            throws Exception {
        // any valid app calling for its own package or having appropriate permission
        // any valid app calling for its own package or having appropriate permission
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
        doReturn(DEFAULT_UID).when(mMockPackageManager)
                .getPackageUid(anyString(), anyLong(), anyInt());
                .getPackageUidAsUser(anyString(), any(), anyInt());
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        doReturn(null)
        doReturn(null)
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());
@@ -244,8 +241,8 @@ public class LocaleManagerServiceTest {
    @Test
    @Test
    public void testGetApplicationLocales_appSpecificLocalesAbsent_returnsEmptyList()
    public void testGetApplicationLocales_appSpecificLocalesAbsent_returnsEmptyList()
            throws Exception {
            throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
        doReturn(DEFAULT_UID).when(mMockPackageManager)
                .getPackageUid(anyString(), anyLong(), anyInt());
                .getPackageUidAsUser(anyString(), any(), anyInt());
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        doReturn(new PackageConfig(/* nightMode = */ 0, /* locales = */ null))
        doReturn(new PackageConfig(/* nightMode = */ 0, /* locales = */ null))
                .when(mMockActivityTaskManager).getApplicationConfig(any(), anyInt());
                .when(mMockActivityTaskManager).getApplicationConfig(any(), anyInt());
@@ -259,8 +256,8 @@ public class LocaleManagerServiceTest {
    @Test
    @Test
    public void testGetApplicationLocales_callerOwnsAppAndConfigPresent_returnsLocales()
    public void testGetApplicationLocales_callerOwnsAppAndConfigPresent_returnsLocales()
            throws Exception {
            throws Exception {
        doReturn(Binder.getCallingUid()).when(mMockPackageManagerInternal)
        doReturn(Binder.getCallingUid()).when(mMockPackageManager)
                .getPackageUid(anyString(), anyLong(), anyInt());
                .getPackageUidAsUser(anyString(), any(), anyInt());
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());


@@ -273,8 +270,8 @@ public class LocaleManagerServiceTest {
    @Test
    @Test
    public void testGetApplicationLocales_arbitraryCallerWithPermissions_returnsLocales()
    public void testGetApplicationLocales_arbitraryCallerWithPermissions_returnsLocales()
            throws Exception {
            throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
        doReturn(DEFAULT_UID).when(mMockPackageManager)
                .getPackageUid(anyString(), anyLong(), anyInt());
                .getPackageUidAsUser(anyString(), any(), anyInt());
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());
@@ -288,10 +285,10 @@ public class LocaleManagerServiceTest {
    @Test
    @Test
    public void testGetApplicationLocales_callerIsInstaller_returnsLocales()
    public void testGetApplicationLocales_callerIsInstaller_returnsLocales()
            throws Exception {
            throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
        doReturn(DEFAULT_UID).when(mMockPackageManager)
                .getPackageUid(eq(DEFAULT_PACKAGE_NAME), anyLong(), anyInt());
                .getPackageUidAsUser(eq(DEFAULT_PACKAGE_NAME), any(), anyInt());
        doReturn(Binder.getCallingUid()).when(mMockPackageManagerInternal)
        doReturn(Binder.getCallingUid()).when(mMockPackageManager)
                .getPackageUid(eq(DEFAULT_INSTALLER_PACKAGE_NAME), anyLong(), anyInt());
                .getPackageUidAsUser(eq(DEFAULT_INSTALLER_PACKAGE_NAME), any(), anyInt());
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());


+4 −3
Original line number Original line Diff line number Diff line
@@ -17,7 +17,7 @@
package com.android.server.locales;
package com.android.server.locales;


import android.content.Context;
import android.content.Context;
import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageManager;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.util.SparseArray;
import android.util.SparseArray;


@@ -31,9 +31,10 @@ import java.time.Clock;
public class ShadowLocaleManagerBackupHelper extends LocaleManagerBackupHelper {
public class ShadowLocaleManagerBackupHelper extends LocaleManagerBackupHelper {
    ShadowLocaleManagerBackupHelper(Context context,
    ShadowLocaleManagerBackupHelper(Context context,
            LocaleManagerService localeManagerService,
            LocaleManagerService localeManagerService,
            PackageManagerInternal pmInternal, Clock clock,
            PackageManager packageManager, Clock clock,
            SparseArray<LocaleManagerBackupHelper.StagedData> stagedData,
            SparseArray<LocaleManagerBackupHelper.StagedData> stagedData,
            HandlerThread broadcastHandlerThread) {
            HandlerThread broadcastHandlerThread) {
        super(context, localeManagerService, pmInternal, clock, stagedData, broadcastHandlerThread);
        super(context, localeManagerService, packageManager, clock, stagedData,
                broadcastHandlerThread);
    }
    }
}
}
Loading