Loading api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -11802,6 +11802,7 @@ package android.content.pm { method public void registerSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback, @NonNull android.os.Handler); method @RequiresPermission(anyOf={android.Manifest.permission.DELETE_PACKAGES, android.Manifest.permission.REQUEST_DELETE_PACKAGES}) public void uninstall(@NonNull String, @NonNull android.content.IntentSender); method @RequiresPermission(anyOf={android.Manifest.permission.DELETE_PACKAGES, android.Manifest.permission.REQUEST_DELETE_PACKAGES}) public void uninstall(@NonNull android.content.pm.VersionedPackage, @NonNull android.content.IntentSender); method @RequiresPermission(android.Manifest.permission.DELETE_PACKAGES) public void uninstallExistingPackage(@NonNull String, @Nullable android.content.IntentSender); method public void unregisterSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback); method public void updateSessionAppIcon(int, @Nullable android.graphics.Bitmap); method public void updateSessionAppLabel(int, @Nullable CharSequence); core/java/android/content/pm/IPackageInstaller.aidl +3 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,9 @@ interface IPackageInstaller { void uninstall(in VersionedPackage versionedPackage, String callerPackageName, int flags, in IntentSender statusReceiver, int userId); void uninstallExistingPackage(in VersionedPackage versionedPackage, String callerPackageName, in IntentSender statusReceiver, int userId); void installExistingPackage(String packageName, int installFlags, int installReason, in IntentSender statusReceiver, int userId, in List<String> whiteListedPermissions); Loading core/java/android/content/pm/IPackageManager.aidl +10 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,16 @@ interface IPackageManager { void deletePackageVersioned(in VersionedPackage versionedPackage, IPackageDeleteObserver2 observer, int userId, int flags); /** * Delete a package for a specific user. * * @param versionedPackage The package to delete. * @param observer a callback to use to notify when the package deletion in finished. * @param userId the id of the user for whom to delete the package */ void deleteExistingPackageAsUser(in VersionedPackage versionedPackage, IPackageDeleteObserver2 observer, int userId); @UnsupportedAppUsage String getInstallerPackageName(in String packageName); Loading core/java/android/content/pm/PackageInstaller.java +19 −0 Original line number Diff line number Diff line Loading @@ -723,6 +723,25 @@ public class PackageInstaller { } } /** * Uninstall the given package for the user for which this installer was created if the package * will still exist for other users on the device. * * @param packageName The package to install. * @param statusReceiver Where to deliver the result. */ @RequiresPermission(Manifest.permission.DELETE_PACKAGES) public void uninstallExistingPackage(@NonNull String packageName, @Nullable IntentSender statusReceiver) { Objects.requireNonNull(packageName, "packageName cannot be null"); try { mInstaller.uninstallExistingPackage( new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST), mInstallerPackageName, statusReceiver, mUserId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** {@hide} */ @SystemApi Loading services/core/java/com/android/server/pm/PackageInstallerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -937,6 +937,21 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements } } @Override public void uninstallExistingPackage(VersionedPackage versionedPackage, String callerPackageName, IntentSender statusReceiver, int userId) { final int callingUid = Binder.getCallingUid(); mContext.enforceCallingOrSelfPermission(Manifest.permission.DELETE_PACKAGES, null); mPermissionManager.enforceCrossUserPermission(callingUid, userId, true, true, "uninstall"); if ((callingUid != Process.SHELL_UID) && (callingUid != Process.ROOT_UID)) { mAppOps.checkPackage(callingUid, callerPackageName); } final PackageDeleteObserverAdapter adapter = new PackageDeleteObserverAdapter(mContext, statusReceiver, versionedPackage.getPackageName(), false, userId); mPm.deleteExistingPackageAsUser(versionedPackage, adapter.getBinder(), userId); } @Override public void installExistingPackage(String packageName, int installFlags, int installReason, IntentSender statusReceiver, int userId, List<String> whiteListedPermissions) { Loading Loading
api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -11802,6 +11802,7 @@ package android.content.pm { method public void registerSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback, @NonNull android.os.Handler); method @RequiresPermission(anyOf={android.Manifest.permission.DELETE_PACKAGES, android.Manifest.permission.REQUEST_DELETE_PACKAGES}) public void uninstall(@NonNull String, @NonNull android.content.IntentSender); method @RequiresPermission(anyOf={android.Manifest.permission.DELETE_PACKAGES, android.Manifest.permission.REQUEST_DELETE_PACKAGES}) public void uninstall(@NonNull android.content.pm.VersionedPackage, @NonNull android.content.IntentSender); method @RequiresPermission(android.Manifest.permission.DELETE_PACKAGES) public void uninstallExistingPackage(@NonNull String, @Nullable android.content.IntentSender); method public void unregisterSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback); method public void updateSessionAppIcon(int, @Nullable android.graphics.Bitmap); method public void updateSessionAppLabel(int, @Nullable CharSequence);
core/java/android/content/pm/IPackageInstaller.aidl +3 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,9 @@ interface IPackageInstaller { void uninstall(in VersionedPackage versionedPackage, String callerPackageName, int flags, in IntentSender statusReceiver, int userId); void uninstallExistingPackage(in VersionedPackage versionedPackage, String callerPackageName, in IntentSender statusReceiver, int userId); void installExistingPackage(String packageName, int installFlags, int installReason, in IntentSender statusReceiver, int userId, in List<String> whiteListedPermissions); Loading
core/java/android/content/pm/IPackageManager.aidl +10 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,16 @@ interface IPackageManager { void deletePackageVersioned(in VersionedPackage versionedPackage, IPackageDeleteObserver2 observer, int userId, int flags); /** * Delete a package for a specific user. * * @param versionedPackage The package to delete. * @param observer a callback to use to notify when the package deletion in finished. * @param userId the id of the user for whom to delete the package */ void deleteExistingPackageAsUser(in VersionedPackage versionedPackage, IPackageDeleteObserver2 observer, int userId); @UnsupportedAppUsage String getInstallerPackageName(in String packageName); Loading
core/java/android/content/pm/PackageInstaller.java +19 −0 Original line number Diff line number Diff line Loading @@ -723,6 +723,25 @@ public class PackageInstaller { } } /** * Uninstall the given package for the user for which this installer was created if the package * will still exist for other users on the device. * * @param packageName The package to install. * @param statusReceiver Where to deliver the result. */ @RequiresPermission(Manifest.permission.DELETE_PACKAGES) public void uninstallExistingPackage(@NonNull String packageName, @Nullable IntentSender statusReceiver) { Objects.requireNonNull(packageName, "packageName cannot be null"); try { mInstaller.uninstallExistingPackage( new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST), mInstallerPackageName, statusReceiver, mUserId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** {@hide} */ @SystemApi Loading
services/core/java/com/android/server/pm/PackageInstallerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -937,6 +937,21 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements } } @Override public void uninstallExistingPackage(VersionedPackage versionedPackage, String callerPackageName, IntentSender statusReceiver, int userId) { final int callingUid = Binder.getCallingUid(); mContext.enforceCallingOrSelfPermission(Manifest.permission.DELETE_PACKAGES, null); mPermissionManager.enforceCrossUserPermission(callingUid, userId, true, true, "uninstall"); if ((callingUid != Process.SHELL_UID) && (callingUid != Process.ROOT_UID)) { mAppOps.checkPackage(callingUid, callerPackageName); } final PackageDeleteObserverAdapter adapter = new PackageDeleteObserverAdapter(mContext, statusReceiver, versionedPackage.getPackageName(), false, userId); mPm.deleteExistingPackageAsUser(versionedPackage, adapter.getBinder(), userId); } @Override public void installExistingPackage(String packageName, int installFlags, int installReason, IntentSender statusReceiver, int userId, List<String> whiteListedPermissions) { Loading