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

Commit 2d12d93c authored by Weng Su's avatar Weng Su Committed by Automerger Merge Worker
Browse files

Merge "[Provider Model] Fix the issue of turning off carrier network" into...

Merge "[Provider Model] Fix the issue of turning off carrier network" into sc-qpr1-dev am: af065728 am: c8e002d5 am: 22a56055

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

Change-Id: I2528c92ee064184acb1d8b92e953802e44859e57
parents ecd114ee 22a56055
Loading
Loading
Loading
Loading
+28 −2
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PixelFormat;
@@ -73,6 +72,7 @@ import com.android.settingslib.net.SignalStrengthUtil;
import com.android.settingslib.wifi.WifiUtils;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -80,6 +80,7 @@ import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.AccessPointController;
import com.android.systemui.toast.SystemUIToast;
import com.android.systemui.toast.ToastFactory;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.WifiEntry;
@@ -125,10 +126,12 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
    private SubscriptionManager mSubscriptionManager;
    private TelephonyManager mTelephonyManager;
    private ConnectivityManager mConnectivityManager;
    private CarrierConfigTracker mCarrierConfigTracker;
    private TelephonyDisplayInfo mTelephonyDisplayInfo =
            new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
                    TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
    private Handler mHandler;
    private Handler mWorkerHandler;
    private MobileMappings.Config mConfig = null;
    private Executor mExecutor;
    private AccessPointController mAccessPointController;
@@ -191,11 +194,14 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
            @Main Handler handler, @Main Executor mainExecutor,
            BroadcastDispatcher broadcastDispatcher, KeyguardUpdateMonitor keyguardUpdateMonitor,
            GlobalSettings globalSettings, KeyguardStateController keyguardStateController,
            WindowManager windowManager, ToastFactory toastFactory) {
            WindowManager windowManager, ToastFactory toastFactory,
            @Background Handler workerHandler,
            CarrierConfigTracker carrierConfigTracker) {
        if (DEBUG) {
            Log.d(TAG, "Init InternetDialogController");
        }
        mHandler = handler;
        mWorkerHandler = workerHandler;
        mExecutor = mainExecutor;
        mContext = context;
        mGlobalSettings = globalSettings;
@@ -203,6 +209,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
        mTelephonyManager = telephonyManager;
        mConnectivityManager = connectivityManager;
        mSubscriptionManager = subscriptionManager;
        mCarrierConfigTracker = carrierConfigTracker;
        mBroadcastDispatcher = broadcastDispatcher;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mKeyguardStateController = keyguardStateController;
@@ -611,6 +618,24 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
        return mergedCarrierEntry != null && mergedCarrierEntry.isDefaultNetwork();
    }

    @WorkerThread
    void setMergedCarrierWifiEnabledIfNeed(int subId, boolean enabled) {
        // If the Carrier Provisions Wi-Fi Merged Networks enabled, do not set the merged carrier
        // Wi-Fi state together.
        if (mCarrierConfigTracker.getCarrierProvisionsWifiMergedNetworksBool(subId)) {
            return;
        }

        final MergedCarrierEntry entry = mAccessPointController.getMergedCarrierEntry();
        if (entry == null) {
            if (DEBUG) {
                Log.d(TAG, "MergedCarrierEntry is null, can not set the status.");
            }
            return;
        }
        entry.setEnabled(enabled);
    }

    WifiManager getWifiManager() {
        return mWifiManager;
    }
