Merge "Remove unused code in telephony fragment"

This commit is contained in:
Lei Yu
2018-10-26 01:14:27 +00:00
committed by Android (Google) Code Review
2 changed files with 22 additions and 547 deletions

View File

@@ -16,46 +16,24 @@
package com.android.settings.network.telephony;
import static android.provider.Telephony.Carriers.ENFORCE_MANAGED_URI;
import android.app.ActionBar;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.ContentObserver;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;
import com.android.ims.ImsManager;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settings.network.telephony.cdma.CdmaSubscriptionPreferenceController;
import com.android.settings.network.telephony.cdma.CdmaSystemSelectPreferenceController;
import com.android.settings.network.telephony.gsm.AutoSelectPreferenceController;
@@ -70,73 +48,33 @@ import java.util.Arrays;
import java.util.List;
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class MobileNetworkFragment extends DashboardFragment implements
Preference.OnPreferenceChangeListener {
public class MobileNetworkFragment extends RestrictedDashboardFragment {
// debug data
private static final String LOG_TAG = "NetworkSettings";
private static final boolean DBG = true;
public static final int REQUEST_CODE_EXIT_ECM = 17;
@VisibleForTesting
static final String KEY_CLICKED_PREF = "key_clicked_pref";
//String keys for preference lookup
private static final String BUTTON_PREFERED_NETWORK_MODE = "preferred_network_mode_key";
private static final String BUTTON_ROAMING_KEY = "button_roaming_key";
private static final String BUTTON_CDMA_LTE_DATA_SERVICE_KEY = "cdma_lte_data_service_key";
private static final String BUTTON_ENABLED_NETWORKS_KEY = "enabled_networks_key";
private static final String BUTTON_4G_LTE_KEY = "enhanced_4g_lte";
private static final String BUTTON_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
private static final String BUTTON_CARRIER_SETTINGS_KEY = "carrier_settings_key";
private static final String BUTTON_CDMA_SYSTEM_SELECT_KEY = "cdma_system_select_key";
private static final String BUTTON_CDMA_SUBSCRIPTION_KEY = "cdma_subscription_key";
private static final String BUTTON_CARRIER_SETTINGS_EUICC_KEY =
"carrier_settings_euicc_key";
private static final String BUTTON_MOBILE_DATA_ENABLE_KEY = "mobile_data_enable";
private static final String BUTTON_DATA_USAGE_KEY = "data_usage_summary";
private static final String BUTTON_ADVANCED_OPTIONS_KEY = "advanced_options";
private static final String CATEGORY_CALLING_KEY = "calling";
private static final String CATEGORY_GSM_APN_EXPAND_KEY = "category_gsm_apn_key";
private static final String CATEGORY_CDMA_APN_EXPAND_KEY = "category_cdma_apn_key";
private static final String BUTTON_GSM_APN_EXPAND_KEY = "button_gsm_apn_key";
private static final String BUTTON_CDMA_APN_EXPAND_KEY = "button_cdma_apn_key";
private static final String EXTRA_EXIT_ECM_RESULT = "exit_ecm_result";
private static final String LEGACY_ACTION_CONFIGURE_PHONE_ACCOUNT =
"android.telecom.action.CONNECTION_SERVICE_CONFIGURE";
private final BroadcastReceiver
mPhoneChangeReceiver = new PhoneChangeReceiver();
private final ContentObserver
mDpcEnforcedContentObserver = new DpcApnEnforcedObserver();
static final int preferredNetworkMode = Phone.PREFERRED_NT_MODE;
private SubscriptionManager mSubscriptionManager;
private TelephonyManager mTelephonyManager;
private CarrierConfigManager mCarrierConfigManager;
private int mSubId;
private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
private CdmaSystemSelectPreferenceController mCdmaSystemSelectPreferenceController;
private CdmaSubscriptionPreferenceController mCdmaSubscriptionPreferenceController;
private static final String iface = "rmnet0"; //TODO: this will go away
private List<SubscriptionInfo> mActiveSubInfos;
private UserManager mUm;
private ImsManager mImsMgr;
private boolean mOkClicked;
private UserManager mUserManager;
private String mClickedPrefKey;
private boolean mShow4GForLTE;
private boolean mIsGlobalCdma;
private boolean mOnlyAutoSelectInHomeNW;
private boolean mUnavailable;
public MobileNetworkFragment() {
super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
}
@Override
public int getMetricsCategory() {
//TODO(b/114749736): add metrics id for it
return 0;
return MetricsProto.MetricsEvent.MOBILE_NETWORK;
}
/**
@@ -149,13 +87,9 @@ public class MobileNetworkFragment extends DashboardFragment implements
if (super.onPreferenceTreeClick(preference)) {
return true;
}
sendMetricsEventPreferenceClicked(getPreferenceScreen(), preference);
final String key = preference.getKey();
/** TODO: Refactor and get rid of the if's using subclasses */
if (preference.getKey().equals(BUTTON_4G_LTE_KEY)) {
return true;
} else if (TextUtils.equals(key, BUTTON_CDMA_SYSTEM_SELECT_KEY)
if (TextUtils.equals(key, BUTTON_CDMA_SYSTEM_SELECT_KEY)
|| TextUtils.equals(key, BUTTON_CDMA_SUBSCRIPTION_KEY)) {
if (mTelephonyManager.getEmergencyCallbackMode()) {
startActivityForResult(
@@ -169,35 +103,6 @@ public class MobileNetworkFragment extends DashboardFragment implements
return false;
}
private final SubscriptionManager.OnSubscriptionsChangedListener
mOnSubscriptionsChangeListener
= new SubscriptionManager.OnSubscriptionsChangedListener() {
@Override
public void onSubscriptionsChanged() {
if (DBG) log("onSubscriptionsChanged:");
initializeSubscriptions();
}
};
private void initializeSubscriptions() {
final FragmentActivity activity = getActivity();
if (activity == null) {
// Process preferences in activity only if its not destroyed
return;
}
updatePhone();
updateBody();
if (DBG) log("initializeSubscriptions:-");
}
private void updatePhone() {
if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
mImsMgr = ImsManager.getInstance(getContext(),
SubscriptionManager.getPhoneId(mSubId));
mTelephonyManager = new TelephonyManager(getContext(), mSubId);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
@@ -241,33 +146,8 @@ public class MobileNetworkFragment extends DashboardFragment implements
super.onCreate(icicle);
final Context context = getContext();
if (context == null) {
Log.e(LOG_TAG, "onCreate:- with no valid activity.");
return;
}
mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
mSubscriptionManager = SubscriptionManager.from(context);
mTelephonyManager = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
mCarrierConfigManager = new CarrierConfigManager(getContext());
try {
Context con = context.createPackageContext("com.android.systemui", 0);
int id = con.getResources().getIdentifier("config_show4GForLTE",
"bool", "com.android.systemui");
mShow4GForLTE = con.getResources().getBoolean(id);
} catch (PackageManager.NameNotFoundException e) {
Log.e(LOG_TAG, "NameNotFoundException for show4GFotLTE");
mShow4GForLTE = false;
}
// Initialize mActiveSubInfo
int max = mSubscriptionManager.getActiveSubscriptionInfoCountMax();
mActiveSubInfos = mSubscriptionManager.getActiveSubscriptionInfoList();
updatePhone();
Log.i(LOG_TAG, "onCreate:-");
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mTelephonyManager = TelephonyManager.from(context).createForSubscriptionId(mSubId);
onRestoreInstance(icicle);
}
@@ -279,74 +159,6 @@ public class MobileNetworkFragment extends DashboardFragment implements
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)
|| !mUm.isSystemUser()) {
mUnavailable = true;
//TODO(b/114749736): migrate telephony_disallowed_preference_screen.xml
} else {
initializeSubscriptions();
}
}
private class PhoneChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(LOG_TAG, "onReceive:");
if (getActivity() == null || getContext() == null) {
// Received broadcast and activity is in the process of being torn down.
return;
}
// When the radio changes (ex: CDMA->GSM), refresh all options.
updateBody();
}
}
private class DpcApnEnforcedObserver extends ContentObserver {
DpcApnEnforcedObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
Log.i(LOG_TAG, "DPC enforced onChange:");
if (getActivity() == null || getContext() == null) {
// Received content change and activity is in the process of being torn down.
return;
}
updateBody();
}
}
@Override
public void onResume() {
super.onResume();
Log.i(LOG_TAG, "onResume:+");
if (mUnavailable) {
Log.i(LOG_TAG, "onResume:- ignore mUnavailable == false");
return;
}
// upon resumption from the sub-activity, make sure we re-enable the
// preferences.
getPreferenceScreen().setEnabled(true);
mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
final Context context = getContext();
IntentFilter intentFilter = new IntentFilter(
TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
context.registerReceiver(mPhoneChangeReceiver, intentFilter);
context.getContentResolver().registerContentObserver(ENFORCE_MANAGED_URI, false,
mDpcEnforcedContentObserver);
Log.i(LOG_TAG, "onResume:-");
}
@Override
protected int getPreferenceScreenResId() {
return R.xml.network_setting_fragment;
@@ -354,7 +166,7 @@ public class MobileNetworkFragment extends DashboardFragment implements
@Override
protected String getLogTag() {
return null;
return LOG_TAG;
}
@Override
@@ -363,156 +175,6 @@ public class MobileNetworkFragment extends DashboardFragment implements
outState.putString(KEY_CLICKED_PREF, mClickedPrefKey);
}
private boolean hasActiveSubscriptions() {
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
private void updateBodyBasicFields(FragmentActivity activity, PreferenceScreen prefSet,
int phoneSubId, boolean hasActiveSubscriptions) {
Context context = getContext();
ActionBar actionBar = activity.getActionBar();
if (actionBar != null) {
// android.R.id.home will be triggered in onOptionsItemSelected()
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
private void updateBody() {
final FragmentActivity activity = getActivity();
final PreferenceScreen prefSet = getPreferenceScreen();
final boolean hasActiveSubscriptions = hasActiveSubscriptions();
if (activity == null) {
Log.e(LOG_TAG, "updateBody with no valid activity.");
return;
}
if (prefSet == null) {
Log.e(LOG_TAG, "updateBody with no null prefSet.");
return;
}
updateBodyBasicFields(activity, prefSet, mSubId, hasActiveSubscriptions);
if (hasActiveSubscriptions) {
updateBodyAdvancedFields(activity, prefSet, mSubId, hasActiveSubscriptions);
}
}
private void updateBodyAdvancedFields(FragmentActivity activity, PreferenceScreen prefSet,
int phoneSubId, boolean hasActiveSubscriptions) {
boolean isLteOnCdma = mTelephonyManager.getLteOnCdmaMode()
== PhoneConstants.LTE_ON_CDMA_TRUE;
if (DBG) {
log("updateBody: isLteOnCdma=" + isLteOnCdma + " phoneSubId=" + phoneSubId);
}
int settingsNetworkMode = android.provider.Settings.Global.getInt(
getContext().getContentResolver(),
android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
preferredNetworkMode);
PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
mIsGlobalCdma = isLteOnCdma
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
if (carrierConfig.getBoolean(
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
} else if (carrierConfig.getBoolean(CarrierConfigManager
.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
&& !mTelephonyManager.getServiceState().getRoaming()
&& mTelephonyManager.getServiceState().getDataRegState()
== ServiceState.STATE_IN_SERVICE) {
final int phoneType = mTelephonyManager.getPhoneType();
if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {
updateGsmUmtsOptions(this, prefSet, phoneSubId);
} else {
throw new IllegalStateException("Unexpected phone type: " + phoneType);
}
// Since pref is being hidden from user, set network mode to default
// in case it is currently something else. That is possible if user
// changed the setting while roaming and is now back to home network.
settingsNetworkMode = preferredNetworkMode;
} else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
// set the listener for the mButtonPreferredNetworkMode list preference so we can issue
// change Preferred Network Mode.
updateGsmUmtsOptions(this, prefSet, phoneSubId);
}
final boolean missingDataServiceUrl = TextUtils.isEmpty(
android.provider.Settings.Global.getString(activity.getContentResolver(),
android.provider.Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL));
// Enable link to CMAS app settings depending on the value in config.xml.
final boolean isCellBroadcastAppLinkEnabled = activity.getResources().getBoolean(
com.android.internal.R.bool.config_cellBroadcastAppLinks);
if (!mUm.isAdminUser() || !isCellBroadcastAppLinkEnabled
|| mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_CELL_BROADCASTS)) {
PreferenceScreen root = getPreferenceScreen();
Preference ps = findPreference(BUTTON_CELL_BROADCAST_SETTINGS);
if (ps != null) {
root.removePreference(ps);
}
}
mOnlyAutoSelectInHomeNW = carrierConfig.getBoolean(
CarrierConfigManager.KEY_ONLY_AUTO_SELECT_IN_HOME_NETWORK_BOOL);
Preference ps;
ps = findPreference(BUTTON_CELL_BROADCAST_SETTINGS);
if (ps != null) {
ps.setEnabled(hasActiveSubscriptions);
}
ps = findPreference(CATEGORY_GSM_APN_EXPAND_KEY);
if (ps != null) {
ps.setEnabled(hasActiveSubscriptions);
}
ps = findPreference(CATEGORY_CDMA_APN_EXPAND_KEY);
if (ps != null) {
ps.setEnabled(hasActiveSubscriptions);
}
ps = findPreference(BUTTON_CARRIER_SETTINGS_KEY);
if (ps != null) {
ps.setEnabled(hasActiveSubscriptions);
}
ps = findPreference(CATEGORY_CALLING_KEY);
if (ps != null) {
ps.setEnabled(hasActiveSubscriptions);
}
}
@Override
public void onPause() {
super.onPause();
if (DBG) log("onPause:+");
mSubscriptionManager
.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
final Context context = getActivity();
context.unregisterReceiver(mPhoneChangeReceiver);
context.getContentResolver().unregisterContentObserver(mDpcEnforcedContentObserver);
if (DBG) log("onPause:-");
}
/**
* Implemented to support onPreferenceChangeListener to look for preference
* changes specifically on CLIR.
*
* @param preference is the preference to be changed, should be mButtonCLIR.
* @param objValue should be the value of the selection, NOT its localized
* display value.
*/
public boolean onPreferenceChange(Preference preference, Object objValue) {
sendMetricsEventPreferenceChanged(getPreferenceScreen(), preference, objValue);
updateBody();
// always let the preference setting proceed.
return true;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
@@ -532,202 +194,6 @@ public class MobileNetworkFragment extends DashboardFragment implements
}
}
private static void log(String msg) {
Log.d(LOG_TAG, msg);
}
private static void loge(String msg) {
Log.e(LOG_TAG, msg);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
final int itemId = item.getItemId();
if (itemId == android.R.id.home) { // See ActionBar#setDisplayHomeAsUpEnabled()
// Commenting out "logical up" capability. This is a workaround for issue 5278083.
//
// Settings app may not launch this activity via UP_ACTIVITY_CLASS but the other
// Activity that looks exactly same as UP_ACTIVITY_CLASS ("SubSettings" Activity).
// At that moment, this Activity launches UP_ACTIVITY_CLASS on top of the Activity.
// which confuses users.
// TODO: introduce better mechanism for "up" capability here.
/*Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName(UP_ACTIVITY_PACKAGE, UP_ACTIVITY_CLASS);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);*/
getActivity().finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private boolean isWorldMode() {
boolean worldModeOn = false;
final String configString = getResources().getString(R.string.config_world_mode);
if (!TextUtils.isEmpty(configString)) {
String[] configArray = configString.split(";");
// Check if we have World mode configuration set to True only or config is set to True
// and SIM GID value is also set and matches to the current SIM GID.
if (configArray != null &&
((configArray.length == 1 && configArray[0].equalsIgnoreCase("true"))
|| (configArray.length == 2 && !TextUtils.isEmpty(configArray[1])
&& mTelephonyManager != null
&& configArray[1].equalsIgnoreCase(
mTelephonyManager.getGroupIdLevel1())))) {
worldModeOn = true;
}
}
Log.d(LOG_TAG, "isWorldMode=" + worldModeOn);
return worldModeOn;
}
private void controlGsmOptions(boolean enable) {
PreferenceScreen prefSet = getPreferenceScreen();
if (prefSet == null) {
return;
}
updateGsmUmtsOptions(this, prefSet, mSubId);
Preference carrierSettings = prefSet.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
if (carrierSettings != null) {
prefSet.removePreference(carrierSettings);
}
}
private boolean isSupportTdscdma() {
if (getResources().getBoolean(R.bool.config_support_tdscdma)) {
return true;
}
String operatorNumeric = mTelephonyManager.getServiceState().getOperatorNumeric();
String[] numericArray = getResources().getStringArray(
R.array.config_support_tdscdma_roaming_on_networks);
if (numericArray.length == 0 || operatorNumeric == null) {
return false;
}
for (String numeric : numericArray) {
if (operatorNumeric.equals(numeric)) {
return true;
}
}
return false;
}
/**
* Metrics events related methods. it takes care of all preferences possible in this
* fragment(except a few that log on their own). It doesn't only include preferences in
* network_setting_fragment.xml, but also those defined in GsmUmtsOptions and CdmaOptions.
*/
private void sendMetricsEventPreferenceClicked(
PreferenceScreen preferenceScreen, Preference preference) {
final int category = getMetricsEventCategory(preferenceScreen, preference);
if (category == MetricsProto.MetricsEvent.VIEW_UNKNOWN) {
return;
}
// Send MetricsEvent on click. It includes preferences other than SwitchPreferences,
// which send MetricsEvent in onPreferenceChange.
// For ListPreferences, we log it here without a value, only indicating it's clicked to
// open the list dialog. When a value is chosen, another MetricsEvent is logged with
// new value in onPreferenceChange.
if (preference == preferenceScreen.findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)
|| preference == preferenceScreen.findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)
|| preference == preferenceScreen.findPreference(BUTTON_GSM_APN_EXPAND_KEY)
|| preference == preferenceScreen.findPreference(BUTTON_CDMA_APN_EXPAND_KEY)
|| preference == preferenceScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY)) {
MetricsLogger.action(getContext(), category);
}
}
private void sendMetricsEventPreferenceChanged(
PreferenceScreen preferenceScreen, Preference preference, Object newValue) {
final int category = getMetricsEventCategory(preferenceScreen, preference);
if (category == MetricsProto.MetricsEvent.VIEW_UNKNOWN) {
return;
}
// MetricsEvent logging with new value, for SwitchPreferences and ListPreferences.
if (preference == preferenceScreen
.findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)
|| preference == preferenceScreen
.findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)) {
// Network select preference sends metrics event in its own listener.
MetricsLogger.action(getContext(), category, Integer.valueOf((String) newValue));
}
}
private int getMetricsEventCategory(
PreferenceScreen preferenceScreen, Preference preference) {
if (preference == null) {
return MetricsProto.MetricsEvent.VIEW_UNKNOWN;
} else if (preference == preferenceScreen
.findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)) {
return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_CDMA_SYSTEM_SELECT;
} else if (preference == preferenceScreen
.findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)) {
return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_CDMA_SUBSCRIPTION_SELECT;
} else if (preference == preferenceScreen.findPreference(BUTTON_GSM_APN_EXPAND_KEY)
|| preference == preferenceScreen.findPreference(BUTTON_CDMA_APN_EXPAND_KEY)) {
return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_APN_SETTINGS;
} else if (preference == preferenceScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY)) {
return MetricsProto.MetricsEvent.ACTION_MOBILE_NETWORK_CARRIER_SETTINGS;
} else {
return MetricsProto.MetricsEvent.VIEW_UNKNOWN;
}
}
private void updateGsmUmtsOptions(PreferenceFragmentCompat prefFragment,
PreferenceScreen prefScreen, final int subId) {
// We don't want to re-create GsmUmtsOptions if already exists. Otherwise, the
// preferences inside it will also be re-created which causes unexpected behavior.
// For example, the open dialog gets dismissed or detached after pause / resume.
}
private static Intent buildPhoneAccountConfigureIntent(
Context context, PhoneAccountHandle accountHandle) {
Intent intent = buildConfigureIntent(
context, accountHandle, TelecomManager.ACTION_CONFIGURE_PHONE_ACCOUNT);
if (intent == null) {
// If the new configuration didn't work, try the old configuration intent.
intent = buildConfigureIntent(
context, accountHandle, LEGACY_ACTION_CONFIGURE_PHONE_ACCOUNT);
if (intent != null) {
Log.w(MobileNetworkFragment.LOG_TAG,
"Phone account using old configuration intent: " + accountHandle);
}
}
return intent;
}
private static Intent buildConfigureIntent(
Context context, PhoneAccountHandle accountHandle, String actionStr) {
if (accountHandle == null || accountHandle.getComponentName() == null
|| TextUtils.isEmpty(accountHandle.getComponentName().getPackageName())) {
return null;
}
// Build the settings intent.
Intent intent = new Intent(actionStr);
intent.setPackage(accountHandle.getComponentName().getPackageName());
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, accountHandle);
// Check to see that the phone account package can handle the setting intent.
PackageManager pm = context.getPackageManager();
List<ResolveInfo> resolutions = pm.queryIntentActivities(intent, 0);
if (resolutions.size() == 0) {
intent = null; // set no intent if the package cannot handle it.
}
return intent;
}
//TODO(b/114749736): update search provider
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {

View File

@@ -16,6 +16,7 @@
package com.android.settings.network.telephony;
import android.app.ActionBar;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SubscriptionInfo;
@@ -70,6 +71,8 @@ public class MobileSettingsActivity extends SettingsBaseActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//TODO(b/114749736): add phone change receiver here: ACTION_RADIO_TECHNOLOGY_CHANGED
setContentView(R.layout.mobile_settings_container);
setActionBar(findViewById(R.id.mobile_action_bar));
mSubscriptionManager = getSystemService(SubscriptionManager.class);
@@ -80,6 +83,12 @@ public class MobileSettingsActivity extends SettingsBaseActivity {
mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
final ActionBar actionBar = getActionBar();
if (actionBar != null) {
// android.R.id.home will be triggered in onOptionsItemSelected()
actionBar.setDisplayHomeAsUpEnabled(true);
}
updateSubscriptions(savedInstanceState);
}