Merge "Implement system API for monitoring uid importance changes."

This commit is contained in:
Dianne Hackborn
2016-11-07 18:23:37 +00:00
committed by Android (Google) Code Review
11 changed files with 185 additions and 47 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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

View File

@@ -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;

View File

@@ -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
}

View File

@@ -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);
}

View File

@@ -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
}

View File

@@ -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

View File

@@ -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) {
}
}

View File

@@ -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);