@@ -685,6 +710,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
                }
            }
        }
        mWorkerHandler.post(() -> setMergedCarrierWifiEnabledIfNeed(subId, enabled));
    }

    boolean isDataStateInService() {
+63 −25
Original line number Diff line number Diff line
@@ -23,8 +23,9 @@ import android.content.IntentFilter;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.util.SparseArray;
import android.util.SparseBooleanArray;

import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;

import javax.inject.Inject;
@@ -34,39 +35,54 @@ import javax.inject.Inject;
 */
@SysUISingleton
public class CarrierConfigTracker extends BroadcastReceiver {
    private final SparseArray<Boolean> mCallStrengthConfigs = new SparseArray<>();
    private final SparseArray<Boolean> mNoCallingConfigs = new SparseArray<>();
    private final SparseBooleanArray mCallStrengthConfigs = new SparseBooleanArray();
    private final SparseBooleanArray mNoCallingConfigs = new SparseBooleanArray();
    private final SparseBooleanArray mCarrierProvisionsWifiMergedNetworks =
            new SparseBooleanArray();
    private final CarrierConfigManager mCarrierConfigManager;
    private boolean mDefaultCallStrengthConfigLoaded;
    private boolean mDefaultCallStrengthConfig;
    private boolean mDefaultNoCallingConfigLoaded;
    private boolean mDefaultNoCallingConfig;
    private boolean mDefaultCarrierProvisionsWifiMergedNetworksLoaded;
    private boolean mDefaultCarrierProvisionsWifiMergedNetworks;

    @Inject
    public CarrierConfigTracker(Context context) {
    public CarrierConfigTracker(Context context, BroadcastDispatcher broadcastDispatcher) {
        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
        context.registerReceiver(
        broadcastDispatcher.registerReceiver(
                this, new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED));
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() == CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED) {
            int subId = intent.getIntExtra(
        if (!CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(intent.getAction())) {
            return;
        }

        final int subId = intent.getIntExtra(
                CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX,
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
            return;
        }
            PersistableBundle b = mCarrierConfigManager.getConfigForSubId(subId);
            if (b != null) {
                boolean hideNoCallingConfig = b.getBoolean(
                        CarrierConfigManager.KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL);
                boolean displayCallStrengthIcon = b.getBoolean(
                        CarrierConfigManager.KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL);
                mCallStrengthConfigs.put(subId, displayCallStrengthIcon);
                mNoCallingConfigs.put(subId, hideNoCallingConfig);

        final PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId);
        if (config == null) {
            return;
        }

        synchronized (mCallStrengthConfigs) {
            mCallStrengthConfigs.put(subId, config.getBoolean(
                    CarrierConfigManager.KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL));
        }
        synchronized (mNoCallingConfigs) {
            mNoCallingConfigs.put(subId, config.getBoolean(
                    CarrierConfigManager.KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL));
        }
        synchronized (mCarrierProvisionsWifiMergedNetworks) {
            mCarrierProvisionsWifiMergedNetworks.put(subId, config.getBoolean(
                    CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL));
        }
    }

@@ -74,9 +90,11 @@ public class CarrierConfigTracker extends BroadcastReceiver {
     * Returns the KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL value for the given subId.
     */
    public boolean getCallStrengthConfig(int subId) {
        synchronized (mCallStrengthConfigs) {
            if (mCallStrengthConfigs.indexOfKey(subId) >= 0) {
                return mCallStrengthConfigs.get(subId);
            }
        }
        if (!mDefaultCallStrengthConfigLoaded) {
            mDefaultCallStrengthConfig =
                    CarrierConfigManager.getDefaultConfig().getBoolean(
@@ -90,9 +108,11 @@ public class CarrierConfigTracker extends BroadcastReceiver {
     * Returns the KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL value for the given subId.
     */
    public boolean getNoCallingConfig(int subId) {
        synchronized (mNoCallingConfigs) {
            if (mNoCallingConfigs.indexOfKey(subId) >= 0) {
                return mNoCallingConfigs.get(subId);
            }
        }
        if (!mDefaultNoCallingConfigLoaded) {
            mDefaultNoCallingConfig =
                    CarrierConfigManager.getDefaultConfig().getBoolean(
@@ -101,4 +121,22 @@ public class CarrierConfigTracker extends BroadcastReceiver {
        }
        return mDefaultNoCallingConfig;
    }

    /**
     * Returns the KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL value for the given subId.
     */
    public boolean getCarrierProvisionsWifiMergedNetworksBool(int subId) {
        synchronized (mCarrierProvisionsWifiMergedNetworks) {
            if (mCarrierProvisionsWifiMergedNetworks.indexOfKey(subId) >= 0) {
                return mCarrierProvisionsWifiMergedNetworks.get(subId);
            }
        }
        if (!mDefaultCarrierProvisionsWifiMergedNetworksLoaded) {
            mDefaultCarrierProvisionsWifiMergedNetworks =
                    CarrierConfigManager.getDefaultConfig().getBoolean(
                            CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL);
            mDefaultCarrierProvisionsWifiMergedNetworksLoaded = true;
        }
        return mDefaultCarrierProvisionsWifiMergedNetworks;
    }
}
+44 −9
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -34,10 +33,6 @@ import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableResources;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
@@ -58,6 +53,7 @@ import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.AccessPointController;
import com.android.systemui.toast.SystemUIToast;
import com.android.systemui.toast.ToastFactory;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.time.FakeSystemClock;
@@ -68,7 +64,6 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

@@ -99,6 +94,8 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Mock
    private Handler mHandler;
    @Mock
    private Handler mWorkerHandler;
    @Mock
    private ActivityStarter mActivityStarter;
    @Mock
    private GlobalSettings mGlobalSettings;
@@ -136,6 +133,8 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    private View mToastView;
    @Mock
    private Animator mAnimator;
    @Mock
    private CarrierConfigTracker mCarrierConfigTracker;

    private TestableResources mTestableResources;
    private MockInternetDialogController mInternetDialogController;
@@ -157,6 +156,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
        when(mWifiEntry4.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_DISCONNECTED);
        mAccessPoints.add(mConnectedEntry);
        mAccessPoints.add(mWifiEntry1);
        when(mAccessPointController.getMergedCarrierEntry()).thenReturn(mMergedCarrierEntry);
        when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{SUB_ID});
        when(mAccessPointController.getMergedCarrierEntry()).thenReturn(mMergedCarrierEntry);
        when(mToastFactory.createToast(any(), anyString(), anyString(), anyInt(), anyInt()))
@@ -170,7 +170,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
                mSubscriptionManager, mTelephonyManager, mWifiManager,
                mock(ConnectivityManager.class), mHandler, mExecutor, mBroadcastDispatcher,
                mock(KeyguardUpdateMonitor.class), mGlobalSettings, mKeyguardStateController,
                mWindowManager, mToastFactory);
                mWindowManager, mToastFactory, mWorkerHandler, mCarrierConfigTracker);
        mSubscriptionManager.addOnSubscriptionsChangedListener(mExecutor,
                mInternetDialogController.mOnSubscriptionsChangedListener);
        mInternetDialogController.onStart(mInternetDialogCallback, true);
@@ -569,6 +569,39 @@ public class InternetDialogControllerTest extends SysuiTestCase {
                .onAccessPointsChanged(mWifiEntries, null /* connectedEntry */);
    }

    @Test
    public void setMergedCarrierWifiEnabledIfNeed_carrierProvisionsEnabled_doNothing() {
        when(mCarrierConfigTracker.getCarrierProvisionsWifiMergedNetworksBool(SUB_ID))
                .thenReturn(true);

        mInternetDialogController.setMergedCarrierWifiEnabledIfNeed(SUB_ID, true);

        verify(mMergedCarrierEntry, never()).setEnabled(anyBoolean());
    }

    @Test
    public void setMergedCarrierWifiEnabledIfNeed_mergedCarrierEntryEmpty_doesntCrash() {
        when(mCarrierConfigTracker.getCarrierProvisionsWifiMergedNetworksBool(SUB_ID))
                .thenReturn(false);
        when(mAccessPointController.getMergedCarrierEntry()).thenReturn(null);

        mInternetDialogController.setMergedCarrierWifiEnabledIfNeed(SUB_ID, true);
    }

    @Test
    public void setMergedCarrierWifiEnabledIfNeed_neededSetMergedCarrierEntry_setTogether() {
        when(mCarrierConfigTracker.getCarrierProvisionsWifiMergedNetworksBool(SUB_ID))
                .thenReturn(false);

        mInternetDialogController.setMergedCarrierWifiEnabledIfNeed(SUB_ID, true);

        verify(mMergedCarrierEntry).setEnabled(true);

        mInternetDialogController.setMergedCarrierWifiEnabledIfNeed(SUB_ID, false);

        verify(mMergedCarrierEntry).setEnabled(false);
    }

    private String getResourcesString(String name) {
        return mContext.getResources().getString(getResourcesId(name));
    }
@@ -591,11 +624,13 @@ public class InternetDialogControllerTest extends SysuiTestCase {
                BroadcastDispatcher broadcastDispatcher,
                KeyguardUpdateMonitor keyguardUpdateMonitor, GlobalSettings globalSettings,
                KeyguardStateController keyguardStateController, WindowManager windowManager,
                ToastFactory toastFactory) {
                ToastFactory toastFactory, Handler workerHandler,
                CarrierConfigTracker carrierConfigTracker) {
            super(context, uiEventLogger, starter, accessPointController, subscriptionManager,
                    telephonyManager, wifiManager, connectivityManager, handler, mainExecutor,
                    broadcastDispatcher, keyguardUpdateMonitor, globalSettings,
                    keyguardStateController, windowManager, toastFactory);
                    keyguardStateController, windowManager, toastFactory, workerHandler,
                    carrierConfigTracker);
            mGlobalSettings = globalSettings;
        }