diff options
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageInstaller.java | 9 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerService.java | 4 |
4 files changed, 9 insertions, 6 deletions
diff --git a/api/current.txt b/api/current.txt index fc239a2bd79b..42e218d42ea0 100644 --- a/api/current.txt +++ b/api/current.txt @@ -11482,7 +11482,6 @@ package android.content.pm { method public void setOriginatingUri(@Nullable android.net.Uri); method public void setReferrerUri(@Nullable android.net.Uri); method public void setSize(long); - method public void setStaged(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.content.pm.PackageInstaller.SessionParams> CREATOR; field public static final int MODE_FULL_INSTALL = 1; // 0x1 diff --git a/api/system-current.txt b/api/system-current.txt index f673827a8633..3bf410ec70c6 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -1535,6 +1535,7 @@ package android.content.pm { method @RequiresPermission(android.Manifest.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS) public void setGrantedRuntimePermissions(String[]); method public void setInstallAsInstantApp(boolean); method public void setInstallAsVirtualPreload(); + method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged(); } public class PackageItemInfo { diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index 0ac4f6481fc4..80954731bffb 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -791,11 +791,6 @@ public class PackageInstaller { * individual session IDs can be added with {@link #addChildSessionId(int)} * and commit of the multi-package session will result in all child sessions * being committed atomically. - * <p> - * If a package requires to be installed only at reboot, the session should - * be marked as a staged session by calling {@link SessionParams#setStaged()} - * with {@code true}. This can also apply to a multi-package session, in - * which case all the packages in the session will be applied at reboot. */ public static class Session implements Closeable { /** {@hide} */ @@ -1539,7 +1534,11 @@ public class PackageInstaller { * Staged sessions are scheduled to be installed at next reboot. Staged sessions can also be * multi-package. In that case, if any of the children sessions fail to install at reboot, * all the other children sessions are aborted as well. + * + * {@hide} */ + @SystemApi + @RequiresPermission(Manifest.permission.INSTALL_PACKAGES) public void setStaged() { this.isStaged = true; } diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index 21965e4e83a2..f6bd2a95a4a3 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -481,6 +481,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements } } + if (params.isStaged) { + mContext.enforceCallingOrSelfPermission(Manifest.permission.INSTALL_PACKAGES, TAG); + } + if (!params.isMultiPackage) { // Only system components can circumvent runtime permissions when installing. if ((params.installFlags & PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0 |