summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nikita Ioffe <ioffe@google.com> 2019-03-07 20:55:08 +0000
committer Nikita Ioffe <ioffe@google.com> 2019-03-25 16:42:08 +0000
commit00a08f12fe0ec452dea986da423cb35c9f593b91 (patch)
tree72efb9985adce39bce42bfc75cbbe5332a2c5ddd
parentc4ef64285d026f881eb70be416c4d161a4020a1f (diff)
Add an api to get active staged session
This was requested during review of ag/6638240 Test: CtsStagedInstallHostTestCases Bug: 127296534 Change-Id: Ifcc6270dc1655b1b07a0879c140f30967df8910d
-rw-r--r--api/current.txt2
-rw-r--r--core/java/android/content/pm/PackageInstaller.java42
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerSession.java1
3 files changed, 45 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt
index 8192762c4d63..5664d4f65cc4 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -11384,6 +11384,7 @@ package android.content.pm {
public class PackageInstaller {
method public void abandonSession(int);
method public int createSession(@NonNull android.content.pm.PackageInstaller.SessionParams) throws java.io.IOException;
+ method @Nullable public android.content.pm.PackageInstaller.SessionInfo getActiveStagedSession();
method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getAllSessions();
method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getMySessions();
method @Nullable public android.content.pm.PackageInstaller.SessionInfo getSessionInfo(int);
@@ -11468,6 +11469,7 @@ package android.content.pm {
method @NonNull public String getStagedSessionErrorMessage();
method @NonNull public android.os.UserHandle getUser();
method public boolean isActive();
+ method public boolean isCommitted();
method public boolean isMultiPackage();
method public boolean isSealed();
method public boolean isStaged();
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index 3edd17a4bb1f..1e6cea39b44d 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -497,6 +497,36 @@ public class PackageInstaller {
}
/**
+ * Returns an active staged session, or {@code null} if there is none.
+ *
+ * <p>Staged session is active iff:
+ * <ul>
+ * <li>It is committed.
+ * <li>It is not applied.
+ * <li>It is not failed.
+ * </ul>
+ *
+ * <p>In case of a multi-apk session, parent session will be returned.
+ */
+ public @Nullable SessionInfo getActiveStagedSession() {
+ final List<SessionInfo> stagedSessions = getStagedSessions();
+ for (SessionInfo s : stagedSessions) {
+ if (s.isStagedSessionApplied() || s.isStagedSessionFailed()) {
+ // Finalized session.
+ continue;
+ }
+ if (s.getParentSessionId() != SessionInfo.INVALID_ID) {
+ // Child session.
+ continue;
+ }
+ if (s.isCommitted()) {
+ return s;
+ }
+ }
+ return null;
+ }
+
+ /**
* Uninstall the given package, removing it completely from the device. This
* method is available to:
* <ul>
@@ -1770,6 +1800,9 @@ public class PackageInstaller {
private String mStagedSessionErrorMessage;
/** {@hide} */
+ public boolean isCommitted;
+
+ /** {@hide} */
@UnsupportedAppUsage
public SessionInfo() {
}
@@ -1809,6 +1842,7 @@ public class PackageInstaller {
isStagedSessionFailed = source.readBoolean();
mStagedSessionErrorCode = source.readInt();
mStagedSessionErrorMessage = source.readString();
+ isCommitted = source.readBoolean();
}
/**
@@ -2181,6 +2215,13 @@ public class PackageInstaller {
mStagedSessionErrorMessage = errorMessage;
}
+ /**
+ * Whenever this session was committed.
+ */
+ public boolean isCommitted() {
+ return isCommitted;
+ }
+
@Override
public int describeContents() {
return 0;
@@ -2218,6 +2259,7 @@ public class PackageInstaller {
dest.writeBoolean(isStagedSessionFailed);
dest.writeInt(mStagedSessionErrorCode);
dest.writeString(mStagedSessionErrorMessage);
+ dest.writeBoolean(isCommitted);
}
public static final Parcelable.Creator<SessionInfo>
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 66b530f19ed8..f1d4524cccac 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -476,6 +476,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
mResolvedBaseFile.getAbsolutePath() : null;
info.progress = mProgress;
info.sealed = mSealed;
+ info.isCommitted = mCommitted;
info.active = mActiveCount.get() > 0;
info.mode = params.mode;