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

Commit f80d9a28 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: d5bda8a0

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

Change-Id: Id2006b8f41c85ff59aa9bc962cefe818f0bd08d9
parents cdde21bd d5bda8a0
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() {