Merge "Process AMS events in NetworkPolicy handler." into ics-mr0
This commit is contained in:
@ -186,8 +186,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
|
|
||||||
private static final long TIME_CACHE_MAX_AGE = DAY_IN_MILLIS;
|
private static final long TIME_CACHE_MAX_AGE = DAY_IN_MILLIS;
|
||||||
|
|
||||||
private static final int MSG_RULES_CHANGED = 0x1;
|
private static final int MSG_RULES_CHANGED = 1;
|
||||||
private static final int MSG_METERED_IFACES_CHANGED = 0x2;
|
private static final int MSG_METERED_IFACES_CHANGED = 2;
|
||||||
|
private static final int MSG_FOREGROUND_ACTIVITIES_CHANGED = 3;
|
||||||
|
private static final int MSG_PROCESS_DIED = 4;
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final IActivityManager mActivityManager;
|
private final IActivityManager mActivityManager;
|
||||||
@ -335,37 +337,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
private IProcessObserver mProcessObserver = new IProcessObserver.Stub() {
|
private IProcessObserver mProcessObserver = new IProcessObserver.Stub() {
|
||||||
@Override
|
@Override
|
||||||
public void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities) {
|
public void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities) {
|
||||||
// only someone like AMS should only be calling us
|
mHandler.obtainMessage(MSG_FOREGROUND_ACTIVITIES_CHANGED,
|
||||||
mContext.enforceCallingOrSelfPermission(MANAGE_APP_TOKENS, TAG);
|
pid, uid, foregroundActivities).sendToTarget();
|
||||||
|
|
||||||
synchronized (mRulesLock) {
|
|
||||||
// because a uid can have multiple pids running inside, we need to
|
|
||||||
// remember all pid states and summarize foreground at uid level.
|
|
||||||
|
|
||||||
// record foreground for this specific pid
|
|
||||||
SparseBooleanArray pidForeground = mUidPidForeground.get(uid);
|
|
||||||
if (pidForeground == null) {
|
|
||||||
pidForeground = new SparseBooleanArray(2);
|
|
||||||
mUidPidForeground.put(uid, pidForeground);
|
|
||||||
}
|
|
||||||
pidForeground.put(pid, foregroundActivities);
|
|
||||||
computeUidForegroundLocked(uid);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProcessDied(int pid, int uid) {
|
public void onProcessDied(int pid, int uid) {
|
||||||
// only someone like AMS should only be calling us
|
mHandler.obtainMessage(MSG_PROCESS_DIED, pid, uid).sendToTarget();
|
||||||
mContext.enforceCallingOrSelfPermission(MANAGE_APP_TOKENS, TAG);
|
|
||||||
|
|
||||||
synchronized (mRulesLock) {
|
|
||||||
// clear records and recompute, when they exist
|
|
||||||
final SparseBooleanArray pidForeground = mUidPidForeground.get(uid);
|
|
||||||
if (pidForeground != null) {
|
|
||||||
pidForeground.delete(pid);
|
|
||||||
computeUidForegroundLocked(uid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1469,6 +1447,40 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
mListeners.finishBroadcast();
|
mListeners.finishBroadcast();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
case MSG_FOREGROUND_ACTIVITIES_CHANGED: {
|
||||||
|
final int pid = msg.arg1;
|
||||||
|
final int uid = msg.arg2;
|
||||||
|
final boolean foregroundActivities = (Boolean) msg.obj;
|
||||||
|
|
||||||
|
synchronized (mRulesLock) {
|
||||||
|
// because a uid can have multiple pids running inside, we need to
|
||||||
|
// remember all pid states and summarize foreground at uid level.
|
||||||
|
|
||||||
|
// record foreground for this specific pid
|
||||||
|
SparseBooleanArray pidForeground = mUidPidForeground.get(uid);
|
||||||
|
if (pidForeground == null) {
|
||||||
|
pidForeground = new SparseBooleanArray(2);
|
||||||
|
mUidPidForeground.put(uid, pidForeground);
|
||||||
|
}
|
||||||
|
pidForeground.put(pid, foregroundActivities);
|
||||||
|
computeUidForegroundLocked(uid);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case MSG_PROCESS_DIED: {
|
||||||
|
final int pid = msg.arg1;
|
||||||
|
final int uid = msg.arg2;
|
||||||
|
|
||||||
|
synchronized (mRulesLock) {
|
||||||
|
// clear records and recompute, when they exist
|
||||||
|
final SparseBooleanArray pidForeground = mUidPidForeground.get(uid);
|
||||||
|
if (pidForeground != null) {
|
||||||
|
pidForeground.delete(pid);
|
||||||
|
computeUidForegroundLocked(uid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user