Loading core/java/android/content/pm/IPackageManager.aidl +0 −2 Original line number Diff line number Diff line Loading @@ -598,8 +598,6 @@ interface IPackageManager { boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, int userId); boolean getApplicationHiddenSettingAsUser(String packageName, int userId); boolean setSystemAppInstallState(String packageName, boolean installed, int userId); IPackageInstaller getPackageInstaller(); boolean setBlockUninstallForUser(String packageName, boolean blockUninstall, int userId); Loading core/java/android/content/pm/PackageManager.java +1 −10 Original line number Diff line number Diff line Loading @@ -147,7 +147,6 @@ public abstract class PackageManager { GET_DISABLED_COMPONENTS, GET_DISABLED_UNTIL_USED_COMPONENTS, GET_UNINSTALLED_PACKAGES, MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, }) @Retention(RetentionPolicy.SOURCE) public @interface PackageInfoFlags {} Loading @@ -165,7 +164,6 @@ public abstract class PackageManager { MATCH_STATIC_SHARED_LIBRARIES, GET_DISABLED_UNTIL_USED_COMPONENTS, GET_UNINSTALLED_PACKAGES, MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, }) @Retention(RetentionPolicy.SOURCE) public @interface ApplicationInfoFlags {} Loading Loading @@ -523,12 +521,6 @@ public abstract class PackageManager { */ public static final int MATCH_DEBUG_TRIAGED_MISSING = 0x10000000; /** * Internal flag used to indicate that a package is a hidden system app. * @hide */ public static final int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS = 0x20000000; /** * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set: when * resolving an intent that matches the {@code CrossProfileIntentFilter}, Loading Loading @@ -4858,7 +4850,6 @@ public abstract class PackageManager { * @hide */ @RequiresPermission(anyOf = { Manifest.permission.INSTALL_EXISTING_PACKAGES, Manifest.permission.INSTALL_PACKAGES, Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public abstract int installExistingPackageAsUser(String packageName, @UserIdInt int userId) Loading core/java/android/content/pm/PackageParser.java +1 −9 Original line number Diff line number Diff line Loading @@ -639,19 +639,11 @@ public class PackageParser { */ private static boolean checkUseInstalledOrHidden(int flags, PackageUserState state, ApplicationInfo appInfo) { // Returns false if the package is hidden system app until installed. if ((flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) == 0 && !state.installed && appInfo != null && appInfo.isSystemApp()) { return false; } // If available for the target user, or trying to match uninstalled packages and it's // a system app. return state.isAvailable(flags) || (appInfo != null && appInfo.isSystemApp() && ((flags & PackageManager.MATCH_KNOWN_PACKAGES) != 0 || (flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) != 0)); && (flags & PackageManager.MATCH_KNOWN_PACKAGES) != 0); } public static boolean isAvailable(PackageUserState state) { Loading core/res/AndroidManifest.xml +0 −9 Original line number Diff line number Diff line Loading @@ -3024,15 +3024,6 @@ <permission android:name="android.permission.INSTALL_PACKAGE_UPDATES" android:protectionLevel="signature|privileged" /> <!-- Allows an application to install existing system packages. This is a limited version of {@link android.Manifest.permission#INSTALL_PACKAGES}. <p>Not for use by third-party applications. TODO(b/80204953): remove this permission once we have a long-term solution. @hide --> <permission android:name="com.android.permission.INSTALL_EXISTING_PACKAGES" android:protectionLevel="signature|privileged" /> <!-- @SystemApi Allows an application to clear user data. <p>Not for use by third-party applications @hide Loading services/core/java/com/android/server/pm/PackageManagerService.java +3 −46 Original line number Diff line number Diff line Loading @@ -14009,43 +14009,6 @@ public class PackageManagerService extends IPackageManager.Stub return false; } @Override public boolean setSystemAppInstallState(String packageName, boolean installed, int userId) { enforceSystemOrPhoneCaller("setSystemAppInstallState"); PackageSetting pkgSetting = mSettings.mPackages.get(packageName); // The target app should always be in system if (pkgSetting == null || !pkgSetting.isSystem()) { return false; } // Check if the install state is the same if (pkgSetting.getInstalled(userId) == installed) { return false; } long callingId = Binder.clearCallingIdentity(); try { if (installed) { // install the app from uninstalled state installExistingPackageAsUser( packageName, userId, 0 /*installFlags*/, PackageManager.INSTALL_REASON_DEVICE_SETUP); return true; } // uninstall the app from installed state deletePackageVersioned( new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST), new LegacyPackageDeleteObserver(null).getBinder(), userId, PackageManager.DELETE_SYSTEM_APP); return true; } finally { Binder.restoreCallingIdentity(callingId); } } private void sendApplicationHiddenForUser(String packageName, PackageSetting pkgSetting, int userId) { final PackageRemovedInfo info = new PackageRemovedInfo(this); Loading Loading @@ -14110,16 +14073,10 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int installExistingPackageAsUser(String packageName, int userId, int installFlags, int installReason) { final int callingUid = Binder.getCallingUid(); if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES) != PackageManager.PERMISSION_GRANTED && mContext.checkCallingOrSelfPermission( android.Manifest.permission.INSTALL_EXISTING_PACKAGES) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Neither user " + callingUid + " nor current process has " + android.Manifest.permission.INSTALL_PACKAGES + "."); } mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null); PackageSetting pkgSetting; final int callingUid = Binder.getCallingUid(); mPermissionManager.enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, true /* checkShell */, "installExistingPackage for user " + userId); Loading
core/java/android/content/pm/IPackageManager.aidl +0 −2 Original line number Diff line number Diff line Loading @@ -598,8 +598,6 @@ interface IPackageManager { boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, int userId); boolean getApplicationHiddenSettingAsUser(String packageName, int userId); boolean setSystemAppInstallState(String packageName, boolean installed, int userId); IPackageInstaller getPackageInstaller(); boolean setBlockUninstallForUser(String packageName, boolean blockUninstall, int userId); Loading
core/java/android/content/pm/PackageManager.java +1 −10 Original line number Diff line number Diff line Loading @@ -147,7 +147,6 @@ public abstract class PackageManager { GET_DISABLED_COMPONENTS, GET_DISABLED_UNTIL_USED_COMPONENTS, GET_UNINSTALLED_PACKAGES, MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, }) @Retention(RetentionPolicy.SOURCE) public @interface PackageInfoFlags {} Loading @@ -165,7 +164,6 @@ public abstract class PackageManager { MATCH_STATIC_SHARED_LIBRARIES, GET_DISABLED_UNTIL_USED_COMPONENTS, GET_UNINSTALLED_PACKAGES, MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, }) @Retention(RetentionPolicy.SOURCE) public @interface ApplicationInfoFlags {} Loading Loading @@ -523,12 +521,6 @@ public abstract class PackageManager { */ public static final int MATCH_DEBUG_TRIAGED_MISSING = 0x10000000; /** * Internal flag used to indicate that a package is a hidden system app. * @hide */ public static final int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS = 0x20000000; /** * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set: when * resolving an intent that matches the {@code CrossProfileIntentFilter}, Loading Loading @@ -4858,7 +4850,6 @@ public abstract class PackageManager { * @hide */ @RequiresPermission(anyOf = { Manifest.permission.INSTALL_EXISTING_PACKAGES, Manifest.permission.INSTALL_PACKAGES, Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public abstract int installExistingPackageAsUser(String packageName, @UserIdInt int userId) Loading
core/java/android/content/pm/PackageParser.java +1 −9 Original line number Diff line number Diff line Loading @@ -639,19 +639,11 @@ public class PackageParser { */ private static boolean checkUseInstalledOrHidden(int flags, PackageUserState state, ApplicationInfo appInfo) { // Returns false if the package is hidden system app until installed. if ((flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) == 0 && !state.installed && appInfo != null && appInfo.isSystemApp()) { return false; } // If available for the target user, or trying to match uninstalled packages and it's // a system app. return state.isAvailable(flags) || (appInfo != null && appInfo.isSystemApp() && ((flags & PackageManager.MATCH_KNOWN_PACKAGES) != 0 || (flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) != 0)); && (flags & PackageManager.MATCH_KNOWN_PACKAGES) != 0); } public static boolean isAvailable(PackageUserState state) { Loading
core/res/AndroidManifest.xml +0 −9 Original line number Diff line number Diff line Loading @@ -3024,15 +3024,6 @@ <permission android:name="android.permission.INSTALL_PACKAGE_UPDATES" android:protectionLevel="signature|privileged" /> <!-- Allows an application to install existing system packages. This is a limited version of {@link android.Manifest.permission#INSTALL_PACKAGES}. <p>Not for use by third-party applications. TODO(b/80204953): remove this permission once we have a long-term solution. @hide --> <permission android:name="com.android.permission.INSTALL_EXISTING_PACKAGES" android:protectionLevel="signature|privileged" /> <!-- @SystemApi Allows an application to clear user data. <p>Not for use by third-party applications @hide Loading
services/core/java/com/android/server/pm/PackageManagerService.java +3 −46 Original line number Diff line number Diff line Loading @@ -14009,43 +14009,6 @@ public class PackageManagerService extends IPackageManager.Stub return false; } @Override public boolean setSystemAppInstallState(String packageName, boolean installed, int userId) { enforceSystemOrPhoneCaller("setSystemAppInstallState"); PackageSetting pkgSetting = mSettings.mPackages.get(packageName); // The target app should always be in system if (pkgSetting == null || !pkgSetting.isSystem()) { return false; } // Check if the install state is the same if (pkgSetting.getInstalled(userId) == installed) { return false; } long callingId = Binder.clearCallingIdentity(); try { if (installed) { // install the app from uninstalled state installExistingPackageAsUser( packageName, userId, 0 /*installFlags*/, PackageManager.INSTALL_REASON_DEVICE_SETUP); return true; } // uninstall the app from installed state deletePackageVersioned( new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST), new LegacyPackageDeleteObserver(null).getBinder(), userId, PackageManager.DELETE_SYSTEM_APP); return true; } finally { Binder.restoreCallingIdentity(callingId); } } private void sendApplicationHiddenForUser(String packageName, PackageSetting pkgSetting, int userId) { final PackageRemovedInfo info = new PackageRemovedInfo(this); Loading Loading @@ -14110,16 +14073,10 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int installExistingPackageAsUser(String packageName, int userId, int installFlags, int installReason) { final int callingUid = Binder.getCallingUid(); if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES) != PackageManager.PERMISSION_GRANTED && mContext.checkCallingOrSelfPermission( android.Manifest.permission.INSTALL_EXISTING_PACKAGES) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Neither user " + callingUid + " nor current process has " + android.Manifest.permission.INSTALL_PACKAGES + "."); } mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null); PackageSetting pkgSetting; final int callingUid = Binder.getCallingUid(); mPermissionManager.enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, true /* checkShell */, "installExistingPackage for user " + userId);