Merge "Fix ClassCastException at NetworkSelectSettings" into udc-qpr-dev
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index ebc3ea6..f20fe1f 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -236,37 +236,44 @@
@Override
public boolean onPreferenceTreeClick(Preference preference) {
- if (preference != mSelectedPreference) {
- stopNetworkQuery();
-
- // Refresh the last selected item in case users reselect network.
- clearPreferenceSummary();
- if (mSelectedPreference != null) {
- // Set summary as "Disconnected" to the previously connected network
- mSelectedPreference.setSummary(R.string.network_disconnected);
- }
-
- mSelectedPreference = (NetworkOperatorPreference) preference;
- mSelectedPreference.setSummary(R.string.network_connecting);
-
- mMetricsFeatureProvider.action(getContext(),
- SettingsEnums.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK);
-
- setProgressBarVisible(true);
- // Disable the screen until network is manually set
- enablePreferenceScreen(false);
-
- mRequestIdManualNetworkSelect = getNewRequestId();
- mWaitingForNumberOfScanResults = MIN_NUMBER_OF_SCAN_REQUIRED;
- final OperatorInfo operator = mSelectedPreference.getOperatorInfo();
- ThreadUtils.postOnBackgroundThread(() -> {
- final Message msg = mHandler.obtainMessage(
- EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE);
- msg.obj = mTelephonyManager.setNetworkSelectionModeManual(
- operator, true /* persistSelection */);
- msg.sendToTarget();
- });
+ if (preference == mSelectedPreference) {
+ Log.d(TAG, "onPreferenceTreeClick: preference is mSelectedPreference. Do nothing.");
+ return true;
}
+ if (!(preference instanceof NetworkOperatorPreference)) {
+ Log.d(TAG, "onPreferenceTreeClick: preference is not the NetworkOperatorPreference.");
+ return false;
+ }
+
+ stopNetworkQuery();
+
+ // Refresh the last selected item in case users reselect network.
+ clearPreferenceSummary();
+ if (mSelectedPreference != null) {
+ // Set summary as "Disconnected" to the previously connected network
+ mSelectedPreference.setSummary(R.string.network_disconnected);
+ }
+
+ mSelectedPreference = (NetworkOperatorPreference) preference;
+ mSelectedPreference.setSummary(R.string.network_connecting);
+
+ mMetricsFeatureProvider.action(getContext(),
+ SettingsEnums.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK);
+
+ setProgressBarVisible(true);
+ // Disable the screen until network is manually set
+ enablePreferenceScreen(false);
+
+ mRequestIdManualNetworkSelect = getNewRequestId();
+ mWaitingForNumberOfScanResults = MIN_NUMBER_OF_SCAN_REQUIRED;
+ final OperatorInfo operator = mSelectedPreference.getOperatorInfo();
+ ThreadUtils.postOnBackgroundThread(() -> {
+ final Message msg = mHandler.obtainMessage(
+ EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE);
+ msg.obj = mTelephonyManager.setNetworkSelectionModeManual(
+ operator, true /* persistSelection */);
+ msg.sendToTarget();
+ });
return true;
}
@@ -563,8 +570,7 @@
int idxPreference = mPreferenceCategory.getPreferenceCount();
while (idxPreference > 0) {
idxPreference--;
- final NetworkOperatorPreference networkOperator = (NetworkOperatorPreference)
- (mPreferenceCategory.getPreference(idxPreference));
+ final Preference networkOperator = mPreferenceCategory.getPreference(idxPreference);
networkOperator.setSummary(null);
}
}
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
index 7d86018..404f56c 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
@@ -25,7 +25,6 @@
import android.content.res.Resources;
import android.os.Bundle;
import android.os.PersistableBundle;
-import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.CellIdentity;
import android.telephony.CellIdentityGsm;
@@ -37,6 +36,7 @@
import android.telephony.CellSignalStrengthLte;
import android.telephony.TelephonyManager;
+import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
@@ -310,4 +310,13 @@
cellInfoGsm.setCellSignalStrength(cssg);
return cellInfoGsm;
}
+
+ @Test
+ @UiThreadTest
+ public void onPreferenceTreeClick_notNetworkOperatorPreference_noCrash() {
+ mNetworkSelectSettings.onCreateInitialization();
+ mNetworkSelectSettings.enablePreferenceScreen(true);
+
+ mNetworkSelectSettings.onPreferenceTreeClick(new Preference(mContext));
+ }
}