Recopy NetworkSelectSetting from phone to settings
NetworkSelectSetting is changed during the migration, recopy it to make it up to date Following CL will refactor to reuse this fragment for all devices. Bug: 114749736 Test: Build Change-Id: Id43cb480cf31447a6e4a23eb3709f9ab972a2930
This commit is contained in:
28
res/drawable/ic_signal_strength_4g.xml
Normal file
28
res/drawable/ic_signal_strength_4g.xml
Normal file
@@ -0,0 +1,28 @@
|
||||
<!--
|
||||
Copyright (C) 2014 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.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="9.208dp"
|
||||
android:height="17dp"
|
||||
android:viewportWidth="13.0"
|
||||
android:viewportHeight="24.0"
|
||||
android:tint="?android:attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:pathData="M4.600000,7.800000l0.700000,0.000000l0.000000,1.300000L4.600000,9.100000L4.600000,11.000000L3.000000,11.000000L3.000000,9.200000L0.100000,9.200000L0.000000,8.100000L3.000000,2.500000l1.700000,0.000000L4.700000,7.800000zM1.600000,7.800000L3.000000,7.800000l0.000000,-3.000000L2.900000,5.000000L1.600000,7.800000z"/>
|
||||
<path
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:pathData="M11.900000,9.900000c-0.200000,0.400000 -0.600000,0.700000 -1.000000,0.900000s-1.000000,0.400000 -1.800000,0.400000c-0.900000,0.000000 -1.700000,-0.300000 -2.200000,-0.800000S6.100000,9.000000 6.100000,7.900000L6.100000,5.600000c0.000000,-1.100000 0.300000,-1.900000 0.800000,-2.400000S8.100000,2.400000 9.000000,2.400000c1.000000,0.000000 1.700000,0.200000 2.100000,0.700000s0.700000,1.200000 0.700000,2.100000l-1.600000,0.000000c0.000000,-0.500000 -0.100000,-0.900000 -0.200000,-1.100000S9.500000,3.700000 9.000000,3.700000c-0.400000,0.000000 -0.700000,0.200000 -0.900000,0.500000S7.700000,5.000000 7.700000,5.600000l0.000000,2.300000c0.000000,0.700000 0.100000,1.100000 0.300000,1.400000s0.600000,0.500000 1.000000,0.500000c0.300000,0.000000 0.600000,0.000000 0.700000,-0.100000s0.300000,-0.200000 0.400000,-0.300000L10.099999,7.800000L9.000000,7.800000L9.000000,6.600000l2.900000,0.000000L11.900000,9.900000z"/>
|
||||
</vector>
|
@@ -26,13 +26,13 @@ import android.telephony.SignalStrength;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settingslib.graph.SignalDrawable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
|
||||
/**
|
||||
* A Preference represents a network operator in the NetworkSelectSetting fragment.
|
||||
*/
|
||||
@@ -45,16 +45,18 @@ public class NetworkOperatorPreference extends Preference {
|
||||
private CellInfo mCellInfo;
|
||||
private List<String> mForbiddenPlmns;
|
||||
private int mLevel = -1;
|
||||
private boolean mShow4GForLTE;
|
||||
|
||||
// The following constants are used to draw signal icon.
|
||||
private static final Drawable EMPTY_DRAWABLE = new ColorDrawable(Color.TRANSPARENT);
|
||||
private static final int NO_CELL_DATA_CONNECTED_ICON = 0;
|
||||
|
||||
public NetworkOperatorPreference(
|
||||
CellInfo cellinfo, Context context, List<String> forbiddenPlmns) {
|
||||
CellInfo cellinfo, Context context, List<String> forbiddenPlmns, boolean show4GForLTE) {
|
||||
super(context);
|
||||
mCellInfo = cellinfo;
|
||||
mForbiddenPlmns = forbiddenPlmns;
|
||||
mShow4GForLTE = show4GForLTE;
|
||||
refresh();
|
||||
}
|
||||
|
||||
@@ -87,15 +89,21 @@ public class NetworkOperatorPreference extends Preference {
|
||||
updateIcon(level);
|
||||
}
|
||||
|
||||
private static int getIconIdForCell(CellInfo ci) {
|
||||
private int getIconIdForCell(CellInfo ci) {
|
||||
final int type = ci.getCellIdentity().getType();
|
||||
switch (type) {
|
||||
case CellInfo.TYPE_GSM: return R.drawable.signal_strength_g;
|
||||
case CellInfo.TYPE_GSM:
|
||||
return R.drawable.signal_strength_g;
|
||||
case CellInfo.TYPE_WCDMA: // fall through
|
||||
case CellInfo.TYPE_TDSCDMA: return R.drawable.signal_strength_3g;
|
||||
case CellInfo.TYPE_LTE: return R.drawable.signal_strength_lte;
|
||||
case CellInfo.TYPE_CDMA: return R.drawable.signal_strength_1x;
|
||||
default: return 0;
|
||||
case CellInfo.TYPE_TDSCDMA:
|
||||
return R.drawable.signal_strength_3g;
|
||||
case CellInfo.TYPE_LTE:
|
||||
return mShow4GForLTE
|
||||
? R.drawable.ic_signal_strength_4g : R.drawable.signal_strength_lte;
|
||||
case CellInfo.TYPE_CDMA:
|
||||
return R.drawable.signal_strength_1x;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +125,7 @@ public class NetworkOperatorPreference extends Preference {
|
||||
iconType == NO_CELL_DATA_CONNECTED_ICON
|
||||
? EMPTY_DRAWABLE
|
||||
: getContext()
|
||||
.getResources().getDrawable(iconType, getContext().getTheme());
|
||||
.getResources().getDrawable(iconType, getContext().getTheme());
|
||||
|
||||
// Overlay the two drawables
|
||||
Drawable[] layers = {networkDrawable, signalDrawable};
|
||||
|
@@ -15,13 +15,17 @@
|
||||
*/
|
||||
package com.android.settings.network.telephony;
|
||||
|
||||
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.MOBILE_NETWORK_SELECT;
|
||||
|
||||
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;
|
||||
import android.telephony.CellInfo;
|
||||
import android.telephony.NetworkRegistrationState;
|
||||
@@ -30,6 +34,7 @@ import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
@@ -50,6 +55,8 @@ import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* "Choose network" settings UI for the Phone app.
|
||||
@@ -58,11 +65,9 @@ import java.util.Map;
|
||||
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
||||
public class NetworkSelectSettings extends DashboardFragment {
|
||||
|
||||
private static final String TAG = "NetworkSelectSetting";
|
||||
private static final String TAG = "NetworkSelectSettings";
|
||||
private static final boolean DBG = true;
|
||||
|
||||
public static final String KEY_SUBSCRIPTION_ID = "subscription_id";
|
||||
|
||||
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;
|
||||
@@ -81,36 +86,26 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
private Preference mStatusMessagePreference;
|
||||
private List<CellInfo> mCellInfoList;
|
||||
private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
private ViewGroup mFrameLayout;
|
||||
private NetworkOperatorPreference mSelectedNetworkOperatorPreference;
|
||||
private TelephonyManager mTelephonyManager;
|
||||
private List<String> mForbiddenPlmns;
|
||||
//Flag indicating whether we have called bind on the service.
|
||||
private boolean mShouldUnbind;
|
||||
private boolean mShow4GForLTE = true;
|
||||
private NetworkScanHelper mNetworkScanHelper;
|
||||
private final ExecutorService mNetworkScanExecutor = Executors.newFixedThreadPool(1);
|
||||
|
||||
private final Runnable mUpdateNetworkOperatorsRunnable = () -> {
|
||||
updateNetworkOperatorsPreferenceCategory();
|
||||
};
|
||||
|
||||
/**
|
||||
* Create a new instance of this fragment.
|
||||
*/
|
||||
public static NetworkSelectSettings newInstance(int subId) {
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(KEY_SUBSCRIPTION_ID, subId);
|
||||
NetworkSelectSettings
|
||||
fragment = new NetworkSelectSettings();
|
||||
fragment.setArguments(args);
|
||||
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
if (DBG) logd("onCreate");
|
||||
super.onCreate(icicle);
|
||||
|
||||
mSubId = getArguments().getInt(KEY_SUBSCRIPTION_ID);
|
||||
mSubId = getArguments().getInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID);
|
||||
|
||||
addPreferencesFromResource(R.xml.choose_network);
|
||||
mConnectedNetworkOperatorsPreference =
|
||||
(PreferenceCategory) findPreference(PREF_KEY_CONNECTED_NETWORK_OPERATOR);
|
||||
mNetworkOperatorsPreferences =
|
||||
@@ -118,21 +113,29 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
mStatusMessagePreference = new Preference(getContext());
|
||||
mSelectedNetworkOperatorPreference = null;
|
||||
mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(mSubId);
|
||||
mNetworkScanHelper = new NetworkScanHelper(
|
||||
mTelephonyManager, mCallback, mNetworkScanExecutor);
|
||||
PersistableBundle bundle = ((CarrierConfigManager) getContext().getSystemService(
|
||||
Context.CARRIER_CONFIG_SERVICE)).getConfigForSubId(mSubId);
|
||||
if (bundle != null) {
|
||||
mShow4GForLTE = bundle.getBoolean(
|
||||
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
|
||||
}
|
||||
setRetainInstance(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
if (DBG) logd("onViewCreated");
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
mProgressHeader = setPinnedHeaderView(R.layout.wifi_progress_header)
|
||||
.findViewById(R.id.progress_bar_animation);
|
||||
setProgressBarVisible(false);
|
||||
// TODO(b/114749736): build the progress bar
|
||||
forceConfigConnectedNetworkOperatorsPreferenceCategory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
if (DBG) logd("onStart");
|
||||
super.onStart();
|
||||
new AsyncTask<Void, Void, List<String>>() {
|
||||
@Override
|
||||
@@ -144,7 +147,7 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
@Override
|
||||
protected void onPostExecute(List<String> result) {
|
||||
mForbiddenPlmns = result;
|
||||
bindNetworkQueryService();
|
||||
loadNetworksList();
|
||||
}
|
||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
@@ -199,7 +202,7 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
ThreadUtils.postOnBackgroundThread(() -> {
|
||||
Message msg = mHandler.obtainMessage(EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE);
|
||||
msg.obj = mTelephonyManager.setNetworkSelectionModeManual(
|
||||
operatorInfo.getOperatorNumeric(), true /* persistSelection */);
|
||||
operatorInfo, true /* persistSelection */);
|
||||
msg.sendToTarget();
|
||||
});
|
||||
|
||||
@@ -223,8 +226,6 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
if (DBG) logd("onStop");
|
||||
getView().removeCallbacks(mUpdateNetworkOperatorsRunnable);
|
||||
stopNetworkQuery();
|
||||
// Unbind the NetworkQueryService
|
||||
unbindNetworkQueryService();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -239,8 +240,7 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
//TODO(b/114749736): add metrics id for this page
|
||||
return 0;
|
||||
return MOBILE_NETWORK_SELECT;
|
||||
}
|
||||
|
||||
private final Handler mHandler = new Handler() {
|
||||
@@ -258,7 +258,6 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
mSelectedNetworkOperatorPreference.setSummary(R.string.network_connected);
|
||||
} else {
|
||||
if (DBG) logd("manual network selection: failed! ");
|
||||
updateNetworkSelection();
|
||||
// Set summary as "Couldn't connect" to the selected network.
|
||||
mSelectedNetworkOperatorPreference.setSummary(
|
||||
R.string.network_could_not_connect);
|
||||
@@ -297,6 +296,35 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
}
|
||||
};
|
||||
|
||||
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) {
|
||||
@@ -324,7 +352,7 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
for (int index = 0; index < mCellInfoList.size(); index++) {
|
||||
if (!mCellInfoList.get(index).isRegistered()) {
|
||||
NetworkOperatorPreference pref = new NetworkOperatorPreference(
|
||||
mCellInfoList.get(index), getContext(), mForbiddenPlmns);
|
||||
mCellInfoList.get(index), getContext(), mForbiddenPlmns, mShow4GForLTE);
|
||||
pref.setKey(CellInfoUtil.getNetworkTitle(mCellInfoList.get(index)));
|
||||
pref.setOrder(index);
|
||||
mNetworkOperatorsPreferences.addPreference(pref);
|
||||
@@ -335,15 +363,15 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
/**
|
||||
* 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");
|
||||
@@ -362,8 +390,8 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
CellInfo cellInfo = CellInfoUtil.wrapCellInfoWithCellIdentity(cellIdentity);
|
||||
if (cellInfo != null) {
|
||||
if (DBG) logd("Currently registered cell: " + cellInfo.toString());
|
||||
NetworkOperatorPreference pref =
|
||||
new NetworkOperatorPreference(cellInfo, getContext(), mForbiddenPlmns);
|
||||
NetworkOperatorPreference pref = new NetworkOperatorPreference(
|
||||
cellInfo, getContext(), mForbiddenPlmns, mShow4GForLTE);
|
||||
pref.setTitle(mTelephonyManager.getNetworkOperatorName());
|
||||
pref.setSummary(R.string.network_connected);
|
||||
// Update the signal strength icon, since the default signalStrength value would be
|
||||
@@ -396,7 +424,7 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
removeConnectedNetworkOperatorPreference();
|
||||
}
|
||||
CellInfo connectedNetworkOperator = null;
|
||||
for (CellInfo cellInfo : mCellInfoList) {
|
||||
for (CellInfo cellInfo: mCellInfoList) {
|
||||
if (cellInfo.isRegistered()) {
|
||||
connectedNetworkOperator = cellInfo;
|
||||
break;
|
||||
@@ -443,8 +471,8 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
if (DBG) logd("addConnectedNetworkOperatorPreference");
|
||||
// Remove the current ConnectedNetworkOperatorsPreference
|
||||
removeConnectedNetworkOperatorPreference();
|
||||
final NetworkOperatorPreference pref =
|
||||
new NetworkOperatorPreference(cellInfo, getContext(), mForbiddenPlmns);
|
||||
final NetworkOperatorPreference pref = new NetworkOperatorPreference(
|
||||
cellInfo, getContext(), mForbiddenPlmns, mShow4GForLTE);
|
||||
pref.setSummary(R.string.network_connected);
|
||||
mConnectedNetworkOperatorsPreference.addPreference(pref);
|
||||
PreferenceScreen preferenceScreen = getPreferenceScreen();
|
||||
@@ -483,7 +511,7 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
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);
|
||||
@@ -501,36 +529,16 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
return new ArrayList<>(map.values());
|
||||
}
|
||||
|
||||
private void loadNetworksList() {
|
||||
if (DBG) logd("load networks list...");
|
||||
setProgressBarVisible(true);
|
||||
//TODO(b/114749736): load network list once b/115401728 is done
|
||||
}
|
||||
|
||||
private void bindNetworkQueryService() {
|
||||
if (DBG) logd("bindNetworkQueryService");
|
||||
//TODO(b/114749736): bind service/manager once b/115401728 is done
|
||||
mShouldUnbind = true;
|
||||
}
|
||||
|
||||
private void unbindNetworkQueryService() {
|
||||
if (DBG) logd("unbindNetworkQueryService");
|
||||
if (mShouldUnbind) {
|
||||
if (DBG) logd("mShouldUnbind is true");
|
||||
// unbind the service.
|
||||
//TODO(b/114749736): unbind service/manager once b/115401728 is done
|
||||
mShouldUnbind = false;
|
||||
private void stopNetworkQuery() {
|
||||
if (mNetworkScanHelper != null) {
|
||||
mNetworkScanHelper.stopNetworkQuery();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateNetworkSelection() {
|
||||
if (DBG) logd("Update notification about no service of user selected operator");
|
||||
//TODO(b/114749736): update network selection once b/115429509 is done
|
||||
}
|
||||
|
||||
private void stopNetworkQuery() {
|
||||
// Stop the network query process
|
||||
//TODO(b/114749736): stop service/manager query once b/115401728 is done
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
mNetworkScanExecutor.shutdown();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void logd(String msg) {
|
||||
|
Reference in New Issue
Block a user