Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b9ff18e5 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Automerger Merge Worker
Browse files

Merge "Avoid calling into phone process with NPMS locks held." into sc-dev am:...

Merge "Avoid calling into phone process with NPMS locks held." into sc-dev am: d5bda8a0 am: f80d9a28

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15060769

Change-Id: I798daf4db5d63113d732178838085b2fcd213aa1
parents e7f07b4c f80d9a28
Loading
Loading
Loading
Loading
+34 −29
Original line number Diff line number Diff line
@@ -1235,11 +1235,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
    final private BroadcastReceiver mWifiReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            synchronized (mUidRulesFirstLock) {
                synchronized (mNetworkPoliciesSecondLock) {
                    upgradeWifiMeteredOverrideAL();
                }
            }
            upgradeWifiMeteredOverride();
            // Only need to perform upgrade logic once
            mContext.unregisterReceiver(this);
        }
@@ -2617,36 +2613,45 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
     * Perform upgrade step of moving any user-defined meterness overrides over
     * into {@link WifiConfiguration}.
     */
    @GuardedBy({"mNetworkPoliciesSecondLock", "mUidRulesFirstLock"})
    private void upgradeWifiMeteredOverrideAL() {
        boolean modified = false;
        final WifiManager wm = mContext.getSystemService(WifiManager.class);
        final List<WifiConfiguration> configs = wm.getConfiguredNetworks();
    private void upgradeWifiMeteredOverride() {
        final ArrayMap<String, Boolean> wifiNetworkIds = new ArrayMap<>();
        synchronized (mNetworkPoliciesSecondLock) {
            for (int i = 0; i < mNetworkPolicy.size();) {
                final NetworkPolicy policy = mNetworkPolicy.valueAt(i);
                if (policy.template.getMatchRule() == NetworkTemplate.MATCH_WIFI
                        && !policy.inferred) {
                    mNetworkPolicy.removeAt(i);
                modified = true;
                    wifiNetworkIds.put(policy.template.getNetworkId(), policy.metered);
                } else {
                    i++;
                }
            }
        }

                final String networkId = resolveNetworkId(policy.template.getNetworkId());
                for (WifiConfiguration config : configs) {
                    if (Objects.equals(resolveNetworkId(config), networkId)) {
        if (wifiNetworkIds.isEmpty()) {
            return;
        }
        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");
                        config.meteredOverride = policy.metered
                config.meteredOverride = metered
                        ? WifiConfiguration.METERED_OVERRIDE_METERED
                        : WifiConfiguration.METERED_OVERRIDE_NOT_METERED;
                wm.updateNetwork(config);
            }
        }
            } else {
                i++;
            }
        }
        if (modified) {

        synchronized (mUidRulesFirstLock) {
            synchronized (mNetworkPoliciesSecondLock) {
                writePolicyAL();
            }
        }
    }

    @GuardedBy({"mUidRulesFirstLock", "mNetworkPoliciesSecondLock"})
    void writePolicyAL() {