Merge "Avoid calling into phone process with NPMS locks held." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
d5bda8a0d5
@@ -1235,11 +1235,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
final private BroadcastReceiver mWifiReceiver = new BroadcastReceiver() {
|
final private BroadcastReceiver mWifiReceiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
synchronized (mUidRulesFirstLock) {
|
upgradeWifiMeteredOverride();
|
||||||
synchronized (mNetworkPoliciesSecondLock) {
|
|
||||||
upgradeWifiMeteredOverrideAL();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Only need to perform upgrade logic once
|
// Only need to perform upgrade logic once
|
||||||
mContext.unregisterReceiver(this);
|
mContext.unregisterReceiver(this);
|
||||||
}
|
}
|
||||||
@@ -2617,36 +2613,45 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
* Perform upgrade step of moving any user-defined meterness overrides over
|
* Perform upgrade step of moving any user-defined meterness overrides over
|
||||||
* into {@link WifiConfiguration}.
|
* into {@link WifiConfiguration}.
|
||||||
*/
|
*/
|
||||||
@GuardedBy({"mNetworkPoliciesSecondLock", "mUidRulesFirstLock"})
|
private void upgradeWifiMeteredOverride() {
|
||||||
private void upgradeWifiMeteredOverrideAL() {
|
final ArrayMap<String, Boolean> wifiNetworkIds = new ArrayMap<>();
|
||||||
boolean modified = false;
|
synchronized (mNetworkPoliciesSecondLock) {
|
||||||
final WifiManager wm = mContext.getSystemService(WifiManager.class);
|
for (int i = 0; i < mNetworkPolicy.size();) {
|
||||||
final List<WifiConfiguration> configs = wm.getConfiguredNetworks();
|
|
||||||
for (int i = 0; i < mNetworkPolicy.size(); ) {
|
|
||||||
final NetworkPolicy policy = mNetworkPolicy.valueAt(i);
|
final NetworkPolicy policy = mNetworkPolicy.valueAt(i);
|
||||||
if (policy.template.getMatchRule() == NetworkTemplate.MATCH_WIFI
|
if (policy.template.getMatchRule() == NetworkTemplate.MATCH_WIFI
|
||||||
&& !policy.inferred) {
|
&& !policy.inferred) {
|
||||||
mNetworkPolicy.removeAt(i);
|
mNetworkPolicy.removeAt(i);
|
||||||
modified = true;
|
wifiNetworkIds.put(policy.template.getNetworkId(), policy.metered);
|
||||||
|
} else {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final String networkId = resolveNetworkId(policy.template.getNetworkId());
|
if (wifiNetworkIds.isEmpty()) {
|
||||||
for (WifiConfiguration config : configs) {
|
return;
|
||||||
if (Objects.equals(resolveNetworkId(config), networkId)) {
|
}
|
||||||
|
final WifiManager wm = mContext.getSystemService(WifiManager.class);
|
||||||
|
final List<WifiConfiguration> configs = wm.getConfiguredNetworks();
|
||||||
|
for (int i = 0; i < configs.size(); ++i) {
|
||||||
|
final WifiConfiguration config = configs.get(i);
|
||||||
|
final String networkId = resolveNetworkId(config);
|
||||||
|
final Boolean metered = wifiNetworkIds.get(networkId);
|
||||||
|
if (metered != null) {
|
||||||
Slog.d(TAG, "Found network " + networkId + "; upgrading metered hint");
|
Slog.d(TAG, "Found network " + networkId + "; upgrading metered hint");
|
||||||
config.meteredOverride = policy.metered
|
config.meteredOverride = metered
|
||||||
? WifiConfiguration.METERED_OVERRIDE_METERED
|
? WifiConfiguration.METERED_OVERRIDE_METERED
|
||||||
: WifiConfiguration.METERED_OVERRIDE_NOT_METERED;
|
: WifiConfiguration.METERED_OVERRIDE_NOT_METERED;
|
||||||
wm.updateNetwork(config);
|
wm.updateNetwork(config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
i++;
|
synchronized (mUidRulesFirstLock) {
|
||||||
}
|
synchronized (mNetworkPoliciesSecondLock) {
|
||||||
}
|
|
||||||
if (modified) {
|
|
||||||
writePolicyAL();
|
writePolicyAL();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@GuardedBy({"mUidRulesFirstLock", "mNetworkPoliciesSecondLock"})
|
@GuardedBy({"mUidRulesFirstLock", "mNetworkPoliciesSecondLock"})
|
||||||
void writePolicyAL() {
|
void writePolicyAL() {
|
||||||
|
|||||||
Reference in New Issue
Block a user