diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageArchiver.java | 15 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java | 4 |
2 files changed, 14 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/pm/PackageArchiver.java b/services/core/java/com/android/server/pm/PackageArchiver.java index e3bab3f243c3..065cd0bd06f1 100644 --- a/services/core/java/com/android/server/pm/PackageArchiver.java +++ b/services/core/java/com/android/server/pm/PackageArchiver.java @@ -323,6 +323,7 @@ public class PackageArchiver { PackageStateInternal ps = getPackageState(packageName, snapshot, Binder.getCallingUid(), userId); verifyNotSystemApp(ps.getFlags()); + verifyInstalled(ps, userId); String responsibleInstallerPackage = getResponsibleInstallerPackage(ps); verifyInstaller(responsibleInstallerPackage, userId); ApplicationInfo installerInfo = snapshot.getApplicationInfo( @@ -476,6 +477,14 @@ public class PackageArchiver { } } + private void verifyInstalled(PackageStateInternal ps, int userId) + throws PackageManager.NameNotFoundException { + if (!ps.getUserStateOrDefault(userId).isInstalled()) { + throw new PackageManager.NameNotFoundException( + TextUtils.formatSimple("%s is not installed.", ps.getPackageName())); + } + } + /** * Returns true if the app is archivable. */ @@ -519,11 +528,11 @@ public class PackageArchiver { /** * Returns true if user has opted the app out of archiving through system settings. */ - // TODO(b/304256918) Switch this to a separate OP code for archiving. private boolean isAppOptedOutOfArchiving(String packageName, int uid) { return Binder.withCleanCallingIdentity(() -> - getAppOpsManager().checkOp(AppOpsManager.OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, - uid, packageName) == MODE_IGNORED); + getAppOpsManager().checkOpNoThrow( + AppOpsManager.OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, uid, packageName) + == MODE_IGNORED); } private void verifyOptOutStatus(String packageName, int uid) diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java index 2332988cc832..1792b7686707 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java @@ -343,7 +343,7 @@ public class PackageArchiverTest { @Test public void archiveApp_appOptedOutOfArchiving() { - when(mAppOpsManager.checkOp( + when(mAppOpsManager.checkOpNoThrow( eq(AppOpsManager.OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED), anyInt(), eq(PACKAGE))).thenReturn(MODE_IGNORED); @@ -430,7 +430,7 @@ public class PackageArchiverTest { @Test public void isAppArchivable_appOptedOutOfArchiving() throws PackageManager.NameNotFoundException { - when(mAppOpsManager.checkOp( + when(mAppOpsManager.checkOpNoThrow( eq(AppOpsManager.OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED), anyInt(), eq(PACKAGE))).thenReturn(MODE_IGNORED); |