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

Commit cd68369a authored by Oli Lan's avatar Oli Lan Committed by Automerger Merge Worker
Browse files

Merge "Allow profiles of an admin user to remove system app updates." into tm-dev am: 86445022

parents ae1cc2a8 86445022
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -166,9 +166,10 @@ final class DeletePackageHelper {


            if (PackageManagerServiceUtils.isSystemApp(uninstalledPs)) {
            if (PackageManagerServiceUtils.isSystemApp(uninstalledPs)) {
                UserInfo userInfo = mUserManagerInternal.getUserInfo(userId);
                UserInfo userInfo = mUserManagerInternal.getUserInfo(userId);
                if (userInfo == null || !userInfo.isAdmin()) {
                if (userInfo == null || (!userInfo.isAdmin() && !mUserManagerInternal.getUserInfo(
                        mUserManagerInternal.getProfileParentId(userId)).isAdmin())) {
                    Slog.w(TAG, "Not removing package " + packageName
                    Slog.w(TAG, "Not removing package " + packageName
                            + " as only admin user may downgrade system apps");
                            + " as only admin user (or their profile) may downgrade system apps");
                    EventLog.writeEvent(0x534e4554, "170646036", -1, packageName);
                    EventLog.writeEvent(0x534e4554, "170646036", -1, packageName);
                    return PackageManager.DELETE_FAILED_USER_RESTRICTED;
                    return PackageManager.DELETE_FAILED_USER_RESTRICTED;
                }
                }
+42 −2
Original line number Original line Diff line number Diff line
@@ -69,13 +69,34 @@ class DeletePackageHelperTest {
    }
    }


    @Test
    @Test
    fun deleteSystemPackageFailsIfNotAdmin() {
    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.isSystemApp(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)


        val dph = DeletePackageHelper(mPms)
        val dph = DeletePackageHelper(mPms)
        val result = dph.deletePackageX("a.data.package", 1L, 1, 0, false)
        val result = dph.deletePackageX("a.data.package", 1L, 1,
            PackageManager.DELETE_SYSTEM_APP, false)

        assertThat(result).isEqualTo(PackageManager.DELETE_FAILED_USER_RESTRICTED)
    }

    @Test
    fun deleteSystemPackageFailsIfProfileOfNonAdmin() {
        val userId = 1
        val parentId = 5
        val ps = mPms.mSettings.getPackageLPr("a.data.package")
        whenever(PackageManagerServiceUtils.isSystemApp(ps)).thenReturn(true)
        whenever(mUserManagerInternal.getUserInfo(userId)).thenReturn(
            UserInfo(userId, "test", UserInfo.FLAG_PROFILE))
        whenever(mUserManagerInternal.getProfileParentId(userId)).thenReturn(parentId)
        whenever(mUserManagerInternal.getUserInfo(parentId)).thenReturn(
            UserInfo(userId, "testparent", 0))

        val dph = DeletePackageHelper(mPms)
        val result = dph.deletePackageX("a.data.package", 1L, userId,
            PackageManager.DELETE_SYSTEM_APP, false)


        assertThat(result).isEqualTo(PackageManager.DELETE_FAILED_USER_RESTRICTED)
        assertThat(result).isEqualTo(PackageManager.DELETE_FAILED_USER_RESTRICTED)
    }
    }
@@ -93,4 +114,23 @@ class DeletePackageHelperTest {


        assertThat(result).isEqualTo(PackageManager.DELETE_SUCCEEDED)
        assertThat(result).isEqualTo(PackageManager.DELETE_SUCCEEDED)
    }
    }

    @Test
    fun deleteSystemPackageSucceedsIfProfileOfAdmin() {
        val userId = 1
        val parentId = 5
        val ps = mPms.mSettings.getPackageLPr("a.data.package")
        whenever(PackageManagerServiceUtils.isSystemApp(ps)).thenReturn(true)
        whenever(mUserManagerInternal.getUserInfo(userId)).thenReturn(
            UserInfo(userId, "test", UserInfo.FLAG_PROFILE))
        whenever(mUserManagerInternal.getProfileParentId(userId)).thenReturn(parentId)
        whenever(mUserManagerInternal.getUserInfo(parentId)).thenReturn(
            UserInfo(userId, "testparent", UserInfo.FLAG_ADMIN))

        val dph = DeletePackageHelper(mPms)
        val result = dph.deletePackageX("a.data.package", 1L, userId,
            PackageManager.DELETE_SYSTEM_APP, false)

        assertThat(result).isEqualTo(PackageManager.DELETE_SUCCEEDED)
    }
}
}
 No newline at end of file