Merge "Make RadioInfo settings menu work for mSIM"

am: a85fa6c51d

Change-Id: I0c83baafa8d30638b26c5dce3f23c722d3628991
This commit is contained in:
Jordan Liu
2019-04-04 15:03:03 -07:00
committed by android-build-merger
3 changed files with 148 additions and 25 deletions

View File

@@ -25,6 +25,19 @@
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<!-- Phone index -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/phone_index_label"
style="@style/info_label"
/>
<Spinner android:id="@+id/phoneIndex"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<!-- IMEI -->
<LinearLayout style="@style/entry_layout">
<TextView android:text="@string/radio_info_imei_label" style="@style/info_label" />
@@ -37,6 +50,18 @@
<TextView android:id="@+id/number" style="@style/info_value" />
</LinearLayout>
<!-- Subscription ID -->
<LinearLayout style="@style/entry_layout">
<TextView android:text="@string/radio_info_subid" style="@style/info_label" />
<TextView android:id="@+id/subid" style="@style/info_value" />
</LinearLayout>
<!-- Default data subscription -->
<LinearLayout style="@style/entry_layout">
<TextView android:text="@string/radio_info_dds" style="@style/info_label" />
<TextView android:id="@+id/dds" style="@style/info_value" />
</LinearLayout>
<!-- IMSI -->
<LinearLayout style="@style/entry_layout">
<TextView android:text="@string/radio_info_imsi_label" style="@style/info_label" />

View File

@@ -482,6 +482,10 @@
<!-- HTTP proxy settings. Title for Proxy-Auto Config URL. [CHAR LIMIT=25] -->
<string name="proxy_url_title">"PAC URL: "</string>
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
<string name="radio_info_subid">Current subId:</string>
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
<string name="radio_info_dds">SubId of default data SIM:</string>
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
<string name="radio_info_dl_kbps">DL Bandwidth (kbps):</string>
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
@@ -529,6 +533,8 @@
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
<string name="radio_info_data_network_type_label">Data Network Type:</string>
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
<string name="phone_index_label">Select phone index</string>
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
<string name="radio_info_set_perferred_label">Set Preferred Network Type:</string>
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
<string name="radio_info_ping_hostname_v4">Ping Hostname(www.google.com) IPv4:</string>

View File

