Update network select page

1. use getPrefContext() to make sure it has correct style
2. Move operation back to bg thread so it won't block UI

Bug: 114749736
Test: RunSettingsRoboTests
Change-Id: I7737ea8b21d44790617b9c4f13a8c4c41037fca4
This commit is contained in:
jackqdyulei
2018-10-29 12:44:14 -07:00
parent 7ad62ef340
commit 4f0c28da9e
3 changed files with 35 additions and 23 deletions

View File

@@ -116,14 +116,9 @@ public class NetworkOperatorPreference extends Preference {
private void updateIcon(int level) { private void updateIcon(int level) {
if (level < 0 || level >= NUMBER_OF_LEVELS) return; if (level < 0 || level >= NUMBER_OF_LEVELS) return;
Context context = getContext(); Context context = getContext();
// Make the signal strength drawable
int iconId = 0;
if (DBG) Log.d(TAG, "updateIcon level: " + String.valueOf(level));
iconId = SignalDrawable.getState(level, NUMBER_OF_LEVELS, false /* cutOut */);
SignalDrawable signalDrawable = new SignalDrawable(getContext()); SignalDrawable signalDrawable = new SignalDrawable(getContext());
signalDrawable.setLevel(iconId); signalDrawable.setLevel(
signalDrawable.setDarkIntensity(0); SignalDrawable.getState(level, NUMBER_OF_LEVELS, false /* cutOut */));
// Make the network type drawable // Make the network type drawable
int iconType = getIconIdForCell(mCellInfo); int iconType = getIconIdForCell(mCellInfo);
@@ -134,7 +129,7 @@ public class NetworkOperatorPreference extends Preference {
.getResources().getDrawable(iconType, getContext().getTheme()); .getResources().getDrawable(iconType, getContext().getTheme());
// Overlay the two drawables // Overlay the two drawables
Drawable[] layers = {networkDrawable, signalDrawable}; final Drawable[] layers = {networkDrawable, signalDrawable};
final int iconSize = final int iconSize =
context.getResources().getDimensionPixelSize(R.dimen.signal_strength_icon_size); context.getResources().getDimensionPixelSize(R.dimen.signal_strength_icon_size);

View File

@@ -43,6 +43,7 @@ import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.utils.ThreadUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -59,6 +60,7 @@ public class NetworkSelectSettings extends DashboardFragment {
private static final String TAG = "NetworkSelectSettings"; private static final String TAG = "NetworkSelectSettings";
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_RESULTS = 2;
private static final int EVENT_NETWORK_SCAN_ERROR = 3; private static final int EVENT_NETWORK_SCAN_ERROR = 3;
private static final int EVENT_NETWORK_SCAN_COMPLETED = 4; private static final int EVENT_NETWORK_SCAN_COMPLETED = 4;
@@ -134,13 +136,10 @@ public class NetworkSelectSettings extends DashboardFragment {
mForbiddenPlmns = Arrays.asList(mTelephonyManager.getForbiddenPlmns()); mForbiddenPlmns = Arrays.asList(mTelephonyManager.getForbiddenPlmns());
setProgressBarVisible(true); setProgressBarVisible(true);
if (mUseNewApi) { mNetworkScanHelper.startNetworkScan(
mNetworkScanHelper.startNetworkScan( mUseNewApi
NetworkScanHelper.NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS); ? NetworkScanHelper.NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS
} else { : NetworkScanHelper.NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS);
mNetworkScanHelper.startNetworkScan(
NetworkScanHelper.NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS);
}
} }
@Override @Override
@@ -153,7 +152,6 @@ public class NetworkSelectSettings extends DashboardFragment {
public boolean onPreferenceTreeClick(Preference preference) { public boolean onPreferenceTreeClick(Preference preference) {
if (preference != mSelectedPreference) { if (preference != mSelectedPreference) {
stopNetworkQuery(); stopNetworkQuery();
setProgressBarVisible(false);
// Refresh the last selected item in case users reselect network. // Refresh the last selected item in case users reselect network.
if (mSelectedPreference != null) { if (mSelectedPreference != null) {
mSelectedPreference.setSummary(null); mSelectedPreference.setSummary(null);
@@ -161,6 +159,7 @@ public class NetworkSelectSettings extends DashboardFragment {
mSelectedPreference = (NetworkOperatorPreference) preference; mSelectedPreference = (NetworkOperatorPreference) preference;
CellInfo cellInfo = mSelectedPreference.getCellInfo(); CellInfo cellInfo = mSelectedPreference.getCellInfo();
mSelectedPreference.setSummary(R.string.network_connecting);
mMetricsFeatureProvider.action(getContext(), mMetricsFeatureProvider.action(getContext(),
MetricsEvent.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK); MetricsEvent.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK);
@@ -175,11 +174,17 @@ public class NetworkSelectSettings extends DashboardFragment {
} }
} }
setProgressBarVisible(true);
// Disable the screen until network is manually set
getPreferenceScreen().setEnabled(false);
final OperatorInfo operatorInfo = CellInfoUtil.getOperatorInfoFromCellInfo(cellInfo); final OperatorInfo operatorInfo = CellInfoUtil.getOperatorInfoFromCellInfo(cellInfo);
final boolean isSuccess = mTelephonyManager.setNetworkSelectionModeManual( ThreadUtils.postOnBackgroundThread(() -> {
operatorInfo, true /* persistSelection */); Message msg = mHandler.obtainMessage(EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE);
mSelectedPreference.setSummary( msg.obj = mTelephonyManager.setNetworkSelectionModeManual(
isSuccess ? R.string.network_connected : R.string.network_could_not_connect); operatorInfo, true /* persistSelection */);
msg.sendToTarget();
});
} }
return true; return true;
@@ -204,6 +209,15 @@ public class NetworkSelectSettings extends DashboardFragment {
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
switch (msg.what) { switch (msg.what) {
case EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE:
setProgressBarVisible(false);
getPreferenceScreen().setEnabled(true);
boolean isSucceed = (boolean) msg.obj;
mSelectedPreference.setSummary(isSucceed
? R.string.network_connected
: R.string.network_could_not_connect);
break;
case EVENT_NETWORK_SCAN_RESULTS: case EVENT_NETWORK_SCAN_RESULTS:
List<CellInfo> results = aggregateCellInfoList((List<CellInfo>) msg.obj); List<CellInfo> results = aggregateCellInfoList((List<CellInfo>) msg.obj);
mCellInfoList = new ArrayList<>(results); mCellInfoList = new ArrayList<>(results);
@@ -267,7 +281,7 @@ public class NetworkSelectSettings extends DashboardFragment {
for (int index = 0; index < mCellInfoList.size(); index++) { for (int index = 0; index < mCellInfoList.size(); index++) {
if (!mCellInfoList.get(index).isRegistered()) { if (!mCellInfoList.get(index).isRegistered()) {
NetworkOperatorPreference pref = new NetworkOperatorPreference( NetworkOperatorPreference pref = new NetworkOperatorPreference(
mCellInfoList.get(index), getContext(), mForbiddenPlmns, mShow4GForLTE); mCellInfoList.get(index), getPrefContext(), mForbiddenPlmns, mShow4GForLTE);
pref.setKey(CellInfoUtil.getNetworkTitle(mCellInfoList.get(index))); pref.setKey(CellInfoUtil.getNetworkTitle(mCellInfoList.get(index)));
pref.setOrder(index); pref.setOrder(index);
mPreferenceCategory.addPreference(pref); mPreferenceCategory.addPreference(pref);
@@ -303,7 +317,7 @@ public class NetworkSelectSettings extends DashboardFragment {
CellInfo cellInfo = CellInfoUtil.wrapCellInfoWithCellIdentity(cellIdentity); CellInfo cellInfo = CellInfoUtil.wrapCellInfoWithCellIdentity(cellIdentity);
if (cellInfo != null) { if (cellInfo != null) {
NetworkOperatorPreference pref = new NetworkOperatorPreference( NetworkOperatorPreference pref = new NetworkOperatorPreference(
cellInfo, getContext(), mForbiddenPlmns, mShow4GForLTE); cellInfo, getPrefContext(), mForbiddenPlmns, mShow4GForLTE);
pref.setTitle(mTelephonyManager.getNetworkOperatorName()); pref.setTitle(mTelephonyManager.getNetworkOperatorName());
pref.setSummary(R.string.network_connected); pref.setSummary(R.string.network_connected);
// Update the signal strength icon, since the default signalStrength value would be // Update the signal strength icon, since the default signalStrength value would be
@@ -342,7 +356,7 @@ public class NetworkSelectSettings extends DashboardFragment {
private void addConnectedNetworkOperatorPreference(CellInfo cellInfo) { private void addConnectedNetworkOperatorPreference(CellInfo cellInfo) {
mConnectedPreferenceCategory.removeAll(); mConnectedPreferenceCategory.removeAll();
final NetworkOperatorPreference pref = new NetworkOperatorPreference( final NetworkOperatorPreference pref = new NetworkOperatorPreference(
cellInfo, getContext(), mForbiddenPlmns, mShow4GForLTE); cellInfo, getPrefContext(), mForbiddenPlmns, mShow4GForLTE);
pref.setSummary(R.string.network_connected); pref.setSummary(R.string.network_connected);
mConnectedPreferenceCategory.addPreference(pref); mConnectedPreferenceCategory.addPreference(pref);
mConnectedPreferenceCategory.setVisible(true); mConnectedPreferenceCategory.setVisible(true);

View File

@@ -81,6 +81,9 @@ public class NetworkSelectSettingsTest {
mNetworkSelectSettings = spy(new NetworkSelectSettings()); mNetworkSelectSettings = spy(new NetworkSelectSettings());
doReturn(mContext).when(mNetworkSelectSettings).getContext(); doReturn(mContext).when(mNetworkSelectSettings).getContext();
doReturn(mPreferenceManager).when(mNetworkSelectSettings).getPreferenceManager();
doReturn(mContext).when(mPreferenceManager).getContext();
mNetworkSelectSettings.mTelephonyManager = mTelephonyManager; mNetworkSelectSettings.mTelephonyManager = mTelephonyManager;
mNetworkSelectSettings.mConnectedPreferenceCategory = mConnectedPreferenceCategory; mNetworkSelectSettings.mConnectedPreferenceCategory = mConnectedPreferenceCategory;
mNetworkSelectSettings.mPreferenceCategory = mPreferenceCategory; mNetworkSelectSettings.mPreferenceCategory = mPreferenceCategory;