Loading services/core/java/com/android/server/pm/ApexManager.java +27 −19 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.os.Environment; import android.os.RemoteException; import android.os.ServiceManager; import android.sysprop.ApexProperties; import android.util.Singleton; import android.util.Slog; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -65,23 +66,32 @@ abstract class ApexManager { static final int MATCH_ACTIVE_PACKAGE = 1 << 0; static final int MATCH_FACTORY_PACKAGE = 1 << 1; /** * Returns an instance of either {@link ApexManagerImpl} or {@link ApexManagerFlattenedApex} * depending on whether this device supports APEX, i.e. {@link ApexProperties#updatable()} * evaluates to {@code true}. */ static ApexManager create(Context systemContext) { private static final Singleton<ApexManager> sApexManagerSingleton = new Singleton<ApexManager>() { @Override protected ApexManager create() { if (ApexProperties.updatable().orElse(false)) { try { return new ApexManagerImpl(systemContext, IApexService.Stub.asInterface( return new ApexManagerImpl(IApexService.Stub.asInterface( ServiceManager.getServiceOrThrow("apexservice"))); } catch (ServiceManager.ServiceNotFoundException e) { throw new IllegalStateException("Required service apexservice not available"); throw new IllegalStateException( "Required service apexservice not available"); } } else { return new ApexManagerFlattenedApex(); } } }; /** * Returns an instance of either {@link ApexManagerImpl} or {@link ApexManagerFlattenedApex} * depending on whether this device supports APEX, i.e. {@link ApexProperties#updatable()} * evaluates to {@code true}. */ static ApexManager getInstance() { return sApexManagerSingleton.get(); } /** * Minimal information about APEX mount points and the original APEX package they refer to. Loading @@ -101,7 +111,7 @@ abstract class ApexManager { */ abstract List<ActiveApexInfo> getActiveApexInfos(); abstract void systemReady(); abstract void systemReady(Context context); /** * Retrieves information about an APEX package. Loading Loading @@ -248,7 +258,6 @@ abstract class ApexManager { @VisibleForTesting static class ApexManagerImpl extends ApexManager { private final IApexService mApexService; private final Context mContext; private final Object mLock = new Object(); /** * A map from {@code APEX packageName} to the {@Link PackageInfo} generated from the {@code Loading @@ -260,8 +269,7 @@ abstract class ApexManager { @GuardedBy("mLock") private List<PackageInfo> mAllPackagesCache; ApexManagerImpl(Context context, IApexService apexService) { mContext = context; ApexManagerImpl(IApexService apexService) { mApexService = apexService; } Loading Loading @@ -302,14 +310,14 @@ abstract class ApexManager { } @Override void systemReady() { mContext.registerReceiver(new BroadcastReceiver() { void systemReady(Context context) { context.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Post populateAllPackagesCacheIfNeeded to a background thread, since it's // expensive to run it in broadcast handler thread. BackgroundThread.getHandler().post(() -> populateAllPackagesCacheIfNeeded()); mContext.unregisterReceiver(this); context.unregisterReceiver(this); } }, new IntentFilter(Intent.ACTION_BOOT_COMPLETED)); } Loading Loading @@ -643,7 +651,7 @@ abstract class ApexManager { } @Override void systemReady() { void systemReady(Context context) { // No-op } Loading services/core/java/com/android/server/pm/PackageManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2605,7 +2605,7 @@ public class PackageManagerService extends IPackageManager.Stub mProtectedPackages = new ProtectedPackages(mContext); mApexManager = ApexManager.create(mContext); mApexManager = ApexManager.getInstance(); mAppsFilter = mInjector.getAppsFilter(); mDirsToScanAsSystem = new ArrayList<>(); Loading Loading @@ -20371,7 +20371,7 @@ public class PackageManagerService extends IPackageManager.Stub storage.registerListener(mStorageListener); mInstallerService.systemReady(); mApexManager.systemReady(); mApexManager.systemReady(mContext); mPackageDexOptimizer.systemReady(); mInjector.getStorageManagerInternal().addExternalStoragePolicy( services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ public class ApexManagerTest { @Before public void setUp() throws RemoteException { mContext = InstrumentationRegistry.getInstrumentation().getContext(); mApexManager = new ApexManager.ApexManagerImpl(mContext, mApexService); mApexManager = new ApexManager.ApexManagerImpl(mApexService); } @Test Loading Loading
services/core/java/com/android/server/pm/ApexManager.java +27 −19 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.os.Environment; import android.os.RemoteException; import android.os.ServiceManager; import android.sysprop.ApexProperties; import android.util.Singleton; import android.util.Slog; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -65,23 +66,32 @@ abstract class ApexManager { static final int MATCH_ACTIVE_PACKAGE = 1 << 0; static final int MATCH_FACTORY_PACKAGE = 1 << 1; /** * Returns an instance of either {@link ApexManagerImpl} or {@link ApexManagerFlattenedApex} * depending on whether this device supports APEX, i.e. {@link ApexProperties#updatable()} * evaluates to {@code true}. */ static ApexManager create(Context systemContext) { private static final Singleton<ApexManager> sApexManagerSingleton = new Singleton<ApexManager>() { @Override protected ApexManager create() { if (ApexProperties.updatable().orElse(false)) { try { return new ApexManagerImpl(systemContext, IApexService.Stub.asInterface( return new ApexManagerImpl(IApexService.Stub.asInterface( ServiceManager.getServiceOrThrow("apexservice"))); } catch (ServiceManager.ServiceNotFoundException e) { throw new IllegalStateException("Required service apexservice not available"); throw new IllegalStateException( "Required service apexservice not available"); } } else { return new ApexManagerFlattenedApex(); } } }; /** * Returns an instance of either {@link ApexManagerImpl} or {@link ApexManagerFlattenedApex} * depending on whether this device supports APEX, i.e. {@link ApexProperties#updatable()} * evaluates to {@code true}. */ static ApexManager getInstance() { return sApexManagerSingleton.get(); } /** * Minimal information about APEX mount points and the original APEX package they refer to. Loading @@ -101,7 +111,7 @@ abstract class ApexManager { */ abstract List<ActiveApexInfo> getActiveApexInfos(); abstract void systemReady(); abstract void systemReady(Context context); /** * Retrieves information about an APEX package. Loading Loading @@ -248,7 +258,6 @@ abstract class ApexManager { @VisibleForTesting static class ApexManagerImpl extends ApexManager { private final IApexService mApexService; private final Context mContext; private final Object mLock = new Object(); /** * A map from {@code APEX packageName} to the {@Link PackageInfo} generated from the {@code Loading @@ -260,8 +269,7 @@ abstract class ApexManager { @GuardedBy("mLock") private List<PackageInfo> mAllPackagesCache; ApexManagerImpl(Context context, IApexService apexService) { mContext = context; ApexManagerImpl(IApexService apexService) { mApexService = apexService; } Loading Loading @@ -302,14 +310,14 @@ abstract class ApexManager { } @Override void systemReady() { mContext.registerReceiver(new BroadcastReceiver() { void systemReady(Context context) { context.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Post populateAllPackagesCacheIfNeeded to a background thread, since it's // expensive to run it in broadcast handler thread. BackgroundThread.getHandler().post(() -> populateAllPackagesCacheIfNeeded()); mContext.unregisterReceiver(this); context.unregisterReceiver(this); } }, new IntentFilter(Intent.ACTION_BOOT_COMPLETED)); } Loading Loading @@ -643,7 +651,7 @@ abstract class ApexManager { } @Override void systemReady() { void systemReady(Context context) { // No-op } Loading
services/core/java/com/android/server/pm/PackageManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2605,7 +2605,7 @@ public class PackageManagerService extends IPackageManager.Stub mProtectedPackages = new ProtectedPackages(mContext); mApexManager = ApexManager.create(mContext); mApexManager = ApexManager.getInstance(); mAppsFilter = mInjector.getAppsFilter(); mDirsToScanAsSystem = new ArrayList<>(); Loading Loading @@ -20371,7 +20371,7 @@ public class PackageManagerService extends IPackageManager.Stub storage.registerListener(mStorageListener); mInstallerService.systemReady(); mApexManager.systemReady(); mApexManager.systemReady(mContext); mPackageDexOptimizer.systemReady(); mInjector.getStorageManagerInternal().addExternalStoragePolicy(
services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ public class ApexManagerTest { @Before public void setUp() throws RemoteException { mContext = InstrumentationRegistry.getInstrumentation().getContext(); mApexManager = new ApexManager.ApexManagerImpl(mContext, mApexService); mApexManager = new ApexManager.ApexManagerImpl(mApexService); } @Test Loading