Merge "Consider allow-in-power-save-except-idle whitelist while updating rules." into oc-dev

This commit is contained in:
Sudheer Shanka
2017-04-28 21:08:28 +00:00
committed by Android (Google) Code Review

View File

@@ -2879,17 +2879,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
final List<UserInfo> users = mUserManager.getUsers(); final List<UserInfo> users = mUserManager.getUsers();
for (int ui = users.size() - 1; ui >= 0; ui--) { for (int ui = users.size() - 1; ui >= 0; ui--) {
UserInfo user = users.get(ui); UserInfo user = users.get(ui);
for (int i = mPowerSaveTempWhitelistAppIds.size() - 1; i >= 0; i--) { updateRulesForWhitelistedAppIds(uidRules, mPowerSaveTempWhitelistAppIds, user.id);
if (mPowerSaveTempWhitelistAppIds.valueAt(i)) { updateRulesForWhitelistedAppIds(uidRules, mPowerSaveWhitelistAppIds, user.id);
int appId = mPowerSaveTempWhitelistAppIds.keyAt(i); if (chain == FIREWALL_CHAIN_POWERSAVE) {
int uid = UserHandle.getUid(user.id, appId); updateRulesForWhitelistedAppIds(uidRules,
uidRules.put(uid, FIREWALL_RULE_ALLOW); mPowerSaveWhitelistExceptIdleAppIds, user.id);
}
}
for (int i = mPowerSaveWhitelistAppIds.size() - 1; i >= 0; i--) {
int appId = mPowerSaveWhitelistAppIds.keyAt(i);
int uid = UserHandle.getUid(user.id, appId);
uidRules.put(uid, FIREWALL_RULE_ALLOW);
} }
} }
for (int i = mUidState.size() - 1; i >= 0; i--) { for (int i = mUidState.size() - 1; i >= 0; i--) {
@@ -2903,16 +2897,39 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
} }
} }
private boolean isWhitelistedBatterySaverUL(int uid) { private void updateRulesForWhitelistedAppIds(final SparseIntArray uidRules,
final SparseBooleanArray whitelistedAppIds, int userId) {
for (int i = whitelistedAppIds.size() - 1; i >= 0; --i) {
if (whitelistedAppIds.valueAt(i)) {
final int appId = whitelistedAppIds.keyAt(i);
final int uid = UserHandle.getUid(userId, appId);
uidRules.put(uid, FIREWALL_RULE_ALLOW);
}
}
}
/**
* @param deviceIdleMode if true then we don't consider
* {@link #mPowerSaveWhitelistExceptIdleAppIds} for checking if the {@param uid} is
* whitelisted.
*/
private boolean isWhitelistedBatterySaverUL(int uid, boolean deviceIdleMode) {
final int appId = UserHandle.getAppId(uid); final int appId = UserHandle.getAppId(uid);
return mPowerSaveTempWhitelistAppIds.get(appId) || mPowerSaveWhitelistAppIds.get(appId); boolean isWhitelisted = mPowerSaveTempWhitelistAppIds.get(appId)
|| mPowerSaveWhitelistAppIds.get(appId);
if (!deviceIdleMode) {
isWhitelisted = isWhitelisted || mPowerSaveWhitelistExceptIdleAppIds.get(appId);
}
return isWhitelisted;
} }
// NOTE: since both fw_dozable and fw_powersave uses the same map // NOTE: since both fw_dozable and fw_powersave uses the same map
// (mPowerSaveTempWhitelistAppIds) for whitelisting, we can reuse their logic in this method. // (mPowerSaveTempWhitelistAppIds) for whitelisting, we can reuse their logic in this method.
private void updateRulesForWhitelistedPowerSaveUL(int uid, boolean enabled, int chain) { private void updateRulesForWhitelistedPowerSaveUL(int uid, boolean enabled, int chain) {
if (enabled) { if (enabled) {
if (isWhitelistedBatterySaverUL(uid) || isUidForegroundOnRestrictPowerUL(uid)) { final boolean isWhitelisted = isWhitelistedBatterySaverUL(uid,
chain == FIREWALL_CHAIN_DOZABLE);
if (isWhitelisted || isUidForegroundOnRestrictPowerUL(uid)) {
setUidFirewallRule(chain, uid, FIREWALL_RULE_ALLOW); setUidFirewallRule(chain, uid, FIREWALL_RULE_ALLOW);
} else { } else {
setUidFirewallRule(chain, uid, FIREWALL_RULE_DEFAULT); setUidFirewallRule(chain, uid, FIREWALL_RULE_DEFAULT);
@@ -3430,7 +3447,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
final boolean restrictMode = isIdle || mRestrictPower || mDeviceIdleMode; final boolean restrictMode = isIdle || mRestrictPower || mDeviceIdleMode;
final boolean isForeground = isUidForegroundOnRestrictPowerUL(uid); final boolean isForeground = isUidForegroundOnRestrictPowerUL(uid);
final boolean isWhitelisted = isWhitelistedBatterySaverUL(uid); final boolean isWhitelisted = isWhitelistedBatterySaverUL(uid, mDeviceIdleMode);
final int oldRule = oldUidRules & MASK_ALL_NETWORKS; final int oldRule = oldUidRules & MASK_ALL_NETWORKS;
int newRule = RULE_NONE; int newRule = RULE_NONE;