Modify conditions for preventing updated system apps from being downgraded
Add two conditions prior to deciding whether a specific user can downgrade system apps by deletePackageX. 1.uninstalledPs must be a updated system app. 2.deleteFlags does not contains PackageManager.DELETE_SYSTEM_APP, since flag PackageManager.DELETE_SYSTEM_APP will just mark the app as uninstalled for the specific user instead of uninstalling the update and rolling back to the older system version. Bug: 236578018 Test: atest DeletePackageHelperTest Change-Id: I55a3d322e84aaaced69bd5edeaf90e82ac9a0dd3
This commit is contained in:
@@ -163,7 +163,8 @@ final class DeletePackageHelper {
|
|||||||
return PackageManager.DELETE_FAILED_INTERNAL_ERROR;
|
return PackageManager.DELETE_FAILED_INTERNAL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PackageManagerServiceUtils.isSystemApp(uninstalledPs)) {
|
if (PackageManagerServiceUtils.isUpdatedSystemApp(uninstalledPs)
|
||||||
|
&& ((deleteFlags & PackageManager.DELETE_SYSTEM_APP) == 0)) {
|
||||||
UserInfo userInfo = mUserManagerInternal.getUserInfo(userId);
|
UserInfo userInfo = mUserManagerInternal.getUserInfo(userId);
|
||||||
if (userInfo == null || (!userInfo.isAdmin() && !mUserManagerInternal.getUserInfo(
|
if (userInfo == null || (!userInfo.isAdmin() && !mUserManagerInternal.getUserInfo(
|
||||||
mUserManagerInternal.getProfileParentId(userId)).isAdmin())) {
|
mUserManagerInternal.getProfileParentId(userId)).isAdmin())) {
|
||||||
|
|||||||
@@ -70,13 +70,12 @@ class DeletePackageHelperTest {
|
|||||||
@Test
|
@Test
|
||||||
fun deleteSystemPackageFailsIfNotAdminAndNotProfile() {
|
fun deleteSystemPackageFailsIfNotAdminAndNotProfile() {
|
||||||
val ps = mPms.mSettings.getPackageLPr("a.data.package")
|
val ps = mPms.mSettings.getPackageLPr("a.data.package")
|
||||||
whenever(PackageManagerServiceUtils.isSystemApp(ps)).thenReturn(true)
|
whenever(PackageManagerServiceUtils.isUpdatedSystemApp(ps)).thenReturn(true)
|
||||||
whenever(mUserManagerInternal.getUserInfo(1)).thenReturn(UserInfo(1, "test", 0))
|
whenever(mUserManagerInternal.getUserInfo(1)).thenReturn(UserInfo(1, "test", 0))
|
||||||
whenever(mUserManagerInternal.getProfileParentId(1)).thenReturn(1)
|
whenever(mUserManagerInternal.getProfileParentId(1)).thenReturn(1)
|
||||||
|
|
||||||
val dph = DeletePackageHelper(mPms)
|
val dph = DeletePackageHelper(mPms)
|
||||||
val result = dph.deletePackageX("a.data.package", 1L, 1,
|
val result = dph.deletePackageX("a.data.package", 1L, 1, 0, false)
|
||||||
PackageManager.DELETE_SYSTEM_APP, false)
|
|
||||||
|
|
||||||
assertThat(result).isEqualTo(PackageManager.DELETE_FAILED_USER_RESTRICTED)
|
assertThat(result).isEqualTo(PackageManager.DELETE_FAILED_USER_RESTRICTED)
|
||||||
}
|
}
|
||||||
@@ -86,7 +85,7 @@ class DeletePackageHelperTest {
|
|||||||
val userId = 1
|
val userId = 1
|
||||||
val parentId = 5
|
val parentId = 5
|
||||||
val ps = mPms.mSettings.getPackageLPr("a.data.package")
|
val ps = mPms.mSettings.getPackageLPr("a.data.package")
|
||||||
whenever(PackageManagerServiceUtils.isSystemApp(ps)).thenReturn(true)
|
whenever(PackageManagerServiceUtils.isUpdatedSystemApp(ps)).thenReturn(true)
|
||||||
whenever(mUserManagerInternal.getUserInfo(userId)).thenReturn(
|
whenever(mUserManagerInternal.getUserInfo(userId)).thenReturn(
|
||||||
UserInfo(userId, "test", UserInfo.FLAG_PROFILE))
|
UserInfo(userId, "test", UserInfo.FLAG_PROFILE))
|
||||||
whenever(mUserManagerInternal.getProfileParentId(userId)).thenReturn(parentId)
|
whenever(mUserManagerInternal.getProfileParentId(userId)).thenReturn(parentId)
|
||||||
@@ -94,8 +93,7 @@ class DeletePackageHelperTest {
|
|||||||
UserInfo(userId, "testparent", 0))
|
UserInfo(userId, "testparent", 0))
|
||||||
|
|
||||||
val dph = DeletePackageHelper(mPms)
|
val dph = DeletePackageHelper(mPms)
|
||||||
val result = dph.deletePackageX("a.data.package", 1L, userId,
|
val result = dph.deletePackageX("a.data.package", 1L, userId, 0, false)
|
||||||
PackageManager.DELETE_SYSTEM_APP, false)
|
|
||||||
|
|
||||||
assertThat(result).isEqualTo(PackageManager.DELETE_FAILED_USER_RESTRICTED)
|
assertThat(result).isEqualTo(PackageManager.DELETE_FAILED_USER_RESTRICTED)
|
||||||
}
|
}
|
||||||
@@ -132,4 +130,18 @@ class DeletePackageHelperTest {
|
|||||||
|
|
||||||
assertThat(result).isEqualTo(PackageManager.DELETE_SUCCEEDED)
|
assertThat(result).isEqualTo(PackageManager.DELETE_SUCCEEDED)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun deleteSystemPackageSucceedsIfNotAdminButDeleteSystemAppSpecified() {
|
||||||
|
val ps = mPms.mSettings.getPackageLPr("a.data.package")
|
||||||
|
whenever(PackageManagerServiceUtils.isUpdatedSystemApp(ps)).thenReturn(true)
|
||||||
|
whenever(mUserManagerInternal.getUserInfo(1)).thenReturn(UserInfo(1, "test", 0))
|
||||||
|
whenever(mUserManagerInternal.getProfileParentId(1)).thenReturn(1)
|
||||||
|
|
||||||
|
val dph = DeletePackageHelper(mPms)
|
||||||
|
val result = dph.deletePackageX("a.data.package", 1L, 1,
|
||||||
|
PackageManager.DELETE_SYSTEM_APP, false)
|
||||||
|
|
||||||
|
assertThat(result).isEqualTo(PackageManager.DELETE_SUCCEEDED)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user