summaryrefslogtreecommitdiff
path: root/src/com/android/phone/MobileNetworkSettings.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/phone/MobileNetworkSettings.java')
-rw-r--r--src/com/android/phone/MobileNetworkSettings.java590
1 files changed, 590 insertions, 0 deletions
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
new file mode 100644
index 00000000..e4b4de66
--- /dev/null
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -0,0 +1,590 @@
+/*
+ * Copyright (C) 2006 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.
+ */
+
+package com.android.phone;
+
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.telephony.TelephonyProperties;
+
+import android.app.ActionBar;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.Uri;
+import android.os.AsyncResult;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.SystemProperties;
+import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.MenuItem;
+
+/**
+ * "Mobile network settings" screen. This preference screen lets you
+ * enable/disable mobile data, and control data roaming and other
+ * network-specific mobile data features. It's used on non-voice-capable
+ * tablets as well as regular phone devices.
+ *
+ * Note that this PreferenceActivity is part of the phone app, even though
+ * you reach it from the "Wireless & Networks" section of the main
+ * Settings app. It's not part of the "Call settings" hierarchy that's
+ * available from the Phone app (see CallFeaturesSetting for that.)
+ */
+public class MobileNetworkSettings extends PreferenceActivity
+ implements DialogInterface.OnClickListener,
+ DialogInterface.OnDismissListener, Preference.OnPreferenceChangeListener{
+
+ // debug data
+ private static final String LOG_TAG = "NetworkSettings";
+ private static final boolean DBG = false;
+ public static final int REQUEST_CODE_EXIT_ECM = 17;
+
+ //String keys for preference lookup
+ private static final String BUTTON_DATA_ENABLED_KEY = "button_data_enabled_key";
+ 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";
+
+ static final int preferredNetworkMode = Phone.PREFERRED_NT_MODE;
+
+ //Information about logical "up" Activity
+ private static final String UP_ACTIVITY_PACKAGE = "com.android.settings";
+ private static final String UP_ACTIVITY_CLASS =
+ "com.android.settings.Settings$WirelessSettingsActivity";
+
+ //UI objects
+ private ListPreference mButtonPreferredNetworkMode;
+ private CheckBoxPreference mButtonDataRoam;
+ private CheckBoxPreference mButtonDataEnabled;
+ private Preference mLteDataServicePref;
+
+ private static final String iface = "rmnet0"; //TODO: this will go away
+
+ private Phone mPhone;
+ private MyHandler mHandler;
+ private boolean mOkClicked;
+
+ //GsmUmts options and Cdma options
+ GsmUmtsOptions mGsmUmtsOptions;
+ CdmaOptions mCdmaOptions;
+
+ private Preference mClickedPreference;
+
+
+ //This is a method implemented for DialogInterface.OnClickListener.
+ // Used to dismiss the dialogs when they come up.
+ public void onClick(DialogInterface dialog, int which) {
+ if (which == DialogInterface.BUTTON_POSITIVE) {
+ mPhone.setDataRoamingEnabled(true);
+ mOkClicked = true;
+ } else {
+ // Reset the toggle
+ mButtonDataRoam.setChecked(false);
+ }
+ }
+
+ public void onDismiss(DialogInterface dialog) {
+ // Assuming that onClick gets called first
+ if (!mOkClicked) {
+ mButtonDataRoam.setChecked(false);
+ }
+ }
+
+ /**
+ * Invoked on each preference click in this hierarchy, overrides
+ * PreferenceActivity's implementation. Used to make sure we track the
+ * preference click events.
+ */
+ @Override
+ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+ /** TODO: Refactor and get rid of the if's using subclasses */
+ if (mGsmUmtsOptions != null &&
+ mGsmUmtsOptions.preferenceTreeClick(preference) == true) {
+ return true;
+ } else if (mCdmaOptions != null &&
+ mCdmaOptions.preferenceTreeClick(preference) == true) {
+ if (Boolean.parseBoolean(
+ SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) {
+
+ mClickedPreference = preference;
+
+ // In ECM mode launch ECM app dialog
+ startActivityForResult(
+ new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null),
+ REQUEST_CODE_EXIT_ECM);
+ }
+ return true;
+ } else if (preference == mButtonPreferredNetworkMode) {
+ //displays the value taken from the Settings.System
+ int settingsNetworkMode = android.provider.Settings.Global.getInt(mPhone.getContext().
+ getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+ preferredNetworkMode);
+ mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
+ return true;
+ } else if (preference == mButtonDataRoam) {
+ if (DBG) log("onPreferenceTreeClick: preference == mButtonDataRoam.");
+
+ //normally called on the toggle click
+ if (mButtonDataRoam.isChecked()) {
+ // First confirm with a warning dialog about charges
+ mOkClicked = false;
+ new AlertDialog.Builder(this).setMessage(
+ getResources().getString(R.string.roaming_warning))
+ .setTitle(android.R.string.dialog_alert_title)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
+ .setPositiveButton(android.R.string.yes, this)
+ .setNegativeButton(android.R.string.no, this)
+ .show()
+ .setOnDismissListener(this);
+ } else {
+ mPhone.setDataRoamingEnabled(false);
+ }
+ return true;
+ } else if (preference == mButtonDataEnabled) {
+ if (DBG) log("onPreferenceTreeClick: preference == mButtonDataEnabled.");
+ ConnectivityManager cm =
+ (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
+
+ cm.setMobileDataEnabled(mButtonDataEnabled.isChecked());
+ return true;
+ } else if (preference == mLteDataServicePref) {
+ String tmpl = android.provider.Settings.Global.getString(getContentResolver(),
+ android.provider.Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
+ if (!TextUtils.isEmpty(tmpl)) {
+ TelephonyManager tm = (TelephonyManager) getSystemService(
+ Context.TELEPHONY_SERVICE);
+ String imsi = tm.getSubscriberId();
+ if (imsi == null) {
+ imsi = "";
+ }
+ final String url = TextUtils.isEmpty(tmpl) ? null
+ : TextUtils.expandTemplate(tmpl, imsi).toString();
+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ startActivity(intent);
+ } else {
+ android.util.Log.e(LOG_TAG, "Missing SETUP_PREPAID_DATA_SERVICE_URL");
+ }
+ return true;
+ } else {
+ // if the button is anything but the simple toggle preference,
+ // we'll need to disable all preferences to reject all click
+ // events until the sub-activity's UI comes up.
+ preferenceScreen.setEnabled(false);
+ // Let the intents be launched by the Preference manager
+ return false;
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ addPreferencesFromResource(R.xml.network_setting);
+
+ mPhone = PhoneGlobals.getPhone();
+ mHandler = new MyHandler();
+
+ //get UI object references
+ PreferenceScreen prefSet = getPreferenceScreen();
+
+ mButtonDataEnabled = (CheckBoxPreference) prefSet.findPreference(BUTTON_DATA_ENABLED_KEY);
+ mButtonDataRoam = (CheckBoxPreference) prefSet.findPreference(BUTTON_ROAMING_KEY);
+ mButtonPreferredNetworkMode = (ListPreference) prefSet.findPreference(
+ BUTTON_PREFERED_NETWORK_MODE);
+ mLteDataServicePref = prefSet.findPreference(BUTTON_CDMA_LTE_DATA_SERVICE_KEY);
+
+ boolean isLteOnCdma = mPhone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
+ if (getResources().getBoolean(R.bool.world_phone) == true) {
+ // set the listener for the mButtonPreferredNetworkMode list preference so we can issue
+ // change Preferred Network Mode.
+ mButtonPreferredNetworkMode.setOnPreferenceChangeListener(this);
+
+ //Get the networkMode from Settings.System and displays it
+ int settingsNetworkMode = android.provider.Settings.Global.getInt(mPhone.getContext().
+ getContentResolver(),android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+ preferredNetworkMode);
+ mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
+ mCdmaOptions = new CdmaOptions(this, prefSet, mPhone);
+ mGsmUmtsOptions = new GsmUmtsOptions(this, prefSet);
+ } else {
+ if (!isLteOnCdma) {
+ prefSet.removePreference(mButtonPreferredNetworkMode);
+ }
+ int phoneType = mPhone.getPhoneType();
+ if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {
+ mCdmaOptions = new CdmaOptions(this, prefSet, mPhone);
+ if (isLteOnCdma) {
+ mButtonPreferredNetworkMode.setOnPreferenceChangeListener(this);
+ int settingsNetworkMode = android.provider.Settings.Global.getInt(
+ mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+ preferredNetworkMode);
+ mButtonPreferredNetworkMode.setValue(
+ Integer.toString(settingsNetworkMode));
+ }
+
+ } else if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {
+ mGsmUmtsOptions = new GsmUmtsOptions(this, prefSet);
+ } else {
+ throw new IllegalStateException("Unexpected phone type: " + phoneType);
+ }
+ }
+
+ final boolean missingDataServiceUrl = TextUtils.isEmpty(
+ android.provider.Settings.Global.getString(getContentResolver(),
+ android.provider.Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL));
+ if (!isLteOnCdma || missingDataServiceUrl) {
+ prefSet.removePreference(mLteDataServicePref);
+ } else {
+ android.util.Log.d(LOG_TAG, "keep ltePref");
+ }
+
+ ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ // android.R.id.home will be triggered in onOptionsItemSelected()
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ // upon resumption from the sub-activity, make sure we re-enable the
+ // preferences.
+ getPreferenceScreen().setEnabled(true);
+
+ ConnectivityManager cm =
+ (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
+ mButtonDataEnabled.setChecked(cm.getMobileDataEnabled());
+
+ // Set UI state in onResume because a user could go home, launch some
+ // app to change this setting's backend, and re-launch this settings app
+ // and the UI state would be inconsistent with actual state
+ mButtonDataRoam.setChecked(mPhone.getDataRoamingEnabled());
+
+ if (getPreferenceScreen().findPreference(BUTTON_PREFERED_NETWORK_MODE) != null) {
+ mPhone.getPreferredNetworkType(mHandler.obtainMessage(
+ MyHandler.MESSAGE_GET_PREFERRED_NETWORK_TYPE));
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.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) {
+ if (preference == mButtonPreferredNetworkMode) {
+ //NOTE onPreferenceChange seems to be called even if there is no change
+ //Check if the button value is changed from the System.Setting
+ mButtonPreferredNetworkMode.setValue((String) objValue);
+ int buttonNetworkMode;
+ buttonNetworkMode = Integer.valueOf((String) objValue).intValue();
+ int settingsNetworkMode = android.provider.Settings.Global.getInt(
+ mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE, preferredNetworkMode);
+ if (buttonNetworkMode != settingsNetworkMode) {
+ int modemNetworkMode;
+ // if new mode is invalid ignore it
+ switch (buttonNetworkMode) {
+ case Phone.NT_MODE_WCDMA_PREF:
+ case Phone.NT_MODE_GSM_ONLY:
+ case Phone.NT_MODE_WCDMA_ONLY:
+ case Phone.NT_MODE_GSM_UMTS:
+ case Phone.NT_MODE_CDMA:
+ case Phone.NT_MODE_CDMA_NO_EVDO:
+ case Phone.NT_MODE_EVDO_NO_CDMA:
+ case Phone.NT_MODE_GLOBAL:
+ case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
+ case Phone.NT_MODE_LTE_GSM_WCDMA:
+ case Phone.NT_MODE_LTE_CMDA_EVDO_GSM_WCDMA:
+ case Phone.NT_MODE_LTE_ONLY:
+ case Phone.NT_MODE_LTE_WCDMA:
+ // This is one of the modes we recognize
+ modemNetworkMode = buttonNetworkMode;
+ break;
+ default:
+ loge("Invalid Network Mode (" + buttonNetworkMode + ") chosen. Ignore.");
+ return true;
+ }
+
+ UpdatePreferredNetworkModeSummary(buttonNetworkMode);
+
+ android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+ buttonNetworkMode );
+ //Set the modem network mode
+ mPhone.setPreferredNetworkType(modemNetworkMode, mHandler
+ .obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
+ }
+ }
+
+ // always let the preference setting proceed.
+ return true;
+ }
+
+ private class MyHandler extends Handler {
+
+ static final int MESSAGE_GET_PREFERRED_NETWORK_TYPE = 0;
+ static final int MESSAGE_SET_PREFERRED_NETWORK_TYPE = 1;
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MESSAGE_GET_PREFERRED_NETWORK_TYPE:
+ handleGetPreferredNetworkTypeResponse(msg);
+ break;
+
+ case MESSAGE_SET_PREFERRED_NETWORK_TYPE:
+ handleSetPreferredNetworkTypeResponse(msg);
+ break;
+ }
+ }
+
+ private void handleGetPreferredNetworkTypeResponse(Message msg) {
+ AsyncResult ar = (AsyncResult) msg.obj;
+
+ if (ar.exception == null) {
+ int modemNetworkMode = ((int[])ar.result)[0];
+
+ if (DBG) {
+ log ("handleGetPreferredNetworkTypeResponse: modemNetworkMode = " +
+ modemNetworkMode);
+ }
+
+ int settingsNetworkMode = android.provider.Settings.Global.getInt(
+ mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+ preferredNetworkMode);
+
+ if (DBG) {
+ log("handleGetPreferredNetworkTypeReponse: settingsNetworkMode = " +
+ settingsNetworkMode);
+ }
+
+ //check that modemNetworkMode is from an accepted value
+ if (modemNetworkMode == Phone.NT_MODE_WCDMA_PREF ||
+ modemNetworkMode == Phone.NT_MODE_GSM_ONLY ||
+ modemNetworkMode == Phone.NT_MODE_WCDMA_ONLY ||
+ modemNetworkMode == Phone.NT_MODE_GSM_UMTS ||
+ modemNetworkMode == Phone.NT_MODE_CDMA ||
+ modemNetworkMode == Phone.NT_MODE_CDMA_NO_EVDO ||
+ modemNetworkMode == Phone.NT_MODE_EVDO_NO_CDMA ||
+ modemNetworkMode == Phone.NT_MODE_GLOBAL ||
+ modemNetworkMode == Phone.NT_MODE_LTE_CDMA_AND_EVDO ||
+ modemNetworkMode == Phone.NT_MODE_LTE_GSM_WCDMA ||
+ modemNetworkMode == Phone.NT_MODE_LTE_CMDA_EVDO_GSM_WCDMA ||
+ modemNetworkMode == Phone.NT_MODE_LTE_ONLY ||
+ modemNetworkMode == Phone.NT_MODE_LTE_WCDMA) {
+ if (DBG) {
+ log("handleGetPreferredNetworkTypeResponse: if 1: modemNetworkMode = " +
+ modemNetworkMode);
+ }
+
+ //check changes in modemNetworkMode and updates settingsNetworkMode
+ if (modemNetworkMode != settingsNetworkMode) {
+ if (DBG) {
+ log("handleGetPreferredNetworkTypeResponse: if 2: " +
+ "modemNetworkMode != settingsNetworkMode");
+ }
+
+ settingsNetworkMode = modemNetworkMode;
+
+ if (DBG) { log("handleGetPreferredNetworkTypeResponse: if 2: " +
+ "settingsNetworkMode = " + settingsNetworkMode);
+ }
+
+ //changes the Settings.System accordingly to modemNetworkMode
+ android.provider.Settings.Global.putInt(
+ mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+ settingsNetworkMode );
+ }
+
+ UpdatePreferredNetworkModeSummary(modemNetworkMode);
+ // changes the mButtonPreferredNetworkMode accordingly to modemNetworkMode
+ mButtonPreferredNetworkMode.setValue(Integer.toString(modemNetworkMode));
+ } else {
+ if (DBG) log("handleGetPreferredNetworkTypeResponse: else: reset to default");
+ resetNetworkModeToDefault();
+ }
+ }
+ }
+
+ private void handleSetPreferredNetworkTypeResponse(Message msg) {
+ AsyncResult ar = (AsyncResult) msg.obj;
+
+ if (ar.exception == null) {
+ int networkMode = Integer.valueOf(
+ mButtonPreferredNetworkMode.getValue()).intValue();
+ android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+ networkMode );
+ } else {
+ mPhone.getPreferredNetworkType(obtainMessage(MESSAGE_GET_PREFERRED_NETWORK_TYPE));
+ }
+ }
+
+ private void resetNetworkModeToDefault() {
+ //set the mButtonPreferredNetworkMode
+ mButtonPreferredNetworkMode.setValue(Integer.toString(preferredNetworkMode));
+ //set the Settings.System
+ android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+ preferredNetworkMode );
+ //Set the Modem
+ mPhone.setPreferredNetworkType(preferredNetworkMode,
+ this.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
+ }
+ }
+
+ private void UpdatePreferredNetworkModeSummary(int NetworkMode) {
+ switch(NetworkMode) {
+ case Phone.NT_MODE_WCDMA_PREF:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_wcdma_perf_summary);
+ break;
+ case Phone.NT_MODE_GSM_ONLY:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_gsm_only_summary);
+ break;
+ case Phone.NT_MODE_WCDMA_ONLY:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_wcdma_only_summary);
+ break;
+ case Phone.NT_MODE_GSM_UMTS:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_gsm_wcdma_summary);
+ break;
+ case Phone.NT_MODE_CDMA:
+ switch (mPhone.getLteOnCdmaMode()) {
+ case PhoneConstants.LTE_ON_CDMA_TRUE:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_cdma_summary);
+ break;
+ case PhoneConstants.LTE_ON_CDMA_FALSE:
+ default:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_cdma_evdo_summary);
+ break;
+ }
+ break;
+ case Phone.NT_MODE_CDMA_NO_EVDO:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_cdma_only_summary);
+ break;
+ case Phone.NT_MODE_EVDO_NO_CDMA:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_evdo_only_summary);
+ break;
+ case Phone.NT_MODE_LTE_ONLY:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_lte_summary);
+ break;
+ case Phone.NT_MODE_LTE_GSM_WCDMA:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_lte_gsm_wcdma_summary);
+ break;
+ case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_lte_cdma_evdo_summary);
+ break;
+ case Phone.NT_MODE_LTE_CMDA_EVDO_GSM_WCDMA:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_global_summary);
+ break;
+ case Phone.NT_MODE_GLOBAL:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_cdma_evdo_gsm_wcdma_summary);
+ break;
+ case Phone.NT_MODE_LTE_WCDMA:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_lte_wcdma_summary);
+ break;
+ default:
+ mButtonPreferredNetworkMode.setSummary(
+ R.string.preferred_network_mode_global_summary);
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ switch(requestCode) {
+ case REQUEST_CODE_EXIT_ECM:
+ Boolean isChoiceYes =
+ data.getBooleanExtra(EmergencyCallbackModeExitDialog.EXTRA_EXIT_ECM_RESULT, false);
+ if (isChoiceYes) {
+ // If the phone exits from ECM mode, show the CDMA Options
+ mCdmaOptions.showDialog(mClickedPreference);
+ } else {
+ // do nothing
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ 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);*/
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}