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

Commit 2299382f authored by Songchun Fan's avatar Songchun Fan
Browse files

[pm] cleanup unused PackageManagerInternal APIs for loading progress

Launcher gets loading progress from LauncherActivityInfo directly and
does not need to use the listener. Removing unused methods, plus a bit
of code cleanup.

BUG: 175135603
Test: atest CtsInstalledLoadingProgressHostTests
Test: atest FrameworksServicesTests:com.android.server.pm.IncrementalStatesTest
Change-Id: Icf96f5ca23e567396cfc233725619ba91a953c97
parent 8277f849
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -304,20 +304,16 @@ public final class IncrementalManager {
    }

    /**
     * Called when a callback wants to stop listen to the loading progress of an installed package.
     * Decrease the count of the callbacks on the associated to the corresponding storage.
     * If the count becomes zero, unregister the storage listener.
     * Called to stop all listeners from listening to loading progress of an installed package.
     * @param codePath Path of the installed package
     * @return True if the package name and associated storage id are valid. False otherwise.
     */
    public boolean unregisterLoadingProgressCallback(@NonNull String codePath,
            @NonNull IPackageLoadingProgressCallback callback) {
    public void unregisterLoadingProgressCallbacks(@NonNull String codePath) {
        final IncrementalStorage storage = openStorage(codePath);
        if (storage == null) {
            // storage does not exist, package not installed
            return false;
            return;
        }
        return mLoadingProgressCallbacks.unregisterCallback(storage, callback);
        mLoadingProgressCallbacks.cleanUpCallbacks(storage);
    }

    private static class LoadingProgressCallbacks extends IStorageLoadingProgressListener.Stub {
@@ -325,7 +321,6 @@ public final class IncrementalManager {
        private final SparseArray<RemoteCallbackList<IPackageLoadingProgressCallback>> mCallbacks =
                new SparseArray<>();

        // TODO(b/165841827): disable callbacks when app state changes to fully loaded
        public void cleanUpCallbacks(@NonNull IncrementalStorage storage) {
            final int storageId = storage.getId();
            final RemoteCallbackList<IPackageLoadingProgressCallback> callbacksForStorage;
+0 −22
Original line number Diff line number Diff line
@@ -996,28 +996,6 @@ public abstract class PackageManagerInternal {
     */
    public abstract boolean isSuspendingAnyPackages(String suspendingPackage, int userId);

    /**
     * Register to listen for loading progress of an installed package.
     * @param packageName The name of the installed package
     * @param callback To loading reporting progress
     * @param userId The user under which to check.
     * @return Whether the registration was successful. It can fail if the package has not been
     *          installed yet.
     */
    public abstract boolean registerInstalledLoadingProgressCallback(@NonNull String packageName,
            @NonNull InstalledLoadingProgressCallback callback, int userId);

    /**
     * Unregister to stop listening to loading progress of an installed package
     * @param packageName The name of the installed package
     * @param callback To unregister
     * @return True if the callback is removed from registered callback list. False is the callback
     *         does not exist on the registered callback list, which can happen if the callback has
     *         already been unregistered.
     */
    public abstract boolean unregisterInstalledLoadingProgressCallback(@NonNull String packageName,
            @NonNull InstalledLoadingProgressCallback callback);

    /**
     * Returns the string representation of a known package. For example,
     * {@link #PACKAGE_SETUP_WIZARD} is represented by the string Setup Wizard.
+0 −18
Original line number Diff line number Diff line
@@ -248,24 +248,6 @@ public final class IncrementalStates {
        }
    }

    /**
     * @return the current startable state.
     */
    public boolean isStartable() {
        synchronized (mLock) {
            return mStartableState.isStartable();
        }
    }

    /**
     * @return Whether the package is still being loaded or has been fully loaded.
     */
    public boolean isLoading() {
        synchronized (mLock) {
            return mLoadingState.isLoading();
        }
    }

    /**
     * @return all current states in a Parcelable.
     */
+0 −37
Original line number Diff line number Diff line
@@ -1316,10 +1316,6 @@ public class LauncherAppsService extends SystemService {
                } finally {
                    mListeners.finishBroadcast();
                }
                PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);
                pmi.registerInstalledLoadingProgressCallback(packageName,
                        new PackageLoadingProgressCallback(packageName, user),
                        user.getIdentifier());
                super.onPackageAdded(packageName, uid);
            }

@@ -1542,38 +1538,5 @@ public class LauncherAppsService extends SystemService {
                checkCallbackCount();
            }
        }

        class PackageLoadingProgressCallback extends
                PackageManagerInternal.InstalledLoadingProgressCallback {
            private String mPackageName;
            private UserHandle mUser;

            PackageLoadingProgressCallback(String packageName, UserHandle user) {
                super(mCallbackHandler);
                mPackageName = packageName;
                mUser = user;
            }

            @Override
            public void onLoadingProgressChanged(float progress) {
                final int n = mListeners.beginBroadcast();
                try {
                    for (int i = 0; i < n; i++) {
                        IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
                        BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
                        if (!isEnabledProfileOf(cookie.user, mUser, "onLoadingProgressChanged")) {
                            continue;
                        }
                        try {
                            listener.onPackageLoadingProgressChanged(mUser, mPackageName, progress);
                        } catch (RemoteException re) {
                            Slog.d(TAG, "Callback failed ", re);
                        }
                    }
                } finally {
                    mListeners.finishBroadcast();
                }
            }
        }
    }
}
+7 −53
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import static android.Manifest.permission.SET_HARMFUL_APP_WARNINGS;
import static android.app.AppOpsManager.MODE_DEFAULT;
import static android.app.AppOpsManager.MODE_IGNORED;
import static android.content.Intent.ACTION_MAIN;
import static android.content.Intent.CATEGORY_BROWSABLE;
import static android.content.Intent.CATEGORY_DEFAULT;
import static android.content.Intent.CATEGORY_HOME;
import static android.content.Intent.EXTRA_LONG_VERSION_CODE;
@@ -68,11 +67,7 @@ import static android.content.pm.PackageManager.INSTALL_REASON_DEVICE_RESTORE;
import static android.content.pm.PackageManager.INSTALL_REASON_DEVICE_SETUP;
import static android.content.pm.PackageManager.INSTALL_STAGED;
import static android.content.pm.PackageManager.INSTALL_SUCCEEDED;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
import static android.content.pm.PackageManager.MATCH_ALL;
import static android.content.pm.PackageManager.MATCH_ANY_USER;
import static android.content.pm.PackageManager.MATCH_APEX;
@@ -377,11 +372,6 @@ import com.android.server.pm.dex.DexManager;
import com.android.server.pm.dex.DexoptOptions;
import com.android.server.pm.dex.PackageDexUsage;
import com.android.server.pm.dex.ViewCompiler;
import com.android.server.pm.verify.domain.DomainVerificationManagerInternal;
import com.android.server.pm.verify.domain.DomainVerificationService;
import com.android.server.pm.verify.domain.proxy.DomainVerificationProxy;
import com.android.server.pm.verify.domain.proxy.DomainVerificationProxyV1;
import com.android.server.pm.verify.domain.proxy.DomainVerificationProxyV2;
import com.android.server.pm.parsing.PackageCacher;
import com.android.server.pm.parsing.PackageInfoUtils;
import com.android.server.pm.parsing.PackageParser2;
@@ -395,6 +385,11 @@ import com.android.server.pm.permission.LegacyPermissionManagerService;
import com.android.server.pm.permission.Permission;
import com.android.server.pm.permission.PermissionManagerService;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.pm.verify.domain.DomainVerificationManagerInternal;
import com.android.server.pm.verify.domain.DomainVerificationService;
import com.android.server.pm.verify.domain.proxy.DomainVerificationProxy;
import com.android.server.pm.verify.domain.proxy.DomainVerificationProxyV1;
import com.android.server.pm.verify.domain.proxy.DomainVerificationProxyV2;
import com.android.server.rollback.RollbackManagerInternal;
import com.android.server.security.VerityUtils;
import com.android.server.storage.DeviceStorageMonitorInternal;
@@ -404,7 +399,6 @@ import com.android.server.utils.Watchable;
import com.android.server.utils.Watched;
import com.android.server.utils.WatchedArrayMap;
import com.android.server.utils.WatchedSparseBooleanArray;
import com.android.server.utils.WatchedSparseIntArray;
import com.android.server.utils.Watcher;
import com.android.server.wm.ActivityTaskManagerInternal;
@@ -466,7 +460,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;
/**
 * Keep track of all those APKs everywhere.
@@ -19166,6 +19159,8 @@ public class PackageManagerService extends IPackageManager.Stub
                    extras, 0 /*flags*/,
                    null /*targetPackage*/, null /*finishedReceiver*/,
                    mInstalledUserIds, null /* instantUserIds */, newBroadcastAllowList, null);
            // Unregister progress listener
            mIncrementalManager.unregisterLoadingProgressCallbacks(codePath);
            // Unregister health listener as it will always be healthy from now
            mIncrementalManager.unregisterHealthListener(codePath);
        }
