diff options
8 files changed, 25 insertions, 157 deletions
diff --git a/core/java/android/os/incremental/IncrementalManager.java b/core/java/android/os/incremental/IncrementalManager.java index 7e7057fe56cb..0ff68fc582d8 100644 --- a/core/java/android/os/incremental/IncrementalManager.java +++ b/core/java/android/os/incremental/IncrementalManager.java @@ -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; diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java index 9ccb0c786ebe..6886cdefc28a 100644 --- a/services/core/java/android/content/pm/PackageManagerInternal.java +++ b/services/core/java/android/content/pm/PackageManagerInternal.java @@ -997,28 +997,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. * diff --git a/services/core/java/com/android/server/pm/IncrementalStates.java b/services/core/java/com/android/server/pm/IncrementalStates.java index f5ec595cc45a..ecafdfdbd6f1 100644 --- a/services/core/java/com/android/server/pm/IncrementalStates.java +++ b/services/core/java/com/android/server/pm/IncrementalStates.java @@ -249,24 +249,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. */ public IncrementalStatesInfo getIncrementalStatesInfo() { diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index c4a23f961072..f240d85572c4 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -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(); - } - } - } } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9a84b36038f2..5d4fa1e1c123 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -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; @@ -378,11 +373,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; @@ -396,6 +386,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; @@ -405,7 +400,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; @@ -467,7 +461,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. @@ -19170,6 +19163,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); } @@ -27047,47 +27042,6 @@ public class PackageManagerService extends IPackageManager.Stub } @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) { final PackageSetting ps = getPackageSettingForUser(packageName, filterCallingUid, diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java index 69e84b536004..ca5d2b49b99d 100644 --- a/services/core/java/com/android/server/pm/PackageSetting.java +++ b/services/core/java/com/android/server/pm/PackageSetting.java @@ -344,8 +344,8 @@ public class PackageSetting extends PackageSettingBase { installSource.originatingPackageName); proto.end(sourceToken); } - proto.write(PackageProto.StatesProto.IS_STARTABLE, incrementalStates.isStartable()); - proto.write(PackageProto.StatesProto.IS_LOADING, incrementalStates.isLoading()); + proto.write(PackageProto.StatesProto.IS_STARTABLE, isPackageStartable()); + proto.write(PackageProto.StatesProto.IS_LOADING, isPackageLoading()); writeUsersInfoToProto(proto, PackageProto.USERS); writePackageUserPermissionsProto(proto, PackageProto.USER_PERMISSIONS, users, dataProvider); proto.end(packageToken); diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java index 8aa553d68b98..3a142837e063 100644 --- a/services/core/java/com/android/server/pm/PackageSettingBase.java +++ b/services/core/java/com/android/server/pm/PackageSettingBase.java @@ -26,8 +26,6 @@ import android.annotation.UserIdInt; import android.content.ComponentName; import android.content.pm.ApplicationInfo; import android.content.pm.IncrementalStatesInfo; -import android.content.pm.IntentFilterVerificationInfo; -import android.content.pm.PackageManager; import android.content.pm.PackageManager.UninstallReason; import android.content.pm.PackageParser; import android.content.pm.PackageUserState; @@ -42,8 +40,6 @@ import android.util.SparseArray; import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.VisibleForTesting; -import com.android.server.pm.verify.domain.DomainVerificationManagerInternal; -import com.android.server.pm.verify.domain.DomainVerificationService; import com.android.server.pm.parsing.pkg.AndroidPackage; import java.io.File; @@ -731,14 +727,14 @@ public abstract class PackageSettingBase extends SettingBase { * @return True if package is startable, false otherwise. */ public boolean isPackageStartable() { - return incrementalStates.isStartable(); + return getIncrementalStates().isStartable(); } /** * @return True if package is still being loaded, false if the package is fully loaded. */ public boolean isPackageLoading() { - return incrementalStates.isLoading(); + return getIncrementalStates().isLoading(); } /** diff --git a/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java b/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java index 9ba096766be2..7b9a00d582be 100644 --- a/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java @@ -71,12 +71,12 @@ public class IncrementalStatesTest { @Before public void setUp() { mIncrementalStates = new IncrementalStates(); - assertFalse(mIncrementalStates.isStartable()); + assertFalse(mIncrementalStates.getIncrementalStatesInfo().isStartable()); mIncrementalStates.setCallback(mCallback); mIncrementalStates.onCommit(true); // Test that package is now startable and loading - assertTrue(mIncrementalStates.isStartable()); - assertTrue(mIncrementalStates.isLoading()); + assertTrue(mIncrementalStates.getIncrementalStatesInfo().isStartable()); + assertTrue(mIncrementalStates.getIncrementalStatesInfo().isLoading()); mUnstartableCalled.close(); mFullyLoadedCalled.close(); } @@ -90,7 +90,7 @@ public class IncrementalStatesTest { IStorageHealthListener.HEALTH_STATUS_UNHEALTHY); // Test that package is still startable assertFalse(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS)); - assertTrue(mIncrementalStates.isStartable()); + assertTrue(mIncrementalStates.getIncrementalStatesInfo().isStartable()); assertEquals(PackageManager.UNSTARTABLE_REASON_UNKNOWN, mUnstartableReason.get()); } @@ -104,7 +104,7 @@ public class IncrementalStatesTest { IStorageHealthListener.HEALTH_STATUS_READS_PENDING); // Test that package is still startable assertFalse(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS)); - assertTrue(mIncrementalStates.isStartable()); + assertTrue(mIncrementalStates.getIncrementalStatesInfo().isStartable()); } /** @@ -116,7 +116,7 @@ public class IncrementalStatesTest { IStorageHealthListener.HEALTH_STATUS_UNHEALTHY_STORAGE); // Test that package is still startable assertFalse(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS)); - assertTrue(mIncrementalStates.isStartable()); + assertTrue(mIncrementalStates.getIncrementalStatesInfo().isStartable()); assertEquals(PackageManager.UNSTARTABLE_REASON_UNKNOWN, mUnstartableReason.get()); } @@ -130,7 +130,7 @@ public class IncrementalStatesTest { IStorageHealthListener.HEALTH_STATUS_UNHEALTHY_TRANSPORT); // Test that package is still startable assertFalse(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS)); - assertTrue(mIncrementalStates.isStartable()); + assertTrue(mIncrementalStates.getIncrementalStatesInfo().isStartable()); assertEquals(PackageManager.UNSTARTABLE_REASON_UNKNOWN, mUnstartableReason.get()); } @@ -145,12 +145,12 @@ public class IncrementalStatesTest { mIncrementalStates.setProgress(1.0f); // Test that package is now fully loaded assertTrue(mFullyLoadedCalled.block(WAIT_TIMEOUT_MILLIS)); - assertFalse(mIncrementalStates.isLoading()); + assertFalse(mIncrementalStates.getIncrementalStatesInfo().isLoading()); mIncrementalStates.onStorageHealthStatusChanged( IStorageHealthListener.HEALTH_STATUS_UNHEALTHY); // Test that package is still startable assertFalse(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS)); - assertTrue(mIncrementalStates.isStartable()); + assertTrue(mIncrementalStates.getIncrementalStatesInfo().isStartable()); } /** @@ -159,6 +159,6 @@ public class IncrementalStatesTest { @Test public void testStartableTransition_AppCrashOrAnr() { mIncrementalStates.onCrashOrAnr(); - assertTrue(mIncrementalStates.isStartable()); + assertTrue(mIncrementalStates.getIncrementalStatesInfo().isStartable()); } } |