Merge "Move telephony method to worker thread"
This commit is contained in:
@@ -96,11 +96,10 @@ public class NetworkSelectSettings extends DashboardFragment {
|
|||||||
com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
|
com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
|
||||||
mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);
|
mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);
|
||||||
|
|
||||||
mConnectedPreferenceCategory =
|
mConnectedPreferenceCategory = findPreference(PREF_KEY_CONNECTED_NETWORK_OPERATOR);
|
||||||
(PreferenceCategory) findPreference(PREF_KEY_CONNECTED_NETWORK_OPERATOR);
|
mPreferenceCategory = findPreference(PREF_KEY_NETWORK_OPERATORS);
|
||||||
mPreferenceCategory =
|
|
||||||
(PreferenceCategory) findPreference(PREF_KEY_NETWORK_OPERATORS);
|
|
||||||
mStatusMessagePreference = new Preference(getContext());
|
mStatusMessagePreference = new Preference(getContext());
|
||||||
|
mStatusMessagePreference.setSelectable(false);
|
||||||
mSelectedPreference = null;
|
mSelectedPreference = null;
|
||||||
mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(mSubId);
|
mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(mSubId);
|
||||||
mNetworkScanHelper = new NetworkScanHelper(
|
mNetworkScanHelper = new NetworkScanHelper(
|
||||||
|
|||||||
@@ -16,41 +16,57 @@
|
|||||||
|
|
||||||
package com.android.settings.network.telephony.gsm;
|
package com.android.settings.network.telephony.gsm;
|
||||||
|
|
||||||
|
import android.app.ProgressDialog;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
import android.os.PersistableBundle;
|
import android.os.PersistableBundle;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.telephony.CarrierConfigManager;
|
import android.telephony.CarrierConfigManager;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
import com.android.settings.network.telephony.MobileNetworkUtils;
|
import com.android.settings.network.telephony.MobileNetworkUtils;
|
||||||
import com.android.settings.network.telephony.NetworkSelectSettings;
|
import com.android.settings.network.telephony.NetworkSelectSettings;
|
||||||
import com.android.settings.network.telephony.TelephonyTogglePreferenceController;
|
import com.android.settings.network.telephony.TelephonyTogglePreferenceController;
|
||||||
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference controller for "Auto Select Network"
|
* Preference controller for "Auto Select Network"
|
||||||
*/
|
*/
|
||||||
public class AutoSelectPreferenceController extends TelephonyTogglePreferenceController {
|
public class AutoSelectPreferenceController extends TelephonyTogglePreferenceController {
|
||||||
|
private static final long MINIMUM_DIALOG_TIME_MILLIS = TimeUnit.SECONDS.toMillis(1);
|
||||||
|
|
||||||
|
private final Handler mUiHandler;
|
||||||
private int mSubId;
|
private int mSubId;
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
private boolean mOnlyAutoSelectInHome;
|
private boolean mOnlyAutoSelectInHome;
|
||||||
private List<OnNetworkSelectModeListener> mListeners;
|
private List<OnNetworkSelectModeListener> mListeners;
|
||||||
|
@VisibleForTesting
|
||||||
|
ProgressDialog mProgressDialog;
|
||||||
|
@VisibleForTesting
|
||||||
|
SwitchPreference mSwitchPreference;
|
||||||
|
|
||||||
public AutoSelectPreferenceController(Context context, String key) {
|
public AutoSelectPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||||
mListeners = new ArrayList<>();
|
mListeners = new ArrayList<>();
|
||||||
|
mUiHandler = new Handler(Looper.getMainLooper());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -60,6 +76,12 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
|
|||||||
: CONDITIONALLY_UNAVAILABLE;
|
: CONDITIONALLY_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
|
super.displayPreference(screen);
|
||||||
|
mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isChecked() {
|
public boolean isChecked() {
|
||||||
return mTelephonyManager.getNetworkSelectionMode()
|
return mTelephonyManager.getNetworkSelectionMode()
|
||||||
@@ -86,14 +108,28 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
|
|||||||
@Override
|
@Override
|
||||||
public boolean setChecked(boolean isChecked) {
|
public boolean setChecked(boolean isChecked) {
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
mTelephonyManager.setNetworkSelectionModeAutomatic();
|
final long startMillis = SystemClock.elapsedRealtime();
|
||||||
|
showAutoSelectProgressBar();
|
||||||
|
mSwitchPreference.setEnabled(false);
|
||||||
|
ThreadUtils.postOnBackgroundThread(() -> {
|
||||||
|
// set network selection mode in background
|
||||||
|
mTelephonyManager.setNetworkSelectionModeAutomatic();
|
||||||
|
final int mode = mTelephonyManager.getNetworkSelectionMode();
|
||||||
|
|
||||||
for (OnNetworkSelectModeListener lsn : mListeners) {
|
//Update UI in UI thread
|
||||||
lsn.onNetworkSelectModeChanged();
|
final long durationMillis = SystemClock.elapsedRealtime() - startMillis;
|
||||||
}
|
mUiHandler.postDelayed(() -> {
|
||||||
// Manually check whether it is successfully
|
mSwitchPreference.setEnabled(true);
|
||||||
return mTelephonyManager.getNetworkSelectionMode()
|
mSwitchPreference.setChecked(
|
||||||
== TelephonyManager.NETWORK_SELECTION_MODE_AUTO;
|
mode == TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
|
||||||
|
for (OnNetworkSelectModeListener lsn : mListeners) {
|
||||||
|
lsn.onNetworkSelectModeChanged();
|
||||||
|
}
|
||||||
|
dismissProgressBar();
|
||||||
|
},
|
||||||
|
Math.max(MINIMUM_DIALOG_TIME_MILLIS - durationMillis, 0));
|
||||||
|
});
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
final Bundle bundle = new Bundle();
|
final Bundle bundle = new Bundle();
|
||||||
bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
|
bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
|
||||||
@@ -126,6 +162,24 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showAutoSelectProgressBar() {
|
||||||
|
if (mProgressDialog == null) {
|
||||||
|
mProgressDialog = new ProgressDialog(mContext);
|
||||||
|
mProgressDialog.setMessage(
|
||||||
|
mContext.getResources().getString(R.string.register_automatically));
|
||||||
|
mProgressDialog.setCanceledOnTouchOutside(false);
|
||||||
|
mProgressDialog.setCancelable(false);
|
||||||
|
mProgressDialog.setIndeterminate(true);
|
||||||
|
}
|
||||||
|
mProgressDialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dismissProgressBar() {
|
||||||
|
if (mProgressDialog != null && mProgressDialog.isShowing()) {
|
||||||
|
mProgressDialog.dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback when network select mode is changed
|
* Callback when network select mode is changed
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -23,13 +23,14 @@ import static org.mockito.Mockito.spy;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.PersistableBundle;
|
import android.os.PersistableBundle;
|
||||||
import android.telephony.CarrierConfigManager;
|
import android.telephony.CarrierConfigManager;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
|
||||||
@@ -39,6 +40,7 @@ import org.junit.runner.RunWith;
|
|||||||
import org.mockito.Answers;
|
import org.mockito.Answers;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.robolectric.Robolectric;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
@@ -53,10 +55,12 @@ public class AutoSelectPreferenceControllerTest {
|
|||||||
private SubscriptionManager mSubscriptionManager;
|
private SubscriptionManager mSubscriptionManager;
|
||||||
@Mock
|
@Mock
|
||||||
private CarrierConfigManager mCarrierConfigManager;
|
private CarrierConfigManager mCarrierConfigManager;
|
||||||
|
@Mock
|
||||||
|
private ProgressDialog mProgressDialog;
|
||||||
|
|
||||||
private PersistableBundle mCarrierConfig;
|
private PersistableBundle mCarrierConfig;
|
||||||
private AutoSelectPreferenceController mController;
|
private AutoSelectPreferenceController mController;
|
||||||
private Preference mPreference;
|
private SwitchPreference mSwitchPreference;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -75,18 +79,22 @@ public class AutoSelectPreferenceControllerTest {
|
|||||||
true);
|
true);
|
||||||
when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);
|
when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);
|
||||||
|
|
||||||
mPreference = new Preference(mContext);
|
mSwitchPreference = new SwitchPreference(mContext);
|
||||||
mController = new AutoSelectPreferenceController(mContext, "auto_select");
|
mController = new AutoSelectPreferenceController(mContext, "auto_select");
|
||||||
|
mController.mProgressDialog = mProgressDialog;
|
||||||
|
mController.mSwitchPreference = mSwitchPreference;
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setChecked_isChecked_updateValue() {
|
public void setChecked_isChecked_showProgressDialog() {
|
||||||
when(mTelephonyManager.getNetworkSelectionMode()).thenReturn(
|
when(mTelephonyManager.getNetworkSelectionMode()).thenReturn(
|
||||||
TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
|
TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
|
||||||
|
|
||||||
assertThat(mController.setChecked(true)).isTrue();
|
assertThat(mController.setChecked(true)).isFalse();
|
||||||
|
Robolectric.flushBackgroundThreadScheduler();
|
||||||
|
|
||||||
|
verify(mProgressDialog).show();
|
||||||
verify(mTelephonyManager).setNetworkSelectionModeAutomatic();
|
verify(mTelephonyManager).setNetworkSelectionModeAutomatic();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,9 +102,9 @@ public class AutoSelectPreferenceControllerTest {
|
|||||||
public void updateState_isRoaming_enabled() {
|
public void updateState_isRoaming_enabled() {
|
||||||
when(mTelephonyManager.getServiceState().getRoaming()).thenReturn(true);
|
when(mTelephonyManager.getServiceState().getRoaming()).thenReturn(true);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mSwitchPreference);
|
||||||
|
|
||||||
assertThat(mPreference.isEnabled()).isTrue();
|
assertThat(mSwitchPreference.isEnabled()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -104,10 +112,10 @@ public class AutoSelectPreferenceControllerTest {
|
|||||||
when(mTelephonyManager.getServiceState().getRoaming()).thenReturn(false);
|
when(mTelephonyManager.getServiceState().getRoaming()).thenReturn(false);
|
||||||
doReturn(OPERATOR_NAME).when(mTelephonyManager).getSimOperatorName();
|
doReturn(OPERATOR_NAME).when(mTelephonyManager).getSimOperatorName();
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mSwitchPreference);
|
||||||
|
|
||||||
assertThat(mPreference.isEnabled()).isFalse();
|
assertThat(mSwitchPreference.isEnabled()).isFalse();
|
||||||
assertThat(mPreference.getSummary()).isEqualTo(
|
assertThat(mSwitchPreference.getSummary()).isEqualTo(
|
||||||
mContext.getString(R.string.manual_mode_disallowed_summary,
|
mContext.getString(R.string.manual_mode_disallowed_summary,
|
||||||
mTelephonyManager.getSimOperatorName()));
|
mTelephonyManager.getSimOperatorName()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user