Loading src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java +28 −10 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; /** * Preference controller for "Auto Select Network" Loading @@ -70,11 +72,17 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon ProgressDialog mProgressDialog; @VisibleForTesting SwitchPreference mSwitchPreference; private AtomicBoolean mUpdatingConfig; private int mCacheOfModeStatus; private AtomicLong mRecursiveUpdate; public AutoSelectPreferenceController(Context context, String key) { super(context, key); mTelephonyManager = context.getSystemService(TelephonyManager.class); mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; mRecursiveUpdate = new AtomicLong(); mUpdatingConfig = new AtomicBoolean(); mCacheOfModeStatus = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN; mListeners = new ArrayList<>(); mUiHandler = new Handler(Looper.getMainLooper()); mAllowedNetworkTypesListener = new AllowedNetworkTypesListener( Loading @@ -88,7 +96,9 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon displayPreference(mPreferenceScreen); } if (mSwitchPreference != null) { mRecursiveUpdate.getAndIncrement(); updateState(mSwitchPreference); mRecursiveUpdate.decrementAndGet(); } } Loading Loading @@ -118,8 +128,13 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon @Override public boolean isChecked() { return mTelephonyManager.getNetworkSelectionMode() == TelephonyManager.NETWORK_SELECTION_MODE_AUTO; if (!mUpdatingConfig.get()) { mCacheOfModeStatus = mTelephonyManager.getNetworkSelectionMode(); for (OnNetworkSelectModeListener lsn : mListeners) { lsn.onNetworkSelectModeUpdated(mCacheOfModeStatus); } } return mCacheOfModeStatus == TelephonyManager.NETWORK_SELECTION_MODE_AUTO; } @Override Loading Loading @@ -147,6 +162,10 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon @Override public boolean setChecked(boolean isChecked) { if (mRecursiveUpdate.get() != 0) { // Changing from software are allowed and changing presentation only. return true; } if (isChecked) { setAutomaticSelectionMode(); } else { Loading @@ -171,18 +190,17 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon } return ThreadUtils.postOnBackgroundThread(() -> { // set network selection mode in background mUpdatingConfig.set(true); mTelephonyManager.setNetworkSelectionModeAutomatic(); final int mode = mTelephonyManager.getNetworkSelectionMode(); mUpdatingConfig.set(false); //Update UI in UI thread final long durationMillis = SystemClock.elapsedRealtime() - startMillis; mUiHandler.postDelayed(() -> { mRecursiveUpdate.getAndIncrement(); mSwitchPreference.setEnabled(true); mSwitchPreference.setChecked( mode == TelephonyManager.NETWORK_SELECTION_MODE_AUTO); for (OnNetworkSelectModeListener lsn : mListeners) { lsn.onNetworkSelectModeChanged(); } mSwitchPreference.setChecked(isChecked()); mRecursiveUpdate.decrementAndGet(); dismissProgressBar(); }, Math.max(MINIMUM_DIALOG_TIME_MILLIS - durationMillis, 0)); }); Loading Loading @@ -232,11 +250,11 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon } /** * Callback when network select mode is changed * Callback when network select mode might get updated * * @see TelephonyManager#getNetworkSelectionMode() */ public interface OnNetworkSelectModeListener { void onNetworkSelectModeChanged(); void onNetworkSelectModeUpdated(int mode); } } src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java +8 −3 Original line number Diff line number Diff line Loading @@ -48,11 +48,13 @@ public class OpenNetworkSelectPagePreferenceController extends private Preference mPreference; private PreferenceScreen mPreferenceScreen; private AllowedNetworkTypesListener mAllowedNetworkTypesListener; private int mCacheOfModeStatus; public OpenNetworkSelectPagePreferenceController(Context context, String key) { super(context, key); mTelephonyManager = context.getSystemService(TelephonyManager.class); mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; mCacheOfModeStatus = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN; mAllowedNetworkTypesListener = new AllowedNetworkTypesListener( context.getMainExecutor()); mAllowedNetworkTypesListener.setAllowedNetworkTypesListener( Loading Loading @@ -96,7 +98,7 @@ public class OpenNetworkSelectPagePreferenceController extends @Override public void updateState(Preference preference) { super.updateState(preference); preference.setEnabled(mTelephonyManager.getNetworkSelectionMode() preference.setEnabled(mCacheOfModeStatus != TelephonyManager.NETWORK_SELECTION_MODE_AUTO); Intent intent = new Intent(); Loading Loading @@ -125,7 +127,10 @@ public class OpenNetworkSelectPagePreferenceController extends } @Override public void onNetworkSelectModeChanged() { public void onNetworkSelectModeUpdated(int mode) { mCacheOfModeStatus = mode; if (mPreference != null) { updateState(mPreference); } } } tests/unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.java +7 −4 Original line number Diff line number Diff line Loading @@ -93,15 +93,18 @@ public class OpenNetworkSelectPagePreferenceControllerTest { mPreference = new Preference(mContext); mController = new OpenNetworkSelectPagePreferenceController(mContext, "open_network_select"); "open_network_select") { @Override public void updateState(Preference preference) { super.updateState(mPreference); } }; mController.init(mLifecycle, SUB_ID); } @Test public void updateState_modeAuto_disabled() { when(mTelephonyManager.getNetworkSelectionMode()).thenReturn( TelephonyManager.NETWORK_SELECTION_MODE_AUTO); mController.onNetworkSelectModeUpdated(TelephonyManager.NETWORK_SELECTION_MODE_AUTO); mController.updateState(mPreference); assertThat(mPreference.isEnabled()).isFalse(); Loading Loading
src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java +28 −10 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; /** * Preference controller for "Auto Select Network" Loading @@ -70,11 +72,17 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon ProgressDialog mProgressDialog; @VisibleForTesting SwitchPreference mSwitchPreference; private AtomicBoolean mUpdatingConfig; private int mCacheOfModeStatus; private AtomicLong mRecursiveUpdate; public AutoSelectPreferenceController(Context context, String key) { super(context, key); mTelephonyManager = context.getSystemService(TelephonyManager.class); mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; mRecursiveUpdate = new AtomicLong(); mUpdatingConfig = new AtomicBoolean(); mCacheOfModeStatus = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN; mListeners = new ArrayList<>(); mUiHandler = new Handler(Looper.getMainLooper()); mAllowedNetworkTypesListener = new AllowedNetworkTypesListener( Loading @@ -88,7 +96,9 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon displayPreference(mPreferenceScreen); } if (mSwitchPreference != null) { mRecursiveUpdate.getAndIncrement(); updateState(mSwitchPreference); mRecursiveUpdate.decrementAndGet(); } } Loading Loading @@ -118,8 +128,13 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon @Override public boolean isChecked() { return mTelephonyManager.getNetworkSelectionMode() == TelephonyManager.NETWORK_SELECTION_MODE_AUTO; if (!mUpdatingConfig.get()) { mCacheOfModeStatus = mTelephonyManager.getNetworkSelectionMode(); for (OnNetworkSelectModeListener lsn : mListeners) { lsn.onNetworkSelectModeUpdated(mCacheOfModeStatus); } } return mCacheOfModeStatus == TelephonyManager.NETWORK_SELECTION_MODE_AUTO; } @Override Loading Loading @@ -147,6 +162,10 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon @Override public boolean setChecked(boolean isChecked) { if (mRecursiveUpdate.get() != 0) { // Changing from software are allowed and changing presentation only. return true; } if (isChecked) { setAutomaticSelectionMode(); } else { Loading @@ -171,18 +190,17 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon } return ThreadUtils.postOnBackgroundThread(() -> { // set network selection mode in background mUpdatingConfig.set(true); mTelephonyManager.setNetworkSelectionModeAutomatic(); final int mode = mTelephonyManager.getNetworkSelectionMode(); mUpdatingConfig.set(false); //Update UI in UI thread final long durationMillis = SystemClock.elapsedRealtime() - startMillis; mUiHandler.postDelayed(() -> { mRecursiveUpdate.getAndIncrement(); mSwitchPreference.setEnabled(true); mSwitchPreference.setChecked( mode == TelephonyManager.NETWORK_SELECTION_MODE_AUTO); for (OnNetworkSelectModeListener lsn : mListeners) { lsn.onNetworkSelectModeChanged(); } mSwitchPreference.setChecked(isChecked()); mRecursiveUpdate.decrementAndGet(); dismissProgressBar(); }, Math.max(MINIMUM_DIALOG_TIME_MILLIS - durationMillis, 0)); }); Loading Loading @@ -232,11 +250,11 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon } /** * Callback when network select mode is changed * Callback when network select mode might get updated * * @see TelephonyManager#getNetworkSelectionMode() */ public interface OnNetworkSelectModeListener { void onNetworkSelectModeChanged(); void onNetworkSelectModeUpdated(int mode); } }
src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java +8 −3 Original line number Diff line number Diff line Loading @@ -48,11 +48,13 @@ public class OpenNetworkSelectPagePreferenceController extends private Preference mPreference; private PreferenceScreen mPreferenceScreen; private AllowedNetworkTypesListener mAllowedNetworkTypesListener; private int mCacheOfModeStatus; public OpenNetworkSelectPagePreferenceController(Context context, String key) { super(context, key); mTelephonyManager = context.getSystemService(TelephonyManager.class); mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; mCacheOfModeStatus = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN; mAllowedNetworkTypesListener = new AllowedNetworkTypesListener( context.getMainExecutor()); mAllowedNetworkTypesListener.setAllowedNetworkTypesListener( Loading Loading @@ -96,7 +98,7 @@ public class OpenNetworkSelectPagePreferenceController extends @Override public void updateState(Preference preference) { super.updateState(preference); preference.setEnabled(mTelephonyManager.getNetworkSelectionMode() preference.setEnabled(mCacheOfModeStatus != TelephonyManager.NETWORK_SELECTION_MODE_AUTO); Intent intent = new Intent(); Loading Loading @@ -125,7 +127,10 @@ public class OpenNetworkSelectPagePreferenceController extends } @Override public void onNetworkSelectModeChanged() { public void onNetworkSelectModeUpdated(int mode) { mCacheOfModeStatus = mode; if (mPreference != null) { updateState(mPreference); } } }
tests/unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.java +7 −4 Original line number Diff line number Diff line Loading @@ -93,15 +93,18 @@ public class OpenNetworkSelectPagePreferenceControllerTest { mPreference = new Preference(mContext); mController = new OpenNetworkSelectPagePreferenceController(mContext, "open_network_select"); "open_network_select") { @Override public void updateState(Preference preference) { super.updateState(mPreference); } }; mController.init(mLifecycle, SUB_ID); } @Test public void updateState_modeAuto_disabled() { when(mTelephonyManager.getNetworkSelectionMode()).thenReturn( TelephonyManager.NETWORK_SELECTION_MODE_AUTO); mController.onNetworkSelectModeUpdated(TelephonyManager.NETWORK_SELECTION_MODE_AUTO); mController.updateState(mPreference); assertThat(mPreference.isEnabled()).isFalse(); Loading