Update NetworkSelectSettings page
Clean it up and make it compatiable with all devices. Before this CL
it only used in Pixel 3 with new moderm.
Bug: 114749736
Test: RunSettingsRoboTests
Change-Id: Iad3bc131e294d34cff90b9130715780182adccd7
diff --git a/src/com/android/settings/network/telephony/NetworkOperatorPreference.java b/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
index 79ccf9c..ad0285f 100644
--- a/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
+++ b/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
@@ -22,6 +22,7 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.telephony.CellInfo;
+import android.telephony.CellSignalStrength;
import android.telephony.SignalStrength;
import android.util.Log;
import android.view.Gravity;
@@ -40,11 +41,14 @@
private static final String TAG = "NetworkOperatorPref";
private static final boolean DBG = false;
+
+ private static final int LEVEL_NONE = -1;
+
// number of signal strength level
public static final int NUMBER_OF_LEVELS = SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
private CellInfo mCellInfo;
private List<String> mForbiddenPlmns;
- private int mLevel = -1;
+ private int mLevel = LEVEL_NONE;
private boolean mShow4GForLTE;
// The following constants are used to draw signal icon.
@@ -74,7 +78,9 @@
networkTitle += " " + getContext().getResources().getString(R.string.forbidden_network);
}
setTitle(networkTitle);
- int level = mCellInfo.getCellSignalStrength().getLevel();
+
+ final CellSignalStrength signalStrength = mCellInfo.getCellSignalStrength();
+ final int level = signalStrength != null ? signalStrength.getLevel() : LEVEL_NONE;
if (DBG) Log.d(TAG, "refresh level: " + String.valueOf(level));
if (mLevel != level) {
mLevel = level;
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index ec199e6..830964b 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -17,13 +17,12 @@
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.MOBILE_NETWORK_SELECT;
+import android.app.Activity;
import android.content.Context;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PersistableBundle;
-import android.provider.SearchIndexableResource;
import android.telephony.AccessNetworkConstants;
import android.telephony.CarrierConfigManager;
import android.telephony.CellIdentity;
@@ -32,23 +31,18 @@
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
-import android.util.Log;
import android.view.View;
-import android.view.ViewGroup;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceScreen;
-import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.telephony.OperatorInfo;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-import com.android.settingslib.search.SearchIndexable;
-import com.android.settingslib.utils.ThreadUtils;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import java.util.ArrayList;
import java.util.Arrays;
@@ -61,14 +55,10 @@
/**
* "Choose network" settings UI for the Phone app.
*/
-//TODO(b/115429509): Add test for this file once b/115429509 is not blocked anymore
-@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class NetworkSelectSettings extends DashboardFragment {
private static final String TAG = "NetworkSelectSettings";
- private static final boolean DBG = true;
- private static final int EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE = 1;
private static final int EVENT_NETWORK_SCAN_RESULTS = 2;
private static final int EVENT_NETWORK_SCAN_ERROR = 3;
private static final int EVENT_NETWORK_SCAN_COMPLETED = 4;
@@ -77,41 +67,41 @@
"connected_network_operator_preference";
private static final String PREF_KEY_NETWORK_OPERATORS = "network_operators_preference";
- // used to add/remove NetworkOperatorsPreference.
- private PreferenceCategory mNetworkOperatorsPreferences;
- // used to add/remove connected NetworkOperatorPreference.
- private PreferenceCategory mConnectedNetworkOperatorsPreference;
- // manage the progress bar on the top of the page.
+ @VisibleForTesting
+ PreferenceCategory mPreferenceCategory;
+ @VisibleForTesting
+ PreferenceCategory mConnectedPreferenceCategory;
+ @VisibleForTesting
+ NetworkOperatorPreference mSelectedPreference;
private View mProgressHeader;
private Preference mStatusMessagePreference;
- private List<CellInfo> mCellInfoList;
+ @VisibleForTesting
+ List<CellInfo> mCellInfoList;
private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- private ViewGroup mFrameLayout;
- private NetworkOperatorPreference mSelectedNetworkOperatorPreference;
- private TelephonyManager mTelephonyManager;
+ @VisibleForTesting
+ TelephonyManager mTelephonyManager;
private List<String> mForbiddenPlmns;
private boolean mShow4GForLTE = true;
private NetworkScanHelper mNetworkScanHelper;
private final ExecutorService mNetworkScanExecutor = Executors.newFixedThreadPool(1);
-
- private final Runnable mUpdateNetworkOperatorsRunnable = () -> {
- updateNetworkOperatorsPreferenceCategory();
- };
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+ private boolean mUseNewApi;
@Override
public void onCreate(Bundle icicle) {
- if (DBG) logd("onCreate");
super.onCreate(icicle);
+ mUseNewApi = getContext().getResources().getBoolean(
+ com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
mSubId = getArguments().getInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID);
addPreferencesFromResource(R.xml.choose_network);
- mConnectedNetworkOperatorsPreference =
+ mConnectedPreferenceCategory =
(PreferenceCategory) findPreference(PREF_KEY_CONNECTED_NETWORK_OPERATOR);
- mNetworkOperatorsPreferences =
+ mPreferenceCategory =
(PreferenceCategory) findPreference(PREF_KEY_NETWORK_OPERATORS);
mStatusMessagePreference = new Preference(getContext());
- mSelectedNetworkOperatorPreference = null;
+ mSelectedPreference = null;
mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(mSubId);
mNetworkScanHelper = new NetworkScanHelper(
mTelephonyManager, mCallback, mNetworkScanExecutor);
@@ -121,114 +111,82 @@
mShow4GForLTE = bundle.getBoolean(
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
}
- setRetainInstance(true);
+
+ mMetricsFeatureProvider = FeatureFactory
+ .getFactory(getContext()).getMetricsFeatureProvider();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
- if (DBG) logd("onViewCreated");
super.onViewCreated(view, savedInstanceState);
- // TODO(b/114749736): build the progress bar
- forceConfigConnectedNetworkOperatorsPreferenceCategory();
+ final Activity activity = getActivity();
+ if (activity != null) {
+ mProgressHeader = setPinnedHeaderView(R.layout.wifi_progress_header)
+ .findViewById(R.id.progress_bar_animation);
+ setProgressBarVisible(false);
+ }
+ forceUpdateConnectedPreferenceCategory();
}
@Override
public void onStart() {
- if (DBG) logd("onStart");
super.onStart();
- new AsyncTask<Void, Void, List<String>>() {
- @Override
- protected List<String> doInBackground(Void... voids) {
- String[] forbiddenPlmns = mTelephonyManager.getForbiddenPlmns();
- return forbiddenPlmns != null ? Arrays.asList(forbiddenPlmns) : null;
- }
+ mForbiddenPlmns = Arrays.asList(mTelephonyManager.getForbiddenPlmns());
+ setProgressBarVisible(true);
- @Override
- protected void onPostExecute(List<String> result) {
- mForbiddenPlmns = result;
- loadNetworksList();
- }
- }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
-
- /**
- * Invoked on each preference click in this hierarchy, overrides
- * PreferenceActivity's implementation. Used to make sure we track the
- * preference click events.
- * Since the connected network operator is either faked (when no data connection) or already
- * connected, we do not allow user to click the connected network operator.
- */
- @Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (DBG) logd("User clicked the screen");
- stopNetworkQuery();
- setProgressBarVisible(false);
- if (preference instanceof NetworkOperatorPreference) {
- // Refresh the last selected item in case users reselect network.
- if (mSelectedNetworkOperatorPreference != null) {
- mSelectedNetworkOperatorPreference.setSummary("");
- }
-
- mSelectedNetworkOperatorPreference = (NetworkOperatorPreference) preference;
- CellInfo cellInfo = mSelectedNetworkOperatorPreference.getCellInfo();
- if (DBG) logd("User click a NetworkOperatorPreference: " + cellInfo.toString());
-
- // Send metrics event
- MetricsLogger.action(getContext(),
- MetricsEvent.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK);
-
- // Connect to the network
- if (SubscriptionManager.isValidSubscriptionId(mSubId)) {
- if (DBG) {
- logd("Connect to the network: " + CellInfoUtil.getNetworkTitle(cellInfo));
- }
- // Set summary as "Connecting" to the selected network.
- mSelectedNetworkOperatorPreference.setSummary(R.string.network_connecting);
-
- // Set summary as "Disconnected" to the previously connected network
- if (mConnectedNetworkOperatorsPreference.getPreferenceCount() > 0) {
- NetworkOperatorPreference connectedNetworkOperator = (NetworkOperatorPreference)
- (mConnectedNetworkOperatorsPreference.getPreference(0));
- if (!CellInfoUtil.getNetworkTitle(cellInfo).equals(
- CellInfoUtil.getNetworkTitle(connectedNetworkOperator.getCellInfo()))) {
- connectedNetworkOperator.setSummary(R.string.network_disconnected);
- }
- }
-
- OperatorInfo operatorInfo = CellInfoUtil.getOperatorInfoFromCellInfo(cellInfo);
- if (DBG) logd("manually selected network operator: " + operatorInfo.toString());
-
- ThreadUtils.postOnBackgroundThread(() -> {
- Message msg = mHandler.obtainMessage(EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE);
- msg.obj = mTelephonyManager.setNetworkSelectionModeManual(
- operatorInfo, true /* persistSelection */);
- msg.sendToTarget();
- });
-
- setProgressBarVisible(true);
- return true;
- } else {
- loge("Error selecting network. Subscription Id is invalid.");
- mSelectedNetworkOperatorPreference = null;
- return false;
- }
-
+ if (mUseNewApi) {
+ mNetworkScanHelper.startNetworkScan(
+ NetworkScanHelper.NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS);
} else {
- getPreferenceScreen().setEnabled(false);
- return false;
+ mNetworkScanHelper.startNetworkScan(
+ NetworkScanHelper.NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS);
}
}
@Override
public void onStop() {
super.onStop();
- if (DBG) logd("onStop");
- getView().removeCallbacks(mUpdateNetworkOperatorsRunnable);
stopNetworkQuery();
}
@Override
+ public boolean onPreferenceTreeClick(Preference preference) {
+ if (preference != mSelectedPreference) {
+ stopNetworkQuery();
+ setProgressBarVisible(false);
+ // Refresh the last selected item in case users reselect network.
+ if (mSelectedPreference != null) {
+ mSelectedPreference.setSummary(null);
+ }
+
+ mSelectedPreference = (NetworkOperatorPreference) preference;
+ CellInfo cellInfo = mSelectedPreference.getCellInfo();
+
+ mMetricsFeatureProvider.action(getContext(),
+ MetricsEvent.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK);
+
+ // Set summary as "Disconnected" to the previously connected network
+ if (mConnectedPreferenceCategory.getPreferenceCount() > 0) {
+ NetworkOperatorPreference connectedNetworkOperator = (NetworkOperatorPreference)
+ (mConnectedPreferenceCategory.getPreference(0));
+ if (!CellInfoUtil.getNetworkTitle(cellInfo).equals(
+ CellInfoUtil.getNetworkTitle(connectedNetworkOperator.getCellInfo()))) {
+ connectedNetworkOperator.setSummary(R.string.network_disconnected);
+ }
+ }
+
+ final OperatorInfo operatorInfo = CellInfoUtil.getOperatorInfoFromCellInfo(cellInfo);
+ final boolean isSuccess = mTelephonyManager.setNetworkSelectionModeManual(
+ operatorInfo, true /* persistSelection */);
+ mSelectedPreference.setSummary(
+ isSuccess ? R.string.network_connected : R.string.network_could_not_connect);
+ }
+
+ return true;
+ }
+
+ @Override
protected int getPreferenceScreenResId() {
return R.xml.choose_network;
}
@@ -247,29 +205,11 @@
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
- case EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE:
- if (DBG) logd("network selection done: hide the progress header");
- setProgressBarVisible(false);
-
- boolean isSuccessed = (boolean) msg.obj;
- if (isSuccessed) {
- if (DBG) logd("manual network selection: succeeded! ");
- // Set summary as "Connected" to the selected network.
- mSelectedNetworkOperatorPreference.setSummary(R.string.network_connected);
- } else {
- if (DBG) logd("manual network selection: failed! ");
- // Set summary as "Couldn't connect" to the selected network.
- mSelectedNetworkOperatorPreference.setSummary(
- R.string.network_could_not_connect);
- }
- break;
-
case EVENT_NETWORK_SCAN_RESULTS:
List<CellInfo> results = aggregateCellInfoList((List<CellInfo>) msg.obj);
mCellInfoList = new ArrayList<>(results);
- if (DBG) logd("after aggregate: " + mCellInfoList.toString());
if (mCellInfoList != null && mCellInfoList.size() != 0) {
- updateNetworkOperators();
+ updateAllPreferenceCategory();
} else {
addMessagePreference(R.string.empty_networks_list);
}
@@ -277,15 +217,12 @@
break;
case EVENT_NETWORK_SCAN_ERROR:
- int error = msg.arg1;
- if (DBG) logd("error while querying available networks " + error);
stopNetworkQuery();
addMessagePreference(R.string.network_query_error);
break;
case EVENT_NETWORK_SCAN_COMPLETED:
stopNetworkQuery();
- if (DBG) logd("scan complete");
if (mCellInfoList == null) {
// In case the scan timeout before getting any results
addMessagePreference(R.string.empty_networks_list);
@@ -296,47 +233,25 @@
}
};
- private void loadNetworksList() {
- if (DBG) logd("load networks list...");
- setProgressBarVisible(true);
- mNetworkScanHelper.startNetworkScan(
- NetworkScanHelper.NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS);
- }
-
private final NetworkScanHelper.NetworkScanCallback mCallback =
new NetworkScanHelper.NetworkScanCallback() {
public void onResults(List<CellInfo> results) {
- if (DBG) logd("get scan results.");
Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_RESULTS, results);
msg.sendToTarget();
}
public void onComplete() {
- if (DBG) logd("network scan completed.");
Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_COMPLETED);
msg.sendToTarget();
}
public void onError(int error) {
- if (DBG) logd("get onError callback with error code: " + error);
Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_ERROR, error,
0 /* arg2 */);
msg.sendToTarget();
}
};
- private void updateNetworkOperators() {
- if (DBG) logd("updateNetworkOperators");
- if (getActivity() != null) {
- final View view = getView();
- final Handler handler = view.getHandler();
- if (handler != null && handler.hasCallbacks(mUpdateNetworkOperatorsRunnable)) {
- return;
- }
- view.post(mUpdateNetworkOperatorsRunnable);
- }
- }
-
/**
* Update the currently available network operators list, which only contains the unregistered
* network operators. So if the device has no data and the network operator in the connected
@@ -345,17 +260,18 @@
* network operator in the connected network operator category shows "Connected", it will not
* exist in the available network category.
*/
- private void updateNetworkOperatorsPreferenceCategory() {
- mNetworkOperatorsPreferences.removeAll();
+ @VisibleForTesting
+ void updateAllPreferenceCategory() {
+ updateConnectedPreferenceCategory();
- configConnectedNetworkOperatorsPreferenceCategory();
+ mPreferenceCategory.removeAll();
for (int index = 0; index < mCellInfoList.size(); index++) {
if (!mCellInfoList.get(index).isRegistered()) {
NetworkOperatorPreference pref = new NetworkOperatorPreference(
mCellInfoList.get(index), getContext(), mForbiddenPlmns, mShow4GForLTE);
pref.setKey(CellInfoUtil.getNetworkTitle(mCellInfoList.get(index)));
pref.setOrder(index);
- mNetworkOperatorsPreferences.addPreference(pref);
+ mPreferenceCategory.addPreference(pref);
}
}
}
@@ -363,33 +279,30 @@
/**
* Config the connected network operator preference when the page was created. When user get
* into this page, the device might or might not have data connection.
- * - If the device has data:
- * 1. use {@code ServiceState#getNetworkRegistrationStates()} to get the currently
- * registered cellIdentity, wrap it into a CellInfo;
- * 2. set the signal strength level as strong;
- * 3. use {@link TelephonyManager#getNetworkOperatorName()} to get the title of the
- * previously connected network operator, since the CellIdentity got from step 1 only has
- * PLMN.
- * - If the device has no data, we will remove the connected network operators list from the
- * screen.
+ * - If the device has data:
+ * 1. use {@code ServiceState#getNetworkRegistrationStates()} to get the currently
+ * registered cellIdentity, wrap it into a CellInfo;
+ * 2. set the signal strength level as strong;
+ * 3. use {@link TelephonyManager#getNetworkOperatorName()} to get the title of the
+ * previously connected network operator, since the CellIdentity got from step 1 only has
+ * PLMN.
+ * - If the device has no data, we will remove the connected network operators list from the
+ * screen.
*/
- private void forceConfigConnectedNetworkOperatorsPreferenceCategory() {
- if (DBG) logd("Force config ConnectedNetworkOperatorsPreferenceCategory");
+ private void forceUpdateConnectedPreferenceCategory() {
if (mTelephonyManager.getDataState() == mTelephonyManager.DATA_CONNECTED) {
// Try to get the network registration states
ServiceState ss = mTelephonyManager.getServiceState();
List<NetworkRegistrationState> networkList =
ss.getNetworkRegistrationStates(AccessNetworkConstants.TransportType.WWAN);
if (networkList == null || networkList.size() == 0) {
- loge("getNetworkRegistrationStates return null");
// Remove the connected network operators category
- removeConnectedNetworkOperatorPreference();
+ mConnectedPreferenceCategory.setVisible(false);
return;
}
CellIdentity cellIdentity = networkList.get(0).getCellIdentity();
CellInfo cellInfo = CellInfoUtil.wrapCellInfoWithCellIdentity(cellIdentity);
if (cellInfo != null) {
- if (DBG) logd("Currently registered cell: " + cellInfo.toString());
NetworkOperatorPreference pref = new NetworkOperatorPreference(
cellInfo, getContext(), mForbiddenPlmns, mShow4GForLTE);
pref.setTitle(mTelephonyManager.getNetworkOperatorName());
@@ -397,17 +310,14 @@
// Update the signal strength icon, since the default signalStrength value would be
// zero (it would be quite confusing why the connected network has no signal)
pref.setIcon(NetworkOperatorPreference.NUMBER_OF_LEVELS - 1);
-
- mConnectedNetworkOperatorsPreference.addPreference(pref);
+ mConnectedPreferenceCategory.addPreference(pref);
} else {
- loge("Invalid CellIfno: " + cellInfo.toString());
// Remove the connected network operators category
- removeConnectedNetworkOperatorPreference();
+ mConnectedPreferenceCategory.setVisible(false);
}
} else {
- if (DBG) logd("No currently registered cell");
// Remove the connected network operators category
- removeConnectedNetworkOperatorPreference();
+ mConnectedPreferenceCategory.setVisible(false);
}
}
@@ -416,74 +326,27 @@
* configured if the category is currently empty or the operator network title of the previous
* connected network is different from the new one.
*/
- private void configConnectedNetworkOperatorsPreferenceCategory() {
- if (DBG) logd("config ConnectedNetworkOperatorsPreferenceCategory");
- // Remove the category if the CellInfo list is empty or does not have registered cell.
- if (mCellInfoList.size() == 0) {
- if (DBG) logd("empty cellinfo list");
- removeConnectedNetworkOperatorPreference();
- }
+ private void updateConnectedPreferenceCategory() {
CellInfo connectedNetworkOperator = null;
- for (CellInfo cellInfo: mCellInfoList) {
+ for (CellInfo cellInfo : mCellInfoList) {
if (cellInfo.isRegistered()) {
connectedNetworkOperator = cellInfo;
break;
}
}
- if (connectedNetworkOperator == null) {
- if (DBG) logd("no registered network");
- removeConnectedNetworkOperatorPreference();
- return;
- }
- // config the category if it is empty.
- if (mConnectedNetworkOperatorsPreference.getPreferenceCount() == 0) {
- if (DBG) logd("ConnectedNetworkSelectList is empty, add one");
+ if (connectedNetworkOperator != null) {
addConnectedNetworkOperatorPreference(connectedNetworkOperator);
- return;
}
- NetworkOperatorPreference previousConnectedNetworkOperator = (NetworkOperatorPreference)
- (mConnectedNetworkOperatorsPreference.getPreference(0));
-
- // config the category if the network title of the previous connected network is different
- // from the new one.
- String cTitle = CellInfoUtil.getNetworkTitle(connectedNetworkOperator);
- String pTitle = CellInfoUtil.getNetworkTitle(
- previousConnectedNetworkOperator.getCellInfo());
- if (!cTitle.equals(pTitle)) {
- if (DBG) logd("reconfig the category: connected network changed");
- addConnectedNetworkOperatorPreference(connectedNetworkOperator);
- return;
- }
- if (DBG) logd("same network operator is connected, only refresh the connected network");
- // Otherwise same network operator is connected, only refresh the connected network
- // operator preference (first and the only one in this category).
- ((NetworkOperatorPreference) mConnectedNetworkOperatorsPreference.getPreference(0))
- .refresh();
- return;
}
- /**
- * Creates a Preference for the given {@link CellInfo} and adds it to the
- * {@link #mConnectedNetworkOperatorsPreference}.
- */
private void addConnectedNetworkOperatorPreference(CellInfo cellInfo) {
- if (DBG) logd("addConnectedNetworkOperatorPreference");
- // Remove the current ConnectedNetworkOperatorsPreference
- removeConnectedNetworkOperatorPreference();
+ mConnectedPreferenceCategory.removeAll();
final NetworkOperatorPreference pref = new NetworkOperatorPreference(
cellInfo, getContext(), mForbiddenPlmns, mShow4GForLTE);
pref.setSummary(R.string.network_connected);
- mConnectedNetworkOperatorsPreference.addPreference(pref);
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- preferenceScreen.addPreference(mConnectedNetworkOperatorsPreference);
- }
-
- /** Removes all preferences and hide the {@link #mConnectedNetworkOperatorsPreference}. */
- private void removeConnectedNetworkOperatorPreference() {
- mConnectedNetworkOperatorsPreference.removeAll();
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- preferenceScreen.removePreference(mConnectedNetworkOperatorsPreference);
+ mConnectedPreferenceCategory.addPreference(pref);
+ mConnectedPreferenceCategory.setVisible(true);
}
protected void setProgressBarVisible(boolean visible) {
@@ -493,14 +356,11 @@
}
private void addMessagePreference(int messageId) {
- if (DBG) logd("remove callback");
- getView().removeCallbacks(mUpdateNetworkOperatorsRunnable);
setProgressBarVisible(false);
- if (DBG) logd("addMessagePreference");
mStatusMessagePreference.setTitle(messageId);
- removeConnectedNetworkOperatorPreference();
- mNetworkOperatorsPreferences.removeAll();
- mNetworkOperatorsPreferences.addPreference(mStatusMessagePreference);
+ mConnectedPreferenceCategory.setVisible(false);
+ mPreferenceCategory.removeAll();
+ mPreferenceCategory.addPreference(mStatusMessagePreference);
}
/**
@@ -509,9 +369,8 @@
* with the strongest signal strength.
*/
private List<CellInfo> aggregateCellInfoList(List<CellInfo> cellInfoList) {
- if (DBG) logd("before aggregate: " + cellInfoList.toString());
Map<String, CellInfo> map = new HashMap<>();
- for (CellInfo cellInfo: cellInfoList) {
+ for (CellInfo cellInfo : cellInfoList) {
String plmn = CellInfoUtil.getOperatorInfoFromCellInfo(cellInfo).getOperatorNumeric();
if (cellInfo.isRegistered() || !map.containsKey(plmn)) {
map.put(plmn, cellInfo);
@@ -540,26 +399,4 @@
mNetworkScanExecutor.shutdown();
super.onDestroy();
}
-
- private void logd(String msg) {
- Log.d(TAG, msg);
- }
-
- private void loge(String msg) {
- Log.e(TAG, msg);
- }
-
- public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
- @Override
- public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
- boolean enabled) {
- final ArrayList<SearchIndexableResource> result = new ArrayList<>();
-
- final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.choose_network;
- result.add(sir);
- return result;
- }
- };
}
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 38108f7..6f4deca 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -50,6 +50,7 @@
com.android.settings.localepicker.LocaleListEditor
com.android.settings.network.ApnEditor
com.android.settings.network.ApnSettings
+com.android.settings.network.telephony.NetworkSelectSettings
com.android.settings.notification.AppNotificationSettings
com.android.settings.notification.ChannelGroupNotificationSettings
com.android.settings.notification.ChannelNotificationSettings
diff --git a/tests/robotests/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java b/tests/robotests/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
new file mode 100644
index 0000000..3ebeba1
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.telephony.CellInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceManager;
+
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.Arrays;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class NetworkSelectSettingsTest {
+ private static final int SUB_ID = 2;
+
+ @Mock
+ private TelephonyManager mTelephonyManager;
+ @Mock
+ private SubscriptionManager mSubscriptionManager;
+ @Mock
+ private CellInfo mCellInfo1;
+ @Mock
+ private CellInfo mCellInfo2;
+ @Mock
+ private PreferenceManager mPreferenceManager;
+ private Context mContext;
+
+ private PreferenceCategory mConnectedPreferenceCategory;
+ private PreferenceCategory mPreferenceCategory;
+
+ private NetworkSelectSettings mNetworkSelectSettings;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(RuntimeEnvironment.application);
+ when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+ when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
+ when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager);
+
+ when(mCellInfo1.isRegistered()).thenReturn(true);
+ when(mCellInfo2.isRegistered()).thenReturn(false);
+
+ mConnectedPreferenceCategory = spy(new PreferenceCategory(mContext));
+ doReturn(mPreferenceManager).when(mConnectedPreferenceCategory).getPreferenceManager();
+ mPreferenceCategory = spy(new PreferenceCategory(mContext));
+ doReturn(mPreferenceManager).when(mPreferenceCategory).getPreferenceManager();
+
+ mNetworkSelectSettings = spy(new NetworkSelectSettings());
+ doReturn(mContext).when(mNetworkSelectSettings).getContext();
+ mNetworkSelectSettings.mTelephonyManager = mTelephonyManager;
+ mNetworkSelectSettings.mConnectedPreferenceCategory = mConnectedPreferenceCategory;
+ mNetworkSelectSettings.mPreferenceCategory = mPreferenceCategory;
+ mNetworkSelectSettings.mCellInfoList = Arrays.asList(mCellInfo1, mCellInfo2);
+ }
+
+ @Test
+ public void updateAllPreferenceCategory_containCorrectPreference() {
+ mNetworkSelectSettings.updateAllPreferenceCategory();
+
+ assertThat(mConnectedPreferenceCategory.getPreferenceCount()).isEqualTo(1);
+ final NetworkOperatorPreference connectedPreference =
+ (NetworkOperatorPreference) mConnectedPreferenceCategory.getPreference(0);
+ assertThat(connectedPreference.getCellInfo()).isEqualTo(mCellInfo1);
+ assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(1);
+ final NetworkOperatorPreference preference =
+ (NetworkOperatorPreference) mPreferenceCategory.getPreference(0);
+ assertThat(preference.getCellInfo()).isEqualTo(mCellInfo2);
+ }
+
+}