/** * Sets extra resolve infos for an intent. * * Those entries are added to whatever might be in the manifest already. * * Note that all resolve infos will have {@link ResolveInfo#isDefault} field set to {@code * true} to allow their resolution for implicit intents. If this is not what you want, then you * still have the reference to those ResolveInfos, and you can set the field back to {@code * false}. * * @deprecated see the note on {@link #addResolveInfoForIntent(Intent, ResolveInfo)}. */ @Deprecated public void setResolveInfosForIntent(Intent intent, List<ResolveInfo> info) { resolveInfoForIntent.remove(intent); for (ResolveInfo resolveInfo : info) { addResolveInfoForIntent(intent, resolveInfo); } }
/** * Adds a package to the {@link PackageManager}, but doesn't set any default values on it. * * Right now it will not set {@link ApplicationInfo#FLAG_INSTALLED} flag on its application, so * if not set explicitly, it will be treated as not installed. */ public void addPackageNoDefaults(PackageInfo packageInfo) { PackageStats packageStats = new PackageStats(packageInfo.packageName); addPackage(packageInfo, packageStats); }
@Test public void deletePackage() throws Exception { // Apps must have the android.permission.DELETE_PACKAGES set to delete packages. PackageManager packageManager = ApplicationProvider.getApplicationContext().getPackageManager(); shadowPackageManager.getInternalMutablePackageInfo( ApplicationProvider.getApplicationContext().getPackageName()) .requestedPermissions = new String[] {android.Manifest.permission.DELETE_PACKAGES}; PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "test.package"; shadowPackageManager.installPackage(packageInfo); IPackageDeleteObserver mockObserver = mock(IPackageDeleteObserver.class); packageManager.deletePackage(packageInfo.packageName, mockObserver, 0); shadowPackageManager.doPendingUninstallCallbacks(); assertThat(shadowPackageManager.getDeletedPackages()).contains(packageInfo.packageName); verify(mockObserver).packageDeleted(packageInfo.packageName, PackageManager.DELETE_SUCCEEDED); }
/** @deprecated Use {@link #installPackage(PackageInfo)} instead. */ @Deprecated public void addPackage(String packageName) { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = packageName; ApplicationInfo applicationInfo = new ApplicationInfo(); applicationInfo.packageName = packageName; // TODO: setUpPackageStorage should be in installPackage but we need to fix all tests first setUpPackageStorage(applicationInfo); packageInfo.applicationInfo = applicationInfo; installPackage(packageInfo); }
PermissionGroupInfo permissionGroupInfo = PackageParser.generatePermissionGroupInfo(permissionGroup, flags); addPermissionGroupInfo(permissionGroupInfo); packageInfo.applicationInfo.dataDir = createTempDir(packageInfo.packageName + "-dataDir"); installPackage(packageInfo); addFilters(activityFilters, appPackage.activities); addFilters(serviceFilters, appPackage.services); addFilters(providerFilters, appPackage.providers); addFilters(receiverFilters, appPackage.receivers);
@Test @Config(minSdk = android.os.Build.VERSION_CODES.P) public void getPackageSetting_removedPackage_shouldReturnNull() { shadowPackageManager.installPackage(createPackageInfoWithPackageName(TEST_PACKAGE_NAME)); shadowPackageManager.removePackage(TEST_PACKAGE_NAME); assertThat(shadowPackageManager.getPackageSetting(TEST_PACKAGE_NAME)).isNull(); }
/** This method is getting renamed to {link {@link #installPackage}. */ @Deprecated public void addPackage(PackageInfo packageInfo) { installPackage(packageInfo); }
@Test public void removeResolveInfosForIntent_forService() throws Exception { Intent intent = new Intent(Intent.ACTION_APP_ERROR, null).addCategory(Intent.CATEGORY_APP_BROWSER); ResolveInfo info = new ResolveInfo(); info.nonLocalizedLabel = TEST_PACKAGE_LABEL; info.serviceInfo = new ServiceInfo(); info.serviceInfo.packageName = "com.org"; shadowPackageManager.addResolveInfoForIntent(intent, info); shadowPackageManager.removeResolveInfosForIntent(intent, "com.org"); assertThat(packageManager.resolveService(intent, 0)).isNull(); }
@Test @Config(minSdk = android.os.Build.VERSION_CODES.P) public void getPackageSetting_installedNeverSuspendedPackage_shouldReturnUnsuspendedSetting() { shadowPackageManager.installPackage(createPackageInfoWithPackageName(TEST_PACKAGE_NAME)); PackageSetting setting = shadowPackageManager.getPackageSetting(TEST_PACKAGE_NAME); assertThat(setting.isSuspended()).isFalse(); assertThat(setting.getDialogMessage()).isNull(); assertThat(setting.getSuspendedAppExtras()).isNull(); assertThat(setting.getSuspendedLauncherExtras()).isNull(); }
@Test public void installPackage_defaults() { PackageInfo info = new PackageInfo(); info.packageName = "name"; info.activities = new ActivityInfo[] {new ActivityInfo()}; shadowPackageManager.installPackage(info); PackageInfo installed = shadowPackageManager.getInternalMutablePackageInfo("name"); ActivityInfo activity = installed.activities[0]; assertThat(installed.applicationInfo).isNotNull(); assertThat(installed.applicationInfo.packageName).isEqualTo("name"); assertThat((installed.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0) .named("%s is installed", installed.applicationInfo) .isTrue(); assertThat(activity.packageName).isEqualTo("name"); // this should be really equal in parcel sense as ApplicationInfo doesn't implement equals(). assertThat(activity.applicationInfo).isEqualTo(installed.applicationInfo); assertThat(installed.applicationInfo.processName).isEqualTo("name"); assertThat(activity.name).isNotEmpty(); }
@Test public void deletePackage_missingRequiredPermission() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "test.package"; shadowPackageManager.installPackage(packageInfo); IPackageDeleteObserver mockObserver = mock(IPackageDeleteObserver.class); packageManager.deletePackage(packageInfo.packageName, mockObserver, 0); shadowPackageManager.doPendingUninstallCallbacks(); assertThat(shadowPackageManager.getDeletedPackages()).hasSize(0); verify(mockObserver) .packageDeleted(packageInfo.packageName, PackageManager.DELETE_FAILED_INTERNAL_ERROR); }
@Test public void getPackageArchiveInfo() { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.flags = ApplicationInfo.FLAG_INSTALLED; appInfo.packageName = TEST_PACKAGE_NAME; appInfo.sourceDir = TEST_APP_PATH; appInfo.name = TEST_PACKAGE_LABEL; PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = TEST_PACKAGE_NAME; packageInfo.applicationInfo = appInfo; shadowPackageManager.installPackage(packageInfo); PackageInfo packageInfoResult = shadowPackageManager.getPackageArchiveInfo(TEST_APP_PATH, 0); assertThat(packageInfoResult).isNotNull(); ApplicationInfo applicationInfo = packageInfoResult.applicationInfo; assertThat(applicationInfo).isInstanceOf(ApplicationInfo.class); assertThat(applicationInfo.packageName).isEqualTo(TEST_PACKAGE_NAME); assertThat(applicationInfo.sourceDir).isEqualTo(TEST_APP_PATH); }
/** @deprecated Use {@link #getInternalMutablePackageInfo} instead. It has better name. */ @Deprecated public PackageInfo getPackageInfoForTesting(String packageName) { return getInternalMutablePackageInfo(packageName); }
/** @deprecated see note on {@link #addResolveInfoForIntent(Intent, ResolveInfo)}. */ @Deprecated public void addResolveInfoForIntent(Intent intent, List<ResolveInfo> info) { setResolveInfosForIntent(intent, info); }
pkg.permissionGroups.add(storagePermissionGroupApp1); shadowPackageManager.addPackageInternal(pkg); pkg2.permissionGroups.add(calendarPermissionGroupApp2); shadowPackageManager.addPackageInternal(pkg2);
info.metaData = metaDataToBundle(cpdata[i].getMetaData().getValueMap()); packageInfo.providers[i] = info; applicationInfo.flags = decodeFlags(androidManifest.getApplicationAttributes()); applicationInfo.targetSdkVersion = androidManifest.getTargetSdkVersion(); applicationInfo.packageName = androidManifest.getPackageName(); applicationInfo.processName = androidManifest.getProcessName(); applicationInfo.name = androidManifest.getApplicationName(); applicationInfo.metaData = metaDataToBundle(androidManifest.getApplicationMetaData()); setUpPackageStorage(applicationInfo);
@Test public void removePackage_shouldHideItFromGetApplicationInfo() { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = TEST_PACKAGE_NAME; packageInfo.applicationInfo = new ApplicationInfo(); packageInfo.applicationInfo.packageName = TEST_PACKAGE_NAME; packageInfo.applicationInfo.name = TEST_PACKAGE_LABEL; shadowPackageManager.installPackage(packageInfo); shadowPackageManager.removePackage(TEST_PACKAGE_NAME); try { packageManager.getApplicationInfo(TEST_PACKAGE_NAME, 0); fail("NameNotFoundException not thrown"); } catch (NameNotFoundException e) { // expected } }
@Test @Config(minSdk = LOLLIPOP) public void setPersistentPreferrecActivity_exists() { ComponentName randomActivity = new ComponentName("random.package", "Activity"); shadowOf(devicePolicyManager).setDeviceOwner(testComponent); ResolveInfo resolveInfo = new ResolveInfo(); resolveInfo.activityInfo = new ActivityInfo(); resolveInfo.activityInfo.name = randomActivity.getClassName(); resolveInfo.activityInfo.applicationInfo = new ApplicationInfo(); resolveInfo.activityInfo.applicationInfo.packageName = randomActivity.getPackageName(); ResolveInfo resolveInfo2 = new ResolveInfo(); resolveInfo2.activityInfo = new ActivityInfo(resolveInfo.activityInfo); resolveInfo.activityInfo.name = "OtherActivity"; shadowOf(packageManager).setResolveInfosForIntent( new Intent(Intent.ACTION_MAIN), Arrays.asList(resolveInfo, resolveInfo2)); shadowOf(packageManager).setShouldShowActivityChooser(true); ResolveInfo resolvedActivity = packageManager.resolveActivity(new Intent(Intent.ACTION_MAIN), 0); assertThat(resolvedActivity.activityInfo.packageName) .isNotEqualTo(randomActivity.getPackageName()); devicePolicyManager.addPersistentPreferredActivity( testComponent, new IntentFilter(Intent.ACTION_MAIN), randomActivity); resolvedActivity = packageManager.resolveActivity(new Intent(Intent.ACTION_MAIN), 0); assertThat(resolvedActivity.activityInfo.packageName) .isEqualTo(randomActivity.getPackageName()); assertThat(resolvedActivity.activityInfo.name).isEqualTo(randomActivity.getClassName()); }
public void addPackage(String packageName) { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = packageName; ApplicationInfo applicationInfo = new ApplicationInfo(); applicationInfo.packageName = packageName; setUpPackageStorage(applicationInfo); packageInfo.applicationInfo = applicationInfo; PackageStats packageStats = new PackageStats(packageInfo.packageName); Preconditions.checkArgument(packageInfo.packageName.equals(packageStats.packageName)); packageInfos.put(packageInfo.packageName, packageInfo); packageStatsMap.put(packageInfo.packageName, packageStats); applicationEnabledSettingMap.put(packageInfo.packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); Resources r = new Resources(new AssetManager(), null, null); resources.put(packageInfo.packageName, r); if (packageInfo.applicationInfo != null) { namesForUid.put(packageInfo.applicationInfo.uid, packageInfo.packageName); } }
@Test public void getAllPermissionGroups_duplicateInExtraPermissions() throws Exception { assertThat(packageManager.getAllPermissionGroups(0)).hasSize(1); PermissionGroupInfo overriddenPermission = new PermissionGroupInfo(); overriddenPermission.name = "org.robolectric.package_permission_group"; shadowPackageManager.addPermissionGroupInfo(overriddenPermission); PermissionGroupInfo newCameraPermission = new PermissionGroupInfo(); newCameraPermission.name = permission_group.CAMERA; shadowPackageManager.addPermissionGroupInfo(newCameraPermission); List<PermissionGroupInfo> allPermissionGroups = packageManager.getAllPermissionGroups(0); assertThat(allPermissionGroups).hasSize(2); }