Merge "[Provider Model] Fix the issue of turning off carrier network" into sc-qpr1-dev am: af065728bc
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15854468 Change-Id: I4bf3bc2dd885fa3fbd48892f7fb5733e6e1526b1
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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(
|
||||
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);
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
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,8 +90,10 @@ public class CarrierConfigTracker extends BroadcastReceiver {
|
||||
* Returns the KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL value for the given subId.
|
||||
*/
|
||||
public boolean getCallStrengthConfig(int subId) {
|
||||
if (mCallStrengthConfigs.indexOfKey(subId) >= 0) {
|
||||
return mCallStrengthConfigs.get(subId);
|
||||
synchronized (mCallStrengthConfigs) {
|
||||
if (mCallStrengthConfigs.indexOfKey(subId) >= 0) {
|
||||
return mCallStrengthConfigs.get(subId);
|
||||
}
|
||||
}
|
||||
if (!mDefaultCallStrengthConfigLoaded) {
|
||||
mDefaultCallStrengthConfig =
|
||||
@@ -90,8 +108,10 @@ public class CarrierConfigTracker extends BroadcastReceiver {
|
||||
* Returns the KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL value for the given subId.
|
||||
*/
|
||||
public boolean getNoCallingConfig(int subId) {
|
||||
if (mNoCallingConfigs.indexOfKey(subId) >= 0) {
|
||||
return mNoCallingConfigs.get(subId);
|
||||
synchronized (mNoCallingConfigs) {
|
||||
if (mNoCallingConfigs.indexOfKey(subId) >= 0) {
|
||||
return mNoCallingConfigs.get(subId);
|
||||
}
|
||||
}
|
||||
if (!mDefaultNoCallingConfigLoaded) {
|
||||
mDefaultNoCallingConfig =
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user