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

Commit e487ea2e authored by Dario Freni's avatar Dario Freni
Browse files

Send a broadcast for staged session state changes.

Bug: 118865310
Bug: 112669193
Bug: 120487127
Test: wrote small app to receive broadcast, ran adb install --staged
some.apk and verified that the broadcast is received successfully.
Change-Id: Ib8672a03a0e7033bcdc0ffbbbb5c65b8929e8e08
parent 6a297058
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -11302,6 +11302,7 @@ package android.content.pm {
    method public void updateSessionAppLabel(int, java.lang.CharSequence);
    field public static final java.lang.String ACTION_SESSION_COMMITTED = "android.content.pm.action.SESSION_COMMITTED";
    field public static final java.lang.String ACTION_SESSION_DETAILS = "android.content.pm.action.SESSION_DETAILS";
    field public static final java.lang.String ACTION_SESSION_UPDATED = "android.content.pm.action.SESSION_UPDATED";
    field public static final java.lang.String EXTRA_OTHER_PACKAGE_NAME = "android.content.pm.extra.OTHER_PACKAGE_NAME";
    field public static final java.lang.String EXTRA_PACKAGE_NAME = "android.content.pm.extra.PACKAGE_NAME";
    field public static final java.lang.String EXTRA_SESSION = "android.content.pm.extra.SESSION";
+9 −0
Original line number Diff line number Diff line
@@ -145,6 +145,15 @@ public class PackageInstaller {
    public static final String ACTION_SESSION_COMMITTED =
            "android.content.pm.action.SESSION_COMMITTED";

    /**
     * Broadcast Action: Send information about a staged install session when its state is updated.
     * <p>
     * The associated session information is defined in {@link #EXTRA_SESSION}.
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_SESSION_UPDATED =
            "android.content.pm.action.SESSION_UPDATED";

    /** {@hide} */
    public static final String ACTION_CONFIRM_INSTALL = "android.content.pm.action.CONFIRM_INSTALL";

+1 −0
Original line number Diff line number Diff line
@@ -611,6 +611,7 @@
    <protected-broadcast android:name="android.intent.action.DOCK_ACTIVE" />

    <!-- Added in Q -->
    <protected-broadcast android:name="android.content.pm.action.SESSION_UPDATED" />

    <!-- For CarIdlenessTracker -->
    <protected-broadcast android:name="com.android.server.jobscheduler.GARAGE_MODE_ON" />
+1 −0
Original line number Diff line number Diff line
@@ -1065,6 +1065,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        if (isStaged()) {
            // STOPSHIP: implement staged sessions
            mStagedSessionReady = true;
            mPm.sendSessionUpdatedBroadcast(generateInfo(), userId);
            dispatchSessionFinished(PackageManager.INSTALL_SUCCEEDED, "Session staged", null);
            return;
        }
+11 −1
Original line number Diff line number Diff line
@@ -325,7 +325,6 @@ import dalvik.system.VMRuntime;
import libcore.io.IoUtils;
import libcore.util.EmptyArray;
import libcore.util.HexEncoding;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -19484,6 +19483,17 @@ public class PackageManagerService extends IPackageManager.Stub
        return getHomeActivitiesAsUser(allHomeCandidates, UserHandle.getCallingUserId());
    }
    /**
     * Send a {@code PackageInstaller.ACTION_SESSION_UPDATED} broadcast intent, containing
     * the {@code sessionInfo} in the extra field {@code PackageInstaller.EXTRA_SESSION}.
     */
    public void sendSessionUpdatedBroadcast(PackageInstaller.SessionInfo sessionInfo,
            int userId) {
        Intent sessionUpdatedIntent = new Intent(PackageInstaller.ACTION_SESSION_UPDATED)
                .putExtra(PackageInstaller.EXTRA_SESSION, sessionInfo);
        mContext.sendBroadcastAsUser(sessionUpdatedIntent, UserHandle.of(userId));
    }
    public void sendSessionCommitBroadcast(PackageInstaller.SessionInfo sessionInfo, int userId) {
        UserManagerService ums = UserManagerService.getInstance();
        if (ums != null) {