Merge "Implement system API for monitoring uid importance changes."
This commit is contained in:
committed by
Android (Google) Code Review
commit
cdb31d2ecd
@@ -11800,14 +11800,14 @@ package android.graphics {
|
||||
method public deprecated boolean clipRegion(android.graphics.Region);
|
||||
method public void concat(android.graphics.Matrix);
|
||||
method public void drawARGB(int, int, int, int);
|
||||
method public void drawArc(float, float, float, float, float, float, boolean, android.graphics.Paint);
|
||||
method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint);
|
||||
method public void drawArc(float, float, float, float, float, float, boolean, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, float, float, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Rect, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.RectF, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Rect, android.graphics.Paint);
|
||||
method public deprecated void drawBitmap(int[], int, int, float, float, int, int, boolean, android.graphics.Paint);
|
||||
method public deprecated void drawBitmap(int[], int, int, int, int, int, int, boolean, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android.graphics.Paint);
|
||||
method public void drawBitmapMesh(android.graphics.Bitmap, int, int, float[], int, int[], int, android.graphics.Paint);
|
||||
method public void drawCircle(float, float, float, android.graphics.Paint);
|
||||
method public void drawColor(int);
|
||||
@@ -11815,28 +11815,28 @@ package android.graphics {
|
||||
method public void drawLine(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawLines(float[], int, int, android.graphics.Paint);
|
||||
method public void drawLines(float[], android.graphics.Paint);
|
||||
method public void drawOval(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawOval(android.graphics.RectF, android.graphics.Paint);
|
||||
method public void drawOval(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawPaint(android.graphics.Paint);
|
||||
method public void drawPath(android.graphics.Path, android.graphics.Paint);
|
||||
method public void drawPicture(android.graphics.Picture);
|
||||
method public void drawPicture(android.graphics.Picture, android.graphics.Rect);
|
||||
method public void drawPicture(android.graphics.Picture, android.graphics.RectF);
|
||||
method public void drawPicture(android.graphics.Picture, android.graphics.Rect);
|
||||
method public void drawPoint(float, float, android.graphics.Paint);
|
||||
method public void drawPoints(float[], int, int, android.graphics.Paint);
|
||||
method public void drawPoints(float[], android.graphics.Paint);
|
||||
method public deprecated void drawPosText(char[], int, int, float[], android.graphics.Paint);
|
||||
method public deprecated void drawPosText(java.lang.String, float[], android.graphics.Paint);
|
||||
method public void drawRGB(int, int, int);
|
||||
method public void drawRect(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawRect(android.graphics.Rect, android.graphics.Paint);
|
||||
method public void drawRect(android.graphics.RectF, android.graphics.Paint);
|
||||
method public void drawRoundRect(float, float, float, float, float, float, android.graphics.Paint);
|
||||
method public void drawRect(android.graphics.Rect, android.graphics.Paint);
|
||||
method public void drawRect(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawRoundRect(android.graphics.RectF, float, float, android.graphics.Paint);
|
||||
method public void drawRoundRect(float, float, float, float, float, float, android.graphics.Paint);
|
||||
method public void drawText(char[], int, int, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.String, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.String, int, int, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint);
|
||||
method public void drawTextOnPath(char[], int, int, android.graphics.Path, float, float, android.graphics.Paint);
|
||||
method public void drawTextOnPath(java.lang.String, android.graphics.Path, float, float, android.graphics.Paint);
|
||||
method public void drawTextRun(char[], int, int, int, int, float, float, boolean, android.graphics.Paint);
|
||||
@@ -32103,6 +32103,15 @@ package android.provider {
|
||||
field public static final java.lang.String MIME_TYPE_DIR = "vnd.android.document/directory";
|
||||
}
|
||||
|
||||
public static final class DocumentsContract.Path implements android.os.Parcelable {
|
||||
ctor public DocumentsContract.Path(java.lang.String, java.util.List<java.lang.String>);
|
||||
method public int describeContents();
|
||||
method public java.util.List<java.lang.String> getPath();
|
||||
method public java.lang.String getRootId();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field public static final android.os.Parcelable.Creator<android.provider.DocumentsContract.Path> CREATOR;
|
||||
}
|
||||
|
||||
public static final class DocumentsContract.Root {
|
||||
field public static final java.lang.String COLUMN_AVAILABLE_BYTES = "available_bytes";
|
||||
field public static final java.lang.String COLUMN_CAPACITY_BYTES = "capacity_bytes";
|
||||
@@ -32120,15 +32129,6 @@ package android.provider {
|
||||
field public static final int FLAG_SUPPORTS_SEARCH = 8; // 0x8
|
||||
}
|
||||
|
||||
public static final class DocumentsContract.Path implements android.os.Parcelable {
|
||||
ctor public DocumentsContract.Path(java.lang.String, java.util.List<java.lang.String>);
|
||||
method public int describeContents();
|
||||
method public java.util.List<java.lang.String> getPath();
|
||||
method public java.lang.String getRootId();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field public static final android.os.Parcelable.Creator<android.provider.DocumentsContract.Path> CREATOR;
|
||||
}
|
||||
|
||||
public abstract class DocumentsProvider extends android.content.ContentProvider {
|
||||
ctor public DocumentsProvider();
|
||||
method public java.lang.String copyDocument(java.lang.String, java.lang.String) throws java.io.FileNotFoundException;
|
||||
|
||||
@@ -3819,6 +3819,7 @@ package android.app {
|
||||
|
||||
public class ActivityManager {
|
||||
method public int addAppTask(android.app.Activity, android.content.Intent, android.app.ActivityManager.TaskDescription, android.graphics.Bitmap);
|
||||
method public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int);
|
||||
method public boolean clearApplicationUserData();
|
||||
method public void clearWatchHeapLimit();
|
||||
method public void dumpPackageState(java.io.FileDescriptor, java.lang.String);
|
||||
@@ -3849,6 +3850,7 @@ package android.app {
|
||||
method public void killUid(int, java.lang.String);
|
||||
method public void moveTaskToFront(int, int);
|
||||
method public void moveTaskToFront(int, int, android.os.Bundle);
|
||||
method public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener);
|
||||
method public deprecated void restartPackage(java.lang.String);
|
||||
method public static void setVrThread(int);
|
||||
method public void setWatchHeapLimit(long);
|
||||
@@ -3883,6 +3885,10 @@ package android.app {
|
||||
field public long totalMem;
|
||||
}
|
||||
|
||||
public static abstract interface ActivityManager.OnUidImportanceListener {
|
||||
method public abstract void onUidImportance(int, int);
|
||||
}
|
||||
|
||||
public static class ActivityManager.ProcessErrorStateInfo implements android.os.Parcelable {
|
||||
ctor public ActivityManager.ProcessErrorStateInfo();
|
||||
method public int describeContents();
|
||||
@@ -12251,14 +12257,14 @@ package android.graphics {
|
||||
method public deprecated boolean clipRegion(android.graphics.Region);
|
||||
method public void concat(android.graphics.Matrix);
|
||||
method public void drawARGB(int, int, int, int);
|
||||
method public void drawArc(float, float, float, float, float, float, boolean, android.graphics.Paint);
|
||||
method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint);
|
||||
method public void drawArc(float, float, float, float, float, float, boolean, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, float, float, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Rect, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.RectF, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Rect, android.graphics.Paint);
|
||||
method public deprecated void drawBitmap(int[], int, int, float, float, int, int, boolean, android.graphics.Paint);
|
||||
method public deprecated void drawBitmap(int[], int, int, int, int, int, int, boolean, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android.graphics.Paint);
|
||||
method public void drawBitmapMesh(android.graphics.Bitmap, int, int, float[], int, int[], int, android.graphics.Paint);
|
||||
method public void drawCircle(float, float, float, android.graphics.Paint);
|
||||
method public void drawColor(int);
|
||||
@@ -12266,28 +12272,28 @@ package android.graphics {
|
||||
method public void drawLine(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawLines(float[], int, int, android.graphics.Paint);
|
||||
method public void drawLines(float[], android.graphics.Paint);
|
||||
method public void drawOval(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawOval(android.graphics.RectF, android.graphics.Paint);
|
||||
method public void drawOval(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawPaint(android.graphics.Paint);
|
||||
method public void drawPath(android.graphics.Path, android.graphics.Paint);
|
||||
method public void drawPicture(android.graphics.Picture);
|
||||
method public void drawPicture(android.graphics.Picture, android.graphics.Rect);
|
||||
method public void drawPicture(android.graphics.Picture, android.graphics.RectF);
|
||||
method public void drawPicture(android.graphics.Picture, android.graphics.Rect);
|
||||
method public void drawPoint(float, float, android.graphics.Paint);
|
||||
method public void drawPoints(float[], int, int, android.graphics.Paint);
|
||||
method public void drawPoints(float[], android.graphics.Paint);
|
||||
method public deprecated void drawPosText(char[], int, int, float[], android.graphics.Paint);
|
||||
method public deprecated void drawPosText(java.lang.String, float[], android.graphics.Paint);
|
||||
method public void drawRGB(int, int, int);
|
||||
method public void drawRect(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawRect(android.graphics.Rect, android.graphics.Paint);
|
||||
method public void drawRect(android.graphics.RectF, android.graphics.Paint);
|
||||
method public void drawRoundRect(float, float, float, float, float, float, android.graphics.Paint);
|
||||
method public void drawRect(android.graphics.Rect, android.graphics.Paint);
|
||||
method public void drawRect(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawRoundRect(android.graphics.RectF, float, float, android.graphics.Paint);
|
||||
method public void drawRoundRect(float, float, float, float, float, float, android.graphics.Paint);
|
||||
method public void drawText(char[], int, int, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.String, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.String, int, int, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint);
|
||||
method public void drawTextOnPath(char[], int, int, android.graphics.Path, float, float, android.graphics.Paint);
|
||||
method public void drawTextOnPath(java.lang.String, android.graphics.Path, float, float, android.graphics.Paint);
|
||||
method public void drawTextRun(char[], int, int, int, int, float, float, boolean, android.graphics.Paint);
|
||||
|
||||
@@ -3699,6 +3699,7 @@ package android.app {
|
||||
|
||||
public class ActivityManager {
|
||||
method public int addAppTask(android.app.Activity, android.content.Intent, android.app.ActivityManager.TaskDescription, android.graphics.Bitmap);
|
||||
method public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int);
|
||||
method public boolean clearApplicationUserData();
|
||||
method public void clearWatchHeapLimit();
|
||||
method public void dumpPackageState(java.io.FileDescriptor, java.lang.String);
|
||||
@@ -3712,6 +3713,7 @@ package android.app {
|
||||
method public int getMemoryClass();
|
||||
method public void getMemoryInfo(android.app.ActivityManager.MemoryInfo);
|
||||
method public static void getMyMemoryState(android.app.ActivityManager.RunningAppProcessInfo);
|
||||
method public int getPackageImportance(java.lang.String);
|
||||
method public android.os.Debug.MemoryInfo[] getProcessMemoryInfo(int[]);
|
||||
method public java.util.List<android.app.ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState();
|
||||
method public deprecated java.util.List<android.app.ActivityManager.RecentTaskInfo> getRecentTasks(int, int) throws java.lang.SecurityException;
|
||||
@@ -3726,6 +3728,7 @@ package android.app {
|
||||
method public void killBackgroundProcesses(java.lang.String);
|
||||
method public void moveTaskToFront(int, int);
|
||||
method public void moveTaskToFront(int, int, android.os.Bundle);
|
||||
method public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener);
|
||||
method public deprecated void restartPackage(java.lang.String);
|
||||
method public static void setVrThread(int);
|
||||
method public void setWatchHeapLimit(long);
|
||||
@@ -3760,6 +3763,10 @@ package android.app {
|
||||
field public long totalMem;
|
||||
}
|
||||
|
||||
public static abstract interface ActivityManager.OnUidImportanceListener {
|
||||
method public abstract void onUidImportance(int, int);
|
||||
}
|
||||
|
||||
public static class ActivityManager.ProcessErrorStateInfo implements android.os.Parcelable {
|
||||
ctor public ActivityManager.ProcessErrorStateInfo();
|
||||
method public int describeContents();
|
||||
@@ -11818,14 +11825,14 @@ package android.graphics {
|
||||
method public deprecated boolean clipRegion(android.graphics.Region);
|
||||
method public void concat(android.graphics.Matrix);
|
||||
method public void drawARGB(int, int, int, int);
|
||||
method public void drawArc(float, float, float, float, float, float, boolean, android.graphics.Paint);
|
||||
method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint);
|
||||
method public void drawArc(float, float, float, float, float, float, boolean, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, float, float, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Rect, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.RectF, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Rect, android.graphics.Paint);
|
||||
method public deprecated void drawBitmap(int[], int, int, float, float, int, int, boolean, android.graphics.Paint);
|
||||
method public deprecated void drawBitmap(int[], int, int, int, int, int, int, boolean, android.graphics.Paint);
|
||||
method public void drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android.graphics.Paint);
|
||||
method public void drawBitmapMesh(android.graphics.Bitmap, int, int, float[], int, int[], int, android.graphics.Paint);
|
||||
method public void drawCircle(float, float, float, android.graphics.Paint);
|
||||
method public void drawColor(int);
|
||||
@@ -11833,28 +11840,28 @@ package android.graphics {
|
||||
method public void drawLine(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawLines(float[], int, int, android.graphics.Paint);
|
||||
method public void drawLines(float[], android.graphics.Paint);
|
||||
method public void drawOval(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawOval(android.graphics.RectF, android.graphics.Paint);
|
||||
method public void drawOval(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawPaint(android.graphics.Paint);
|
||||
method public void drawPath(android.graphics.Path, android.graphics.Paint);
|
||||
method public void drawPicture(android.graphics.Picture);
|
||||
method public void drawPicture(android.graphics.Picture, android.graphics.Rect);
|
||||
method public void drawPicture(android.graphics.Picture, android.graphics.RectF);
|
||||
method public void drawPicture(android.graphics.Picture, android.graphics.Rect);
|
||||
method public void drawPoint(float, float, android.graphics.Paint);
|
||||
method public void drawPoints(float[], int, int, android.graphics.Paint);
|
||||
method public void drawPoints(float[], android.graphics.Paint);
|
||||
method public deprecated void drawPosText(char[], int, int, float[], android.graphics.Paint);
|
||||
method public deprecated void drawPosText(java.lang.String, float[], android.graphics.Paint);
|
||||
method public void drawRGB(int, int, int);
|
||||
method public void drawRect(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawRect(android.graphics.Rect, android.graphics.Paint);
|
||||
method public void drawRect(android.graphics.RectF, android.graphics.Paint);
|
||||
method public void drawRoundRect(float, float, float, float, float, float, android.graphics.Paint);
|
||||
method public void drawRect(android.graphics.Rect, android.graphics.Paint);
|
||||
method public void drawRect(float, float, float, float, android.graphics.Paint);
|
||||
method public void drawRoundRect(android.graphics.RectF, float, float, android.graphics.Paint);
|
||||
method public void drawRoundRect(float, float, float, float, float, float, android.graphics.Paint);
|
||||
method public void drawText(char[], int, int, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.String, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.String, int, int, float, float, android.graphics.Paint);
|
||||
method public void drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint);
|
||||
method public void drawTextOnPath(char[], int, int, android.graphics.Path, float, float, android.graphics.Paint);
|
||||
method public void drawTextOnPath(java.lang.String, android.graphics.Path, float, float, android.graphics.Paint);
|
||||
method public void drawTextRun(char[], int, int, int, int, float, float, boolean, android.graphics.Paint);
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.TestApi;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.Canvas;
|
||||
@@ -61,6 +62,7 @@ import android.os.ServiceManager;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Singleton;
|
||||
import android.util.Size;
|
||||
@@ -87,6 +89,49 @@ public class ActivityManager {
|
||||
private final Context mContext;
|
||||
private final Handler mHandler;
|
||||
|
||||
static final class UidObserver extends IUidObserver.Stub {
|
||||
final OnUidImportanceListener mListener;
|
||||
final int mImportanceCutpoint;
|
||||
int mLastImportance;
|
||||
|
||||
UidObserver(OnUidImportanceListener listener, int importanceCutpoint) {
|
||||
mListener = listener;
|
||||
mImportanceCutpoint = importanceCutpoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUidStateChanged(int uid, int procState) {
|
||||
final boolean lastAboveCut = mLastImportance <= mImportanceCutpoint;
|
||||
final int importance = RunningAppProcessInfo.procStateToImportance(procState);
|
||||
final boolean newAboveCut = importance <= mImportanceCutpoint;
|
||||
/*
|
||||
Log.d(TAG, "Uid " + uid + " state change from " + mLastImportance + " to "
|
||||
+ importance + " @ cut " + mImportanceCutpoint
|
||||
+ ": lastAbove=" + lastAboveCut + " newAbove=" + newAboveCut);
|
||||
*/
|
||||
mLastImportance = importance;
|
||||
if (lastAboveCut != newAboveCut) {
|
||||
mListener.onUidImportance(uid, importance);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUidGone(int uid) {
|
||||
mLastImportance = RunningAppProcessInfo.IMPORTANCE_GONE;
|
||||
mListener.onUidImportance(uid, RunningAppProcessInfo.IMPORTANCE_GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUidActive(int uid) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUidIdle(int uid) {
|
||||
}
|
||||
}
|
||||
|
||||
final ArrayMap<OnUidImportanceListener, UidObserver> mImportanceListeners = new ArrayMap<>();
|
||||
|
||||
/**
|
||||
* Defines acceptable types of bugreports.
|
||||
* @hide
|
||||
@@ -3045,11 +3090,11 @@ public class ActivityManager {
|
||||
* running its code, {@link RunningAppProcessInfo#IMPORTANCE_GONE} is returned.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@SystemApi @TestApi
|
||||
@RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
|
||||
public int getPackageImportance(String packageName) {
|
||||
try {
|
||||
int procState = ActivityManagerNative.getDefault().getPackageProcessState(packageName,
|
||||
int procState = getService().getPackageProcessState(packageName,
|
||||
mContext.getOpPackageName());
|
||||
return RunningAppProcessInfo.procStateToImportance(procState);
|
||||
} catch (RemoteException e) {
|
||||
@@ -3057,6 +3102,83 @@ public class ActivityManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback to get reports about changes to the importance of a uid. Use with
|
||||
* {@link #addOnUidImportanceListener}.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi @TestApi
|
||||
public interface OnUidImportanceListener {
|
||||
/**
|
||||
* The importance if a given uid has changed. Will be one of the importance
|
||||
* values in {@link RunningAppProcessInfo};
|
||||
* {@link RunningAppProcessInfo#IMPORTANCE_GONE IMPORTANCE_GONE} will be reported
|
||||
* when the uid is no longer running at all. This callback will happen on a thread
|
||||
* from a thread pool, not the main UI thread.
|
||||
* @param uid The uid whose importance has changed.
|
||||
* @param importance The new importance value as per {@link RunningAppProcessInfo}.
|
||||
*/
|
||||
void onUidImportance(int uid, int importance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start monitoring changes to the imoportance of uids running in the system.
|
||||
* @param listener The listener callback that will receive change reports.
|
||||
* @param importanceCutpoint The level of importance in which the caller is interested
|
||||
* in differences. For example, if {@link RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE}
|
||||
* is used here, you will receive a call each time a uids importance transitions between
|
||||
* being <= {@link RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE} and
|
||||
* > {@link RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE}.
|
||||
*
|
||||
* <p>The caller must hold the {@link android.Manifest.permission#PACKAGE_USAGE_STATS}
|
||||
* permission to use this feature.</p>
|
||||
*
|
||||
* @throws IllegalArgumentException If the listener is already registered.
|
||||
* @throws SecurityException If the caller does not hold
|
||||
* {@link android.Manifest.permission#PACKAGE_USAGE_STATS}.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi @TestApi
|
||||
public void addOnUidImportanceListener(OnUidImportanceListener listener,
|
||||
int importanceCutpoint) {
|
||||
synchronized (this) {
|
||||
if (mImportanceListeners.containsKey(listener)) {
|
||||
throw new IllegalArgumentException("Listener already registered: " + listener);
|
||||
}
|
||||
// TODO: implement the cut point in the system process to avoid IPCs.
|
||||
UidObserver observer = new UidObserver(listener, importanceCutpoint);
|
||||
try {
|
||||
getService().registerUidObserver(observer,
|
||||
UID_OBSERVER_PROCSTATE | UID_OBSERVER_GONE, mContext.getOpPackageName());
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
mImportanceListeners.put(listener, observer);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an importance listener that was previously registered with
|
||||
* {@link #addOnUidImportanceListener}.
|
||||
*
|
||||
* @throws IllegalArgumentException If the listener is not registered.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi @TestApi
|
||||
public void removeOnUidImportanceListener(OnUidImportanceListener listener) {
|
||||
synchronized (this) {
|
||||
UidObserver observer = mImportanceListeners.remove(listener);
|
||||
if (observer == null) {
|
||||
throw new IllegalArgumentException("Listener not registered: " + listener);
|
||||
}
|
||||
try {
|
||||
getService().unregisterUidObserver(observer);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return global memory state information for the calling process. This
|
||||
* does not fill in all fields of the {@link RunningAppProcessInfo}. The
|
||||
|
||||
@@ -431,7 +431,7 @@ interface IActivityManager {
|
||||
* etc.
|
||||
*/
|
||||
void keyguardGoingAway(int flags) = 296;
|
||||
void registerUidObserver(in IUidObserver observer, int which) = 297;
|
||||
void registerUidObserver(in IUidObserver observer, int which, String callingPackage) = 297;
|
||||
void unregisterUidObserver(in IUidObserver observer) = 298;
|
||||
boolean isAssistDataAllowedOnCurrentActivity() = 299;
|
||||
boolean showAssistFromActivity(in IBinder token, in Bundle args) = 300;
|
||||
|
||||
@@ -938,7 +938,7 @@ class AlarmManagerService extends SystemService {
|
||||
|
||||
try {
|
||||
ActivityManagerNative.getDefault().registerUidObserver(new UidObserver(),
|
||||
ActivityManager.UID_OBSERVER_IDLE);
|
||||
ActivityManager.UID_OBSERVER_IDLE, null);
|
||||
} catch (RemoteException e) {
|
||||
// ignored; both services live in system_server
|
||||
}
|
||||
|
||||
@@ -12245,9 +12245,11 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerUidObserver(IUidObserver observer, int which) {
|
||||
enforceCallingPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER,
|
||||
"registerUidObserver()");
|
||||
public void registerUidObserver(IUidObserver observer, int which, String callingPackage) {
|
||||
if (!hasUsageStatsPermission(callingPackage)) {
|
||||
enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
|
||||
"registerUidObserver");
|
||||
}
|
||||
synchronized (this) {
|
||||
mUidObservers.register(observer, which);
|
||||
}
|
||||
|
||||
@@ -824,7 +824,7 @@ public final class JobSchedulerService extends com.android.server.SystemService
|
||||
try {
|
||||
ActivityManagerNative.getDefault().registerUidObserver(mUidObserver,
|
||||
ActivityManager.UID_OBSERVER_PROCSTATE | ActivityManager.UID_OBSERVER_GONE
|
||||
| ActivityManager.UID_OBSERVER_IDLE);
|
||||
| ActivityManager.UID_OBSERVER_IDLE, null);
|
||||
} catch (RemoteException e) {
|
||||
// ignored; both services live in system_server
|
||||
}
|
||||
|
||||
@@ -611,7 +611,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
|
||||
try {
|
||||
mActivityManager.registerUidObserver(mUidObserver,
|
||||
ActivityManager.UID_OBSERVER_PROCSTATE|ActivityManager.UID_OBSERVER_GONE);
|
||||
ActivityManager.UID_OBSERVER_PROCSTATE|ActivityManager.UID_OBSERVER_GONE,
|
||||
null);
|
||||
mNetworkManager.registerObserver(mAlertObserver);
|
||||
} catch (RemoteException e) {
|
||||
// ignored; both services live in system_server
|
||||
|
||||
@@ -3677,7 +3677,7 @@ public class ShortcutService extends IShortcutService.Stub {
|
||||
@VisibleForTesting
|
||||
void injectRegisterUidObserver(IUidObserver observer, int which) {
|
||||
try {
|
||||
ActivityManagerNative.getDefault().registerUidObserver(observer, which);
|
||||
ActivityManagerNative.getDefault().registerUidObserver(observer, which, null);
|
||||
} catch (RemoteException shouldntHappen) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,7 +246,7 @@ public class NetworkPolicyManagerServiceTest {
|
||||
Log.d(TAG, "set mUidObserver to " + mUidObserver);
|
||||
return null;
|
||||
}
|
||||
}).when(mActivityManager).registerUidObserver(any(), anyInt());
|
||||
}).when(mActivityManager).registerUidObserver(any(), anyInt(), null);
|
||||
|
||||
mService = new NetworkPolicyManagerService(mServiceContext, mActivityManager, mStatsService,
|
||||
mNetworkManager, mIpm, mTime, mPolicyDir, true);
|
||||
|
||||
Reference in New Issue
Block a user