Merge "Fixed a bug where APN did not always show." into lmp-mr1-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6b35ada..c47db4f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1279,5 +1279,8 @@
<!-- DO NOT TRANSLATE. Internal key for a voicemail notification preference. -->
<string name="voicemail_notification_ringtone_key">voicemail_notification_ringtone_key</string>
+ <!-- DO NOT TRANSLATE. Internal key for a voicemail notification preference. -->
<string name="voicemail_notification_vibrate_key">voicemail_notification_vibrate_key</string>
+ <!-- DO NOT TRANSLATE. Internal key for tty mode preference. -->
+ <string name="tty_mode_key">button_tty_mode_key</string>
</resources>
diff --git a/res/xml/call_feature_setting.xml b/res/xml/call_feature_setting.xml
index cef723d..4ae0bf6 100644
--- a/res/xml/call_feature_setting.xml
+++ b/res/xml/call_feature_setting.xml
@@ -94,8 +94,8 @@
android:persistent="false"
android:summary="@string/auto_retry_mode_summary"/>
- <ListPreference
- android:key="button_tty_mode_key"
+ <com.android.phone.settings.TtyModeListPreference
+ android:key="@string/tty_mode_key"
android:title="@string/tty_mode_option_title"
android:summary="@string/tty_mode_option_summary"
android:persistent="false"
diff --git a/res/xml/phone_account_settings.xml b/res/xml/phone_account_settings.xml
index f818baa..ff01d34 100644
--- a/res/xml/phone_account_settings.xml
+++ b/res/xml/phone_account_settings.xml
@@ -28,6 +28,14 @@
android:defaultValue=""
android:persistent="false" />
+ <com.android.phone.settings.TtyModeListPreference
+ android:key="@string/tty_mode_key"
+ android:title="@string/tty_mode_option_title"
+ android:summary="@string/tty_mode_option_summary"
+ android:persistent="false"
+ android:entries="@array/tty_mode_entries"
+ android:entryValues="@array/tty_mode_values"/>
+
<PreferenceCategory
android:key="phone_accounts_call_assistant_settings_category_key"
android:title="@string/wifi_calling_call_assistant"
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index c516dda..a971373 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -55,6 +55,7 @@
import com.android.phone.common.util.SettingsUtil;
import com.android.phone.settings.AccountSelectionPreference;
import com.android.phone.settings.CallForwardInfoUtil;
+import com.android.phone.settings.TtyModeListPreference;
import com.android.phone.settings.VoicemailDialogUtil;
import com.android.phone.settings.VoicemailNotificationSettingsUtil;
import com.android.phone.settings.VoicemailProviderListPreference;
@@ -191,8 +192,7 @@
private CheckBoxPreference mButtonAutoRetry;
private CheckBoxPreference mButtonHAC;
private ListPreference mButtonDTMF;
- private ListPreference mButtonTTY;
- private Preference mPhoneAccountSettingsPreference;
+ private TtyModeListPreference mButtonTTY;
private VoicemailProviderListPreference mVoicemailProviders;
private PreferenceScreen mVoicemailSettingsScreen;
private PreferenceScreen mVoicemailSettings;
@@ -376,8 +376,6 @@
int index = mButtonDTMF.findIndexOfValue((String) objValue);
Settings.System.putInt(mPhone.getContext().getContentResolver(),
Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, index);
- } else if (preference == mButtonTTY) {
- handleTTYChange(preference, objValue);
} else if (preference == mVoicemailProviders) {
final String newProviderKey = (String) objValue;
@@ -1128,19 +1126,6 @@
mSubscriptionInfoHelper.setActionBarTitle(
getActionBar(), getResources(), R.string.call_settings_with_label);
mPhone = mSubscriptionInfoHelper.getPhone();
- }
-
- private void initPhoneAccountPreferences() {
- mPhoneAccountSettingsPreference = findPreference(PHONE_ACCOUNT_SETTINGS_KEY);
-
- TelecomManager telecomManager = TelecomManager.from(this);
- TelephonyManager telephonyManager =
- (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
-
- if ((telecomManager.getSimCallManagers().isEmpty() && !SipUtil.isVoipSupported(this))
- || telephonyManager.getPhoneCount() > 1) {
- getPreferenceScreen().removePreference(mPhoneAccountSettingsPreference);
- }
}
@Override
@@ -1155,7 +1140,15 @@
addPreferencesFromResource(R.xml.call_feature_setting);
- initPhoneAccountPreferences();
+ TelecomManager telecomManager = TelecomManager.from(this);
+ TelephonyManager telephonyManager =
+ (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+
+ Preference phoneAccountSettingsPreference = findPreference(PHONE_ACCOUNT_SETTINGS_KEY);
+ if (telephonyManager.isMultiSimEnabled() || (telecomManager.getSimCallManagers().isEmpty()
+ && !SipUtil.isVoipSupported(mPhone.getContext()))) {
+ getPreferenceScreen().removePreference(phoneAccountSettingsPreference);
+ }
PreferenceScreen prefSet = getPreferenceScreen();
mSubMenuVoicemailSettings = (EditPhoneNumberPreference) findPreference(BUTTON_VOICEMAIL_KEY);
@@ -1166,7 +1159,8 @@
mButtonDTMF = (ListPreference) findPreference(BUTTON_DTMF_KEY);
mButtonAutoRetry = (CheckBoxPreference) findPreference(BUTTON_RETRY_KEY);
mButtonHAC = (CheckBoxPreference) findPreference(BUTTON_HAC_KEY);
- mButtonTTY = (ListPreference) findPreference(BUTTON_TTY_KEY);
+ mButtonTTY = (TtyModeListPreference) findPreference(
+ getResources().getString(R.string.tty_mode_key));
mVoicemailProviders = (VoicemailProviderListPreference) findPreference(
BUTTON_VOICEMAIL_PROVIDER_KEY);
@@ -1219,14 +1213,8 @@
mButtonHAC = null;
}
- TelecomManager telecomManager = TelecomManager.from(this);
- if (telecomManager != null && telecomManager.isTtySupported()) {
- mButtonTTY.setOnPreferenceChangeListener(this);
- int settingsTtyMode = Settings.Secure.getInt(getContentResolver(),
- Settings.Secure.PREFERRED_TTY_MODE,
- TelecomManager.TTY_MODE_OFF);
- mButtonTTY.setValue(Integer.toString(settingsTtyMode));
- updatePreferredTtyModeSummary(settingsTtyMode);
+ if (!telephonyManager.isMultiSimEnabled() && telecomManager.isTtySupported()) {
+ mButtonTTY.init();
} else {
prefSet.removePreference(mButtonTTY);
mButtonTTY = null;
@@ -1314,53 +1302,6 @@
}
}
- private void handleTTYChange(Preference preference, Object objValue) {
- int buttonTtyMode;
- buttonTtyMode = Integer.valueOf((String) objValue).intValue();
- int settingsTtyMode = android.provider.Settings.Secure.getInt(
- getContentResolver(),
- android.provider.Settings.Secure.PREFERRED_TTY_MODE,
- TelecomManager.TTY_MODE_OFF);
- if (DBG) log("handleTTYChange: requesting set TTY mode enable (TTY) to" +
- Integer.toString(buttonTtyMode));
-
- if (buttonTtyMode != settingsTtyMode) {
- switch(buttonTtyMode) {
- case TelecomManager.TTY_MODE_OFF:
- case TelecomManager.TTY_MODE_FULL:
- case TelecomManager.TTY_MODE_HCO:
- case TelecomManager.TTY_MODE_VCO:
- android.provider.Settings.Secure.putInt(getContentResolver(),
- android.provider.Settings.Secure.PREFERRED_TTY_MODE, buttonTtyMode);
- break;
- default:
- buttonTtyMode = TelecomManager.TTY_MODE_OFF;
- }
-
- mButtonTTY.setValue(Integer.toString(buttonTtyMode));
- updatePreferredTtyModeSummary(buttonTtyMode);
- Intent ttyModeChanged = new Intent(TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
- ttyModeChanged.putExtra(TelecomManager.EXTRA_TTY_PREFERRED_MODE, buttonTtyMode);
- sendBroadcastAsUser(ttyModeChanged, UserHandle.ALL);
- }
- }
-
- private void updatePreferredTtyModeSummary(int TtyMode) {
- String [] txts = getResources().getStringArray(R.array.tty_mode_entries);
- switch(TtyMode) {
- case TelecomManager.TTY_MODE_OFF:
- case TelecomManager.TTY_MODE_HCO:
- case TelecomManager.TTY_MODE_VCO:
- case TelecomManager.TTY_MODE_FULL:
- mButtonTTY.setSummary(txts[TtyMode]);
- break;
- default:
- mButtonTTY.setEnabled(false);
- mButtonTTY.setSummary(txts[TelecomManager.TTY_MODE_OFF]);
- break;
- }
- }
-
private static void log(String msg) {
Log.d(LOG_TAG, msg);
}
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index 5b60f8a..3669544 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -46,6 +46,7 @@
import android.os.Vibrator;
import android.provider.CallLog.Calls;
import android.provider.Settings;
+import android.telecom.TelecomManager;
import android.telephony.DisconnectCause;
import android.telephony.PhoneNumberUtils;
import android.telephony.PhoneStateListener;
@@ -255,6 +256,11 @@
onSuppServiceFailed((AsyncResult) msg.obj);
break;
+ case CallStateMonitor.PHONE_TTY_MODE_RECEIVED:
+ if (DBG) log("Received PHONE_TTY_MODE_RECEIVED event");
+ onTtyModeReceived((AsyncResult) msg.obj);
+ break;
+
default:
// super.handleMessage(msg);
}
@@ -979,6 +985,42 @@
}
/**
+ * Displays a notification when the phone receives a notice that TTY mode
+ * has changed on remote end.
+ */
+ private void onTtyModeReceived(AsyncResult r) {
+ if (DBG) log("TtyModeReceived: displaying notification message");
+
+ int resId = 0;
+ switch (((Integer)r.result).intValue()) {
+ case TelecomManager.TTY_MODE_FULL:
+ resId = com.android.internal.R.string.peerTtyModeFull;
+ break;
+ case TelecomManager.TTY_MODE_HCO:
+ resId = com.android.internal.R.string.peerTtyModeHco;
+ break;
+ case TelecomManager.TTY_MODE_VCO:
+ resId = com.android.internal.R.string.peerTtyModeVco;
+ break;
+ case TelecomManager.TTY_MODE_OFF:
+ resId = com.android.internal.R.string.peerTtyModeOff;
+ break;
+ default:
+ Log.e(LOG_TAG, "Unsupported TTY mode: " + r.result);
+ break;
+ }
+ if (resId != 0) {
+ PhoneDisplayMessage.displayNetworkMessage(mApplication,
+ mApplication.getResources().getString(resId));
+
+ // start a timer that kills the dialog
+ sendEmptyMessageDelayed(
+ CallStateMonitor.INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE,
+ SHOW_MESSAGE_NOTIFICATION_TIME);
+ }
+ }
+
+ /**
* Helper class to play SignalInfo tones using the ToneGenerator.
*
* To use, just instantiate a new SignalInfoTonePlayer
diff --git a/src/com/android/phone/CallStateMonitor.java b/src/com/android/phone/CallStateMonitor.java
index e150c68..16a6f1f 100644
--- a/src/com/android/phone/CallStateMonitor.java
+++ b/src/com/android/phone/CallStateMonitor.java
@@ -57,6 +57,7 @@
public static final int PHONE_RESEND_MUTE = 12;
public static final int PHONE_ON_DIAL_CHARS = 13;
public static final int PHONE_SUPP_SERVICE_FAILED = 14;
+ public static final int PHONE_TTY_MODE_RECEIVED = 15;
// Events generated internally.
// We should store all the possible event type values in one place to make sure that
// they don't step on each others' toes.
@@ -99,6 +100,7 @@
//callManager.registerForRingbackTone(this, PHONE_RINGBACK_TONE, null);
//callManager.registerForResendIncallMute(this, PHONE_RESEND_MUTE, null);
//callManager.registerForPostDialCharacter(this, PHONE_ON_DIAL_CHARS, null);
+ callManager.registerForTtyModeReceived(this, PHONE_TTY_MODE_RECEIVED, null);
}
public void addListener(Handler handler) {
@@ -144,6 +146,7 @@
callManager.unregisterForInCallVoicePrivacyOff(this);
//callManager.unregisterForPostDialCharacter(this);
callManager.unregisterForSuppServiceFailed(this);
+ callManager.unregisterForTtyModeReceived(this);
registerForNotifications();
}
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 3a0ed23..f44599d 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1195,7 +1195,8 @@
if (checkIfCallerIsSelfOrForegroundUser()) {
if (DBG_LOC) log("getCellLocation: is active user");
Bundle data = new Bundle();
- mPhone.getCellLocation().fillInNotifierBundle(data);
+ Phone phone = getPhone(mSubscriptionController.getDefaultDataSubId());
+ phone.getCellLocation().fillInNotifierBundle(data);
return data;
} else {
if (DBG_LOC) log("getCellLocation: suppress non-active user");
@@ -1278,7 +1279,11 @@
if (checkIfCallerIsSelfOrForegroundUser()) {
if (DBG_LOC) log("getAllCellInfo: is active user");
- return mPhone.getAllCellInfo();
+ List<CellInfo> cellInfos = new ArrayList<CellInfo>();
+ for (Phone phone : PhoneFactory.getPhones()) {
+ cellInfos.addAll(phone.getAllCellInfo());
+ }
+ return cellInfos;
} else {
if (DBG_LOC) log("getAllCellInfo: suppress non-active user");
return null;
diff --git a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
index 83fa5da..56cd0cb 100644
--- a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
+++ b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
@@ -85,15 +85,20 @@
(TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
mAccountList = (PreferenceCategory) getPreferenceScreen().findPreference(
ACCOUNTS_LIST_CATEGORY_KEY);
- if (telephonyManager.getPhoneCount() > 1) {
+ TtyModeListPreference ttyModeListPreference =
+ (TtyModeListPreference) getPreferenceScreen().findPreference(
+ getResources().getString(R.string.tty_mode_key));
+ if (telephonyManager.isMultiSimEnabled()) {
initAccountList();
+ ttyModeListPreference.init();
} else {
getPreferenceScreen().removePreference(mAccountList);
+ getPreferenceScreen().removePreference(ttyModeListPreference);
}
mDefaultOutgoingAccount = (AccountSelectionPreference)
getPreferenceScreen().findPreference(DEFAULT_OUTGOING_ACCOUNT_KEY);
- if (mTelecomManager.getCallCapablePhoneAccounts().size() > 1) {
+ if (mTelecomManager.hasMultipleCallCapableAccounts()) {
mDefaultOutgoingAccount.setListener(this);
updateDefaultOutgoingAccountsModel();
} else {
diff --git a/src/com/android/phone/settings/TtyModeListPreference.java b/src/com/android/phone/settings/TtyModeListPreference.java
new file mode 100644
index 0000000..e8ef099
--- /dev/null
+++ b/src/com/android/phone/settings/TtyModeListPreference.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.settings;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.UserHandle;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.provider.Settings;
+import android.telecom.TelecomManager;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import com.android.phone.PhoneGlobals;
+import com.android.phone.R;
+
+public class TtyModeListPreference extends ListPreference
+ implements Preference.OnPreferenceChangeListener {
+ private static final String LOG_TAG = TtyModeListPreference.class.getSimpleName();
+ private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
+
+ public TtyModeListPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public void init() {
+ setOnPreferenceChangeListener(this);
+
+ int settingsTtyMode = Settings.Secure.getInt(getContext().getContentResolver(),
+ Settings.Secure.PREFERRED_TTY_MODE,
+ TelecomManager.TTY_MODE_OFF);
+ setValue(Integer.toString(settingsTtyMode));
+ updatePreferredTtyModeSummary(settingsTtyMode);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object objValue) {
+ if (preference == this) {
+ int buttonTtyMode;
+ buttonTtyMode = Integer.valueOf((String) objValue).intValue();
+ int settingsTtyMode = android.provider.Settings.Secure.getInt(
+ getContext().getContentResolver(),
+ Settings.Secure.PREFERRED_TTY_MODE,
+ TelecomManager.TTY_MODE_OFF);
+ if (DBG) log("handleTTYChange: requesting set TTY mode enable (TTY) to" +
+ Integer.toString(buttonTtyMode));
+
+ if (buttonTtyMode != settingsTtyMode) {
+ switch(buttonTtyMode) {
+ case TelecomManager.TTY_MODE_OFF:
+ case TelecomManager.TTY_MODE_FULL:
+ case TelecomManager.TTY_MODE_HCO:
+ case TelecomManager.TTY_MODE_VCO:
+ Settings.Secure.putInt(
+ getContext().getContentResolver(),
+ Settings.Secure.PREFERRED_TTY_MODE,
+ buttonTtyMode);
+ break;
+ default:
+ buttonTtyMode = TelecomManager.TTY_MODE_OFF;
+ }
+
+ setValue(Integer.toString(buttonTtyMode));
+ updatePreferredTtyModeSummary(buttonTtyMode);
+ Intent ttyModeChanged =
+ new Intent(TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
+ ttyModeChanged.putExtra(TelecomManager.EXTRA_TTY_PREFERRED_MODE, buttonTtyMode);
+ getContext().sendBroadcastAsUser(ttyModeChanged, UserHandle.ALL);
+ }
+ }
+ return true;
+ }
+
+ private void updatePreferredTtyModeSummary(int TtyMode) {
+ String [] txts = getContext().getResources().getStringArray(R.array.tty_mode_entries);
+ switch(TtyMode) {
+ case TelecomManager.TTY_MODE_OFF:
+ case TelecomManager.TTY_MODE_HCO:
+ case TelecomManager.TTY_MODE_VCO:
+ case TelecomManager.TTY_MODE_FULL:
+ setSummary(txts[TtyMode]);
+ break;
+ default:
+ setEnabled(false);
+ setSummary(txts[TelecomManager.TTY_MODE_OFF]);
+ break;
+ }
+ }
+
+ private static void log(String msg) {
+ Log.d(LOG_TAG, msg);
+ }
+}
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 46bad01..946ee3e 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -145,7 +145,12 @@
android.telephony.DisconnectCause.OUT_OF_SERVICE, "Phone is null"));
}
+ // Check both voice & data RAT to enable normal CS call,
+ // when voice RAT is OOS but Data RAT is present.
int state = phone.getServiceState().getState();
+ if (state == ServiceState.STATE_OUT_OF_SERVICE) {
+ state = phone.getServiceState().getDataRegState();
+ }
boolean useEmergencyCallHelper = false;
if (isEmergencyNumber) {