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

Commit 2aba3470 authored by yuqingmao's avatar yuqingmao
Browse files

Add API of isOatArtifactDeletionEnabled for system apps

The interface of `isOatArtifactDeletionEnabled` is only available on internal system server. As request from ART service, it should be an open API available in system apps, for logic of `canOptimizePackage` and other purposes.

Bug: 229203212
Test: atest AppHibernationIntegrationTest

Change-Id: I195fdddcce2451e230414ce1a02202e9f8c6af19
parent 2f9bad8e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2744,6 +2744,7 @@ package android.apphibernation {
    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public java.util.Map<java.lang.String,android.apphibernation.HibernationStats> getHibernationStatsForUser();
    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingForUser(@NonNull String);
    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingGlobally(@NonNull String);
    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isOatArtifactDeletionEnabled();
    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingForUser(@NonNull String, boolean);
    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingGlobally(@NonNull String, boolean);
  }
+16 −1
Original line number Diff line number Diff line
@@ -166,4 +166,19 @@ public class AppHibernationManager {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Whether global hibernation should delete ART ahead-of-time compilation artifacts
     * and prevent package manager from re-optimizing the APK.
     * @hide
     */
    @SystemApi
    @RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION)
    public boolean isOatArtifactDeletionEnabled() {
        try {
            return mIAppHibernationService.isOatArtifactDeletionEnabled();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -30,4 +30,6 @@ interface IAppHibernationService {
    List<String> getHibernatingPackagesForUser(int userId);
    Map<String, HibernationStats> getHibernationStatsForUser(in List<String> packageNames,
            int userId);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION)")
    boolean isOatArtifactDeletionEnabled();
}
 No newline at end of file
+8 −0
Original line number Diff line number Diff line
@@ -210,6 +210,9 @@ public final class AppHibernationService extends SystemService {
     * package manager from re-optimizing the APK.
     */
    private boolean isOatArtifactDeletionEnabled() {
        getContext().enforceCallingOrSelfPermission(
                android.Manifest.permission.MANAGE_APP_HIBERNATION,
                "Caller does not have MANAGE_APP_HIBERNATION permission.");
        return mOatArtifactDeletionEnabled;
    }

@@ -872,6 +875,11 @@ public final class AppHibernationService extends SystemService {
            return mService.getHibernationStatsForUser(pkgsSet, userId);
        }

        @Override
        public boolean isOatArtifactDeletionEnabled() {
            return mService.isOatArtifactDeletionEnabled();
        }

        @Override
        public void onShellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out,
                @Nullable FileDescriptor err, @NonNull String[] args,