[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
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user