Merge "Block metered APNs when app is restricted." into jb-dev am: 528c3f2139
Original change: undetermined Change-Id: I405158bb791f345e94ca048483928cb92bc1eb63
This commit is contained in:
@@ -884,22 +884,25 @@ private NetworkStateTracker makeWimaxStateTracker() {
|
|||||||
@Override
|
@Override
|
||||||
public boolean isActiveNetworkMetered() {
|
public boolean isActiveNetworkMetered() {
|
||||||
enforceAccessPermission();
|
enforceAccessPermission();
|
||||||
|
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
final NetworkState state = getNetworkStateUnchecked(mActiveDefaultNetwork);
|
return isNetworkMeteredUnchecked(mActiveDefaultNetwork);
|
||||||
if (state != null) {
|
|
||||||
try {
|
|
||||||
return mPolicyManager.isNetworkMetered(state);
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} finally {
|
} finally {
|
||||||
Binder.restoreCallingIdentity(token);
|
Binder.restoreCallingIdentity(token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isNetworkMeteredUnchecked(int networkType) {
|
||||||
|
final NetworkState state = getNetworkStateUnchecked(networkType);
|
||||||
|
if (state != null) {
|
||||||
|
try {
|
||||||
|
return mPolicyManager.isNetworkMetered(state);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean setRadios(boolean turnOn) {
|
public boolean setRadios(boolean turnOn) {
|
||||||
boolean result = true;
|
boolean result = true;
|
||||||
enforceChangePermission();
|
enforceChangePermission();
|
||||||
@@ -993,7 +996,8 @@ private NetworkStateTracker makeWimaxStateTracker() {
|
|||||||
public int startUsingNetworkFeature(int networkType, String feature,
|
public int startUsingNetworkFeature(int networkType, String feature,
|
||||||
IBinder binder) {
|
IBinder binder) {
|
||||||
if (VDBG) {
|
if (VDBG) {
|
||||||
log("startUsingNetworkFeature for net " + networkType + ": " + feature);
|
log("startUsingNetworkFeature for net " + networkType + ": " + feature + ", uid="
|
||||||
|
+ Binder.getCallingUid());
|
||||||
}
|
}
|
||||||
enforceChangePermission();
|
enforceChangePermission();
|
||||||
if (!ConnectivityManager.isNetworkTypeValid(networkType) ||
|
if (!ConnectivityManager.isNetworkTypeValid(networkType) ||
|
||||||
@@ -1010,6 +1014,16 @@ private NetworkStateTracker makeWimaxStateTracker() {
|
|||||||
enforceConnectivityInternalPermission();
|
enforceConnectivityInternalPermission();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if UID is restricted, don't allow them to bring up metered APNs
|
||||||
|
final boolean networkMetered = isNetworkMeteredUnchecked(usedNetworkType);
|
||||||
|
final int uidRules;
|
||||||
|
synchronized (mRulesLock) {
|
||||||
|
uidRules = mUidRules.get(Binder.getCallingUid(), RULE_ALLOW_ALL);
|
||||||
|
}
|
||||||
|
if (networkMetered && (uidRules & RULE_REJECT_METERED) != 0) {
|
||||||
|
return Phone.APN_REQUEST_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
NetworkStateTracker network = mNetTrackers[usedNetworkType];
|
NetworkStateTracker network = mNetTrackers[usedNetworkType];
|
||||||
if (network != null) {
|
if (network != null) {
|
||||||
Integer currentPid = new Integer(getCallingPid());
|
Integer currentPid = new Integer(getCallingPid());
|
||||||
@@ -1432,7 +1446,6 @@ private NetworkStateTracker makeWimaxStateTracker() {
|
|||||||
mUidRules.put(uid, uidRules);
|
mUidRules.put(uid, uidRules);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: dispatch into NMS to push rules towards kernel module
|
|
||||||
// TODO: notify UID when it has requested targeted updates
|
// TODO: notify UID when it has requested targeted updates
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user