Merge "Consider allow-in-power-save-except-idle whitelist while updating rules." into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
5ee9a1dfa3
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user