Merge "Consider allow-in-power-save-except-idle whitelist while updating rules." into oc-dev
am: 5ee9a1dfa3
Change-Id: I463477157db84a7496e0659fbdd60c5ad4342989
This commit is contained in:
@@ -2879,17 +2879,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
final List<UserInfo> users = mUserManager.getUsers();
|
||||
for (int ui = users.size() - 1; ui >= 0; ui--) {
|
||||
UserInfo user = users.get(ui);
|
||||
for (int i = mPowerSaveTempWhitelistAppIds.size() - 1; i >= 0; i--) {
|
||||
if (mPowerSaveTempWhitelistAppIds.valueAt(i)) {
|
||||
int appId = mPowerSaveTempWhitelistAppIds.keyAt(i);
|
||||
int uid = UserHandle.getUid(user.id, appId);
|
||||
uidRules.put(uid, FIREWALL_RULE_ALLOW);
|
||||
}
|
||||
}
|
||||
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);
|
||||
updateRulesForWhitelistedAppIds(uidRules, mPowerSaveTempWhitelistAppIds, user.id);
|
||||
updateRulesForWhitelistedAppIds(uidRules, mPowerSaveWhitelistAppIds, user.id);
|
||||
if (chain == FIREWALL_CHAIN_POWERSAVE) {
|
||||
updateRulesForWhitelistedAppIds(uidRules,
|
||||
mPowerSaveWhitelistExceptIdleAppIds, user.id);
|
||||
}
|
||||
}
|
||||
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);
|
||||
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
|
||||
// (mPowerSaveTempWhitelistAppIds) for whitelisting, we can reuse their logic in this method.
|
||||
private void updateRulesForWhitelistedPowerSaveUL(int uid, boolean enabled, int chain) {
|
||||
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);
|
||||
} else {
|
||||
setUidFirewallRule(chain, uid, FIREWALL_RULE_DEFAULT);
|
||||
@@ -3430,7 +3447,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
final boolean restrictMode = isIdle || mRestrictPower || mDeviceIdleMode;
|
||||
final boolean isForeground = isUidForegroundOnRestrictPowerUL(uid);
|
||||
|
||||
final boolean isWhitelisted = isWhitelistedBatterySaverUL(uid);
|
||||
final boolean isWhitelisted = isWhitelistedBatterySaverUL(uid, mDeviceIdleMode);
|
||||
final int oldRule = oldUidRules & MASK_ALL_NETWORKS;
|
||||
int newRule = RULE_NONE;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user