Merge "Handles blacklist on getRestrictBackgroundStatus()." into nyc-dev

am: 7af0be288e

* commit '7af0be288e3bce8c97e8e830025e011f9686bb42':
  Handles blacklist on getRestrictBackgroundStatus().
This commit is contained in:
Felipe Leme
2016-03-04 01:45:51 +00:00
committed by android-build-merger

View File

@@ -1619,7 +1619,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
try { try {
final int oldPolicy = mUidPolicy.get(uid, POLICY_NONE); final int oldPolicy = mUidPolicy.get(uid, POLICY_NONE);
if (oldPolicy != policy) { if (oldPolicy != policy) {
setUidPolicyUncheckedLocked(uid, policy, true); setUidPolicyUncheckedLocked(uid, oldPolicy, policy, true);
} }
} finally { } finally {
Binder.restoreCallingIdentity(token); Binder.restoreCallingIdentity(token);
@@ -1639,7 +1639,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
final int oldPolicy = mUidPolicy.get(uid, POLICY_NONE); final int oldPolicy = mUidPolicy.get(uid, POLICY_NONE);
policy |= oldPolicy; policy |= oldPolicy;
if (oldPolicy != policy) { if (oldPolicy != policy) {
setUidPolicyUncheckedLocked(uid, policy, true); setUidPolicyUncheckedLocked(uid, oldPolicy, policy, true);
} }
} }
} }
@@ -1656,11 +1656,22 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
final int oldPolicy = mUidPolicy.get(uid, POLICY_NONE); final int oldPolicy = mUidPolicy.get(uid, POLICY_NONE);
policy = oldPolicy & ~policy; policy = oldPolicy & ~policy;
if (oldPolicy != policy) { if (oldPolicy != policy) {
setUidPolicyUncheckedLocked(uid, policy, true); setUidPolicyUncheckedLocked(uid, oldPolicy, policy, true);
} }
} }
} }
private void setUidPolicyUncheckedLocked(int uid, int oldPolicy, int policy, boolean persist) {
setUidPolicyUncheckedLocked(uid, policy, persist);
// Checks if app was added or removed to the blacklist.
if ((oldPolicy == POLICY_NONE && policy == POLICY_REJECT_METERED_BACKGROUND)
|| (oldPolicy == POLICY_REJECT_METERED_BACKGROUND && policy == POLICY_NONE)) {
mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_WHITELIST_CHANGED, uid, 0)
.sendToTarget();
}
}
private void setUidPolicyUncheckedLocked(int uid, int policy, boolean persist) { private void setUidPolicyUncheckedLocked(int uid, int policy, boolean persist) {
mUidPolicy.put(uid, policy); mUidPolicy.put(uid, policy);
@@ -1988,7 +1999,20 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
public int getRestrictBackgroundByCaller() { public int getRestrictBackgroundByCaller() {
mContext.enforceCallingOrSelfPermission(ACCESS_NETWORK_STATE, TAG); mContext.enforceCallingOrSelfPermission(ACCESS_NETWORK_STATE, TAG);
final int uid = Binder.getCallingUid(); final int uid = Binder.getCallingUid();
synchronized (mRulesLock) { synchronized (mRulesLock) {
// Must clear identity because getUidPolicy() is restricted to system.
final long token = Binder.clearCallingIdentity();
final int policy;
try {
policy = getUidPolicy(uid);
} finally {
Binder.restoreCallingIdentity(token);
}
if (policy == POLICY_REJECT_METERED_BACKGROUND) {
// App is blacklisted.
return RESTRICT_BACKGROUND_STATUS_ENABLED;
}
if (!mRestrictBackground) { if (!mRestrictBackground) {
return RESTRICT_BACKGROUND_STATUS_DISABLED; return RESTRICT_BACKGROUND_STATUS_DISABLED;
} }