DO NOT MERGE - Merge QD1A.190821.011 into stage-aosp-master
Bug: 141248619
Change-Id: I16430cd47a965a54608e2ecd4ab3c9ed1fef8578
diff --git a/Android.mk b/Android.mk
index 8aff191..04c37e6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -31,9 +31,7 @@
LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
LOCAL_SRC_FILES += $(call all-proto-files-under, ecc/proto)
LOCAL_SRC_FILES += \
- src/com/android/phone/EventLogTags.logtags \
- src/com/android/phone/INetworkQueryService.aidl \
- src/com/android/phone/INetworkQueryServiceCallback.aidl
+ src/com/android/phone/EventLogTags.logtags
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
LOCAL_ASSET_DIR := $(addprefix $(LOCAL_PATH)/, $(asset_dirs))
LOCAL_USE_AAPT2 := true
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f744bdf..e930e37 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -200,6 +200,10 @@
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
<uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_ROLE_HOLDERS" />
+ <!-- Allows us to whitelist receivers of the
+ ACTION_SIM_SLOT_STATUS_CHANGED broadcast to start activities
+ from the background. -->
+ <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
<application android:name="PhoneApp"
android:persistent="true"
@@ -264,39 +268,6 @@
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="false"/>
- <!-- "Mobile network settings" screen, used on both
- non-voice-capable tablets and regular phone devices. -->
- <activity android:name="MobileNetworkSettings"
- android:label="@string/network_settings_title"
- android:theme="@style/NetworkOperatorsSettingsTheme">
- <intent-filter>
- <action android:name="android.intent.action.VIEW" />
- <action android:name="android.intent.action.MAIN" />
- <action android:name="android.settings.NETWORK_OPERATOR_SETTINGS" />
- <action android:name="android.settings.DATA_ROAMING_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
- <activity-alias android:name="Settings"
- android:targetActivity="MobileNetworkSettings" />
-
- <!-- networks setting -->
- <!-- "Choose network" screen. Used only when the Automatically
- select network turned off-->
- <activity android:name="NetworkSelectSettingActivity"
- android:label="@string/choose_network_title"
- android:theme="@style/NetworkOperatorsSettingsTheme"
- android:configChanges="orientation|screenSize">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
- <!-- service to handle network query requests sent to RIL -->
- <service android:name="NetworkQueryService" />
-
<activity android:name="GsmUmtsCallOptions"
android:label="@string/gsm_umts_options"
android:theme="@style/DialerSettingsLight">
diff --git a/ecc/conversion_toolset_v1/proto/Android.bp b/ecc/conversion_toolset_v1/proto/Android.bp
index 7d6cce4..f633f90 100644
--- a/ecc/conversion_toolset_v1/proto/Android.bp
+++ b/ecc/conversion_toolset_v1/proto/Android.bp
@@ -22,7 +22,7 @@
],
},
srcs: ["protobuf_ecc_data.proto"],
- no_framework_libs: true,
+ sdk_version: "core_platform",
jarjar_rules: "jarjar-rules.txt",
java_version: "1.8",
}
\ No newline at end of file
diff --git a/res/layout/emergency_dialer.xml b/res/layout/emergency_dialer.xml
index bea01fe..d14a679 100644
--- a/res/layout/emergency_dialer.xml
+++ b/res/layout/emergency_dialer.xml
@@ -110,7 +110,7 @@
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:backgroundTint="#ffe53935"
+ android:backgroundTint="#ffe32926"
android:focusable="false"
android:clickable="false"
style="?android:attr/buttonStyle"/>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 4b1b49c..bba18ee 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Privaat nommer"</string>
<string name="payphone" msgid="4793877574636445118">"Telefoonhokkie"</string>
<string name="onHold" msgid="9035493194749959955">"Hou aan"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) boodskap"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Diensverskafferboodskap"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-kode begin"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-kode loop tans…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI-kode gekanselleer"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Intydse teksoproep (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Laat boodskappe binne \'n stemoproep toe"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT help bellers wat doof is, hardhorend is, \'n spraakgebrek het of meer as net stem benodig.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Kom meer te wete</a>\n <br&gtlt;br> - RTT-oproepe word as \'n boodskaptranskripsie gestoor\n <br&gt - RTT is nie vir video-oproepe beskikbaar nie"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Let wel: RTT is nie beskikbaar terwyl jy swerf nie"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY af"</item>
<item msgid="3971695875449640648">"TTY vol"</item>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 67725f0..4d96a50 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"የግል ቁጥር"</string>
<string name="payphone" msgid="4793877574636445118">"የሕዝብ ስልክ"</string>
<string name="onHold" msgid="9035493194749959955">"ያዝናቆይ"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) መልዕክት"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"የአገልግሎት አቅራቢ መልዕክት"</string>
<string name="mmiStarted" msgid="6347869857061147003">"የMMI ኮድ ጀምሯል"</string>
<string name="ussdRunning" msgid="485588686340541690">"የUSSD ኮድ አሂድ ላይ ነው..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"የMMI ኮድ ቀርቷል"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"ቅጽበታዊ ጽሁፍ (አርቲቲ) ጥሪ"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"በድምጽ ጥሪ ውስጥ መልዕክት መላክን ፍቀድ"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"አርቲቲ መስማት የተሳናቸው፣ የመስማት ችግር ያለባቸው፣ መስማት ያሚያዳግታቸው እና የንግግር አካል ጉዳት ያለባቸውን ወይም ከድምጽ በላይ የሚያስፈልጋቸውን ደዋዮች ይረዳል።<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>የበለጠ ለመረዳት</a>\n <br><br> - አርቲቲ ጥሪዎች እንደ የመልዕክት ጽሁፍ ግልባጭ ይቀመጣሉ\n <br> - አርቲቲ ለቪዲዮ ጥሪዎች አይገኝም"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"ማስታወሻ፦ አርቲቲ በዝውውር ላይ እያሉ አይገኝም።"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY ጠፍቷል"</item>
<item msgid="3971695875449640648">"TTY ሙሉ"</item>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 6071b4f..b21a6ec 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"رقم خاص"</string>
<string name="payphone" msgid="4793877574636445118">"هاتف يعمل بالعملة"</string>
<string name="onHold" msgid="9035493194749959955">"معلقة"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"رسالة (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"رسالة مشغِّل شبكة الجوَّال"</string>
<string name="mmiStarted" msgid="6347869857061147003">"بدأ رمز MMI"</string>
<string name="ussdRunning" msgid="485588686340541690">"جارٍ تشغيل رمز USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"تم إلغاء رمز MMI"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"مكالمة باستخدام الميزة \"مراسلة نصية في الوقت الفعلي\""</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"السماح بالمراسلة داخل مكالمة صوتية"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"تعمل الميزة \"مراسلة نصية في الوقت الفعلي\" على مساعدة المتصلين الذين يعانون من فقدان حاسة السمع أو من ضعف في السمع أو ليست لديهم القدرة على التحدث أو يحتاجون إلى ما هو أكثر من الصوت فقط.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>معرفة المزيد</a>\n <br><br> - يتم حفظ المكالمات التي تتم عن طريق الميزة \"مراسلة نصية في الوقت الفعلي\" كنص رسالة \n <br> - لا تتوفر الميزة \"مراسلة نصية في الوقت الفعلي\" لمكالمات الفيديو"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"ملاحظة: لا تتوفّر ميزة \"المراسلة النصية في الوقت الفعلي\" أثناء التجوال"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY غير مفعّل"</item>
<item msgid="3971695875449640648">"TTY مكتمل"</item>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index e36b588..e1977a5 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"ব্যক্তিগত নম্বৰ"</string>
<string name="payphone" msgid="4793877574636445118">"পে\'ফ\'ন"</string>
<string name="onHold" msgid="9035493194749959955">"হ\'ল্ডত আছে"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>)ৰ বাৰ্তা"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"বাহকৰ বাৰ্তা"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI ক\'ড আৰম্ভ কৰা হ’ল"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD ক\'ড চলি আছে…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI ক\'ড বাতিল কৰা হ’ল"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"প্ৰকৃত সময়ত বাৰ্তা (RTT) কল"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"ভইচ কল চলি থকাৰ সময়ত বাৰ্তা পঠিওৱাৰ অনুমতি দিয়ক"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTTয়ে বধিৰ বা শ্ৰৱণশক্তি কম থকা, বাকশক্তি সম্পৰ্কীয় দিব্য়াংগ বা কল কৰোঁতে কণ্ঠস্বৰতকৈ অধিক সুবিধাৰ প্ৰয়োজন হোৱা ব্য়ক্তিসকলক সহায় কৰে।<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>অধিক জানক</a>\n <br><br> - RTT কলসমূহক বাৰ্তাৰ ট্ৰান্সক্ৰিপ্ট হিচাপে ছেভ কৰা হয়\n <br> - RTT ভিডিঅ\' কলৰ বাবে উপলব্ধ নহয়"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"টোকা: ৰ’মিঙত থাকোঁতে RTT উপলব্ধ নহয়"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY বন্ধ হৈ আছে"</item>
<item msgid="3971695875449640648">"TTY সম্পূৰ্ণ"</item>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 1e1cf42..c99c296 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Şəxsi nömrə"</string>
<string name="payphone" msgid="4793877574636445118">"Taksofon"</string>
<string name="onHold" msgid="9035493194749959955">"Gözləmə mövqeyində"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Mesaj"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operator Mesajı"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI kodu başlandı"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD kod işləyir..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI kodu ləğv olundu"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Real zaman mətn (RTT) zəngi"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Səsli zəng daxilində mesajlaşmaya icazə verin"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT kar və ya eşitmə problemi olan, danışma qüsuru olan və ya səsdən daha çoxuna ehtiyac duyan şəxslərə dəstək olur.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Ətraflı məlumat</a>\n <br><br> - RTT zəngləri mesaj transkripsiyası kimi yadda saxlanılır\n <br> - RTT video zənglər üçün əlçatan deyil"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Qeyd: Rominq zamanı RTT əlçatan olmur"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Teletayp Deaktivdir"</item>
<item msgid="3971695875449640648">"Tam funksiyası Teletayp"</item>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index c264910..aea4641 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Privatan broj"</string>
<string name="payphone" msgid="4793877574636445118">"Telefonska govornica"</string>
<string name="onHold" msgid="9035493194749959955">"Na čekanju"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Poruka"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Poruka mobilnog operatera"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Pokrenut je MMI kôd."</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD kôd je pokrenut…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI kôd je otkazan"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Poziv sa tekstom u realnom vremenu (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Dozvolite razmenu poruka u audio pozivu"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Tekst u realnom vremenu (RTT) pomaže pozivaocima koji su gluvi, slabo čuju, imaju teškoće u govoru ili kojima je potrebno nešto više od glasa.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Saznajte više</a>\n <br><br> – RTT pozivi se čuvaju kao transkript poruke\n <br> – RTT nije dostupan za video pozive"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Napomena: Tekst u realnom vremenu nije dostupan u romingu"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY je isključen"</item>
<item msgid="3971695875449640648">"Kompletni TTY"</item>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 66c4d61..8d8a697 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Прыватны нумар"</string>
<string name="payphone" msgid="4793877574636445118">"Таксафон"</string>
<string name="onHold" msgid="9035493194749959955">"У чаканні"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Паведамленне"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Паведамленне аператара"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Пачалося выкананне MMI кода"</string>
<string name="ussdRunning" msgid="485588686340541690">"Запускаецца USSD-код..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Код MMI адменены"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Выклік з тэкстам у рэальным часе (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Дазволіць абмен паведамленнямі ў галасавых выкліках"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Функцыя RTT дапамагае абанентам з парушэннямі слыху і маўлення.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Даведацца больш</a>\n <br><br> - RTT-выклікі захоўваюцца ў выглядзе расшыфроўкі паведамленняў\n <br> - Функцыя RTT недаступная для відэавыклікаў"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Заўвага. Функцыя RTT недаступная ў роўмінгу."</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Тэлетайп выключаны"</item>
<item msgid="3971695875449640648">"Поўнафункцыянальны тэлетайп"</item>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index e2cd08a..b3195cb 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Частен номер"</string>
<string name="payphone" msgid="4793877574636445118">"Обществен телефон"</string>
<string name="onHold" msgid="9035493194749959955">"Задържане на обаждането"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Съобщение"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Съобщение от оператора"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI кодът бе стартиран"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD кодът се изпълнява…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI кодът бе анулиран"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Обаждане с текстово съобщение в реално време (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Позволяване на съобщения в рамките на гласово обаждане"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT подпомага обаждащи се, които са глухи, имат затруднения със слуха, говорно увреждане или се нуждаят от повече от само глас.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Научете повече</a>\n <br><br> – RTT обажданията се запазват като препис на съобщение.\n <br> – RTT не е налице за видеообаждания."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Забележка: ТСРВ не е налице при роуминг"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY е изкл."</item>
<item msgid="3971695875449640648">"Пълен TTY режим"</item>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 85ebb35..6a5d513 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"ব্যক্তিগত নম্বর"</string>
<string name="payphone" msgid="4793877574636445118">"পে ফোন"</string>
<string name="onHold" msgid="9035493194749959955">"সাময়িকভাবে স্থগিত রাখা হয়েছে"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) মেসেজ"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"পরিষেবা প্রদানকারীর মেসেজ"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI কোড শুরু করা হয়েছে"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD কোড চলছে…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI কোড বাতিল করা হয়েছে"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"রিয়েল-টাইম টেক্সট (RTT) কল"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"ভয়েস কলে মেসেজ পাঠানোর অনুমতি দিন"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"যে কলাররা বধির, কানে কম শোনেন, যাদের কথা বলতে অসুবিধা হয় অথবা যারা কণ্ঠস্বরের সাথে অন্য কোনও উপায়ে নিজেদের প্রকাশ করেন, RTT বৈশিষ্ট্যটি তাদের সাহায্য করে।<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>আরও জানুন</a>\n <br><br> - RTT কলগুলি মেসেজ ট্রান্সক্রিপ্ট হিসেবে সেভ করে রাখা হয়\n <br> - ভিডিও কলে RTT বৈশিষ্ট্য ব্যবহার করা যায় না"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"মনে রাখবেন: রোমিংয়ে থাকাকালীন RTT কাজ করে না"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY বন্ধ"</item>
<item msgid="3971695875449640648">"TTY পূর্ণ"</item>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 9b727a5..96cffd5 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Privatni broj"</string>
<string name="payphone" msgid="4793877574636445118">"Telefonska govornica"</string>
<string name="onHold" msgid="9035493194749959955">"Na čekanju"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) poruka"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Poruka mobilnog operatera"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI kȏd je pokrenut"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD kȏd je pokrenut…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI kȏd je otkazan"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Pozivanje sa slanjem SMS-ova u stvarnom vremenu (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Dozvolite razmjenu poruka tokom glasovnog poziva"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT pomaže pozivaocima koji su gluhi, imaju probleme sa sluhom ili govorom te onima kojima treba više od samog glasa.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Saznajte više</a>\n <br><br> - RTT pozivi se pohranjuju kao transkripti poruka\n <br> - RTT nije dostupan za video pozive"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Napomena: RTT nije dostupan u romingu"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY je isključen"</item>
<item msgid="3971695875449640648">"TTY je pun"</item>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 25201ce..04c6c46 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Número privat"</string>
<string name="payphone" msgid="4793877574636445118">"Telèfon públic"</string>
<string name="onHold" msgid="9035493194749959955">"En espera"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Missatge (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Missatge de l\'operador de telefonia mòbil"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Codi MMI iniciat"</string>
<string name="ussdRunning" msgid="485588686340541690">"S\'està executant el codi USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Codi MMI cancel·lat"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Trucada de text en temps real (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Permet l\'ús de missatges en una trucada de veu"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"La funció RTT ofereix assistència als usuaris que són sords, tenen problemes d\'audició o alteracions de la parla, o bé que necessiten un text a banda de la veu.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Més informació</a>\n <br><br> - Les trucades RTT es desen en forma de transcripció.\n <br> - Aquesta funció no està disponible per a videotrucades."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Nota: la funció RTT no està disponible en itinerància"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY desactivat"</item>
<item msgid="3971695875449640648">"TTY complet"</item>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 042ac44..0af005b 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Soukromé číslo"</string>
<string name="payphone" msgid="4793877574636445118">"Telefonní automat"</string>
<string name="onHold" msgid="9035493194749959955">"Přidržený hovor"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Zpráva"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Zpráva od operátora"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Kód MMI byl spuštěn"</string>
<string name="ussdRunning" msgid="485588686340541690">"Kód USSD je spuštěn..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Kód MMI byl zrušen"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Hovor, během něhož můžete posílat zprávy (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Povolit posílání zpráv během hlasového hovoru"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Funkce SMS během hovoru (RTT) pomáhá volajícím, kteří neslyší, jsou nedoslýchaví, mají řečovou vadu, případně potřebují víc než jen hlas z jiného důvodu.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Další informace</a>\n <br><br> – Text poslaný během hovoru se uloží jako přepis zpráv\n <br> – Tato funkce není dostupná při videohovorech"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Použít: Funkce SMS během hovoru není dostupná při roamingu"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY vypnuto"</item>
<item msgid="3971695875449640648">"Úplný režim TTY"</item>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index b919b2c..59fd1b4 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Privat nummer"</string>
<string name="payphone" msgid="4793877574636445118">"Mønttelefon"</string>
<string name="onHold" msgid="9035493194749959955">"Ventende"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Besked via (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Besked via mobilnummer"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-nummer er startet"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-kode kører ..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI-nummer annulleret"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Opkald via sms i realtid"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Tillad afsendelse af sms-beskeder i et taleopkald"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Sms i realtid hjælper personer, som er døve, hørehæmmede, talehandicappede, eller som har brug for mere end bare tale, med at foretage opkald.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Få flere oplysninger</a>\n <br><br> – Opkald via sms i realtid gemmes som en beskedtransskription\n <br> – Sms i realtid er ikke tilgængeligt til videoopkald"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Bemærk! RTT er ikke tilgængeligt under roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY fra"</item>
<item msgid="3971695875449640648">"Fuld TTY-tilstand"</item>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 7899738..0549f1e 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Private Nummer"</string>
<string name="payphone" msgid="4793877574636445118">"Münztelefon"</string>
<string name="onHold" msgid="9035493194749959955">"Anruf wird gehalten"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Nachricht von (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Nachricht vom Mobilfunkanbieter"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-Code gestartet"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-Code wird ausgeführt..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI-Code abgebrochen"</string>
@@ -81,7 +83,7 @@
<string name="smart_forwarding_settings_menu" msgid="3874243342391798449">"Intelligente Weiterleitung"</string>
<string name="smart_forwarding_settings_menu_summary" msgid="8962247659470565059">"Wenn eine Nummer nicht erreichbar ist, werden Anrufe immer an deine andere Nummer weitergeleitet"</string>
<string name="voicemail_notifications_preference_title" msgid="4019728578955102213">"Benachrichtigungen"</string>
- <string name="cell_broadcast_settings" msgid="8740238216690502563">"Notfallbenachrichtigungen"</string>
+ <string name="cell_broadcast_settings" msgid="8740238216690502563">"Notfall-Broadcasts"</string>
<string name="call_settings" msgid="6112441768261754562">"Anrufeinstellungen"</string>
<string name="additional_gsm_call_settings" msgid="1391795981938800617">"Zusätzliche Einstellungen"</string>
<string name="additional_gsm_call_settings_with_label" msgid="1385241520708457376">"Weitere Einstellungen (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"RTT-Anruf"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Nachrichten in Sprachanrufen erlauben"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Echtzeittext (Real-Time Text, RTT) dient als Unterstützung für Anrufer, die gehörlos, schwerhörig oder sprachgeschädigt sind oder zusätzlich zur gesprochenen Sprache weitere Informationen benötigen.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Weitere Informationen</a>\n <br><br> – RTT-Anrufe werden als Nachrichtentranskripte gespeichert\n <br> – RTT ist nicht für Videoanrufe verfügbar"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Hinweis: RTT ist während des Roamings nicht verfügbar"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY aus"</item>
<item msgid="3971695875449640648">"TTY (vollständig)"</item>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 0de31d4..8b7a200 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Απόκρυψη"</string>
<string name="payphone" msgid="4793877574636445118">"Τηλέφωνο με χρέωση"</string>
<string name="onHold" msgid="9035493194749959955">"Σε αναμονή"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Μήνυμα"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Μήνυμα φορέα"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Έναρξη κώδικα MMI"</string>
<string name="ussdRunning" msgid="485588686340541690">"Ο κώδικας USSD εκτελείται..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Ο κώδικας MMI ακυρώθηκε"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Κλήση με αποστολή κειμένου σε πραγματικό χρόνο (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Να επιτρέπεται η ανταλλαγή μηνυμάτων σε μια φωνητική κλήση"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Η λειτουργία RTT υποβοηθά καλούντες που αντιμετωπίζουν προβλήματα ακοής ή ομιλίας ή θέλουν κάτι περισσότερο από απλή φωνητική επικοινωνία.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Μάθετε περισσότερα</a>\n <br><br> - Οι κλήσεις RTT αποθηκεύονται ως μεταγραφές μηνυμάτων\n <br> - Η λειτουργία RTT δεν είναι διαθέσιμη για βιντεοκλήσεις"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Σημείωση: Η λειτουργία RTT δεν είναι διαθέσιμη κατά την περιαγωγή"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY Απενεργοποιήθηκε"</item>
<item msgid="3971695875449640648">"TTY πλήρες"</item>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 0384a80..3ef9c7c 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Private number"</string>
<string name="payphone" msgid="4793877574636445118">"Payphone"</string>
<string name="onHold" msgid="9035493194749959955">"On hold"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Message"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operator message"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI code started"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD code running…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI code cancelled"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Real-time text (RTT) call"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Allow messaging within a voice call"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT assists callers who are deaf, hard of hearing, have a speech disability or need more than voice alone.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Learn more</a>\n <br><br> – RTT calls are saved as a message transcript\n <br> – RTT is not available for video calls"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Note: RTT is not available while roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY off"</item>
<item msgid="3971695875449640648">"TTY full"</item>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index d73bdc7..3aa7e78 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -77,9 +77,12 @@
<string name="voicemail" msgid="8693759337917898954">"Voicemail"</string>
<string name="voicemail_settings_with_label" msgid="152724978380748296">"Voicemail (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_abbreviated" msgid="2215592488517217448">"VM:"</string>
- <string name="make_and_receive_calls" msgid="1258596928285972166">"Make & receive calls"</string>
- <string name="smart_forwarding_settings_menu" msgid="3874243342391798449">"Smart forwarding"</string>
- <string name="smart_forwarding_settings_menu_summary" msgid="8962247659470565059">"When one number isn\'t reachable, always forward calls to your other number"</string>
+ <!-- no translation found for make_and_receive_calls (1258596928285972166) -->
+ <skip />
+ <!-- no translation found for smart_forwarding_settings_menu (3874243342391798449) -->
+ <skip />
+ <!-- no translation found for smart_forwarding_settings_menu_summary (8962247659470565059) -->
+ <skip />
<string name="voicemail_notifications_preference_title" msgid="4019728578955102213">"Notifications"</string>
<string name="cell_broadcast_settings" msgid="8740238216690502563">"Emergency broadcasts"</string>
<string name="call_settings" msgid="6112441768261754562">"Call settings"</string>
@@ -252,15 +255,10 @@
<string name="roaming_enable" msgid="7331106985174381987">"Connect to data services when roaming"</string>
<string name="roaming_disable" msgid="1843417228755568110">"Connect to data services when roaming"</string>
<string name="roaming_reenable_message" msgid="6843814381576397939">"Data roaming is turned off. Tap to turn on."</string>
- <string name="roaming_enabled_message" msgid="7176375330428295945">"Roaming charges may apply. Tap to modify."</string>
<string name="roaming_notification_title" msgid="4749053220884743110">"Lost mobile data connection"</string>
- <string name="roaming_on_notification_title" msgid="5102274082214238655">"Data roaming is on"</string>
<string name="roaming_warning" msgid="1603164667540144353">"You may incur significant charges."</string>
<string name="roaming_check_price_warning" msgid="7497570906830902550">"Check with your network provider for pricing."</string>
<string name="roaming_alert_title" msgid="3654815360303826008">"Allow data roaming?"</string>
- <string name="limited_sim_function_notification_title" msgid="7611588665358096385">"Limited SIM functionality"</string>
- <string name="limited_sim_function_with_phone_num_notification_message" msgid="8629471534217382598">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> calls and data services may be blocked while using <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>."</string>
- <string name="limited_sim_function_notification_message" msgid="2820647701127014781">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> calls and data services may be blocked while using another SIM."</string>
<string name="data_usage_title" msgid="4042209259808900283">"App data usage"</string>
<string name="data_usage_template" msgid="8526428824844656364">"<xliff:g id="ID_1">%1$s</xliff:g> mobile data used <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="advanced_options_title" msgid="8074895510265488035">"Advanced"</string>
@@ -521,6 +519,7 @@
<string name="emergency_information_owner_hint" msgid="688331472291637149">"Owner"</string>
<string name="emergency_information_confirm_hint" msgid="4039012670779853030">"Tap again to view info"</string>
<string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Emergency call"</string>
+ <string name="emergency_dialpad_title" msgid="6052294225467269233">"Emergency calls only"</string>
<string name="single_emergency_number_title" msgid="4959203129714396515">"Emergency number"</string>
<string name="numerous_emergency_numbers_title" msgid="754158099451343898">"Emergency numbers"</string>
<string name="emergency_call_shortcut_hint" msgid="6506167229097004348">"Tap again to call <xliff:g id="EMERGENCY_NUMBER">%s</xliff:g>"</string>
@@ -644,8 +643,6 @@
<string name="callFailed_wifi_lost" msgid="5968076625137297184">"Wi-Fi connection lost. Call ended."</string>
<string name="dialFailed_low_battery" msgid="8760548177088774268">"Your video call cannot be placed due to low battery."</string>
<string name="callFailed_low_battery" msgid="4913582435905872616">"Video call ended due to low battery."</string>
- <string name="callFailed_emergency_call_over_wfc_not_available" msgid="4890063404231305951">"Emergency calls over Wi-Fi calling not available in this location."</string>
- <string name="callFailed_wfc_service_not_available_in_this_location" msgid="7616738479038819001">"Wi-Fi calling is not available in this location."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Change Voicemail PIN"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continue"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancel"</string>
@@ -759,7 +756,6 @@
<string name="call_barring_settings" msgid="80766145008623645">"Call barring settings"</string>
<string name="call_barring_deactivate_all_no_password" msgid="920902774366557311">"Deactivate all call barring settings?"</string>
<string name="callFailed_NetworkBusy" msgid="1068322087736565421">"Network is busy. Please try placing your call again later."</string>
- <string name="callFailed_NetworkCongested" msgid="3313449239735315125">"Network is congested. Contact your mobile operator for assistance."</string>
<string name="supp_service_notification_call_deflected" msgid="9195460512875330926">"Call deflected."</string>
<string name="supp_service_notification_call_forwarded" msgid="7818548630812124053">"Call forwarded."</string>
<string name="supp_service_notification_call_waiting" msgid="789154111899572489">"Call is waiting."</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 0384a80..3ef9c7c 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Private number"</string>
<string name="payphone" msgid="4793877574636445118">"Payphone"</string>
<string name="onHold" msgid="9035493194749959955">"On hold"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Message"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operator message"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI code started"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD code running…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI code cancelled"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Real-time text (RTT) call"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Allow messaging within a voice call"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT assists callers who are deaf, hard of hearing, have a speech disability or need more than voice alone.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Learn more</a>\n <br><br> – RTT calls are saved as a message transcript\n <br> – RTT is not available for video calls"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Note: RTT is not available while roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY off"</item>
<item msgid="3971695875449640648">"TTY full"</item>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 0384a80..3ef9c7c 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Private number"</string>
<string name="payphone" msgid="4793877574636445118">"Payphone"</string>
<string name="onHold" msgid="9035493194749959955">"On hold"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Message"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operator message"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI code started"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD code running…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI code cancelled"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Real-time text (RTT) call"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Allow messaging within a voice call"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT assists callers who are deaf, hard of hearing, have a speech disability or need more than voice alone.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Learn more</a>\n <br><br> – RTT calls are saved as a message transcript\n <br> – RTT is not available for video calls"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Note: RTT is not available while roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY off"</item>
<item msgid="3971695875449640648">"TTY full"</item>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 3a1fce3..ee5217a 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -77,9 +77,12 @@
<string name="voicemail" msgid="8693759337917898954">"Voicemail"</string>
<string name="voicemail_settings_with_label" msgid="152724978380748296">"Voicemail (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_abbreviated" msgid="2215592488517217448">"VM:"</string>
- <string name="make_and_receive_calls" msgid="1258596928285972166">"Make & receive calls"</string>
- <string name="smart_forwarding_settings_menu" msgid="3874243342391798449">"Smart Forwarding"</string>
- <string name="smart_forwarding_settings_menu_summary" msgid="8962247659470565059">"When one number isn\'t reachable, always forward calls to your other number"</string>
+ <!-- no translation found for make_and_receive_calls (1258596928285972166) -->
+ <skip />
+ <!-- no translation found for smart_forwarding_settings_menu (3874243342391798449) -->
+ <skip />
+ <!-- no translation found for smart_forwarding_settings_menu_summary (8962247659470565059) -->
+ <skip />
<string name="voicemail_notifications_preference_title" msgid="4019728578955102213">"Notifications"</string>
<string name="cell_broadcast_settings" msgid="8740238216690502563">"Emergency broadcasts"</string>
<string name="call_settings" msgid="6112441768261754562">"Call settings"</string>
@@ -252,15 +255,10 @@
<string name="roaming_enable" msgid="7331106985174381987">"Connect to data services when roaming"</string>
<string name="roaming_disable" msgid="1843417228755568110">"Connect to data services when roaming"</string>
<string name="roaming_reenable_message" msgid="6843814381576397939">"Data roaming is turned off. Tap to turn on."</string>
- <string name="roaming_enabled_message" msgid="7176375330428295945">"Roaming charges may apply. Tap to modify."</string>
<string name="roaming_notification_title" msgid="4749053220884743110">"Lost mobile data connection"</string>
- <string name="roaming_on_notification_title" msgid="5102274082214238655">"Data roaming is on"</string>
<string name="roaming_warning" msgid="1603164667540144353">"You may incur significant charges."</string>
<string name="roaming_check_price_warning" msgid="7497570906830902550">"Check with your network provider for pricing."</string>
<string name="roaming_alert_title" msgid="3654815360303826008">"Allow data roaming?"</string>
- <string name="limited_sim_function_notification_title" msgid="7611588665358096385">"Limited SIM functionality"</string>
- <string name="limited_sim_function_with_phone_num_notification_message" msgid="8629471534217382598">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> calls and data services may be blocked while using <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>."</string>
- <string name="limited_sim_function_notification_message" msgid="2820647701127014781">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> calls and data services may be blocked while using another SIM."</string>
<string name="data_usage_title" msgid="4042209259808900283">"App data usage"</string>
<string name="data_usage_template" msgid="8526428824844656364">"<xliff:g id="ID_1">%1$s</xliff:g> mobile data used <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="advanced_options_title" msgid="8074895510265488035">"Advanced"</string>
@@ -521,6 +519,7 @@
<string name="emergency_information_owner_hint" msgid="688331472291637149">"Owner"</string>
<string name="emergency_information_confirm_hint" msgid="4039012670779853030">"Tap again to view info"</string>
<string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Emergency call"</string>
+ <string name="emergency_dialpad_title" msgid="6052294225467269233">"Emergency calls only"</string>
<string name="single_emergency_number_title" msgid="4959203129714396515">"Emergency number"</string>
<string name="numerous_emergency_numbers_title" msgid="754158099451343898">"Emergency numbers"</string>
<string name="emergency_call_shortcut_hint" msgid="6506167229097004348">"Tap again to call <xliff:g id="EMERGENCY_NUMBER">%s</xliff:g>"</string>
@@ -644,8 +643,6 @@
<string name="callFailed_wifi_lost" msgid="5968076625137297184">"Wi-Fi connection lost. Call ended."</string>
<string name="dialFailed_low_battery" msgid="8760548177088774268">"Your video call cannot be placed due to low battery."</string>
<string name="callFailed_low_battery" msgid="4913582435905872616">"Video call ended due to low battery."</string>
- <string name="callFailed_emergency_call_over_wfc_not_available" msgid="4890063404231305951">"Emergency calls over Wi-Fi calling not available in this location."</string>
- <string name="callFailed_wfc_service_not_available_in_this_location" msgid="7616738479038819001">"Wi-Fi calling is not available in this location."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Change Voicemail PIN"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continue"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancel"</string>
@@ -759,7 +756,6 @@
<string name="call_barring_settings" msgid="80766145008623645">"Call barring settings"</string>
<string name="call_barring_deactivate_all_no_password" msgid="920902774366557311">"Deactivate all call barring settings?"</string>
<string name="callFailed_NetworkBusy" msgid="1068322087736565421">"Network is busy. Please try your call again later."</string>
- <string name="callFailed_NetworkCongested" msgid="3313449239735315125">"Network is congested. Contact your mobile operator for assistance."</string>
<string name="supp_service_notification_call_deflected" msgid="9195460512875330926">"Call deflected."</string>
<string name="supp_service_notification_call_forwarded" msgid="7818548630812124053">"Call forwarded."</string>
<string name="supp_service_notification_call_waiting" msgid="789154111899572489">"Call is waiting."</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index e43bba5..3cf55c4 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Número privado"</string>
<string name="payphone" msgid="4793877574636445118">"Teléfono público"</string>
<string name="onHold" msgid="9035493194749959955">"En espera"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Mensaje"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mensaje del proveedor"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Código de MMI iniciado"</string>
<string name="ussdRunning" msgid="485588686340541690">"Ejecutando código USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Código MMI cancelado"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Llamada de Texto en tiempo real (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Permitir la mensajería en las llamadas de voz"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"El RTT brinda asistencia a las personas sordas o hipoacúsicas, que tienen algún trastorno del habla o necesitan una transcripción además de la voz.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Más información</a>\n <br><br> - Las llamadas de RTT se guardan como las transcripciones de los mensajes\n <br> - El RTT no está disponible para las videollamadas"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Nota: La función RTT no está disponible en roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY desactivado"</item>
<item msgid="3971695875449640648">"TTY completo"</item>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index eb25286..07dfb11 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Número privado"</string>
<string name="payphone" msgid="4793877574636445118">"Teléfono público"</string>
<string name="onHold" msgid="9035493194749959955">"En espera"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Mensaje de <xliff:g id="MMICARRIER">%s</xliff:g>"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mensaje del operador"</string>
<string name="mmiStarted" msgid="6347869857061147003">"El código MMI se ha iniciado."</string>
<string name="ussdRunning" msgid="485588686340541690">"Código USSD en ejecución..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"El código MMI se ha cancelado."</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Llamada de texto en tiempo real (TTR)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Permitir mensajes en una llamada de voz"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"La función TTR (texto en tiempo real) ofrece asistencia a las personas sordas o con discapacidades auditivas, que tienen algún trastorno del habla o que necesitan una transcripción además de la voz para comunicarse.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Más información</a>\n <br><br> - Las llamadas de TTR se guardan como la transcripción de un mensaje.\n <br> - La función TTR no está disponible en videollamadas."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Nota: TTR no está disponible en itinerancia"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY desactivado"</item>
<item msgid="3971695875449640648">"TTY completo"</item>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 477e342..b16c7c1 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Varjatud number"</string>
<string name="payphone" msgid="4793877574636445118">"Telefoniautomaat"</string>
<string name="onHold" msgid="9035493194749959955">"Ootel"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) sõnum"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operaatori sõnum"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-kood käivitus"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-kood töötab ..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI-kood tühistatud"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Reaalajas teksti saatmise (RTT) kõne"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Häälkõnes sõnumside lubamine"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT aitab kurte, kuulmis- või kõnepuudega helistajaid või neid, kes vajavad lisaks häälele muud abi.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Lisateave</a>\n <br><br> – RTT-kõned salvestatakse sõnumi trankriptsioonina\n <br> – RTT pole saadaval videokõnede puhul"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Märkus. RTT pole rändluse ajal saadaval"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY väljas"</item>
<item msgid="3971695875449640648">"TTY-täisrežiim"</item>
@@ -673,7 +676,7 @@
<string name="mobile_data_activate_button" msgid="3682400969184405446">"LISA ANDMEMAHTU"</string>
<string name="mobile_data_activate_cancel_button" msgid="1708022171547398765">"TÜHISTA"</string>
<string name="clh_card_title_call_ended_txt" msgid="4072101334811753823">"Kõne lõpetati"</string>
- <string name="clh_callFailed_powerOff_txt" msgid="1049579267090569308">"Lennurežiim on sisse lülitatud"</string>
+ <string name="clh_callFailed_powerOff_txt" msgid="1049579267090569308">"Lennukirežiim on sisse lülitatud"</string>
<string name="clh_callFailed_simError_txt" msgid="7273306159809203315">"SIM-kaardile ei pääse juurde"</string>
<string name="clh_incall_error_out_of_service_txt" msgid="3974373603657193827">"Mobiilsidevõrk pole saadaval"</string>
<string name="clh_callFailed_unassigned_number_txt" msgid="4722164461846838251">"Probleem telefoninumbriga, mida püüate valida. Veakood 1."</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 556ec54..15d6904 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Zenbaki pribatua"</string>
<string name="payphone" msgid="4793877574636445118">"Telefono publikoa"</string>
<string name="onHold" msgid="9035493194749959955">"Zain"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) mezua"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operadorearen mezua"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI kodea hasi da"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD kodea abiarazten…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI kodea bertan behera utzi da"</string>
@@ -263,7 +265,7 @@
<string name="limited_sim_function_notification_message" msgid="2820647701127014781">"Baliteke <xliff:g id="CARRIER_NAME">%1$s</xliff:g> bidezko deiak eta datu-zerbitzuak blokeatuta egotea beste SIM txartel bat erabiltzean."</string>
<string name="data_usage_title" msgid="4042209259808900283">"Aplikazioak erabilitako datuak"</string>
<string name="data_usage_template" msgid="8526428824844656364">"Datuen <xliff:g id="ID_1">%1$s</xliff:g> erabili dira data hauen artean: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
- <string name="advanced_options_title" msgid="8074895510265488035">"Ezarpen aurreratuak"</string>
+ <string name="advanced_options_title" msgid="8074895510265488035">"Aurreratuak"</string>
<string name="carrier_settings_euicc" msgid="6714062862127226405">"Operadorea"</string>
<string name="keywords_carrier_settings_euicc" msgid="6861505396475991277">"operadorea, esim, esim txartela, sim, sim txartela, euicc, euicc txartela, aldatu operadoreak, aldatu operadorez, aldatu operadorea, gehitu operadorea, gehitu operadoreak"</string>
<string name="carrier_settings_euicc_summary" msgid="5115001942761995457">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g>: <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>"</string>
@@ -478,7 +480,7 @@
<string name="label_puk2_code" msgid="4688069961795341948">"Idatzi PUK2 kodea"</string>
<string name="fdn_enable_puk2_requested" msgid="4991074891459554705">"Pasahitza ez da zuzena. PIN2 kodea blokeatu egin da. Berriro saiatzeko, aldatu PIN2 kodea."</string>
<string name="puk2_requested" msgid="5831015200030161434">"Pasahitza ez da zuzena. SIM txartela blokeatu egin da. Idatzi PUK2 kodea."</string>
- <string name="puk2_blocked" msgid="3150263853077280049">"PUK2 kodea betirako blokeatu da."</string>
+ <string name="puk2_blocked" msgid="3150263853077280049">"PUK2 kodea betiko blokeatu da."</string>
<string name="pin2_attempts" msgid="720736232885011507">\n"<xliff:g id="NUMBER">%d</xliff:g> saiakera gelditzen zaizkizu."</string>
<string name="pin2_unblocked" msgid="7791600368153469078">"PIN2 kodea desblokeatu da"</string>
<string name="pin2_error_exception" msgid="1088689322248996699">"Sarearen edo SIM txartelaren errorea"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Deietan testua bidaltzeko eginbidea"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Baimendu mezuak bidali eta jasotzea ahots-deien barruan"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Deietan testua bidaltzeko eginbideak deitzaile gorrei, entzumen-arazoak dituztenei, hitz egiteko ezintasunen bat dutenei edota ahotsaz gain beste makuluren bat behar dutenei laguntzen die.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Lortu informazio gehiago</a>\n <br><br> - Deietan testua bidaltzeko eginbidearekin egindako deiak mezu-transkripzio gisa gordetzen dira.\n <br> - Deietan testua bidaltzeko eginbidea ez da bateragarria bideo-deiekin."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Oharra: Deietan testua bidaltzeko eginbidea ez dago erabilgarri ibiltaritzan"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY desaktibatuta"</item>
<item msgid="3971695875449640648">"TTY osoa"</item>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index d072880..c2e8a1c 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"شماره خصوصی"</string>
<string name="payphone" msgid="4793877574636445118">"تلفن عمومی"</string>
<string name="onHold" msgid="9035493194749959955">"در انتظار"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) پیام"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"پیام شرکت مخابراتی"</string>
<string name="mmiStarted" msgid="6347869857061147003">"کد MMI راهاندازی شد"</string>
<string name="ussdRunning" msgid="485588686340541690">"در حال اجرای کد USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"کد MMI لغو شد"</string>
@@ -496,7 +498,7 @@
<string name="notification_voicemail_no_vm_number" msgid="760963466895609716">"شماره پست صوتی ناشناس"</string>
<string name="notification_network_selection_title" msgid="4224455487793492772">"بدون سرویس"</string>
<string name="notification_network_selection_text" msgid="7550380440576731104">"شبکه انتخابی (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) دردسترس نیست"</string>
- <string name="incall_error_power_off" product="watch" msgid="2007450435656211658">"برای برقراری تماس، شبکه تلفن همراه را روشن کنید، حالت هواپیما یا بهینهسازی باتری را غیرفعال کنید."</string>
+ <string name="incall_error_power_off" product="watch" msgid="2007450435656211658">"برای برقراری تماس، شبکه تلفن همراه را روشن کنید، حالت هواپیما یا «بهینهسازی باتری» را غیرفعال کنید."</string>
<string name="incall_error_power_off" product="default" msgid="2947938060513306698">"برای برقراری تماس، حالت پرواز را خاموش کنید."</string>
<string name="incall_error_power_off_wfc" msgid="8711428920632416575">"برای برقرای تماس، حالت پرواز را خاموش کنید یا به شبکه بیسیم وصل شوید."</string>
<string name="incall_error_ecm_emergency_only" msgid="738708660612388692">"برای برقراری تماس غیراضطراری از حالت پاسخ تماس اضطراری خارج شوید."</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"تماس نوشتار همزمان (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"پیامرسانی در تماس صوتی مجاز است"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"«نوشتار همزمان» به تماس گیرندگان ناشنوا، دارای مشکل شنوایی، دارای ناتوانی گفتاری یا افرادی که به چیزی بیش از صدا نیاز دارند کمک میکند.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>بیشتر بدانید</a>\n <br><br> تماسهای «نوشتار همزمان» بهصورت ترانویسی پیام ذخیره میشود\n <br> «نوشتار همزمان» برای تماسهای ویدیویی دردسترس نیست"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"نکته: «نوشتار همزمان» در هنگام فراگردی دردسترس نیست"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY خاموش"</item>
<item msgid="3971695875449640648">"TTY پر است"</item>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index f01187c..83b9867 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Salainen numero"</string>
<string name="payphone" msgid="4793877574636445118">"Maksupuhelin"</string>
<string name="onHold" msgid="9035493194749959955">"Pidossa"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Viesti"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operaattorin viesti"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-koodi aloitettu"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-koodi käytössä..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI-koodi peruutettu"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"RTT-puhelu (puhelusta lähetettävä teksti)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Salli viestit äänipuheluissa"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT-toiminto auttaa kuuroja sekä käyttäjiä, joilla on kuulo‑ tai puhehäiriöitä tai jotka tarvitsevat muuta tukea pelkän puheen lisäksi.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Lisätietoja</a>\n <br><br> – RTT-puhelut tallennetaan litterointiviestinä.\n <br> – RTT ei ole käytettävissä videopuheluissa."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Huom. Puhelusta lähetettävä teksti (RTT) ei ole käytettävissä roaming-tilassa"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY pois käytöstä"</item>
<item msgid="3971695875449640648">"TTY täynnä"</item>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 0e09aac..a235f8c 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Numéro privé"</string>
<string name="payphone" msgid="4793877574636445118">"Cabine téléphonique"</string>
<string name="onHold" msgid="9035493194749959955">"En attente"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Message"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Message d\'opérateur"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Le code IHM a été lancé."</string>
<string name="ussdRunning" msgid="485588686340541690">"Exécution du code USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Code IHM annulé"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Appel texte en temps réel (TTR)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Autoriser l\'utilisation de la messagerie lors des appels vocaux"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"La fonctionnalité TTR aide les appelants qui sont sourds ou malentendants, qui ont un trouble de la parole ou pour qui la voix ne suffit pas.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>En savoir plus</a>\n <br><br> - Les appels TTR sont enregistrés en tant que transcriptions de messages\n <br> - La fonctionnalité TTR n\'est pas disponible pour les appels vidéo"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Remarque : Les messages TTR ne sont pas disponibles en itinérance"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY désactivé"</item>
<item msgid="3971695875449640648">"TTY complet"</item>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 27c4072..6689307 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Numéro privé"</string>
<string name="payphone" msgid="4793877574636445118">"Cabine téléphonique"</string>
<string name="onHold" msgid="9035493194749959955">"En attente"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Message (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Message de l\'opérateur"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Le code IHM a été lancé."</string>
<string name="ussdRunning" msgid="485588686340541690">"Exécution du code USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Code IHM annulé"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Appel texte en temps réel"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Autoriser l\'échange de messages pendant les appels vocaux"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"La fonctionnalité de texte en temps réel vient en aide aux personnes sourdes, malentendantes, qui ont un trouble de la parole, ou qui ont besoin d\'une transcription en plus de la voix.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>En savoir plus</a>\n <br><br> - Les appels texte en temps réel sont enregistrés sous forme transcrite\n <br> - Le mode texte en temps réel n\'est pas disponible pour les appels vidéo"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Remarque : La fonctionnalité de texte en temps réel n\'est pas disponible en itinérance"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Mode TTY désactivé"</item>
<item msgid="3971695875449640648">"TTY complet"</item>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 017e205..9d46820 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Número privado"</string>
<string name="payphone" msgid="4793877574636445118">"Teléfono público"</string>
<string name="onHold" msgid="9035493194749959955">"En espera"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Mensaxe"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mensaxe do operador"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Código MMI iniciado"</string>
<string name="ussdRunning" msgid="485588686340541690">"Código USSD en execución..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Código MMI cancelado"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Chamada RTT (texto en tempo real)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Permitir uso de mensaxes durante unha chamada de voz"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"A función RTT constitúe unha axuda para todos aqueles emisores de chamadas que padezan xordeira ou outros problemas auditivos, teñan algún trastorno da fala ou necesiten algo máis que a voz para comunicarse.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Máis información</a>\n <br><br> - As chamadas RTT gárdanse como transcricións de mensaxes\n <br> - Non se pode utilizar a función RTT nas videochamadas"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Nota: A función RTT non está dispoñible en itinerancia"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY desactivado"</item>
<item msgid="3971695875449640648">"TTY completo"</item>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 1d52f1e..37c1f5b 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"ખાનગી નંબર"</string>
<string name="payphone" msgid="4793877574636445118">"પેફોન"</string>
<string name="onHold" msgid="9035493194749959955">"હોલ્ડ પર"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) સંદેશ"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"કૅરિઅરનો સંદેશ"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI કોડ પ્રારંભ કર્યો"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD કોડ ચાલે છે…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI કોડ રદ કર્યો"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"રિઅલ-ટાઇમ ટેક્સ્ટ(RTT) કૉલ"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"વૉઇસ કૉલ અંતર્ગત સંદેશ મોકલવાની મંજૂરી આપો"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT બહેરા, સાંભળવા અને બોલવામાં મુશ્કેલી પડતી હોય અથવા વૉઇસ કરતાં પણ વધુ કંઈકની જરૂર હોય એવા કૉલરની સહાય કરે છે.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>વધુ જાણો</a>\n <br><br> - RTT કૉલને સંદેશ ટ્રાન્સક્રિપ્ટ તરીકે સાચવવામાં આવે છે\n <br> - RTT વીડિઓ કૉલ માટે ઉપલબ્ધ નથી"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"નોંધ: રોમિંગ વખતે RTT ઉપલબ્ધ નથી"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY બંધ"</item>
<item msgid="3971695875449640648">"TTY સંપૂર્ણ"</item>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 774dc44..155d308 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"निजी नंबर"</string>
<string name="payphone" msgid="4793877574636445118">"पे-फ़ोन"</string>
<string name="onHold" msgid="9035493194749959955">"होल्ड पर"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) मैसेज"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"मोबाइल और इंटरनेट सेवा देने वाली कंपनी का मैसेज"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI कोड प्रारंभ किया गया"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD कोड चल रहा है…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI कोड रद्द किया गया"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"(आरटीटी) कॉल से रीयल-टाइम में मैसेज भेजें"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"वॉइस कॉल में मैसेज भेजने की अनुमति दें"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"आरटीटी उन कॉल करने वालों की मदद करता है, जो सुन नहीं सकते हैं, ऊंचा सुनते हैं, जिन्हें बोलने में दिक्कत है या जिनके लिए सिर्फ़ आवाज़ काफ़ी नहीं होती.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>ज़्यादा जानें</a>\n <br><br> - आरटीटी कॉल, मैसेज लेख के रूप में सेव किए जाते हैं\n <br> - वीडियो कॉल के लिए आरटीटी उपलब्ध नहीं है"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"ध्यान दें: आरटीटी (रीयल-टाइम में मैसेज भेजना) की सुविधा रोमिंग के दौरान नहीं दी जाती"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY बंद"</item>
<item msgid="3971695875449640648">"TTY पूरा हुआ"</item>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 3aabb97..cf88f20 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Privatni broj"</string>
<string name="payphone" msgid="4793877574636445118">"Javna telefonska govornica"</string>
<string name="onHold" msgid="9035493194749959955">"Na čekanju"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) poruka"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Poruka operatera"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Pokrenut je MMI kôd"</string>
<string name="ussdRunning" msgid="485588686340541690">"Pokrenut je USSD kôd…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Otkazan je MMI kôd"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"RTT (tekst u stvarnom vremenu) poziv"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Omogućavanje slanja poruka u glasovnom pozivu"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT pomaže pozivateljima koji su gluhi, imaju oštećenje sluha, govornu manu ili im treba više od samo glasa.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Saznajte više</a>\n <br><br> – RTT pozivi spremaju se kao prijepis poruke\n <br> – RTT nije dostupan za videopozive"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Napomena: RTT nije dostupan u roamingu"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Isključen je TTY"</item>
<item msgid="3971695875449640648">"TTY je pun"</item>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 13076e3..7d0738e 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Magántelefonszám"</string>
<string name="payphone" msgid="4793877574636445118">"Nyilvános telefon"</string>
<string name="onHold" msgid="9035493194749959955">"Tartásban"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) üzenet"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Szolgáltatói üzenet"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-kód elindítva"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-kód futtatása..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI-kód megszakítva"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Valós idejű szöveg (RTT) típusú hívás"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Üzenetküldés engedélyezése a hangalapú hívásokban"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Az RTT funkció a siket, hallássérült, beszédzavaros vagy a hangalapú kommunikáción kívül más kommunikációt is igénylő hívóknak lehet segítségére.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>További információ.</a>\n <br><br> - Az RTT-hívásokat a rendszer üzenetátiratként menti.\n <br> - Az RTT funkció nem áll rendelkezésre videohívásokban."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Megjegyzés: az RTT nem áll rendelkezésre roaming közben"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY kikapcsolva"</item>
<item msgid="3971695875449640648">"Teljes TTY"</item>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 9394696..f0b6f25 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Գաղտնի համար"</string>
<string name="payphone" msgid="4793877574636445118">"Բջջային տերմինալ"</string>
<string name="onHold" msgid="9035493194749959955">"Սպասում"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Հաղորդագրություն (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Հաղորդագրություն օպերատորից"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI կոդը մեկնարկել է"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD կոդը գործարկվում է..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI կոդը չեղարկված է"</string>
@@ -141,7 +143,7 @@
<string name="disable" msgid="4678348128118573672">"Անջատել"</string>
<string name="change_num" msgid="239476305819844391">"Նորացնել"</string>
<string-array name="clir_display_values">
- <item msgid="5560134294467334594">"Լռելյայն ցանց"</item>
+ <item msgid="5560134294467334594">"Կանխադրված ցանց"</item>
<item msgid="7876195870037833661">"Թաքցնել համարը"</item>
<item msgid="1108394741608734023">"Ցուցադրել համարը"</item>
</string-array>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"RTT զանգ (հաղորդագրություն զանգի միջոցով)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Թույլատրել հաղորդագրությունների ուղարկումն ու ստացումը զանգի միջոցով"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT-ն օգնում է այն բաժանորդներին, ովքեր լսողության և խոսքի դժվարություններ ունեն, կամ ովքեր լոկ ձայնով չեն բավարարվում:<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Իմանալ ավելին</a>\n <br><br> – RTT զանգերը պահվում են որպես հաղորդագրության տառադրումներ\n <br> – RTT-ն հասանելի չէ տեսազանգի ժամանակ"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"RTT գործառույթը հասանելի չէ ռոումինգում"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY-ն անջատված է"</item>
<item msgid="3971695875449640648">"Լիարժեք TTY"</item>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 20f265e..5c91d7e 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Nomor pribadi"</string>
<string name="payphone" msgid="4793877574636445118">"Telepon Umum"</string>
<string name="onHold" msgid="9035493194749959955">"Ditangguhkan"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Pesan (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Pesan Operator"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Kode MMI dimulai"</string>
<string name="ussdRunning" msgid="485588686340541690">"Kode USSD sedang berjalan…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Kode MMI dibatalkan"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Panggilan pesan real-time (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Izinkan pengiriman pesan pada saat panggilan suara berlangsung"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT membantu penelepon yang tunarungu, kesulitan mendengar, memiliki gangguan berbicara, atau memerlukan lebih dari sekadar suara.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Pelajari lebih lanjut</a>\n <br><br> - Panggilan RTT disimpan sebagai transkrip pesan\n <br> - RTT tidak tersedia untuk video call"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Catatan: RTT tidak tersedia saat melakukan roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY Nonaktif"</item>
<item msgid="3971695875449640648">"TTY Penuh"</item>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index f308769..8d5b87a 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Leyninúmer"</string>
<string name="payphone" msgid="4793877574636445118">"Símasjálfsali"</string>
<string name="onHold" msgid="9035493194749959955">"Í bið"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Skilaboð"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Skilaboð frá símafyrirtæki"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-kóðaskipun ræst"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-kóðaskipun í gangi…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Hætt við MMI-kóðaskipun"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"RTT-símtal (með texta í rauntíma)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Leyfa skilaboðasendingar í símtölum"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT (símtöl með texta í rauntíma) aðstoðar heyrnarlausa og fólk með heyrnarskerðingu eða skerta talgetu og þá sem þurfa að styðja sig við meira en bara hljóð.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Frekari upplýsingar</a>\n <br><br> - RTT-símtöl eru vistuð í umrituðum skilaboðum\n <br> - RTT er ekki í boði fyrir myndsímtöl"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Athugaðu: RTT er ekki í boði í reiki"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Slökkt á TTY"</item>
<item msgid="3971695875449640648">"TTY að fullu"</item>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 446cb77..da7a547 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Numero privato"</string>
<string name="payphone" msgid="4793877574636445118">"Cabina telefonica"</string>
<string name="onHold" msgid="9035493194749959955">"In attesa"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Messaggio (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Messaggio dell\'operatore"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Codice MMI avviato"</string>
<string name="ussdRunning" msgid="485588686340541690">"Esecuzione codice USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Codice MMI annullato"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Chiamate con Real-time text (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Consenti l\'utilizzo di messaggi durante le chiamate vocali"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT aiuta i chiamanti con disabilità uditive o del linguaggio e le persone che hanno bisogno di un supporto scritto oltre alla voce.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Ulteriori informazioni</a>\n <br><br> - Le chiamate RTT vengono salvare come una trascrizione in messaggi\n <br> - RTT non è disponibile per le videochiamate"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Nota: la funzionalità RTT non è disponibile in roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY disattivato"</item>
<item msgid="3971695875449640648">"TTY completo"</item>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 39e5803..d0db663 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"מספר פרטי"</string>
<string name="payphone" msgid="4793877574636445118">"טלפון ציבורי"</string>
<string name="onHold" msgid="9035493194749959955">"בהמתנה"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) הודעה"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"הודעה מהספק הסלולרי"</string>
<string name="mmiStarted" msgid="6347869857061147003">"קוד MMI הופעל"</string>
<string name="ussdRunning" msgid="485588686340541690">"קוד USSD פועל…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"קוד MMI מבוטל"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"שיחת RTT (טקסט בזמן אמת)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"אפשר לשלוח הודעות טקסט בזמן שיחה"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT (טקסט בזמן אמת) היא תכונת נגישות שעוזרת לחרשים, לקויי שמיעה, לקויי דיבור או אנשים שלא יכולים להסתפק רק בשיחות קוליות.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>למידע נוסף</a>\n <br><br> - שיחות RTT מתומללות ונשמרות כהודעות\n <br> - אי אפשר להשתמש ב-RTT לשיחות וידאו"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"הערה: אי אפשר להשתמש ב-RTT בזמן נדידה"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY כבוי"</item>
<item msgid="3971695875449640648">"TTY מלא"</item>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 7d0398f..f977fdd 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"非通知設定"</string>
<string name="payphone" msgid="4793877574636445118">"公衆電話"</string>
<string name="onHold" msgid="9035493194749959955">"保留中"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>)メッセージ"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"携帯通信会社独自のメッセージ"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMIコードの開始"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSDコードを実行中..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMIコードはキャンセルされました"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"リアルタイム テキスト(RTT)通話"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"音声通話中のメッセージ送信を許可する"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT は、聴覚障害や言語障害があるなど、音声だけではコミュニケーションを取ることが困難なユーザーをサポートする機能です。<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>詳細</a>\n <br><br> - RTT 通話は文字に変換して保存されます\n <br> - RTT はビデオ通話ではご利用いただけません"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"注: ローミング中に RTT を利用することはできません"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY OFF"</item>
<item msgid="3971695875449640648">"TTY フル"</item>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 044d458..f3f28bf 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"დაფარული ნომერი"</string>
<string name="payphone" msgid="4793877574636445118">"გადახდის ტელეფონი"</string>
<string name="onHold" msgid="9035493194749959955">"შეყოვნების რეჟიმში"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) შეტყობინება"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"ოპერატორის შეტყობინება"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI კოდი დაიწყო"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD კოდი გაშვებულია…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI კოდი გაუქმდა"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"ზარი შეტყობინებით რეალურ დროში (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"შეტყობინებების დაშვება ხმოვან ზარში"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT დახმარებას უწევს ყრუ, სმენადაქვეითებულ, შეზღუდული მეტყველების მქონე აბონენტებს, ან მათ, ვისაც სჭირდება მეტი, ვიდრე მხოლოდ ხმაა.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>შეიტყვეთ მეტი</a>\n <br><br> — RTT ზარები ინახება შეტყობინების ტრანსკრიპტის სახით\n <br> — RTT არ არის ხელმისაწვდომი ვიდეოზარებისთვის"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"შენიშვნა: RTT მიუწვდომელია როუმინგის დროს"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY გამორთულია"</item>
<item msgid="3971695875449640648">"TTY სრული"</item>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 5ae3759..e10aec1 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Жеке нөмір"</string>
<string name="payphone" msgid="4793877574636445118">"Автомат-телефон"</string>
<string name="onHold" msgid="9035493194749959955">"Күтуде"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Хабар"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Оператордың хабары"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI коды басталды"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD коды қосулы…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI коды жарамсыздандырылған"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Хабар жіберу функциясы бар қоңырау (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Дауыстық қоңырау кезінде хабар жіберу мүмкіндігін қосу"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT функциясы керең немесе есту не сөйлеу қабілеті төмен адамдарға көмек ретінде не дауысқа қосымша функциялар қажет болғанда қолданылады. <xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>Толығырақ ақпарат\n RTT қоңыраулары хабар транскрипциясы ретінде сақталады\nRTT функциясы бейне қоңыраулар үшін қолданылмайды"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Ескертпе: роумингте RTT мүмкіндігі қолжетімсіз"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Tелетайп өшірулі"</item>
<item msgid="3971695875449640648">"Tелетайп толық функциялы"</item>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 1182d66..aa037d2 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"លេខឯកជន"</string>
<string name="payphone" msgid="4793877574636445118">"ទូរស័ព្ទសាធារណៈ"</string>
<string name="onHold" msgid="9035493194749959955">"រង់ចាំ"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"សារ (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"សារក្រុមហ៊ុនសេវាទូរសព្ទ"</string>
<string name="mmiStarted" msgid="6347869857061147003">"បានចាប់ផ្ដើមកូដ MMI"</string>
<string name="ussdRunning" msgid="485588686340541690">"កូដ USSD កំពុងដំណើរការ…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"បានបោះបង់កូដ MMI"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"ការហៅតាមសារជាអក្សរក្នុងពេលជាក់ស្ដែង"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"អនុញ្ញាតការផ្ញើសារនៅក្នុងការហៅជាសំឡេង"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT ជួយអ្នកហៅទូរសព្ទដែលថ្លង់ ពិបាកក្នុងការស្ដាប់ មិនអាចនិយាយបាន ឬមានតម្រូវការក្រៅពីសំឡេង។<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>ស្វែងយល់បន្ថែម</a>\n <br><br> - ការហៅទូរសព្ទតាម RTT ត្រូវបានរក្សាទុកជាប្រតិចារឹកសារ\n <br> - RTT មិនមានសម្រាប់ការហៅជាវីដេអូទេ"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"ចំណាំ៖ RTT មិនអាចប្រើបានទេ ពេលរ៉ូមីង"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"បិទ TTY"</item>
<item msgid="3971695875449640648">"TTY ពេញ"</item>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 87b5fba..d8592bd 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"ಖಾಸಗಿ ಸಂಖ್ಯೆ"</string>
<string name="payphone" msgid="4793877574636445118">"ಪೇಫೋನ್"</string>
<string name="onHold" msgid="9035493194749959955">"ತಡೆಹಿಡಿಯಲಾಗಿದೆ"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) ಸಂದೇಶ"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"ವಾಹಕದ ಸಂದೇಶ"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI ಕೋಡ್ ಪ್ರಾರಂಭಿಸಲಾಗಿದೆ"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD ಕೋಡ್ ಚಾಲನೆಯಲ್ಲಿದೆ…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI ಕೋಡ್ ರದ್ದು ಮಾಡಲಾಗಿದೆ"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"ನೈಜ-ಸಮಯ ಪಠ್ಯ (RTT) ಕರೆ"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"ಧ್ವನಿ ಕರೆಯ ಒಳಗೆ ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಗೆ ಅನುಮತಿಸಿ"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"ಕಿವುಡರು, ಆಲಿಸುವಿಕೆಯ ದೋಷಗಳನ್ನು ಹೊಂದಿದವರು, ಮಾತನಾಡುವಿಕೆಯಲ್ಲಿ ದೋಷಗಳನ್ನು ಹೊಂದಿದವರು ಅಥವಾ ಧ್ವನಿ ಮೀರಿ ಬೇರೆ ರೀತಿಯಲ್ಲಿ ಕರೆ ಮಾಡಲು ಕಠಿಣರಾಗಿರುವವರಿಗೆ RTT ಮೋಡ್ ಸಹಾಯ ಮಾಡುತ್ತದೆ.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</a>\n <br><br> - RTT ಕರೆಗಳನ್ನು ಸಂದೇಶ ಪ್ರತಿಲಿಪಿಗಳಂತೆ ಉಳಿಸಲಾಗಿದೆ \n <br> - ವೀಡಿಯೊ ಕರೆಗಳಿಗೆ RTT ಲಭ್ಯವಿಲ್ಲ"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"ಗಮನಿಸಿ: ರೋಮಿಂಗ್ನಲ್ಲಿ RTT ಲಭ್ಯವಿಲ್ಲ"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY ಆಫ್"</item>
<item msgid="3971695875449640648">"TTY ಪೂರ್ಣ"</item>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 62dcd5f..ae4b919 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"비공개 번호"</string>
<string name="payphone" msgid="4793877574636445118">"공중전화"</string>
<string name="onHold" msgid="9035493194749959955">"대기 중"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) 메시지"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"이동통신사 메시지"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI 코드 시작됨"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD 코드 실행 중..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI 코드 취소됨"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"실시간 문자 메시지(RTT) 통화"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"음성 통화 중 메시지 허용"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT는 청각 장애, 난청, 언어 장애가 있거나 음성 이외의 의사소통 수단이 필요한 발신자에게 도움이 됩니다.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>자세히 알아보기</a>\n <br><br> - RTT 통화는 메시지 스크립트로 저장됩니다.\n <br> - 화상 통화에서는 RTT를 사용할 수 없습니다."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"참고: 로밍 중에는 RTT를 사용할 수 없습니다."</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY 사용 안함"</item>
<item msgid="3971695875449640648">"TTY 전체"</item>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index c135efa..1318001 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -26,6 +26,8 @@
<string name="private_num" msgid="6713286113000232309">"Купуя номер"</string>
<string name="payphone" msgid="4793877574636445118">"Таксофон"</string>
<string name="onHold" msgid="9035493194749959955">"Күтүлүүдө"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Билдирүү"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Байланыш операторунун билдирүүсү"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI код иштетилди"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD коду иштеп жатат…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI код жокко чыгарылды"</string>
@@ -560,6 +562,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Чалуу учурунда анык убакыттагы билдирүү (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Үн чалуунун учурунда жазышууга уруксат берүү"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT функциясы угуу жана сүйлөө жөндөмдүүлүгү бузулган адамдарга арналат.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Кеңири маалымат</a>\n <br><br> - RTT функциясында чалуулар транскрипциялар катары сакталат\n <br> - RTT функациясы видео чалууда жеткиликсиз болот"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Эскертүү: Роуминг учурунда RTT жеткиликсиз"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Телетайп түзмөгү өчүк"</item>
<item msgid="3971695875449640648">"Телетайп түзмөгү толуп калды"</item>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 2d37e92..3efa439 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"ເບີສ່ວນໂຕ"</string>
<string name="payphone" msgid="4793877574636445118">"ຕູ້ໂທລະສັບສາທາລະນະ"</string>
<string name="onHold" msgid="9035493194749959955">"ພັກສາຍຊົ່ວຄາວ"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) ຂໍ້ຄວາມ"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"ຂໍ້ຄວາມຜູ້ໃຫ້ບໍລິການ"</string>
<string name="mmiStarted" msgid="6347869857061147003">"ເລີ່ມລະຫັດ MMI ແລ້ວ"</string>
<string name="ussdRunning" msgid="485588686340541690">"ກຳລັງແລ່ນລະຫັດ USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"ຍົກເລີກລະຫັດ MMI ແລ້ວ"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"ການໂທ Real-time text (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"ອະນຸຍາດໃຫ້ສົ່ງຂໍ້ຄວາມພາຍໃນການໂທສຽງໄດ້"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT ຈະຊ່ວຍຜູ້ໂທທີ່ຫູໜວກ, ມີບັນຫາໃນການໄດ້ຍິນ, ຂາດຄວາມສາມາດໃນການເວົ້າ ຫຼື ຕ້ອງການຫຼາຍກວ່າສຽງ.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>ສຶກສາເພີ່ມເຕີມ</a>\n <br><br> - ການໂທ RTT ຈະຖືກບັນທຶກເປັນການຖອດຂໍ້ຄວາມ\n <br> - RTT ບໍ່ສາມາດໃຊ້ກັບການໂທວິດີໂອໄດ້"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"ໝາຍເຫດ: ບໍ່ສາມາດໃຊ້ RTT ໃນເວລາໂຣມມິງໄດ້"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY ປິດ"</item>
<item msgid="3971695875449640648">"TTY ເຕັມ"</item>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 26a9686..1f72eaa 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Privatus numeris"</string>
<string name="payphone" msgid="4793877574636445118">"Taksofonas"</string>
<string name="onHold" msgid="9035493194749959955">"Sulaikyta"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"„<xliff:g id="MMICARRIER">%s</xliff:g>“ pranešimas"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operatoriaus pranešimas"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Paleistas MMI kodas"</string>
<string name="ussdRunning" msgid="485588686340541690">"Paleistas USSD kodas..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Atšauktas MMI kodas"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Tikralaikių teksto pranešimų (RTT) skambutis"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Leisti susirašinėti dalyvaujant balso skambutyje"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT padeda skambintojams, kurie yra kurti, neprigirdintys, sunkiai kalba arba kuriems reikia ne tik kalbėti.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Sužinokite daugiau</a>\n <br><br> – RTT skambučiai išsaugomi kaip pranešimų nuorašai\n <br> – RTT paslauga nepasiekiama dalyvaujant vaizdo skambučiuose"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Pastaba: RTT paslauga nepasiekiama, kai naudojamas tarptinklinis ryšys"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY išjungta"</item>
<item msgid="3971695875449640648">"TTY pilnas"</item>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index a327ff3..f7ccbf0 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Privāts numurs"</string>
<string name="payphone" msgid="4793877574636445118">"Maksas tālrunis"</string>
<string name="onHold" msgid="9035493194749959955">"Aizturēts"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Ziņojums (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mobilo sakaru operatora ziņojums"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI kods ir startēts."</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD kods darbojas…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI kods ir atcelts"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Reāllaika teksta (RTT) zvans"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Atļaut ziņojumapmaiņu balss zvanā"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT funkcionalitāte palīdz nedzirdīgiem un vājdzirdīgiem zvanītājiem, kā arī zvanītājiem, kuriem ir runas traucējumi vai ir nepieciešama ne tikai balss skaņa.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Uzzināt vairāk</a>\n <br><br> - RTT zvani tiek saglabāti ziņojumu transkripcijas formātā.\n <br> - RTT funkcionalitāte nav pieejama videozvaniem."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Piezīme. RTT nav pieejams viesabonēšanas laikā."</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Teletaips ir izslēgts"</item>
<item msgid="3971695875449640648">"Viss teletaips"</item>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 98caf27..300ae1e 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Приватен број"</string>
<string name="payphone" msgid="4793877574636445118">"Говорница"</string>
<string name="onHold" msgid="9035493194749959955">"На чекање"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Порака"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Порака од оператор"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI кодот е стартуван"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD кодот се извршува..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI кодот е откажан"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Повик со „Текст во реално време“ (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Дозволете пораки во текот на гласовен повик"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Функцијата RTT им помага на повикувачи коишто се глуви, слабо слушаат, имаат говорна мана или пак, им е потребно многу повеќе од глас.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Дознајте повеќе</a>\n <br><br> - Повиците со RTT се зачувуваат како препис на порака\n <br> - Функцијата RTT не е достапна за видеоповици"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Напомена: RTT не е достапна во роаминг"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY исклучени"</item>
<item msgid="3971695875449640648">"TTY целосни"</item>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 932857b..3db3bd3 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"സ്വകാര്യ നമ്പർ"</string>
<string name="payphone" msgid="4793877574636445118">"പണം നൽകി ഉപയോഗിക്കുന്ന ഫോൺ"</string>
<string name="onHold" msgid="9035493194749959955">"ഹോള്ഡിലാണ്"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) സന്ദേശം"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"സേവനദാതാവിന്റെ സന്ദേശം"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI കോഡ് ആരംഭിച്ചു"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD കോഡ് പ്രവർത്തിക്കുന്നു…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI കോഡ് റദ്ദാക്കി"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"തത്സമയ ടെക്സ്റ്റ്(RTT) കോൾ"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"വോയ്സ് കോളിൽ സന്ദേശമയയ്ക്കൽ അനുവദിക്കുക"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"ബധിരർ, കേൾവി ശക്തി കുറഞ്ഞവർ, സംഭാഷണ വൈകല്യമുള്ളവർ അല്ലെങ്കിൽ ശബ്ദത്തിന് പുറമേ മറ്റ് സഹായവും ആവശ്യമുള്ള, വിളിക്കുന്ന ആളുകളെ RTT സഹായിക്കുന്നു.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>കൂടുതലറിയുക</a>\n <br><br> - RTT കോളുകൾ സന്ദേശ ട്രാൻസ്ക്രിപ്റ്റായി സംരക്ഷിക്കുന്നു\n <br> - വീഡിയോ കോളുകൾക്കായി RTT ലഭ്യമല്ല"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"കുറിപ്പ്: റോമിംഗിലായിരിക്കുമ്പോൾ RTT ലഭ്യമല്ല"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY ഓഫാണ്"</item>
<item msgid="3971695875449640648">"TTY പൂർണ്ണം"</item>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 1063326..78f42dc 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Нууцлагдсан дугаар"</string>
<string name="payphone" msgid="4793877574636445118">"Payphone"</string>
<string name="onHold" msgid="9035493194749959955">"Хүлээлгэнд"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Мессеж"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Оператор компанийн мессеж"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI код эхэллээ"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD код ажиллаж байна…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI код цуцлагдсан"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Шууд мессежлэх (RTT) дуудлага"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Дуудлагын дотор зурвас бичихийг зөвшөөрөх"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT нь дүлий, хатуу чихтэй, хэл ярианы хөгжлийн бэрхшээлтэй, эсвэл хэн нэгний тусламжтай ярьдаг дуудлага хийгчдэд тусладаг.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Дэлгэрэнгүй үзэх</a>\n <br><br> - RTT дуудлага нь зурвасын сийрүүлэг хэлбэрээр хадгалагдана\n <br> - RTT нь видео дуудлага хийхэд боломжгүй"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Санамж: RTT (Тухайн агшины текст) роуминг үйлчилгээний үед боломжгүй байна"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY Унтраасан"</item>
<item msgid="3971695875449640648">"TTY Дүүрэн"</item>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 99f9ecb..584e35e 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"खाजगी नंबर"</string>
<string name="payphone" msgid="4793877574636445118">"सार्वजनिक फोन"</string>
<string name="onHold" msgid="9035493194749959955">"होल्ड वर"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) मेसेज"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"वाहक मेसेज"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI कोड प्रारंभ केला"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD कोड चालू…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI कोड रद्द केला"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"रीअल-टाइम टेक्स्ट (RTT) कॉल"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"व्हॉइस कॉल करताना मेसेजिंग करू शकतो"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT अशा कॉल करणार्यांना साहाय्य करते, ज्यांना बहिरेपणा आहे, ज्यांना कमी ऐकू येते किंवा बोलताना अडखळतात किंवा ज्यांना फक्त आवाज पुरेसा नसतो.<br>a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>अधिक जाणून घ्या<a>\n <br/> - RTT cकॉल मेसेज प्रतिलेख म्हणून सेव्ह केले आहेत\n <br/> - RTT व्हिडिओ कॉलसाठी उपलब्ध नाही"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"टीप: रोमिंगमध्ये RTT उपलब्ध नाही"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY बंद"</item>
<item msgid="3971695875449640648">"TTY पूर्ण"</item>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index f310890..5f3352e 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Nombor peribadi"</string>
<string name="payphone" msgid="4793877574636445118">"Telefon Awam"</string>
<string name="onHold" msgid="9035493194749959955">"Ditunda"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Mesej (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mesej Pembawa"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Kod MMI dimulakan"</string>
<string name="ussdRunning" msgid="485588686340541690">"Kod USSD dijalankan..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Kod MMI dibatalkan"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Panggilan teks masa nyata (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Benarkan pemesejan dalam panggilan suara"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Pemanggil dibantu RTT yang pekak, kurang pendengaran, mengalami kesukaran bertutur atau memerlukan ciri selain suara.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Ketahui lebih lanjut</a>\n <br><br> - Panggilan RTT disimpan sebagai transkrip mesej\n <br> - RTT tidak tersedia untuk panggilan video"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Nota: RTT tidak tersedia semasa dalam perayauan"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY Dimatikan"</item>
<item msgid="3971695875449640648">"TTY Penuh"</item>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index c73d7e0..9620851 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"လျို့ဝှက် နံပါတ်"</string>
<string name="payphone" msgid="4793877574636445118">"ငွေပေးရသည့်ဖုန်း"</string>
<string name="onHold" msgid="9035493194749959955">"ခဏ ကိုင်ထားစဉ်"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) မက်ဆေ့ဂျ်"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"ဖုန်းလိုင်းဝန်ဆောင်မှု မက်ဆေ့ဂျ်"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMIကုတ်နံပါတ်ကို စတင်ပြီးပါပြီ"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD ကုဒ် လုပ်ဆောင်နေပါသည်…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMIကုတ်နံပါတ်ကို ပယ်ဖျက်ပြီးပါပြီ"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"အချိန်နှင့်တစ်ပြေးညီ စာသား(RTT) ခေါ်ဆိုမှု"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"ဖုန်းပြောနေစဉ် မက်ဆေ့ဂျ်ပို့ခွင့်ပြုပါ"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT သည် နားမကြားသူ၊ နားလေးသူ၊ စကားချို့ယွင်းသူ (သို့) အသံတစ်မျိုးတည်းထက် ပိုမို၍ လိုအပ်သူများကို ကူညီပေးပါသည်။<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>ပိုမိုလေ့လာရန်</a>\n <br><br> - RTT ခေါ်ဆိုမှုများကို မက်ဆေ့ဂျ်စာသားမှတ်တမ်းအဖြစ် သိမ်းဆည်းပါသည်\n <br> - RTT ကို ဗီဒီယိုခေါ်ဆိုမှုများအတွက် အသုံးမပြုနိုင်ပါ"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"သတိပြုရန် - ပြင်ပကွန်ရက်နှင့် ချိတ်ဆက်ထားစဉ် RTT ကို အသုံးမပြုနိုင်ပါ"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY ပိတ်ထားသည်"</item>
<item msgid="3971695875449640648">"TTY အပြည့်"</item>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index a8c8f18..613f5a9 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Hemmelig nummer"</string>
<string name="payphone" msgid="4793877574636445118">"Telefonkiosk"</string>
<string name="onHold" msgid="9035493194749959955">"Parkert"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) melding"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operatørmelding"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-kode påbegynt"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-kode kjører…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI-kode avbrutt"</string>
@@ -521,7 +523,7 @@
<string name="incall_error_supp_service_hold" msgid="7967020511232222078">"Kan ikke sette samtaler på vent."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="1782466780452640089">"Koble til et trådløst nettverk for å ringe."</string>
<string name="incall_error_promote_wfc" msgid="106510757624022064">"Slå på telefonanrop via Wi-Fi for å ringe."</string>
- <string name="emergency_information_hint" msgid="399011533038204351">"Opplysninger for nødstilfeller"</string>
+ <string name="emergency_information_hint" msgid="399011533038204351">"Nødinformasjon"</string>
<string name="emergency_information_owner_hint" msgid="688331472291637149">"Eier"</string>
<string name="emergency_information_confirm_hint" msgid="4039012670779853030">"Trykk på nytt for å se informasjon"</string>
<string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Nødanrop"</string>
@@ -561,6 +563,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Sanntidstekst-anrop (STT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Tillat meldingsutveksling i talesamtaler"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"STT er til hjelp for brukere som er døve, tunghørte, har talefunksjonshemning eller trenger mer enn bare tale.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Finn ut mer</a>\n <br><br> – STT-anrop lagres som meldingstranskripsjoner\n <br> – STT er ikke tilgjengelig for videoanrop"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Merk: RTT er ikke tilgjengelig ved roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY av"</item>
<item msgid="3971695875449640648">"TTY full"</item>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 4f2e969..cc1c0a2 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"निजी नम्बर"</string>
<string name="payphone" msgid="4793877574636445118">"पेफोन"</string>
<string name="onHold" msgid="9035493194749959955">"होल्डमा"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) सन्देश"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"सेवा प्रदायकको सन्देश"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI कोड सुरु भयो"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD कोड चल्दै..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI कोड रद्द गरियो।"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"द्रुत पाठ सन्देश (RTT) कल"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"भ्वाइस कलभित्रै सन्देश प्रवाह गर्ने अनुमति दिनुहोस्"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT ले बहिरा, सुन्नमा कठिन हुने, बोल्न नसक्ने र आवाज मात्र नभई कल गर्दा थप कुराहरू चाहिने मान्छेहरूलाई सहायता गर्छ!<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>थप जान्नुहोस्</a>\n <br><br> - RTT कलहरूलाई सन्देशसम्बन्धी ट्रान्सक्रिप्टका रूपमा सुरक्षित गरिन्छ\n <br> - RTT भिडियो कलहरूमा उपलब्ध छैन"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"टिपोट: रोमिङमा हुँदा RTT उपलब्ध हुँदैन"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY बन्द"</item>
<item msgid="3971695875449640648">"TTY भरी"</item>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 187ee62..769b41e 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Privénummer"</string>
<string name="payphone" msgid="4793877574636445118">"Telefooncel"</string>
<string name="onHold" msgid="9035493194749959955">"In de wacht"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Bericht (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Bericht van provider"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-code gestart"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-code uitvoeren..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI-code geannuleerd"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Realtime tekstoproep (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Berichten in een audiogesprek toestaan"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT helpt bellers die doof of slechthorend zijn, een spraakbeperking hebben of meer dan alleen een stem nodig hebben.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Meer informatie</a>\n <br><br> - RTT-gesprekken worden opgeslagen als berichttranscript.\n <br> - RTT is niet beschikbaar voor videogesprekken"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Let op: RTT is niet beschikbaar tijdens roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY uit"</item>
<item msgid="3971695875449640648">"TTY vol"</item>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 19de67a..9256b98 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"ବ୍ୟକ୍ତିଗତ ନମ୍ବର୍"</string>
<string name="payphone" msgid="4793877574636445118">"ପେ-ଫୋନ୍"</string>
<string name="onHold" msgid="9035493194749959955">"ହୋଲ୍ଡରେ ଅଛି"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) ମେସେଜ୍"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"ବାହକ ମେସେଜ୍"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI କୋଡ୍କୁ ଆରମ୍ଭ କରାଯାଇଛି"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD କୋଡ୍ ରନ୍ କରୁଛି…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI କୋଡ୍କୁ କ୍ୟାନ୍ସଲ୍ କରାଯାଇଛି"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"ରିଅଲ୍-ଟାଇମ୍ ଟେକ୍ସଟ୍ (RTT) କଲ୍"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"ଭଏସ୍ କଲ୍ କରିବା ମଧ୍ୟରେ ମେସେଜ୍ କରିବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT ସେହି କଲର୍ମାନଙ୍କୁ ସହାୟତା କରିଥାଏ, ଯେଉଁମାନେ ବଧିର, କ୍ଷୀଣ ଶ୍ରବଣଶକ୍ତି, ମୂକ କିମ୍ବା ଭଏସ୍ ଅପେକ୍ଷା ଅଧିକ କିଛି ଆବଶ୍ୟକ କରନ୍ତି। <br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>ଅଧିକ ଜାଣନ୍ତୁ</a>\n <br><br> - ମେସେଜ୍ ଟ୍ରାନସ୍କ୍ରିପ୍ଟ ଭାବେ RTT କଲ୍ ସେଭ୍ ହୋଇଛି\n <br> - ଭିଡିଓ କଲ୍ ପାଇଁ RTT ଉପଲବ୍ଧ ନାହିଁ"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"ଧ୍ୟାନ ଦିଅନ୍ତୁ: ରୋମିଂ ସମୟରେ RTT ଉପଲବ୍ଧ ନୁହେଁ"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY ବନ୍ଦ ଅଛି"</item>
<item msgid="3971695875449640648">"TTY ପୂର୍ଣ୍ଣ"</item>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index b691882..faecece 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"ਨਿੱਜੀ ਨੰਬਰ"</string>
<string name="payphone" msgid="4793877574636445118">"ਪੇਫੋਨ"</string>
<string name="onHold" msgid="9035493194749959955">"ਹੋਲਡ ਤੇ"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) ਸੁਨੇਹਾ"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"ਕੈਰੀਅਰ ਸੁਨੇਹਾ"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI ਕੋਡ ਚਾਲੂ ਕੀਤਾ"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD ਕੋਡ ਚੱਲ ਰਿਹਾ ਹੈ…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI ਕੋਡ ਰੱਦ ਕੀਤਾ"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"ਨਾਲ-ਦੀ-ਨਾਲ ਦਿਸਦੀ ਲਿਖਤ (RTT) ਵਾਲੀ ਕਾਲ"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"ਕਿਸੇ ਵੌਇਸ ਕਾਲ ਦੌਰਾਨ ਸੁਨੇਹਾ ਭੇਜਣ ਦਿਓ"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT ਅਜਿਹੇ ਕਾਲ ਕਰਨ ਵਾਲੇ ਲੋਕਾਂ ਦੀ ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ ਜੋ ਬੋਲੇ, ਘੱਟ ਸੁਣਨ ਵਾਲੇ, ਬੋਲਣ ਵਿੱਚ ਅਸਮਰਥ ਜਾਂ ਜਿਨ੍ਹਾਂ ਲਈ ਸਿਰਫ਼ ਅਵਾਜ਼ ਕਾਫ਼ੀ ਨਹੀਂ ਹੁੰਦੀ।<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>ਹੋਰ ਜਾਣੋ</a>\n <br><br> - RTT ਕਾਲਾਂ ਨੂੰ ਇੱਕ ਪ੍ਰਤਿਲਿਪੀ ਸੁਨੇਹੇ ਵਜੋਂ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ\n <br> - RTT ਵੀਡੀਓ ਕਾਲਾਂ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"ਨੋਟ ਕਥਨ:ਵੇਲੇ RTT ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY ਬੰਦ"</item>
<item msgid="3971695875449640648">"TTY ਪੂਰਾ"</item>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 3112a23..bc6df7f 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Numer prywatny"</string>
<string name="payphone" msgid="4793877574636445118">"Automat telefoniczny"</string>
<string name="onHold" msgid="9035493194749959955">"Oczekujące"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Wiadomość"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Wiadomość od operatora"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Kod MMI został rozpoczęty"</string>
<string name="ussdRunning" msgid="485588686340541690">"Uruchomiony kod USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Kod MMI został anulowany"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Połączenie RTT (wysyłanie SMS-ów w czasie rzeczywistym)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Zezwalaj na wymianę SMS-ów podczas rozmowy głosowej"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT pomaga osobom niesłyszącym, niedosłyszącym, mającym problemy z mówieniem oraz potrzebującym czegoś więcej oprócz głosu.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Więcej informacji</a>\n <br><br> – Połączenia RTT są zapisywane jako transkrypcje\n <br> – Funkcja RTT jest niedostępna w przypadku rozmów wideo"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Uwaga: funkcja RTT jest niedostępna podczas roamingu"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY wyłączony"</item>
<item msgid="3971695875449640648">"TTY pełny"</item>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 777c884..35698ce 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Número particular"</string>
<string name="payphone" msgid="4793877574636445118">"Telefone público"</string>
<string name="onHold" msgid="9035493194749959955">"Em espera"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Mensagem (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mensagem do Operador"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Código de MMI iniciado"</string>
<string name="ussdRunning" msgid="485588686340541690">"A executar código USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Código de MMI cancelado"</string>
@@ -444,7 +446,7 @@
<string name="fdn_failed" msgid="540018079008319747">"Falha de FDN."</string>
<string name="simContacts_emptyLoading" msgid="2203331234764498011">"A ler a partir do cartão SIM..."</string>
<string name="simContacts_empty" msgid="5270660846489561932">"Sem contactos no cartão SIM."</string>
- <string name="simContacts_title" msgid="1861472842524839921">"Seleccione os contactos a importar"</string>
+ <string name="simContacts_title" msgid="1861472842524839921">"Selecione os contactos a importar"</string>
<string name="simContacts_airplaneMode" msgid="5254946758982621072">"Desative o modo de avião para importar contactos do cartão SIM."</string>
<string name="enable_pin" msgid="5422767284133234860">"Ativar/desativar o PIN do cartão SIM"</string>
<string name="change_pin" msgid="9174186126330785343">"Alterar o PIN do cartão SIM"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Chamada com Mensagens de texto em tempo real (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Permitir envio de mensagens numa chamada de voz"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"A RTT assiste os autores de chamadas surdos, com deficiências auditivas, dificuldades da fala ou que precisem de mais do que apenas a voz.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Saiba mais</a>\n <br><br> - As chamadas RTT são guardadas como transcrição de mensagem\n <br> - A RTT não está disponível para videochamadas"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Nota: a RTT não está disponível em roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Teletipo desativado"</item>
<item msgid="3971695875449640648">"Teletipo completo"</item>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index a2528f1..7e3345e 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Número privado"</string>
<string name="payphone" msgid="4793877574636445118">"Telefone público"</string>
<string name="onHold" msgid="9035493194749959955">"Em espera"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Mensagem (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mensagem da operadora"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Código MMI iniciado"</string>
<string name="ussdRunning" msgid="485588686340541690">"Código USSD em execução…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Código MMI cancelado"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Chamada com mensagem de texto em tempo real (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Permitir o envio de mensagens de texto em uma chamada de voz"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"A RTT ajuda os autores das chamadas com deficiências como surdez, dificuldade de audição ou fala ou que precisam de outros recursos além de voz.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Saiba mais</a>\n <br><br> — As chamadas RTT são salvas como transcrições de mensagem\n <br> — A RTT não está disponível para videochamadas"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Observação: a RTT não está disponível em roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY desativado"</item>
<item msgid="3971695875449640648">"TTY completo"</item>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 8a875c2..aac8e3a 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Număr privat"</string>
<string name="payphone" msgid="4793877574636445118">"Telefon public"</string>
<string name="onHold" msgid="9035493194749959955">"În așteptare"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Mesaj"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mesaj de la operator"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Cod MMI pornit"</string>
<string name="ussdRunning" msgid="485588686340541690">"Se rulează codul USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Cod MMI anulat"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Apel de tipul Text în timp real (TTR)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Permiteți schimbul de mesaje în timpul unui apel vocal"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"TTR oferă asistență apelanților fără auz, cu deficiențe de auz, care au dizabilități de vorbire sau care au nevoie de mai mult decât de voce.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Aflați mai multe</a>\n <br><br> - Apelurile RTT sunt salvate ca transcrierea unui mesaj\n <br> - Serviciul TTR nu este disponibil pentru apelurile video."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Notă: funcția TTR nu este disponibilă când sunteți în roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY dezactivat"</item>
<item msgid="3971695875449640648">"TTY integral"</item>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index d85d355..0b551bc 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Скрытый номер"</string>
<string name="payphone" msgid="4793877574636445118">"Телефон-автомат"</string>
<string name="onHold" msgid="9035493194749959955">"Ждет ответа"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Сообщение (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Сообщение оператора"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Код MMI запущен"</string>
<string name="ussdRunning" msgid="485588686340541690">"Выполняется запрос USSD…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Код MMI отменен"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Вызов RTT"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Разрешить обмен сообщениями во время голосового вызова"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Функция RTT предназначена для пользователей с нарушениями слуха и речи.<br><a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Подробнее…</a>\n<br><br>– Вызовы RTT сохраняются как транскрипции.\n<br>– Функция RTT недоступна при видеовызове."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Примечание. Функция RTT недоступна в роуминге."</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Телетайп выключен"</item>
<item msgid="3971695875449640648">"Полнофункциональный телетайп"</item>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 5387ee4..21c8701 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"පුද්ගලික අංකය"</string>
<string name="payphone" msgid="4793877574636445118">"පේෆෝනය"</string>
<string name="onHold" msgid="9035493194749959955">"රඳවා ගනිමින්"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) පණිවිඩය"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"වාහක පණිවිඩය"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI කේතය ආරම්භ විය"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD කේතය ධාවනය වෙමින්…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI කේතය අවලංගු කෙරුණි"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"තථ්ය-කාල පෙළ (RTT) ඇමතුම"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"හඬ ඇමතුමක් තුළ පණිවිඩ යැවීමට ඉඩ දෙන්න"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"බිහිරි, ශ්රවණ දුර්වලතා, කථන ආබාධයක් හෝ හඬට වඩා වැඩි දෙයක් අවශ්ය අමතන්නන්ට RTT සහාය දක්වයි.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>තව දැන ගන්න</a>\n <br><br> - RTT ඇමතුම් පණිවිඩ පිටපතත් ලෙස සුරැකේ \n <br> - වීඩියෝ ඇමතුම් සඳහා RTT ලබා ගත නොහැකිය"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"සටහන: රෝමිං කරන අතරතුර RTT ලබා ගත නොහැකිය"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY අක්රියයි"</item>
<item msgid="3971695875449640648">"TTY පුර්ණයි"</item>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 312b021..01cbc00 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Súkromné číslo"</string>
<string name="payphone" msgid="4793877574636445118">"Telefónny automat"</string>
<string name="onHold" msgid="9035493194749959955">"Podržaný hovor"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Správa"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Správa od operátora"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Kód MMI bol spustený"</string>
<string name="ussdRunning" msgid="485588686340541690">"Kód USSD je spustený..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Kód MMI bol zrušený"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Posielanie okamžitého textu (RTT) počas hovorov"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Povoliť posielanie správ počas hlasového hovoru"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Okamžitý text pomáha volajúcim, ktorí nepočujú, majú problémy so sluchom, rečovú poruchu alebo potrebujú viac ako samotný hlas.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Ďalšie informácie</a>\n <br><br> – Okamžitý text poslaný počas hovoru sa uloží ako prepis správ\n <br> – Okamžitý text nie je k dispozícii počas videohovorov"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Poznámka: Okamžitý text nie je počas roamingu k dispozícii."</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Textový telefón vypnutý"</item>
<item msgid="3971695875449640648">"Úplný textový telefón"</item>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 96e7262..3520fcd 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Zasebna številka"</string>
<string name="payphone" msgid="4793877574636445118">"Telefonska govorilnica"</string>
<string name="onHold" msgid="9035493194749959955">"Zadržano"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Sporočilo (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Sporočilo operaterja"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Koda MMI zagnana"</string>
<string name="ussdRunning" msgid="485588686340541690">"Koda USSD se izvaja ..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Koda MMI preklicana"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Klic s sprotnim besedilom (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Dovoli izmenjavo sporočil v glasovnem klicu"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Funkcija RTT pomaga klicateljem, ki so gluhi, naglušni, imajo govorno motnjo ali potrebujejo več kot samo glas.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Več o tem</a>\n <br><br> – Klici RTT se shranijo kot prepis sporočila\n <br> – RTT ni na voljo pri videoklicih"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Opomba: RTT ni na voljo med gostovanjem"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Način TTY izklopljen"</item>
<item msgid="3971695875449640648">"TTY poln"</item>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 4f162db..729033a 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Numër privat"</string>
<string name="payphone" msgid="4793877574636445118">"Telefon me pagesë"</string>
<string name="onHold" msgid="9035493194749959955">"Në pritje"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Mesazh (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mesazh i operatorit celular"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Kodi MMI filloi"</string>
<string name="ussdRunning" msgid="485588686340541690">"Kodi USSD po punon…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Kodi MMI u anulua"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Telefonata me tekst në kohë reale (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Lejo mesazhet brenda një telefonate zanore"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Funksioni RTT ndihmon telefonuesit që janë të shurdhër, kanë vështirësi me dëgjimin, kanë një aftësi të kufizuar të të folurit ose që kanë nevojë për më shumë se thjesht zërin.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Mëso më shumë</a>\n <br><br> - Telefonatat RTT ruhen si një transkript mesazhi\n <br> - Funksioni RTT nuk ofrohet për telefonatat me video"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Shënim. Veçoria RTT nuk ofrohet kur je në roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY i çaktivizuar"</item>
<item msgid="3971695875449640648">"TTY i plotë"</item>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 0d8220a..8834c52 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Приватан број"</string>
<string name="payphone" msgid="4793877574636445118">"Телефонска говорница"</string>
<string name="onHold" msgid="9035493194749959955">"На чекању"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Порука"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Порука мобилног оператера"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Покренут је MMI кôд."</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD кôд је покренут…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI кôд је отказан"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Позив са текстом у реалном времену (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Дозволите размену порука у аудио позиву"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Текст у реалном времену (RTT) помаже позиваоцима који су глуви, слабо чују, имају тешкоће у говору или којима је потребно нешто више од гласа.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Сазнајте више</a>\n <br><br> – RTT позиви се чувају као транскрипт поруке\n <br> – RTT није доступан за видео позиве"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Напомена: Текст у реалном времену није доступан у ромингу"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY је искључен"</item>
<item msgid="3971695875449640648">"Комплетни TTY"</item>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 817883b..02f0061 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Privat nummer"</string>
<string name="payphone" msgid="4793877574636445118">"Telefonautomat"</string>
<string name="onHold" msgid="9035493194749959955">"Parkerat"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) meddelande"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operatörsmeddelande"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI-kod körs"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD-kod körs…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI-koden har annullerats"</string>
@@ -521,7 +523,7 @@
<string name="incall_error_supp_service_hold" msgid="7967020511232222078">"Det går inte att hålla kvar samtal."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="1782466780452640089">"Anslut till ett trådlöst nätverk om du vill ringa."</string>
<string name="incall_error_promote_wfc" msgid="106510757624022064">"Aktivera Wi-Fi-samtal för att ringa."</string>
- <string name="emergency_information_hint" msgid="399011533038204351">"Krisinformation"</string>
+ <string name="emergency_information_hint" msgid="399011533038204351">"Nödinformation"</string>
<string name="emergency_information_owner_hint" msgid="688331472291637149">"Ägare"</string>
<string name="emergency_information_confirm_hint" msgid="4039012670779853030">"Tryck igen för att visa information"</string>
<string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Nödsamtal"</string>
@@ -561,6 +563,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"RTT-samtal (realtidstext)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Tillåt meddelanden i röstsamtal"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT hjälper döva, hörselskadade och personer med talsvårigheter eller som behöver mer än endast röst.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Läs mer</a>\n <br><br> - RTT-samtal sparas som en meddelandetranskription\n <br> - RTT är inte tillgängligt för videosamtal"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Obs! RTT är inte tillgängligt vid roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY av"</item>
<item msgid="3971695875449640648">"TTY är full"</item>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index a2b04d8..761524a 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">" Number isiyojulikana"</string>
<string name="payphone" msgid="4793877574636445118">"Simu ya kulipia"</string>
<string name="onHold" msgid="9035493194749959955">"Inangoja"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Ujumbe wa <xliff:g id="MMICARRIER">%s</xliff:g>"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Ujumbe wa Mtoa Huduma"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Msimbo wa MMI umeanza"</string>
<string name="ussdRunning" msgid="485588686340541690">"Msimbo wa USSD unafungua"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Msimbo wa MMI umeghairiwa"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Kutuma SMS katika Muda Halisi (RTT) wakati wa kupiga simu"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Ruhusu uandikaji wa ujumbe wakati unapiga simu"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT huwasaidia wapigaji simu ambao ni viziwi, wasioweza kusikia vyema, wenye matatizo ya kuzungumza au wanaohitaji kufanya zaidi ya kuzungumza.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Pata maelezo zaidi</a>\n <br><br> - Simu za RTT huhifadhiwa kama manukuu ya ujumbe\n <br> - RTT haipatikani kwa simu za video"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Kumbuka: RTT haipatikani wakati unatumia mitandao ya ng\'ambo"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Zima TTY"</item>
<item msgid="3971695875449640648">"TTY Kamili"</item>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index c18427e..bf06503 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"தனிப்பட்ட எண்"</string>
<string name="payphone" msgid="4793877574636445118">"கட்டணத் தொலைபேசி"</string>
<string name="onHold" msgid="9035493194749959955">"காத்திருப்பில்"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) மெசேஜ்"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"மொபைல் நிறுவன மெசேஜ்"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI குறியீடு தொடங்கியது"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD குறியீடு இயங்குகிறது…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI குறியீடு ரத்தானது"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"நிகழ்நேர உரை (RTT) அழைப்பு"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"குரல் அழைப்பிலேயே செய்தியிடலை அனுமதிக்கும்"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"காது கேளாதோர், கேட்பதற்குச் சிரமப்படுவோர், பேச இயலாதோர் அல்லது குரலைத் தாண்டி மற்ற வழிகளில் தகவல் தேவைப்படுவோருக்கு RTT பயன்முறை உதவுகிறது.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>மேலும் அறிக</a>\n <br><br> - டிரான்ஸ்கிரிப்ட் செய்யப்பட்ட செய்தியாக RTT அழைப்புகள் சேமிக்கப்படும்\n <br> - வீடியோ அழைப்புகளுக்கு RTT பயன்முறை இல்லை"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"கவனத்தில் கொள்ளவும்: ரோமிங்கில் உள்ள போது RTT கிடையாது"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY முடக்கத்தில்"</item>
<item msgid="3971695875449640648">"TTY ஐ இயக்கு"</item>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index e877ba1..98d37b1 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"ప్రైవేట్ నంబర్"</string>
<string name="payphone" msgid="4793877574636445118">"పే ఫోన్"</string>
<string name="onHold" msgid="9035493194749959955">"హోల్డ్లో ఉంది"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) సందేశం"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"క్యారియర్ సందేశం"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI కోడ్ ప్రారంభించబడింది"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD కోడ్ అమలు చేయబడుతోంది…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI కోడ్ రద్దు చేయబడింది"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"నిజ సమయ వచనం (RTT) కాల్"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"వాయిస్ కాల్లో సందేశాలు పంపడానికి అనుమతించండి"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"బధిరులు, వినికిడి సమస్యలు ఉన్న వారు, మాట్లాడటంలో సమస్యలు ఉన్న వారు లేదా కేవలం వాయిస్తో అర్థం చేసుకోలేని కాలర్లకు RTT సహాయపడుతుంది.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>మరింత తెలుసుకోండి</a>\n <br><br> - RTT కాల్లు సందేశ లిపి మార్పు వలె సేవ్ చేయబడతాయి\n <br> - వీడియో కాల్ల కోసం RTT అందుబాటులో లేదు"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"గమనిక: రోమింగ్లో ఉండగా RTTఅందుబాటులో ఉండదు"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY ఆఫ్లో ఉంది"</item>
<item msgid="3971695875449640648">"TTY సంపూర్ణంగా ఉన్నవి"</item>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 54d457a..5a6e198 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"หมายเลขส่วนตัว"</string>
<string name="payphone" msgid="4793877574636445118">"โทรศัพท์สาธารณะ"</string>
<string name="onHold" msgid="9035493194749959955">"พักสาย"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"ข้อความ (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"ข้อความของผู้ให้บริการ"</string>
<string name="mmiStarted" msgid="6347869857061147003">"เริ่มรหัส MMI แล้ว"</string>
<string name="ussdRunning" msgid="485588686340541690">"กำลังรันรหัส USSD..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"ยกเลิกรหัส MMI แล้ว"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"การโทรระบบข้อความแบบเรียลไทม์ (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"อนุญาตให้รับส่งข้อความระหว่างการโทรด้วยเสียง"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT ช่วยเหลือผู้โทรที่หูหนวก ได้ยินไม่ชัด มีความบกพร่องในการพูด หรือต้องการการสื่อสารที่นอกเหนือจากเสียงพูด<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>ดูข้อมูลเพิ่มเติม</a>\n <br><br> - สาย RTT จะบันทึกในรูปแบบการถอดเสียงเป็นข้อความ\n <br> - RTT ใช้ไม่ได้สำหรับวิดีโอคอล"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"หมายเหตุ: RTT ไม่พร้อมใช้งานขณะโรมมิ่ง"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"ปิด TTY"</item>
<item msgid="3971695875449640648">"TTY เต็ม"</item>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index bed59c1..e9a628c 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Pribadong numero"</string>
<string name="payphone" msgid="4793877574636445118">"Payphone"</string>
<string name="onHold" msgid="9035493194749959955">"Naka-hold"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Mensahe"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Mensahe ng Carrier"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Sinimulan ang MMI code"</string>
<string name="ussdRunning" msgid="485588686340541690">"Tumatakbo ang USSD code…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Kinansela ang MMI code"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Real-time na text (RTT) na tawag"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Payagan ang pagmemensahe sa isang voice call"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Tinutulungan ng RTT ang mga tumatawag na bingi, mahina ang pandinig, may kapansanan sa pagsasalita, o kailangan ng higit pa sa boses lang.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Matuto pa</a>\n <br><br> - Sine-save ang mga RTT na tawag bilang transcript ng mensahe\n <br> - Hindi available ang RTT para sa mga video call"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Tandaan: Hindi available ang RTT habang naka-roam"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"I-off ang TTY"</item>
<item msgid="3971695875449640648">"Puno ang TTY"</item>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index ba4bf6d..b662a1d 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Özel numara"</string>
<string name="payphone" msgid="4793877574636445118">"Ankesörlü telefon"</string>
<string name="onHold" msgid="9035493194749959955">"Beklemede"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Mesajı"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operatör Mesajı"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI kodu başlatıldı"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD kodu çalışıyor…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI kodu iptal edildi"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Gerçek zamanlı mesaj (RTT) çağrısı"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Sesli aramada mesajlaşmaya izin verilir"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT; tam veya kısmi işitme engelli, konuşma engeli olan veya sesten fazlasına ihtiyaç duyan arayanlara yardımcı olur.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Daha fazla bilgi</a>\n <br><br> - RTT çağrıları, mesaj çeviri yazısı olarak kaydedilir\n <br> - RTT, görüntülü görüşmelerde kullanılamaz"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Not: Dolaşım sırasında RTT kullanılamaz"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY Kapalı"</item>
<item msgid="3971695875449640648">"TTY Tam"</item>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index eff5959..d3af4aa 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Приватний номер"</string>
<string name="payphone" msgid="4793877574636445118">"Таксофон"</string>
<string name="onHold" msgid="9035493194749959955">"Очікує"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Повідомлення (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Повідомлення від оператора"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Код MMI запущено"</string>
<string name="ussdRunning" msgid="485588686340541690">"Виконується запит USSD…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Код MMI скасовано"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Виклик із передаванням тексту в реальному часі"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Дозволити передавання повідомлень під час голосового виклику"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Функція RTT буде корисною для осіб із вадами слуху чи порушеннями мовлення, а також тих людей, для яких голосового спілкування недостатньо.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Докладніше</a>\n <br><br> – RTT-виклики зберігаються як транскрибований текст\n <br> – Функція RTT не підтримується для відеодзвінків"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Примітка. У роумінгу функція RTT недоступна."</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Телетайп вимкнено"</item>
<item msgid="3971695875449640648">"Повнофункціональний телетайп"</item>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 1043058..3872036 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"نجی نمبر"</string>
<string name="payphone" msgid="4793877574636445118">"پے فون"</string>
<string name="onHold" msgid="9035493194749959955">"ہولڈ پر"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) پیغام"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"کیریئر کا پیغام"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI کوڈ شروع ہوگیا"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD کوڈ چل رہا ہے…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI کوڈ منسوخ ہوگیا"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"ریئل ٹائم ٹیکسٹ (RTT) کال"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"صوتی کال کے اندر پیغام رسانی کی اجازت دیں"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT ایسے کالرز کو اسسٹ کرتا ہے جو بہرے ہیں، اونچا سنتے ہیں، بولنے سے معزور ہیں یا ان کیلئے صرف آواز ہی کافی نہیں ہے۔<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>مزید جانیں</a>\n <br><br> - RTT کالز پیغام ٹرانسکرپٹ کے بطور محفوظ کی جاتی ہیں\n <br> - RTT ویڈیو کالز کیلئے دستیاب نہیں ہے"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"نوٹ: رومنگ میں ہوتے ہوئے RTT دستیاب نہیں ہے"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY آف"</item>
<item msgid="3971695875449640648">"TTY مکمل"</item>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 8a9727f..59d3cfb 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Yashirin raqam"</string>
<string name="payphone" msgid="4793877574636445118">"Taksofon"</string>
<string name="onHold" msgid="9035493194749959955">"Kutmoqda"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Xabar (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Operatordan xabar"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI kodi ishga tushirildi"</string>
<string name="ussdRunning" msgid="485588686340541690">"USSD so‘rov bajarilmoqda…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI kodi bekor qilindi"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"RTT chaqiruvi"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Video chaqiruvlar vaqtida xabarlar almashinuviga ruxsat berish"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT kar, eshitish qobiliyati va nutqiy faoliyati buzilgan shaxslarga mo‘ljallangan funksiyadir.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Batafsil</a>\n <br><br> – RTT chaqiruvlari transkripsiya sifatida saqlanadi.\n <br> – RTT funksiyasidan video chaqiruvlar vaqtida foydalanib bo‘lmaydi."</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Eslatma. Roumingda RTT funksiyasidan foydalanish imkonsiz."</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Teletayp yoqilmagan"</item>
<item msgid="3971695875449640648">"To‘liq funksiyali teletayp"</item>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 61bf96f..392fd22 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Số cá nhân"</string>
<string name="payphone" msgid="4793877574636445118">"Điện thoại công cộng"</string>
<string name="onHold" msgid="9035493194749959955">"Đang chờ"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"Tin nhắn (<xliff:g id="MMICARRIER">%s</xliff:g>)"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Tin nhắn nhà mạng"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Đã bắt đầu mã MMI"</string>
<string name="ussdRunning" msgid="485588686340541690">"Mã USSD đang chạy…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Mã MMI đã bị hủy"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Cuộc gọi qua Tin nhắn theo thời gian thực (RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Cho phép nhắn tin trong cuộc gọi thoại"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"Tin nhắn theo thời gian thực (RTT) trợ giúp những người gọi khiếm thính, bị suy giảm thính lực, không có khả năng nói hoặc cần thêm hỗ trợ ngoài giọng nói.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Tìm hiểu thêm</a>\n <br><br> - Cuộc gọi qua RTT được lưu dưới dạng bản chép lời tin nhắn\n <br> - Không thực hiện được cuộc gọi video qua RTT"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Lưu ý: Không thể sử dụng tin nhắn theo thời gian thực (RTT) trong khi chuyển vùng"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"Tắt TTY"</item>
<item msgid="3971695875449640648">"TTY Đầy đủ"</item>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 10992f5..39bca72 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"私密号码"</string>
<string name="payphone" msgid="4793877574636445118">"公用电话"</string>
<string name="onHold" msgid="9035493194749959955">"保持"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) 信息"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"运营商信息"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI 码已启动"</string>
<string name="ussdRunning" msgid="485588686340541690">"正在运行 USSD 代码..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI 码已取消"</string>
@@ -557,6 +559,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"实时信息 (RTT) 通话"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"允许在语音通话中发送信息"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT 可为以下类型的来电者提供协助:失聪者、听力障碍人士、语言障碍人士或需要语音以外服务的人。<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>了解详情</a>\n <br><br> - 系统会以信息转录的方式存储 RTT 通话\n <br> - 视频通话不支持 RTT"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"注意:漫游时无法使用 RTT 功能"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"TTY 关闭"</item>
<item msgid="3971695875449640648">"TTY 完整"</item>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index b201ffc..aa983e7 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"私人號碼"</string>
<string name="payphone" msgid="4793877574636445118">"公共電話"</string>
<string name="onHold" msgid="9035493194749959955">"保留通話"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) 訊息"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"流動網絡供應商訊息"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI 碼開始執行"</string>
<string name="ussdRunning" msgid="485588686340541690">"正在執行 USSD 碼..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI 碼已取消"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"即時文字短訊 (RTT) 通話"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"允許在語音通話中傳送訊息"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"RTT 可協助耳聾、有聽力障礙、語言失能或不僅僅需要語音的通話者。<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>瞭解詳情</a>\n <br><br> - RTT 通話內容會儲存為訊息轉錄內容 \n <br> - RTT 不適用於視像通話"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"注意:漫遊時無法使用 RTT"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"關閉 TTY"</item>
<item msgid="3971695875449640648">"TTY 完整模式"</item>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 8d3d013..14dd60e 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"私人號碼"</string>
<string name="payphone" msgid="4793877574636445118">"公用電話"</string>
<string name="onHold" msgid="9035493194749959955">"通話保留"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) 訊息"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"來自電信業者的訊息"</string>
<string name="mmiStarted" msgid="6347869857061147003">"MMI 碼開始執行"</string>
<string name="ussdRunning" msgid="485588686340541690">"正在執行 USSD 碼…"</string>
<string name="mmiCancelled" msgid="2771923949751842276">"MMI 碼已取消"</string>
@@ -559,6 +561,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"即時文字訊息 (RTT) 通話"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"允許在進行語音通話時傳送訊息"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"即時文字訊息功能可為以下類型的來電者提供協助:聽障人士、聽力受損者、語言障礙者,或需要語音服務以外的使用者。<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>瞭解詳情</a>\n <br><br> - 系統會以訊息轉錄的方式儲存即時文字訊息通話內容\n <br> - 視訊通話不支援即時文字訊息功能"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"注意:漫遊時無法使用即時文字訊息功能"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"關閉 TTY"</item>
<item msgid="3971695875449640648">"TTY 完整功能"</item>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 1e8f969..6cb6b99 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -25,6 +25,8 @@
<string name="private_num" msgid="6713286113000232309">"Inombolo eyimfihlo"</string>
<string name="payphone" msgid="4793877574636445118">"Ucingo olufakwa imali"</string>
<string name="onHold" msgid="9035493194749959955">"Ibambile"</string>
+ <string name="carrier_mmi_msg_title" msgid="6260804395803031604">"(<xliff:g id="MMICARRIER">%s</xliff:g>) Umlayezo"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="2680497876583134832">"Umlayezo wenkampani yenethiwekhi"</string>
<string name="mmiStarted" msgid="6347869857061147003">"Ikhodi ye-MMI iqalile"</string>
<string name="ussdRunning" msgid="485588686340541690">"Ikhodi ye-USSD iyasebenza..."</string>
<string name="mmiCancelled" msgid="2771923949751842276">"Ikhodi ye-MMI ikhanseliwe"</string>
@@ -561,6 +563,7 @@
<string name="rtt_mode_title" msgid="6954652435543570121">"Ikholi yombhalo wesikhathi sangempela (i-RTT)"</string>
<string name="rtt_mode_summary" msgid="5146344277246544580">"Vumela ukuthumela imilayezo ngaphakathi kwekholi yezwi"</string>
<string name="rtt_mode_more_information" msgid="6080420780730383030">"I-RTT isiza abafonayo abangezwa ezindlebeni, abenzwa kanzima, abanokukhubazeka kwenkulumo, noma udinga ngaphezulu kwezwi kuphela.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Funda kabanzi</a>\n <br><br> - Amakholi e-RTT alondolozwa njengokubhala ngokuloba ngomlayezo\n <br> - I-RTT ayitholakali kumakholi evidiyo"</string>
+ <string name="no_rtt_when_roaming" msgid="4240863078190955607">"Qaphela: I-RTT ayitholakali ngenkathi uzula"</string>
<string-array name="tty_mode_entries">
<item msgid="512950011423868021">"I-TTY Ivaliwe"</item>
<item msgid="3971695875449640648">"I-TTY Igcwele"</item>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index b697ed8..2db3aa0 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -44,7 +44,7 @@
<!-- Dark variant of the action bar color. Ensure this stays in sync with Dialer version. -->
<color name="actionbar_background_color_dark">#ffffff</color>
<!-- Color for icons in the actionbar. Ensure this stays in sync with Dialer version. -->
- <color name="actionbar_icon_color">#ffffff</color>
+ <color name="actionbar_icon_color">#5f6368</color>
<!-- Color for the setting text. -->
<color name="setting_primary_color">#333333</color>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f365139..3e821dc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -42,6 +42,10 @@
<string name="payphone">Payphone</string>
<!-- In-call screen: status label for a call that's on hold -->
<string name="onHold">On hold</string>
+ <!-- Title for carrier MMI message -->
+ <string name="carrier_mmi_msg_title">(<xliff:g id="mmicarrier" example="T-Mobile">%s</xliff:g>) Message</string>
+ <!-- Default title for carrier MMI message -->
+ <string name="default_carrier_mmi_msg_title">Carrier Message</string>
<!-- Possible error messages with outgoing calls --><skip/>
<string name="mmiStarted">MMI code started</string>
<!-- Dialog label when a USSD code starts running -->
@@ -1263,6 +1267,8 @@
<br><br> - RTT calls are saved as a message transcript
<br> - RTT is not available for video calls</string>
+ <string name="no_rtt_when_roaming">Note: RTT is not available while roaming</string>
+
<!-- Service option entries. -->
<string-array name="tty_mode_entries">
<item>TTY Off</item>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index c791968..1d5e7dc 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -170,7 +170,6 @@
<style name="DialerSettingsLight" parent="SettingsLight">
<!-- Action bar.-->
- <item name="android:tint">@color/dialer_secondary_text_color</item>
<item name="android:windowBackground">@color/dialer_background_color</item>
<item name="android:actionModeBackground">@color/dialer_background_color</item>
<item name="android:windowLightStatusBar">true</item>
@@ -180,6 +179,7 @@
<item name="android:windowLightNavigationBar">true</item>
<item name="android:colorAccent">@color/dialer_theme_color</item>
<item name="android:dialogTheme">@style/DialerAlertDialogTheme</item>
+ <item name="android:homeAsUpIndicator">@drawable/ic_back_arrow</item>
</style>
<style name="DialerAlertDialogTheme"
diff --git a/res/xml/cdma_options.xml b/res/xml/cdma_options.xml
deleted file mode 100644
index f6ef97a..0000000
--- a/res/xml/cdma_options.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
- <com.android.phone.CdmaSystemSelectListPreference
- android:key="cdma_system_select_key"
- android:title="@string/cdma_system_select_title"
- android:summary="@string/cdma_system_select_summary"
- android:entries="@array/cdma_system_select_choices"
- android:entryValues="@array/cdma_system_select_values"
- android:dialogTitle="@string/cdma_system_select_dialogtitle" />
-
- <com.android.phone.CdmaSubscriptionListPreference
- android:key="cdma_subscription_key"
- android:title="@string/cdma_subscription_title"
- android:summary="@string/cdma_subscription_summary"
- android:entries="@array/cdma_subscription_choices"
- android:entryValues="@array/cdma_subscription_values"
- android:dialogTitle="@string/cdma_subscription_dialogtitle" />
-
- <!--We want separate APN setting from reset of settings because-->
- <!--we want user to change it with caution.-->
- <PreferenceCategory
- android:key="category_cdma_apn_key">
- <!-- The launching Intent will be defined thru code as we need to pass some Extra -->
- <com.android.phone.RestrictedPreference
- android:key="button_cdma_apn_key"
- android:title="@string/apn_settings"
- android:persistent="false"/>
- </PreferenceCategory>
-
- <Preference
- android:key="carrier_settings_key"
- android:title="@string/carrier_settings_title">
- <intent android:action="android.intent.action.MAIN"
- android:targetPackage="@string/carrier_settings"
- android:targetClass="@string/carrier_settings_menu" />
- </Preference>
-
-</PreferenceScreen>
diff --git a/res/xml/gsm_umts_options.xml b/res/xml/gsm_umts_options.xml
deleted file mode 100644
index 81b2deb..0000000
--- a/res/xml/gsm_umts_options.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
- <com.android.phone.NetworkOperators
- android:key="network_operators_category_key"
- android:title="@string/network_operator_category"
- android:persistent="false">
-
- <SwitchPreference
- android:key="button_auto_select_key"
- android:title="@string/select_automatically"
- android:persistent="false"/>
-
- <com.android.phone.NetworkSelectListPreference
- android:key="button_network_select_key"
- android:title="@string/network_select_title"
- android:persistent="false"/>
-
- <Preference
- android:key="button_choose_network_key"
- android:title="@string/choose_network_title"
- android:fragment="com.android.phone.NetworkSelectSetting" />
- </com.android.phone.NetworkOperators>
-
- <!--We want separate APN setting from reset of settings because-->
- <!--we want user to change it with caution.-->
- <PreferenceCategory
- android:key="category_gsm_apn_key"
- android:layout="@layout/preference_category_no_label">
-
- <com.android.phone.RestrictedPreference
- android:key="button_gsm_apn_key"
- android:title="@string/apn_settings"
- android:persistent="false" />
- </PreferenceCategory>
-
- <PreferenceScreen
- android:key="carrier_settings_key"
- android:title="@string/carrier_settings_title">
- <intent android:action="android.intent.action.MAIN"
- android:targetPackage="@string/carrier_settings"
- android:targetClass="@string/carrier_settings_menu" />
- </PreferenceScreen>
-
-</PreferenceScreen>
diff --git a/res/xml/network_setting_fragment.xml b/res/xml/network_setting_fragment.xml
deleted file mode 100644
index d334861..0000000
--- a/res/xml/network_setting_fragment.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
- <PreferenceScreen
- android:key="cdma_lte_data_service_key"
- android:title="@string/cdma_lte_data_service">
- </PreferenceScreen>
-
- <com.android.phone.MobileDataPreference
- android:key="mobile_data_enable"
- android:title="@string/mobile_data_settings_title"
- android:summary="@string/mobile_data_settings_summary"/>
-
- <com.android.phone.RestrictedSwitchPreference
- android:key="button_roaming_key"
- android:title="@string/roaming"
- android:persistent="false"
- android:summaryOn="@string/roaming_enable"
- android:summaryOff="@string/roaming_disable"/>
-
- <com.android.phone.DataUsagePreference
- android:key="data_usage_summary"
- android:title="@string/data_usage_title" />
-
- <com.android.phone.AdvancedOptionsPreference
- android:key="advanced_options"/>
-
- <SwitchPreference
- android:key="enhanced_4g_lte"
- android:title="@string/enhanced_4g_lte_mode_title"
- android:persistent="false"
- android:summary="@string/enhanced_4g_lte_mode_summary"/>
-
- <ListPreference
- android:key="preferred_network_mode_key"
- android:title="@string/preferred_network_mode_title"
- android:summary="@string/preferred_network_mode_summary"
- android:entries="@array/preferred_network_mode_choices"
- android:entryValues="@array/preferred_network_mode_values"
- android:dialogTitle="@string/preferred_network_mode_dialogtitle" />
-
- <ListPreference
- android:key="enabled_networks_key"
- android:title="@string/preferred_network_mode_title"
- android:summary="@string/preferred_network_mode_summary"
- android:entries="@array/enabled_networks_choices"
- android:entryValues="@array/enabled_networks_values"
- android:dialogTitle="@string/preferred_network_mode_dialogtitle" />
-
- <Preference
- android:key="carrier_settings_euicc_key"
- android:title="@string/carrier_settings_euicc" />
-
- <PreferenceCategory
- android:key="calling"
- android:title="@string/call_category">
-
- <PreferenceScreen
- android:key="wifi_calling_key"
- android:title="@string/wifi_calling_settings_title">
-
- <intent android:action="android.intent.action.MAIN"
- android:targetPackage="com.android.settings"
- android:targetClass="com.android.settings.Settings$WifiCallingSettingsActivity">
- <extra android:name="show_drawer_menu" android:value="true" />
- </intent>
-
- </PreferenceScreen>
-
- <SwitchPreference
- android:key="video_calling_key"
- android:title="@string/video_calling_settings_title"
- android:persistent="true"/>
-
- </PreferenceCategory>
-
-</PreferenceScreen>
diff --git a/src/com/android/phone/AdvancedOptionsPreference.java b/src/com/android/phone/AdvancedOptionsPreference.java
deleted file mode 100644
index 5f07790..0000000
--- a/src/com/android/phone/AdvancedOptionsPreference.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2017 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 android.content.Context;
-import android.preference.Preference;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.TextView;
-
-/**
- * Customized preference class representing the "Advanced" button that expands to fields that
- * are hidden by default.
- */
-public class AdvancedOptionsPreference extends Preference {
- public AdvancedOptionsPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onBindView(View view) {
- super.onBindView(view);
-
- setIcon(com.android.internal.R.drawable.ic_expand_more);
- setTitle(R.string.advanced_options_title);
- TextView summary = view.findViewById(android.R.id.summary);
- summary.setMaxLines(1);
- }
-}
diff --git a/src/com/android/phone/CallBarringDeselectAllPreference.java b/src/com/android/phone/CallBarringDeselectAllPreference.java
index 153bc0c..e9310f8 100644
--- a/src/com/android/phone/CallBarringDeselectAllPreference.java
+++ b/src/com/android/phone/CallBarringDeselectAllPreference.java
@@ -18,7 +18,6 @@
import android.content.Context;
import android.os.Bundle;
-import android.telephony.ServiceState;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
@@ -52,9 +51,7 @@
protected void showDialog(Bundle state) {
// Finds out if the password field should be shown or not.
ImsPhone imsPhone = mPhone != null ? (ImsPhone) mPhone.getImsPhone() : null;
- mShowPassword = !(imsPhone != null
- && ((imsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE)
- || imsPhone.isUtEnabled()));
+ mShowPassword = !(imsPhone != null && imsPhone.isUtEnabled());
// Selects dialog message depending on if the password field is shown or not.
setDialogMessage(getContext().getString(mShowPassword
diff --git a/src/com/android/phone/CallBarringEditPreference.java b/src/com/android/phone/CallBarringEditPreference.java
index 72b3ea5..edff1e3 100644
--- a/src/com/android/phone/CallBarringEditPreference.java
+++ b/src/com/android/phone/CallBarringEditPreference.java
@@ -26,7 +26,6 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
-import android.telephony.ServiceState;
import android.text.method.DigitsKeyListener;
import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
@@ -257,9 +256,7 @@
private void setShowPassword() {
ImsPhone imsPhone = mPhone != null ? (ImsPhone) mPhone.getImsPhone() : null;
- mShowPassword = !(imsPhone != null
- && ((imsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE)
- || imsPhone.isUtEnabled()));
+ mShowPassword = !(imsPhone != null && imsPhone.isUtEnabled());
}
@Override
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index 7db17ff..dab04f0 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -392,7 +392,7 @@
try {
int stream;
if (mBluetoothHeadset != null) {
- stream = mBluetoothHeadset.isAudioOn() ? AudioManager.STREAM_BLUETOOTH_SCO:
+ stream = isBluetoothAudioOn() ? AudioManager.STREAM_BLUETOOTH_SCO :
AudioManager.STREAM_VOICE_CALL;
} else {
stream = AudioManager.STREAM_VOICE_CALL;
@@ -479,6 +479,11 @@
}
}
+ // Returns whether there are any connected Bluetooth audio devices
+ private boolean isBluetoothAudioOn() {
+ return mBluetoothHeadset.getConnectedDevices().size() > 0;
+ }
+
/**
* Displays a notification when the phone receives a DisplayInfo record.
*/
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index abae4fc..c69f1a4 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -20,7 +20,6 @@
import static android.service.carrier.CarrierService.ICarrierServiceWrapper.RESULT_ERROR;
import android.annotation.NonNull;
-import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -40,7 +39,6 @@
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
-import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.service.carrier.CarrierIdentifier;
import android.service.carrier.CarrierService;
@@ -523,7 +521,7 @@
pkgFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
pkgFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
pkgFilter.addDataScheme("package");
- context.registerReceiverAsUser(mPackageReceiver, UserHandle.ALL, pkgFilter, null, null);
+ context.registerReceiver(mPackageReceiver, pkgFilter);
int numPhones = TelephonyManager.from(context).getPhoneCount();
mConfigFromDefaultApp = new PersistableBundle[numPhones];
@@ -601,7 +599,7 @@
}
intent.putExtra(CarrierConfigManager.EXTRA_SLOT_INDEX, phoneId);
log("Broadcast CARRIER_CONFIG_CHANGED for phone " + phoneId);
- ActivityManager.broadcastStickyIntent(intent, UserHandle.USER_ALL);
+ mContext.sendBroadcast(intent);
mHasSentConfigChange[phoneId] = true;
}
diff --git a/src/com/android/phone/CdmaOptions.java b/src/com/android/phone/CdmaOptions.java
deleted file mode 100644
index 1dc4a09..0000000
--- a/src/com/android/phone/CdmaOptions.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (C) 2008 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 android.content.Intent;
-import android.os.PersistableBundle;
-import android.os.SystemProperties;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceScreen;
-import android.provider.Settings;
-import android.telephony.CarrierConfigManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.telephony.PhoneConstants;
-import com.android.settingslib.RestrictedLockUtilsInternal;
-
-/**
- * List of Phone-specific settings screens.
- */
-public class CdmaOptions {
- private static final String LOG_TAG = "CdmaOptions";
-
- private CarrierConfigManager mCarrierConfigManager;
- private CdmaSystemSelectListPreference mButtonCdmaSystemSelect;
- private CdmaSubscriptionListPreference mButtonCdmaSubscription;
- private RestrictedPreference mButtonAPNExpand;
- private Preference mCategoryAPNExpand;
- private Preference mButtonCarrierSettings;
-
- 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_KEY = "carrier_settings_key";
- private static final String BUTTON_APN_EXPAND_KEY = "button_cdma_apn_key";
- private static final String CATEGORY_APN_EXPAND_KEY = "category_cdma_apn_key";
-
- private PreferenceFragment mPrefFragment;
- private PreferenceScreen mPrefScreen;
- private int mSubId;
-
- public CdmaOptions(PreferenceFragment prefFragment, PreferenceScreen prefScreen, int subId) {
- mPrefFragment = prefFragment;
- mPrefScreen = prefScreen;
- mPrefFragment.addPreferencesFromResource(R.xml.cdma_options);
- mCarrierConfigManager = new CarrierConfigManager(prefFragment.getContext());
-
- // Initialize preferences.
- mButtonCdmaSystemSelect = (CdmaSystemSelectListPreference) mPrefScreen
- .findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY);
- mButtonCdmaSubscription = (CdmaSubscriptionListPreference) mPrefScreen
- .findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY);
- mButtonCarrierSettings = mPrefScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
- mButtonAPNExpand = (RestrictedPreference) mPrefScreen.findPreference(BUTTON_APN_EXPAND_KEY);
- mCategoryAPNExpand = mPrefScreen.findPreference(CATEGORY_APN_EXPAND_KEY);
-
- updateSubscriptionId(subId);
- }
-
- protected void updateSubscriptionId(int subId) {
- mSubId = subId;
- int phoneType = TelephonyManager.from(mPrefFragment.getContext())
- .createForSubscriptionId(mSubId).getPhoneType();
-
- PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
- // Some CDMA carriers want the APN settings.
- boolean addAPNExpand = shouldAddApnExpandPreference(phoneType, carrierConfig);
- boolean addCdmaSubscription =
- deviceSupportsNvAndRuim();
- // Read platform settings for carrier settings
- boolean addCarrierSettings =
- carrierConfig.getBoolean(CarrierConfigManager.KEY_CARRIER_SETTINGS_ENABLE_BOOL);
-
- mPrefScreen.addPreference(mButtonCdmaSystemSelect);
- mButtonCdmaSystemSelect.setEnabled(true);
-
- // Making no assumptions of whether they are added or removed at this point.
- // Calling add or remove explicitly to make sure they are updated.
-
- if (addAPNExpand) {
- log("update: addAPNExpand");
- mButtonAPNExpand.setDisabledByAdmin(
- MobileNetworkSettings.isDpcApnEnforced(mButtonAPNExpand.getContext())
- ? RestrictedLockUtilsInternal.getDeviceOwner(
- mButtonAPNExpand.getContext())
- : null);
- mButtonAPNExpand.setOnPreferenceClickListener(
- new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- MetricsLogger.action(mButtonAPNExpand.getContext(),
- MetricsEvent.ACTION_MOBILE_NETWORK_APN_SETTINGS);
- // We need to build the Intent by hand as the Preference Framework
- // does not allow to add an Intent with some extras into a Preference
- // XML file
- final Intent intent = new Intent(Settings.ACTION_APN_SETTINGS);
- // This will setup the Home and Search affordance
- intent.putExtra(":settings:show_fragment_as_subsetting", true);
- intent.putExtra("sub_id", mSubId);
- mPrefFragment.startActivity(intent);
- return true;
- }
- });
- mPrefScreen.addPreference(mCategoryAPNExpand);
- } else {
- mPrefScreen.removePreference(mCategoryAPNExpand);
- }
-
- if (addCdmaSubscription) {
- log("Both NV and Ruim supported, ENABLE subscription type selection");
- mPrefScreen.addPreference(mButtonCdmaSubscription);
- mButtonCdmaSubscription.setEnabled(true);
- } else {
- log("Both NV and Ruim NOT supported, REMOVE subscription type selection");
- mPrefScreen.removePreference(mButtonCdmaSubscription);
- }
-
- if (addCarrierSettings) {
- mPrefScreen.addPreference(mButtonCarrierSettings);
- } else {
- mPrefScreen.removePreference(mButtonCarrierSettings);
- }
- }
-
- /**
- * Return whether we should add the APN expandable preference based on the phone type and
- * carrier config
- */
- @VisibleForTesting
- public static boolean shouldAddApnExpandPreference(int phoneType, PersistableBundle config) {
- return phoneType == PhoneConstants.PHONE_TYPE_CDMA
- && config.getBoolean(CarrierConfigManager.KEY_SHOW_APN_SETTING_CDMA_BOOL);
- }
-
- private boolean deviceSupportsNvAndRuim() {
- // retrieve the list of subscription types supported by device.
- String subscriptionsSupported = SystemProperties.get("ril.subscription.types");
- boolean nvSupported = false;
- boolean ruimSupported = false;
-
- log("deviceSupportsnvAnRum: prop=" + subscriptionsSupported);
- if (!TextUtils.isEmpty(subscriptionsSupported)) {
- // Searches through the comma-separated list for a match for "NV"
- // and "RUIM" to update nvSupported and ruimSupported.
- for (String subscriptionType : subscriptionsSupported.split(",")) {
- subscriptionType = subscriptionType.trim();
- if (subscriptionType.equalsIgnoreCase("NV")) {
- nvSupported = true;
- }
- if (subscriptionType.equalsIgnoreCase("RUIM")) {
- ruimSupported = true;
- }
- }
- }
-
- log("deviceSupportsnvAnRum: nvSupported=" + nvSupported +
- " ruimSupported=" + ruimSupported);
- return (nvSupported && ruimSupported);
- }
-
- public boolean preferenceTreeClick(Preference preference) {
- if (preference.getKey().equals(BUTTON_CDMA_SYSTEM_SELECT_KEY)) {
- log("preferenceTreeClick: return BUTTON_CDMA_ROAMING_KEY true");
- return true;
- }
- if (preference.getKey().equals(BUTTON_CDMA_SUBSCRIPTION_KEY)) {
- log("preferenceTreeClick: return CDMA_SUBSCRIPTION_KEY true");
- return true;
- }
- return false;
- }
-
- public void showDialog(Preference preference) {
- if (preference.getKey().equals(BUTTON_CDMA_SYSTEM_SELECT_KEY)) {
- mButtonCdmaSystemSelect.showDialog(null);
- } else if (preference.getKey().equals(BUTTON_CDMA_SUBSCRIPTION_KEY)) {
- mButtonCdmaSubscription.showDialog(null);
- }
- }
-
- protected void log(String s) {
- android.util.Log.d(LOG_TAG, s);
- }
-}
diff --git a/src/com/android/phone/CdmaSubscriptionListPreference.java b/src/com/android/phone/CdmaSubscriptionListPreference.java
deleted file mode 100644
index cd0c681..0000000
--- a/src/com/android/phone/CdmaSubscriptionListPreference.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2009 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 android.content.Context;
-import android.os.Bundle;
-import android.preference.ListPreference;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
-import android.util.AttributeSet;
-import android.util.Log;
-
-import com.android.internal.telephony.Phone;
-import com.android.settingslib.utils.ThreadUtils;
-
-public class CdmaSubscriptionListPreference extends ListPreference {
-
- private static final String LOG_TAG = "CdmaSubscriptionListPreference";
-
- // Used for CDMA subscription mode
- private static final int CDMA_SUBSCRIPTION_RUIM_SIM = 0;
- private static final int CDMA_SUBSCRIPTION_NV = 1;
-
- //preferredSubscriptionMode 0 - RUIM/SIM, preferred
- // 1 - NV
- static final int preferredSubscriptionMode = Phone.PREFERRED_CDMA_SUBSCRIPTION;
-
- private TelephonyManager mTelephonyManager;
-
- public CdmaSubscriptionListPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- mTelephonyManager = TelephonyManager.from(context);
- setCurrentCdmaSubscriptionModeValue();
- }
-
- private void setCurrentCdmaSubscriptionModeValue() {
- int cdmaSubscriptionMode = Settings.Global.getInt(getContext().getContentResolver(),
- Settings.Global.CDMA_SUBSCRIPTION_MODE, preferredSubscriptionMode);
- setValue(Integer.toString(cdmaSubscriptionMode));
- }
-
- public CdmaSubscriptionListPreference(Context context) {
- this(context, null);
- }
-
- /**
- * Sets the subscription id associated with this preference.
- *
- * @param subId the subscription id.
- */
- public void setSubscriptionId(int subId) {
- mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(subId);
- }
-
- @Override
- protected void showDialog(Bundle state) {
- setCurrentCdmaSubscriptionModeValue();
-
- super.showDialog(state);
- }
-
- @Override
- protected void onDialogClosed(boolean positiveResult) {
- super.onDialogClosed(positiveResult);
-
- if (!positiveResult) {
- //The button was dismissed - no need to set new value
- return;
- }
-
- int buttonCdmaSubscriptionMode = Integer.parseInt(getValue());
- Log.d(LOG_TAG, "Setting new value " + buttonCdmaSubscriptionMode);
- int statusCdmaSubscriptionMode;
- switch(buttonCdmaSubscriptionMode) {
- case CDMA_SUBSCRIPTION_NV:
- statusCdmaSubscriptionMode = Phone.CDMA_SUBSCRIPTION_NV;
- break;
- case CDMA_SUBSCRIPTION_RUIM_SIM:
- statusCdmaSubscriptionMode = Phone.CDMA_SUBSCRIPTION_RUIM_SIM;
- break;
- default:
- statusCdmaSubscriptionMode = Phone.PREFERRED_CDMA_SUBSCRIPTION;
- }
-
- // Set the CDMA subscription mode, when mode has been successfully changed, update the
- // mode to the global setting.
- ThreadUtils.postOnBackgroundThread(() -> {
- // The subscription mode selected by user.
- int cdmaSubscriptionMode = Integer.parseInt(getValue());
-
- boolean isSuccessed = mTelephonyManager.setCdmaSubscriptionMode(
- statusCdmaSubscriptionMode);
-
- // Update the global settings if successed.
- if (isSuccessed) {
- Settings.Global.putInt(getContext().getContentResolver(),
- Settings.Global.CDMA_SUBSCRIPTION_MODE,
- cdmaSubscriptionMode);
- } else {
- Log.e(LOG_TAG, "Setting Cdma subscription source failed");
- }
- });
- }
-}
diff --git a/src/com/android/phone/CdmaSystemSelectListPreference.java b/src/com/android/phone/CdmaSystemSelectListPreference.java
deleted file mode 100644
index 0044a8b..0000000
--- a/src/com/android/phone/CdmaSystemSelectListPreference.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2009 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 android.content.Context;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.preference.ListPreference;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
-import android.util.AttributeSet;
-import android.util.Log;
-
-import com.android.settingslib.utils.ThreadUtils;
-
-public class CdmaSystemSelectListPreference extends ListPreference {
-
- private static final String LOG_TAG = "CdmaRoamingListPreference";
- private static final boolean DBG = false;
-
- private TelephonyManager mTelephonyManager;
- private MyHandler mHandler = new MyHandler();
-
- public CdmaSystemSelectListPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- mHandler = new MyHandler();
- mTelephonyManager = TelephonyManager.from(context);
- }
-
- public CdmaSystemSelectListPreference(Context context) {
- this(context, null);
- }
-
- /**
- * Sets the subscription id associated with this preference.
- *
- * @param subId the subscription id.
- */
- public void setSubscriptionId(int subId) {
- mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(subId);
- queryCdmaRoamingMode();
- }
-
- @Override
- protected void showDialog(Bundle state) {
- if (!mTelephonyManager.getEmergencyCallbackMode()) {
- super.showDialog(state);
- }
- }
-
- @Override
- protected void onDialogClosed(boolean positiveResult) {
- super.onDialogClosed(positiveResult);
-
- if (positiveResult && (getValue() != null)) {
- int buttonCdmaRoamingMode = Integer.parseInt(getValue());
- int settingsCdmaRoamingMode = Settings.Global.getInt(
- getContext().getContentResolver(),
- Settings.Global.CDMA_ROAMING_MODE,
- TelephonyManager.CDMA_ROAMING_MODE_HOME);
- if (buttonCdmaRoamingMode != settingsCdmaRoamingMode) {
- int cdmaRoamingMode = TelephonyManager.CDMA_ROAMING_MODE_ANY;
- if (buttonCdmaRoamingMode != TelephonyManager.CDMA_ROAMING_MODE_ANY) {
- cdmaRoamingMode = TelephonyManager.CDMA_ROAMING_MODE_HOME;
- }
- //Set the Settings.Secure network mode
- Settings.Global.putInt(
- getContext().getContentResolver(),
- Settings.Global.CDMA_ROAMING_MODE,
- buttonCdmaRoamingMode);
- //Set the roaming preference mode
- setCdmaRoamingMode(cdmaRoamingMode);
- }
- } else {
- Log.d(LOG_TAG, String.format("onDialogClosed: positiveResult=%b value=%s -- do nothing",
- positiveResult, getValue()));
- }
- }
-
- private class MyHandler extends Handler {
-
- static final int MESSAGE_GET_ROAMING_PREFERENCE = 0;
- static final int MESSAGE_SET_ROAMING_PREFERENCE = 1;
-
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MESSAGE_GET_ROAMING_PREFERENCE:
- handleQueryCdmaRoamingPreference(msg);
- break;
-
- case MESSAGE_SET_ROAMING_PREFERENCE:
- handleSetCdmaRoamingPreference(msg);
- break;
- }
- }
-
- private void handleQueryCdmaRoamingPreference(Message msg) {
- int cdmaRoamingMode = msg.arg1;
-
- if (cdmaRoamingMode != TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT) {
- int settingsRoamingMode = Settings.Global.getInt(
- getContext().getContentResolver(),
- Settings.Global.CDMA_ROAMING_MODE,
- TelephonyManager.CDMA_ROAMING_MODE_HOME);
-
- //check that statusCdmaRoamingMode is from an accepted value
- if (cdmaRoamingMode == TelephonyManager.CDMA_ROAMING_MODE_HOME
- || cdmaRoamingMode == TelephonyManager.CDMA_ROAMING_MODE_ANY) {
- //check changes in statusCdmaRoamingMode and updates settingsRoamingMode
- if (cdmaRoamingMode != settingsRoamingMode) {
- settingsRoamingMode = cdmaRoamingMode;
- //changes the Settings.Secure accordingly to statusCdmaRoamingMode
- Settings.Global.putInt(
- getContext().getContentResolver(),
- Settings.Global.CDMA_ROAMING_MODE,
- settingsRoamingMode);
- }
- //changes the mButtonPreferredNetworkMode accordingly to modemNetworkMode
- setValue(Integer.toString(cdmaRoamingMode));
- }
- else {
- if(DBG) Log.i(LOG_TAG, "reset cdma roaming mode to default" );
- resetCdmaRoamingModeToDefault();
- }
- }
- }
-
- private void handleSetCdmaRoamingPreference(Message msg) {
- boolean isSuccessed = (boolean) msg.obj;
-
- if (isSuccessed && (getValue() != null)) {
- int cdmaRoamingMode = Integer.parseInt(getValue());
- Settings.Global.putInt(
- getContext().getContentResolver(),
- Settings.Global.CDMA_ROAMING_MODE,
- cdmaRoamingMode );
- } else {
- queryCdmaRoamingMode();
- }
- }
-
- private void resetCdmaRoamingModeToDefault() {
- //set the mButtonCdmaRoam
- setValue(Integer.toString(TelephonyManager.CDMA_ROAMING_MODE_ANY));
- //set the Settings.System
- Settings.Global.putInt(
- getContext().getContentResolver(),
- Settings.Global.CDMA_ROAMING_MODE,
- TelephonyManager.CDMA_ROAMING_MODE_ANY);
- //Set the Status
- setCdmaRoamingMode(TelephonyManager.CDMA_ROAMING_MODE_ANY);
- }
- }
-
- private void queryCdmaRoamingMode() {
- ThreadUtils.postOnBackgroundThread(() -> {
- Message msg = mHandler.obtainMessage(MyHandler.MESSAGE_GET_ROAMING_PREFERENCE);
- msg.arg1 = mTelephonyManager.getCdmaRoamingMode();
- msg.sendToTarget();
- });
- }
-
- private void setCdmaRoamingMode(int mode) {
- ThreadUtils.postOnBackgroundThread(() -> {
- Message msg = mHandler.obtainMessage(MyHandler.MESSAGE_SET_ROAMING_PREFERENCE);
- msg.obj = mTelephonyManager.setCdmaRoamingMode(mode);
- msg.sendToTarget();
- });
- }
-}
diff --git a/src/com/android/phone/DataUsagePreference.java b/src/com/android/phone/DataUsagePreference.java
deleted file mode 100644
index b6b26e2..0000000
--- a/src/com/android/phone/DataUsagePreference.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2017 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 android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.net.NetworkTemplate;
-import android.preference.Preference;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
-import android.text.format.Formatter;
-import android.util.AttributeSet;
-
-import com.android.settingslib.net.DataUsageController;
-
-/**
- * The preference that shows mobile data usage summary and
- * leads to mobile data usage list page.
- */
-public class DataUsagePreference extends Preference {
-
- private NetworkTemplate mTemplate;
- private int mSubId;
-
- public DataUsagePreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- /**
- * After creating this preference, this functions needs to be called to
- * initialize which subID it connects to.
- */
- public void initialize(int subId) {
- Activity activity = (Activity) getContext();
-
- mSubId = subId;
- mTemplate = getNetworkTemplate(activity, subId);
-
- DataUsageController controller = new DataUsageController(activity);
-
- DataUsageController.DataUsageInfo usageInfo = controller.getDataUsageInfo(mTemplate);
- setSummary(activity.getString(R.string.data_usage_template,
- Formatter.formatFileSize(activity, usageInfo.usageLevel), usageInfo.period));
- setIntent(getIntent());
- }
-
- @Override
- public Intent getIntent() {
- Intent intent = new Intent(Settings.ACTION_MOBILE_DATA_USAGE);
-
- intent.putExtra(Settings.EXTRA_NETWORK_TEMPLATE, mTemplate);
- intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
-
- return intent;
- }
-
- private NetworkTemplate getNetworkTemplate(Activity activity, int subId) {
- TelephonyManager tm = (TelephonyManager) activity
- .getSystemService(Context.TELEPHONY_SERVICE);
- NetworkTemplate mobileAll = NetworkTemplate.buildTemplateMobileAll(
- tm.getSubscriberId(subId));
- return NetworkTemplate.normalize(mobileAll,
- tm.getMergedSubscriberIds());
- }
-}
diff --git a/src/com/android/phone/EmergencyCallbackModeExitDialog.java b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
index 2492f46..dcfa024 100644
--- a/src/com/android/phone/EmergencyCallbackModeExitDialog.java
+++ b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
@@ -68,6 +68,7 @@
private boolean mInEmergencyCall = false;
private static final int ECM_TIMER_RESET = 1;
private Phone mPhone = null;
+ private boolean mIsResumed = false;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -100,6 +101,18 @@
}
@Override
+ public void onResume() {
+ super.onResume();
+ mIsResumed = true;
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ mIsResumed = false;
+ }
+
+ @Override
public void onDestroy() {
super.onDestroy();
try {
@@ -176,7 +189,7 @@
* Shows Emergency Callback Mode dialog and starts countdown timer
*/
private void showEmergencyCallbackModeExitDialog() {
- if (!this.isResumed()) {
+ if (!mIsResumed) {
Log.w(TAG, "Tried to show dialog, but activity was already finished");
return;
}
diff --git a/src/com/android/phone/GsmUmtsCallBarringOptions.java b/src/com/android/phone/GsmUmtsCallBarringOptions.java
index a6f9844..3c9cd84 100644
--- a/src/com/android/phone/GsmUmtsCallBarringOptions.java
+++ b/src/com/android/phone/GsmUmtsCallBarringOptions.java
@@ -27,7 +27,6 @@
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.telephony.CarrierConfigManager;
-import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
@@ -423,9 +422,7 @@
boolean useDisableaAll = true;
ImsPhone imsPhone = mPhone != null ? (ImsPhone) mPhone.getImsPhone() : null;
- if (imsPhone != null
- && ((imsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE)
- || imsPhone.isUtEnabled())) {
+ if (imsPhone != null && imsPhone.isUtEnabled()) {
usePassword = false;
useDisableaAll = false;
}
diff --git a/src/com/android/phone/GsmUmtsCallForwardOptions.java b/src/com/android/phone/GsmUmtsCallForwardOptions.java
index b8ea8fd..10bd8d7 100644
--- a/src/com/android/phone/GsmUmtsCallForwardOptions.java
+++ b/src/com/android/phone/GsmUmtsCallForwardOptions.java
@@ -18,6 +18,7 @@
import java.util.ArrayList;
public class GsmUmtsCallForwardOptions extends TimeConsumingPreferenceActivity {
+ private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
private static final String LOG_TAG = "GsmUmtsCallForwardOptions";
private static final String NUM_PROJECTION[] = {
@@ -62,6 +63,7 @@
mPhone = mSubscriptionInfoHelper.getPhone();
PersistableBundle b = null;
+ boolean supportCFNRc = true;
if (mSubscriptionInfoHelper.hasSubId()) {
b = PhoneGlobals.getInstance().getCarrierConfigForSubId(
mSubscriptionInfoHelper.getSubId());
@@ -73,6 +75,8 @@
CarrierConfigManager.KEY_CALL_FORWARDING_MAP_NON_NUMBER_TO_VOICEMAIL_BOOL);
mCallForwardByUssd = b.getBoolean(
CarrierConfigManager.KEY_USE_CALL_FORWARDING_USSD_BOOL);
+ supportCFNRc = b.getBoolean(
+ CarrierConfigManager.KEY_CALL_FORWARDING_WHEN_UNREACHABLE_SUPPORTED_BOOL);
}
PreferenceScreen prefSet = getPreferenceScreen();
@@ -89,7 +93,16 @@
mPreferences.add(mButtonCFU);
mPreferences.add(mButtonCFB);
mPreferences.add(mButtonCFNRy);
- mPreferences.add(mButtonCFNRc);
+
+ if (supportCFNRc) {
+ mPreferences.add(mButtonCFNRc);
+ } else {
+ // When CFNRc is not supported, mButtonCFNRc is grayed out from the menu.
+ // Default state for the preferences in this PreferenceScreen is disabled.
+ // Only preferences listed in the ArrayList mPreferences will be enabled.
+ // By not adding mButtonCFNRc to mPreferences it will be kept disabled.
+ if (DBG) Log.d(LOG_TAG, "onCreate: CFNRc is not supported, grey out the item.");
+ }
if (mCallForwardByUssd) {
//the call forwarding ussd command's behavior is similar to the call forwarding when
diff --git a/src/com/android/phone/GsmUmtsOptions.java b/src/com/android/phone/GsmUmtsOptions.java
deleted file mode 100644
index 7f6207b..0000000
--- a/src/com/android/phone/GsmUmtsOptions.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2008 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 android.content.Context;
-import android.content.Intent;
-import android.os.PersistableBundle;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceScreen;
-import android.provider.Settings;
-import android.telephony.CarrierConfigManager;
-import android.telephony.TelephonyManager;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.telephony.PhoneConstants;
-import com.android.settingslib.RestrictedLockUtilsInternal;
-
-/**
- * List of Network-specific settings screens.
- */
-public class GsmUmtsOptions {
- private static final String LOG_TAG = "GsmUmtsOptions";
-
- private CarrierConfigManager mCarrierConfigManager;
- private RestrictedPreference mButtonAPNExpand;
- private Preference mCategoryAPNExpand;
- Preference mCarrierSettingPref;
-
- private NetworkOperators mNetworkOperator;
-
- private static final String BUTTON_APN_EXPAND_KEY = "button_gsm_apn_key";
- private static final String CATEGORY_APN_EXPAND_KEY = "category_gsm_apn_key";
- private static final String BUTTON_CARRIER_SETTINGS_KEY = "carrier_settings_key";
-
- public static final String EXTRA_SUB_ID = "sub_id";
- private PreferenceFragment mPrefFragment;
- private PreferenceScreen mPrefScreen;
-
- public GsmUmtsOptions(PreferenceFragment prefFragment, PreferenceScreen prefScreen,
- final int subId) {
- final Context context = prefFragment.getContext();
- mPrefFragment = prefFragment;
- mPrefScreen = prefScreen;
- mCarrierConfigManager = new CarrierConfigManager(context);
- mPrefFragment.addPreferencesFromResource(R.xml.gsm_umts_options);
- mButtonAPNExpand = (RestrictedPreference) mPrefScreen.findPreference(BUTTON_APN_EXPAND_KEY);
- mCategoryAPNExpand = mPrefScreen.findPreference(CATEGORY_APN_EXPAND_KEY);
- mNetworkOperator = (NetworkOperators) mPrefScreen
- .findPreference(NetworkOperators.CATEGORY_NETWORK_OPERATORS_KEY);
- mCarrierSettingPref = mPrefScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
-
- mNetworkOperator.initialize();
-
- update(subId);
- }
-
- // Unlike mPrefFragment or mPrefScreen, subId may change during lifecycle of GsmUmtsOptions.
- // When that happens, we update GsmUmtsOptions with new parameters.
- protected void update(final int subId) {
- boolean addAPNExpand = true;
- boolean addNetworkOperatorsCategory = true;
- boolean addCarrierSettings = true;
- final TelephonyManager telephonyManager = TelephonyManager.from(mPrefFragment.getContext())
- .createForSubscriptionId(subId);
- if (telephonyManager.getPhoneType() != PhoneConstants.PHONE_TYPE_GSM) {
- log("Not a GSM phone");
- addAPNExpand = false;
- mNetworkOperator.setEnabled(false);
- } else {
- log("Not a CDMA phone");
- PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
-
- // Determine which options to display. For GSM these are defaulted to true in
- // CarrierConfigManager, but they maybe overriden by DefaultCarrierConfigService or a
- // carrier app.
- // Note: these settings used to be controlled with overlays in
- // Telephony/res/values/config.xml
- if (!carrierConfig.getBoolean(CarrierConfigManager.KEY_APN_EXPAND_BOOL)
- && mCategoryAPNExpand != null) {
- addAPNExpand = false;
- }
- if (!carrierConfig.getBoolean(
- CarrierConfigManager.KEY_OPERATOR_SELECTION_EXPAND_BOOL)) {
- addNetworkOperatorsCategory = false;
- }
-
- if (carrierConfig.getBoolean(CarrierConfigManager.KEY_CSP_ENABLED_BOOL)) {
- if (telephonyManager.isManualNetworkSelectionAllowed()) {
- log("[CSP] Enabling Operator Selection menu.");
- mNetworkOperator.setEnabled(true);
- } else {
- log("[CSP] Disabling Operator Selection menu.");
- addNetworkOperatorsCategory = false;
- }
- }
-
- // Read platform settings for carrier settings
- addCarrierSettings = carrierConfig.getBoolean(
- CarrierConfigManager.KEY_CARRIER_SETTINGS_ENABLE_BOOL);
- }
-
- // Making no assumptions of whether they are added or removed at this point.
- // Calling add or remove explicitly to make sure they are updated.
-
- if (addAPNExpand) {
- log("update: addAPNExpand");
- mButtonAPNExpand.setDisabledByAdmin(
- MobileNetworkSettings.isDpcApnEnforced(mButtonAPNExpand.getContext())
- ? RestrictedLockUtilsInternal.getDeviceOwner(
- mButtonAPNExpand.getContext())
- : null);
- mButtonAPNExpand.setOnPreferenceClickListener(
- new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- MetricsLogger.action(mButtonAPNExpand.getContext(),
- MetricsEvent.ACTION_MOBILE_NETWORK_APN_SETTINGS);
- // We need to build the Intent by hand as the Preference Framework
- // does not allow to add an Intent with some extras into a Preference
- // XML file
- final Intent intent = new Intent(Settings.ACTION_APN_SETTINGS);
- // This will setup the Home and Search affordance
- intent.putExtra(":settings:show_fragment_as_subsetting", true);
- intent.putExtra(EXTRA_SUB_ID, subId);
- mPrefFragment.startActivity(intent);
- return true;
- }
- });
- mPrefScreen.addPreference(mCategoryAPNExpand);
- } else {
- mPrefScreen.removePreference(mCategoryAPNExpand);
- }
-
- if (addNetworkOperatorsCategory) {
- mPrefScreen.addPreference(mNetworkOperator);
- mNetworkOperator.update(subId);
- } else {
- mPrefScreen.removePreference(mNetworkOperator);
- }
-
- if (addCarrierSettings) {
- mPrefScreen.addPreference(mCarrierSettingPref);
- } else {
- mPrefScreen.removePreference(mCarrierSettingPref);
- }
-
- }
-
- protected boolean preferenceTreeClick(Preference preference) {
- return mNetworkOperator.preferenceTreeClick(preference);
- }
-
- protected void log(String s) {
- android.util.Log.d(LOG_TAG, s);
- }
-}
diff --git a/src/com/android/phone/INetworkQueryService.aidl b/src/com/android/phone/INetworkQueryService.aidl
deleted file mode 100644
index f65c971..0000000
--- a/src/com/android/phone/INetworkQueryService.aidl
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2008 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.phone.INetworkQueryServiceCallback;
-
-/**
- * Service interface to handle queries for available networks. The
- * Phone application lets this service interface handle carrier
- * availability queries instead of making direct calls to the Phone layer.
- */
-oneway interface INetworkQueryService {
-
- /**
- * Starts a network query if it has not been started yet, and
- * request a callback through the INetworkQueryServiceCallback
- * object on query completion. If there is an existing request,
- * then just add the callback to the list of notifications
- * that will be sent upon query completion.
- *
- * It will send the network query with the use of
- * <code>TelephonyManager.requestNetworkScan()</code> if the
- * isIncrementalResult is true. And if the isIncrementalResult
- * is set as false, it will try to send network query through
- * <code>Phone.getAvailableNetworks()</code>.
- */
- void startNetworkQuery(in INetworkQueryServiceCallback cb, in int phoneId, boolean isIncrementalResult);
-
- /**
- * Tells the service that the requested query is to be ignored.
- * This may not do anything for the Query request in the
- * underlying RIL, but it ensures that the callback is removed
- * from the list of notifications.
- */
- void stopNetworkQuery();
-
- /**
- * Tells the service to unregister the network query callback.
- * Will not attempt to stop an ongoing network query.
- * Functionally may be the same as stopNetworkQuery since that
- * function also does not stop a query request in the underlying
- * RIL.
- */
- void unregisterCallback(in INetworkQueryServiceCallback cb);
-}
diff --git a/src/com/android/phone/INetworkQueryServiceCallback.aidl b/src/com/android/phone/INetworkQueryServiceCallback.aidl
deleted file mode 100644
index 2299f5e..0000000
--- a/src/com/android/phone/INetworkQueryServiceCallback.aidl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2008 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 android.telephony.CellInfo;
-import com.android.internal.telephony.OperatorInfo;
-
-/**
- * Service interface to handle callbacks into the activity from the
- * NetworkQueryService. These objects are used to notify that a
- * query is complete and that the results are ready to process.
- */
-oneway interface INetworkQueryServiceCallback {
-
- /**
- * Returns the scan results to the user, this callback will be
- * called at least one time.
- */
- void onResults(in List<CellInfo> results);
-
- /**
- * Informs the user that the scan has stopped.
- *
- * This callback will be called when the scan is finished or cancelled by the user.
- * The related NetworkScanRequest will be deleted after this callback.
- */
- void onComplete();
-
- /**
- * Informs the user that there is some error about the scan.
- *
- * This callback will be called whenever there is any error about the scan,
- * and the scan will be terminated. onComplete() will NOT be called.
- */
- void onError(int error);
-
-}
diff --git a/src/com/android/phone/MobileDataPreference.java b/src/com/android/phone/MobileDataPreference.java
deleted file mode 100644
index e1ceab0..0000000
--- a/src/com/android/phone/MobileDataPreference.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (C) 2017 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 android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.preference.DialogPreference;
-import android.preference.PreferenceScreen;
-import android.provider.Settings.Global;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-import android.widget.Checkable;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-
-import java.util.List;
-
-/**
- * Customized Preference to enable / disable mobile data.
- * Basically copy of with com.android.settings.CellDataPreference.
- */
-public class MobileDataPreference extends DialogPreference {
-
- private static final boolean DBG = false;
- private static final String TAG = "MobileDataPreference";
-
- public int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- public boolean mChecked;
- // Whether to show the dialog to ask switching default data subscription.
- // Should be true only when a multi-sim phone only supports data connection on a single phone,
- // and user is enabling data on the non-default phone.
- public boolean mMultiSimDialog;
- private TelephonyManager mTelephonyManager;
- private SubscriptionManager mSubscriptionManager;
-
- public MobileDataPreference(Context context, AttributeSet attrs) {
- super(context, attrs, com.android.internal.R.attr.switchPreferenceStyle);
- }
-
- // Must be called to avoid binder leakage.
- void dispose() {
- mListener.setListener(false, mSubId, getContext());
- }
-
- @Override
- protected void onRestoreInstanceState(Parcelable s) {
- CellDataState state = (CellDataState) s;
- super.onRestoreInstanceState(state.getSuperState());
- mTelephonyManager = TelephonyManager.from(getContext());
- mChecked = state.mChecked;
- mMultiSimDialog = state.mMultiSimDialog;
- if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
- mSubId = state.mSubId;
- setKey(getKey() + mSubId);
- }
- notifyChanged();
- }
-
- @Override
- protected Parcelable onSaveInstanceState() {
- CellDataState state = new CellDataState(super.onSaveInstanceState());
- state.mChecked = mChecked;
- state.mMultiSimDialog = mMultiSimDialog;
- state.mSubId = mSubId;
- return state;
- }
-
- @Override
- protected void onAttachedToActivity() {
- super.onAttachedToActivity();
- mListener.setListener(true, mSubId, getContext());
- }
-
- @Override
- protected void onPrepareForRemoval() {
- mListener.setListener(false, mSubId, getContext());
- super.onPrepareForRemoval();
- }
-
- /**
- * Initialize this preference with subId.
- */
- public void initialize(int subId) {
- if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
- throw new IllegalArgumentException("MobileDataPreference needs a SubscriptionInfo");
- }
- mSubscriptionManager = SubscriptionManager.from(getContext());
- mTelephonyManager = TelephonyManager.from(getContext());
- if (mSubId != subId) {
- mSubId = subId;
- setKey(getKey() + subId);
- }
- updateChecked();
- }
-
- private void updateChecked() {
- setChecked(mTelephonyManager.getDataEnabled(mSubId));
- }
-
- @Override
- public void performClick(PreferenceScreen preferenceScreen) {
- if (!isEnabled() || !SubscriptionManager.isValidSubscriptionId(mSubId)) {
- return;
- }
- final SubscriptionInfo currentSir = mSubscriptionManager.getActiveSubscriptionInfo(
- mSubId);
- final SubscriptionInfo nextSir = mSubscriptionManager.getDefaultDataSubscriptionInfo();
- final boolean isMultiSim = (mTelephonyManager.getSimCount() > 1);
- final boolean isMultipleDataOnCapable =
- (mTelephonyManager.getNumberOfModemsWithSimultaneousDataConnections() > 1);
- final boolean isDefaultDataSubscription = (nextSir != null && currentSir != null
- && currentSir.getSubscriptionId() == nextSir.getSubscriptionId());
- if (mChecked) {
- if (!isMultiSim) {
- // disabling data; show confirmation dialog which eventually
- // calls setMobileDataEnabled() once user confirms.
- mMultiSimDialog = false;
- super.performClick(preferenceScreen);
- } else {
- // Don't show any dialog.
- setMobileDataEnabled(false /* enabled */, false /* disableOtherSubscriptions */);
- }
- } else {
- if (isMultiSim && !isMultipleDataOnCapable && !isDefaultDataSubscription) {
- // enabling data and setting to default; show confirmation dialog which eventually
- // calls setMobileDataEnabled() once user confirms.
- mMultiSimDialog = true;
- super.performClick(preferenceScreen);
- } else {
- // Don't show any dialog.
- setMobileDataEnabled(true /* enabled */, false /* disableOtherSubscriptions */);
- }
- }
- }
-
- private void setMobileDataEnabled(boolean enabled, boolean disableOtherSubscriptions) {
- if (DBG) Log.d(TAG, "setMobileDataEnabled(" + enabled + "," + mSubId + ")");
-
- MetricsLogger.action(getContext(), MetricsEvent.ACTION_MOBILE_NETWORK_MOBILE_DATA_TOGGLE,
- enabled);
-
- mTelephonyManager.setDataEnabled(mSubId, enabled);
-
- if (disableOtherSubscriptions) {
- disableDataForOtherSubscriptions(mSubId);
- }
-
- setChecked(enabled);
- }
-
- private void setChecked(boolean checked) {
- if (mChecked == checked) return;
- mChecked = checked;
- notifyChanged();
- }
-
- @Override
- protected void onBindView(View view) {
- super.onBindView(view);
- View checkableView = view.findViewById(com.android.internal.R.id.switch_widget);
- checkableView.setClickable(false);
- ((Checkable) checkableView).setChecked(mChecked);
- }
-
- @Override
- protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
- if (mMultiSimDialog) {
- showMultiSimDialog(builder);
- } else {
- showDisableDialog(builder);
- }
- }
-
- private void showDisableDialog(AlertDialog.Builder builder) {
- builder.setTitle(null)
- .setMessage(R.string.data_usage_disable_mobile)
- .setPositiveButton(android.R.string.ok, this)
- .setNegativeButton(android.R.string.cancel, null);
- }
-
- private void showMultiSimDialog(AlertDialog.Builder builder) {
- final SubscriptionInfo currentSir = mSubscriptionManager.getActiveSubscriptionInfo(mSubId);
- final SubscriptionInfo nextSir = mSubscriptionManager.getDefaultDataSubscriptionInfo();
-
- final String previousName = (nextSir == null)
- ? getContext().getResources().getString(R.string.sim_selection_required_pref)
- : nextSir.getDisplayName().toString();
-
- builder.setTitle(R.string.sim_change_data_title);
- builder.setMessage(getContext().getString(R.string.sim_change_data_message,
- String.valueOf(currentSir != null ? currentSir.getDisplayName() : null),
- previousName));
-
- builder.setPositiveButton(R.string.ok, this);
- builder.setNegativeButton(R.string.cancel, null);
- }
-
- private void disableDataForOtherSubscriptions(int subId) {
- List<SubscriptionInfo> subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();
- if (subInfoList != null) {
- for (SubscriptionInfo subInfo : subInfoList) {
- if (subInfo.getSubscriptionId() != subId) {
- mTelephonyManager.setDataEnabled(subInfo.getSubscriptionId(), false);
- }
- }
- }
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- if (which != DialogInterface.BUTTON_POSITIVE) {
- return;
- }
- if (mMultiSimDialog) {
- mSubscriptionManager.setDefaultDataSubId(mSubId);
- setMobileDataEnabled(true /* enabled */, true /* disableOtherSubscriptions */);
- } else {
- // TODO: extend to modify policy enabled flag.
- setMobileDataEnabled(false /* enabled */, false /* disableOtherSubscriptions */);
- }
- }
-
- private final DataStateListener mListener = new DataStateListener() {
- @Override
- public void onChange(boolean selfChange) {
- updateChecked();
- }
- };
-
- /**
- * Listener that listens mobile data state change.
- */
- public abstract static class DataStateListener extends ContentObserver {
- public DataStateListener() {
- super(new Handler(Looper.getMainLooper()));
- }
-
- /**
- * Set / Unset data state listening, specifying subId.
- */
- public void setListener(boolean listening, int subId, Context context) {
- if (listening) {
- Uri uri = Global.getUriFor(Global.MOBILE_DATA);
- if (TelephonyManager.getDefault().getSimCount() != 1) {
- uri = Global.getUriFor(Global.MOBILE_DATA + subId);
- }
- context.getContentResolver().registerContentObserver(uri, false, this);
- } else {
- context.getContentResolver().unregisterContentObserver(this);
- }
- }
- }
-
- /**
- * Class that represents state of mobile data state.
- * Used by onSaveInstanceState and onRestoreInstanceState.
- */
- public static class CellDataState extends BaseSavedState {
- public int mSubId;
- public boolean mChecked;
- public boolean mMultiSimDialog;
-
- public CellDataState(Parcelable base) {
- super(base);
- }
-
- public CellDataState(Parcel source) {
- super(source);
- mChecked = source.readByte() != 0;
- mMultiSimDialog = source.readByte() != 0;
- mSubId = source.readInt();
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- super.writeToParcel(dest, flags);
- dest.writeByte((byte) (mChecked ? 1 : 0));
- dest.writeByte((byte) (mMultiSimDialog ? 1 : 0));
- dest.writeInt(mSubId);
- }
-
- public static final Creator<CellDataState> CREATOR = new Creator<CellDataState>() {
- @Override
- public CellDataState createFromParcel(Parcel source) {
- return new CellDataState(source);
- }
-
- @Override
- public CellDataState[] newArray(int size) {
- return new CellDataState[size];
- }
- };
- }
-}
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
deleted file mode 100644
index e67758d..0000000
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ /dev/null
@@ -1,2308 +0,0 @@
-/*
- * 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 static android.provider.Telephony.Carriers.ENFORCE_MANAGED_URI;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.app.DialogFragment;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-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.database.Cursor;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.PersistableBundle;
-import android.os.SystemProperties;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceScreen;
-import android.preference.SwitchPreference;
-import android.provider.Settings;
-import android.sysprop.SetupWizardProperties;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.telephony.CarrierConfigManager;
-import android.telephony.PhoneStateListener;
-import android.telephony.ServiceState;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.telephony.euicc.EuiccManager;
-import android.telephony.ims.ProvisioningManager;
-import android.telephony.ims.feature.ImsFeature;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TabHost;
-
-import com.android.ims.ImsConfig;
-import com.android.ims.ImsException;
-import com.android.ims.ImsManager;
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.TelephonyIntents;
-import com.android.settingslib.RestrictedLockUtilsInternal;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * "Mobile network settings" screen. This 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 Activity 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 Activity {
-
- // CID of the device.
- private static final String KEY_CID = "ro.boot.cid";
- // System Property which is used to decide whether the default eSIM UI will be shown,
- // the default value is false.
- private static final String KEY_ENABLE_ESIM_UI_BY_DEFAULT =
- "esim.enable_esim_system_ui_by_default";
-
- private static final String LEGACY_ACTION_CONFIGURE_PHONE_ACCOUNT =
- "android.telecom.action.CONNECTION_SERVICE_CONFIGURE";
-
- private enum TabState {
- NO_TABS, UPDATE, DO_NOTHING
- }
-
- @Override
- protected void onNewIntent(Intent intent) {
- setIntent(intent);
- MobileNetworkFragment fragment = (MobileNetworkFragment) getFragmentManager()
- .findFragmentById(R.id.network_setting_content);
- if (fragment != null) {
- fragment.onIntentUpdate(intent);
- }
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.network_setting);
-
- FragmentManager fragmentManager = getFragmentManager();
- Fragment fragment = fragmentManager.findFragmentById(R.id.network_setting_content);
- if (fragment == null) {
- fragmentManager.beginTransaction()
- .add(R.id.network_setting_content, new MobileNetworkFragment())
- .commit();
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(final MenuItem item) {
- final int itemId = item.getItemId();
- switch (itemId) {
- // Respond to the action bar's Up/Home button
- case android.R.id.home:
- finish();
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
-
- /**
- * Returns true if Wifi calling is enabled for at least one subscription.
- */
- public static boolean isWifiCallingEnabled(Context context) {
- SubscriptionManager subManager = context.getSystemService(SubscriptionManager.class);
- if (subManager == null) {
- Log.e(MobileNetworkFragment.LOG_TAG,
- "isWifiCallingEnabled: couldn't get system service.");
- return false;
- }
- for (int subId : subManager.getActiveSubscriptionIdList()) {
- if (isWifiCallingEnabled(context, subId)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Returns true if Wifi calling is enabled for the specific subscription with id {@code subId}.
- */
- public static boolean isWifiCallingEnabled(Context context, int subId) {
- final PhoneAccountHandle simCallManager =
- TelecomManager.from(context).getSimCallManagerForSubscription(subId);
- final int phoneId = SubscriptionManager.getSlotIndex(subId);
-
- boolean isWifiCallingEnabled;
- if (simCallManager != null) {
- Intent intent = MobileNetworkSettings.buildPhoneAccountConfigureIntent(
- context, simCallManager);
- PackageManager pm = context.getPackageManager();
- isWifiCallingEnabled = intent != null
- && !pm.queryIntentActivities(intent, 0 /* flags */).isEmpty();
- } else {
- ImsManager imsMgr = ImsManager.getInstance(context, phoneId);
- isWifiCallingEnabled = imsMgr != null
- && imsMgr.isWfcEnabledByPlatform()
- && imsMgr.isWfcProvisionedOnDevice()
- && isImsServiceStateReady(imsMgr);
- }
-
- return isWifiCallingEnabled;
- }
-
- /**
- * Whether to show the entry point to eUICC settings.
- *
- * <p>We show the entry point on any device which supports eUICC as long as either the eUICC
- * was ever provisioned (that is, at least one profile was ever downloaded onto it), or if
- * the user has enabled development mode.
- */
- public static boolean showEuiccSettings(Context context) {
- EuiccManager euiccManager =
- (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
- if (!euiccManager.isEnabled()) {
- return false;
- }
-
- ContentResolver cr = context.getContentResolver();
-
- TelephonyManager tm =
- (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
- String currentCountry = tm.getNetworkCountryIso().toLowerCase();
- String supportedCountries =
- Settings.Global.getString(cr, Settings.Global.EUICC_SUPPORTED_COUNTRIES);
- boolean inEsimSupportedCountries = false;
- if (TextUtils.isEmpty(currentCountry)) {
- inEsimSupportedCountries = true;
- } else if (!TextUtils.isEmpty(supportedCountries)) {
- List<String> supportedCountryList =
- Arrays.asList(TextUtils.split(supportedCountries.toLowerCase(), ","));
- if (supportedCountryList.contains(currentCountry)) {
- inEsimSupportedCountries = true;
- }
- }
- final boolean esimIgnoredDevice =
- SetupWizardProperties.esim_cid_ignore()
- .contains(SystemProperties.get(KEY_CID, null));
- final boolean enabledEsimUiByDefault =
- SystemProperties.getBoolean(KEY_ENABLE_ESIM_UI_BY_DEFAULT, true);
- final boolean euiccProvisioned =
- Settings.Global.getInt(cr, Settings.Global.EUICC_PROVISIONED, 0) != 0;
- final boolean inDeveloperMode =
- Settings.Global.getInt(cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
-
- return (inDeveloperMode || euiccProvisioned
- || (!esimIgnoredDevice && enabledEsimUiByDefault && inEsimSupportedCountries));
- }
-
- /**
- * Whether to show the Enhanced 4G LTE settings in search result.
- *
- * <p>We show this settings if the VoLTE can be enabled by this device and the carrier app
- * doesn't set {@link CarrierConfigManager#KEY_HIDE_ENHANCED_4G_LTE_BOOL} to false.
- */
- public static boolean hideEnhanced4gLteSettings(Context context) {
- final CarrierConfigManager carrierConfigManager = new CarrierConfigManager(context);
- final List<SubscriptionInfo> sil =
- SubscriptionManager.from(context).getActiveSubscriptionInfoList();
- // Check all active subscriptions. We only hide the button if it's disabled for all
- // active subscriptions.
- if (sil != null) {
- for (SubscriptionInfo subInfo : sil) {
- int phoneId = SubscriptionManager.getPhoneId(subInfo.getSubscriptionId());
- ImsManager imsManager = ImsManager.getInstance(context, phoneId);
- PersistableBundle carrierConfig = carrierConfigManager.getConfigForSubId(
- subInfo.getSubscriptionId());
- if ((imsManager.isVolteEnabledByPlatform()
- && imsManager.isVolteProvisionedOnDevice())
- || carrierConfig.getBoolean(
- CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL)) {
- return false;
- }
- }
- }
-
- return true;
- }
-
- /**
- * Returns if DPC APNs are enforced.
- */
- public static boolean isDpcApnEnforced(Context context) {
- try (Cursor enforceCursor = context.getContentResolver().query(ENFORCE_MANAGED_URI,
- null, null, null, null)) {
- if (enforceCursor == null || enforceCursor.getCount() != 1) {
- return false;
- }
- enforceCursor.moveToFirst();
- return enforceCursor.getInt(0) > 0;
- }
- }
-
- private static boolean isImsServiceStateReady(ImsManager imsMgr) {
- boolean isImsServiceStateReady = false;
-
- try {
- if (imsMgr != null && imsMgr.getImsServiceState() == ImsFeature.STATE_READY) {
- isImsServiceStateReady = true;
- }
- } catch (ImsException ex) {
- Log.e(MobileNetworkFragment.LOG_TAG,
- "Exception when trying to get ImsServiceStatus: " + ex);
- }
-
- Log.d(MobileNetworkFragment.LOG_TAG, "isImsServiceStateReady=" + isImsServiceStateReady);
- return isImsServiceStateReady;
- }
-
-
- 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;
- }
-
- public static class MobileNetworkFragment extends PreferenceFragment implements
- Preference.OnPreferenceChangeListener, RoamingDialogFragment.RoamingDialogListener {
-
- // debug data
- private static final String LOG_TAG = "NetworkSettings";
- private static final boolean DBG = true;
- public static final int REQUEST_CODE_EXIT_ECM = 17;
-
- // Number of active Subscriptions to show tabs
- private static final int TAB_THRESHOLD = 2;
-
- // Number of last phone number digits shown in Euicc Setting tab
- private static final int NUM_LAST_PHONE_DIGITS = 4;
-
- // fragment tag for roaming data dialog
- private static final String ROAMING_TAG = "RoamingDialogFragment";
-
- //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_WIFI_CALLING_KEY = "wifi_calling_key";
- private static final String BUTTON_VIDEO_CALLING_KEY = "video_calling_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 final BroadcastReceiver mPhoneChangeReceiver = new PhoneChangeReceiver();
- private final ContentObserver mDpcEnforcedContentObserver = new DpcApnEnforcedObserver();
-
- 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";
-
- //Information that needs to save into Bundle.
- private static final String EXPAND_ADVANCED_FIELDS = "expand_advanced_fields";
- //Intent extra to indicate expand all fields.
- private static final String EXPAND_EXTRA = "expandable";
-
- private SubscriptionManager mSubscriptionManager;
- private TelephonyManager mTelephonyManager;
- private CarrierConfigManager mCarrierConfigManager;
- private int mSubId;
-
- //UI objects
- private AdvancedOptionsPreference mAdvancedOptions;
- private ListPreference mButtonPreferredNetworkMode;
- private ListPreference mButtonEnabledNetworks;
- private RestrictedSwitchPreference mButtonDataRoam;
- private SwitchPreference mButton4glte;
- private Preference mLteDataServicePref;
- private Preference mEuiccSettingsPref;
- private PreferenceCategory mCallingCategory;
- private Preference mWiFiCallingPref;
- private SwitchPreference mVideoCallingPref;
- private NetworkSelectListPreference mButtonNetworkSelect;
- private MobileDataPreference mMobileDataPref;
- private DataUsagePreference mDataUsagePref;
-
- private static final String iface = "rmnet0"; //TODO: this will go away
- private List<SubscriptionInfo> mActiveSubInfos;
-
- private UserManager mUm;
- private ImsManager mImsMgr;
- private MyHandler mHandler;
- private boolean mOkClicked;
- private boolean mExpandAdvancedFields;
-
- // We assume the the value returned by mTabHost.getCurrentTab() == slotId
- private TabHost mTabHost;
-
- //GsmUmts options and Cdma options
- GsmUmtsOptions mGsmUmtsOptions;
- CdmaOptions mCdmaOptions;
-
- private Preference mClickedPreference;
- private boolean mShow4GForLTE = false;
- private boolean mIsGlobalCdma;
- private boolean mOnlyAutoSelectInHomeNW;
- private boolean mUnavailable;
-
- private class PhoneCallStateListener extends PhoneStateListener {
- /*
- * Enable/disable the 'Enhanced 4G LTE Mode' when in/out of a call
- * and depending on TTY mode and TTY support over VoLTE.
- * @see android.telephony.PhoneStateListener#onCallStateChanged(int,
- * java.lang.String)
- */
- @Override
- public void onCallStateChanged(int state, String incomingNumber) {
- if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
-
- updateEnhanced4gLteState();
- updateWiFiCallState();
- updateVideoCallState();
- updatePreferredNetworkType();
- }
-
- /**
- * Listen to different subId if it's changed.
- */
- protected void updateSubscriptionId(Integer subId) {
- if (subId.equals(PhoneCallStateListener.this.mSubId)) {
- return;
- }
-
- mTelephonyManager.listen(this, PhoneStateListener.LISTEN_NONE);
-
- // Now, listen to new subId if it's valid. register the listener with
- // mTelephonyManager instance created for the new subId.
- if (SubscriptionManager.isValidSubscriptionId(subId)) {
- mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
- }
- }
- }
-
- private final PhoneCallStateListener mPhoneStateListener = new PhoneCallStateListener();
-
- @Override
- public void onPositiveButtonClick(DialogFragment dialog) {
- mTelephonyManager.setDataRoamingEnabled(true);
- mButtonDataRoam.setChecked(true);
- MetricsLogger.action(getContext(),
- getMetricsEventCategory(getPreferenceScreen(), mButtonDataRoam),
- true);
- }
-
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- if (getListView() != null) {
- getListView().setDivider(null);
- }
- }
-
- public void onIntentUpdate(Intent intent) {
- if (!mUnavailable) {
- updateCurrentTab(intent.getExtras());
- }
- }
-
- /**
- * 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) {
- sendMetricsEventPreferenceClicked(preferenceScreen, preference);
-
- /** TODO: Refactor and get rid of the if's using subclasses */
- if (preference.getKey().equals(BUTTON_4G_LTE_KEY)) {
- return true;
- } else if (mGsmUmtsOptions != null &&
- mGsmUmtsOptions.preferenceTreeClick(preference) == true) {
- return true;
- } else if (mCdmaOptions != null &&
- mCdmaOptions.preferenceTreeClick(preference) == true) {
- if (mTelephonyManager.getEmergencyCallbackMode()) {
-
- 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(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
- preferredNetworkMode);
- mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
- return true;
- } else if (preference == mLteDataServicePref) {
- String tmpl = android.provider.Settings.Global.getString(
- getActivity().getContentResolver(),
- android.provider.Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
- if (!TextUtils.isEmpty(tmpl)) {
- String imsi = mTelephonyManager.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 (preference == mButtonEnabledNetworks) {
- int settingsNetworkMode = android.provider.Settings.Global.getInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
- preferredNetworkMode);
- mButtonEnabledNetworks.setValue(Integer.toString(settingsNetworkMode));
- return true;
- } else if (preference == mButtonDataRoam) {
- // Do not disable the preference screen if the user clicks Data roaming.
- return true;
- } else if (preference == mEuiccSettingsPref) {
- Intent intent = new Intent(EuiccManager.ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS);
- startActivity(intent);
- return true;
- } else if (preference == mWiFiCallingPref || preference == mVideoCallingPref
- || preference == mMobileDataPref || preference == mDataUsagePref) {
- return false;
- } else if (preference == mAdvancedOptions) {
- mExpandAdvancedFields = true;
- updateBody();
- 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;
- }
- }
-
- private final SubscriptionManager.OnSubscriptionsChangedListener
- mOnSubscriptionsChangeListener
- = new SubscriptionManager.OnSubscriptionsChangedListener() {
- @Override
- public void onSubscriptionsChanged() {
- if (DBG) log("onSubscriptionsChanged:");
- initializeSubscriptions();
- }
- };
-
- private int getSlotIdFromBundle(Bundle data) {
- int subId = -1;
- if (data != null) {
- subId = data.getInt(Settings.EXTRA_SUB_ID, -1);
- }
- return SubscriptionManager.getSlotIndex(subId);
- }
-
- private void initializeSubscriptions() {
- final Activity activity = getActivity();
- if (activity == null || activity.isDestroyed()) {
- // Process preferences in activity only if its not destroyed
- return;
- }
- int currentTab = 0;
- if (DBG) log("initializeSubscriptions:+");
-
- // Before updating the the active subscription list check
- // if tab updating is needed as the list is changing.
- List<SubscriptionInfo> sil = mSubscriptionManager.getActiveSubscriptionInfoList();
- MobileNetworkSettings.TabState state = isUpdateTabsNeeded(sil);
-
- // Update to the active subscription list
- mActiveSubInfos.clear();
- if (sil != null) {
- mActiveSubInfos.addAll(sil);
- // If there is only 1 sim then currenTab should represent slot no. of the sim.
- if (sil.size() == 1) {
- currentTab = sil.get(0).getSimSlotIndex();
- }
- }
-
- switch (state) {
- case UPDATE: {
- if (DBG) log("initializeSubscriptions: UPDATE");
- currentTab = mTabHost != null ? mTabHost.getCurrentTab() : 0;
-
- mTabHost = (TabHost) getActivity().findViewById(android.R.id.tabhost);
- mTabHost.setup();
-
- // Update the tabName. Since the mActiveSubInfos are in slot order
- // we can iterate though the tabs and subscription info in one loop. But
- // we need to handle the case where a slot may be empty.
-
- Iterator<SubscriptionInfo> siIterator = mActiveSubInfos.listIterator();
- SubscriptionInfo si = siIterator.hasNext() ? siIterator.next() : null;
- for (int simSlotIndex = 0; simSlotIndex < mActiveSubInfos.size();
- simSlotIndex++) {
- String tabName;
- if (si != null && si.getSimSlotIndex() == simSlotIndex) {
- // Slot is not empty and we match
- tabName = String.valueOf(si.getDisplayName());
- si = siIterator.hasNext() ? siIterator.next() : null;
- } else {
- // Slot is empty, set name to unknown
- tabName = getResources().getString(R.string.unknown);
- }
- if (DBG) {
- log("initializeSubscriptions:tab=" + simSlotIndex + " name=" + tabName);
- }
-
- mTabHost.addTab(buildTabSpec(String.valueOf(simSlotIndex), tabName));
- }
-
- mTabHost.setOnTabChangedListener(mTabListener);
- mTabHost.setCurrentTab(currentTab);
- break;
- }
- case NO_TABS: {
- if (DBG) log("initializeSubscriptions: NO_TABS");
-
- if (mTabHost != null) {
- mTabHost.clearAllTabs();
- mTabHost = null;
- }
- break;
- }
- case DO_NOTHING: {
- if (DBG) log("initializeSubscriptions: DO_NOTHING");
- if (mTabHost != null) {
- currentTab = mTabHost.getCurrentTab();
- }
- break;
- }
- }
- updatePhone(currentTab);
- updateBody();
- if (DBG) log("initializeSubscriptions:-");
- }
-
- private MobileNetworkSettings.TabState isUpdateTabsNeeded(List<SubscriptionInfo> newSil) {
- TabState state = MobileNetworkSettings.TabState.DO_NOTHING;
- if (newSil == null) {
- if (mActiveSubInfos.size() >= TAB_THRESHOLD) {
- if (DBG) log("isUpdateTabsNeeded: NO_TABS, size unknown and was tabbed");
- state = MobileNetworkSettings.TabState.NO_TABS;
- }
- } else if (newSil.size() < TAB_THRESHOLD && mActiveSubInfos.size() >= TAB_THRESHOLD) {
- if (DBG) log("isUpdateTabsNeeded: NO_TABS, size went to small");
- state = MobileNetworkSettings.TabState.NO_TABS;
- } else if (newSil.size() >= TAB_THRESHOLD && mActiveSubInfos.size() < TAB_THRESHOLD) {
- if (DBG) log("isUpdateTabsNeeded: UPDATE, size changed");
- state = MobileNetworkSettings.TabState.UPDATE;
- } else if (newSil.size() >= TAB_THRESHOLD) {
- Iterator<SubscriptionInfo> siIterator = mActiveSubInfos.iterator();
- for(SubscriptionInfo newSi : newSil) {
- SubscriptionInfo curSi = siIterator.next();
- if (!newSi.getDisplayName().equals(curSi.getDisplayName())) {
- if (DBG) log("isUpdateTabsNeeded: UPDATE, new name="
- + newSi.getDisplayName());
- state = MobileNetworkSettings.TabState.UPDATE;
- break;
- }
- }
- }
- if (DBG) {
- Log.i(LOG_TAG, "isUpdateTabsNeeded:- " + state
- + " newSil.size()=" + ((newSil != null) ? newSil.size() : 0)
- + " mActiveSubInfos.size()=" + mActiveSubInfos.size());
- }
- return state;
- }
-
- private TabHost.OnTabChangeListener mTabListener = new TabHost.OnTabChangeListener() {
- @Override
- public void onTabChanged(String tabId) {
- if (DBG) log("onTabChanged:");
- // The User has changed tab; update the body.
- updatePhone(Integer.parseInt(tabId));
- updateBody();
- }
- };
-
- private void updatePhone(int slotId) {
- final SubscriptionInfo sir = mSubscriptionManager
- .getActiveSubscriptionInfoForSimSlotIndex(slotId);
-
- if (sir != null) {
- mSubId = sir.getSubscriptionId();
-
- Log.i(LOG_TAG, "updatePhone:- slotId=" + slotId + " sir=" + sir);
-
- mImsMgr = ImsManager.getInstance(getContext(),
- SubscriptionManager.getPhoneId(mSubId));
- mTelephonyManager = new TelephonyManager(getContext(), mSubId);
- if (mImsMgr == null) {
- log("updatePhone :: Could not get ImsManager instance!");
- } else if (DBG) {
- log("updatePhone :: mImsMgr=" + mImsMgr);
- }
- } else {
- // There is no active subscription in the given slot.
- mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- }
-
- mPhoneStateListener.updateSubscriptionId(mSubId);
- }
-
- private TabHost.TabContentFactory mEmptyTabContent = new TabHost.TabContentFactory() {
- @Override
- public View createTabContent(String tag) {
- return new View(mTabHost.getContext());
- }
- };
-
- private TabHost.TabSpec buildTabSpec(String tag, String title) {
- return mTabHost.newTabSpec(tag).setIndicator(title).setContent(
- mEmptyTabContent);
- }
-
- private void updateCurrentTab(Bundle data) {
- int slotId = getSlotIdFromBundle(data);
- if (slotId >= 0 && mTabHost != null && mTabHost.getCurrentTab() != slotId) {
- mTabHost.setCurrentTab(slotId);
- }
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
-
- // If advanced fields are already expanded, we save it and expand it
- // when it's re-created.
- outState.putBoolean(EXPAND_ADVANCED_FIELDS, mExpandAdvancedFields);
-
- // Save subId of currently shown tab.
- outState.putInt(Settings.EXTRA_SUB_ID, mSubId);
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- Log.i(LOG_TAG, "onCreate:+");
- super.onCreate(icicle);
-
- final Activity activity = getActivity();
- if (activity == null || activity.isDestroyed()) {
- Log.e(LOG_TAG, "onCreate:- with no valid activity.");
- return;
- }
-
- mHandler = new MyHandler();
- mUm = (UserManager) activity.getSystemService(Context.USER_SERVICE);
- mSubscriptionManager = SubscriptionManager.from(activity);
- mTelephonyManager = (TelephonyManager) activity.getSystemService(
- Context.TELEPHONY_SERVICE);
- mCarrierConfigManager = new CarrierConfigManager(getContext());
-
- if (icicle != null) {
- mExpandAdvancedFields = icicle.getBoolean(EXPAND_ADVANCED_FIELDS, false);
- } else if (getActivity().getIntent().getBooleanExtra(EXPAND_EXTRA, false)) {
- mExpandAdvancedFields = true;
- }
-
- addPreferencesFromResource(R.xml.network_setting_fragment);
-
- mButton4glte = (SwitchPreference)findPreference(BUTTON_4G_LTE_KEY);
- mButton4glte.setOnPreferenceChangeListener(this);
-
- mCallingCategory = (PreferenceCategory) findPreference(CATEGORY_CALLING_KEY);
- mWiFiCallingPref = findPreference(BUTTON_WIFI_CALLING_KEY);
- mVideoCallingPref = (SwitchPreference) findPreference(BUTTON_VIDEO_CALLING_KEY);
- mMobileDataPref = (MobileDataPreference) findPreference(BUTTON_MOBILE_DATA_ENABLE_KEY);
- mDataUsagePref = (DataUsagePreference) findPreference(BUTTON_DATA_USAGE_KEY);
-
- //get UI object references
- PreferenceScreen prefSet = getPreferenceScreen();
-
- mButtonDataRoam = (RestrictedSwitchPreference) prefSet.findPreference(
- BUTTON_ROAMING_KEY);
- mButtonPreferredNetworkMode = (ListPreference) prefSet.findPreference(
- BUTTON_PREFERED_NETWORK_MODE);
- mButtonEnabledNetworks = (ListPreference) prefSet.findPreference(
- BUTTON_ENABLED_NETWORKS_KEY);
- mAdvancedOptions = (AdvancedOptionsPreference) prefSet.findPreference(
- BUTTON_ADVANCED_OPTIONS_KEY);
- mButtonDataRoam.setOnPreferenceChangeListener(this);
-
- mLteDataServicePref = prefSet.findPreference(BUTTON_CDMA_LTE_DATA_SERVICE_KEY);
-
- mEuiccSettingsPref = prefSet.findPreference(BUTTON_CARRIER_SETTINGS_EUICC_KEY);
- mEuiccSettingsPref.setOnPreferenceChangeListener(this);
-
- // Initialize mActiveSubInfo
- int max = mSubscriptionManager.getActiveSubscriptionInfoCountMax();
- mActiveSubInfos = new ArrayList<SubscriptionInfo>(max);
-
- int currentTab = mTabHost != null ? mTabHost.getCurrentTab() : 0;
- updatePhone(currentTab);
- if (hasActiveSubscriptions()) {
- updateEnabledNetworksEntries();
- }
- Log.i(LOG_TAG, "onCreate:-");
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- return inflater.inflate(com.android.internal.R.layout.common_tab_settings,
- container, false);
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- if (mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)
- || !mUm.isSystemUser()) {
- mUnavailable = true;
- getActivity().setContentView(R.layout.telephony_disallowed_preference_screen);
- } else {
- initializeSubscriptions();
-
- if (savedInstanceState != null) {
- updateCurrentTab(savedInstanceState);
- } else {
- updateCurrentTab(getActivity().getIntent().getExtras());
- }
- }
- }
-
- 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();
- }
- }
-
- private final ProvisioningManager.Callback mProvisioningCallback =
- new ProvisioningManager.Callback() {
- @Override
- public void onProvisioningIntChanged(int item, int value) {
- if (item == ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED
- || item == ImsConfig.ConfigConstants.VLT_SETTING_ENABLED
- || item == ImsConfig.ConfigConstants.LVC_SETTING_ENABLED) {
- updateBody();
- }
- }
- };
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (mMobileDataPref != null) {
- mMobileDataPref.dispose();
- }
- }
-
- @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);
-
- // 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(mTelephonyManager.isDataRoamingEnabled());
-
- if (getPreferenceScreen().findPreference(BUTTON_PREFERED_NETWORK_MODE) != null
- || getPreferenceScreen().findPreference(BUTTON_ENABLED_NETWORKS_KEY) != null) {
- updatePreferredNetworkUIFromDb();
- }
-
- mTelephonyManager.createForSubscriptionId(mSubId)
- .listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
-
- // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
- updateEnhanced4gLteState();
-
- // Video calling and WiFi calling state might have changed.
- updateCallingCategory();
-
- mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
-
- final Context context = getActivity();
- IntentFilter intentFilter = new IntentFilter(
- TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
- context.registerReceiver(mPhoneChangeReceiver, intentFilter);
- context.getContentResolver().registerContentObserver(ENFORCE_MANAGED_URI, false,
- mDpcEnforcedContentObserver);
-
- // Register callback for provisioning changes.
- try {
- if (mImsMgr != null) {
- mImsMgr.getConfigInterface().addConfigCallback(mProvisioningCallback);
- }
- } catch (ImsException e) {
- Log.w(LOG_TAG, "onResume: Unable to register callback for provisioning changes.");
- }
-
- Log.i(LOG_TAG, "onResume:-");
-
- }
-
- private boolean hasActiveSubscriptions() {
- return mActiveSubInfos.size() > 0;
- }
-
- private void updateBodyBasicFields(Activity activity, PreferenceScreen prefSet,
- int phoneSubId, boolean hasActiveSubscriptions) {
- Context context = activity.getApplicationContext();
-
- ActionBar actionBar = activity.getActionBar();
- if (actionBar != null) {
- // android.R.id.home will be triggered in onOptionsItemSelected()
- actionBar.setDisplayHomeAsUpEnabled(true);
- }
-
- prefSet.addPreference(mMobileDataPref);
- prefSet.addPreference(mButtonDataRoam);
- prefSet.addPreference(mDataUsagePref);
-
- mMobileDataPref.setEnabled(hasActiveSubscriptions);
- mButtonDataRoam.setEnabled(hasActiveSubscriptions);
- mDataUsagePref.setEnabled(hasActiveSubscriptions);
-
- if (hasActiveSubscriptions) {
- // Customized preferences needs to be initialized with subId.
- mMobileDataPref.initialize(phoneSubId);
- mDataUsagePref.initialize(phoneSubId);
-
- // Initialize states of mButtonDataRoam.
- mButtonDataRoam.setChecked(mTelephonyManager.isDataRoamingEnabled());
- mButtonDataRoam.setDisabledByAdmin(false);
- if (mButtonDataRoam.isEnabled()) {
- if (RestrictedLockUtilsInternal.hasBaseUserRestriction(context,
- UserManager.DISALLOW_DATA_ROAMING, UserHandle.myUserId())) {
- mButtonDataRoam.setEnabled(false);
- } else {
- mButtonDataRoam.checkRestrictionAndSetDisabled(
- UserManager.DISALLOW_DATA_ROAMING);
- }
- }
- }
- }
-
- private void updateBody() {
- final Activity activity = getActivity();
- final PreferenceScreen prefSet = getPreferenceScreen();
- final boolean hasActiveSubscriptions = hasActiveSubscriptions();
-
- if (activity == null || activity.isDestroyed()) {
- Log.e(LOG_TAG, "updateBody with no valid activity.");
- return;
- }
-
- if (prefSet == null) {
- Log.e(LOG_TAG, "updateBody with no null prefSet.");
- return;
- }
-
- prefSet.removeAll();
-
- updateBodyBasicFields(activity, prefSet, mSubId, hasActiveSubscriptions);
-
- if (hasActiveSubscriptions) {
- if (mExpandAdvancedFields) {
- updateBodyAdvancedFields(activity, prefSet, mSubId, hasActiveSubscriptions);
- } else {
- prefSet.addPreference(mAdvancedOptions);
- }
- } else {
- // Shows the "Carrier" preference that allows user to add a e-sim profile.
- if (showEuiccSettings(getContext())) {
- mEuiccSettingsPref.setSummary(null /* summary */);
- prefSet.addPreference(mEuiccSettingsPref);
- }
- }
- }
-
- private void updateBodyAdvancedFields(Activity activity, PreferenceScreen prefSet,
- int phoneSubId, boolean hasActiveSubscriptions) {
- boolean isLteOnCdma = mTelephonyManager.getLteOnCdmaMode()
- == PhoneConstants.LTE_ON_CDMA_TRUE;
-
- if (DBG) {
- log("updateBody: isLteOnCdma=" + isLteOnCdma + " phoneSubId=" + phoneSubId);
- }
-
- prefSet.addPreference(mButtonPreferredNetworkMode);
- prefSet.addPreference(mButtonEnabledNetworks);
- prefSet.addPreference(mButton4glte);
-
- if (showEuiccSettings(getActivity())) {
- prefSet.addPreference(mEuiccSettingsPref);
- String spn = mTelephonyManager.getSimOperatorName();
- if (TextUtils.isEmpty(spn)) {
- mEuiccSettingsPref.setSummary(null);
- } else {
- mEuiccSettingsPref.setSummary(spn);
- }
- }
-
- 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)) {
- prefSet.removePreference(mButtonPreferredNetworkMode);
- prefSet.removePreference(mButtonEnabledNetworks);
- prefSet.removePreference(mLteDataServicePref);
- } else if (carrierConfig.getBoolean(CarrierConfigManager
- .KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
- && !mTelephonyManager.getServiceState().getRoaming()
- && mTelephonyManager.getServiceState().getDataRegState()
- == ServiceState.STATE_IN_SERVICE) {
- prefSet.removePreference(mButtonPreferredNetworkMode);
- prefSet.removePreference(mButtonEnabledNetworks);
-
- final int phoneType = mTelephonyManager.getPhoneType();
- if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {
- updateCdmaOptions(this, prefSet, mSubId);
- } else 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) == true) {
- prefSet.removePreference(mButtonEnabledNetworks);
- // set the listener for the mButtonPreferredNetworkMode list preference so we can issue
- // change Preferred Network Mode.
- mButtonPreferredNetworkMode.setOnPreferenceChangeListener(this);
-
- updateCdmaOptions(this, prefSet, mSubId);
- updateGsmUmtsOptions(this, prefSet, phoneSubId);
- } else {
- prefSet.removePreference(mButtonPreferredNetworkMode);
- updateEnabledNetworksEntries();
- mButtonEnabledNetworks.setOnPreferenceChangeListener(this);
- if (DBG) log("settingsNetworkMode: " + settingsNetworkMode);
- }
-
- final boolean missingDataServiceUrl = TextUtils.isEmpty(
- android.provider.Settings.Global.getString(activity.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");
- }
-
- updateEnhanced4gLteState();
- updatePreferredNetworkType();
- updateCallingCategory();
-
- // 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);
- }
- }
-
- /**
- * Listen to extra preference changes that need as Metrics events logging.
- */
- if (prefSet.findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY) != null) {
- prefSet.findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)
- .setOnPreferenceChangeListener(this);
- }
-
- if (prefSet.findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY) != null) {
- prefSet.findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)
- .setOnPreferenceChangeListener(this);
- }
-
- // Get the networkMode from Settings.System and displays it
- mButtonEnabledNetworks.setValue(Integer.toString(settingsNetworkMode));
- mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
- UpdatePreferredNetworkModeSummary(settingsNetworkMode);
- UpdateEnabledNetworksValueAndSummary(settingsNetworkMode);
- // Display preferred network type based on what modem returns b/18676277
- new SetPreferredNetworkAsyncTask(
- mTelephonyManager,
- mSubId,
- settingsNetworkMode,
- mHandler.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE))
- .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-
- /**
- * Enable/disable depending upon if there are any active subscriptions.
- *
- * I've decided to put this enable/disable code at the bottom as the
- * code above works even when there are no active subscriptions, thus
- * putting it afterwards is a smaller change. This can be refined later,
- * but you do need to remember that this all needs to work when subscriptions
- * change dynamically such as when hot swapping sims.
- */
- int variant4glteTitleIndex = carrierConfig.getInt(
- CarrierConfigManager.KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT);
- CharSequence[] variantTitles = getContext().getResources()
- .getTextArray(R.array.enhanced_4g_lte_mode_title_variant);
- CharSequence[] variantSumaries = getContext().getResources()
- .getTextArray(R.array.enhanced_4g_lte_mode_sumary_variant);
- // Default index 0 indicates the default title/sumary string
- CharSequence enhanced4glteModeTitle = variantTitles[0];
- CharSequence enhanced4glteModeSummary = variantSumaries[0];
- if (variant4glteTitleIndex >= 0 && variant4glteTitleIndex < variantTitles.length) {
- enhanced4glteModeTitle = variantTitles[variant4glteTitleIndex];
- }
- if (variant4glteTitleIndex >= 0 && variant4glteTitleIndex < variantSumaries.length) {
- enhanced4glteModeSummary = variantSumaries[variant4glteTitleIndex];
- }
-
- mOnlyAutoSelectInHomeNW = carrierConfig.getBoolean(
- CarrierConfigManager.KEY_ONLY_AUTO_SELECT_IN_HOME_NETWORK_BOOL);
- mButton4glte.setTitle(enhanced4glteModeTitle);
- mButton4glte.setSummary(enhanced4glteModeSummary);
- mLteDataServicePref.setEnabled(hasActiveSubscriptions);
- 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(NetworkOperators.CATEGORY_NETWORK_OPERATORS_KEY);
- if (ps != null) {
- ps.setEnabled(hasActiveSubscriptions);
- }
- ps = findPreference(BUTTON_CARRIER_SETTINGS_KEY);
- if (ps != null) {
- ps.setEnabled(hasActiveSubscriptions);
- }
- ps = findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY);
- if (ps != null) {
- ps.setEnabled(hasActiveSubscriptions);
- }
- ps = findPreference(CATEGORY_CALLING_KEY);
- if (ps != null) {
- ps.setEnabled(hasActiveSubscriptions);
- }
- ps = findPreference(NetworkOperators.BUTTON_AUTO_SELECT_KEY);
- if (ps != null) {
- ps.setSummary(null);
- if (mTelephonyManager.getServiceState().getRoaming()) {
- ps.setEnabled(true);
- } else {
- ps.setEnabled(!mOnlyAutoSelectInHomeNW);
- if (mOnlyAutoSelectInHomeNW) {
- ps.setSummary(getResources().getString(
- R.string.manual_mode_disallowed_summary,
- mTelephonyManager.getSimOperatorName()));
- }
- }
- }
- }
-
- // Requires that mSubId is up to date
- void updateEnabledNetworksEntries() {
- final int phoneType = mTelephonyManager.getPhoneType();
- final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
- mShow4GForLTE = carrierConfig != null ? carrierConfig.getBoolean(
- CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL) : false;
- if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {
- final int lteForced = android.provider.Settings.Global.getInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.LTE_SERVICE_FORCED + mSubId,
- 0);
- final boolean isLteOnCdma = mTelephonyManager.getLteOnCdmaMode()
- == PhoneConstants.LTE_ON_CDMA_TRUE;
- final int settingsNetworkMode = android.provider.Settings.Global.getInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
- preferredNetworkMode);
- if (isLteOnCdma) {
- if (lteForced == 0) {
- mButtonEnabledNetworks.setEntries(
- R.array.enabled_networks_cdma_choices);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_cdma_values);
- } else {
- switch (settingsNetworkMode) {
- case TelephonyManager.NETWORK_MODE_CDMA_EVDO:
- case TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO:
- case TelephonyManager.NETWORK_MODE_EVDO_NO_CDMA:
- mButtonEnabledNetworks.setEntries(
- R.array.enabled_networks_cdma_no_lte_choices);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_cdma_no_lte_values);
- break;
- case TelephonyManager.NETWORK_MODE_GLOBAL:
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO:
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_ONLY:
- mButtonEnabledNetworks.setEntries(
- R.array.enabled_networks_cdma_only_lte_choices);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_cdma_only_lte_values);
- break;
- default:
- mButtonEnabledNetworks.setEntries(
- R.array.enabled_networks_cdma_choices);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_cdma_values);
- break;
- }
- }
- }
- updateCdmaOptions(this, getPreferenceScreen(), mSubId);
-
- } else if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {
- if (isSupportTdscdma()) {
- mButtonEnabledNetworks.setEntries(
- R.array.enabled_networks_tdscdma_choices);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_tdscdma_values);
- } else if (!carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)
- && !getResources().getBoolean(R.bool.config_enabled_lte)) {
- mButtonEnabledNetworks.setEntries(
- R.array.enabled_networks_except_gsm_lte_choices);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_except_gsm_lte_values);
- } else if (!carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
- int select = mShow4GForLTE
- ? R.array.enabled_networks_except_gsm_4g_choices
- : R.array.enabled_networks_except_gsm_choices;
- mButtonEnabledNetworks.setEntries(select);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_except_gsm_values);
- } else if (!getResources().getBoolean(R.bool.config_enabled_lte)) {
- mButtonEnabledNetworks.setEntries(
- R.array.enabled_networks_except_lte_choices);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_except_lte_values);
- } else if (mIsGlobalCdma) {
- mButtonEnabledNetworks.setEntries(
- R.array.enabled_networks_cdma_choices);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_cdma_values);
- } else {
- int select = mShow4GForLTE ? R.array.enabled_networks_4g_choices
- : R.array.enabled_networks_choices;
- mButtonEnabledNetworks.setEntries(select);
- mButtonEnabledNetworks.setEntryValues(
- R.array.enabled_networks_values);
- }
- updateGsmUmtsOptions(this, getPreferenceScreen(), mSubId);
- } else {
- throw new IllegalStateException("Unexpected phone type: " + phoneType);
- }
- if (isWorldMode()) {
- mButtonEnabledNetworks.setEntries(
- R.array.preferred_network_mode_choices_world_mode);
- mButtonEnabledNetworks.setEntryValues(
- R.array.preferred_network_mode_values_world_mode);
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
- if (DBG) log("onPause:+");
-
- mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
-
- mSubscriptionManager
- .removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
-
- final Context context = getActivity();
- context.unregisterReceiver(mPhoneChangeReceiver);
- context.getContentResolver().unregisterContentObserver(mDpcEnforcedContentObserver);
-
- // Remove callback for provisioning changes.
- try {
- if (mImsMgr != null) {
- mImsMgr.getConfigInterface().removeConfigCallback(
- mProvisioningCallback.getBinder());
- }
- } catch (ImsException e) {
- Log.w(LOG_TAG, "onPause: Unable to remove callback for provisioning changes");
- }
-
- 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);
-
- final int phoneSubId = mSubId;
- 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.parseInt((String) objValue);
- int settingsNetworkMode = android.provider.Settings.Global.getInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
- preferredNetworkMode);
- if (buttonNetworkMode != settingsNetworkMode) {
- int modemNetworkMode;
- // if new mode is invalid ignore it
- switch (buttonNetworkMode) {
- case TelephonyManager.NETWORK_MODE_WCDMA_PREF:
- case TelephonyManager.NETWORK_MODE_GSM_ONLY:
- case TelephonyManager.NETWORK_MODE_WCDMA_ONLY:
- case TelephonyManager.NETWORK_MODE_GSM_UMTS:
- case TelephonyManager.NETWORK_MODE_CDMA_EVDO:
- case TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO:
- case TelephonyManager.NETWORK_MODE_EVDO_NO_CDMA:
- case TelephonyManager.NETWORK_MODE_GLOBAL:
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO:
- case TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_ONLY:
- case TelephonyManager.NETWORK_MODE_LTE_WCDMA:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_ONLY:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- // This is one of the modes we recognize
- modemNetworkMode = buttonNetworkMode;
- break;
- default:
- loge("Invalid Network Mode (" +buttonNetworkMode+ ") chosen. Ignore.");
- return true;
- }
-
- android.provider.Settings.Global.putInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
- buttonNetworkMode );
- //Set the modem network mode
- new SetPreferredNetworkAsyncTask(
- mTelephonyManager,
- mSubId,
- modemNetworkMode,
- mHandler.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE))
- .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
- } else if (preference == mButtonEnabledNetworks) {
- mButtonEnabledNetworks.setValue((String) objValue);
- int buttonNetworkMode;
- buttonNetworkMode = Integer.parseInt((String) objValue);
- if (DBG) log("buttonNetworkMode: " + buttonNetworkMode);
- int settingsNetworkMode = android.provider.Settings.Global.getInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
- preferredNetworkMode);
- if (buttonNetworkMode != settingsNetworkMode) {
- int modemNetworkMode;
- // if new mode is invalid ignore it
- switch (buttonNetworkMode) {
- case TelephonyManager.NETWORK_MODE_WCDMA_PREF:
- case TelephonyManager.NETWORK_MODE_GSM_ONLY:
- case TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_CDMA_EVDO:
- case TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO:
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_ONLY:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- // This is one of the modes we recognize
- modemNetworkMode = buttonNetworkMode;
- break;
- default:
- loge("Invalid Network Mode (" +buttonNetworkMode+ ") chosen. Ignore.");
- return true;
- }
-
- UpdateEnabledNetworksValueAndSummary(buttonNetworkMode);
-
- android.provider.Settings.Global.putInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
- buttonNetworkMode );
- //Set the modem network mode
- new SetPreferredNetworkAsyncTask(
- mTelephonyManager,
- mSubId,
- modemNetworkMode,
- mHandler.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE))
- .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
- } else if (preference == mButton4glte) {
- boolean enhanced4gMode = !mButton4glte.isChecked();
- mButton4glte.setChecked(enhanced4gMode);
- mImsMgr.setEnhanced4gLteModeSetting(mButton4glte.isChecked());
- } else if (preference == mButtonDataRoam) {
- if (DBG) log("onPreferenceTreeClick: preference == mButtonDataRoam.");
-
- //normally called on the toggle click
- if (!mButtonDataRoam.isChecked()) {
- PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(
- mSubId);
- if (carrierConfig != null && carrierConfig.getBoolean(
- CarrierConfigManager.KEY_DISABLE_CHARGE_INDICATION_BOOL)) {
- mTelephonyManager.setDataRoamingEnabled(true);
- MetricsLogger.action(getContext(),
- getMetricsEventCategory(getPreferenceScreen(), mButtonDataRoam),
- true);
- } else {
- // MetricsEvent with no value update.
- MetricsLogger.action(getContext(),
- getMetricsEventCategory(getPreferenceScreen(), mButtonDataRoam));
- // First confirm with a warning dialog about charges
- mOkClicked = false;
- RoamingDialogFragment fragment = new RoamingDialogFragment();
- Bundle b = new Bundle();
- b.putInt(RoamingDialogFragment.SUB_ID_KEY, mSubId);
- fragment.setArguments(b);
- fragment.show(getFragmentManager(), ROAMING_TAG);
- // Don't update the toggle unless the confirm button is actually pressed.
- return false;
- }
- } else {
- mTelephonyManager.setDataRoamingEnabled(false);
- MetricsLogger.action(getContext(),
- getMetricsEventCategory(getPreferenceScreen(), mButtonDataRoam),
- false);
- return true;
- }
- } else if (preference == mVideoCallingPref) {
- // If mButton4glte is not checked, mVideoCallingPref should be disabled.
- // So it only makes sense to call phoneMgr.enableVideoCalling if it's checked.
- if (mButton4glte.isChecked()) {
- mImsMgr.setVtSetting((boolean) objValue);
- return true;
- } else {
- loge("mVideoCallingPref should be disabled if mButton4glte is not checked.");
- mVideoCallingPref.setEnabled(false);
- return false;
- }
- } else if (preference == getPreferenceScreen()
- .findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)
- || preference == getPreferenceScreen()
- .findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)) {
- return true;
- }
-
- updateBody();
- // always let the preference setting proceed.
- return true;
- }
-
- private boolean is4gLtePrefEnabled(PersistableBundle carrierConfig) {
- return (mTelephonyManager.getCallState(mSubId)
- == TelephonyManager.CALL_STATE_IDLE)
- && mImsMgr != null
- && mImsMgr.isNonTtyOrTtyOnVolteEnabled()
- && carrierConfig.getBoolean(
- CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
- }
-
- private class MyHandler extends Handler {
-
- static final int MESSAGE_SET_PREFERRED_NETWORK_TYPE = 0;
-
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MESSAGE_SET_PREFERRED_NETWORK_TYPE:
- handleSetPreferredNetworkTypeResponse(msg);
- break;
- }
- }
-
- private void handleSetPreferredNetworkTypeResponse(Message msg) {
- final Activity activity = getActivity();
- if (activity == null || activity.isDestroyed()) {
- // Access preferences of activity only if it is not destroyed
- // or if fragment is not attached to an activity.
- return;
- }
-
- boolean success = (boolean) msg.obj;
-
- if (success) {
- int networkMode;
- if (getPreferenceScreen().findPreference(
- BUTTON_PREFERED_NETWORK_MODE) != null) {
- networkMode = Integer.parseInt(mButtonPreferredNetworkMode.getValue());
- android.provider.Settings.Global.putInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE
- + mSubId,
- networkMode );
- }
- if (getPreferenceScreen().findPreference(BUTTON_ENABLED_NETWORKS_KEY) != null) {
- networkMode = Integer.parseInt(mButtonEnabledNetworks.getValue());
- android.provider.Settings.Global.putInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE
- + mSubId,
- networkMode );
- }
- } else {
- Log.i(LOG_TAG, "handleSetPreferredNetworkTypeResponse:" +
- "exception in setting network mode.");
- updatePreferredNetworkUIFromDb();
- }
- }
- }
-
- private void updatePreferredNetworkUIFromDb() {
- int settingsNetworkMode = android.provider.Settings.Global.getInt(
- getContext().getContentResolver(),
- android.provider.Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
- preferredNetworkMode);
-
- if (DBG) {
- log("updatePreferredNetworkUIFromDb: settingsNetworkMode = " +
- settingsNetworkMode);
- }
-
- UpdatePreferredNetworkModeSummary(settingsNetworkMode);
- UpdateEnabledNetworksValueAndSummary(settingsNetworkMode);
- // changes the mButtonPreferredNetworkMode accordingly to settingsNetworkMode
- mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
- }
-
- private void UpdatePreferredNetworkModeSummary(int NetworkMode) {
- switch(NetworkMode) {
- case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_tdscdma_gsm_wcdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_tdscdma_gsm_summary);
- break;
- case TelephonyManager.NETWORK_MODE_WCDMA_PREF:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_wcdma_perf_summary);
- break;
- case TelephonyManager.NETWORK_MODE_GSM_ONLY:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_gsm_only_summary);
- break;
- case TelephonyManager.NETWORK_MODE_TDSCDMA_WCDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_tdscdma_wcdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_WCDMA_ONLY:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_wcdma_only_summary);
- break;
- case TelephonyManager.NETWORK_MODE_GSM_UMTS:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_gsm_wcdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_CDMA_EVDO:
- switch (mTelephonyManager.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 TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_cdma_only_summary);
- break;
- case TelephonyManager.NETWORK_MODE_EVDO_NO_CDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_evdo_only_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_tdscdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_ONLY:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_tdscdma_gsm_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_tdscdma_gsm_wcdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_gsm_wcdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_cdma_evdo_summary);
- break;
- case TelephonyManager.NETWORK_MODE_TDSCDMA_ONLY:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_tdscdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_tdscdma_cdma_evdo_gsm_wcdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
- if (mTelephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA
- || mIsGlobalCdma
- || isWorldMode()) {
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_global_summary);
- } else {
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_summary);
- }
- break;
- case TelephonyManager.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_tdscdma_cdma_evdo_gsm_wcdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_GLOBAL:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_cdma_evdo_gsm_wcdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_tdscdma_wcdma_summary);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_WCDMA:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_lte_wcdma_summary);
- break;
- default:
- mButtonPreferredNetworkMode.setSummary(
- R.string.preferred_network_mode_global_summary);
- }
- }
-
- private void UpdateEnabledNetworksValueAndSummary(int NetworkMode) {
- switch (NetworkMode) {
- case TelephonyManager.NETWORK_MODE_TDSCDMA_WCDMA:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_TDSCDMA_GSM:
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
- mButtonEnabledNetworks.setSummary(R.string.network_3G);
- break;
- case TelephonyManager.NETWORK_MODE_WCDMA_ONLY:
- case TelephonyManager.NETWORK_MODE_GSM_UMTS:
- case TelephonyManager.NETWORK_MODE_WCDMA_PREF:
- if (!mIsGlobalCdma) {
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager.NETWORK_MODE_WCDMA_PREF));
- mButtonEnabledNetworks.setSummary(R.string.network_3G);
- } else {
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager
- .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
- mButtonEnabledNetworks.setSummary(R.string.network_global);
- }
- break;
- case TelephonyManager.NETWORK_MODE_GSM_ONLY:
- if (!mIsGlobalCdma) {
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager.NETWORK_MODE_GSM_ONLY));
- mButtonEnabledNetworks.setSummary(R.string.network_2G);
- } else {
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager
- .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
- mButtonEnabledNetworks.setSummary(R.string.network_global);
- }
- break;
- case TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA:
- if (isWorldMode()) {
- mButtonEnabledNetworks.setSummary(
- R.string.preferred_network_mode_lte_gsm_umts_summary);
- controlCdmaOptions(false);
- controlGsmOptions(true);
- break;
- }
- case TelephonyManager.NETWORK_MODE_LTE_ONLY:
- case TelephonyManager.NETWORK_MODE_LTE_WCDMA:
- if (!mIsGlobalCdma) {
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA));
- mButtonEnabledNetworks.setSummary((mShow4GForLTE == true)
- ? R.string.network_4G : R.string.network_lte);
- } else {
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager
- .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
- mButtonEnabledNetworks.setSummary(R.string.network_global);
- }
- break;
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO:
- if (isWorldMode()) {
- mButtonEnabledNetworks.setSummary(
- R.string.preferred_network_mode_lte_cdma_summary);
- controlCdmaOptions(true);
- controlGsmOptions(false);
- } else {
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO));
- mButtonEnabledNetworks.setSummary(R.string.network_lte);
- }
- break;
- case TelephonyManager.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager
- .NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
- mButtonEnabledNetworks.setSummary(R.string.network_3G);
- break;
- case TelephonyManager.NETWORK_MODE_CDMA_EVDO:
- case TelephonyManager.NETWORK_MODE_EVDO_NO_CDMA:
- case TelephonyManager.NETWORK_MODE_GLOBAL:
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager.NETWORK_MODE_CDMA_EVDO));
- mButtonEnabledNetworks.setSummary(R.string.network_3G);
- break;
- case TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO:
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager.NETWORK_MODE_CDMA_NO_EVDO));
- mButtonEnabledNetworks.setSummary(R.string.network_1x);
- break;
- case TelephonyManager.NETWORK_MODE_TDSCDMA_ONLY:
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager.NETWORK_MODE_TDSCDMA_ONLY));
- mButtonEnabledNetworks.setSummary(R.string.network_3G);
- break;
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- case TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
- if (isSupportTdscdma()) {
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager
- .NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
- mButtonEnabledNetworks.setSummary(R.string.network_lte);
- } else {
- if (isWorldMode()) {
- controlCdmaOptions(true);
- controlGsmOptions(false);
- }
- mButtonEnabledNetworks.setValue(
- Integer.toString(TelephonyManager
- .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
- if (mTelephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA
- || mIsGlobalCdma
- || isWorldMode()) {
- mButtonEnabledNetworks.setSummary(R.string.network_global);
- } else {
- mButtonEnabledNetworks.setSummary((mShow4GForLTE == true)
- ? R.string.network_4G : R.string.network_lte);
- }
- }
- break;
- default:
- String errMsg = "Invalid Network Mode (" + NetworkMode + "). Ignore.";
- loge(errMsg);
- mButtonEnabledNetworks.setSummary(errMsg);
- }
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- switch(requestCode) {
- case REQUEST_CODE_EXIT_ECM:
- if (resultCode != Activity.RESULT_CANCELED) {
- // If the phone exits from ECM mode, show the CDMA Options
- mCdmaOptions.showDialog(mClickedPreference);
- }
- break;
-
- default:
- break;
- }
- }
-
- private void updateWiFiCallState() {
- if (mWiFiCallingPref == null || mCallingCategory == null) {
- return;
- }
-
- // Removes the preference if the wifi calling is disabled.
- if (!isWifiCallingEnabled(getContext(), mSubId)) {
- mCallingCategory.removePreference(mWiFiCallingPref);
- return;
- }
-
- // See what Telecom thinks the SIM call manager is.
- final PhoneAccountHandle simCallManager =
- TelecomManager.from(getContext()).getSimCallManagerForSubscription(mSubId);
-
- // Check which SIM call manager is for the current sub ID.
- PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
- String currentSubSimCallManager = null;
- if (carrierConfig != null) {
- currentSubSimCallManager = carrierConfig.getString(
- CarrierConfigManager.KEY_DEFAULT_SIM_CALL_MANAGER_STRING);
- }
-
- // Only try to configure the phone account if this is the sim call manager for the
- // current sub.
- if (simCallManager != null
- && simCallManager.getComponentName().flattenToString().equals(
- currentSubSimCallManager)) {
- Intent intent = MobileNetworkSettings.buildPhoneAccountConfigureIntent(
- getContext(), simCallManager);
- PackageManager pm = getContext().getPackageManager();
- List<ResolveInfo> resolutions = pm.queryIntentActivities(intent, 0);
- mWiFiCallingPref.setTitle(resolutions.get(0).loadLabel(pm));
- mWiFiCallingPref.setSummary(null);
- mWiFiCallingPref.setIntent(intent);
- } else {
- String title = SubscriptionManager.getResourcesForSubId(getContext(), mSubId)
- .getString(R.string.wifi_calling_settings_title);
- mWiFiCallingPref.setTitle(title);
-
- int resId = com.android.internal.R.string.wifi_calling_off_summary;
- if (mImsMgr.isWfcEnabledByUser()) {
- boolean isRoaming = mTelephonyManager.isNetworkRoaming();
- int wfcMode = mImsMgr.getWfcMode(isRoaming);
-
- switch (wfcMode) {
- case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
- resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
- break;
- case ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED:
- resId = com.android.internal.R.string
- .wfc_mode_cellular_preferred_summary;
- break;
- case ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED:
- resId = com.android.internal.R.string.wfc_mode_wifi_preferred_summary;
- break;
- default:
- if (DBG) log("Unexpected WFC mode value: " + wfcMode);
- }
- }
- mWiFiCallingPref.setSummary(resId);
- }
-
- mCallingCategory.addPreference(mWiFiCallingPref);
- mWiFiCallingPref.setEnabled(mTelephonyManager.getCallState(mSubId)
- == TelephonyManager.CALL_STATE_IDLE && hasActiveSubscriptions());
- }
-
- private void updateEnhanced4gLteState() {
- if (mButton4glte == null) {
- return;
- }
-
- PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
-
- if ((mImsMgr == null
- || !mImsMgr.isVolteEnabledByPlatform()
- || !mImsMgr.isVolteProvisionedOnDevice()
- || !isImsServiceStateReady(mImsMgr)
- || carrierConfig.getBoolean(
- CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL))) {
- getPreferenceScreen().removePreference(mButton4glte);
- } else {
- mButton4glte.setEnabled(is4gLtePrefEnabled(carrierConfig)
- && hasActiveSubscriptions());
- boolean enh4glteMode = mImsMgr.isEnhanced4gLteModeSettingEnabledByUser()
- && mImsMgr.isNonTtyOrTtyOnVolteEnabled();
- mButton4glte.setChecked(enh4glteMode);
- }
- }
-
- private void updateVideoCallState() {
- if (mVideoCallingPref == null || mCallingCategory == null) {
- return;
- }
-
- PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
-
- if (mImsMgr != null
- && mImsMgr.isVtEnabledByPlatform()
- && mImsMgr.isVtProvisionedOnDevice()
- && isImsServiceStateReady(mImsMgr)
- && (carrierConfig.getBoolean(
- CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
- || mTelephonyManager.isDataEnabled())) {
- mCallingCategory.addPreference(mVideoCallingPref);
- if (!mButton4glte.isChecked()) {
- mVideoCallingPref.setEnabled(false);
- mVideoCallingPref.setChecked(false);
- } else {
- mVideoCallingPref.setEnabled(mTelephonyManager.getCallState(mSubId)
- == TelephonyManager.CALL_STATE_IDLE && hasActiveSubscriptions());
- mVideoCallingPref.setChecked(mImsMgr.isVtEnabledByUser());
- mVideoCallingPref.setOnPreferenceChangeListener(this);
- }
- } else {
- mCallingCategory.removePreference(mVideoCallingPref);
- }
- }
-
- private void updatePreferredNetworkType() {
- boolean enabled = mTelephonyManager.getCallState(
- mSubId) == TelephonyManager.CALL_STATE_IDLE
- && hasActiveSubscriptions();
- Log.i(LOG_TAG, "updatePreferredNetworkType: " + enabled);
- // TODO: Disentangle enabled networks vs preferred network mode, it looks like
- // both buttons are shown to the user as "Preferred network type" and the options change
- // based on what looks like World mode.
- if (mButtonEnabledNetworks != null) {
- mButtonEnabledNetworks.setEnabled(enabled);
- }
- if (mButtonPreferredNetworkMode != null) {
- mButtonPreferredNetworkMode.setEnabled(enabled);
- }
- }
-
- private void updateCallingCategory() {
- if (mCallingCategory == null) {
- return;
- }
-
- updateWiFiCallState();
- updateVideoCallState();
-
- // If all items in calling category is removed, we remove it from
- // the screen. Otherwise we'll see title of the category but nothing
- // is in there.
- if (mCallingCategory.getPreferenceCount() == 0) {
- getPreferenceScreen().removePreference(mCallingCategory);
- } else {
- getPreferenceScreen().addPreference(mCallingCategory);
- }
- }
-
- 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);
-
- PreferenceCategory networkOperatorCategory =
- (PreferenceCategory) prefSet.findPreference(
- NetworkOperators.CATEGORY_NETWORK_OPERATORS_KEY);
- Preference carrierSettings = prefSet.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
- if (networkOperatorCategory != null) {
- if (enable) {
- networkOperatorCategory.setEnabled(true);
- } else {
- prefSet.removePreference(networkOperatorCategory);
- }
- }
- if (carrierSettings != null) {
- prefSet.removePreference(carrierSettings);
- }
- }
-
- private void controlCdmaOptions(boolean enable) {
- PreferenceScreen prefSet = getPreferenceScreen();
- if (prefSet == null) {
- return;
- }
- updateCdmaOptions(this, prefSet, mSubId);
- CdmaSystemSelectListPreference systemSelect =
- (CdmaSystemSelectListPreference)prefSet.findPreference
- (BUTTON_CDMA_SYSTEM_SELECT_KEY);
- systemSelect.setSubscriptionId(mSubId);
- if (systemSelect != null) {
- systemSelect.setEnabled(enable);
- }
- }
-
- 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 == 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 == mLteDataServicePref || preference == mDataUsagePref
- || preference == mEuiccSettingsPref || preference == mAdvancedOptions
- || preference == mWiFiCallingPref || preference == mButtonPreferredNetworkMode
- || preference == mButtonEnabledNetworks
- || 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 == MetricsEvent.VIEW_UNKNOWN) {
- return;
- }
-
- // MetricsEvent logging with new value, for SwitchPreferences and ListPreferences.
- if (preference == mButton4glte || preference == mVideoCallingPref) {
- MetricsLogger.action(getContext(), category, (Boolean) newValue);
- } else if (preference == mButtonPreferredNetworkMode
- || preference == mButtonEnabledNetworks
- || 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 MetricsEvent.VIEW_UNKNOWN;
- } else if (preference == mMobileDataPref) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_MOBILE_DATA_TOGGLE;
- } else if (preference == mButtonDataRoam) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_DATA_ROAMING_TOGGLE;
- } else if (preference == mDataUsagePref) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_DATA_USAGE;
- } else if (preference == mLteDataServicePref) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_SET_UP_DATA_SERVICE;
- } else if (preference == mAdvancedOptions) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_EXPAND_ADVANCED_FIELDS;
- } else if (preference == mButton4glte) {
- return MetricsEvent.ACTION_MOBILE_ENHANCED_4G_LTE_MODE_TOGGLE;
- } else if (preference == mButtonPreferredNetworkMode) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_SELECT_PREFERRED_NETWORK;
- } else if (preference == mButtonEnabledNetworks) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_SELECT_ENABLED_NETWORK;
- } else if (preference == mEuiccSettingsPref) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_EUICC_SETTING;
- } else if (preference == mWiFiCallingPref) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_WIFI_CALLING;
- } else if (preference == mVideoCallingPref) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_VIDEO_CALLING_TOGGLE;
- } else if (preference == preferenceScreen
- .findPreference(NetworkOperators.BUTTON_AUTO_SELECT_KEY)) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_AUTO_SELECT_NETWORK_TOGGLE;
- } else if (preference == preferenceScreen
- .findPreference(NetworkOperators.BUTTON_NETWORK_SELECT_KEY)) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK;
- } else if (preference == preferenceScreen
- .findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY)) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_CDMA_SYSTEM_SELECT;
- } else if (preference == preferenceScreen
- .findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)) {
- return 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 MetricsEvent.ACTION_MOBILE_NETWORK_APN_SETTINGS;
- } else if (preference == preferenceScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY)) {
- return MetricsEvent.ACTION_MOBILE_NETWORK_CARRIER_SETTINGS;
- } else {
- return MetricsEvent.VIEW_UNKNOWN;
- }
- }
-
- private void updateGsmUmtsOptions(PreferenceFragment 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.
- if (mGsmUmtsOptions == null) {
- mGsmUmtsOptions = new GsmUmtsOptions(prefFragment, prefScreen, subId);
- } else {
- mGsmUmtsOptions.update(subId);
- }
- }
-
- private void updateCdmaOptions(PreferenceFragment prefFragment, PreferenceScreen prefScreen,
- int subId) {
- // We don't want to re-create CdmaOptions 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.
- if (mCdmaOptions == null) {
- mCdmaOptions = new CdmaOptions(prefFragment, prefScreen, subId);
- } else {
- mCdmaOptions.updateSubscriptionId(subId);
- }
- }
- }
-
- private static final class SetPreferredNetworkAsyncTask extends AsyncTask<Void, Void, Boolean> {
-
- private final TelephonyManager mTelephonyManager;
- private final int mSubId;
- private final int mNetworkType;
- private final Message mCallback;
-
- SetPreferredNetworkAsyncTask(
- TelephonyManager tm, int subId, int networkType, Message callback) {
- mTelephonyManager = tm;
- mSubId = subId;
- mNetworkType = networkType;
- mCallback = callback;
- }
-
- @Override
- protected Boolean doInBackground(Void... voids) {
- return mTelephonyManager.setPreferredNetworkType(mSubId, mNetworkType);
- }
-
- @Override
- protected void onPostExecute(Boolean isSuccessed) {
- mCallback.obj = isSuccessed;
- mCallback.sendToTarget();
- }
- }
-}
diff --git a/src/com/android/phone/NetworkOperatorPreference.java b/src/com/android/phone/NetworkOperatorPreference.java
deleted file mode 100644
index 09c494c..0000000
--- a/src/com/android/phone/NetworkOperatorPreference.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2018 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 android.content.Context;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.LayerDrawable;
-import android.preference.Preference;
-import android.telephony.CellInfo;
-import android.telephony.SignalStrength;
-import android.util.Log;
-import android.view.Gravity;
-
-import com.android.settingslib.graph.SignalDrawable;
-
-import java.util.List;
-
-/**
- * A Preference represents a network operator in the NetworkSelectSetting fragment.
- */
-public class NetworkOperatorPreference extends Preference {
-
- private static final String TAG = "NetworkOperatorPref";
- private static final boolean DBG = false;
- // number of signal strength level
- public static final int NUMBER_OF_LEVELS = SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
- private CellInfo mCellInfo;
- private List<String> mForbiddenPlmns;
- private int mLevel = -1;
- private boolean mShow4GForLTE;
-
- // The following constants are used to draw signal icon.
- private static final Drawable EMPTY_DRAWABLE = new ColorDrawable(Color.TRANSPARENT);
- private static final int NO_CELL_DATA_CONNECTED_ICON = 0;
-
- public NetworkOperatorPreference(
- CellInfo cellinfo, Context context, List<String> forbiddenPlmns, boolean show4GForLTE) {
- super(context);
- mCellInfo = cellinfo;
- mForbiddenPlmns = forbiddenPlmns;
- mShow4GForLTE = show4GForLTE;
- refresh();
- }
-
- public CellInfo getCellInfo() {
- return mCellInfo;
- }
-
- /**
- * Refresh the NetworkOperatorPreference by updating the title and the icon.
- */
- public void refresh() {
- if (DBG) Log.d(TAG, "refresh the network: " + CellInfoUtil.getNetworkTitle(mCellInfo));
- String networkTitle = CellInfoUtil.getNetworkTitle(mCellInfo);
- if (CellInfoUtil.isForbidden(mCellInfo, mForbiddenPlmns)) {
- networkTitle += " " + getContext().getResources().getString(R.string.forbidden_network);
- }
- setTitle(networkTitle);
- int level = mCellInfo.getCellSignalStrength().getLevel();
- if (DBG) Log.d(TAG, "refresh level: " + String.valueOf(level));
- if (mLevel != level) {
- mLevel = level;
- updateIcon(mLevel);
- }
- }
-
- /**
- * Update the icon according to the input signal strength level.
- */
- public void setIcon(int level) {
- updateIcon(level);
- }
-
- private int getIconIdForCell(CellInfo ci) {
- final int type = ci.getCellIdentity().getType();
- switch (type) {
- case CellInfo.TYPE_GSM: return R.drawable.signal_strength_g;
- case CellInfo.TYPE_WCDMA: // fall through
- case CellInfo.TYPE_TDSCDMA: return R.drawable.signal_strength_3g;
- case CellInfo.TYPE_LTE:
- return mShow4GForLTE
- ? R.drawable.signal_strength_4g : R.drawable.signal_strength_lte;
- case CellInfo.TYPE_CDMA: return R.drawable.signal_strength_1x;
- default: return 0;
- }
- }
-
- private void updateIcon(int level) {
- if (level < 0 || level >= NUMBER_OF_LEVELS) return;
- Context context = getContext();
- // Make the signal strength drawable
- int iconId = 0;
- if (DBG) Log.d(TAG, "updateIcon level: " + String.valueOf(level));
- iconId = SignalDrawable.getState(level, NUMBER_OF_LEVELS, false /* cutOut */);
-
- SignalDrawable signalDrawable = new SignalDrawable(getContext());
- signalDrawable.setLevel(iconId);
- signalDrawable.setDarkIntensity(0);
-
- // Make the network type drawable
- int iconType = getIconIdForCell(mCellInfo);
- Drawable networkDrawable =
- iconType == NO_CELL_DATA_CONNECTED_ICON
- ? EMPTY_DRAWABLE
- : getContext()
- .getResources().getDrawable(iconType, getContext().getTheme());
-
- // Overlay the two drawables
- Drawable[] layers = {networkDrawable, signalDrawable};
- final int iconSize =
- context.getResources().getDimensionPixelSize(R.dimen.signal_strength_icon_size);
-
- LayerDrawable icons = new LayerDrawable(layers);
- // Set the network type icon at the top left
- icons.setLayerGravity(0 /* index of networkDrawable */, Gravity.TOP | Gravity.LEFT);
- // Set the signal strength icon at the bottom right
- icons.setLayerGravity(1 /* index of SignalDrawable */, Gravity.BOTTOM | Gravity.RIGHT);
- icons.setLayerSize(1 /* index of SignalDrawable */, iconSize, iconSize);
- setIcon(icons);
- }
-}
diff --git a/src/com/android/phone/NetworkOperators.java b/src/com/android/phone/NetworkOperators.java
deleted file mode 100644
index ec71656..0000000
--- a/src/com/android/phone/NetworkOperators.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * 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 android.app.ProgressDialog;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Handler;
-import android.os.Message;
-import android.preference.Preference;
-import android.preference.PreferenceCategory;
-import android.preference.TwoStatePreference;
-import android.telephony.ServiceState;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settingslib.utils.ThreadUtils;
-
-/**
- * "Networks" settings UI for the Phone app.
- */
-public class NetworkOperators extends PreferenceCategory
- implements Preference.OnPreferenceChangeListener {
-
- private static final String LOG_TAG = "NetworkOperators";
- private static final boolean DBG = true;
-
- private static final int EVENT_AUTO_SELECT_DONE = 100;
- private static final int EVENT_GET_NETWORK_SELECTION_MODE_DONE = 200;
-
- //String keys for preference lookup
- public static final String BUTTON_NETWORK_SELECT_KEY = "button_network_select_key";
- public static final String BUTTON_AUTO_SELECT_KEY = "button_auto_select_key";
- public static final String BUTTON_CHOOSE_NETWORK_KEY = "button_choose_network_key";
- public static final String CATEGORY_NETWORK_OPERATORS_KEY = "network_operators_category_key";
-
- //preference objects
- private NetworkSelectListPreference mNetworkSelect;
- private TwoStatePreference mAutoSelect;
- private Preference mChooseNetwork;
- private ProgressDialog mProgressDialog;
-
- private int mSubId;
- private TelephonyManager mTelephonyManager;
-
- // There's two sets of Auto-Select UI in this class.
- // If {@code com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI} set as true
- // {@link mChooseNetwork} will be used, otherwise {@link mNetworkSelect} will be used.
- boolean mEnableNewManualSelectNetworkUI;
-
- public NetworkOperators(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public NetworkOperators(Context context) {
- super(context);
- }
-
- /**
- * Initialize NetworkOperators instance.
- */
- public void initialize() {
- mEnableNewManualSelectNetworkUI = getContext().getResources().getBoolean(
- com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
- mAutoSelect = (TwoStatePreference) findPreference(BUTTON_AUTO_SELECT_KEY);
- mChooseNetwork = findPreference(BUTTON_CHOOSE_NETWORK_KEY);
- mNetworkSelect = (NetworkSelectListPreference) findPreference(BUTTON_NETWORK_SELECT_KEY);
- if (mEnableNewManualSelectNetworkUI) {
- removePreference(mNetworkSelect);
- } else {
- removePreference(mChooseNetwork);
- }
- mProgressDialog = new ProgressDialog(getContext());
- mTelephonyManager = TelephonyManager.from(getContext());
- }
-
- /**
- * Update NetworkOperators instance if like subId is updated.
- *
- * @param subId Corresponding subscription ID of this network.
- */
- protected void update(final int subId) {
- mSubId = subId;
- mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(mSubId);
-
- if (mAutoSelect != null) {
- mAutoSelect.setOnPreferenceChangeListener(this);
- }
-
- if (mEnableNewManualSelectNetworkUI) {
- if (mChooseNetwork != null) {
- ServiceState ss = mTelephonyManager.getServiceState();
- if (ss != null && ss.getState() == ServiceState.STATE_IN_SERVICE) {
- mChooseNetwork.setSummary(mTelephonyManager.getNetworkOperatorName());
- } else {
- mChooseNetwork.setSummary(R.string.network_disconnected);
- }
- }
- } else {
- if (mNetworkSelect != null) {
- mNetworkSelect.initialize(mSubId, this, mProgressDialog);
- }
- }
- getNetworkSelectionMode();
- }
-
- /**
- * Implemented to support onPreferenceChangeListener to look for preference
- * changes specifically on auto select button.
- *
- * @param preference is the preference to be changed, should be auto select button.
- * @param newValue should be the value of whether autoSelect is checked.
- */
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- if (preference == mAutoSelect) {
- boolean autoSelect = (Boolean) newValue;
- if (DBG) logd("onPreferenceChange autoSelect: " + String.valueOf(autoSelect));
- selectNetworkAutomatic(autoSelect);
- MetricsLogger.action(getContext(),
- MetricsEvent.ACTION_MOBILE_NETWORK_AUTO_SELECT_NETWORK_TOGGLE, autoSelect);
- return true;
- }
- return false;
- }
-
- private final Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case EVENT_AUTO_SELECT_DONE:
- mAutoSelect.setEnabled(true);
- dismissProgressBar();
-
- boolean isSuccessed = (boolean) msg.obj;
-
- if (isSuccessed) {
- if (DBG) logd("automatic network selection: succeeded!");
- displayNetworkSelectionSucceeded();
- } else {
- if (DBG) logd("automatic network selection: failed!");
- displayNetworkSelectionFailed();
- }
-
- break;
- case EVENT_GET_NETWORK_SELECTION_MODE_DONE:
- int networkSelectionMode = msg.arg1;
- if (networkSelectionMode == TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN) {
- if (DBG) logd("get network selection mode: failed!");
- } else {
- boolean autoSelect = networkSelectionMode
- == TelephonyManager.NETWORK_SELECTION_MODE_AUTO;
- if (DBG) {
- logd("get network selection mode: "
- + (autoSelect ? "auto" : "manual") + " selection");
- }
- if (mAutoSelect != null) {
- mAutoSelect.setChecked(autoSelect);
- }
- if (mEnableNewManualSelectNetworkUI) {
- if (mChooseNetwork != null) {
- mChooseNetwork.setEnabled(!autoSelect);
- }
- } else {
- if (mNetworkSelect != null) {
- mNetworkSelect.setEnabled(!autoSelect);
- }
- }
- }
- }
- return;
- }
- };
-
- // Used by both mAutoSelect and mNetworkSelect buttons.
- protected void displayNetworkSelectionFailed() {
- Toast.makeText(getContext(), R.string.connect_later, Toast.LENGTH_LONG).show();
- }
-
- // Used by both mAutoSelect and mNetworkSelect buttons.
- protected void displayNetworkSelectionSucceeded() {
- Toast.makeText(getContext(), R.string.registration_done, Toast.LENGTH_LONG).show();
- }
-
- private void selectNetworkAutomatic(boolean autoSelect) {
- if (DBG) logd("selectNetworkAutomatic: " + String.valueOf(autoSelect));
-
- if (autoSelect) {
- if (mEnableNewManualSelectNetworkUI) {
- if (mChooseNetwork != null) {
- mChooseNetwork.setEnabled(!autoSelect);
- }
- } else {
- if (mNetworkSelect != null) {
- mNetworkSelect.setEnabled(!autoSelect);
- }
- }
- if (DBG) logd("select network automatically...");
- showAutoSelectProgressBar();
- mAutoSelect.setEnabled(false);
- if (SubscriptionManager.isValidSubscriptionId(mSubId)) {
- ThreadUtils.postOnBackgroundThread(() -> {
- mTelephonyManager.setNetworkSelectionModeAutomatic();
- // Because TelephonyManager#setNetworkSelectionModeAutomatic doesn't have a
- // return value, we query the current network selection mode to tell if the
- // TelephonyManager#setNetworkSelectionModeAutomatic is successed.
- int networkSelectionMode = mTelephonyManager.getNetworkSelectionMode();
- Message msg = mHandler.obtainMessage(EVENT_AUTO_SELECT_DONE);
- msg.obj = networkSelectionMode == TelephonyManager.NETWORK_SELECTION_MODE_AUTO;
- msg.sendToTarget();
- });
- }
- } else {
- if (mEnableNewManualSelectNetworkUI) {
- if (mChooseNetwork != null) {
- // Open the choose Network page automatically when user turn off the auto-select
- openChooseNetworkPage();
- }
- } else {
- if (mNetworkSelect != null) {
- mNetworkSelect.onClick();
- }
- }
- }
- }
-
- protected void getNetworkSelectionMode() {
- if (DBG) logd("getting network selection mode...");
- ThreadUtils.postOnBackgroundThread(() -> {
- int networkSelectionMode = mTelephonyManager.getNetworkSelectionMode();
- Message msg = mHandler.obtainMessage(EVENT_GET_NETWORK_SELECTION_MODE_DONE);
- msg.arg1 = networkSelectionMode;
- msg.sendToTarget();
- });
- }
-
- private void dismissProgressBar() {
- if (mProgressDialog != null && mProgressDialog.isShowing()) {
- mProgressDialog.dismiss();
- }
- }
-
- private void showAutoSelectProgressBar() {
- mProgressDialog.setMessage(
- getContext().getResources().getString(R.string.register_automatically));
- mProgressDialog.setCanceledOnTouchOutside(false);
- mProgressDialog.setCancelable(false);
- mProgressDialog.setIndeterminate(true);
- mProgressDialog.show();
- }
-
- /**
- * Open the Choose network page via {@alink NetworkSelectSettingActivity}
- */
- public void openChooseNetworkPage() {
- Intent intent = NetworkSelectSettingActivity.getIntent(getContext(), mSubId);
- getContext().startActivity(intent);
- }
-
- protected boolean preferenceTreeClick(Preference preference) {
- if (mEnableNewManualSelectNetworkUI) {
- if (DBG) logd("enable New AutoSelectNetwork UI");
- if (preference == mChooseNetwork) {
- openChooseNetworkPage();
- }
- return (preference == mAutoSelect || preference == mChooseNetwork);
- } else {
- return (preference == mAutoSelect || preference == mNetworkSelect);
- }
- }
-
- private void logd(String msg) {
- Log.d(LOG_TAG, "[NetworksList] " + msg);
- }
-
- private void loge(String msg) {
- Log.e(LOG_TAG, "[NetworksList] " + msg);
- }
-}
diff --git a/src/com/android/phone/NetworkQueryService.java b/src/com/android/phone/NetworkQueryService.java
deleted file mode 100644
index e67582f..0000000
--- a/src/com/android/phone/NetworkQueryService.java
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * Copyright (C) 2008 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 android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.RemoteCallbackList;
-import android.os.RemoteException;
-import android.telephony.AccessNetworkConstants;
-import android.telephony.CellIdentityGsm;
-import android.telephony.CellInfo;
-import android.telephony.CellInfoGsm;
-import android.telephony.NetworkScan;
-import android.telephony.NetworkScanRequest;
-import android.telephony.RadioAccessSpecifier;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.telephony.TelephonyScanManager;
-import android.util.Log;
-
-import com.android.internal.telephony.CellNetworkScanResult;
-import com.android.internal.telephony.OperatorInfo;
-import com.android.settingslib.utils.ThreadUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Service code used to assist in querying the network for service
- * availability.
- */
-public class NetworkQueryService extends Service {
- // debug data
- private static final String LOG_TAG = "NetworkQuery";
- private static final boolean DBG = true;
-
- // static events
- private static final int EVENT_NETWORK_SCAN_VIA_PHONE_COMPLETED = 100;
- private static final int EVENT_NETWORK_SCAN_RESULTS = 200;
- private static final int EVENT_NETWORK_SCAN_ERROR = 300;
- private static final int EVENT_NETWORK_SCAN_COMPLETED = 400;
-
- // static states indicating the query status of the service
- private static final int QUERY_READY = -1;
- private static final int QUERY_IS_RUNNING = -2;
-
- // error statuses that will be retured in the callback.
- public static final int QUERY_OK = 0;
- public static final int QUERY_EXCEPTION = 1;
-
- static final String ACTION_LOCAL_BINDER = "com.android.phone.intent.action.LOCAL_BINDER";
-
- /** state of the query service */
- private int mState;
-
- private NetworkScan mNetworkScan;
-
- // NetworkScanRequest parameters
- private static final int SCAN_TYPE = NetworkScanRequest.SCAN_TYPE_ONE_SHOT;
- private static final boolean INCREMENTAL_RESULTS = true;
- // The parameters below are in seconds
- private static final int SEARCH_PERIODICITY_SEC = 5;
- private static final int MAX_SEARCH_TIME_SEC = 300;
- private static final int INCREMENTAL_RESULTS_PERIODICITY_SEC = 3;
-
- /**
- * Class for clients to access. Because we know this service always
- * runs in the same process as its clients, we don't need to deal with
- * IPC.
- */
- public class LocalBinder extends Binder {
- INetworkQueryService getService() {
- return mBinder;
- }
- }
- private final IBinder mLocalBinder = new LocalBinder();
-
- /**
- * Local handler to receive the network query compete callback
- * from the RIL.
- */
- Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- // if the scan is complete, broadcast the results.
- // to all registerd callbacks.
- case EVENT_NETWORK_SCAN_VIA_PHONE_COMPLETED:
- if (DBG) log("scan via Phone completed, broadcasting results");
- broadcastQueryResults(msg);
- break;
-
- case EVENT_NETWORK_SCAN_RESULTS:
- if (DBG) log("get scan results, broadcasting results");
- broadcastQueryResults(msg);
- break;
-
- case EVENT_NETWORK_SCAN_ERROR:
- if (DBG) log("get scan error, broadcasting error code");
- broadcastQueryResults(msg);
- break;
-
- case EVENT_NETWORK_SCAN_COMPLETED:
- if (DBG) log("network scan or stop network query completed");
- broadcastQueryResults(msg);
- break;
- }
- }
- };
-
- /**
- * List of callback objects, also used to synchronize access to
- * itself and to changes in state.
- */
- final RemoteCallbackList<INetworkQueryServiceCallback> mCallbacks =
- new RemoteCallbackList<INetworkQueryServiceCallback>();
-
- /**
- * This implementation of NetworkScanCallbackImpl is used to receive callback notifications from
- * the Telephony Manager.
- */
- public class NetworkScanCallbackImpl extends TelephonyScanManager.NetworkScanCallback {
-
- /** Returns the scan results to the user, this callback will be called at least one time. */
- public void onResults(List<CellInfo> results) {
- if (DBG) log("got network scan results: " + results.size());
- Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_RESULTS, results);
- msg.sendToTarget();
- }
-
- /**
- * Informs the user that the scan has stopped.
- *
- * This callback will be called when the scan is finished or cancelled by the user.
- * The related NetworkScanRequest will be deleted after this callback.
- */
- public void onComplete() {
- if (DBG) log("network scan completed");
- Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_COMPLETED);
- msg.sendToTarget();
- }
-
- /**
- * Informs the user that there is some error about the scan.
- *
- * This callback will be called whenever there is any error about the scan, and the scan
- * will be terminated. onComplete() will NOT be called.
- */
- public void onError(int error) {
- if (DBG) log("network scan got error: " + error);
- Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_ERROR, error, 0 /* arg2 */);
- msg.sendToTarget();
- }
- }
-
- /**
- * Implementation of the INetworkQueryService interface.
- */
- private final INetworkQueryService.Stub mBinder = new INetworkQueryService.Stub() {
-
- /**
- * Starts a query with a INetworkQueryServiceCallback object if
- * one has not been started yet. Ignore the new query request
- * if the query has been started already. Either way, place the
- * callback object in the queue to be notified upon request
- * completion.
- */
- public void startNetworkQuery(
- INetworkQueryServiceCallback cb, int subId, boolean isIncrementalResult) {
- if (cb != null) {
- // register the callback to the list of callbacks.
- synchronized (mCallbacks) {
- mCallbacks.register(cb);
- if (DBG) log("registering callback " + cb.getClass().toString());
-
- switch (mState) {
- case QUERY_READY:
-
- if (isIncrementalResult) {
- if (DBG) log("start network scan via TelephonManager");
- TelephonyManager tm = (TelephonyManager) getSystemService(
- Context.TELEPHONY_SERVICE);
- // The Radio Access Specifiers below are meant to scan
- // all the bands for all the supported technologies.
- RadioAccessSpecifier gsm = new RadioAccessSpecifier(
- AccessNetworkConstants.AccessNetworkType.GERAN,
- null /* bands */,
- null /* channels */);
- RadioAccessSpecifier lte = new RadioAccessSpecifier(
- AccessNetworkConstants.AccessNetworkType.EUTRAN,
- null /* bands */,
- null /* channels */);
- RadioAccessSpecifier wcdma = new RadioAccessSpecifier(
- AccessNetworkConstants.AccessNetworkType.UTRAN,
- null /* bands */,
- null /* channels */);
- RadioAccessSpecifier[] radioAccessSpecifier = {gsm, lte, wcdma};
- NetworkScanRequest networkScanRequest = new NetworkScanRequest(
- SCAN_TYPE,
- radioAccessSpecifier,
- SEARCH_PERIODICITY_SEC,
- MAX_SEARCH_TIME_SEC,
- INCREMENTAL_RESULTS,
- INCREMENTAL_RESULTS_PERIODICITY_SEC,
- null /* List of PLMN ids (MCC-MNC) */);
-
- // Construct a NetworkScanCallback
- NetworkQueryService.NetworkScanCallbackImpl
- networkScanCallback =
- new NetworkQueryService.NetworkScanCallbackImpl();
-
- // Request network scan
- mNetworkScan = tm.requestNetworkScan(networkScanRequest,
- networkScanCallback);
- mState = QUERY_IS_RUNNING;
- } else {
- if (SubscriptionManager.isValidSubscriptionId(subId)) {
- mState = QUERY_IS_RUNNING;
- ThreadUtils.postOnBackgroundThread(() -> {
- if (DBG) log("start network scan via Phone xxx");
- TelephonyManager telephonyManager =
- TelephonyManager.from(getApplicationContext())
- .createForSubscriptionId(subId);
- CellNetworkScanResult result =
- telephonyManager.getAvailableNetworks();
- Message msg = mHandler.obtainMessage(
- EVENT_NETWORK_SCAN_VIA_PHONE_COMPLETED);
- msg.obj = result;
- msg.sendToTarget();
- });
- } else {
- if (DBG) {
- log("SubscriptionId is invalid");
- }
- }
- }
-
- break;
- // do nothing if we're currently busy.
- case QUERY_IS_RUNNING:
- if (DBG) log("query already in progress");
- break;
- default:
- }
- }
- }
- }
-
- /**
- * Stops a query with a INetworkQueryServiceCallback object as
- * a token.
- */
- public void stopNetworkQuery() {
- if (DBG) log("stop network query");
- // Tells the RIL to terminate the query request.
- if (mNetworkScan != null) {
- try {
- mNetworkScan.stop();
- mState = QUERY_READY;
- } catch (RemoteException e) {
- if (DBG) log("stop mNetworkScan failed");
- } catch (IllegalArgumentException e) {
- // Do nothing, scan has already completed.
- }
- }
- }
-
- /**
- * Unregisters the callback without impacting an underlying query.
- */
- public void unregisterCallback(INetworkQueryServiceCallback cb) {
- if (cb != null) {
- synchronized (mCallbacks) {
- if (DBG) log("unregistering callback " + cb.getClass().toString());
- mCallbacks.unregister(cb);
- }
- }
- }
- };
-
- @Override
- public void onCreate() {
- mState = QUERY_READY;
- }
-
- /**
- * Required for service implementation.
- */
- @Override
- public void onStart(Intent intent, int startId) {
- }
-
- /**
- * Handle the bind request.
- */
- @Override
- public IBinder onBind(Intent intent) {
- if (DBG) log("binding service implementation");
- if (ACTION_LOCAL_BINDER.equals(intent.getAction())) {
- return mLocalBinder;
- }
-
- return mBinder;
- }
-
- /**
- * Broadcast the results from the query to all registered callback objects.
- */
- private void broadcastQueryResults(Message msg) {
- // reset the state.
- synchronized (mCallbacks) {
- mState = QUERY_READY;
-
- // Make the calls to all the registered callbacks.
- for (int i = (mCallbacks.beginBroadcast() - 1); i >= 0; i--) {
- INetworkQueryServiceCallback cb = mCallbacks.getBroadcastItem(i);
- if (DBG) log("broadcasting results to " + cb.getClass().toString());
- try {
- switch (msg.what) {
- case EVENT_NETWORK_SCAN_VIA_PHONE_COMPLETED:
- CellNetworkScanResult result = (CellNetworkScanResult) msg.obj;
- if (result.getOperators() != null) {
- cb.onResults(getCellInfoList(result.getOperators()));
- } else {
- if (DBG) log("Operators list is null.");
- }
- // Send the onComplete() callback to indicate the one-time network
- // scan has completed.
- cb.onComplete();
- break;
-
- case EVENT_NETWORK_SCAN_RESULTS:
- cb.onResults((List<CellInfo>) msg.obj);
- break;
-
- case EVENT_NETWORK_SCAN_COMPLETED:
- cb.onComplete();
- break;
-
- case EVENT_NETWORK_SCAN_ERROR:
- cb.onError(msg.arg1);
- break;
- }
- } catch (RemoteException e) {
- }
- }
-
- // finish up.
- mCallbacks.finishBroadcast();
- }
- }
-
- /**
- * Wraps up a list of OperatorInfo object to a list of CellInfo object. GsmCellInfo is used here
- * only because operatorInfo does not contain technology type while CellInfo is an abstract
- * object that requires to specify technology type. It doesn't matter which CellInfo type to
- * use here, since we only want to wrap the operator info and PLMN to a CellInfo object.
- */
- private List<CellInfo> getCellInfoList(List<OperatorInfo> operatorInfoList) {
- List<CellInfo> cellInfoList = new ArrayList<>();
- for (OperatorInfo oi: operatorInfoList) {
- String operatorNumeric = oi.getOperatorNumeric();
- String mcc = null;
- String mnc = null;
- log("operatorNumeric: " + operatorNumeric);
- if (operatorNumeric != null && operatorNumeric.matches("^[0-9]{5,6}$")) {
- mcc = operatorNumeric.substring(0, 3);
- mnc = operatorNumeric.substring(3);
- }
- CellIdentityGsm cig = new CellIdentityGsm(
- Integer.MAX_VALUE /* lac */,
- Integer.MAX_VALUE /* cid */,
- Integer.MAX_VALUE /* arfcn */,
- Integer.MAX_VALUE /* bsic */,
- mcc,
- mnc,
- oi.getOperatorAlphaLong(),
- oi.getOperatorAlphaShort());
-
- CellInfoGsm ci = new CellInfoGsm();
- ci.setCellIdentity(cig);
- cellInfoList.add(ci);
- }
- return cellInfoList;
- }
-
- private static void log(String msg) {
- Log.d(LOG_TAG, msg);
- }
-}
\ No newline at end of file
diff --git a/src/com/android/phone/NetworkScanHelper.java b/src/com/android/phone/NetworkScanHelper.java
deleted file mode 100644
index a21f547..0000000
--- a/src/com/android/phone/NetworkScanHelper.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (C) 2018 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 android.annotation.IntDef;
-import android.telephony.AccessNetworkConstants.AccessNetworkType;
-import android.telephony.CellInfo;
-import android.telephony.NetworkScan;
-import android.telephony.NetworkScanRequest;
-import android.telephony.RadioAccessSpecifier;
-import android.telephony.TelephonyManager;
-import android.telephony.TelephonyScanManager;
-import android.util.Log;
-
-import com.android.internal.telephony.CellNetworkScanResult;
-
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.SettableFuture;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.List;
-import java.util.concurrent.Executor;
-import java.util.stream.Collectors;
-
-/**
- * A helper class that builds the common interface and performs the network scan for two different
- * network scan APIs.
- */
-public class NetworkScanHelper {
- public static final String TAG = "NetworkScanHelper";
- private static final boolean DBG = true;
-
- /**
- * Callbacks interface to inform the network scan results.
- */
- public interface NetworkScanCallback {
- /**
- * Called when the results is returned from {@link TelephonyManager}. This method will be
- * called at least one time if there is no error occurred during the network scan.
- *
- * <p> This method can be called multiple times in one network scan, until
- * {@link #onComplete()} or {@link #onError(int)} is called.
- *
- * @param results
- */
- void onResults(List<CellInfo> results);
-
- /**
- * Called when the current network scan process is finished. No more
- * {@link #onResults(List)} will be called for the current network scan after this method is
- * called.
- */
- void onComplete();
-
- /**
- * Called when an error occurred during the network scan process.
- *
- * <p> There is no more result returned from {@link TelephonyManager} if an error occurred.
- *
- * <p> {@link #onComplete()} will not be called if an error occurred.
- *
- * @see {@link android.telephony.NetworkScan.ScanErrorCode}
- */
- void onError(int errorCode);
- }
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS, NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS})
- public @interface NetworkQueryType {}
-
- /**
- * Performs the network scan using {@link TelephonyManager#getAvailableNetworks()}. The network
- * scan results won't be returned to the caller until the network scan is completed.
- *
- * <p> This is typically used when the modem doesn't support the new network scan api
- * {@link TelephonyManager#requestNetworkScan(
- * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)}.
- */
- public static final int NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS = 1;
-
- /**
- * Performs the network scan using {@link TelephonyManager#requestNetworkScan(
- * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)} The network scan
- * results will be returned to the caller periodically in a small time window until the network
- * scan is completed. The complete results should be returned in the last called of
- * {@link NetworkScanCallback#onResults(List)}.
- *
- * <p> This is recommended to be used if modem supports the new network scan api
- * {@link TelephonyManager#requestNetworkScan(
- * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)}
- */
- public static final int NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS = 2;
-
- /** The constants below are used in the async network scan. */
- private static final boolean INCREMENTAL_RESULTS = true;
- private static final int SEARCH_PERIODICITY_SEC = 5;
- private static final int MAX_SEARCH_TIME_SEC = 300;
- private static final int INCREMENTAL_RESULTS_PERIODICITY_SEC = 3;
-
- private static final NetworkScanRequest NETWORK_SCAN_REQUEST =
- new NetworkScanRequest(
- NetworkScanRequest.SCAN_TYPE_ONE_SHOT,
- new RadioAccessSpecifier[]{
- // GSM
- new RadioAccessSpecifier(
- AccessNetworkType.GERAN,
- null /* bands */,
- null /* channels */),
- // LTE
- new RadioAccessSpecifier(
- AccessNetworkType.EUTRAN,
- null /* bands */,
- null /* channels */),
- // WCDMA
- new RadioAccessSpecifier(
- AccessNetworkType.UTRAN,
- null /* bands */,
- null /* channels */)
- },
- SEARCH_PERIODICITY_SEC,
- MAX_SEARCH_TIME_SEC,
- INCREMENTAL_RESULTS,
- INCREMENTAL_RESULTS_PERIODICITY_SEC,
- null /* List of PLMN ids (MCC-MNC) */);
-
- private final NetworkScanCallback mNetworkScanCallback;
- private final TelephonyManager mTelephonyManager;
- private final TelephonyScanManager.NetworkScanCallback mInternalNetworkScanCallback;
- private final Executor mExecutor;
-
- private NetworkScan mNetworkScanRequester;
-
- /** Callbacks for sync network scan */
- private ListenableFuture<List<CellInfo>> mNetworkScanFuture;
-
- public NetworkScanHelper(TelephonyManager tm, NetworkScanCallback callback, Executor executor) {
- mTelephonyManager = tm;
- mNetworkScanCallback = callback;
- mInternalNetworkScanCallback = new NetworkScanCallbackImpl();
- mExecutor = executor;
- }
-
- /**
- * Performs a network scan for the given type {@code type}.
- * {@link #NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS} is recommended if modem supports
- * {@link TelephonyManager#requestNetworkScan(
- * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)}.
- *
- * @param type used to tell which network scan API should be used.
- */
- public void startNetworkScan(@NetworkQueryType int type) {
- if (type == NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS) {
- mNetworkScanFuture = SettableFuture.create();
- Futures.addCallback(mNetworkScanFuture, new FutureCallback<List<CellInfo>>() {
- @Override
- public void onSuccess(List<CellInfo> result) {
- onResults(result);
- onComplete();
- }
-
- @Override
- public void onFailure(Throwable t) {
- int errCode = Integer.parseInt(t.getMessage());
- onError(errCode);
- }
- });
- mExecutor.execute(new NetworkScanSyncTask(
- mTelephonyManager, (SettableFuture) mNetworkScanFuture));
- } else if (type == NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS) {
- if (DBG) Log.d(TAG, "start network scan async");
- mNetworkScanRequester = mTelephonyManager.requestNetworkScan(
- NETWORK_SCAN_REQUEST,
- mExecutor,
- mInternalNetworkScanCallback);
- }
- }
-
- /**
- * The network scan of type {@link #NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS} can't be stopped,
- * however, the result of the current network scan won't be returned to the callback after
- * calling this method.
- */
- public void stopNetworkQuery() {
- if (mNetworkScanRequester != null) {
- mNetworkScanRequester.stopScan();
- mNetworkScanFuture = null;
- }
-
- if (mNetworkScanFuture != null) {
- mNetworkScanFuture.cancel(true /* mayInterruptIfRunning */);
- mNetworkScanFuture = null;
- }
- }
-
- private void onResults(List<CellInfo> cellInfos) {
- mNetworkScanCallback.onResults(cellInfos);
- }
-
- private void onComplete() {
- mNetworkScanCallback.onComplete();
- }
-
- private void onError(int errCode) {
- mNetworkScanCallback.onError(errCode);
- }
-
- /**
- * Converts the status code of {@link CellNetworkScanResult} to one of the
- * {@link android.telephony.NetworkScan.ScanErrorCode}.
- * @param errCode status code from {@link CellNetworkScanResult}.
- *
- * @return one of the scan error code from {@link android.telephony.NetworkScan.ScanErrorCode}.
- */
- private static int convertToScanErrorCode(int errCode) {
- switch (errCode) {
- case CellNetworkScanResult.STATUS_RADIO_NOT_AVAILABLE:
- return NetworkScan.ERROR_RADIO_INTERFACE_ERROR;
- case CellNetworkScanResult.STATUS_RADIO_GENERIC_FAILURE:
- default:
- return NetworkScan.ERROR_MODEM_ERROR;
- }
- }
-
- private final class NetworkScanCallbackImpl extends TelephonyScanManager.NetworkScanCallback {
- public void onResults(List<CellInfo> results) {
- if (DBG) Log.d(TAG, "async scan onResults() results = " + results);
- NetworkScanHelper.this.onResults(results);
- }
-
- public void onComplete() {
- if (DBG) Log.d(TAG, "async scan onComplete()");
- NetworkScanHelper.this.onComplete();
- }
-
- public void onError(@NetworkScan.ScanErrorCode int errCode) {
- if (DBG) Log.d(TAG, "async scan onError() errorCode = " + errCode);
- NetworkScanHelper.this.onError(errCode);
- }
- }
-
- private static final class NetworkScanSyncTask implements Runnable {
- private final SettableFuture<List<CellInfo>> mCallback;
- private final TelephonyManager mTelephonyManager;
-
- NetworkScanSyncTask(
- TelephonyManager telephonyManager, SettableFuture<List<CellInfo>> callback) {
- mTelephonyManager = telephonyManager;
- mCallback = callback;
- }
-
- @Override
- public void run() {
- if (DBG) Log.d(TAG, "sync scan start");
- CellNetworkScanResult result = mTelephonyManager.getAvailableNetworks();
- if (result.getStatus() == CellNetworkScanResult.STATUS_SUCCESS) {
- List<CellInfo> cellInfos = result.getOperators()
- .stream()
- .map(operatorInfo
- -> CellInfoUtil.convertOperatorInfoToCellInfo(operatorInfo))
- .collect(Collectors.toList());
- if (DBG) Log.d(TAG, "sync scan complete");
- mCallback.set(cellInfos);
- } else {
- mCallback.setException(new Throwable(
- Integer.toString(convertToScanErrorCode(result.getStatus()))));
- }
- }
- }
-}
diff --git a/src/com/android/phone/NetworkSelectListPreference.java b/src/com/android/phone/NetworkSelectListPreference.java
deleted file mode 100644
index df3f44a..0000000
--- a/src/com/android/phone/NetworkSelectListPreference.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * 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 android.app.ProgressDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.AsyncTask;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.telephony.CellInfo;
-import android.telephony.CellInfoCdma;
-import android.telephony.CellInfoGsm;
-import android.telephony.CellInfoLte;
-import android.telephony.CellInfoWcdma;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.text.BidiFormatter;
-import android.text.TextDirectionHeuristics;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.telephony.OperatorInfo;
-import com.android.phone.NetworkScanHelper.NetworkScanCallback;
-import com.android.settingslib.utils.ThreadUtils;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-
-/**
- * "Networks" preference in "Mobile network" settings UI for the Phone app.
- * It's used to manually search and choose mobile network. Enabled only when
- * autoSelect preference is turned off.
- */
-public class NetworkSelectListPreference extends ListPreference
- implements DialogInterface.OnCancelListener,
- Preference.OnPreferenceChangeListener{
-
- private static final String LOG_TAG = "networkSelect";
- private static final boolean DBG = true;
-
- private static final int EVENT_MANUALLY_NETWORK_SELECTION_DONE = 1;
- private static final int EVENT_NETWORK_SCAN_RESULTS = 2;
- private static final int EVENT_NETWORK_SCAN_COMPLETED = 3;
- private static final int EVENT_NETWORK_SCAN_ERROR = 4;
-
- //dialog ids
- private static final int DIALOG_NETWORK_SELECTION = 100;
- private static final int DIALOG_NETWORK_LIST_LOAD = 200;
-
- private final ExecutorService mNetworkScanExecutor = Executors.newFixedThreadPool(1);
-
- private List<CellInfo> mCellInfoList;
- private CellInfo mCellInfo;
-
- private int mSubId;
- private TelephonyManager mTelephonyManager;
- private NetworkScanHelper mNetworkScanHelper;
- private NetworkOperators mNetworkOperators;
- private List<String> mForbiddenPlmns;
-
- private ProgressDialog mProgressDialog;
- public NetworkSelectListPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public NetworkSelectListPreference(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- @Override
- protected void onClick() {
- showProgressDialog(DIALOG_NETWORK_LIST_LOAD);
- TelephonyManager telephonyManager = (TelephonyManager)
- getContext().getSystemService(Context.TELEPHONY_SERVICE);
- new AsyncTask<Void, Void, List<String>>() {
- @Override
- protected List<String> doInBackground(Void... voids) {
- String[] forbiddenPlmns = telephonyManager.getForbiddenPlmns();
- return forbiddenPlmns != null ? Arrays.asList(forbiddenPlmns) : null;
- }
-
- @Override
- protected void onPostExecute(List<String> result) {
- mForbiddenPlmns = result;
- loadNetworksList();
- }
- }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
-
- private final Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case EVENT_MANUALLY_NETWORK_SELECTION_DONE:
- if (DBG) logd("hideProgressPanel");
- dismissProgressDialog();
-
- boolean isSuccessed = (boolean) msg.obj;
- if (isSuccessed) {
- if (DBG) {
- logd("manual network selection: succeeded! "
- + getNetworkTitle(mCellInfo));
- }
- mNetworkOperators.displayNetworkSelectionSucceeded();
- } else {
- if (DBG) logd("manual network selection: failed!");
- mNetworkOperators.displayNetworkSelectionFailed();
- }
- mNetworkOperators.getNetworkSelectionMode();
- break;
-
- case EVENT_NETWORK_SCAN_RESULTS:
- List<CellInfo> results = (List<CellInfo>) msg.obj;
- results.removeIf(cellInfo -> cellInfo == null);
- mCellInfoList = new ArrayList<>(results);
- if (DBG) logd("CALLBACK_SCAN_RESULTS" + mCellInfoList.toString());
- break;
-
- case EVENT_NETWORK_SCAN_COMPLETED:
- if (DBG) logd("scan complete, load the cellInfosList");
- dismissProgressDialog();
- networksListLoaded();
- break;
- case EVENT_NETWORK_SCAN_ERROR:
- dismissProgressDialog();
- displayNetworkQueryFailed();
- mNetworkOperators.getNetworkSelectionMode();
- break;
- }
- return;
- }
- };
-
- private final NetworkScanHelper.NetworkScanCallback mCallback = new NetworkScanCallback() {
- public void onResults(List<CellInfo> results) {
- if (DBG) logd("get scan results: " + results.toString());
- Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_RESULTS, results);
- msg.sendToTarget();
- }
-
- public void onComplete() {
- if (DBG) logd("network scan completed.");
- Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_COMPLETED);
- msg.sendToTarget();
- }
-
- public void onError(int error) {
- if (DBG) logd("network scan error.");
- Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_ERROR);
- msg.sendToTarget();
- }
- };
-
- @Override
- //implemented for DialogInterface.OnCancelListener
- public void onCancel(DialogInterface dialog) {
- if (DBG) logd("user manually close the dialog");
- mNetworkScanHelper.stopNetworkQuery();
-
- // If cancelled, we query NetworkSelectMode and update states of AutoSelect button.
- mNetworkOperators.getNetworkSelectionMode();
- }
-
- @Override
- protected void onDialogClosed(boolean positiveResult) {
- super.onDialogClosed(positiveResult);
- // If dismissed, we query NetworkSelectMode and update states of AutoSelect button.
- if (!positiveResult) {
- mNetworkOperators.getNetworkSelectionMode();
- }
- }
-
- // This initialize method needs to be called for this preference to work properly.
- protected void initialize(int subId, NetworkOperators networkOperators,
- ProgressDialog progressDialog) {
- mSubId = subId;
- mNetworkOperators = networkOperators;
- // This preference should share the same progressDialog with networkOperators category.
- mProgressDialog = progressDialog;
-
- mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(mSubId);
- mNetworkScanHelper = new NetworkScanHelper(
- mTelephonyManager, mCallback, mNetworkScanExecutor);
-
- setSummary(mTelephonyManager.getNetworkOperatorName());
-
- setOnPreferenceChangeListener(this);
- }
-
- @Override
- protected void onPrepareForRemoval() {
- destroy();
- super.onPrepareForRemoval();
- }
-
- private void destroy() {
- dismissProgressDialog();
-
- if (mNetworkScanHelper != null) {
- mNetworkScanHelper.stopNetworkQuery();
- }
-
- mNetworkScanExecutor.shutdown();
- }
-
- private void displayEmptyNetworkList() {
- Toast.makeText(getContext(), R.string.empty_networks_list, Toast.LENGTH_LONG).show();
- }
-
- private void displayNetworkQueryFailed() {
- Toast.makeText(getContext(), R.string.network_query_error, Toast.LENGTH_LONG).show();
- }
-
- private void loadNetworksList() {
- if (DBG) logd("load networks list...");
- mNetworkScanHelper.startNetworkScan(
- NetworkScanHelper.NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS);
- }
-
- private void networksListLoaded() {
- if (DBG) logd("networks list loaded");
-
- mNetworkOperators.getNetworkSelectionMode();
- if (mCellInfoList != null) {
- // create a preference for each item in the list.
- // just use the operator name instead of the mildly
- // confusing mcc/mnc.
- List<CharSequence> networkEntriesList = new ArrayList<>();
- List<CharSequence> networkEntryValuesList = new ArrayList<>();
- for (CellInfo cellInfo: mCellInfoList) {
- // Display each operator name only once.
- String networkTitle = getNetworkTitle(cellInfo);
- if (CellInfoUtil.isForbidden(cellInfo, mForbiddenPlmns)) {
- networkTitle += " "
- + getContext().getResources().getString(R.string.forbidden_network);
- }
- networkEntriesList.add(networkTitle);
- networkEntryValuesList.add(getOperatorNumeric(cellInfo));
- }
- setEntries(networkEntriesList.toArray(new CharSequence[networkEntriesList.size()]));
- setEntryValues(networkEntryValuesList.toArray(
- new CharSequence[networkEntryValuesList.size()]));
-
- super.onClick();
- } else {
- displayEmptyNetworkList();
- }
- }
-
- private void dismissProgressDialog() {
- if (mProgressDialog != null && mProgressDialog.isShowing()) {
- try {
- mProgressDialog.dismiss();
- } catch (IllegalArgumentException ex) {
- loge("Can't close the progress dialog " + ex);
- }
- }
- }
-
- private void showProgressDialog(int id) {
- if (mProgressDialog == null) {
- mProgressDialog = new ProgressDialog(getContext());
- } else {
- // Dismiss progress bar if it's showing now.
- dismissProgressDialog();
- }
-
- switch (id) {
- case DIALOG_NETWORK_SELECTION:
- final String networkSelectMsg = getContext().getResources()
- .getString(R.string.register_on_network,
- getNetworkTitle(mCellInfo));
- mProgressDialog.setMessage(networkSelectMsg);
- mProgressDialog.setCanceledOnTouchOutside(false);
- mProgressDialog.setCancelable(false);
- mProgressDialog.setIndeterminate(true);
- break;
- case DIALOG_NETWORK_LIST_LOAD:
- mProgressDialog.setMessage(
- getContext().getResources().getString(R.string.load_networks_progress));
- mProgressDialog.setCanceledOnTouchOutside(false);
- mProgressDialog.setCancelable(true);
- mProgressDialog.setIndeterminate(false);
- mProgressDialog.setOnCancelListener(this);
- break;
- default:
- }
- mProgressDialog.show();
- }
-
- /**
- * Implemented to support onPreferenceChangeListener to look for preference
- * changes specifically on this button.
- *
- * @param preference is the preference to be changed, should be network select button.
- * @param newValue should be the value of the selection as index of operators.
- */
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- int operatorIndex = findIndexOfValue((String) newValue);
- mCellInfo = mCellInfoList.get(operatorIndex);
- if (DBG) logd("selected network: " + mCellInfo.toString());
-
- MetricsLogger.action(getContext(),
- MetricsEvent.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK);
-
- if (SubscriptionManager.isValidSubscriptionId(mSubId)) {
- ThreadUtils.postOnBackgroundThread(() -> {
- final OperatorInfo operatorInfo = getOperatorInfoFromCellInfo(mCellInfo);
- if (DBG) logd("manually selected network: " + operatorInfo.toString());
- boolean isSuccessed = mTelephonyManager.setNetworkSelectionModeManual(
- operatorInfo, true /* persistSelection */);
- Message msg = mHandler.obtainMessage(EVENT_MANUALLY_NETWORK_SELECTION_DONE);
- msg.obj = isSuccessed;
- msg.sendToTarget();
- });
- } else {
- loge("Error selecting network, subscription Id is invalid " + mSubId);
- }
-
- return true;
- }
-
- /**
- * Returns the title of the network obtained in the manual search.
- *
- * @param cellInfo contains the information of the network.
- * @return Long Name if not null/empty, otherwise Short Name if not null/empty,
- * else MCCMNC string.
- */
- private String getNetworkTitle(CellInfo cellInfo) {
- OperatorInfo ni = getOperatorInfoFromCellInfo(cellInfo);
-
- if (!TextUtils.isEmpty(ni.getOperatorAlphaLong())) {
- return ni.getOperatorAlphaLong();
- } else if (!TextUtils.isEmpty(ni.getOperatorAlphaShort())) {
- return ni.getOperatorAlphaShort();
- } else {
- BidiFormatter bidiFormatter = BidiFormatter.getInstance();
- return bidiFormatter.unicodeWrap(ni.getOperatorNumeric(), TextDirectionHeuristics.LTR);
- }
- }
-
- /**
- * Returns the operator numeric (MCCMNC) obtained in the manual search.
- *
- * @param cellInfo contains the information of the network.
- * @return MCCMNC string.
- */
- private String getOperatorNumeric(CellInfo cellInfo) {
- return getOperatorInfoFromCellInfo(cellInfo).getOperatorNumeric();
- }
-
- /**
- * Wrap a cell info into an operator info.
- */
- private OperatorInfo getOperatorInfoFromCellInfo(CellInfo cellInfo) {
- OperatorInfo oi;
- if (cellInfo instanceof CellInfoLte) {
- CellInfoLte lte = (CellInfoLte) cellInfo;
- oi = new OperatorInfo(
- (String) lte.getCellIdentity().getOperatorAlphaLong(),
- (String) lte.getCellIdentity().getOperatorAlphaShort(),
- lte.getCellIdentity().getMobileNetworkOperator());
- } else if (cellInfo instanceof CellInfoWcdma) {
- CellInfoWcdma wcdma = (CellInfoWcdma) cellInfo;
- oi = new OperatorInfo(
- (String) wcdma.getCellIdentity().getOperatorAlphaLong(),
- (String) wcdma.getCellIdentity().getOperatorAlphaShort(),
- wcdma.getCellIdentity().getMobileNetworkOperator());
- } else if (cellInfo instanceof CellInfoGsm) {
- CellInfoGsm gsm = (CellInfoGsm) cellInfo;
- oi = new OperatorInfo(
- (String) gsm.getCellIdentity().getOperatorAlphaLong(),
- (String) gsm.getCellIdentity().getOperatorAlphaShort(),
- gsm.getCellIdentity().getMobileNetworkOperator());
- } else if (cellInfo instanceof CellInfoCdma) {
- CellInfoCdma cdma = (CellInfoCdma) cellInfo;
- oi = new OperatorInfo(
- (String) cdma.getCellIdentity().getOperatorAlphaLong(),
- (String) cdma.getCellIdentity().getOperatorAlphaShort(),
- "" /* operator numeric */);
- } else {
- oi = new OperatorInfo("", "", "");
- }
- return oi;
- }
-
- @Override
- protected Parcelable onSaveInstanceState() {
- final Parcelable superState = super.onSaveInstanceState();
- if (isPersistent()) {
- // No need to save instance state since it's persistent
- return superState;
- }
-
- final SavedState myState = new SavedState(superState);
- myState.mDialogListEntries = getEntries();
- myState.mDialogListEntryValues = getEntryValues();
- myState.mCellInfoList = mCellInfoList;
- return myState;
- }
-
- @Override
- protected void onRestoreInstanceState(Parcelable state) {
- if (state == null || !state.getClass().equals(SavedState.class)) {
- // Didn't save state for us in onSaveInstanceState
- super.onRestoreInstanceState(state);
- return;
- }
-
- SavedState myState = (SavedState) state;
-
- if (getEntries() == null && myState.mDialogListEntries != null) {
- setEntries(myState.mDialogListEntries);
- }
- if (getEntryValues() == null && myState.mDialogListEntryValues != null) {
- setEntryValues(myState.mDialogListEntryValues);
- }
- if (mCellInfoList == null && myState.mCellInfoList != null) {
- mCellInfoList = myState.mCellInfoList;
- }
-
- super.onRestoreInstanceState(myState.getSuperState());
- }
-
- /**
- * We save entries, entryValues and operatorInfoList into bundle.
- * At onCreate of fragment, dialog will be restored if it was open. In this case,
- * we need to restore entries, entryValues and operatorInfoList. Without those information,
- * onPreferenceChange will fail if user select network from the dialog.
- */
- private static class SavedState extends BaseSavedState {
- CharSequence[] mDialogListEntries;
- CharSequence[] mDialogListEntryValues;
- List<CellInfo> mCellInfoList;
-
- SavedState(Parcel source) {
- super(source);
- final ClassLoader boot = Object.class.getClassLoader();
- mDialogListEntries = source.readCharSequenceArray();
- mDialogListEntryValues = source.readCharSequenceArray();
- mCellInfoList = source.readParcelableList(mCellInfoList, boot);
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- super.writeToParcel(dest, flags);
- dest.writeCharSequenceArray(mDialogListEntries);
- dest.writeCharSequenceArray(mDialogListEntryValues);
- dest.writeParcelableList(mCellInfoList, flags);
- }
-
- SavedState(Parcelable superState) {
- super(superState);
- }
-
- public static final Parcelable.Creator<SavedState> CREATOR =
- new Parcelable.Creator<SavedState>() {
- public SavedState createFromParcel(Parcel in) {
- return new SavedState(in);
- }
-
- public SavedState[] newArray(int size) {
- return new SavedState[size];
- }
- };
- }
-
- private void logd(String msg) {
- Log.d(LOG_TAG, "[NetworksList] " + msg);
- }
-
- private void loge(String msg) {
- Log.e(LOG_TAG, "[NetworksList] " + msg);
- }
-}
diff --git a/src/com/android/phone/NetworkSelectSetting.java b/src/com/android/phone/NetworkSelectSetting.java
deleted file mode 100644
index 45478d9..0000000
--- a/src/com/android/phone/NetworkSelectSetting.java
+++ /dev/null
@@ -1,569 +0,0 @@
-/*
- * Copyright (C) 2018 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 android.app.ActionBar;
-import android.app.Activity;
-import android.content.Context;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.PersistableBundle;
-import android.preference.Preference;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceScreen;
-import android.telephony.AccessNetworkConstants;
-import android.telephony.CarrierConfigManager;
-import android.telephony.CellIdentity;
-import android.telephony.CellInfo;
-import android.telephony.NetworkRegistrationInfo;
-import android.telephony.ServiceState;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.telephony.OperatorInfo;
-import com.android.phone.NetworkScanHelper.NetworkScanCallback;
-import com.android.settingslib.utils.ThreadUtils;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-/**
- * "Choose network" settings UI for the Phone app.
- */
-public class NetworkSelectSetting extends PreferenceFragment {
-
- private static final String TAG = "NetworkSelectSetting";
- private static final boolean DBG = true;
-
- private static final int EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE = 1;
- private static final int EVENT_NETWORK_SCAN_RESULTS = 2;
- private static final int EVENT_NETWORK_SCAN_ERROR = 3;
- private static final int EVENT_NETWORK_SCAN_COMPLETED = 4;
-
- private static final String PREF_KEY_CONNECTED_NETWORK_OPERATOR =
- "connected_network_operator_preference";
- private static final String PREF_KEY_NETWORK_OPERATORS = "network_operators_preference";
-
- // used to add/remove NetworkOperatorsPreference.
- private PreferenceCategory mNetworkOperatorsPreferences;
- // used to add/remove connected NetworkOperatorPreference.
- private PreferenceCategory mConnectedNetworkOperatorsPreference;
- // manage the progress bar on the top of the page.
- private View mProgressHeader;
- private Preference mStatusMessagePreference;
- private List<CellInfo> mCellInfoList;
- private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- private ViewGroup mFrameLayout;
- private NetworkOperatorPreference mSelectedNetworkOperatorPreference;
- private TelephonyManager mTelephonyManager;
- private List<String> mForbiddenPlmns;
- private boolean mShow4GForLTE = false;
- private NetworkScanHelper mNetworkScanHelper;
- private final ExecutorService mNetworkScanExecutor = Executors.newFixedThreadPool(1);
-
- private final Runnable mUpdateNetworkOperatorsRunnable = () -> {
- updateNetworkOperatorsPreferenceCategory();
- };
-
- /**
- * Create a new instance of this fragment.
- */
- public static NetworkSelectSetting newInstance(int subId) {
- Bundle args = new Bundle();
- args.putInt(NetworkSelectSettingActivity.KEY_SUBSCRIPTION_ID, subId);
- NetworkSelectSetting fragment = new NetworkSelectSetting();
- fragment.setArguments(args);
-
- return fragment;
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- if (DBG) logd("onCreate");
- super.onCreate(icicle);
-
- mSubId = getArguments().getInt(NetworkSelectSettingActivity.KEY_SUBSCRIPTION_ID);
-
- addPreferencesFromResource(R.xml.choose_network);
- mConnectedNetworkOperatorsPreference =
- (PreferenceCategory) findPreference(PREF_KEY_CONNECTED_NETWORK_OPERATOR);
- mNetworkOperatorsPreferences =
- (PreferenceCategory) findPreference(PREF_KEY_NETWORK_OPERATORS);
- mStatusMessagePreference = new Preference(getContext());
- mSelectedNetworkOperatorPreference = null;
- mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(mSubId);
- mNetworkScanHelper = new NetworkScanHelper(
- mTelephonyManager, mCallback, mNetworkScanExecutor);
- PersistableBundle bundle = ((CarrierConfigManager) getContext().getSystemService(
- Context.CARRIER_CONFIG_SERVICE)).getConfigForSubId(mSubId);
- if (bundle != null) {
- mShow4GForLTE = bundle.getBoolean(
- CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
- }
- setRetainInstance(true);
- }
-
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- if (DBG) logd("onViewCreated");
- super.onViewCreated(view, savedInstanceState);
-
- if (getListView() != null) {
- getListView().setDivider(null);
- }
- // Inflate progress bar
- final Activity activity = getActivity();
- if (activity != null) {
- ActionBar actionBar = activity.getActionBar();
- if (actionBar != null) {
- // android.R.id.home will be triggered in
- // {@link NetworkSelectSettingAcitivity#onOptionsItemSelected()}
- actionBar.setDisplayHomeAsUpEnabled(true);
- }
- mFrameLayout = activity.findViewById(R.id.choose_network_content);
- final LayoutInflater inflater = activity.getLayoutInflater();
- final View pinnedHeader =
- inflater.inflate(R.layout.choose_network_progress_header, mFrameLayout, false);
- mFrameLayout.addView(pinnedHeader);
- mFrameLayout.setVisibility(View.VISIBLE);
- mProgressHeader = pinnedHeader.findViewById(R.id.progress_bar_animation);
- setProgressBarVisible(false);
- }
- forceConfigConnectedNetworkOperatorsPreferenceCategory();
- }
-
- @Override
- public void onStart() {
- if (DBG) logd("onStart");
- super.onStart();
- new AsyncTask<Void, Void, List<String>>() {
- @Override
- protected List<String> doInBackground(Void... voids) {
- String[] forbiddenPlmns = mTelephonyManager.getForbiddenPlmns();
- return forbiddenPlmns != null ? Arrays.asList(forbiddenPlmns) : null;
- }
-
- @Override
- protected void onPostExecute(List<String> result) {
- mForbiddenPlmns = result;
- loadNetworksList();
- }
- }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
-
- /**
- * Invoked on each preference click in this hierarchy, overrides
- * PreferenceActivity's implementation. Used to make sure we track the
- * preference click events.
- * Since the connected network operator is either faked (when no data connection) or already
- * connected, we do not allow user to click the connected network operator.
- */
- @Override
- public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
- Preference preference) {
- if (DBG) logd("User clicked the screen");
- stopNetworkQuery();
- setProgressBarVisible(false);
- if (preference instanceof NetworkOperatorPreference) {
- // Refresh the last selected item in case users reselect network.
- if (mSelectedNetworkOperatorPreference != null) {
- mSelectedNetworkOperatorPreference.setSummary("");
- }
-
- mSelectedNetworkOperatorPreference = (NetworkOperatorPreference) preference;
- CellInfo cellInfo = mSelectedNetworkOperatorPreference.getCellInfo();
- if (DBG) logd("User click a NetworkOperatorPreference: " + cellInfo.toString());
-
- // Send metrics event
- MetricsLogger.action(getContext(),
- MetricsEvent.ACTION_MOBILE_NETWORK_MANUAL_SELECT_NETWORK);
-
- // Connect to the network
- if (SubscriptionManager.isValidSubscriptionId(mSubId)) {
- if (DBG) {
- logd("Connect to the network: " + CellInfoUtil.getNetworkTitle(cellInfo));
- }
- // Set summary as "Connecting" to the selected network.
- mSelectedNetworkOperatorPreference.setSummary(R.string.network_connecting);
-
- // Set summary as "Disconnected" to the previously connected network
- if (mConnectedNetworkOperatorsPreference.getPreferenceCount() > 0) {
- NetworkOperatorPreference connectedNetworkOperator = (NetworkOperatorPreference)
- (mConnectedNetworkOperatorsPreference.getPreference(0));
- if (!CellInfoUtil.getNetworkTitle(cellInfo).equals(
- CellInfoUtil.getNetworkTitle(connectedNetworkOperator.getCellInfo()))) {
- connectedNetworkOperator.setSummary(R.string.network_disconnected);
- }
- }
-
- OperatorInfo operatorInfo = CellInfoUtil.getOperatorInfoFromCellInfo(cellInfo);
- if (DBG) logd("manually selected network operator: " + operatorInfo.toString());
-
- ThreadUtils.postOnBackgroundThread(() -> {
- Message msg = mHandler.obtainMessage(EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE);
- msg.obj = mTelephonyManager.setNetworkSelectionModeManual(
- operatorInfo, true /* persistSelection */);
- msg.sendToTarget();
- });
-
- setProgressBarVisible(true);
- return true;
- } else {
- loge("Error selecting network. Subscription Id is invalid.");
- mSelectedNetworkOperatorPreference = null;
- return false;
- }
-
- } else {
- preferenceScreen.setEnabled(false);
- return false;
- }
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- if (!(getActivity() instanceof NetworkSelectSettingActivity)) {
- throw new IllegalStateException("Parent activity is not NetworkSelectSettingActivity");
- }
- }
-
- @Override
- public void onStop() {
- super.onStop();
- if (DBG) logd("onStop");
- getView().removeCallbacks(mUpdateNetworkOperatorsRunnable);
- stopNetworkQuery();
- }
-
- private final Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE:
- if (DBG) logd("network selection done: hide the progress header");
- setProgressBarVisible(false);
-
- boolean isSuccessed = (boolean) msg.obj;
- if (isSuccessed) {
- if (DBG) logd("manual network selection: succeeded! ");
- // Set summary as "Connected" to the selected network.
- mSelectedNetworkOperatorPreference.setSummary(R.string.network_connected);
- } else {
- if (DBG) logd("manual network selection: failed! ");
- // Set summary as "Couldn't connect" to the selected network.
- mSelectedNetworkOperatorPreference.setSummary(
- R.string.network_could_not_connect);
- }
- break;
-
- case EVENT_NETWORK_SCAN_RESULTS:
- List<CellInfo> results = aggregateCellInfoList((List<CellInfo>) msg.obj);
- mCellInfoList = new ArrayList<>(results);
- if (DBG) logd("after aggregate: " + mCellInfoList.toString());
- if (mCellInfoList != null && mCellInfoList.size() != 0) {
- updateNetworkOperators();
- } else {
- addMessagePreference(R.string.empty_networks_list);
- }
-
- break;
-
- case EVENT_NETWORK_SCAN_ERROR:
- int error = msg.arg1;
- if (DBG) logd("error while querying available networks " + error);
- stopNetworkQuery();
- addMessagePreference(R.string.network_query_error);
- break;
-
- case EVENT_NETWORK_SCAN_COMPLETED:
- stopNetworkQuery();
- if (DBG) logd("scan complete");
- if (mCellInfoList == null) {
- // In case the scan timeout before getting any results
- addMessagePreference(R.string.empty_networks_list);
- }
- break;
- }
- return;
- }
- };
-
- private void loadNetworksList() {
- if (DBG) logd("load networks list...");
- setProgressBarVisible(true);
- mNetworkScanHelper.startNetworkScan(
- NetworkScanHelper.NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS);
- }
-
- private final NetworkScanHelper.NetworkScanCallback mCallback = new NetworkScanCallback() {
- public void onResults(List<CellInfo> results) {
- if (DBG) logd("get scan results.");
- Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_RESULTS, results);
- msg.sendToTarget();
- }
-
- public void onComplete() {
- if (DBG) logd("network scan completed.");
- Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_COMPLETED);
- msg.sendToTarget();
- }
-
- public void onError(int error) {
- if (DBG) logd("get onError callback with error code: " + error);
- Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_ERROR, error, 0 /* arg2 */);
- msg.sendToTarget();
- }
- };
-
- private void updateNetworkOperators() {
- if (DBG) logd("updateNetworkOperators");
- if (getActivity() != null) {
- final View view = getView();
- final Handler handler = view.getHandler();
- if (handler != null && handler.hasCallbacks(mUpdateNetworkOperatorsRunnable)) {
- return;
- }
- view.post(mUpdateNetworkOperatorsRunnable);
- }
- }
-
- /**
- * Update the currently available network operators list, which only contains the unregistered
- * network operators. So if the device has no data and the network operator in the connected
- * network operator category shows "Disconnected", it will also exist in the available network
- * operator category for user to select. On the other hand, if the device has data and the
- * network operator in the connected network operator category shows "Connected", it will not
- * exist in the available network category.
- */
- private void updateNetworkOperatorsPreferenceCategory() {
- mNetworkOperatorsPreferences.removeAll();
-
- configConnectedNetworkOperatorsPreferenceCategory();
- for (int index = 0; index < mCellInfoList.size(); index++) {
- if (!mCellInfoList.get(index).isRegistered()) {
- NetworkOperatorPreference pref = new NetworkOperatorPreference(
- mCellInfoList.get(index), getContext(), mForbiddenPlmns, mShow4GForLTE);
- pref.setKey(CellInfoUtil.getNetworkTitle(mCellInfoList.get(index)));
- pref.setOrder(index);
- mNetworkOperatorsPreferences.addPreference(pref);
- }
- }
- }
-
- /**
- * Config the connected network operator preference when the page was created. When user get
- * into this page, the device might or might not have data connection.
- * - If the device has data:
- * 1. use {@code ServiceState#getNetworkRegistrationInfoList()} to get the currently
- * registered cellIdentity, wrap it into a CellInfo;
- * 2. set the signal strength level as strong;
- * 3. use {@link TelephonyManager#getNetworkOperatorName()} to get the title of the
- * previously connected network operator, since the CellIdentity got from step 1 only has
- * PLMN.
- * - If the device has no data, we will remove the connected network operators list from the
- * screen.
- */
- private void forceConfigConnectedNetworkOperatorsPreferenceCategory() {
- if (DBG) logd("Force config ConnectedNetworkOperatorsPreferenceCategory");
- if (mTelephonyManager.getDataState() == mTelephonyManager.DATA_CONNECTED) {
- // Try to get the network registration states
- ServiceState ss = mTelephonyManager.getServiceState();
- List<NetworkRegistrationInfo> networkList =
- ss.getNetworkRegistrationInfoListForTransportType(
- AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
- if (networkList == null || networkList.size() == 0) {
- loge("getNetworkRegistrationInfoList return null");
- // Remove the connected network operators category
- removeConnectedNetworkOperatorPreference();
- return;
- }
- CellIdentity cellIdentity = networkList.get(0).getCellIdentity();
- CellInfo cellInfo = CellInfoUtil.wrapCellInfoWithCellIdentity(cellIdentity);
- if (cellInfo != null) {
- if (DBG) logd("Currently registered cell: " + cellInfo.toString());
- NetworkOperatorPreference pref = new NetworkOperatorPreference(
- cellInfo, getContext(), mForbiddenPlmns, mShow4GForLTE);
- pref.setTitle(mTelephonyManager.getNetworkOperatorName());
- pref.setSummary(R.string.network_connected);
- // Update the signal strength icon, since the default signalStrength value would be
- // zero (it would be quite confusing why the connected network has no signal)
- pref.setIcon(NetworkOperatorPreference.NUMBER_OF_LEVELS - 1);
-
- mConnectedNetworkOperatorsPreference.addPreference(pref);
- } else {
- // Remove the connected network operators category
- removeConnectedNetworkOperatorPreference();
- }
- } else {
- if (DBG) logd("No currently registered cell");
- // Remove the connected network operators category
- removeConnectedNetworkOperatorPreference();
- }
- }
-
- /**
- * Configure the ConnectedNetworkOperatorsPreferenceCategory. The category only need to be
- * configured if the category is currently empty or the operator network title of the previous
- * connected network is different from the new one.
- */
- private void configConnectedNetworkOperatorsPreferenceCategory() {
- if (DBG) logd("config ConnectedNetworkOperatorsPreferenceCategory");
- // Remove the category if the CellInfo list is empty or does not have registered cell.
- if (mCellInfoList.size() == 0) {
- if (DBG) logd("empty cellinfo list");
- removeConnectedNetworkOperatorPreference();
- }
- CellInfo connectedNetworkOperator = null;
- for (CellInfo cellInfo: mCellInfoList) {
- if (cellInfo.isRegistered()) {
- connectedNetworkOperator = cellInfo;
- break;
- }
- }
- if (connectedNetworkOperator == null) {
- if (DBG) logd("no registered network");
- removeConnectedNetworkOperatorPreference();
- return;
- }
-
- // config the category if it is empty.
- if (mConnectedNetworkOperatorsPreference.getPreferenceCount() == 0) {
- if (DBG) logd("ConnectedNetworkSelectList is empty, add one");
- addConnectedNetworkOperatorPreference(connectedNetworkOperator);
- return;
- }
- NetworkOperatorPreference previousConnectedNetworkOperator = (NetworkOperatorPreference)
- (mConnectedNetworkOperatorsPreference.getPreference(0));
-
- // config the category if the network title of the previous connected network is different
- // from the new one.
- String cTitle = CellInfoUtil.getNetworkTitle(connectedNetworkOperator);
- String pTitle = CellInfoUtil.getNetworkTitle(
- previousConnectedNetworkOperator.getCellInfo());
- if (!cTitle.equals(pTitle)) {
- if (DBG) logd("reconfig the category: connected network changed");
- addConnectedNetworkOperatorPreference(connectedNetworkOperator);
- return;
- }
- if (DBG) logd("same network operator is connected, only refresh the connected network");
- // Otherwise same network operator is connected, only refresh the connected network
- // operator preference (first and the only one in this category).
- ((NetworkOperatorPreference) mConnectedNetworkOperatorsPreference.getPreference(0))
- .refresh();
- return;
- }
-
- /**
- * Creates a Preference for the given {@link CellInfo} and adds it to the
- * {@link #mConnectedNetworkOperatorsPreference}.
- */
- private void addConnectedNetworkOperatorPreference(CellInfo cellInfo) {
- if (DBG) logd("addConnectedNetworkOperatorPreference");
- // Remove the current ConnectedNetworkOperatorsPreference
- removeConnectedNetworkOperatorPreference();
- final NetworkOperatorPreference pref = new NetworkOperatorPreference(
- cellInfo, getContext(), mForbiddenPlmns, mShow4GForLTE);
- pref.setSummary(R.string.network_connected);
- mConnectedNetworkOperatorsPreference.addPreference(pref);
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- preferenceScreen.addPreference(mConnectedNetworkOperatorsPreference);
- }
-
- /** Removes all preferences and hide the {@link #mConnectedNetworkOperatorsPreference}. */
- private void removeConnectedNetworkOperatorPreference() {
- mConnectedNetworkOperatorsPreference.removeAll();
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- preferenceScreen.removePreference(mConnectedNetworkOperatorsPreference);
- }
-
- protected void setProgressBarVisible(boolean visible) {
- if (mProgressHeader != null) {
- mProgressHeader.setVisibility(visible ? View.VISIBLE : View.GONE);
- }
- }
-
- private void addMessagePreference(int messageId) {
- if (DBG) logd("remove callback");
- getView().removeCallbacks(mUpdateNetworkOperatorsRunnable);
- setProgressBarVisible(false);
- if (DBG) logd("addMessagePreference");
- mStatusMessagePreference.setTitle(messageId);
- removeConnectedNetworkOperatorPreference();
- mNetworkOperatorsPreferences.removeAll();
- mNetworkOperatorsPreferences.addPreference(mStatusMessagePreference);
- }
-
- /**
- * The Scan results may contains several cell infos with different radio technologies and signal
- * strength for one network operator. Aggregate the CellInfoList by retaining only the cell info
- * with the strongest signal strength.
- */
- private List<CellInfo> aggregateCellInfoList(List<CellInfo> cellInfoList) {
- if (DBG) logd("before aggregate: " + cellInfoList.toString());
- Map<String, CellInfo> map = new HashMap<>();
- for (CellInfo cellInfo: cellInfoList) {
- String plmn = CellInfoUtil.getOperatorInfoFromCellInfo(cellInfo).getOperatorNumeric();
- if (cellInfo.isRegistered() || !map.containsKey(plmn)) {
- map.put(plmn, cellInfo);
- } else {
- if (map.get(plmn).isRegistered()
- || map.get(plmn).getCellSignalStrength().getLevel()
- > cellInfo.getCellSignalStrength().getLevel()) {
- // Skip if the stored cellInfo is registered or has higher signal strength level
- continue;
- }
- // Otherwise replace it with the new CellInfo
- map.put(plmn, cellInfo);
- }
- }
- return new ArrayList<>(map.values());
- }
-
- private void stopNetworkQuery() {
- if (mNetworkScanHelper != null) {
- mNetworkScanHelper.stopNetworkQuery();
- }
- }
-
- @Override
- public void onDestroy() {
- mNetworkScanExecutor.shutdown();
- super.onDestroy();
- }
-
- private void logd(String msg) {
- Log.d(TAG, msg);
- }
-
- private void loge(String msg) {
- Log.e(TAG, msg);
- }
-}
diff --git a/src/com/android/phone/NetworkSelectSettingActivity.java b/src/com/android/phone/NetworkSelectSettingActivity.java
deleted file mode 100644
index 5b29b281..0000000
--- a/src/com/android/phone/NetworkSelectSettingActivity.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2018 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 android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.MenuItem;
-
-
-/**
- * Activity associated with NetworkSelectSetting fragment
- */
-public class NetworkSelectSettingActivity extends Activity {
- private static final String TAG = "NetworkSelectSettingActivity";
- public static final String KEY_SUBSCRIPTION_ID = "subscription_id";
-
- /**
- * Returns the Android Intent that led to this Activity being created.
- */
- public static Intent getIntent(Context context, int subId) {
- Intent intent = new Intent(context, NetworkSelectSettingActivity.class);
- intent.putExtra(KEY_SUBSCRIPTION_ID, subId);
- return intent;
- }
-
- @Override
- public void onCreate(Bundle savedState) {
- Log.d(TAG, "onCreate()");
- super.onCreate(savedState);
- int subId = getIntent().getExtras().getInt(KEY_SUBSCRIPTION_ID);
- setContentView(R.layout.choose_network);
-
- FragmentManager fragmentManager = getFragmentManager();
- Fragment fragment = fragmentManager.findFragmentById(R.id.choose_network_content);
- if (fragment == null) {
- fragmentManager.beginTransaction()
- .add(R.id.choose_network_content,
- NetworkSelectSetting.newInstance(subId), TAG)
- .commit();
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- final int itemId = item.getItemId();
- if (itemId == android.R.id.home) {
- onBackPressed();
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-}
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 1012a9e..bb1e293 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -27,6 +27,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.content.res.Resources;
@@ -112,7 +113,6 @@
private PhoneGlobals mApp;
private Context mContext;
- private NotificationManager mNotificationManager;
private StatusBarManager mStatusBarManager;
private UserManager mUserManager;
private Toast mToast;
@@ -160,8 +160,6 @@
private NotificationMgr(PhoneGlobals app) {
mApp = app;
mContext = app;
- mNotificationManager =
- (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE);
mStatusBarManager =
(StatusBarManager) app.getSystemService(Context.STATUS_BAR_SERVICE);
mUserManager = (UserManager) app.getSystemService(Context.USER_SERVICE);
@@ -373,7 +371,7 @@
.setColor(res.getColor(R.color.dialer_theme_color))
.setOngoing(carrierConfig.getBoolean(
CarrierConfigManager.KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL))
- .setChannel(NotificationChannelController.CHANNEL_ID_VOICE_MAIL)
+ .setChannelId(NotificationChannelController.CHANNEL_ID_VOICE_MAIL)
.setOnlyAlertOnce(isRefresh);
final Notification notification = builder.build();
@@ -386,7 +384,7 @@
&& !user.isManagedProfile()) {
if (!maybeSendVoicemailNotificationUsingDefaultDialer(phone, vmCount, vmNumber,
pendingIntent, isSettingsIntent, userHandle, isRefresh)) {
- mNotificationManager.notifyAsUser(
+ notifyAsUser(
Integer.toString(subId) /* tag */,
VOICEMAIL_NOTIFICATION,
notification,
@@ -404,7 +402,7 @@
&& !user.isManagedProfile()) {
if (!maybeSendVoicemailNotificationUsingDefaultDialer(phone, 0, null, null,
false, userHandle, isRefresh)) {
- mNotificationManager.cancelAsUser(
+ cancelAsUser(
Integer.toString(subId) /* tag */,
VOICEMAIL_NOTIFICATION,
userHandle);
@@ -538,7 +536,7 @@
.setContentText(mContext.getString(R.string.sum_cfu_enabled_indicator))
.setShowWhen(false)
.setOngoing(true)
- .setChannel(NotificationChannelController.CHANNEL_ID_CALL_FORWARD)
+ .setChannelId(NotificationChannelController.CHANNEL_ID_CALL_FORWARD)
.setOnlyAlertOnce(isRefresh);
Intent intent = new Intent(Intent.ACTION_MAIN);
@@ -548,7 +546,7 @@
intent, mSubscriptionManager.getActiveSubscriptionInfo(subId));
builder.setContentIntent(PendingIntent.getActivity(mContext, subId /* requestCode */,
intent, 0));
- mNotificationManager.notifyAsUser(
+ notifyAsUser(
Integer.toString(subId) /* tag */,
CALL_FORWARD_NOTIFICATION,
builder.build(),
@@ -560,7 +558,7 @@
continue;
}
UserHandle userHandle = user.getUserHandle();
- mNotificationManager.cancelAsUser(
+ cancelAsUser(
Integer.toString(subId) /* tag */,
CALL_FORWARD_NOTIFICATION,
userHandle);
@@ -604,12 +602,39 @@
.setContentTitle(contentTitle)
.setColor(mContext.getResources().getColor(R.color.dialer_theme_color))
.setContentText(contentText)
- .setChannel(NotificationChannelController.CHANNEL_ID_MOBILE_DATA_STATUS)
+ .setChannelId(NotificationChannelController.CHANNEL_ID_MOBILE_DATA_STATUS)
.setContentIntent(contentIntent);
final Notification notif =
new Notification.BigTextStyle(builder).bigText(contentText).build();
- mNotificationManager.notifyAsUser(
- null /* tag */, DATA_ROAMING_NOTIFICATION, notif, UserHandle.ALL);
+ notifyAsUser(null /* tag */, DATA_ROAMING_NOTIFICATION, notif, UserHandle.ALL);
+ }
+
+ private void notifyAsUser(String tag, int id, Notification notification, UserHandle user) {
+ try {
+ Context contextForUser =
+ mContext.createPackageContextAsUser(mContext.getPackageName(), 0, user);
+ NotificationManager notificationManager =
+ (NotificationManager) contextForUser.getSystemService(
+ Context.NOTIFICATION_SERVICE);
+ notificationManager.notify(tag, id, notification);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(LOG_TAG, "unable to notify for user " + user);
+ e.printStackTrace();
+ }
+ }
+
+ private void cancelAsUser(String tag, int id, UserHandle user) {
+ try {
+ Context contextForUser =
+ mContext.createPackageContextAsUser(mContext.getPackageName(), 0, user);
+ NotificationManager notificationManager =
+ (NotificationManager) contextForUser.getSystemService(
+ Context.NOTIFICATION_SERVICE);
+ notificationManager.cancel(tag, id);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(LOG_TAG, "unable to cancel for user " + user);
+ e.printStackTrace();
+ }
}
/**
@@ -617,7 +642,7 @@
*/
/* package */ void hideDataRoamingNotification() {
if (DBG) log("hideDataRoamingNotification()...");
- mNotificationManager.cancel(DATA_ROAMING_NOTIFICATION);
+ cancelAsUser(null, DATA_ROAMING_NOTIFICATION, UserHandle.ALL);
}
/**
@@ -659,7 +684,7 @@
final Notification notification = new Notification.BigTextStyle(builder).bigText(
contentText).build();
- mNotificationManager.notifyAsUser(Integer.toString(subId),
+ notifyAsUser(Integer.toString(subId),
LIMITED_SIM_FUNCTION_NOTIFICATION,
notification, UserHandle.ALL);
mLimitedSimFunctionNotify.add(subId);
@@ -673,12 +698,12 @@
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
// dismiss all notifications
for (int id : mLimitedSimFunctionNotify) {
- mNotificationManager.cancelAsUser(Integer.toString(id),
+ cancelAsUser(Integer.toString(id),
LIMITED_SIM_FUNCTION_NOTIFICATION, UserHandle.ALL);
}
mLimitedSimFunctionNotify.clear();
} else if (mLimitedSimFunctionNotify.contains(subId)) {
- mNotificationManager.cancelAsUser(Integer.toString(subId),
+ cancelAsUser(Integer.toString(subId),
LIMITED_SIM_FUNCTION_NOTIFICATION, UserHandle.ALL);
mLimitedSimFunctionNotify.remove(subId);
}
@@ -694,7 +719,7 @@
// from the old SIM if both old & new SIM configured to display the notification.
mLimitedSimFunctionNotify.removeIf(id -> {
if (!mSubscriptionManager.isActiveSubId(id)) {
- mNotificationManager.cancelAsUser(Integer.toString(id),
+ cancelAsUser(Integer.toString(id),
LIMITED_SIM_FUNCTION_NOTIFICATION, UserHandle.ALL);
return true;
}
@@ -720,7 +745,7 @@
mContext.getString(R.string.notification_network_selection_text, operator))
.setShowWhen(false)
.setOngoing(true)
- .setChannel(NotificationChannelController.CHANNEL_ID_ALERT);
+ .setChannelId(NotificationChannelController.CHANNEL_ID_ALERT);
// create the target network operators settings intent
Intent intent = new Intent(Intent.ACTION_MAIN);
@@ -730,9 +755,9 @@
intent.setComponent(new ComponentName(
mContext.getString(R.string.mobile_network_settings_package),
mContext.getString(R.string.mobile_network_settings_class)));
- intent.putExtra(GsmUmtsOptions.EXTRA_SUB_ID, subId);
+ intent.putExtra(Settings.EXTRA_SUB_ID, subId);
builder.setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0));
- mNotificationManager.notifyAsUser(
+ notifyAsUser(
Integer.toString(subId) /* tag */,
SELECTED_OPERATOR_FAIL_NOTIFICATION,
builder.build(),
@@ -745,7 +770,7 @@
*/
private void cancelNetworkSelection(int subId) {
if (DBG) log("cancelNetworkSelection()...");
- mNotificationManager.cancelAsUser(
+ cancelAsUser(
Integer.toString(subId) /* tag */, SELECTED_OPERATOR_FAIL_NOTIFICATION,
UserHandle.ALL);
}
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index 9953a43..c3c3eb8 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -394,8 +394,6 @@
mCarrierVvmPackageInstalledReceiver.register(this);
//set the default values for the preferences in the phone.
- PreferenceManager.setDefaultValues(this, R.xml.network_setting_fragment, false);
-
PreferenceManager.setDefaultValues(this, R.xml.call_feature_setting, false);
}
@@ -412,9 +410,9 @@
android.provider.Settings.System.HEARING_AID,
0);
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- audioManager.setParameter(SettingsConstants.HAC_KEY,
- hac == SettingsConstants.HAC_ENABLED
- ? SettingsConstants.HAC_VAL_ON : SettingsConstants.HAC_VAL_OFF);
+ audioManager.setParameters(
+ SettingsConstants.HAC_KEY + "=" + (hac == SettingsConstants.HAC_ENABLED
+ ? SettingsConstants.HAC_VAL_ON : SettingsConstants.HAC_VAL_OFF));
}
}
@@ -551,6 +549,9 @@
maybeTurnCellOn(context, isAirplaneNewlyOn);
break;
}
+ for (Phone phone : PhoneFactory.getPhones()) {
+ phone.getServiceStateTracker().onAirplaneModeChanged(isAirplaneNewlyOn);
+ }
}
/*
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index e1a9592..b058668 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -49,6 +49,7 @@
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
+import android.os.ServiceSpecificException;
import android.os.ShellCallback;
import android.os.SystemProperties;
import android.os.UserHandle;
@@ -94,6 +95,7 @@
import android.telephony.data.ApnSetting.ApnType;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.gsm.GsmCellLocation;
+import android.telephony.ims.ImsException;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.aidl.IImsCapabilityCallback;
import android.telephony.ims.aidl.IImsConfig;
@@ -111,7 +113,6 @@
import android.util.Pair;
import android.util.Slog;
-import com.android.ims.ImsException;
import com.android.ims.ImsManager;
import com.android.ims.internal.IImsServiceFeatureCallback;
import com.android.internal.telephony.CallManager;
@@ -158,6 +159,7 @@
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.uicc.UiccProfile;
import com.android.internal.telephony.uicc.UiccSlot;
+import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
import com.android.internal.telephony.util.VoicemailNotificationSettingsUtil;
import com.android.internal.util.HexDump;
import com.android.phone.settings.PickSmsSubscriptionActivity;
@@ -1411,7 +1413,7 @@
// from the context of the phone app.
enforceCallPermission();
- if (mAppOps.noteOp(AppOpsManager.OP_CALL_PHONE, Binder.getCallingUid(), callingPackage)
+ if (mAppOps.noteOp(AppOpsManager.OPSTR_CALL_PHONE, Binder.getCallingUid(), callingPackage)
!= AppOpsManager.MODE_ALLOWED) {
return;
}
@@ -2030,14 +2032,18 @@
/**
* Returns the target SDK version number for a given package name.
*
+ * This call MUST be invoked before clearing the calling UID.
+ *
* @return target SDK if the package is found or INT_MAX.
*/
private int getTargetSdk(String packageName) {
try {
- final ApplicationInfo ai = mApp.getPackageManager().getApplicationInfo(
- packageName, 0);
+ final ApplicationInfo ai = mApp.getPackageManager().getApplicationInfoAsUser(
+ packageName, 0, UserHandle.getUserHandleForUid(Binder.getCallingUid()));
if (ai != null) return ai.targetSdkVersion;
} catch (PackageManager.NameNotFoundException unexpected) {
+ loge("Failed to get package info for pkg="
+ + packageName + ", uid=" + Binder.getCallingUid());
}
return Integer.MAX_VALUE;
}
@@ -2051,7 +2057,7 @@
"getNeighboringCellInfo() is unavailable to callers targeting Q+ SDK levels.");
}
- if (mAppOps.noteOp(AppOpsManager.OP_NEIGHBORING_CELLS, Binder.getCallingUid(),
+ if (mAppOps.noteOp(AppOpsManager.OPSTR_NEIGHBORING_CELLS, Binder.getCallingUid(),
callingPackage) != AppOpsManager.MODE_ALLOWED) {
return null;
}
@@ -2855,6 +2861,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp, getSlotIndexOrException(subId))
.addRegistrationCallbackForSubscription(c, subId);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -2871,7 +2879,7 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone.
ImsManager.getInstance(mApp, getSlotIndexOrException(subId))
.removeRegistrationCallbackForSubscription(c, subId);
- } catch (IllegalArgumentException e) {
+ } catch (ImsException e) {
Log.i(LOG_TAG, "unregisterImsRegistrationCallback: " + subId
+ "is inactive, ignoring unregister.");
// If the subscription is no longer active, just return, since the callback
@@ -2889,6 +2897,8 @@
try {
ImsManager.getInstance(mApp, getSlotIndexOrException(subId))
.addCapabilitiesCallbackForSubscription(c, subId);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -2906,7 +2916,7 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone.
ImsManager.getInstance(mApp, getSlotIndexOrException(subId))
.removeCapabilitiesCallbackForSubscription(c, subId);
- } catch (IllegalArgumentException e) {
+ } catch (ImsException e) {
Log.i(LOG_TAG, "unregisterMmTelCapabilityCallback: " + subId
+ "is inactive, ignoring unregister.");
// If the subscription is no longer active, just return, since the callback
@@ -2923,10 +2933,10 @@
try {
return ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).queryMmTelCapability(capability, regTech);
- } catch (ImsException e) {
+ } catch (com.android.ims.ImsException e) {
Log.w(LOG_TAG, "IMS isCapable - service unavailable: " + e.getMessage());
return false;
- } catch (IllegalArgumentException e) {
+ } catch (ImsException e) {
Log.i(LOG_TAG, "isCapable: " + subId + " is inactive, returning false.");
return false;
} finally {
@@ -2955,6 +2965,8 @@
try {
return ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).isEnhanced4gLteModeSettingEnabledByUser();
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -2969,6 +2981,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).setEnhanced4gLteModeSetting(isEnabled);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -2980,8 +2994,9 @@
final long identity = Binder.clearCallingIdentity();
try {
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
- return ImsManager.getInstance(mApp,
- getSlotIndexOrException(subId)).isVtEnabledByUser();
+ return ImsManager.getInstance(mApp, getSlotIndexOrException(subId)).isVtEnabledByUser();
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -2995,6 +3010,8 @@
try {
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp, getSlotIndexOrException(subId)).setVtSetting(isEnabled);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3008,6 +3025,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
return ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).isWfcEnabledByUser();
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3021,6 +3040,8 @@
try {
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp, getSlotIndexOrException(subId)).setWfcSetting(isEnabled);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3034,6 +3055,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
return ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).isWfcRoamingEnabledByUser();
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3048,6 +3071,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).setWfcRoamingSetting(isEnabled);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3062,6 +3087,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).setWfcNonPersistent(isCapable, mode);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3075,6 +3102,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
return ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).getWfcMode(false /*isRoaming*/);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3089,6 +3118,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).setWfcMode(mode, false /*isRoaming*/);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3102,6 +3133,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
return ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).getWfcMode(true /*isRoaming*/);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3116,6 +3149,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).setWfcMode(mode, true /*isRoaming*/);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3128,8 +3163,9 @@
final long identity = Binder.clearCallingIdentity();
try {
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
- ImsManager.getInstance(mApp,
- getSlotIndexOrException(subId)).setRttEnabled(isEnabled);
+ ImsManager.getInstance(mApp, getSlotIndexOrException(subId)).setRttEnabled(isEnabled);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3143,6 +3179,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
return ImsManager.getInstance(mApp,
getSlotIndexOrException(subId)).isTtyOnVoLteCapable();
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3156,6 +3194,8 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp, getSlotIndexOrException(subId))
.addProvisioningCallbackForSubscription(callback, subId);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -3172,7 +3212,7 @@
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
ImsManager.getInstance(mApp, getSlotIndexOrException(subId))
.removeProvisioningCallbackForSubscription(callback, subId);
- } catch (IllegalArgumentException e) {
+ } catch (ImsException e) {
Log.i(LOG_TAG, "unregisterImsProvisioningChangedCallback: " + subId
+ "is inactive, ignoring unregister.");
// If the subscription is no longer active, just return, since the callback will already
@@ -3231,7 +3271,7 @@
cacheMmTelCapabilityProvisioning(subId, capability, tech, isProvisioned);
try {
ims.changeMmTelCapability(capability, tech, isProvisioned);
- } catch (ImsException e) {
+ } catch (com.android.ims.ImsException e) {
loge("setImsProvisioningStatusForCapability: couldn't change UT capability"
+ ", Exception" + e.getMessage());
}
@@ -3375,10 +3415,7 @@
CarrierConfigManager configManager = new CarrierConfigManager(context);
PersistableBundle c = configManager.getConfigForSubId(subId);
boolean requireUtProvisioning = c.getBoolean(
- // By default, this config is true (even if there is no SIM). We also check to make
- // sure the subscription needs provisioning here, so we do not need to check for
- // the no-SIM case, where we would normally shortcut this to false.
- CarrierConfigManager.KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL, true)
+ CarrierConfigManager.KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL, false)
&& c.getBoolean(CarrierConfigManager.KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL,
false);
boolean requireVoiceVtProvisioning = c.getBoolean(
@@ -3422,7 +3459,7 @@
return ImsConfigImplBase.CONFIG_RESULT_UNKNOWN;
}
return ImsManager.getInstance(mApp, slotId).getConfigInterface().getConfigInt(key);
- } catch (ImsException e) {
+ } catch (com.android.ims.ImsException e) {
Log.w(LOG_TAG, "getImsProvisioningInt: ImsService is not available for subscription '"
+ subId + "' for key:" + key);
return ImsConfigImplBase.CONFIG_RESULT_UNKNOWN;
@@ -3447,7 +3484,7 @@
return ProvisioningManager.STRING_QUERY_RESULT_ERROR_GENERIC;
}
return ImsManager.getInstance(mApp, slotId).getConfigInterface().getConfigString(key);
- } catch (ImsException e) {
+ } catch (com.android.ims.ImsException e) {
Log.w(LOG_TAG, "getImsProvisioningString: ImsService is not available for sub '"
+ subId + "' for key:" + key);
return ProvisioningManager.STRING_QUERY_RESULT_ERROR_NOT_READY;
@@ -3473,7 +3510,7 @@
return ImsConfigImplBase.CONFIG_RESULT_FAILED;
}
return ImsManager.getInstance(mApp, slotId).getConfigInterface().setConfig(key, value);
- } catch (ImsException e) {
+ } catch (com.android.ims.ImsException e) {
Log.w(LOG_TAG, "setImsProvisioningInt: ImsService unavailable for sub '" + subId
+ "' for key:" + key);
return ImsConfigImplBase.CONFIG_RESULT_FAILED;
@@ -3499,7 +3536,7 @@
return ImsConfigImplBase.CONFIG_RESULT_FAILED;
}
return ImsManager.getInstance(mApp, slotId).getConfigInterface().setConfig(key, value);
- } catch (ImsException e) {
+ } catch (com.android.ims.ImsException e) {
Log.w(LOG_TAG, "setImsProvisioningString: ImsService unavailable for sub '" + subId
+ "' for key:" + key);
return ImsConfigImplBase.CONFIG_RESULT_FAILED;
@@ -3508,10 +3545,11 @@
}
}
- private int getSlotIndexOrException(int subId) throws IllegalArgumentException {
+ private int getSlotIndexOrException(int subId) throws ImsException {
int slotId = SubscriptionManager.getSlotIndex(subId);
if (!SubscriptionManager.isValidSlotIndex(slotId)) {
- throw new IllegalArgumentException("Invalid Subscription Id, subId=" + subId);
+ throw new ImsException("Invalid Subscription Id, subId=" + subId,
+ ImsException.CODE_ERROR_INVALID_SUBSCRIPTION);
}
return slotId;
}
@@ -3529,7 +3567,10 @@
*/
@Override
public int getNetworkTypeForSubscriber(int subId, String callingPackage) {
- if (getTargetSdk(callingPackage) >= android.os.Build.VERSION_CODES.Q
+ final int targetSdk = getTargetSdk(callingPackage);
+ if (targetSdk > android.os.Build.VERSION_CODES.Q) {
+ return getDataNetworkTypeForSubscriber(subId, callingPackage);
+ } else if (targetSdk == android.os.Build.VERSION_CODES.Q
&& !TelephonyPermissions.checkCallingOrSelfReadPhoneStateNoThrow(
mApp, subId, callingPackage, "getNetworkTypeForSubscriber")) {
return TelephonyManager.NETWORK_TYPE_UNKNOWN;
@@ -6462,6 +6503,12 @@
cardId = slot.getIccId();
}
+ if (cardId != null) {
+ // if cardId is an ICCID, strip off trailing Fs before exposing to user
+ // if cardId is an EID, it's all digits so this is fine
+ cardId = IccUtils.stripTrailingFs(cardId);
+ }
+
int cardState = 0;
switch (slot.getCardState()) {
case CARDSTATE_ABSENT:
@@ -7007,6 +7054,33 @@
}
}
+ @Override
+ public boolean isApplicationOnUicc(int subId, int appType) {
+ enforceReadPrivilegedPermission("isApplicationOnUicc");
+ Phone phone = getPhone(subId);
+ if (phone == null) {
+ return false;
+ }
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ UiccCard uiccCard = phone.getUiccCard();
+ if (uiccCard == null) {
+ return false;
+ }
+ UiccProfile uiccProfile = uiccCard.getUiccProfile();
+ if (uiccProfile == null) {
+ return false;
+ }
+ if (TelephonyManager.APPTYPE_SIM <= appType
+ && appType <= TelephonyManager.APPTYPE_ISIM) {
+ return uiccProfile.isApplicationOnIcc(AppType.values()[appType]);
+ }
+ return false;
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
/**
* Get whether making changes to modem configurations will trigger reboot.
* Return value defaults to true.
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index 20c8276..e46cfc0 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -448,7 +448,7 @@
app.setPukEntryProgressDialog(pd);
} else if ((app.getPUKEntryActivity() != null) && (state == MmiCode.State.FAILED)) {
- createUssdDialog(app, context, text,
+ createUssdDialog(app, context, text, phone,
WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
// In case of failure to unlock, we'll need to reset the
// PUK unlock activity, so that the user may try again.
@@ -463,7 +463,7 @@
// A USSD in a pending state means that it is still
// interacting with the user.
if (state != MmiCode.State.PENDING) {
- createUssdDialog(app, context, text,
+ createUssdDialog(app, context, text, phone,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
} else {
log("displayMMIComplete: USSD code has requested user input. Constructing input "
@@ -584,10 +584,11 @@
* @param app This is {@link PhoneGlobals}
* @param context Context to get strings.
* @param text This is message's result.
+ * @param phone This is phone to create sssd dialog.
* @param windowType The new window type. {@link WindowManager.LayoutParams}.
*/
public static void createUssdDialog(PhoneGlobals app, Context context, CharSequence text,
- int windowType) {
+ Phone phone, int windowType) {
log("displayMMIComplete: MMI code has finished running.");
log("displayMMIComplete: Extended NW displayMMIInitiate (" + text + ")");
@@ -621,6 +622,13 @@
.insert(0, app.getResources().getString(R.string.ussd_dialog_sep))
.insert(0, "\n");
}
+ if (phone != null && phone.getCarrierName() != null) {
+ sUssdDialog.setTitle(app.getResources().getString(R.string.carrier_mmi_msg_title,
+ phone.getCarrierName()));
+ } else {
+ sUssdDialog
+ .setTitle(app.getResources().getString(R.string.default_carrier_mmi_msg_title));
+ }
sUssdMsg.insert(0, text);
sUssdDialog.setMessage(sUssdMsg.toString());
sUssdDialog.show();
diff --git a/src/com/android/phone/RestrictedPreference.java b/src/com/android/phone/RestrictedPreference.java
deleted file mode 100644
index b8b6fe7..0000000
--- a/src/com/android/phone/RestrictedPreference.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2018 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 static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
-import android.content.Context;
-import android.preference.Preference;
-import android.preference.PreferenceScreen;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.TextView;
-
-import com.android.settingslib.RestrictedLockUtils;
-
-/**
- * Preference class that supports being disabled by a device admin.
- *
- * <p>This class is a mimic of ../../../frameworks/base/packages/SettingsLib/src/com/android
- * /settingslib/RestrictedPreference.java,
- * but support framework {@link Preference}.
- */
-public class RestrictedPreference extends Preference {
- private final Context mContext;
-
- private boolean mDisabledByAdmin;
- private EnforcedAdmin mEnforcedAdmin;
-
- public RestrictedPreference(Context context, AttributeSet attrs,
- int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- mContext = context;
-
- setLayoutResource(com.android.settingslib.R.layout.preference_two_target);
- setWidgetLayoutResource(R.layout.restricted_icon);
- }
-
- public RestrictedPreference(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public RestrictedPreference(Context context, AttributeSet attrs) {
- this(context, attrs, android.R.attr.preferenceStyle);
- }
-
- public RestrictedPreference(Context context) {
- this(context, null);
- }
-
- @Override
- public void performClick(PreferenceScreen preferenceScreen) {
- if (mDisabledByAdmin) {
- RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, mEnforcedAdmin);
- } else {
- super.performClick(preferenceScreen);
- }
- }
-
- @Override
- protected void onBindView(View view) {
- super.onBindView(view);
-
- final View divider = view.findViewById(com.android.settingslib.R.id.two_target_divider);
- final View widgetFrame = view.findViewById(android.R.id.widget_frame);
- final View restrictedIcon = view.findViewById(R.id.restricted_icon);
- final TextView summaryView = view.findViewById(android.R.id.summary);
- if (divider != null) {
- divider.setVisibility(mDisabledByAdmin ? View.VISIBLE : View.GONE);
- }
- if (widgetFrame != null) {
- widgetFrame.setVisibility(mDisabledByAdmin ? View.VISIBLE : View.GONE);
- }
- if (restrictedIcon != null) {
- restrictedIcon.setVisibility(mDisabledByAdmin ? View.VISIBLE : View.GONE);
- }
- if (summaryView != null && mDisabledByAdmin) {
- summaryView.setText(com.android.settingslib.R.string.disabled_by_admin_summary_text);
- summaryView.setVisibility(View.VISIBLE);
- }
-
- if (mDisabledByAdmin) {
- view.setEnabled(true);
- }
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- if (enabled && mDisabledByAdmin) {
- setDisabledByAdmin(null);
- return;
- }
- super.setEnabled(enabled);
- }
-
- /**
- * Disable this preference based on the enforce admin.
- *
- * @param admin Details of the admin who enforced the restriction. If it is {@code null}, then
- * this preference will be enabled. Otherwise, it will be disabled.
- */
- public void setDisabledByAdmin(EnforcedAdmin admin) {
- final boolean disabled = admin != null;
- mEnforcedAdmin = admin;
- boolean changed = false;
- if (mDisabledByAdmin != disabled) {
- mDisabledByAdmin = disabled;
- changed = true;
- }
- setEnabled(!disabled);
- if (changed) {
- notifyChanged();
- }
- }
-}
diff --git a/src/com/android/phone/RestrictedSwitchPreference.java b/src/com/android/phone/RestrictedSwitchPreference.java
deleted file mode 100644
index ba6b65e..0000000
--- a/src/com/android/phone/RestrictedSwitchPreference.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.content.Context;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.preference.PreferenceScreen;
-import android.preference.SwitchPreference;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.TextView;
-
-import com.android.settingslib.RestrictedLockUtils;
-import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
-public class RestrictedSwitchPreference extends SwitchPreference {
- private final Context mContext;
- private boolean mDisabledByAdmin;
- private final int mSwitchWidgetResId;
-
- public RestrictedSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- mSwitchWidgetResId = getWidgetLayoutResource();
- mContext = context;
- }
-
- public RestrictedSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public RestrictedSwitchPreference(Context context, AttributeSet attrs) {
- this(context, attrs, com.android.internal.R.attr.switchPreferenceStyle);
- }
-
- public RestrictedSwitchPreference(Context context) {
- this(context, null);
- }
-
- @Override
- public void onBindView(View view) {
- super.onBindView(view);
- if (mDisabledByAdmin) {
- view.setEnabled(true);
- }
- final TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
- if (summaryView != null && mDisabledByAdmin) {
- summaryView.setText(
- isChecked() ? R.string.enabled_by_admin : R.string.disabled_by_admin);
- summaryView.setVisibility(View.VISIBLE);
- }
- }
-
- public void checkRestrictionAndSetDisabled(String userRestriction) {
- UserManager um = UserManager.get(mContext);
- UserHandle user = UserHandle.of(um.getUserHandle());
- boolean disabledByAdmin = um.hasUserRestriction(userRestriction, user)
- && !um.hasBaseUserRestriction(userRestriction, user);
- setDisabledByAdmin(disabledByAdmin);
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- if (enabled && mDisabledByAdmin) {
- setDisabledByAdmin(false);
- } else {
- super.setEnabled(enabled);
- }
- }
-
- public void setDisabledByAdmin(boolean disabled) {
- if (mDisabledByAdmin != disabled) {
- mDisabledByAdmin = disabled;
- setWidgetLayoutResource(disabled ? R.layout.restricted_icon : mSwitchWidgetResId);
- setEnabled(!disabled);
- }
- }
-
- @Override
- public void performClick(PreferenceScreen preferenceScreen) {
- if (mDisabledByAdmin) {
- RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext,
- new EnforcedAdmin());
- } else {
- super.performClick(preferenceScreen);
- }
- }
-}
diff --git a/src/com/android/phone/RoamingDialogFragment.java b/src/com/android/phone/RoamingDialogFragment.java
deleted file mode 100644
index 384a120..0000000
--- a/src/com/android/phone/RoamingDialogFragment.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.os.Bundle;
-import android.os.PersistableBundle;
-import android.telephony.CarrierConfigManager;
-
-/**
- * A dialog fragment that asks the user if they are sure they want to turn on data roaming
- * to avoid accidental charges.
- */
-public class RoamingDialogFragment extends DialogFragment implements OnClickListener {
-
- public static final String SUB_ID_KEY = "sub_id_key";
-
- private CarrierConfigManager mCarrierConfigManager;
- private int mSubId;
-
- /**
- * The interface we expect a host activity to implement.
- */
- public interface RoamingDialogListener {
- void onPositiveButtonClick(DialogFragment dialog);
- }
-
- // the host activity which implements the listening interface
- private RoamingDialogListener mListener;
-
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
- Bundle args = getArguments();
- mSubId = args.getInt(SUB_ID_KEY);
- mCarrierConfigManager = new CarrierConfigManager(context);
-
- // Verify host activity implemented callback interface
- FragmentManager fragmentManager = getFragmentManager();
- Fragment fragment = fragmentManager.findFragmentById(R.id.network_setting_content);
- try {
- mListener = (RoamingDialogListener) fragment;
- } catch (ClassCastException e) {
- throw new ClassCastException(fragment.toString() +
- "must implement RoamingDialogListener");
- }
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- int title = R.string.roaming_alert_title;
- PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
- if (carrierConfig != null && carrierConfig.getBoolean(
- CarrierConfigManager.KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL)) {
- title = R.string.roaming_check_price_warning;
- }
- builder.setMessage(getResources().getString(R.string.roaming_warning))
- .setTitle(title)
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .setPositiveButton(android.R.string.yes, this)
- .setNegativeButton(android.R.string.no, this);
- return builder.create();
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // let the host know that the positive button has been clicked
- if (which == dialog.BUTTON_POSITIVE) {
- mListener.onPositiveButtonClick(this);
- }
- }
-}
diff --git a/src/com/android/phone/settings/AccessibilitySettingsFragment.java b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
index 73f5de9..5a70fe2 100644
--- a/src/com/android/phone/settings/AccessibilitySettingsFragment.java
+++ b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
@@ -28,6 +28,7 @@
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.text.TextUtils;
import android.util.Log;
import com.android.ims.ImsManager;
@@ -113,6 +114,11 @@
if (shouldShowRttSetting()) {
// TODO: this is going to be a on/off switch for now. Ask UX about how to integrate
// this settings with TTY
+ if (TelephonyManager.getDefault().isNetworkRoaming(
+ SubscriptionManager.getDefaultVoiceSubscriptionId())) {
+ mButtonRtt.setSummary(TextUtils.concat(getText(R.string.rtt_mode_summary), "\n",
+ getText(R.string.no_rtt_when_roaming)));
+ }
boolean rttOn = Settings.Secure.getInt(
mContext.getContentResolver(), Settings.Secure.RTT_CALLING_MODE, 0) != 0;
mButtonRtt.setChecked(rttOn);
@@ -151,9 +157,9 @@
Settings.System.putInt(mContext.getContentResolver(), Settings.System.HEARING_AID, hac);
// Update HAC Value in AudioManager.
- mAudioManager.setParameter(SettingsConstants.HAC_KEY,
- hac == SettingsConstants.HAC_ENABLED
- ? SettingsConstants.HAC_VAL_ON : SettingsConstants.HAC_VAL_OFF);
+ mAudioManager.setParameters(
+ SettingsConstants.HAC_KEY + "=" + (hac == SettingsConstants.HAC_ENABLED
+ ? SettingsConstants.HAC_VAL_ON : SettingsConstants.HAC_VAL_OFF));
return true;
} else if (preference == mButtonRtt) {
Log.i(LOG_TAG, "RTT setting changed -- now " + mButtonRtt.isChecked());
diff --git a/src/com/android/phone/settings/SuppServicesUiUtil.java b/src/com/android/phone/settings/SuppServicesUiUtil.java
index d508d9c..4e9841f 100644
--- a/src/com/android/phone/settings/SuppServicesUiUtil.java
+++ b/src/com/android/phone/settings/SuppServicesUiUtil.java
@@ -208,7 +208,7 @@
Log.d(LOG_TAG, "handleCallerIdUssdResponse: response ="
+ response.toString());
PhoneUtils.createUssdDialog(app, context, response.toString(),
- WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+ phone, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
@Override
@@ -219,7 +219,7 @@
+ failureCode);
PhoneUtils.createUssdDialog(app, context,
context.getText(R.string.response_error),
- WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+ phone, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
};
diff --git a/src/com/android/services/telephony/ConferenceParticipantConnection.java b/src/com/android/services/telephony/ConferenceParticipantConnection.java
index 61dc039..b1f1b23 100644
--- a/src/com/android/services/telephony/ConferenceParticipantConnection.java
+++ b/src/com/android/services/telephony/ConferenceParticipantConnection.java
@@ -183,7 +183,7 @@
SubscriptionInfo subInfo = TelecomAccountRegistry.getInstance(null).
getSubscriptionManager().getActiveSubscriptionInfo(subId);
- if (subInfo == null) {
+ if (subInfo == null || TextUtils.isEmpty(subInfo.getCountryIso())) {
return null;
}
// The SubscriptionInfo reports ISO country codes in lower case. Convert to upper case,
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index 20c16fe..5227e8b 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -195,6 +195,7 @@
case android.telephony.DisconnectCause.WIFI_LOST:
case android.telephony.DisconnectCause.IMS_ACCESS_BLOCKED:
case android.telephony.DisconnectCause.IMS_SIP_ALTERNATE_EMERGENCY_CALL:
+ case android.telephony.DisconnectCause.MEDIA_TIMEOUT:
return DisconnectCause.ERROR;
case android.telephony.DisconnectCause.DIALED_MMI:
diff --git a/src/com/android/services/telephony/GsmConnection.java b/src/com/android/services/telephony/GsmConnection.java
index 999c6f5..47434c0 100644
--- a/src/com/android/services/telephony/GsmConnection.java
+++ b/src/com/android/services/telephony/GsmConnection.java
@@ -72,9 +72,8 @@
int capabilities = super.buildConnectionCapabilities();
capabilities |= CAPABILITY_MUTE;
// Overwrites TelephonyConnection.buildConnectionCapabilities() and resets the hold options
- // because all GSM calls should hold, even if the carrier config option is set to not show
- // hold for IMS calls.
- if (!shouldTreatAsEmergencyCall()) {
+ // because all GSM calls should hold.
+ if (!shouldTreatAsEmergencyCall() && !isImsConnection()) {
capabilities |= CAPABILITY_SUPPORT_HOLD;
if (isHoldable() && (getState() == STATE_ACTIVE || getState() == STATE_HOLDING)) {
capabilities |= CAPABILITY_HOLD;
diff --git a/src/com/android/services/telephony/ImsConference.java b/src/com/android/services/telephony/ImsConference.java
index bf0374f..e14f422 100644
--- a/src/com/android/services/telephony/ImsConference.java
+++ b/src/com/android/services/telephony/ImsConference.java
@@ -847,7 +847,7 @@
// If the single party call emulation fature flag is enabled, we can potentially treat
// the conference as a single party call when there is just one participant.
if (mFeatureFlagProxy.isUsingSinglePartyCallEmulation()) {
- if (oldParticipantCount > 1 && newParticipantCount == 1) {
+ if (oldParticipantCount != 1 && newParticipantCount == 1) {
// If number of participants goes to 1, emulate a single party call.
startEmulatingSinglePartyCall();
} else if (mIsEmulatingSinglePartyCall && !isSinglePartyConference) {
@@ -1330,4 +1330,12 @@
return isMaximumConferenceSizeEnforced()
&& getNumberOfParticipants() >= getMaximumConferenceSize();
}
+
+ /**
+ * @return {@code True} if the ImsConference is emulating single party call.
+ */
+ @VisibleForTesting
+ public boolean isEmulatingSinglePartyCall() {
+ return mIsEmulatingSinglePartyCall;
+ }
}
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 996c8ea..84fa40c 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -43,6 +43,7 @@
import android.util.Pair;
import com.android.ims.ImsCall;
+import com.android.internal.os.SomeArgs;
import com.android.internal.telephony.Call;
import com.android.internal.telephony.CallFailCause;
import com.android.internal.telephony.CallStateException;
@@ -98,6 +99,7 @@
private static final int MSG_CDMA_VOICE_PRIVACY_OFF = 16;
private static final int MSG_HANGUP = 17;
private static final int MSG_SET_CALL_RADIO_TECH = 18;
+ private static final int MSG_ON_CONNECTION_EVENT = 19;
private final Handler mHandler = new Handler(Looper.getMainLooper()) {
@Override
@@ -267,6 +269,15 @@
refreshDisableAddCall();
}
break;
+ case MSG_ON_CONNECTION_EVENT:
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ sendConnectionEvent((String) args.arg1, (Bundle) args.arg2);
+
+ } finally {
+ args.recycle();
+ }
+ break;
}
}
};
@@ -554,7 +565,10 @@
*/
@Override
public void onConnectionEvent(String event, Bundle extras) {
- sendConnectionEvent(event, extras);
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = event;
+ args.arg2 = extras;
+ mHandler.obtainMessage(MSG_ON_CONNECTION_EVENT, args).sendToTarget();
}
@Override
@@ -1145,7 +1159,8 @@
&& isShowingOriginalDialString()) {
Log.i(this, "new original dial string is null, convert to: "
+ mOriginalConnection.getOrigDialString());
- originalConnection.setConverted(mOriginalConnection.getOrigDialString());
+ originalConnection.restoreDialedNumberAfterConversion(
+ mOriginalConnection.getOrigDialString());
}
clearOriginalConnection();
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 6637e19..0e5a612 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -25,6 +25,9 @@
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
import android.provider.Settings;
import android.telecom.Conference;
import android.telecom.Connection;
@@ -176,6 +179,8 @@
// destroyed.
@VisibleForTesting
public Pair<WeakReference<TelephonyConnection>, Queue<Phone>> mEmergencyRetryCache;
+ private Handler mDdsSwitchHandler;
+ private HandlerThread mHandlerThread;
/**
* Keeps track of the status of a SIM slot.
@@ -329,11 +334,17 @@
IntentFilter intentFilter = new IntentFilter(
TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
registerReceiver(mTtyBroadcastReceiver, intentFilter);
+
+ mHandlerThread = new HandlerThread("DdsSwitchHandlerThread");
+ mHandlerThread.start();
+ Looper looper = mHandlerThread.getLooper();
+ mDdsSwitchHandler = new Handler(looper);
}
@Override
public boolean onUnbind(Intent intent) {
unregisterReceiver(mTtyBroadcastReceiver);
+ mHandlerThread.quitSafely();
return super.onUnbind(intent);
}
@@ -490,7 +501,10 @@
// it is a test emergency number and we have to wait for the device to move
// IN_SERVICE before the call can take place over normal routing.
return (phone.getState() == PhoneConstants.State.OFFHOOK)
- || serviceState == ServiceState.STATE_IN_SERVICE;
+ // Do not wait for voice in service on opportunistic SIMs.
+ || SubscriptionController.getInstance().isOpportunistic(
+ phone.getSubId())
+ || serviceState == ServiceState.STATE_IN_SERVICE;
}
}
});
@@ -520,14 +534,14 @@
} else {
final Connection resultConnection = getTelephonyConnection(request, numberToDial,
true, handle, phone);
- CompletableFuture<Boolean> phoneFuture = delayDialForDdsSwitch(phone);
- phoneFuture.whenComplete((result, error) -> {
- if (error != null) {
- Log.w(this, "onCreateOutgoingConn - delayDialForDdsSwitch exception= "
- + error.getMessage());
+ mDdsSwitchHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ boolean result = delayDialForDdsSwitch(phone);
+ Log.i(this,
+ "onCreateOutgoingConn - delayDialForDdsSwitch result = " + result);
+ placeOutgoingConnection(request, resultConnection, phone);
}
- Log.i(this, "onCreateOutgoingConn - delayDialForDdsSwitch result = " + result);
- placeOutgoingConnection(request, resultConnection, phone);
});
return resultConnection;
}
@@ -601,14 +615,14 @@
adjustAndPlaceOutgoingConnection(phone, originalConnection, request, numberToDial,
handle, originalPhoneType, false);
} else {
- delayDialForDdsSwitch(phone).whenComplete((result, error) -> {
- if (error != null) {
- Log.w(this, "handleOnComplete - delayDialForDdsSwitch exception= "
- + error.getMessage());
+ mDdsSwitchHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ boolean result = delayDialForDdsSwitch(phone);
+ Log.i(this, "handleOnComplete - delayDialForDdsSwitch result = " + result);
+ adjustAndPlaceOutgoingConnection(phone, originalConnection, request,
+ numberToDial, handle, originalPhoneType, true);
}
- Log.i(this, "handleOnComplete - delayDialForDdsSwitch result = " + result);
- adjustAndPlaceOutgoingConnection(phone, originalConnection, request,
- numberToDial, handle, originalPhoneType, true);
});
}
@@ -1231,6 +1245,11 @@
com.android.internal.telephony.Connection originalConnection = null;
try {
if (phone != null) {
+ EmergencyNumber emergencyNumber =
+ phone.getEmergencyNumberTracker().getEmergencyNumber(number);
+ if (emergencyNumber != null) {
+ phone.notifyOutgoingEmergencyCall(emergencyNumber);
+ }
originalConnection = phone.dial(number, new ImsPhone.ImsDialArgs.Builder()
.setVideoState(videoState)
.setIntentExtras(extras)
@@ -1372,13 +1391,22 @@
return chosenPhone;
}
- private CompletableFuture<Boolean> delayDialForDdsSwitch(Phone phone) {
+ /**
+ * If needed, block until the the default data is is switched for outgoing emergency call, or
+ * timeout expires.
+ */
+ private boolean delayDialForDdsSwitch(Phone phone) {
if (phone == null) {
- return CompletableFuture.completedFuture(Boolean.TRUE);
+ return true;
}
- return possiblyOverrideDefaultDataForEmergencyCall(phone)
- .completeOnTimeout(false, DEFAULT_DATA_SWITCH_TIMEOUT_MS,
- TimeUnit.MILLISECONDS);
+ try {
+ return possiblyOverrideDefaultDataForEmergencyCall(phone).get(
+ DEFAULT_DATA_SWITCH_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+ } catch (Exception e) {
+ Log.w(this, "onCreateOutgoingConn - delayDialForDdsSwitch exception= "
+ + e.getMessage());
+ return false;
+ }
}
/**
diff --git a/tests/src/com/android/phone/CdmaOptionsTest.java b/tests/src/com/android/phone/CdmaOptionsTest.java
deleted file mode 100644
index 1a1516c..0000000
--- a/tests/src/com/android/phone/CdmaOptionsTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2018 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 static com.google.common.truth.Truth.assertThat;
-
-import android.os.PersistableBundle;
-import android.telephony.CarrierConfigManager;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.telephony.PhoneConstants;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-public class CdmaOptionsTest {
- @Test
- public void shouldAddApnExpandPreference_doesNotExpandOnGsm() {
- PersistableBundle bundle = new PersistableBundle();
- bundle.putBoolean(CarrierConfigManager.KEY_SHOW_APN_SETTING_CDMA_BOOL, true);
- assertThat(CdmaOptions.shouldAddApnExpandPreference(PhoneConstants.PHONE_TYPE_GSM, bundle))
- .isFalse();
- }
-
- @Test
- public void shouldAddApnExpandPreference_showExpandOnCdma() {
- PersistableBundle bundle = new PersistableBundle();
- bundle.putBoolean(CarrierConfigManager.KEY_SHOW_APN_SETTING_CDMA_BOOL, true);
- assertThat(CdmaOptions.shouldAddApnExpandPreference(PhoneConstants.PHONE_TYPE_CDMA, bundle))
- .isTrue();
- }
-
- @Test
- public void shouldAddApnExpandPreference_doesNotExpandOnCdmaIfCarrierConfigDisabled() {
- PersistableBundle bundle = new PersistableBundle();
- bundle.putBoolean(CarrierConfigManager.KEY_SHOW_APN_SETTING_CDMA_BOOL, false);
- assertThat(CdmaOptions.shouldAddApnExpandPreference(PhoneConstants.PHONE_TYPE_CDMA, bundle))
- .isFalse();
- }
-}
diff --git a/tests/src/com/android/phone/RoamingDialogFragmentTest.java b/tests/src/com/android/phone/RoamingDialogFragmentTest.java
deleted file mode 100644
index a9b32ea..0000000
--- a/tests/src/com/android/phone/RoamingDialogFragmentTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2016 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 static androidx.test.espresso.Espresso.onData;
-import static androidx.test.espresso.Espresso.onView;
-import static androidx.test.espresso.action.ViewActions.click;
-import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
-import static androidx.test.espresso.assertion.ViewAssertions.matches;
-import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
-import static androidx.test.espresso.matcher.ViewMatchers.isChecked;
-import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static androidx.test.espresso.matcher.ViewMatchers.withId;
-import static androidx.test.espresso.matcher.ViewMatchers.withText;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.app.Activity;
-import android.content.pm.ActivityInfo;
-import android.provider.Settings.Global;
-import android.provider.Settings.SettingNotFoundException;
-
-import androidx.test.espresso.matcher.PreferenceMatchers;
-import androidx.test.filters.FlakyTest;
-import androidx.test.rule.ActivityTestRule;
-
-import junit.framework.AssertionFailedError;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-/**
- * Espresso tests to check some properties of the dialog that appears when a user
- * tries to turn on data roaming.
- */
-public class RoamingDialogFragmentTest {
-
- @Rule
- public ActivityTestRule<MobileNetworkSettings> mRule =
- new ActivityTestRule<>(MobileNetworkSettings.class);
- private Activity mActivity;
-
- /**
- * Make sure roaming is off before we start a test since this checks the dialog that only
- * shows up when we try to turn it on.
- */
- @Before
- public void disableRoaming() {
- mActivity = mRule.getActivity();
-
- // turn off data roaming if it is on
- try {
- onData(PreferenceMatchers.withTitle(R.string.roaming))
- .check(matches(hasDescendant(isChecked())))
- .perform(click());
- } catch (AssertionFailedError e) {
- // don't click the switch if it is already off.
- }
- }
-
- @FlakyTest
- @Test
- public void dataRoamingDialogPersistsOnRotation() {
- // click on the data roaming preference to trigger warning dialog
- onData(PreferenceMatchers.withTitle(R.string.roaming)).perform(click());
-
- // request both orientations to ensure at least one rotation occurs
- mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
-
- // verify the title of the dialog is visible
- onView(withText(R.string.roaming_alert_title)).check(matches(isDisplayed()));
-
- }
-
- @FlakyTest
- @Test
- public void dataRoamingEnabledWhenPositiveButtonClicked() throws SettingNotFoundException {
- // click on the data roaming preference to trigger warning dialog
- onData(PreferenceMatchers.withTitle(R.string.roaming)).perform(click());
-
- // click to confirm we want to turn on data roaming
- onView(withId(android.R.id.button1)).perform(click());
-
- // verify that the the setting has actually been changed
- assertThat(Global.getInt(mActivity.getApplicationContext().getContentResolver(),
- Global.DATA_ROAMING)).isEqualTo(1);
- }
-
- @FlakyTest
- @Test
- public void dialogDismissedOnNegativeButtonClicked() {
- // click on the data roaming preference to trigger warning dialog
- onData(PreferenceMatchers.withTitle(R.string.roaming)).perform(click());
-
- // click to cancel turning on data roaming
- onView(withId(android.R.id.button2)).perform(click());
-
- // verify the title of the dialog is gone
- onView(withText(R.string.roaming_alert_title)).check(doesNotExist());
- }
-
- @FlakyTest
- @Test
- public void dataRoamingStaysDisabledWhenDialogCanceled() throws SettingNotFoundException {
- // click on the data roaming preference to trigger warning dialog
- onData(PreferenceMatchers.withTitle(R.string.roaming)).perform(click());
-
- // click to cancel turning on data roaming
- onView(withId(android.R.id.button2)).perform(click());
-
- // verify that the the setting has not been changed
- assertThat(Global.getInt(mActivity.getApplicationContext().getContentResolver(),
- Global.DATA_ROAMING)).isEqualTo(0);
-
- }
-}
diff --git a/tests/src/com/android/services/telephony/ImsConferenceTest.java b/tests/src/com/android/services/telephony/ImsConferenceTest.java
index eaec5b6..6f8b3e8 100644
--- a/tests/src/com/android/services/telephony/ImsConferenceTest.java
+++ b/tests/src/com/android/services/telephony/ImsConferenceTest.java
@@ -16,19 +16,16 @@
package com.android.services.telephony;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.times;
-
-import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.net.Uri;
import android.os.Looper;
@@ -39,15 +36,10 @@
import android.telecom.PhoneAccountHandle;
import android.test.suitebuilder.annotation.SmallTest;
-import com.android.internal.telephony.PhoneConstants;
-
import org.junit.Before;
import org.junit.Test;
-
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
import java.util.Arrays;
@@ -362,6 +354,31 @@
}
/**
+ * Verify that the single party emulate correctly when the conference start with only
+ * one participant.
+ */
+ @Test
+ @SmallTest
+ public void testSinglePartyEmulationWithOneParticipantAtBeginning() {
+ when(mMockTelecomAccountRegistry.isUsingSimCallManager(any(PhoneAccountHandle.class)))
+ .thenReturn(false);
+
+ ImsConference imsConference = new ImsConference(mMockTelecomAccountRegistry,
+ mMockTelephonyConnectionServiceProxy, mConferenceHost,
+ null /* phoneAccountHandle */, () -> true /* featureFlagProxy */);
+
+ ConferenceParticipant participant1 = new ConferenceParticipant(
+ Uri.parse("tel:6505551212"),
+ "A",
+ Uri.parse("sip:6505551212@testims.com"),
+ Connection.STATE_ACTIVE,
+ Call.Details.DIRECTION_INCOMING);
+ imsConference.handleConferenceParticipantsUpdate(mConferenceHost,
+ Arrays.asList(participant1));
+ assertTrue(imsConference.isEmulatingSinglePartyCall());
+ }
+
+ /**
* Verify that we do not use single party emulation when a sim call manager is in use.
*/
@Test