Merge "Add getter for UidFrozenState" into udc-dev

This commit is contained in:
Mark Fasheh
2023-03-29 06:45:07 +00:00
committed by Android (Google) Code Review
5 changed files with 65 additions and 2 deletions

View File

@@ -18,6 +18,7 @@ package android.app {
public class ActivityManager {
method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void addHomeVisibilityListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.HomeVisibilityListener);
method @NonNull @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int[] getUidFrozenState(@NonNull int[]);
method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void registerUidFrozenStateChangedCallback(@NonNull java.util.concurrent.Executor, @NonNull android.app.ActivityManager.UidFrozenStateChangedCallback);
method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void removeHomeVisibilityListener(@NonNull android.app.HomeVisibilityListener);
method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void unregisterUidFrozenStateChangedCallback(@NonNull android.app.ActivityManager.UidFrozenStateChangedCallback);

View File

@@ -131,6 +131,7 @@ package android.app {
method public void alwaysShowUnsupportedCompileSdkWarning(android.content.ComponentName);
method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public int[] getDisplayIdsForStartingVisibleBackgroundUsers();
method public long getTotalRam();
method @NonNull @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int[] getUidFrozenState(@NonNull int[]);
method @RequiresPermission(allOf={android.Manifest.permission.PACKAGE_USAGE_STATS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}, conditional=true) public int getUidProcessCapabilities(int);
method @RequiresPermission(allOf={android.Manifest.permission.PACKAGE_USAGE_STATS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}, conditional=true) public int getUidProcessState(int);
method public void holdLock(android.os.IBinder, int);

View File

@@ -362,6 +362,30 @@ public class ActivityManager {
}
}
/**
* Query the frozen state of a list of UIDs.
*
* @param uids the array of UIDs which the client would like to know the frozen state of.
* @return An array containing the frozen state for each requested UID, by index. Will be set
* to {@link UidFrozenStateChangedCallback#UID_FROZEN_STATE_FROZEN}
* if the UID is frozen. If the UID is not frozen or not found,
* {@link UidFrozenStateChangedCallback#UID_FROZEN_STATE_UNFROZEN}
* will be set.
*
* @hide
*/
@RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
@TestApi
public @NonNull @UidFrozenStateChangedCallback.UidFrozenState
int[] getUidFrozenState(@NonNull int[] uids) {
try {
return getService().getUidFrozenState(uids);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code
* <meta-data>}</a> name for a 'home' Activity that declares a package that is to be

View File

@@ -882,4 +882,6 @@ interface IActivityManager {
void registerUidFrozenStateChangedCallback(in IUidFrozenStateChangedCallback callback);
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS)")
void unregisterUidFrozenStateChangedCallback(in IUidFrozenStateChangedCallback callback);
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS)")
int[] getUidFrozenState(in int[] uids);
}

View File

@@ -38,6 +38,8 @@ import static android.app.ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND;
import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT;
import static android.app.ActivityManager.PROCESS_STATE_TOP;
import static android.app.ActivityManager.StopUserOnSwitch;
import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_FROZEN;
import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_UNFROZEN;
import static android.app.ActivityManagerInternal.ALLOW_FULL_ONLY;
import static android.app.ActivityManagerInternal.ALLOW_NON_FULL;
import static android.app.ActivityManagerInternal.MEDIA_PROJECTION_TOKEN_EVENT_CREATED;
@@ -7500,9 +7502,9 @@ public class ActivityManagerService extends IActivityManager.Stub
@Override
public void registerUidFrozenStateChangedCallback(
@NonNull IUidFrozenStateChangedCallback callback) {
Preconditions.checkNotNull(callback, "callback cannot be null");
enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
"registerUidFrozenStateChangedCallback()");
Preconditions.checkNotNull(callback, "callback cannot be null");
synchronized (mUidFrozenStateChangedCallbackList) {
final boolean registered = mUidFrozenStateChangedCallbackList.register(callback);
if (!registered) {
@@ -7520,14 +7522,47 @@ public class ActivityManagerService extends IActivityManager.Stub
@Override
public void unregisterUidFrozenStateChangedCallback(
@NonNull IUidFrozenStateChangedCallback callback) {
Preconditions.checkNotNull(callback, "callback cannot be null");
enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
"unregisterUidFrozenStateChangedCallback()");
Preconditions.checkNotNull(callback, "callback cannot be null");
synchronized (mUidFrozenStateChangedCallbackList) {
mUidFrozenStateChangedCallbackList.unregister(callback);
}
}
/**
* Query the frozen state of a list of UIDs.
*
* @param uids the array of UIDs which the client would like to know the frozen state of.
* @return An array containing the frozen state for each requested UID, by index. Will be set
* to {@link UidFrozenStateChangedCallback#UID_FROZEN_STATE_FROZEN}
* if the UID is frozen. If the UID is not frozen or not found,
* {@link UidFrozenStateChangedCallback#UID_FROZEN_STATE_UNFROZEN}
* will be set.
*
* @hide
*/
@RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
@Override
public @NonNull int[] getUidFrozenState(@NonNull int[] uids) {
Preconditions.checkNotNull(uids, "uid array cannot be null");
enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
"getUidFrozenState()");
final int[] frozenStates = new int[uids.length];
synchronized (mProcLock) {
for (int i = 0; i < uids.length; i++) {
final UidRecord uidRec = mProcessList.mActiveUids.get(uids[i]);
if (uidRec != null && uidRec.areAllProcessesFrozen()) {
frozenStates[i] = UID_FROZEN_STATE_FROZEN;
} else {
frozenStates[i] = UID_FROZEN_STATE_UNFROZEN;
}
}
}
return frozenStates;
}
/**
* Notify the system that a UID has been frozen or unfrozen.
*