Import translations. DO NOT MERGE
am: ed22521f97 -s ours
Change-Id: I8b73a2e7d8b158b87210d69f7752b3525ad9c9c4
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b5fd399..f611706 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -585,6 +585,7 @@
<activity android:name="com.android.phone.settings.VoicemailSettingsActivity"
android:label="@string/voicemail"
+ android:configChanges="orientation|screenSize|keyboardHidden"
android:theme="@style/DialerSettingsLight">
<intent-filter >
<!-- DO NOT RENAME. There are existing apps which use this string. -->
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 028c16a..89a1f29 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -559,7 +559,7 @@
<string name="description_dial_button" msgid="7459705245418435351">"markatu"</string>
<string name="voicemail_notification_vibrate_when_title" msgid="8361970092063604886">"Egin dar-dar"</string>
<string name="voicemail_notification_vibarte_when_dialog_title" msgid="5739583146522136440">"Egin dar-dar"</string>
- <string name="voicemail_visual_voicemail_switch_title" msgid="5012622186976275457">"Ikusizko erantzungailua"</string>
+ <string name="voicemail_visual_voicemail_switch_title" msgid="5012622186976275457">"Erantzungailu bisuala"</string>
<string name="voicemail_set_pin_dialog_title" msgid="2797924461029093837">"Ezarri PIN kodea"</string>
<string name="voicemail_change_pin_dialog_title" msgid="6035421908626121564">"Aldatu PIN kodea"</string>
<string name="voicemail_notification_ringtone_title" msgid="2609519527849101590">"Soinua"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 93784d1..402c37d 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -95,7 +95,7 @@
<string name="sum_cw_disabled" msgid="3648693907300104575">"Meddela mig om inkommande samtal under pågående samtal"</string>
<string name="call_forwarding_settings" msgid="3378927671091537173">"Inställningar vidarebefordning"</string>
<string name="call_forwarding_settings_with_label" msgid="8569489414006897127">"Inställningar för vidarebefordran av samtal (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
- <string name="labelCF" msgid="2574386948026924737">"Vidarekoppla samtal"</string>
+ <string name="labelCF" msgid="2574386948026924737">"Vidarebefordra samtal"</string>
<string name="labelCFU" msgid="8147177368148660600">"Vidarebefordra alltid"</string>
<string name="messageCFU" msgid="3560082430662923687">"Använd alltid detta nummer"</string>
<string name="sum_cfu_enabled_indicator" msgid="4014187342724130197">"Vidarebefordra alla samtal"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index 2ec3388..7d5af52 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -210,6 +210,9 @@
<!-- Flag to enable VVM3 visual voicemail. VVM3 is used by Verizon Wireless. -->
<bool name="vvm3_enabled">false</bool>
+ <!-- Component for custom voicemail notification handling. [DO NOT TRANSLATE] -->
+ <string name="config_customVoicemailComponent">@null</string>
+
<!-- Flag indicating whether to allow pstn phone accounts [DO NOT TRANSLATE] -->
<bool name="config_pstn_phone_accounts_enabled">true</bool>
diff --git a/sip/res/values-es/strings.xml b/sip/res/values-es/strings.xml
index 60da3b7..46e2021 100644
--- a/sip/res/values-es/strings.xml
+++ b/sip/res/values-es/strings.xml
@@ -48,8 +48,8 @@
<string name="registration_status_invalid_credentials" msgid="8406872554323334182">"Registro de cuenta incorrecto: nombre de usuario o contraseña incorrectos."</string>
<string name="registration_status_server_unreachable" msgid="7710275557045148634">"Error al registrar la cuenta: comprueba el nombre del servidor."</string>
<string name="third_party_account_summary" msgid="9041060473615403041">"La aplicación <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> está utilizando esta cuenta en este momento."</string>
- <string name="sip_edit_title" msgid="1967247832635750410">"Cuenta SIP"</string>
- <string name="sip_edit_new_title" msgid="266414118302574305">"Cuenta SIP"</string>
+ <string name="sip_edit_title" msgid="1967247832635750410">"Detalles de cuenta SIP"</string>
+ <string name="sip_edit_new_title" msgid="266414118302574305">"Detalles de cuenta SIP"</string>
<string name="domain_address_title" msgid="1968479941328225423">"Servidor"</string>
<string name="username_title" msgid="6770064611005663470">"Nombre de usuario"</string>
<string name="password_title" msgid="5289013731515564295">"Contraseña"</string>
@@ -63,12 +63,12 @@
<string name="auth_username_summary" msgid="941160241371436473">"Nombre de usuario utilizado para la autenticación"</string>
<string name="default_preference_summary_username" msgid="8404717434312826082">"<No configurado>"</string>
<string name="default_preference_summary_password" msgid="4464464672997027904">"<No configurada>"</string>
- <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"<No configurado>"</string>
+ <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"<No configurada>"</string>
<string name="display_name_summary" msgid="7155076491675565407">"<Igual que el nombre de usuario>"</string>
<string name="optional_summary" msgid="2363105560396317624">"<Opcional>"</string>
<string name="advanced_settings_show" msgid="7838761602853998622">"▷ Tocar para mostrar todo"</string>
<string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Toca para ocultar todo"</string>
- <string name="all_empty_alert" msgid="4087734950375192387">"Introduce la información de la nueva cuenta de SIP."</string>
+ <string name="all_empty_alert" msgid="4087734950375192387">"Introduce la información de la cuenta de SIP nueva."</string>
<string name="empty_alert" msgid="6659484914371384024">"El campo <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> es obligatorio y no se puede dejar en blanco."</string>
<string name="not_a_valid_port" msgid="7931422555587011830">"El número de puerto debe estar comprendido entre 1.000 y 65.534."</string>
<string name="no_internet_available" msgid="5523747991760017298">"Antes de realizar una llamada SIP, comprueba tu conexión a Internet."</string>
diff --git a/sip/res/values-et-rEE/strings.xml b/sip/res/values-et-rEE/strings.xml
index 02379ba..46891c5 100644
--- a/sip/res/values-et-rEE/strings.xml
+++ b/sip/res/values-et-rEE/strings.xml
@@ -19,7 +19,7 @@
<string name="sip_settings" msgid="3768482698061677257">"SIP-i seaded"</string>
<string name="sip_accounts" msgid="85559497282185405">"SIP-kontod"</string>
<string name="sip_accounts_title" msgid="2082527045326874519">"Kontod"</string>
- <string name="sip_receive_calls" msgid="426678617137462173">"Sissetulevate kõnede vastuvõtmine"</string>
+ <string name="sip_receive_calls" msgid="426678617137462173">"Võta vastu sissetulevad kõned"</string>
<string name="sip_receive_calls_summary" msgid="946161517528227523">"Kasutab rohkem akut"</string>
<string name="sip_call_options_title" msgid="8421210494703869806">"SIP-helistamise kasutus"</string>
<string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"SIP-kõnede tegemine (ainult WiFi)"</string>
diff --git a/sip/res/values-fa/strings.xml b/sip/res/values-fa/strings.xml
index 2731021..d0552d9 100644
--- a/sip/res/values-fa/strings.xml
+++ b/sip/res/values-fa/strings.xml
@@ -76,5 +76,5 @@
<string name="no_voip" msgid="3038021971231952704">"تماس SIP پشتیبانی نمیشود"</string>
<string name="sip_system_decide" msgid="5577696249416700671">"خودکار"</string>
<string name="sip_always_send_keepalive" msgid="4773022409239823318">"همیشه ارسال شود"</string>
- <string name="sip_connection_service_label" msgid="6935325004265884453">"تماس SIP داخلی"</string>
+ <string name="sip_connection_service_label" msgid="6935325004265884453">"تماس SIP درونی"</string>
</resources>
diff --git a/sip/res/values-gl-rES/strings.xml b/sip/res/values-gl-rES/strings.xml
index ec8b666..74b9e4f 100644
--- a/sip/res/values-gl-rES/strings.xml
+++ b/sip/res/values-gl-rES/strings.xml
@@ -20,7 +20,7 @@
<string name="sip_accounts" msgid="85559497282185405">"Contas SIP"</string>
<string name="sip_accounts_title" msgid="2082527045326874519">"Contas"</string>
<string name="sip_receive_calls" msgid="426678617137462173">"Recibir chamadas entrantes"</string>
- <string name="sip_receive_calls_summary" msgid="946161517528227523">"Consome máis batería"</string>
+ <string name="sip_receive_calls_summary" msgid="946161517528227523">"Consume máis batería"</string>
<string name="sip_call_options_title" msgid="8421210494703869806">"Utilizar chamadas SIP"</string>
<string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"Utilizar chamadas SIP (só coa wifi)"</string>
<string name="sip_call_options_entry_1" msgid="7217659161237099900">"Para todas as chamadas cando a rede de datos está dispoñible"</string>
diff --git a/sip/res/values-iw/strings.xml b/sip/res/values-iw/strings.xml
index edd8d64..f358c2d 100644
--- a/sip/res/values-iw/strings.xml
+++ b/sip/res/values-iw/strings.xml
@@ -63,10 +63,10 @@
<string name="auth_username_summary" msgid="941160241371436473">"שם משתמש המשמש לאימות"</string>
<string name="default_preference_summary_username" msgid="8404717434312826082">"<לא מוגדר>"</string>
<string name="default_preference_summary_password" msgid="4464464672997027904">"<לא מוגדרת>"</string>
- <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"<לא הוגדר>"</string>
+ <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"<לא מוגדרת>"</string>
<string name="display_name_summary" msgid="7155076491675565407">"<זהה לשם משתמש>"</string>
<string name="optional_summary" msgid="2363105560396317624">"<אופציונלי>"</string>
- <string name="advanced_settings_show" msgid="7838761602853998622">"איפה כל ההגדרות?"</string>
+ <string name="advanced_settings_show" msgid="7838761602853998622">"גע כדי להציג את הכל"</string>
<string name="advanced_settings_hide" msgid="3480554978705290228">"▽ גע כדי להסתיר את הכל"</string>
<string name="all_empty_alert" msgid="4087734950375192387">"הזן את פרטי חשבון ה-SIP החדש."</string>
<string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> הוא שדה חובה ולא ניתן להשאיר אותו ריק."</string>
diff --git a/sip/res/values-ja/strings.xml b/sip/res/values-ja/strings.xml
index fdd791b..3e48194 100644
--- a/sip/res/values-ja/strings.xml
+++ b/sip/res/values-ja/strings.xml
@@ -66,7 +66,7 @@
<string name="default_preference_summary_domain_address" msgid="4871971710197441673">"<未設定>"</string>
<string name="display_name_summary" msgid="7155076491675565407">"<ユーザー名と同じ>"</string>
<string name="optional_summary" msgid="2363105560396317624">"<オプション>"</string>
- <string name="advanced_settings_show" msgid="7838761602853998622">"▷タップしてすべて表示"</string>
+ <string name="advanced_settings_show" msgid="7838761602853998622">"▷すべて表示"</string>
<string name="advanced_settings_hide" msgid="3480554978705290228">"▽すべて非表示"</string>
<string name="all_empty_alert" msgid="4087734950375192387">"新しいSIPアカウントの詳細情報を入力してください。"</string>
<string name="empty_alert" msgid="6659484914371384024">"「<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>」は必須です。空欄にはできません。"</string>
diff --git a/sip/res/values-kn-rIN/strings.xml b/sip/res/values-kn-rIN/strings.xml
index e6896ec..c2b9583 100644
--- a/sip/res/values-kn-rIN/strings.xml
+++ b/sip/res/values-kn-rIN/strings.xml
@@ -16,19 +16,19 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sip_settings" msgid="3768482698061677257">"ಎಸ್ಐಪಿ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
- <string name="sip_accounts" msgid="85559497282185405">"ಎಸ್ಐಪಿ ಖಾತೆಗಳು"</string>
+ <string name="sip_settings" msgid="3768482698061677257">"SIP ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
+ <string name="sip_accounts" msgid="85559497282185405">"SIP ಖಾತೆಗಳು"</string>
<string name="sip_accounts_title" msgid="2082527045326874519">"ಖಾತೆಗಳು"</string>
<string name="sip_receive_calls" msgid="426678617137462173">"ಒಳಬರುವ ಕರೆಗಳನ್ನು ಸ್ವೀಕರಿಸು"</string>
<string name="sip_receive_calls_summary" msgid="946161517528227523">"ಹೆಚ್ಚು ಬ್ಯಾಟರಿಯನ್ನು ಬಳಸುತ್ತದೆ"</string>
- <string name="sip_call_options_title" msgid="8421210494703869806">"ಎಸ್ಐಪಿ ಕರೆ ಮಾಡುವಿಕೆಯನ್ನು ಬಳಸಿ"</string>
- <string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"ಎಸ್ಐಪಿ ಕರೆ ಮಾಡುವಿಕೆಯನ್ನು ಬಳಸಿ (ವೈ-ಫೈ ಮಾತ್ರ)"</string>
+ <string name="sip_call_options_title" msgid="8421210494703869806">"SIP ಕರೆ ಮಾಡುವಿಕೆಯನ್ನು ಬಳಸಿ"</string>
+ <string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"SIP ಕರೆ ಮಾಡುವಿಕೆಯನ್ನು ಬಳಸಿ (ವೈ-ಫೈ ಮಾತ್ರ)"</string>
<string name="sip_call_options_entry_1" msgid="7217659161237099900">"ಡೇಟಾ ನೆಟ್ವರ್ಕ್ ಲಭ್ಯವಿರುವಾಗ ಎಲ್ಲ ಕರೆಗಳಿಗಾಗಿ"</string>
- <string name="sip_call_options_entry_2" msgid="1815335903940609729">"ಕೇವಲ ಎಸ್ಐಪಿ ಕರೆಗಳಿಗೆ ಮಾತ್ರ"</string>
+ <string name="sip_call_options_entry_2" msgid="1815335903940609729">"ಕೇವಲ SIP ಕರೆಗಳಿಗೆ ಮಾತ್ರ"</string>
<string name="sip_call_options_wifi_only_entry_1" msgid="1358513095551847314">"ಎಲ್ಲ ಕರೆಗಳಿಗಾಗಿ"</string>
<string name="add_sip_account" msgid="800843669753980091">"ಖಾತೆ ಸೇರಿಸಿ"</string>
<string name="remove_sip_account" msgid="1367664438506503690">"ಖಾತೆಯನ್ನು ತೆಗೆದುಹಾಕು"</string>
- <string name="sip_account_list" msgid="5610858485304821480">"ಎಸ್ಐಪಿ ಖಾತೆಗಳು"</string>
+ <string name="sip_account_list" msgid="5610858485304821480">"SIP ಖಾತೆಗಳು"</string>
<string name="saving_account" msgid="5336529880235177448">"ಖಾತೆಯನ್ನು ಉಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
<string name="removing_account" msgid="5537351356808985756">"ಖಾತೆಯನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತಿದೆ…"</string>
<string name="sip_menu_save" msgid="7882219814563869225">"ಉಳಿಸು"</string>
@@ -48,8 +48,8 @@
<string name="registration_status_invalid_credentials" msgid="8406872554323334182">"ಖಾತೆ ನೋಂದಣಿಯು ಯಶಸ್ವಿಯಾಗಲಿಲ್ಲ: ಬಳಕೆದಾರರ ಹೆಸರು ಅಥವಾ ಪಾಸ್ವರ್ಡ್ ತಪ್ಪಾಗಿದೆ."</string>
<string name="registration_status_server_unreachable" msgid="7710275557045148634">"ಖಾತೆ ನೋಂದಣಿಯು ಯಶಸ್ವಿಯಾಗಲಿಲ್ಲ: ಸರ್ವರ್ ಹೆಸರನ್ನು ಪರಿಶೀಲಿಸಿ."</string>
<string name="third_party_account_summary" msgid="9041060473615403041">"ಈ ಖಾತೆಯನ್ನು ಪ್ರಸ್ತುತ <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ ಬಳಸುತ್ತಿದೆ."</string>
- <string name="sip_edit_title" msgid="1967247832635750410">"ಎಸ್ಐಪಿ ಖಾತೆ ವಿವರಗಳು"</string>
- <string name="sip_edit_new_title" msgid="266414118302574305">"ಎಸ್ಐಪಿ ಖಾತೆ ವಿವರಗಳು"</string>
+ <string name="sip_edit_title" msgid="1967247832635750410">"SIP ಖಾತೆ ವಿವರಗಳು"</string>
+ <string name="sip_edit_new_title" msgid="266414118302574305">"SIP ಖಾತೆ ವಿವರಗಳು"</string>
<string name="domain_address_title" msgid="1968479941328225423">"ಸರ್ವರ್"</string>
<string name="username_title" msgid="6770064611005663470">"ಬಳಕೆದಾರಹೆಸರು"</string>
<string name="password_title" msgid="5289013731515564295">"ಪಾಸ್ವರ್ಡ್"</string>
@@ -68,13 +68,13 @@
<string name="optional_summary" msgid="2363105560396317624">"<ಐಚ್ಛಿಕ>"</string>
<string name="advanced_settings_show" msgid="7838761602853998622">"▷ ಎಲ್ಲವನ್ನೂ ತೋರಿಸಲು ಸ್ಪರ್ಶಿಸಿ"</string>
<string name="advanced_settings_hide" msgid="3480554978705290228">"▽ ಎಲ್ಲವನ್ನೂ ಮರೆಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ"</string>
- <string name="all_empty_alert" msgid="4087734950375192387">"ಹೊಸ ಎಸ್ಐಪಿ ಖಾತೆಯ ವಿವರಗಳನ್ನು ನಮೂದಿಸಿ."</string>
+ <string name="all_empty_alert" msgid="4087734950375192387">"ಹೊಸ SIP ಖಾತೆಯ ವಿವರಗಳನ್ನು ನಮೂದಿಸಿ."</string>
<string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ಅಗತ್ಯವಿದೆ ಮತ್ತು ಖಾಲಿ ಬಿಡುವಂತಿಲ್ಲ."</string>
<string name="not_a_valid_port" msgid="7931422555587011830">"ಪೋರ್ಟ್ ಸಂಖ್ಯೆಯು 1000 ಮತ್ತು 65534 ರ ವ್ಯಾಪ್ತಿಯೊಳಗಿರಬೇಕು."</string>
- <string name="no_internet_available" msgid="5523747991760017298">"ಎಸ್ಐಪಿ ಕರೆ ಮಾಡಲು, ಮೊದಲು ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ."</string>
- <string name="no_wifi_available" msgid="1955023904229673488">"ಎಸ್ಐಪಿ ಕರೆಗಳಿಗಾಗಿ ನೀವು ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವ ಅಗತ್ಯವಿದೆ (ವೈರ್ಲೆಸ್ & ನೆಟ್ವರ್ಕ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬಳಸಿ)."</string>
- <string name="no_voip" msgid="3038021971231952704">"ಎಸ್ಐಪಿ ಕರೆ ಮಾಡುವಿಕೆ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"</string>
+ <string name="no_internet_available" msgid="5523747991760017298">"SIP ಕರೆ ಮಾಡಲು, ಮೊದಲು ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ."</string>
+ <string name="no_wifi_available" msgid="1955023904229673488">"SIP ಕರೆಗಳಿಗಾಗಿ ನೀವು ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವ ಅಗತ್ಯವಿದೆ (ವೈರ್ಲೆಸ್ & ನೆಟ್ವರ್ಕ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬಳಸಿ)."</string>
+ <string name="no_voip" msgid="3038021971231952704">"SIP ಕರೆ ಮಾಡುವಿಕೆ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"</string>
<string name="sip_system_decide" msgid="5577696249416700671">"ಸ್ವಯಂಚಾಲಿತ"</string>
<string name="sip_always_send_keepalive" msgid="4773022409239823318">"ಯಾವಾಗಲೂ ಕಳುಹಿಸು"</string>
- <string name="sip_connection_service_label" msgid="6935325004265884453">"ಅಂತರ್ನಿರ್ಮಿತ ಎಸ್ಐಪಿ ಕರೆ ಮಾಡುವಿಕೆ"</string>
+ <string name="sip_connection_service_label" msgid="6935325004265884453">"ಅಂತರ್ನಿರ್ಮಿತ SIP ಕರೆ ಮಾಡುವಿಕೆ"</string>
</resources>
diff --git a/sip/res/values-my-rMM/strings.xml b/sip/res/values-my-rMM/strings.xml
index eb32dda..6703596 100644
--- a/sip/res/values-my-rMM/strings.xml
+++ b/sip/res/values-my-rMM/strings.xml
@@ -31,7 +31,7 @@
<string name="sip_account_list" msgid="5610858485304821480">"SIP အကောင့်များ"</string>
<string name="saving_account" msgid="5336529880235177448">"အကောင့်ကို သိမ်းဆည်းနေ…"</string>
<string name="removing_account" msgid="5537351356808985756">"အကောင့်ကို ဖယ်ရှားနေ…"</string>
- <string name="sip_menu_save" msgid="7882219814563869225">"သိမ်းရန်"</string>
+ <string name="sip_menu_save" msgid="7882219814563869225">"သိမ်းပါ"</string>
<string name="sip_menu_discard" msgid="2350421645423888438">"ဖယ်ပစ်ရန်"</string>
<string name="alert_dialog_close" msgid="1326011828713435134">"ပရိုဖိုင်ကို ပိတ်ရန်"</string>
<string name="alert_dialog_ok" msgid="4752048404605388940">"အိုကေ"</string>
diff --git a/sip/res/values-nb/strings.xml b/sip/res/values-nb/strings.xml
index 0ce35ed..160fbb1 100644
--- a/sip/res/values-nb/strings.xml
+++ b/sip/res/values-nb/strings.xml
@@ -20,7 +20,7 @@
<string name="sip_accounts" msgid="85559497282185405">"SIP-kontoer"</string>
<string name="sip_accounts_title" msgid="2082527045326874519">"Kontoer"</string>
<string name="sip_receive_calls" msgid="426678617137462173">"Motta innkommende anrop"</string>
- <string name="sip_receive_calls_summary" msgid="946161517528227523">"Bruker mer batteri"</string>
+ <string name="sip_receive_calls_summary" msgid="946161517528227523">"Bruker mer batterilevetid"</string>
<string name="sip_call_options_title" msgid="8421210494703869806">"Bruk SIP-anrop"</string>
<string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"Bruk SIP-anrop (kun for Wi-Fi)"</string>
<string name="sip_call_options_entry_1" msgid="7217659161237099900">"For alle anrop hvor datanettverk er tilgjengelige"</string>
diff --git a/sip/res/values-ne-rNP/strings.xml b/sip/res/values-ne-rNP/strings.xml
index 2f9010b..727ba5a 100644
--- a/sip/res/values-ne-rNP/strings.xml
+++ b/sip/res/values-ne-rNP/strings.xml
@@ -72,7 +72,7 @@
<string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> चाहिन्छ र खाली छोड्न सकिँदैन।"</string>
<string name="not_a_valid_port" msgid="7931422555587011830">"पोर्ट संख्या १००० र ६५५३४ को बीचमा हुनुपर्छ।"</string>
<string name="no_internet_available" msgid="5523747991760017298">"एक SIP कल गर्नका लागि पहिले तपाईंको इन्टरनेट जडान जाँच गर्नुहोस्।"</string>
- <string name="no_wifi_available" msgid="1955023904229673488">"SIP कलका लागि तपाईं एउटा Wi-Fi सञ्जालमा जडित हुन पर्छ (ताररहित & सञ्जाल सेटिङ प्रयोग गर्नुहोस्)."</string>
+ <string name="no_wifi_available" msgid="1955023904229673488">"SIP कलका लागि तपाईँ एउटा Wi-Fi सञ्जालमा जडित हुन पर्छ (ताररहित & सञ्जाल सेटिङ प्रयोग गर्नुहोस्)."</string>
<string name="no_voip" msgid="3038021971231952704">"SIP कल गर्न समर्थित छैन"</string>
<string name="sip_system_decide" msgid="5577696249416700671">"स्वचालित"</string>
<string name="sip_always_send_keepalive" msgid="4773022409239823318">"सधैँ पठाउनुहोस्"</string>
diff --git a/sip/res/values-sk/strings.xml b/sip/res/values-sk/strings.xml
index 872edcb..96cf144 100644
--- a/sip/res/values-sk/strings.xml
+++ b/sip/res/values-sk/strings.xml
@@ -66,7 +66,7 @@
<string name="default_preference_summary_domain_address" msgid="4871971710197441673">"<Nenastavené>"</string>
<string name="display_name_summary" msgid="7155076491675565407">"<Rovnaké ako používateľské meno>"</string>
<string name="optional_summary" msgid="2363105560396317624">"<Voliteľné>"</string>
- <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Klepnutím zobrazíte všetky"</string>
+ <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Klepnutím všetko zobrazíte"</string>
<string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Klepnutím všetko skryjete"</string>
<string name="all_empty_alert" msgid="4087734950375192387">"Zadajte informácie o novom účte SIP."</string>
<string name="empty_alert" msgid="6659484914371384024">"Pole <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> je povinné a nemôže zostať prázdne."</string>
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 111e263..a6d54ef 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -284,7 +284,9 @@
if (ImsManager.isVtEnabledByPlatform(mPhone.getContext()) &&
ImsManager.isVtProvisionedOnDevice(mPhone.getContext()) &&
- mPhone.mDcTracker.isDataEnabled(true)) {
+ (carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
+ || mPhone.mDcTracker.isDataEnabled(true))) {
boolean currentValue =
ImsManager.isEnhanced4gLteModeSettingEnabledByUser(mPhone.getContext())
? PhoneGlobals.getInstance().phoneMgr.isVideoCallingEnabled(
@@ -328,7 +330,8 @@
} else {
int resId = com.android.internal.R.string.wifi_calling_off_summary;
if (ImsManager.isWfcEnabledByUser(mPhone.getContext())) {
- int wfcMode = ImsManager.getWfcMode(mPhone.getContext());
+ boolean isRoaming = telephonyManager.isNetworkRoaming();
+ int wfcMode = ImsManager.getWfcMode(mPhone.getContext(), isRoaming);
switch (wfcMode) {
case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
diff --git a/src/com/android/phone/ImsUtil.java b/src/com/android/phone/ImsUtil.java
index 4c9089f..8ee7773 100644
--- a/src/com/android/phone/ImsUtil.java
+++ b/src/com/android/phone/ImsUtil.java
@@ -60,6 +60,21 @@
}
/**
+ * @return {@code true} if WFC is provisioned on the device.
+ */
+ public static boolean isWfcProvisioned(Context context) {
+ CarrierConfigManager cfgManager = (CarrierConfigManager) context
+ .getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ if (cfgManager != null
+ && cfgManager.getConfig().getBoolean(
+ CarrierConfigManager.KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL)
+ && !ImsManager.isVolteProvisionedOnDevice(context)) {
+ return false;
+ }
+ return ImsManager.isWfcProvisionedOnDevice(context);
+ }
+
+ /**
* @return {@code true} if the device is configured to use "Wi-Fi only" mode. If WFC is not
* enabled, this will return {@code false}.
*/
@@ -73,8 +88,8 @@
/**
* When a call cannot be placed, determines if the use of WFC should be promoted, per the
* carrier config. Use of WFC is promoted to the user if the device is connected to a WIFI
- * network, WFC is disabled, and the carrier config indicates that the features should be
- * promoted.
+ * network, WFC is disabled but provisioned, and the carrier config indicates that the
+ * features should be promoted.
*
* @return {@code true} if use of WFC should be promoted, {@code false} otherwise.
*/
@@ -86,6 +101,10 @@
return false;
}
+ if (!isWfcProvisioned(context)) {
+ return false;
+ }
+
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
diff --git a/src/com/android/phone/NetworkSetting.java b/src/com/android/phone/NetworkSetting.java
index a09c5c5..29608da 100644
--- a/src/com/android/phone/NetworkSetting.java
+++ b/src/com/android/phone/NetworkSetting.java
@@ -161,8 +161,6 @@
public void onServiceConnected(ComponentName className, IBinder service) {
if (DBG) log("connection created, binding local service.");
mNetworkQueryService = ((NetworkQueryService.LocalBinder) service).getService();
- // as soon as it is bound, run a query.
- loadNetworksList();
}
/** Handle the task of cleaning up the local binding */
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index abe5397..d40b08e 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -16,8 +16,6 @@
package com.android.phone;
-import static android.Manifest.permission.READ_PHONE_STATE;
-
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
@@ -26,7 +24,6 @@
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.net.Uri;
@@ -36,7 +33,6 @@
import android.os.UserManager;
import android.preference.PreferenceManager;
import android.provider.ContactsContract.PhoneLookup;
-import android.telecom.DefaultDialerManager;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
@@ -97,6 +93,7 @@
private Context mContext;
private NotificationManager mNotificationManager;
+ private final ComponentName mNotificationComponent;
private StatusBarManager mStatusBarManager;
private UserManager mUserManager;
private Toast mToast;
@@ -127,6 +124,12 @@
mTelecomManager = TelecomManager.from(mContext);
mTelephonyManager = (TelephonyManager) app.getSystemService(Context.TELEPHONY_SERVICE);
+ final String notificationComponent = mContext.getString(
+ R.string.config_customVoicemailComponent);
+
+ mNotificationComponent = notificationComponent != null
+ ? ComponentName.unflattenFromString(notificationComponent) : null;
+
mSubscriptionManager.addOnSubscriptionsChangedListener(
new OnSubscriptionsChangedListener() {
@Override
@@ -380,8 +383,8 @@
if (!mUserManager.hasUserRestriction(
UserManager.DISALLOW_OUTGOING_CALLS, userHandle)
&& !user.isManagedProfile()) {
- if (!maybeSendVoicemailNotificationUsingDefaultDialer(vmCount, vmNumber,
- pendingIntent, isSettingsIntent, userHandle)) {
+ if (!sendNotificationCustomComponent(vmCount, vmNumber, pendingIntent,
+ isSettingsIntent)) {
mNotificationManager.notifyAsUser(
Integer.toString(subId) /* tag */,
VOICEMAIL_NOTIFICATION,
@@ -391,29 +394,19 @@
}
}
} else {
- List<UserInfo> users = mUserManager.getUsers(true /* excludeDying */);
- for (int i = 0; i < users.size(); i++) {
- final UserInfo user = users.get(i);
- final UserHandle userHandle = user.getUserHandle();
- if (!mUserManager.hasUserRestriction(
- UserManager.DISALLOW_OUTGOING_CALLS, userHandle)
- && !user.isManagedProfile()) {
- if (!maybeSendVoicemailNotificationUsingDefaultDialer(0, null, null, false,
- userHandle)) {
- mNotificationManager.cancelAsUser(
- Integer.toString(subId) /* tag */,
- VOICEMAIL_NOTIFICATION,
- userHandle);
- }
- }
+ if (!sendNotificationCustomComponent(0, null, null, false)) {
+ mNotificationManager.cancelAsUser(
+ Integer.toString(subId) /* tag */,
+ VOICEMAIL_NOTIFICATION,
+ UserHandle.ALL);
}
}
}
/**
- * Sends a broadcast with the voicemail notification information to the default dialer. This
- * method is also used to indicate to the default dialer when to clear the
- * notification. A pending intent can be passed to the default dialer to indicate an action to
+ * Sends a broadcast with the voicemail notification information to a custom component to
+ * handle. This method is also used to indicate to the custom component when to clear the
+ * notification. A pending intent can be passed to the custom component to indicate an action to
* be taken as it would by a notification produced in this class.
* @param count The number of pending voicemail messages to indicate on the notification. A
* Value of 0 is passed here to indicate that the notification should be cleared.
@@ -421,16 +414,14 @@
* @param pendingIntent The intent that should be passed as the action to be taken.
* @param isSettingsIntent {@code true} to indicate the pending intent is to launch settings.
* otherwise, {@code false} to indicate the intent launches voicemail.
- * @param userHandle The user to receive the notification. Each user can have their own default
- * dialer.
- * @return {@code true} if the default was notified of the notification.
+ * @return {@code true} if a custom component was notified of the notification.
*/
- private boolean maybeSendVoicemailNotificationUsingDefaultDialer(Integer count, String number,
- PendingIntent pendingIntent, boolean isSettingsIntent, UserHandle userHandle) {
-
- if (shouldManageNotificationThroughDefaultDialer(userHandle)) {
- Intent intent = getShowVoicemailIntentForDefaultDialer(userHandle);
+ private boolean sendNotificationCustomComponent(Integer count, String number,
+ PendingIntent pendingIntent, boolean isSettingsIntent) {
+ if (mNotificationComponent != null) {
+ Intent intent = new Intent();
intent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ intent.setComponent(mNotificationComponent);
intent.setAction(TelephonyManager.ACTION_SHOW_VOICEMAIL_NOTIFICATION);
if (count != null) {
@@ -452,31 +443,14 @@
pendingIntent);
}
}
- mContext.sendBroadcastAsUser(intent, userHandle, READ_PHONE_STATE);
+
+ mContext.sendBroadcast(intent);
return true;
}
return false;
}
- private Intent getShowVoicemailIntentForDefaultDialer(UserHandle userHandle) {
- String dialerPackage = DefaultDialerManager
- .getDefaultDialerApplication(mContext, userHandle.getIdentifier());
- return new Intent(TelephonyManager.ACTION_SHOW_VOICEMAIL_NOTIFICATION)
- .setPackage(dialerPackage);
- }
-
- private boolean shouldManageNotificationThroughDefaultDialer(UserHandle userHandle) {
- Intent intent = getShowVoicemailIntentForDefaultDialer(userHandle);
- if (intent == null) {
- return false;
- }
-
- List<ResolveInfo> receivers = mContext.getPackageManager()
- .queryBroadcastReceivers(intent, 0);
- return receivers.size() > 0;
- }
-
/**
* Updates the message call forwarding indicator notification.
*
diff --git a/src/com/android/phone/settings/AccessibilitySettingsFragment.java b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
index ea19f75..0c186a9 100644
--- a/src/com/android/phone/settings/AccessibilitySettingsFragment.java
+++ b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
@@ -24,7 +24,6 @@
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.provider.Settings;
-import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
@@ -35,9 +34,6 @@
import com.android.internal.telephony.PhoneFactory;
import com.android.phone.PhoneGlobals;
import com.android.phone.R;
-import com.android.phone.settings.TtyModeListPreference;
-
-import java.util.List;
public class AccessibilitySettingsFragment extends PreferenceFragment {
private static final String LOG_TAG = AccessibilitySettingsFragment.class.getSimpleName();
@@ -60,7 +56,7 @@
if (pref != null) {
final boolean isVolteTtySupported = ImsManager.isVolteEnabledByPlatform(mContext)
&& getVolteTtySupported();
- pref.setEnabled((isVolteTtySupported && !isVideoCallInProgress()) ||
+ pref.setEnabled((isVolteTtySupported && !isVideoCallOrConferenceInProgress()) ||
(state == TelephonyManager.CALL_STATE_IDLE));
}
}
@@ -144,15 +140,15 @@
CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL);
}
- private boolean isVideoCallInProgress() {
+ private boolean isVideoCallOrConferenceInProgress() {
final Phone[] phones = PhoneFactory.getPhones();
if (phones == null) {
- if (DBG) Log.d(LOG_TAG, "isVideoCallInProgress: No phones found. Return false");
+ if (DBG) Log.d(LOG_TAG, "isVideoCallOrConferenceInProgress: No phones found.");
return false;
}
for (Phone phone : phones) {
- if (phone.isVideoCallPresent()) {
+ if (phone.isImsVideoCallOrConferencePresent()) {
return true;
}
}
diff --git a/src/com/android/phone/settings/VoicemailSettingsActivity.java b/src/com/android/phone/settings/VoicemailSettingsActivity.java
index 35d9a1c..6bb481f 100644
--- a/src/com/android/phone/settings/VoicemailSettingsActivity.java
+++ b/src/com/android/phone/settings/VoicemailSettingsActivity.java
@@ -537,7 +537,11 @@
if (DBG) log("onActivityResult: bad contact data, no results found.");
return;
}
- mSubMenuVoicemailSettings.onPickActivityResult(cursor.getString(0));
+ if (mSubMenuVoicemailSettings != null) {
+ mSubMenuVoicemailSettings.onPickActivityResult(cursor.getString(0));
+ } else {
+ Log.w(LOG_TAG, "VoicemailSettingsActivity destroyed while setting contacts.");
+ }
return;
} finally {
if (cursor != null) {
diff --git a/src/com/android/phone/vvm/omtp/ActivationTask.java b/src/com/android/phone/vvm/omtp/ActivationTask.java
index 72f1f54..6fd42fd 100644
--- a/src/com/android/phone/vvm/omtp/ActivationTask.java
+++ b/src/com/android/phone/vvm/omtp/ActivationTask.java
@@ -27,7 +27,6 @@
import android.telecom.PhoneAccountHandle;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
-
import com.android.phone.Assert;
import com.android.phone.PhoneGlobals;
import com.android.phone.VoicemailStatus;
@@ -40,7 +39,6 @@
import com.android.phone.vvm.omtp.sync.OmtpVvmSyncService;
import com.android.phone.vvm.omtp.sync.SyncTask;
import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
-
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@@ -135,7 +133,7 @@
OmtpVvmCarrierConfigHelper helper = new OmtpVvmCarrierConfigHelper(getContext(), subId);
if (!helper.isValid()) {
VvmLog.i(TAG, "VVM not supported on subId " + subId);
- VoicemailStatus.disable(getContext(), phoneAccountHandle);
+ OmtpVvmSourceManager.getInstance(getContext()).removeSource(phoneAccountHandle);
return;
}
diff --git a/src/com/android/phone/vvm/omtp/SimChangeReceiver.java b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
index 25c27db..a506a12 100644
--- a/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
+++ b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
@@ -24,12 +24,13 @@
import android.os.UserManager;
import android.telecom.PhoneAccountHandle;
import android.telephony.CarrierConfigManager;
+import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.text.TextUtils;
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
-import com.android.phone.VoicemailStatus;
import com.android.phone.settings.VisualVoicemailSettingsUtil;
import com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager;
import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
@@ -70,6 +71,25 @@
VvmLog.i(TAG, "Received SIM change for invalid subscription id.");
return;
}
+
+ TelephonyManager telephonyManager = context
+ .getSystemService(TelephonyManager.class);
+ if(TextUtils.isEmpty(telephonyManager.getSimOperator())){
+ VvmLog.e(TAG,
+ "Empty MCCMNC, possible modem crash."
+ + " Ignoring carrier config changed event");
+ return;
+ }
+
+ PhoneAccountHandle phoneAccountHandle = PhoneAccountHandleConverter
+ .fromSubId(subId);
+ if("null".equals(phoneAccountHandle.getId())){
+ VvmLog.e(TAG,
+ "null phone account handle ID, possible modem crash."
+ + " Ignoring carrier config changed event");
+ return;
+ }
+
VvmLog.d(TAG, "Carrier config changed");
if (UserManager.get(context).isUserUnlocked() && !isCryptKeeperMode()) {
processSubId(context, subId);
@@ -99,6 +119,12 @@
// can be recorded.
OmtpVvmSourceManager.getInstance(context).addPhoneStateListener(
phoneAccount);
+ if (context.getSystemService(TelephonyManager.class)
+ .getServiceStateForSubscriber(subId).getState()
+ != ServiceState.STATE_IN_SERVICE) {
+ VvmLog.i(TAG, "Cellular signal not available, not activating");
+ return;
+ }
carrierConfigHelper.startActivation();
} else {
if (carrierConfigHelper.isLegacyModeEnabled()) {
@@ -115,7 +141,7 @@
String mccMnc = context.getSystemService(TelephonyManager.class).getSimOperator(subId);
VvmLog.d(TAG,
"visual voicemail not supported for carrier " + mccMnc + " on subId " + subId);
- VoicemailStatus.disable(context, phoneAccount);
+ OmtpVvmSourceManager.getInstance(context).removeSource(phoneAccount);
}
}
diff --git a/src/com/android/phone/vvm/omtp/protocol/OmtpProtocol.java b/src/com/android/phone/vvm/omtp/protocol/OmtpProtocol.java
index d002652..7ec3dba 100644
--- a/src/com/android/phone/vvm/omtp/protocol/OmtpProtocol.java
+++ b/src/com/android/phone/vvm/omtp/protocol/OmtpProtocol.java
@@ -28,6 +28,7 @@
public OmtpMessageSender createMessageSender(SmsManager smsManager, short applicationPort,
String destinationNumber) {
return new OmtpStandardMessageSender(smsManager, applicationPort, destinationNumber,
- null, OmtpConstants.PROTOCOL_VERSION1_1, null);
+ OmtpConstants.CLIENT_TYPE_GOOGLE_10, OmtpConstants.PROTOCOL_VERSION1_1,
+ null /*clientPrefix*/);
}
}
diff --git a/src/com/android/phone/vvm/omtp/protocol/Vvm3EventHandler.java b/src/com/android/phone/vvm/omtp/protocol/Vvm3EventHandler.java
index d95879f..524c96d 100644
--- a/src/com/android/phone/vvm/omtp/protocol/Vvm3EventHandler.java
+++ b/src/com/android/phone/vvm/omtp/protocol/Vvm3EventHandler.java
@@ -18,13 +18,17 @@
import android.annotation.IntDef;
import android.content.Context;
+import android.provider.VoicemailContract.Status;
+import android.telecom.PhoneAccountHandle;
import android.util.Log;
+
import com.android.phone.VoicemailStatus;
import com.android.phone.settings.VoicemailChangePinActivity;
import com.android.phone.vvm.omtp.DefaultOmtpEventHandler;
import com.android.phone.vvm.omtp.OmtpEvents;
import com.android.phone.vvm.omtp.OmtpEvents.Type;
import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -113,19 +117,22 @@
OmtpEvents event) {
switch (event) {
case CONFIG_REQUEST_STATUS_SUCCESS:
- if (status.getPhoneAccountHandle() == null) {
- // This should never happen.
- Log.e(TAG, "status editor has null phone account handle");
- return true;
- }
-
- if (!VoicemailChangePinActivity
- .isDefaultOldPinSet(context, status.getPhoneAccountHandle())) {
+ if (!isPinRandomized(context, status.getPhoneAccountHandle())) {
return false;
} else {
postError(status, PIN_NOT_SET);
}
break;
+ case CONFIG_ACTIVATING_SUBSEQUENT:
+ if (isPinRandomized(context, status.getPhoneAccountHandle())) {
+ status.setConfigurationState(PIN_NOT_SET);
+ } else {
+ status.setConfigurationState(Status.CONFIGURATION_STATE_OK);
+ }
+ status
+ .setNotificationChannelState(Status.NOTIFICATION_CHANNEL_STATE_OK)
+ .setDataChannelState(Status.DATA_CHANNEL_STATE_OK).apply();
+ break;
case CONFIG_DEFAULT_PIN_REPLACED:
postError(status, PIN_NOT_SET);
break;
@@ -269,4 +276,13 @@
}
editor.apply();
}
+
+ private static boolean isPinRandomized(Context context, PhoneAccountHandle phoneAccountHandle) {
+ if (phoneAccountHandle == null) {
+ // This should never happen.
+ Log.e(TAG, "status editor has null phone account handle");
+ return false;
+ }
+ return VoicemailChangePinActivity.isDefaultOldPinSet(context, phoneAccountHandle);
+ }
}
diff --git a/src/com/android/phone/vvm/omtp/sms/OmtpCvvmMessageSender.java b/src/com/android/phone/vvm/omtp/sms/OmtpCvvmMessageSender.java
index 7f45254..98d8594 100644
--- a/src/com/android/phone/vvm/omtp/sms/OmtpCvvmMessageSender.java
+++ b/src/com/android/phone/vvm/omtp/sms/OmtpCvvmMessageSender.java
@@ -48,7 +48,7 @@
private void sendCvvmMessage(String request, PendingIntent sentIntent) {
StringBuilder sb = new StringBuilder().append(request);
sb.append(OmtpConstants.SMS_PREFIX_SEPARATOR);
- appendField(sb, "dt", "15");
+ appendField(sb, "dt" /* device type */, "6" /* no VTT (transcription) support*/);
sendSms(sb.toString(), sentIntent);
}
}
diff --git a/src/com/android/services/telephony/CdmaConferenceController.java b/src/com/android/services/telephony/CdmaConferenceController.java
index 0a7c18b..846df61 100644
--- a/src/com/android/services/telephony/CdmaConferenceController.java
+++ b/src/com/android/services/telephony/CdmaConferenceController.java
@@ -122,8 +122,18 @@
}
}, ADD_OUTGOING_CONNECTION_DELAY_MILLIS);
} else {
- // This is the first connection, or it is incoming, so let it flow through.
- addInternal(connection);
+ // Post the call to addInternal to the handler with no delay.
+ // Why you ask? In TelephonyConnectionService#
+ // onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest) or
+ // TelephonyConnectionService#onCreateOutgoingConnection(PhoneAccountHandle,
+ // ConnectionRequest) we can create a new connection it will trigger a call to
+ // TelephonyConnectionService#addConnectionToConferenceController, which will cause us
+ // to get here. HOWEVER, at this point ConnectionService#addConnection has not yet run,
+ // so if we end up calling ConnectionService#addConference, the connection service will
+ // not yet know about the new connection, so it won't get added to the conference.
+ // Posting to the handler ensures addConnection has a chance to happen before we add the
+ // conference.
+ mHandler.post(() -> addInternal(connection));
}
}
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index 6eb4a4e..92f202a 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -27,11 +27,10 @@
public class DisconnectCauseUtil {
/**
- * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more generic
- * {@link android.telecom.DisconnectCause}.object, possibly populated with a localized message
- * and tone.
+ * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more
+ * generic {@link android.telecom.DisconnectCause} object, possibly populated with a localized
+ * message and tone.
*
- * @param context The context.
* @param telephonyDisconnectCause The code for the reason for the disconnect.
*/
public static DisconnectCause toTelecomDisconnectCause(int telephonyDisconnectCause) {
@@ -39,11 +38,10 @@
}
/**
- * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more generic
- * {@link android.telecom.DisconnectCause}.object, possibly populated with a localized message
- * and tone.
+ * Converts from a disconnect code in {@link android.telephony.DisconnectCause} into a more
+ * generic {@link android.telecom.DisconnectCause}.object, possibly populated with a localized
+ * message and tone.
*
- * @param context The context.
* @param telephonyDisconnectCause The code for the reason for the disconnect.
* @param reason Description of the reason for the disconnect, not intended for the user to see..
*/
@@ -54,7 +52,7 @@
toTelecomDisconnectCauseCode(telephonyDisconnectCause),
toTelecomDisconnectCauseLabel(context, telephonyDisconnectCause),
toTelecomDisconnectCauseDescription(context, telephonyDisconnectCause),
- toTelecomDisconnectReason(telephonyDisconnectCause, reason),
+ toTelecomDisconnectReason(context,telephonyDisconnectCause, reason),
toTelecomDisconnectCauseTone(telephonyDisconnectCause));
}
@@ -129,6 +127,7 @@
case android.telephony.DisconnectCause.DATA_DISABLED:
case android.telephony.DisconnectCause.DATA_LIMIT_REACHED:
case android.telephony.DisconnectCause.DIALED_ON_WRONG_SLOT:
+ case android.telephony.DisconnectCause.DIALED_CALL_FORWARDING_WHILE_ROAMING:
return DisconnectCause.ERROR;
case android.telephony.DisconnectCause.DIALED_MMI:
@@ -380,6 +379,9 @@
case android.telephony.DisconnectCause.DATA_LIMIT_REACHED:
resourceId = R.string.callFailed_data_limit_reached_description;
break;
+ case android.telephony.DisconnectCause.DIALED_CALL_FORWARDING_WHILE_ROAMING:
+ resourceId = com.android.internal.R.string.mmiErrorWhileRoaming;
+ break;
default:
break;
@@ -387,7 +389,36 @@
return resourceId == null ? "" : context.getResources().getString(resourceId);
}
- private static String toTelecomDisconnectReason(int telephonyDisconnectCause, String reason) {
+ /**
+ * Maps the telephony {@link android.telephony.DisconnectCause} into a reason string which is
+ * returned in the Telecom {@link DisconnectCause#getReason()}.
+ *
+ * @param context The current context.
+ * @param telephonyDisconnectCause The {@link android.telephony.DisconnectCause} code.
+ * @param reason A reason provided by the caller; only used if a more specific reason cannot
+ * be determined here.
+ * @return The disconnect reason.
+ */
+ private static String toTelecomDisconnectReason(Context context, int telephonyDisconnectCause,
+ String reason) {
+
+ if (context == null) {
+ return "";
+ }
+
+ switch (telephonyDisconnectCause) {
+ case android.telephony.DisconnectCause.POWER_OFF:
+ // Airplane mode (radio off)
+ // intentional fall-through
+ case android.telephony.DisconnectCause.OUT_OF_SERVICE:
+ // No network connection.
+ if (ImsUtil.shouldPromoteWfc(context)) {
+ return android.telecom.DisconnectCause.REASON_WIFI_ON_BUT_WFC_OFF;
+ }
+ break;
+ }
+
+ // If no specific code-mapping found, then fall back to using the reason.
String causeAsString = android.telephony.DisconnectCause.toString(telephonyDisconnectCause);
if (reason == null) {
return causeAsString;
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index c4f9c9a..4199d5d 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -960,6 +960,12 @@
b != null && b.getBoolean(CarrierConfigManager.KEY_WIFI_CALLS_CAN_BE_HD_AUDIO);
boolean canVideoCallsBeHdAudio =
b != null && b.getBoolean(CarrierConfigManager.KEY_VIDEO_CALLS_CAN_BE_HD_AUDIO);
+ boolean shouldDisplayHdAudio =
+ b != null && b.getBoolean(CarrierConfigManager.KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL);
+
+ if (!shouldDisplayHdAudio) {
+ return false;
+ }
if (isVideoCall && !canVideoCallsBeHdAudio) {
return false;
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 612600e..409d720 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -479,6 +479,15 @@
return failedConnection;
}
+ // Check roaming status to see if we should block custom call forwarding codes
+ if (blockCallForwardingNumberWhileRoaming(phone, number)) {
+ return Connection.createFailedConnection(
+ DisconnectCauseUtil.toTelecomDisconnectCause(
+ android.telephony.DisconnectCause.DIALED_CALL_FORWARDING_WHILE_ROAMING,
+ "Call forwarding while roaming"));
+ }
+
+
final TelephonyConnection connection =
createConnectionFor(phone, null, true /* isOutgoing */, request.getAccountHandle(),
request.getTelecomCallId(), request.getAddress(), request.getVideoState());
@@ -690,6 +699,28 @@
}
}
+ private boolean blockCallForwardingNumberWhileRoaming(Phone phone, String number) {
+ if (phone == null || TextUtils.isEmpty(number) || !phone.getServiceState().getRoaming()) {
+ return false;
+ }
+ String[] blockPrefixes = null;
+ CarrierConfigManager cfgManager = (CarrierConfigManager)
+ phone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ if (cfgManager != null) {
+ blockPrefixes = cfgManager.getConfigForSubId(phone.getSubId()).getStringArray(
+ CarrierConfigManager.KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY);
+ }
+
+ if (blockPrefixes != null) {
+ for (String prefix : blockPrefixes) {
+ if (number.startsWith(prefix)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
private boolean isRadioOn() {
boolean result = false;
for (Phone phone : PhoneFactory.getPhones()) {
@@ -775,6 +806,8 @@
int cause = android.telephony.DisconnectCause.OUTGOING_FAILURE;
if (e.getError() == CallStateException.ERROR_DISCONNECTED) {
cause = android.telephony.DisconnectCause.OUT_OF_SERVICE;
+ } else if (e.getError() == CallStateException.ERROR_POWER_OFF) {
+ cause = android.telephony.DisconnectCause.POWER_OFF;
}
connection.setDisconnected(DisconnectCauseUtil.toTelecomDisconnectCause(
cause, e.getMessage()));