@@ -127,6 +127,7 @@ public class RadioInfo extends Activity {
"Unknown"
};
private static String[] mPhoneIndexLabels;
private static final int CELL_INFO_LIST_RATE_DISABLED = Integer.MAX_VALUE;
private static final int CELL_INFO_LIST_RATE_MAX = 0;
@@ -162,7 +163,7 @@ public class RadioInfo extends Activity {
60000
};
private void log(String s) {
private static void log(String s) {
Log.d(TAG, s);
}
@@ -182,6 +183,8 @@ public class RadioInfo extends Activity {
private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
private TextView number;
private TextView mSubscriptionId;
private TextView mDds;
private TextView mSubscriberId;
private TextView callState;
private TextView operatorName;
@@ -219,6 +222,7 @@ public class RadioInfo extends Activity {
private Switch imsWfcProvisionedSwitch;
private Switch eabProvisionedSwitch;
private Spinner preferredNetworkType;
private Spinner mSelectPhoneIndex;
private Spinner cellInfoRefreshRateSpinner;
private ConnectivityManager mConnectivityManager;
@@ -237,6 +241,7 @@ public class RadioInfo extends Activity {
private int mPreferredNetworkTypeResult;
private int mCellInfoRefreshRateIndex;
private int mSelectedPhoneIndex;
private final NetworkRequest mDefaultNetworkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
@@ -346,6 +351,21 @@ public class RadioInfo extends Activity {
preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
}
private void updatePhoneIndex(int phoneIndex, int subId) {
// unregister listeners on the old subId
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
mTelephonyManager.setCellInfoListRate(CELL_INFO_LIST_RATE_DISABLED);
// update the subId
mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
mImsManager = ImsManager.getInstance(getApplicationContext(), phoneIndex);
// update the phoneId
phone = PhoneFactory.getPhone(phoneIndex);
updateAllFields();
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -406,13 +426,15 @@ public class RadioInfo extends Activity {
mConnectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
phone = PhoneFactory.getDefaultPhone();
//TODO: Need to update this if the default phoneId changes?
// Better to have an instance per phone?
mImsManager = ImsManager.getInstance(getApplicationContext(),
SubscriptionManager.getDefaultVoicePhoneId());
mPhoneIndexLabels = getPhoneIndexLabels(mTelephonyManager);
mDeviceId = (TextView) findViewById(R.id.imei);
number = (TextView) findViewById(R.id.number);
mSubscriptionId = (TextView) findViewById(R.id.subid);
mDds = (TextView) findViewById(R.id.dds);
mSubscriberId = (TextView) findViewById(R.id.imsi);
callState = (TextView) findViewById(R.id.call);
operatorName = (TextView) findViewById(R.id.operator);
@@ -439,10 +461,17 @@ public class RadioInfo extends Activity {
mPhyChanConfig = (TextView) findViewById(R.id.phy_chan_config);
preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
ArrayAdapter<String> preferredNetworkTypeAdapter = new ArrayAdapter<String> (this,
android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
preferredNetworkType.setAdapter(adapter);
preferredNetworkTypeAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
preferredNetworkType.setAdapter(preferredNetworkTypeAdapter);
mSelectPhoneIndex = (Spinner) findViewById(R.id.phoneIndex);
ArrayAdapter<String> phoneIndexAdapter = new ArrayAdapter<String> (this,
android.R.layout.simple_spinner_item, mPhoneIndexLabels);
phoneIndexAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSelectPhoneIndex.setAdapter(phoneIndexAdapter);
cellInfoRefreshRateSpinner = (Spinner) findViewById(R.id.cell_info_rate_select);
ArrayAdapter<String> cellInfoAdapter = new ArrayAdapter<String>(this,
@@ -493,6 +522,7 @@ public class RadioInfo extends Activity {
mCellInfoRefreshRateIndex = 0; //disabled
mPreferredNetworkTypeResult = mPreferredNetworkLabels.length - 1; //Unknown
mSelectedPhoneIndex = 0; //phone 0
//FIXME: Replace with TelephonyManager call
phone.getPreferredNetworkType(
@@ -507,6 +537,10 @@ public class RadioInfo extends Activity {
log("Started onResume");
updateAllFields();
}
private void updateAllFields() {
updateMessageWaiting();
updateCallRedirect();
updateDataState();
@@ -519,6 +553,7 @@ public class RadioInfo extends Activity {
updateLocation(mCellLocationResult);
updateCellInfo(mCellInfoResult);
updateSubscriptionIds();
mPingHostnameV4.setText(mPingHostnameResultV4);
mPingHostnameV6.setText(mPingHostnameResultV6);
@@ -532,25 +567,17 @@ public class RadioInfo extends Activity {
preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
// set phone index
mSelectPhoneIndex.setSelection(mSelectedPhoneIndex, true);
mSelectPhoneIndex.setOnItemSelectedListener(mSelectPhoneIndexHandler);
radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
mTelephonyManager.listen(mPhoneStateListener,
PhoneStateListener.LISTEN_CALL_STATE
//b/27803938 - RadioInfo currently cannot read PRECISE_CALL_STATE
// | PhoneStateListener.LISTEN_PRECISE_CALL_STATE
| PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
| PhoneStateListener.LISTEN_DATA_ACTIVITY
| PhoneStateListener.LISTEN_CELL_LOCATION
| PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
| PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
| PhoneStateListener.LISTEN_CELL_INFO
| PhoneStateListener.LISTEN_SERVICE_STATE
| PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
| PhoneStateListener.LISTEN_PHYSICAL_CHANNEL_CONFIGURATION);
registerPhoneStateListener();
mConnectivityManager.registerNetworkCallback(
mDefaultNetworkRequest, mNetworkCallback, mHandler);
@@ -586,6 +613,8 @@ public class RadioInfo extends Activity {
mPreferredNetworkTypeResult = b.getInt("mPreferredNetworkTypeResult",
mPreferredNetworkLabels.length - 1);
mSelectedPhoneIndex = b.getInt("mSelectedPhoneIndex", 0);
mCellInfoRefreshRateIndex = b.getInt("mCellInfoRefreshRateIndex", 0);
}
@@ -596,6 +625,7 @@ public class RadioInfo extends Activity {
outState.putString("mHttpClientTestResult", mHttpClientTestResult);
outState.putInt("mPreferredNetworkTypeResult", mPreferredNetworkTypeResult);
outState.putInt("mSelectedPhoneIndex", mSelectedPhoneIndex);
outState.putInt("mCellInfoRefreshRateIndex", mCellInfoRefreshRateIndex);
}
@@ -643,6 +673,34 @@ public class RadioInfo extends Activity {
return true;
}
// returns array of string labels for each phone index. The array index is equal to the phone
// index.
private static String[] getPhoneIndexLabels(TelephonyManager tm) {
int phones = tm.getPhoneCount();
String[] labels = new String[phones];
for (int i = 0; i < phones; i++) {
labels[i] = "Phone " + i;
}
return labels;
}
// register mPhoneStateListener for relevant fields using the current TelephonyManager
private void registerPhoneStateListener() {
mTelephonyManager.listen(mPhoneStateListener,
PhoneStateListener.LISTEN_CALL_STATE
//b/27803938 - RadioInfo currently cannot read PRECISE_CALL_STATE
// | PhoneStateListener.LISTEN_PRECISE_CALL_STATE
| PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
| PhoneStateListener.LISTEN_DATA_ACTIVITY
| PhoneStateListener.LISTEN_CELL_LOCATION
| PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
| PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
| PhoneStateListener.LISTEN_CELL_INFO
| PhoneStateListener.LISTEN_SERVICE_STATE
| PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
| PhoneStateListener.LISTEN_PHYSICAL_CHANNEL_CONFIGURATION);
}
private void updateDnsCheckState() {
//FIXME: Replace with a TelephonyManager call
dnsCheckState.setText(phone.isDnsCheckDisabled() ?
@@ -864,6 +922,11 @@ public class RadioInfo extends Activity {
mCellInfo.setText(buildCellInfoString(arrayCi));
}
private final void updateSubscriptionIds() {
mSubscriptionId.setText(Integer.toString(phone.getSubId()));
mDds.setText(Integer.toString(SubscriptionManager.getDefaultDataSubscriptionId()));
}
private final void
updateMessageWaiting() {
mMwi.setText(String.valueOf(mMwiValue));
@@ -1487,6 +1550,35 @@ public class RadioInfo extends Activity {
}
};
AdapterView.OnItemSelectedListener mSelectPhoneIndexHandler =
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView parent, View v, int pos, long id) {
if (pos >= 0 && pos <= mPhoneIndexLabels.length - 1) {
// the array position is equal to the phone index
int phoneIndex = pos;
Phone[] phones = PhoneFactory.getPhones();
if (phones == null || phones.length <= phoneIndex) {
log("phoneIndex " + phoneIndex + " is invalid");
return;
}
log("switching to phone " + phoneIndex);
// getSubId says it takes a slotIndex, but it actually takes a phone index
int[] subIds = SubscriptionManager.getSubId(phoneIndex);
if (subIds == null || subIds.length < 1) {
log("no subscription found for phoneIndex " + phoneIndex);
return;
}
mSelectedPhoneIndex = phoneIndex;
updatePhoneIndex(phoneIndex, subIds[0]);
}
}
public void onNothingSelected(AdapterView parent) {
}
};
AdapterView.OnItemSelectedListener mCellInfoRefreshRateHandler =
new AdapterView.OnItemSelectedListener() {