Make RadioInfo settings menu work for mSIM

Just add a spinner to the top of the screen which lets you select the
phoneIndex. Upating this value updates the mTelephonyManager
mImsManager, and mPhoneStateListener to use the selected phoneIndex and
the subscription associated with it.

Also adds fields for current subId and default data sim subId.

Due to b/117555407, the same PhoneStateListener object can not be used
to register on different subIds, so we workaround this by recreating
the PhoneStateListener when reregistering.

Test: manual test (on single sim)
Fixes: 128033739
Change-Id: I9d6631da628351511e285afeb5b6d4331aaab7e5
Merged-In: I9d6631da628351511e285afeb5b6d4331aaab7e5
This commit is contained in:
Jordan Liu
2019-04-02 12:13:31 -07:00
parent 76ffb2df02
commit 85f1d2a704
3 changed files with 218 additions and 74 deletions

View File

@@ -25,6 +25,19 @@
android:descendantFocusability="beforeDescendants" android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"> 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 --> <!-- IMEI -->
<LinearLayout style="@style/entry_layout"> <LinearLayout style="@style/entry_layout">
<TextView android:text="@string/radio_info_imei_label" style="@style/info_label" /> <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" /> <TextView android:id="@+id/number" style="@style/info_value" />
</LinearLayout> </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 --> <!-- IMSI -->
<LinearLayout style="@style/entry_layout"> <LinearLayout style="@style/entry_layout">
<TextView android:text="@string/radio_info_imsi_label" style="@style/info_label" /> <TextView android:text="@string/radio_info_imsi_label" style="@style/info_label" />

View File

@@ -484,6 +484,10 @@
<!-- HTTP proxy settings. Title for Proxy-Auto Config URL. [CHAR LIMIT=25] --> <!-- HTTP proxy settings. Title for Proxy-Auto Config URL. [CHAR LIMIT=25] -->
<string name="proxy_url_title">"PAC URL: "</string> <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 --> <!-- 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> <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 --> <!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
@@ -531,6 +535,8 @@
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed --> <!-- 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> <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 --> <!-- 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> <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 --> <!-- 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> <string name="radio_info_ping_hostname_v4">Ping Hostname(www.google.com) IPv4:</string>

View File

