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

Commit 22fb09c3 authored by John Wu's avatar John Wu
Browse files

Remove system broadcasts related to appId transitioning

There are no longer appId transitions on T. In addition, even if appId
transitioning exists, using broadcasts as a way to propogate this
information within system_server cannot avoid possible race conditions.

Test: m
Bug: 220015249
Change-Id: Ie89cf044f421763e7a54298ba722dca6eead0d3b
parent 5622ee0f
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -119,14 +119,10 @@ public final class BroadcastHelper {
                intent.setPackage(targetPkg);
            }
            // Modify the UID when posting to other users
            final String[] uidExtraNames =
                    { Intent.EXTRA_UID, Intent.EXTRA_PREVIOUS_UID, Intent.EXTRA_NEW_UID };
            for (String name : uidExtraNames) {
                int uid = intent.getIntExtra(name, -1);
            int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
            if (uid >= 0 && UserHandle.getUserId(uid) != userId) {
                uid = UserHandle.getUid(userId, UserHandle.getAppId(uid));
                    intent.putExtra(name, uid);
                }
                intent.putExtra(Intent.EXTRA_UID, uid);
            }
            if (broadcastAllowList != null && PLATFORM_PACKAGE_NAME.equals(targetPkg)) {
                intent.putExtra(Intent.EXTRA_VISIBILITY_ALLOW_LIST,
+1 −6
Original line number Diff line number Diff line
@@ -243,9 +243,7 @@ final class DeletePackageHelper {
        if (res) {
            final boolean killApp = (deleteFlags & PackageManager.DELETE_DONT_KILL_APP) == 0;
            info.sendPackageRemovedBroadcasts(killApp, removedBySystem);
            if (disabledSystemPs != null) {
                info.sendSystemPackageUpdatedBroadcasts(disabledSystemPs.getAppId());
            }
            info.sendSystemPackageUpdatedBroadcasts();
        }

        // Force a gc to clear up things.
@@ -603,9 +601,6 @@ final class DeletePackageHelper {
        if (outInfo != null) {
            // Delete the updated package
            outInfo.mIsRemovedPackageSystemUpdate = true;
            if (disabledPs.getAppId() != deletedPs.getAppId()) {
                outInfo.mNewAppId = disabledPs.getAppId();
            }
        }

        if (disabledPs.getVersionCode() < deletedPs.getVersionCode()
+18 −30
Original line number Diff line number Diff line
@@ -958,10 +958,6 @@ final class InstallPackageHelper {
                    createdAppId.put(packageName, optimisticallyRegisterAppId(result));
                    versionInfos.put(result.mPkgSetting.getPkg().getPackageName(),
                            mPm.getSettingsVersionForPackage(result.mPkgSetting.getPkg()));
                    if (result.needsNewAppId()) {
                        request.mInstallResult.mRemovedInfo.mNewAppId =
                                result.mPkgSetting.getAppId();
                    }
                } catch (PackageManagerException e) {
                    request.mInstallResult.setError("Scanning Failed.", e);
                    return;
@@ -2594,8 +2590,6 @@ final class InstallPackageHelper {
        final int dataLoaderType = installArgs.mDataLoaderType;
        final boolean succeeded = res.mReturnCode == PackageManager.INSTALL_SUCCEEDED;
        final boolean update = res.mRemovedInfo != null && res.mRemovedInfo.mRemovedPackage != null;
        final int previousAppId = (res.mRemovedInfo != null && res.mRemovedInfo.mNewAppId >= 0)
                ? res.mRemovedInfo.mUid : Process.INVALID_UID;
        final String packageName = res.mName;
        final PackageStateInternal pkgSetting =
                succeeded ? mPm.getPackageStateInternal(packageName) : null;
@@ -2703,10 +2697,7 @@ final class InstallPackageHelper {
                // Send added for users that don't see the package for the first time
                Bundle extras = new Bundle();
                extras.putInt(Intent.EXTRA_UID, res.mUid);
                if (previousAppId != Process.INVALID_UID) {
                    extras.putBoolean(Intent.EXTRA_UID_CHANGING, true);
                    extras.putInt(Intent.EXTRA_PREVIOUS_UID, previousAppId);
                } else if (update) {
                if (update) {
                    extras.putBoolean(Intent.EXTRA_REPLACING, true);
                }
                extras.putInt(PackageInstaller.EXTRA_DATA_LOADER_TYPE, dataLoaderType);
@@ -2749,8 +2740,6 @@ final class InstallPackageHelper {

                // Send replaced for users that don't see the package for the first time
                if (update) {
                    // Only send PACKAGE_REPLACED if appId has not changed
                    if (previousAppId == Process.INVALID_UID) {
                    mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED,
                            packageName, extras, 0 /*flags*/,
                            null /*targetPackage*/, null /*finishedReceiver*/,
@@ -2770,7 +2759,6 @@ final class InstallPackageHelper {
                                updateUserIds, instantUserIds, null /*broadcastAllowList*/,
                                null);
                    }
                    }
                    mPm.sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED,
                            null /*package*/, null /*extras*/, 0 /*flags*/,
                            packageName /*targetPackage*/,
+16 −33
Original line number Diff line number Diff line
@@ -38,8 +38,6 @@ final class PackageRemovedInfo {
    String mInstallerPackageName;
    int mUid = -1;
    int mRemovedAppId = -1;
    // If not -1, the app is going through an appId change
    int mNewAppId = -1;
    int[] mOrigUsers;
    int[] mRemovedUsers = null;
    int[] mBroadcastUsers = null;
@@ -67,22 +65,16 @@ final class PackageRemovedInfo {
        sendPackageRemovedBroadcastInternal(killApp, removedBySystem);
    }

    void sendSystemPackageUpdatedBroadcasts(int newAppId) {
    void sendSystemPackageUpdatedBroadcasts() {
        if (mIsRemovedPackageSystemUpdate) {
            sendSystemPackageUpdatedBroadcastsInternal(newAppId);
            sendSystemPackageUpdatedBroadcastsInternal();
        }
    }

    private void sendSystemPackageUpdatedBroadcastsInternal(int newAppId) {
    private void sendSystemPackageUpdatedBroadcastsInternal() {
        Bundle extras = new Bundle(2);
        extras.putInt(Intent.EXTRA_UID, newAppId);
        // When appId changes, do not set the replacing extra
        if (mNewAppId >= 0) {
            extras.putBoolean(Intent.EXTRA_UID_CHANGING, true);
            extras.putInt(Intent.EXTRA_PREVIOUS_UID, mRemovedAppId >= 0 ? mRemovedAppId : mUid);
        } else {
        extras.putInt(Intent.EXTRA_UID, mRemovedAppId >= 0 ? mRemovedAppId : mUid);
        extras.putBoolean(Intent.EXTRA_REPLACING, true);
        }
        mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, mRemovedPackage, extras,
                0, null /*targetPackage*/, null, null, null, mBroadcastAllowList, null);
        if (mInstallerPackageName != null) {
@@ -90,17 +82,13 @@ final class PackageRemovedInfo {
                    mRemovedPackage, extras, 0 /*flags*/,
                    mInstallerPackageName, null, null, null, null /* broadcastAllowList */,
                    null);
        }
        if (mNewAppId < 0) {
            mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, mRemovedPackage,
                    extras, 0, null /*targetPackage*/, null, null, null, mBroadcastAllowList, null);
            if (mInstallerPackageName != null) {
            mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED,
                    mRemovedPackage, extras, 0 /*flags*/,
                    mInstallerPackageName, null, null, null, null /* broadcastAllowList */,
                    null);
        }
        }
        mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, mRemovedPackage,
                extras, 0, null /*targetPackage*/, null, null, null, mBroadcastAllowList, null);
        mPackageSender.sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED, null, null, 0,
                mRemovedPackage, null, null, null, null /* broadcastAllowList */,
                getTemporaryAppAllowlistBroadcastOptions(REASON_PACKAGE_REPLACED).toBundle());
@@ -134,15 +122,10 @@ final class PackageRemovedInfo {
        extras.putBoolean(Intent.EXTRA_DATA_REMOVED, mDataRemoved);
        extras.putBoolean(Intent.EXTRA_DONT_KILL_APP, !killApp);
        extras.putBoolean(Intent.EXTRA_USER_INITIATED, !removedBySystem);

        // When appId changes, do not set the replacing extra
        if (mNewAppId >= 0) {
            extras.putBoolean(Intent.EXTRA_UID_CHANGING, true);
            extras.putInt(Intent.EXTRA_NEW_UID, mNewAppId);
        } else if (mIsUpdate || mIsRemovedPackageSystemUpdate) {
        final boolean isReplace = mIsUpdate || mIsRemovedPackageSystemUpdate;
        if (isReplace) {
            extras.putBoolean(Intent.EXTRA_REPLACING, true);
        }

        extras.putBoolean(Intent.EXTRA_REMOVED_FOR_ALL_USERS, mRemovedForAllUsers);
        if (mRemovedPackage != null) {
            mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REMOVED,
@@ -165,9 +148,9 @@ final class PackageRemovedInfo {
            }
        }
        if (mRemovedAppId >= 0) {
            // If the package is not actually removed, some services need to know the
            // package name affected.
            if (mNewAppId >= 0 || mIsUpdate || mIsRemovedPackageSystemUpdate) {
            // If a system app's updates are uninstalled the UID is not actually removed. Some
            // services need to know the package name affected.
            if (isReplace) {
                extras.putString(Intent.EXTRA_PACKAGE_NAME, mRemovedPackage);
            }