diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index dab85eed9b4a9..bf790fa5ff95f 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -4834,4 +4834,7 @@ false true true + + + true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index beed9a3fe1c5f..1ab3c849cae7a 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -480,6 +480,7 @@ + diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java index 5a99e0e77a6ce..a12b2130b7dcd 100644 --- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java +++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java @@ -106,6 +106,7 @@ public final class AppHibernationService extends SystemService { private final HibernationStateDiskStore mGlobalLevelHibernationDiskStore; private final Injector mInjector; private final Executor mBackgroundExecutor; + private final boolean mOatArtifactDeletionEnabled; @VisibleForTesting boolean mIsServiceEnabled; @@ -133,6 +134,7 @@ public final class AppHibernationService extends SystemService { mUserManager = injector.getUserManager(); mGlobalLevelHibernationDiskStore = injector.getGlobalLevelDiskStore(); mBackgroundExecutor = injector.getBackgroundExecutor(); + mOatArtifactDeletionEnabled = injector.isOatArtifactDeletionEnabled(); mInjector = injector; final Context userAllContext = mContext.createContextAsUser(UserHandle.ALL, 0 /* flags */); @@ -371,7 +373,9 @@ public final class AppHibernationService extends SystemService { @GuardedBy("mLock") private void hibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "hibernatePackageGlobally"); - mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName); + if (mOatArtifactDeletionEnabled) { + mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName); + } state.hibernated = true; Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } @@ -744,6 +748,8 @@ public final class AppHibernationService extends SystemService { HibernationStateDiskStore getGlobalLevelDiskStore(); HibernationStateDiskStore getUserLevelDiskStore(int userId); + + boolean isOatArtifactDeletionEnabled(); } private static final class InjectorImpl implements Injector { @@ -801,5 +807,11 @@ public final class AppHibernationService extends SystemService { return new HibernationStateDiskStore<>( dir, mUserLevelHibernationProto, mScheduledExecutorService); } + + @Override + public boolean isOatArtifactDeletionEnabled() { + return mContext.getResources().getBoolean( + com.android.internal.R.bool.config_hibernationDeletesOatArtifactsEnabled); + } } } diff --git a/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java b/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java index 0dbf3fe0cea3d..9a430e4a0f869 100644 --- a/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java @@ -282,5 +282,10 @@ public final class AppHibernationServiceTest { public HibernationStateDiskStore getUserLevelDiskStore(int userId) { return mock(HibernationStateDiskStore.class); } + + @Override + public boolean isOatArtifactDeletionEnabled() { + return true; + } } }