@@ -125,6 +125,7 @@ public class RadioInfo extends Activity {
"Unknown" "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_DISABLED = Integer.MAX_VALUE;
private static final int CELL_INFO_LIST_RATE_MAX = 0; private static final int CELL_INFO_LIST_RATE_MAX = 0;
@@ -160,7 +161,7 @@ public class RadioInfo extends Activity {
60000 60000
}; };
private void log(String s) { private static void log(String s) {
Log.d(TAG, s); Log.d(TAG, s);
} }
@@ -180,6 +181,8 @@ public class RadioInfo extends Activity {
private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
private TextView number; private TextView number;
private TextView mSubscriptionId;
private TextView mDds;
private TextView mSubscriberId; private TextView mSubscriberId;
private TextView callState; private TextView callState;
private TextView operatorName; private TextView operatorName;
@@ -219,12 +222,13 @@ public class RadioInfo extends Activity {
private Switch cbrsDataSwitch; private Switch cbrsDataSwitch;
private Switch dsdsSwitch; private Switch dsdsSwitch;
private Spinner preferredNetworkType; private Spinner preferredNetworkType;
private Spinner mSelectPhoneIndex;
private Spinner cellInfoRefreshRateSpinner; private Spinner cellInfoRefreshRateSpinner;
private ConnectivityManager mConnectivityManager; private ConnectivityManager mConnectivityManager;
private TelephonyManager mTelephonyManager; private TelephonyManager mTelephonyManager;
private ImsManager mImsManager = null; private ImsManager mImsManager = null;
private Phone phone = null; private Phone mPhone = null;
private String mPingHostnameResultV4; private String mPingHostnameResultV4;
private String mPingHostnameResultV6; private String mPingHostnameResultV6;
@@ -237,6 +241,7 @@ public class RadioInfo extends Activity {
private int mPreferredNetworkTypeResult; private int mPreferredNetworkTypeResult;
private int mCellInfoRefreshRateIndex; private int mCellInfoRefreshRateIndex;
private int mSelectedPhoneIndex;
private final NetworkRequest mDefaultNetworkRequest = new NetworkRequest.Builder() private final NetworkRequest mDefaultNetworkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
@@ -251,7 +256,9 @@ public class RadioInfo extends Activity {
} }
}; };
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() { // not final because we need to recreate this object to register on a new subId (b/117555407)
private PhoneStateListener mPhoneStateListener = new RadioInfoPhoneStateListener();
private class RadioInfoPhoneStateListener extends PhoneStateListener {
@Override @Override
public void onDataConnectionStateChanged(int state) { public void onDataConnectionStateChanged(int state) {
updateDataState(); updateDataState();
@@ -319,7 +326,7 @@ public class RadioInfo extends Activity {
updatePhysicalChannelConfiguration(configs); updatePhysicalChannelConfiguration(configs);
} }
}; }
private void updatePhysicalChannelConfiguration(List<PhysicalChannelConfig> configs) { private void updatePhysicalChannelConfiguration(List<PhysicalChannelConfig> configs) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@@ -346,6 +353,21 @@ public class RadioInfo extends Activity {
preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true); preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
} }
private void updatePhoneIndex(int phoneIndex, int subId) {
// unregister listeners on the old subId
unregisterPhoneStateListener();
mTelephonyManager.setCellInfoListRate(CELL_INFO_LIST_RATE_DISABLED);
// update the subId
mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
// update the phoneId
mImsManager = ImsManager.getInstance(getApplicationContext(), phoneIndex);
mPhone = PhoneFactory.getPhone(phoneIndex);
updateAllFields();
}
private Handler mHandler = new Handler() { private Handler mHandler = new Handler() {
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
@@ -404,15 +426,17 @@ public class RadioInfo extends Activity {
mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
mConnectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); mConnectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
phone = PhoneFactory.getDefaultPhone(); mPhone = PhoneFactory.getDefaultPhone();
//TODO: Need to update this if the default phoneId changes?
// Better to have an instance per phone?
mImsManager = ImsManager.getInstance(getApplicationContext(), mImsManager = ImsManager.getInstance(getApplicationContext(),
SubscriptionManager.getDefaultVoicePhoneId()); SubscriptionManager.getDefaultVoicePhoneId());
mPhoneIndexLabels = getPhoneIndexLabels(mTelephonyManager);
mDeviceId = (TextView) findViewById(R.id.imei); mDeviceId = (TextView) findViewById(R.id.imei);
number = (TextView) findViewById(R.id.number); number = (TextView) findViewById(R.id.number);
mSubscriptionId = (TextView) findViewById(R.id.subid);
mDds = (TextView) findViewById(R.id.dds);
mSubscriberId = (TextView) findViewById(R.id.imsi); mSubscriberId = (TextView) findViewById(R.id.imsi);
callState = (TextView) findViewById(R.id.call); callState = (TextView) findViewById(R.id.call);
operatorName = (TextView) findViewById(R.id.operator); operatorName = (TextView) findViewById(R.id.operator);
@@ -439,10 +463,17 @@ public class RadioInfo extends Activity {
mPhyChanConfig = (TextView) findViewById(R.id.phy_chan_config); mPhyChanConfig = (TextView) findViewById(R.id.phy_chan_config);
preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType); 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); android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); preferredNetworkTypeAdapter
preferredNetworkType.setAdapter(adapter); .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); cellInfoRefreshRateSpinner = (Spinner) findViewById(R.id.cell_info_rate_select);
ArrayAdapter<String> cellInfoAdapter = new ArrayAdapter<String>(this, ArrayAdapter<String> cellInfoAdapter = new ArrayAdapter<String>(this,
@@ -455,7 +486,7 @@ public class RadioInfo extends Activity {
imsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch); imsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch);
eabProvisionedSwitch = (Switch) findViewById(R.id.eab_provisioned_switch); eabProvisionedSwitch = (Switch) findViewById(R.id.eab_provisioned_switch);
if (!ImsManager.isImsSupportedOnDevice(phone.getContext())) { if (!ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
imsVolteProvisionedSwitch.setVisibility(View.GONE); imsVolteProvisionedSwitch.setVisibility(View.GONE);
imsVtProvisionedSwitch.setVisibility(View.GONE); imsVtProvisionedSwitch.setVisibility(View.GONE);
imsWfcProvisionedSwitch.setVisibility(View.GONE); imsWfcProvisionedSwitch.setVisibility(View.GONE);
@@ -513,9 +544,10 @@ public class RadioInfo extends Activity {
mCellInfoRefreshRateIndex = 0; //disabled mCellInfoRefreshRateIndex = 0; //disabled
mPreferredNetworkTypeResult = mPreferredNetworkLabels.length - 1; //Unknown mPreferredNetworkTypeResult = mPreferredNetworkLabels.length - 1; //Unknown
mSelectedPhoneIndex = 0; //phone 0
//FIXME: Replace with TelephonyManager call //FIXME: Replace with TelephonyManager call
phone.getPreferredNetworkType( mPhone.getPreferredNetworkType(
mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE)); mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
restoreFromBundle(icicle); restoreFromBundle(icicle);
@@ -527,6 +559,10 @@ public class RadioInfo extends Activity {
log("Started onResume"); log("Started onResume");
updateAllFields();
}
private void updateAllFields() {
updateMessageWaiting(); updateMessageWaiting();
updateCallRedirect(); updateCallRedirect();
updateDataState(); updateDataState();
@@ -539,6 +575,7 @@ public class RadioInfo extends Activity {
updateLocation(mCellLocationResult); updateLocation(mCellLocationResult);
updateCellInfo(mCellInfoResult); updateCellInfo(mCellInfoResult);
updateSubscriptionIds();
mPingHostnameV4.setText(mPingHostnameResultV4); mPingHostnameV4.setText(mPingHostnameResultV4);
mPingHostnameV6.setText(mPingHostnameResultV6); mPingHostnameV6.setText(mPingHostnameResultV6);
@@ -552,6 +589,10 @@ public class RadioInfo extends Activity {
preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true); preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler); preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
// set phone index
mSelectPhoneIndex.setSelection(mSelectedPhoneIndex, true);
mSelectPhoneIndex.setOnItemSelectedListener(mSelectPhoneIndexHandler);
radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener); radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener); imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener); imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
@@ -563,19 +604,8 @@ public class RadioInfo extends Activity {
cbrsDataSwitch.setOnCheckedChangeListener(mCbrsDataSwitchChangeListener); cbrsDataSwitch.setOnCheckedChangeListener(mCbrsDataSwitchChangeListener);
} }
mTelephonyManager.listen(mPhoneStateListener, unregisterPhoneStateListener();
PhoneStateListener.LISTEN_CALL_STATE registerPhoneStateListener();
//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);
mConnectivityManager.registerNetworkCallback( mConnectivityManager.registerNetworkCallback(
mDefaultNetworkRequest, mNetworkCallback, mHandler); mDefaultNetworkRequest, mNetworkCallback, mHandler);
@@ -611,6 +641,8 @@ public class RadioInfo extends Activity {
mPreferredNetworkTypeResult = b.getInt("mPreferredNetworkTypeResult", mPreferredNetworkTypeResult = b.getInt("mPreferredNetworkTypeResult",
mPreferredNetworkLabels.length - 1); mPreferredNetworkLabels.length - 1);
mSelectedPhoneIndex = b.getInt("mSelectedPhoneIndex", 0);
mCellInfoRefreshRateIndex = b.getInt("mCellInfoRefreshRateIndex", 0); mCellInfoRefreshRateIndex = b.getInt("mCellInfoRefreshRateIndex", 0);
} }
@@ -621,6 +653,7 @@ public class RadioInfo extends Activity {
outState.putString("mHttpClientTestResult", mHttpClientTestResult); outState.putString("mHttpClientTestResult", mHttpClientTestResult);
outState.putInt("mPreferredNetworkTypeResult", mPreferredNetworkTypeResult); outState.putInt("mPreferredNetworkTypeResult", mPreferredNetworkTypeResult);
outState.putInt("mSelectedPhoneIndex", mSelectedPhoneIndex);
outState.putInt("mCellInfoRefreshRateIndex", mCellInfoRefreshRateIndex); outState.putInt("mCellInfoRefreshRateIndex", mCellInfoRefreshRateIndex);
} }
@@ -636,7 +669,7 @@ public class RadioInfo extends Activity {
R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback); R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
menu.add(1, MENU_ITEM_VIEW_SDN, 0, menu.add(1, MENU_ITEM_VIEW_SDN, 0,
R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback); R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
if (ImsManager.isImsSupportedOnDevice(phone.getContext())) { if (ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
menu.add(1, MENU_ITEM_GET_IMS_STATUS, menu.add(1, MENU_ITEM_GET_IMS_STATUS,
0, R.string.radioInfo_menu_getIMS).setOnMenuItemClickListener(mGetImsStatus); 0, R.string.radioInfo_menu_getIMS).setOnMenuItemClickListener(mGetImsStatus);
} }
@@ -668,9 +701,61 @@ public class RadioInfo extends Activity {
return true; 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;
}
private void unregisterPhoneStateListener() {
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
// clear all fields so they are blank until the next listener event occurs
operatorName.setText("");
gprsState.setText("");
dataNetwork.setText("");
voiceNetwork.setText("");
sent.setText("");
received.setText("");
callState.setText("");
mLocation.setText("");
mMwiValue = false;
mMwi.setText("");
mCfiValue = false;
mCfi.setText("");
mCellInfo.setText("");
dBm.setText("");
gsmState.setText("");
roamingState.setText("");
mPhyChanConfig.setText("");
}
// register mPhoneStateListener for relevant fields using the current TelephonyManager
private void registerPhoneStateListener() {
mPhoneStateListener = new RadioInfoPhoneStateListener();
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() { private void updateDnsCheckState() {
//FIXME: Replace with a TelephonyManager call //FIXME: Replace with a TelephonyManager call
dnsCheckState.setText(phone.isDnsCheckDisabled() ? dnsCheckState.setText(mPhone.isDnsCheckDisabled() ?
"0.0.0.0 allowed" :"0.0.0.0 not allowed"); "0.0.0.0 allowed" :"0.0.0.0 not allowed");
} }
@@ -889,6 +974,11 @@ public class RadioInfo extends Activity {
mCellInfo.setText(buildCellInfoString(arrayCi)); mCellInfo.setText(buildCellInfoString(arrayCi));
} }
private final void updateSubscriptionIds() {
mSubscriptionId.setText(Integer.toString(mPhone.getSubId()));
mDds.setText(Integer.toString(SubscriptionManager.getDefaultDataSubscriptionId()));
}
private final void private final void
updateMessageWaiting() { updateMessageWaiting() {
mMwi.setText(String.valueOf(mMwiValue)); mMwi.setText(String.valueOf(mMwiValue));
@@ -975,12 +1065,12 @@ public class RadioInfo extends Activity {
} }
private final void updateNetworkType() { private final void updateNetworkType() {
if(phone != null) { if(mPhone != null) {
ServiceState ss = phone.getServiceState(); ServiceState ss = mPhone.getServiceState();
dataNetwork.setText(ServiceState.rilRadioTechnologyToString( dataNetwork.setText(ServiceState.rilRadioTechnologyToString(
phone.getServiceState().getRilDataRadioTechnology())); mPhone.getServiceState().getRilDataRadioTechnology()));
voiceNetwork.setText(ServiceState.rilRadioTechnologyToString( voiceNetwork.setText(ServiceState.rilRadioTechnologyToString(
phone.getServiceState().getRilVoiceRadioTechnology())); mPhone.getServiceState().getRilVoiceRadioTechnology()));
} }
} }
@@ -989,16 +1079,16 @@ public class RadioInfo extends Activity {
String s; String s;
Resources r = getResources(); Resources r = getResources();
s = phone.getDeviceId(); s = mPhone.getDeviceId();
if (s == null) s = r.getString(R.string.radioInfo_unknown); if (s == null) s = r.getString(R.string.radioInfo_unknown);
mDeviceId.setText(s); mDeviceId.setText(s);
s = phone.getSubscriberId(); s = mPhone.getSubscriberId();
if (s == null) s = r.getString(R.string.radioInfo_unknown); if (s == null) s = r.getString(R.string.radioInfo_unknown);
mSubscriberId.setText(s); mSubscriberId.setText(s);
//FIXME: Replace with a TelephonyManager call //FIXME: Replace with a TelephonyManager call
s = phone.getLine1Number(); s = mPhone.getLine1Number();
if (s == null) s = r.getString(R.string.radioInfo_unknown); if (s == null) s = r.getString(R.string.radioInfo_unknown);
number.setText(s); number.setText(s);
} }
@@ -1075,7 +1165,7 @@ public class RadioInfo extends Activity {
private void refreshSmsc() { private void refreshSmsc() {
//FIXME: Replace with a TelephonyManager call //FIXME: Replace with a TelephonyManager call
phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE)); mPhone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
} }
private final void updateAllCellInfo() { private final void updateAllCellInfo() {
@@ -1147,8 +1237,7 @@ public class RadioInfo extends Activity {
// the content provider, which causes it to be loaded in a process // the content provider, which causes it to be loaded in a process
// other than the Dialer process, which causes a lot of stuff to // other than the Dialer process, which causes a lot of stuff to
// break. // break.
intent.setClassName("com.android.phone", intent.setClassName("com.android.phone", "com.android.phone.SimContacts");
"com.android.phone.SimContacts");
startActivity(intent); startActivity(intent);
return true; return true;
} }
@@ -1162,8 +1251,7 @@ public class RadioInfo extends Activity {
// the content provider, which causes it to be loaded in a process // the content provider, which causes it to be loaded in a process
// other than the Dialer process, which causes a lot of stuff to // other than the Dialer process, which causes a lot of stuff to
// break. // break.
intent.setClassName("com.android.phone", intent.setClassName("com.android.phone", "com.android.phone.settings.fdn.FdnList");
"com.android.phone.settings.fdn.FdnList");
startActivity(intent); startActivity(intent);
return true; return true;
} }
@@ -1178,8 +1266,7 @@ public class RadioInfo extends Activity {
// the content provider, which causes it to be loaded in a process // the content provider, which causes it to be loaded in a process
// other than the Dialer process, which causes a lot of stuff to // other than the Dialer process, which causes a lot of stuff to
// break. // break.
intent.setClassName("com.android.phone", intent.setClassName("com.android.phone", "com.android.phone.ADNList");
"com.android.phone.ADNList");
startActivity(intent); startActivity(intent);
return true; return true;
} }
@@ -1187,11 +1274,11 @@ public class RadioInfo extends Activity {
private MenuItem.OnMenuItemClickListener mGetImsStatus = new MenuItem.OnMenuItemClickListener() { private MenuItem.OnMenuItemClickListener mGetImsStatus = new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
boolean isImsRegistered = phone.isImsRegistered(); boolean isImsRegistered = mPhone.isImsRegistered();
boolean availableVolte = phone.isVolteEnabled(); boolean availableVolte = mPhone.isVolteEnabled();
boolean availableWfc = phone.isWifiCallingEnabled(); boolean availableWfc = mPhone.isWifiCallingEnabled();
boolean availableVt = phone.isVideoEnabled(); boolean availableVt = mPhone.isVideoEnabled();
boolean availableUt = phone.isUtEnabled(); boolean availableUt = mPhone.isUtEnabled();
final String imsRegString = isImsRegistered ? final String imsRegString = isImsRegistered ?
getString(R.string.radio_info_ims_reg_status_registered) : getString(R.string.radio_info_ims_reg_status_registered) :
@@ -1248,7 +1335,7 @@ public class RadioInfo extends Activity {
private boolean isRadioOn() { private boolean isRadioOn() {
//FIXME: Replace with a TelephonyManager call //FIXME: Replace with a TelephonyManager call
return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF; return mPhone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
} }
private void updateRadioPowerState() { private void updateRadioPowerState() {
@@ -1280,7 +1367,7 @@ public class RadioInfo extends Activity {
} }
void setImsConfigProvisionedState(int configItem, boolean state) { void setImsConfigProvisionedState(int configItem, boolean state) {
if (phone != null && mImsManager != null) { if (mPhone != null && mImsManager != null) {
QueuedWork.queue(new Runnable() { QueuedWork.queue(new Runnable() {
public void run() { public void run() {
try { try {
@@ -1299,14 +1386,14 @@ public class RadioInfo extends Activity {
@Override @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
log("toggle radio power: currently " + (isRadioOn()?"on":"off")); log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
phone.setRadioPower(isChecked); mPhone.setRadioPower(isChecked);
} }
}; };
private boolean isImsVolteProvisioned() { private boolean isImsVolteProvisioned() {
if (phone != null && mImsManager != null) { if (mPhone != null && mImsManager != null) {
return mImsManager.isVolteEnabledByPlatform(phone.getContext()) return mImsManager.isVolteEnabledByPlatform(mPhone.getContext())
&& mImsManager.isVolteProvisionedOnDevice(phone.getContext()); && mImsManager.isVolteProvisionedOnDevice(mPhone.getContext());
} }
return false; return false;
} }
@@ -1319,9 +1406,9 @@ public class RadioInfo extends Activity {
}; };
private boolean isImsVtProvisioned() { private boolean isImsVtProvisioned() {
if (phone != null && mImsManager != null) { if (mPhone != null && mImsManager != null) {
return mImsManager.isVtEnabledByPlatform(phone.getContext()) return mImsManager.isVtEnabledByPlatform(mPhone.getContext())
&& mImsManager.isVtProvisionedOnDevice(phone.getContext()); && mImsManager.isVtProvisionedOnDevice(mPhone.getContext());
} }
return false; return false;
} }
@@ -1334,9 +1421,9 @@ public class RadioInfo extends Activity {
}; };
private boolean isImsWfcProvisioned() { private boolean isImsWfcProvisioned() {
if (phone != null && mImsManager != null) { if (mPhone != null && mImsManager != null) {
return mImsManager.isWfcEnabledByPlatform(phone.getContext()) return mImsManager.isWfcEnabledByPlatform(mPhone.getContext())
&& mImsManager.isWfcProvisionedOnDevice(phone.getContext()); && mImsManager.isWfcProvisionedOnDevice(mPhone.getContext());
} }
return false; return false;
} }
@@ -1391,7 +1478,7 @@ public class RadioInfo extends Activity {
} }
private void updateImsProvisionedState() { private void updateImsProvisionedState() {
if (!ImsManager.isImsSupportedOnDevice(phone.getContext())) { if (!ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
return; return;
} }
log("updateImsProvisionedState isImsVolteProvisioned()=" + isImsVolteProvisioned()); log("updateImsProvisionedState isImsVolteProvisioned()=" + isImsVolteProvisioned());
@@ -1401,31 +1488,31 @@ public class RadioInfo extends Activity {
imsVolteProvisionedSwitch.setChecked(isImsVolteProvisioned()); imsVolteProvisionedSwitch.setChecked(isImsVolteProvisioned());
imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener); imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
imsVolteProvisionedSwitch.setEnabled(!Build.IS_USER imsVolteProvisionedSwitch.setEnabled(!Build.IS_USER
&& mImsManager.isVolteEnabledByPlatform(phone.getContext())); && mImsManager.isVolteEnabledByPlatform(mPhone.getContext()));
imsVtProvisionedSwitch.setOnCheckedChangeListener(null); imsVtProvisionedSwitch.setOnCheckedChangeListener(null);
imsVtProvisionedSwitch.setChecked(isImsVtProvisioned()); imsVtProvisionedSwitch.setChecked(isImsVtProvisioned());
imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener); imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
imsVtProvisionedSwitch.setEnabled(!Build.IS_USER imsVtProvisionedSwitch.setEnabled(!Build.IS_USER
&& mImsManager.isVtEnabledByPlatform(phone.getContext())); && mImsManager.isVtEnabledByPlatform(mPhone.getContext()));
imsWfcProvisionedSwitch.setOnCheckedChangeListener(null); imsWfcProvisionedSwitch.setOnCheckedChangeListener(null);
imsWfcProvisionedSwitch.setChecked(isImsWfcProvisioned()); imsWfcProvisionedSwitch.setChecked(isImsWfcProvisioned());
imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener); imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
imsWfcProvisionedSwitch.setEnabled(!Build.IS_USER imsWfcProvisionedSwitch.setEnabled(!Build.IS_USER
&& mImsManager.isWfcEnabledByPlatform(phone.getContext())); && mImsManager.isWfcEnabledByPlatform(mPhone.getContext()));
eabProvisionedSwitch.setOnCheckedChangeListener(null); eabProvisionedSwitch.setOnCheckedChangeListener(null);
eabProvisionedSwitch.setChecked(isEabProvisioned()); eabProvisionedSwitch.setChecked(isEabProvisioned());
eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener); eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
eabProvisionedSwitch.setEnabled(!Build.IS_USER eabProvisionedSwitch.setEnabled(!Build.IS_USER
&& isEabEnabledByPlatform(phone.getContext())); && isEabEnabledByPlatform(mPhone.getContext()));
} }
OnClickListener mDnsCheckButtonHandler = new OnClickListener() { OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
//FIXME: Replace with a TelephonyManager call //FIXME: Replace with a TelephonyManager call
phone.disableDnsCheck(!phone.isDnsCheckDisabled()); mPhone.disableDnsCheck(!mPhone.isDnsCheckDisabled());
updateDnsCheckState(); updateDnsCheckState();
} }
}; };
@@ -1452,7 +1539,7 @@ public class RadioInfo extends Activity {
OnClickListener mUpdateSmscButtonHandler = new OnClickListener() { OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
updateSmscButton.setEnabled(false); updateSmscButton.setEnabled(false);
phone.setSmscAddress(smsc.getText().toString(), mPhone.setSmscAddress(smsc.getText().toString(),
mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE)); mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
} }
}; };
@@ -1497,14 +1584,40 @@ public class RadioInfo extends Activity {
// want this setting to be set, so that if the radio hiccups and this setting // want this setting to be set, so that if the radio hiccups and this setting
// is for some reason unsuccessful, future calls to the radio will reflect // is for some reason unsuccessful, future calls to the radio will reflect
// the users's preference which is set here. // the users's preference which is set here.
final int subId = phone.getSubId(); final int subId = mPhone.getSubId();
if (SubscriptionManager.isUsableSubIdValue(subId)) { if (SubscriptionManager.isUsableSubIdValue(subId)) {
Settings.Global.putInt(phone.getContext().getContentResolver(), Settings.Global.putInt(mPhone.getContext().getContentResolver(),
PREFERRED_NETWORK_MODE + subId, mPreferredNetworkTypeResult); PREFERRED_NETWORK_MODE + subId, mPreferredNetworkTypeResult);
} }
log("Calling setPreferredNetworkType(" + mPreferredNetworkTypeResult + ")"); log("Calling setPreferredNetworkType(" + mPreferredNetworkTypeResult + ")");
Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE); Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
phone.setPreferredNetworkType(mPreferredNetworkTypeResult, msg); mPhone.setPreferredNetworkType(mPreferredNetworkTypeResult, msg);
}
}
public void onNothingSelected(AdapterView parent) {
}
};
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) {
return;
}
// getSubId says it takes a slotIndex, but it actually takes a phone index
int[] subIds = SubscriptionManager.getSubId(phoneIndex);
if (subIds == null || subIds.length < 1) {
return;
}
mSelectedPhoneIndex = phoneIndex;
updatePhoneIndex(phoneIndex, subIds[0]);
} }
} }