@@ -27042,47 +27037,6 @@ public class PackageManagerService extends IPackageManager.Stub
            return PackageManagerService.this.isSuspendingAnyPackages(suspendingPackage, userId);
        }
        @Override
        public boolean registerInstalledLoadingProgressCallback(String packageName,
                PackageManagerInternal.InstalledLoadingProgressCallback callback, int userId) {
            final PackageSetting ps = getPackageSettingForUser(packageName, Binder.getCallingUid(),
                    userId);
            if (ps == null) {
                return false;
            }
            if (!ps.isPackageLoading()) {
                Slog.w(TAG,
                        "Failed registering loading progress callback. Package is fully loaded.");
                return false;
            }
            if (mIncrementalManager == null) {
                Slog.w(TAG,
                        "Failed registering loading progress callback. Incremental is not enabled");
                return false;
            }
            return mIncrementalManager.registerLoadingProgressCallback(ps.getPathString(),
                    (IPackageLoadingProgressCallback) callback.getBinder());
        }
        @Override
        public boolean unregisterInstalledLoadingProgressCallback(String packageName,
                PackageManagerInternal.InstalledLoadingProgressCallback callback) {
            final PackageSetting ps;
            synchronized (mLock) {
                ps = mSettings.getPackageLPr(packageName);
                if (ps == null) {
                    Slog.w(TAG, "Failed unregistering loading progress callback. Package "
                            + packageName + " is not installed");
                    return false;
                }
            }
            if (mIncrementalManager == null) {
                return false;
            }
            return mIncrementalManager.unregisterLoadingProgressCallback(ps.getPathString(),
                    (IPackageLoadingProgressCallback) callback.getBinder());
        }
        @Override
        public IncrementalStatesInfo getIncrementalStatesInfo(
                @NonNull String packageName, int filterCallingUid, int userId) {
Loading