Merge changes from topic "presubmit-am-1696206424e74ea1876042bb4d49b6af" into sc-qpr1-dev am: 3418c85faa am: 52585aca83
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telephony/+/16938771
Change-Id: I2a8595f489322557fa4859ad24cd4ae4c0f116ac
diff --git a/Android.bp b/Android.bp
index 5eb8765..742de0a 100644
--- a/Android.bp
+++ b/Android.bp
@@ -12,26 +12,13 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+package {
+ // See: http://go/android-license-faq
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
// Build the Phone app which includes the emergency dialer. See Contacts
// for the 'other' dialer.
-
-package {
- default_applicable_licenses: ["packages_services_Telephony_license"],
-}
-
-// Added automatically by a large-scale-change
-// See: http://go/android-license-faq
-license {
- name: "packages_services_Telephony_license",
- visibility: [":__subpackages__"],
- license_kinds: [
- "SPDX-license-identifier-Apache-2.0",
- ],
- license_text: [
- "NOTICE",
- ],
-}
-
android_app {
name: "TeleService",
@@ -40,6 +27,7 @@
"voip-common",
"ims-common",
"libprotobuf-java-lite",
+ "app-compat-annotations",
"unsupportedappusage",
"org.apache.http.legacy",
],
@@ -97,3 +85,8 @@
type: "lite",
},
}
+
+platform_compat_config {
+ name: "TeleService-platform-compat-config",
+ src: ":TeleService",
+}
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 86f72bc..5050ea3 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -235,10 +235,17 @@
<uses-permission android:name="android.permission.MANAGE_SUBSCRIPTION_PLANS"/>
<uses-permission android:name="android.permission.OBSERVE_ROLE_HOLDERS"/>
<uses-permission android:name="android.permission.BIND_GBA_SERVICE"/>
+ <!-- Permissions required for reading and logging compat changes -->
+ <uses-permission android:name="android.permission.LOG_COMPAT_CHANGE"/>
+ <uses-permission android:name="android.permission.READ_COMPAT_CHANGE_CONFIG"/>
<!-- Needed to listen to changes in projection state. -->
<uses-permission android:name="android.permission.READ_PROJECTION_STATE"/>
+ <permission android:name="com.android.phone.permission.ACCESS_LAST_KNOWN_CELL_ID"
+ android:label="Access last known cell identity."
+ android:protectionLevel="signature"/>
+
<application android:name="PhoneApp"
android:persistent="true"
android:label="@string/phoneAppLabel"
@@ -436,8 +443,7 @@
android:configChanges="orientation|screenSize|keyboardHidden"
android:exported="true"
android:theme="@style/DialerSettingsLight">
- <intent-filter>
- <action android:name="android.intent.action.VIEW" />
+ <intent-filter android:priority="1">
<action android:name="android.intent.action.MAIN" />
<action android:name="android.telecom.action.SHOW_CALL_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index c5b1efa..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,190 +0,0 @@
-
- Copyright (c) 2005-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.
-
- 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.
-
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 75b9d49..da61c80 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -10,6 +10,46 @@
},
{
"name": "CarrierAppIntegrationTestCases"
+ },
+ {
+ "name": "CtsTelephonySdk28TestCases",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
+ },
+ {
+ "name": "CtsSimRestrictedApisTestCases",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
+ },
+ {
+ "name": "CtsTelephony2TestCases",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
+ },
+ {
+ "name": "CtsTelephony3TestCases",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
+ },
+ {
+ "name": "CtsTelephonyProviderTestCases",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
}
]
}
diff --git a/apex/Android.bp b/apex/Android.bp
index a0e5713..fbb70db 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -1,10 +1,6 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
apex_defaults {
diff --git a/apex/testing/Android.bp b/apex/testing/Android.bp
index 1138b5e..1c6f4a3 100644
--- a/apex/testing/Android.bp
+++ b/apex/testing/Android.bp
@@ -14,11 +14,7 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
apex {
diff --git a/ecc/conversion_toolset_v1/proto/Android.bp b/ecc/conversion_toolset_v1/proto/Android.bp
index 632ab40..cefd789 100644
--- a/ecc/conversion_toolset_v1/proto/Android.bp
+++ b/ecc/conversion_toolset_v1/proto/Android.bp
@@ -14,11 +14,7 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
java_library_static {
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 76b13c6..eefaebd 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Skakel selnetwerk aan, skakel vliegtuigmodus af of skakel batterybespaardermodus af om \'n oproep te maak."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Skakel vliegtuigmodus af om \'n oproep te maak."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Skakel vliegtuigmodus af of koppel aan \'n draadlose netwerk om \'n oproep te maak."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Foon is te warm"</b>\n\n"Kan nie hierdie oproep voltooi nie. Probeer weer wanneer jou foon afkoel.\n\nJy kan nog noodoproepe maak."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Verlaat noodterugbelmodus om \'n nienoodoproep te maak."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Nie geregistreer op netwerk nie."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobiele netwerk nie beskikbaar nie."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR is beskikbaar:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR-status:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR-frekwensie:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Stel radiobandmodus"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Laai tans bandlys …"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Stel"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index a808559..d1833a6 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"የተንቀሳቃሽ ስልክ አውታረ መረብ ያብሩ፣ ጥሪ ለማድረግ የአውሮፕላን ሁነታን ወይም የባትሪ ኃይል ቆጣቢ ሁነታን ያጥፉ።"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ጥሪ ለማድረግ የአውሮፕላን ሁነታን ያጥፉ።"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ጥሪ ለማድረግ የአውሮፕላን ሁኔታን ያጥፉ ወይም ወደ ሽቦ አልባ አውታረ መረብ ያገናኙ።"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ስልኩ በጣም ሞቋል"</b>\n\n" ይህንን ጥሪ ማጠናቀቅ አልተቻለም። ስልክዎ ሲቀዘቅዝ እንደገና ይሞክሩ።\n\nየአደጋ ጊዜ ጥሪዎችን አሁንም ማድረግ ይችላሉ።"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"አስቸኳይ ያልሆነ ጥሪ ለማድረግ ከአስቸኳይ መልሰህ ደውል ሁነታ ይውጡ።"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"በአውታረ መረቡ ላይ አልተመዘገበም።"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"የተንቀሳቃሽ አደራጅ የለም።"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR ይገኛል፦"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR ሁኔታ፦"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR ድግግሞሽ፦"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"የሬዲዮ ባንድ ሁነታን ያቀናጁ"</string>
<string name="band_mode_loading" msgid="795923726636735967">"የባንድ ዝርዝርን በመጫን ላይ…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"አዋቅር"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 21a540f..ac4cbdf 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"شغَّل شبكة الجوال، ثم أوقف تفعيل وضع الطيران أو أوقف تفعيل وضع توفير شحن البطارية لإجراء مكالمة."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"عليك إيقاف وضع الطيران لإجراء مكالمة."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"عليك إيقاف وضع الطيران أو الاتصال بشبكة لاسلكية لإجراء مكالمة."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"الهاتف ساخن جدًا"</b>\n\n"يتعذّر إتمام هذه المكالمة. يمكن المحاولة مرة أخرى عندما تنخفض درجة حرارة الهاتف.\n\nسيظلّ بإمكانك إجراء مكالمات الطوارئ."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"ينبغي الخروج من وضع معاودة الاتصال بالطوارئ لإجراء مكالمة غير طارئة."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"غير مسجل على الشبكة."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"شبكة الجوال غير متاحة."</string>
@@ -927,6 +926,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR متوفر:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"حالة NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"تردد NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"تحديد وضع النطاق اللاسلكي"</string>
<string name="band_mode_loading" msgid="795923726636735967">"جارٍ تحميل قائمة النطاقات…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"ضبط"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 607be68..ad6dbc3 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -534,10 +534,9 @@
<string name="notification_voicemail_no_vm_number" msgid="3423686009815186750">"ভইচমেইলৰ নম্বৰ অজ্ঞাত"</string>
<string name="notification_network_selection_title" msgid="255595526707809121">"কোনো সেৱা নাই"</string>
<string name="notification_network_selection_text" msgid="553288408722427659">"বাছনি কৰা (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) নেটৱৰ্কটো উপলব্ধ নহয়"</string>
- <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"কল কৰিবৰ কাৰণে ম’বাইল নেটৱৰ্ক অন কৰক, এয়াৰপ্লেইন ম’ড অফ কৰক বা বেটাৰী সঞ্চয়কাৰী ম’ড অফ কৰক।"</string>
+ <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"কল কৰিবৰ কাৰণে ম’বাইল নেটৱৰ্ক অন কৰক, এয়াৰপ্লেইন ম\'ড অফ কৰক বা বেটাৰি সঞ্চয়কাৰী ম\'ড অফ কৰক।"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"কল কৰিবৰ কাৰণে এয়াৰপ্লেইন ম\'ড অফ কৰক।"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"কল কৰিবৰ কাৰণে এয়াৰপ্লেইন ম\'ড অফ কৰক বা কোনো বেতাঁৰ নেটৱৰ্কৰ সৈতে সংযোগ কৰক।"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ফ’নটো বেছি গৰম হৈছে"</b>\n\n"এই কলটো সম্পূৰ্ণ কৰিব নোৱাৰি। আপোনাৰ ফ’নটো ঠাণ্ডা হোৱাৰ পাছত পুনৰ চেষ্টা কৰক।\n\nআপুনি তথাপি জৰুৰীকালীন কল কৰিব পাৰিব।"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"সাধাৰণ কল কৰিবৰ কাৰণে জৰুৰীকালীন কলবেক ম\'ডৰ পৰা বাহিৰ হওক।"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"নেটৱৰ্কত পঞ্জীকৃত নহয়।"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"ম’বাইল নেটৱৰ্ক উপলব্ধ নহয়।"</string>
@@ -689,8 +688,8 @@
<string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"কেইবাটাও কল ইতিমধ্যে সক্ৰিয় হৈ আছে। নতুন কল এটা কৰাৰ আগেয়ে অনুগ্ৰহ কৰি সেইবোৰ একেলগ কৰক বা সমাপ্ত কৰক।"</string>
<string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"সংযোগ কৰিব পৰা নাই, অনুগ্ৰহ কৰি এখন মান্য ছিম কাৰ্ড ভৰাওক।"</string>
<string name="callFailed_wifi_lost" msgid="1788036730589163141">"ৱাই-ফাইৰ সৈতে সংযোগ বিচ্ছিন্ন হৈছে। কলৰ অন্ত পৰিছে।"</string>
- <string name="dialFailed_low_battery" msgid="6857904237423407056">"বেটাৰী কম থকাৰ বাবে ভিডিঅ’ কল কৰিব নোৱাৰি।"</string>
- <string name="callFailed_low_battery" msgid="4056828320214416182">"বেটাৰী কম থকাৰ বাবে ভিডিঅ’ কল সমাপ্ত হৈছে।"</string>
+ <string name="dialFailed_low_battery" msgid="6857904237423407056">"বেটাৰি কম থকাৰ বাবে ভিডিঅ\' কল কৰিব নোৱাৰি।"</string>
+ <string name="callFailed_low_battery" msgid="4056828320214416182">"বেটাৰি কম থকাৰ বাবে ভিডিঅ\' কলৰ অন্ত পৰিছে।"</string>
<string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"এই অৱস্থানটোত ৱাই-ফাই কলিঙৰ জৰিয়তে জৰুৰীকালীন কল কৰাৰ সুবিধা উপলব্ধ নহয়।"</string>
<string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"এই অৱস্থানটোত ৱাই-ফাই কলিং উপলব্ধ নহয়।"</string>
<string name="change_pin_title" msgid="3564254326626797321">"ভইচমেইলৰ পিন সলনি কৰক"</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR উপলব্ধ:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR স্থিতি:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR ফ্ৰিকুৱেন্সী:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"নেটৱৰ্ক বিভাজনৰ কনফিগাৰেশ্বন:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"ৰেডিঅ’ৰ বেণ্ড ম’ড ছেট কৰক"</string>
<string name="band_mode_loading" msgid="795923726636735967">"বেণ্ড সূচীখন ল’ড কৰি থকা হৈছে…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"ছেট কৰক"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 5ec4dc5..c1ea981 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Zəng etmək üçün mobil şəbəkəni aktiv edin, uçuş rejimini deaktiv edin və ya enerji qənaətini deaktiv edin."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Zəng etmək üçün təyyarə rejimini deaktiv edin."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Zəng etmək üçün təyyarə rejimini deaktiv edin və ya Wi-Fi şəbəkəsinə qoşulun."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefonunuz çox qızıb"</b>\n\n"Bu zəngi tamamlamaq mümkün deyil. Telefonunuz soyuduqda yenidən cəhd edin.\n\nHələ də təcili zənglər edə bilərsiniz."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Qeyri-fövqəladə zəng etmək üçün fövqəladə zəng rejimindən çıxın."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Şəbəkədə qeydə alınmayıb."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobil şəbəkə əlçatımlı deyil."</string>
@@ -592,7 +591,7 @@
<string name="importToFDNfromContacts" msgid="5068664870738407341">"Kontaktlardan import edin"</string>
<string name="singleContactImportedMsg" msgid="3619804066300998934">"Idxal olunmuş kontakt"</string>
<string name="failedToImportSingleContactMsg" msgid="228095510489830266">"Kontakt idxalı uğursuz oldu"</string>
- <string name="hac_mode_title" msgid="4127986689621125468">"Eşitmə cihazları"</string>
+ <string name="hac_mode_title" msgid="4127986689621125468">"Eşitmə yardımı"</string>
<string name="hac_mode_summary" msgid="7774989500136009881">"Eşitmə yardımı uyğunluğunu aktivləşdirin"</string>
<string name="rtt_mode_title" msgid="3075948111362818043">"Real zaman mətn (RTT) zəngi"</string>
<string name="rtt_mode_summary" msgid="8631541375609989562">"Səsli zəng daxilində mesajlaşmaya icazə verin"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR Əlçatandır:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR Statusu:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR Tezliyi:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Radio Diapazon Rejimini Quraşdırın"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Diapazon Siyahısı Yüklənir…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Ayarlayın"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index d56f319..52c569c 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Uključite mobilnu mrežu i isključite režim rada u avionu ili režim uštede baterije da biste uputili poziv."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Isključite režim rada u avionu da biste uputili poziv."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Isključite režim rada u avionu ili se povežite na bežičnu mrežu da biste uputili poziv."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon je previše vruć"</b>\n\n"Poziv ne može da se završi. Probajte ponovo kada se telefon ohladi.\n\nI dalje možete da upućujete hitne pozive."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Izađite iz režima hitnog povratnog poziva da biste uputili poziv koji nije hitan."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Nije registrovano na mreži."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilna mreža nije dostupna."</string>
@@ -615,7 +614,7 @@
<string name="ota_title_activate" msgid="4049645324841263423">"Aktivirajte telefon"</string>
<string name="ota_touch_activate" msgid="838764494319694754">"Potrebno je da uputite poseban poziv da biste aktivirali uslugu svoj telefona. \n\nNakon što pritisnete dugme „Aktiviraj“, slušajte data uputstva da biste da biste aktivirali svoj telefon."</string>
<string name="ota_hfa_activation_title" msgid="3300556778212729671">"Aktiviranje..."</string>
- <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"Telefon aktivira uslugu mobilnih podataka.\n\nTo može da potraje i do 5 minuta."</string>
+ <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"Telefon aktivira uslugu mobilnog prenosa podataka.\n\nTo može da potraje i do 5 minuta."</string>
<string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"Želite li da preskočite aktivaciju?"</string>
<string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Ako preskočite aktivaciju, ne možete da upućujete pozive ili da se povezujete sa mrežama za mobilni prenos podataka (iako možete da se povežete sa WiFi mrežama). Sve dok ne aktivirate svoj telefon, bićete upitani da to učinite svaki put kada ga uključite."</string>
<string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"Preskoči"</string>
@@ -918,6 +917,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR dostupno:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR stanje:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR učestalost:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Podesite režim radijskog opsega"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Učitava se lista opsega…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Podesi"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 6674bee..bdd80f5 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Каб пазваніць, уключыце мабільную сетку, выключыце рэжым палёту або рэжым эканоміі зараду."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Адключыце рэжым палёту, каб зрабіць выклік."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Адключыце рэжым палёту або падлучыцеся да бесправадной сеткі, каб зрабіць выклік."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Тэлефон перагрэўся"</b>\n\n"Не ўдалося зрабіць выклік. Паўтарыце спробу, калі тэлефон астыне.\n\nВы ўсё роўна можаце рабіць экстранныя выклікі."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Каб зрабіць звычайны выклік, выйдзіце з рэжыму экстранных зваротных выклікаў."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Не зарэгістраваны ў сетцы."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Мабільная сетка недаступная."</string>
@@ -921,6 +920,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Даступнасць NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Стан NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Частата NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Задаць рэжым радыёдыяпазону"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Загружаецца спіс дыяпазонаў…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Задаць"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 216c789..6be0bcd 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Включете мобилната мрежа, изключете самолетния режим или режима за запазване на батерията, за да се обадите."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Изключете самолетния режим, за да осъществите обаждане."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Изключете самолетния режим или се свържете с безжична мрежа, за да осъществите обаждане."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Телефонът е твърде горещ"</b>\n\n"Обаждането не може да се извърши. Опитайте отново, когато телефонът се охлади.\n\nМожете да извършвате спешни обаждания."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Излезте от режима на обратно обаждане при спешност, за да можете да извършвате обаждания, които не са спешни."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Няма регистрация в мрежата."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Няма мобилна мрежа."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Налично NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Състояние на NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Честота за NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Задаване на режима за радиодиапазона"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Списъкът с диапазони се зарежда…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Задаване"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 81a2b33..29dcb56 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"কল করতে মোবাইল নেটওয়ার্ক চালু করুন, বিমান মোড বা ব্যাটারি সেভার বন্ধ করুন৷"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"কল করতে বিমান মোড বন্ধ করুন৷"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"বিমান মোড বন্ধ করুন বা কল করতে কোনো ওয়্যারলেস নেটওয়ার্কে সংযোগ করুন৷"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ফোনটি খুব গরম হয়ে গেছে"</b>\n\n"এই কলটি সম্পূর্ণ করা যাচ্ছে না। ফোনটি ঠাণ্ডা হয়ে গেলে আবার চেষ্টা করুন।\n\nআপনি এখনও জরুরি কল করতে পারেন।"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"একটি সাধারণ কল করতে জরুরি কলব্যাক মোডের বাইরে আসুন৷"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"নেটওয়ার্কে নিবন্ধিত নয়৷"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"মোবাইল নেটওয়ার্ক উপলব্ধ নয়৷"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR উপলভ্য:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR স্ট্যাটাস:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR ফ্রিকোয়েন্সি:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"রেডিও ব্যান্ড মোড সেট করুন"</string>
<string name="band_mode_loading" msgid="795923726636735967">"ব্যান্ড তালিকা লোড হচ্ছে..."</string>
<string name="band_mode_set" msgid="6657819412803771421">"সেট করুন"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 261506d..ed5c95b 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -196,7 +196,7 @@
<string name="network_connecting" msgid="160901383582774987">"Povezivanje…"</string>
<string name="network_could_not_connect" msgid="6547460848093727998">"Povezivanje nije uspjelo"</string>
<string-array name="preferred_network_mode_choices">
- <item msgid="4531933377509551889">"Preferira se GSM/WCDMA"</item>
+ <item msgid="4531933377509551889">"Preferiraj GSM/WCDMA"</item>
<item msgid="5120532750027435355">"Samo GSM"</item>
<item msgid="8973311380798000102">"Samo WCDMA"</item>
<item msgid="4139961027147085705">"Automatski GSM/WCDMA"</item>
@@ -310,7 +310,7 @@
<string name="sim_change_data_title" msgid="9142726786345906606">"Promijeniti SIM za prijenos podataka?"</string>
<string name="sim_change_data_message" msgid="3567358694255933280">"Koristiti SIM karticu <xliff:g id="NEW_SIM">%1$s</xliff:g> umjesto SIM kartice <xliff:g id="OLD_SIM">%2$s</xliff:g> za prijenos podataka na mobilnoj mreži?"</string>
<string name="wifi_calling_settings_title" msgid="5800018845662016507">"Pozivanje putem WiFi-ja"</string>
- <string name="video_calling_settings_title" msgid="342829454913266078">"Video pozivi putem operatera"</string>
+ <string name="video_calling_settings_title" msgid="342829454913266078">"Operater video pozivanja"</string>
<string name="gsm_umts_options" msgid="4968446771519376808">"GSM/UMTS opcije"</string>
<string name="cdma_options" msgid="3669592472226145665">"CDMA opcije"</string>
<string name="throttle_data_usage" msgid="1944145350660420711">"Korištenje podataka"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Uključite mobilnu mrežu, isključite Način rada u avionu ili isključite Uštedu baterije da pozovete."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Isključite način rada u avionu da pozovete."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Isključite način rada u avionu ili se povežite na bežičnu mrežu da pozovete."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon se pregrijao"</b>\n\n"Nije moguće završiti ovaj poziv. Pokušajte ponovo kada se telefon ohladi.\n\nI dalje možete upućivati hitne pozive."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Izađite iz načina rada za hitni povratni poziv da uputite poziv koji nije hitan."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Nije registrirano na mreži."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilna mreža nije dostupna."</string>
@@ -839,7 +838,7 @@
<string name="radio_info_data_connection_enable" msgid="6183729739783252840">"Omogućite vezu za prijenos podataka"</string>
<string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Onemogući vezu za prijenos podataka"</string>
<string name="volte_provisioned_switch_string" msgid="4812874990480336178">"VoLTE omogućen"</string>
- <string name="vt_provisioned_switch_string" msgid="8295542122512195979">"Video pozivi su omogućeni"</string>
+ <string name="vt_provisioned_switch_string" msgid="8295542122512195979">"Video poziv obezbijeđen"</string>
<string name="wfc_provisioned_switch_string" msgid="3835004640321078988">"WiFi poziv obezbijeđen"</string>
<string name="eab_provisioned_switch_string" msgid="4449676720736033035">"EAB/Omogućeno prisustvo"</string>
<string name="cbrs_data_switch_string" msgid="6060356430838077653">"Cbrs podaci"</string>
@@ -858,7 +857,7 @@
<string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"Nije registrirano"</string>
<string name="radio_info_ims_feature_status_available" msgid="6493200914756969292">"Dostupno"</string>
<string name="radio_info_ims_feature_status_unavailable" msgid="8930391136839759778">"Nedostupno"</string>
- <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS registracija: <xliff:g id="STATUS">%1$s</xliff:g>\nGovor putem LTE mreže: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nGovor putem WiFi mreže: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideo pozivi: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT interfejs: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
+ <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS registracija: <xliff:g id="STATUS">%1$s</xliff:g>\nGovor putem LTE mreže: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nGovor putem WiFi mreže: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideo pozivanje: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT interfejs: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="45753418231446400">"Aktivno"</string>
<string name="radioInfo_service_out" msgid="287972405416142312">"Ne radi"</string>
<string name="radioInfo_service_emergency" msgid="4763879891415016848">"Samo hitni pozivi"</string>
@@ -918,6 +917,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR dostupno:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR stanje:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR učestalost:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Konfiguracija rezanja mreže:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Postavite način radijskog opsega"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Učitavanje liste opsega…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Postavi"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 5bc13e0..acbe3d8 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -411,7 +411,7 @@
<string name="enable_disable_multi_category" msgid="5958248155437940625">"Multicategoria"</string>
<string name="multi_category_enable" msgid="4531915767817483960">"Multicategoria activada"</string>
<string name="multi_category_disable" msgid="6325934413701238104">"Multicategoria desactivada"</string>
- <string name="network_recommended" msgid="3444321100580250926">" (opció recomanada)"</string>
+ <string name="network_recommended" msgid="3444321100580250926">" (recomanat)"</string>
<string name="network_lte" msgid="7206879277095094280">"LTE (opció recomanada)"</string>
<string name="network_4G" msgid="6800527815504223913">"4G (opció recomanada)"</string>
<string name="network_global" msgid="3289646154407617631">"Global"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Per fer una trucada, activa la xarxa mòbil o desactiva el mode d\'avió o el mode d\'estalvi de bateria."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Per fer una trucada, desactiva el mode d\'avió."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Per fer una trucada, desactiva el mode d\'avió o connecta amb una xarxa sense fil."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"El telèfon està massa calent"</b>\n\n"No es pot completar aquesta trucada. Torna-ho a provar quan el telèfon es refredi.\n\nPots fer trucades d\'emergència igualment."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Surt del mode de devolució de trucada d\'emergència per fer un altre tipus de trucada."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"No registrat a la xarxa."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"La xarxa mòbil no està disponible."</string>
@@ -857,7 +856,7 @@
<string name="radio_info_ims_feature_status_unavailable" msgid="8930391136839759778">"No disponible"</string>
<string name="radio_info_ims_reg_status" msgid="25582845222446390">"Registre de MI: <xliff:g id="STATUS">%1$s</xliff:g>\nVeu per LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nVeu per Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideotrucades: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nInterfície d\'UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="45753418231446400">"En servei"</string>
- <string name="radioInfo_service_out" msgid="287972405416142312">"Fora de servei"</string>
+ <string name="radioInfo_service_out" msgid="287972405416142312">"Sense servei"</string>
<string name="radioInfo_service_emergency" msgid="4763879891415016848">"Només trucades d\'emergència"</string>
<string name="radioInfo_service_off" msgid="3456583511226783064">"Senyal mòbil desactivat"</string>
<string name="radioInfo_roaming_in" msgid="3156335577793145965">"Itinerància"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR disponible:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Estat d\'NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Freqüència d\'NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Configura el mode de banda de senyal mòbil"</string>
<string name="band_mode_loading" msgid="795923726636735967">"S\'està carregant la llista de bandes…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Defineix"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 926681b..ed768a7 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Pokud chcete volat, zapněte mobilní síť a vypněte režim letadla nebo spořič baterie."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Chcete-li provést hovor, vypněte režim Letadlo."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Chcete-li se připojit k bezdrátové síti a provést hovor, vypněte režim Letadlo."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon je příliš zahřátý"</b>\n\n"Hovor nelze provést. Zkuste to znovu, až telefon vychladne.\n\nTísňové volání máte pořád k dispozici."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Chcete-li uskutečnit běžný hovor, opusťte režim tísňového volání."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Přihlášení k síti nebylo úspěšné."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilní síť je nedostupná."</string>
@@ -921,6 +920,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR k dispozici:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Stav NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frekvence NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Nastavit režim pásma bezdrátového modulu"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Načítání seznamu pásem…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Nastavit"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index ecfb98d..51659c3 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -310,7 +310,7 @@
<string name="sim_change_data_title" msgid="9142726786345906606">"Skift SIM-kortet til data?"</string>
<string name="sim_change_data_message" msgid="3567358694255933280">"Vil du bruge <xliff:g id="NEW_SIM">%1$s</xliff:g> i stedet for <xliff:g id="OLD_SIM">%2$s</xliff:g> til mobildata?"</string>
<string name="wifi_calling_settings_title" msgid="5800018845662016507">"Wi-Fi-opkald"</string>
- <string name="video_calling_settings_title" msgid="342829454913266078">"Videoopkald via mobilnetværk"</string>
+ <string name="video_calling_settings_title" msgid="342829454913266078">"Videoopkald via mobilselskab"</string>
<string name="gsm_umts_options" msgid="4968446771519376808">"Indstillinger for GSM/UMTS"</string>
<string name="cdma_options" msgid="3669592472226145665">"Indstillinger for CDMA"</string>
<string name="throttle_data_usage" msgid="1944145350660420711">"Databrug"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Slå Mobilnetværk til, Flytilstand fra eller Batterisparefunktion fra for at foretage et opkald."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Slå flytilstand fra for at foretage et opkald."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Slå flytilstand fra, eller opret forbindelse til et trådløst netværk for at foretage et opkald."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefonen er for varm"</b>\n\n"Opkaldet kan ikke foretages. Prøv igen, når din telefon er kølet af.\n\nDu kan stadig foretage nødopkald."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Afslut nødtilbagekaldstilstand for at foretage et almindeligt opkald."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ikke registreret på netværk."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilnetværket er ikke tilgængeligt."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Tilgængelig for NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Status for NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frekvens for NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Konfigurer radiobåndstilstand"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Indlæser båndliste…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Angiv"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 7af3720..275147d 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Zum Anrufen Mobilfunknetz aktivieren, Flugmodus oder Energiesparmodus deaktivieren."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Deaktiviere zum Telefonieren den Flugmodus."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Deaktiviere zum Telefonieren den Flugmodus oder stelle eine WLAN-Verbindung her."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Smartphone ist überhitzt."</b>\n\n"Anruf nicht möglich. Versuche es noch einmal, wenn das Smartphone abgekühlt ist.\n\nDu kannst weiterhin Notrufe absetzen."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Beende den Notfallrückrufmodus, um einen Anruf zu tätigen, bei dem es sich nicht um einen Notfall handelt."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Nicht in Netzwerk registriert."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilfunknetz ist nicht verfügbar."</string>
@@ -720,7 +719,7 @@
<string name="mobile_data_activate_button" msgid="1139792516354374612">"DATEN HINZUFÜGEN"</string>
<string name="mobile_data_activate_cancel_button" msgid="3530174817572005860">"ABBRECHEN"</string>
<string name="clh_card_title_call_ended_txt" msgid="5977978317527299698">"Anruf beendet"</string>
- <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Flugmodus ist aktiviert"</string>
+ <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Flugzeugmodus aktiviert"</string>
<string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Zugriff auf SIM-Karte nicht möglich"</string>
<string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilfunknetz nicht verfügbar"</string>
<string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Problem mit der gewählten Telefonnummer. Fehlercode 1."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR verfügbar:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR-Status:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR-Frequenz:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Frequenzbereichmodus festlegen"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Frequenzliste wird geladen…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Festlegen"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 1c88d8e..2d8fd45 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Ενεργοποιήστε το δίκτυο κινητής τηλεφωνίας, απενεργοποιήστε τη λειτουργία πτήσης ή τη λειτουργία εξοικονόμησης μπαταρίας, για να πραγματοποιήσετε μια κλήση."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Απενεργοποιήστε τη λειτουργία κλήσης για να πραγματοποιήσετε μια κλήση."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Απενεργοποιήστε τη λειτουργία πτήσης ή συνδεθείτε σε ένα ασύρματο δίκτυο για να πραγματοποιήσετε μια κλήση."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Το τηλέφωνο έχει υπερθερμανθεί"</b>\n\n"Δεν είναι δυνατή η ολοκλήρωση αυτής της κλήσης. Δοκιμάστε ξανά όταν η θερμοκρασία της συσκευής επανέλθει σε φυσιολογικά επίπεδα.\n\nΩστόσο, μπορείτε ακόμα να πραγματοποιείτε κλήσεις έκτακτης ανάγκης."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Πραγματοποιήστε έξοδο από τη λειτουργία επιστροφής κλήσης έκτακτης ανάγκης για να πραγματοποιήσετε μια κλήση μη έκτακτης ανάγκης."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Δεν έχετε εγγραφεί στο δίκτυο."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Το δίκτυο κινητής τηλεφωνίας δεν είναι διαθέσιμο."</string>
@@ -821,7 +820,7 @@
<string name="supp_service_call_resumed" msgid="3786864005920743546">"Η κλήση συνεχίστηκε."</string>
<string name="supp_service_deflected_call" msgid="7565979024562921707">"Έγινε εκτροπή της κλήσης."</string>
<string name="supp_service_forwarded_call" msgid="6475776013771821457">"Έγινε προώθηση της κλήσης."</string>
- <string name="supp_service_conference_call" msgid="4004193534408317148">"Συμμετοχή σε τηλεδιάσκεψη."</string>
+ <string name="supp_service_conference_call" msgid="4004193534408317148">"Συμμετοχή σε κλήση διάσκεψης."</string>
<string name="supp_service_held_call_released" msgid="2847835124639112410">"Έγινε αποδέσμευση της κλήσης σε κράτηση."</string>
<string name="callFailed_otasp_provisioning_in_process" msgid="3345666183602879326">"Δεν είναι δυνατή η πραγματοποίηση κλήσης, καθώς εκτελείται παροχή υπηρεσιών στη συσκευή αυτήν τη στιγμή."</string>
<string name="callFailed_already_dialing" msgid="7250591188960691086">"Δεν είναι δυνατή η πραγματοποίηση της κλήσης, επειδή βρίσκεται ήδη σε εξέλιξη εξερχόμενη κλήση."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR διαθέσιμο:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Κατάσταση NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Συχνότητα NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Ρύθμιση λειτουργίας ζώνης συχνοτήτων πομπού"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Φόρτωση λίστας ζωνών…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Ορισμός"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 35999b8..191ffcf 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Turn on mobile network, turn off airplane mode or turn off battery saver mode to make a call."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Turn off aeroplane mode to make a call."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Turn off aeroplane mode or connect to a wireless network to make a call."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Phone too hot"</b>\n\n"Can\'t complete this call. Try again when your phone cools down.\n\nYou can still make emergency calls."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Exit emergency callback mode to make a non-emergency call."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Not registered on network."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobile network not available."</string>
@@ -827,7 +826,7 @@
<string name="callFailed_already_dialing" msgid="7250591188960691086">"Cannot place a call as another outgoing call is already dialling."</string>
<string name="callFailed_already_ringing" msgid="2376603543544289303">"Cannot place a call as there is an unanswered incoming call. Answer or reject the incoming call prior to placing a new call."</string>
<string name="callFailed_calling_disabled" msgid="5010992739401206283">"Cannot place a call as calling has been disabled using the ro.telephony.disable-call system property."</string>
- <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call a there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
+ <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call as there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
<string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data is turned on. You can change this in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data and data roaming are turned on. You can change these in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"To use <xliff:g id="SUPP_SERVICE">%1$s</xliff:g>, make sure that mobile data is turned on for SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. You can change this in mobile network settings."</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR available:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR status:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR frequency:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Network slicing config:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Set radio band mode"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Loading band list…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Set"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 2ca6c18..6e43520 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Turn on mobile network, turn off airplane mode or turn off battery saver mode to make a call."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Turn off Airplane mode to make a call."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Turn off Airplane mode or connect to a wireless network to make a call."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Phone too hot"</b>\n\n"Can\'t complete this call. Try again when your phone cools down.\n\nYou can still make emergency calls."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Exit emergency callback mode to make a non-emergency call."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Not registered on network."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobile network not available."</string>
@@ -827,7 +826,7 @@
<string name="callFailed_already_dialing" msgid="7250591188960691086">"Cannot place a call as another outgoing call is already dialling."</string>
<string name="callFailed_already_ringing" msgid="2376603543544289303">"Cannot place a call as there is an unanswered incoming call. Answer or reject the incoming call prior to placing a new call."</string>
<string name="callFailed_calling_disabled" msgid="5010992739401206283">"Cannot place a call as calling has been disabled using the ro.telephony.disable-call system property."</string>
- <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call a there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
+ <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call as there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
<string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data is turned on. You can change this in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data and data roaming are turned on. You can change these in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"To use <xliff:g id="SUPP_SERVICE">%1$s</xliff:g>, make sure that mobile data is turned on for SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. You can change this in mobile network settings."</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR available:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR status:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR frequency:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Network slicing config:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Set radio band mode"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Loading band list…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Set"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 35999b8..191ffcf 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Turn on mobile network, turn off airplane mode or turn off battery saver mode to make a call."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Turn off aeroplane mode to make a call."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Turn off aeroplane mode or connect to a wireless network to make a call."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Phone too hot"</b>\n\n"Can\'t complete this call. Try again when your phone cools down.\n\nYou can still make emergency calls."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Exit emergency callback mode to make a non-emergency call."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Not registered on network."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobile network not available."</string>
@@ -827,7 +826,7 @@
<string name="callFailed_already_dialing" msgid="7250591188960691086">"Cannot place a call as another outgoing call is already dialling."</string>
<string name="callFailed_already_ringing" msgid="2376603543544289303">"Cannot place a call as there is an unanswered incoming call. Answer or reject the incoming call prior to placing a new call."</string>
<string name="callFailed_calling_disabled" msgid="5010992739401206283">"Cannot place a call as calling has been disabled using the ro.telephony.disable-call system property."</string>
- <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call a there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
+ <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call as there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
<string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data is turned on. You can change this in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data and data roaming are turned on. You can change these in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"To use <xliff:g id="SUPP_SERVICE">%1$s</xliff:g>, make sure that mobile data is turned on for SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. You can change this in mobile network settings."</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR available:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR status:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR frequency:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Network slicing config:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Set radio band mode"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Loading band list…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Set"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 35999b8..191ffcf 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Turn on mobile network, turn off airplane mode or turn off battery saver mode to make a call."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Turn off aeroplane mode to make a call."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Turn off aeroplane mode or connect to a wireless network to make a call."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Phone too hot"</b>\n\n"Can\'t complete this call. Try again when your phone cools down.\n\nYou can still make emergency calls."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Exit emergency callback mode to make a non-emergency call."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Not registered on network."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobile network not available."</string>
@@ -827,7 +826,7 @@
<string name="callFailed_already_dialing" msgid="7250591188960691086">"Cannot place a call as another outgoing call is already dialling."</string>
<string name="callFailed_already_ringing" msgid="2376603543544289303">"Cannot place a call as there is an unanswered incoming call. Answer or reject the incoming call prior to placing a new call."</string>
<string name="callFailed_calling_disabled" msgid="5010992739401206283">"Cannot place a call as calling has been disabled using the ro.telephony.disable-call system property."</string>
- <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call a there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
+ <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call as there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
<string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data is turned on. You can change this in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data and data roaming are turned on. You can change these in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"To use <xliff:g id="SUPP_SERVICE">%1$s</xliff:g>, make sure that mobile data is turned on for SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. You can change this in mobile network settings."</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR available:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR status:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR frequency:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Network slicing config:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Set radio band mode"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Loading band list…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Set"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 04094fb..aa19d15 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Turn on mobile network, turn off airplane mode or turn off battery saver mode to make a call."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Turn off airplane mode to make a call."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Turn off airplane mode or connect to a wireless network to make a call."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168">""<b>"Phone too hot"</b>"\n\nCan\'t complete this call. Try again when your phone cools down.\n\nYou can still make emergency calls."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Exit emergency callback mode to make a non-emergency call."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Not registered on network."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobile network not available."</string>
@@ -827,7 +826,7 @@
<string name="callFailed_already_dialing" msgid="7250591188960691086">"Cannot place a call as another outgoing call is already dialing."</string>
<string name="callFailed_already_ringing" msgid="2376603543544289303">"Cannot place a call as there is an unanswered incoming call. Answer or reject the incoming call prior to placing a new call."</string>
<string name="callFailed_calling_disabled" msgid="5010992739401206283">"Cannot place a call as calling has been disabled using the ro.telephony.disable-call system property."</string>
- <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call a there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
+ <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Cannot place a call as there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
<string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure mobile data is turned on. You can change this in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure mobile data and data roaming are turned on. You can change these in mobile network settings."</string>
<string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"To use <xliff:g id="SUPP_SERVICE">%1$s</xliff:g>, make sure mobile data is turned on for SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. You can change this in mobile network settings."</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR Available:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR State:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR Frequency:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Network slicing config:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Set Radio Band Mode"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Loading Band List…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Set"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index c4c0ea2..3fd44d6 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -518,7 +518,7 @@
<string name="puk2_locked" msgid="6497760825455461057">"SIM bloqueada con PUK2. Comunícate con el proveedor para desbloquearla."</string>
<string name="pin2_unblocked" msgid="4481107908727789303">"El PIN2 ya no está bloqueado."</string>
<string name="pin2_error_exception" msgid="8116103864600823641">"Error en la red o en la tarjeta SIM"</string>
- <string name="doneButton" msgid="7371209609238460207">"Listo"</string>
+ <string name="doneButton" msgid="7371209609238460207">"Finalizado"</string>
<string name="voicemail_settings_number_label" msgid="1265118640154688162">"Número de buzón de voz"</string>
<string name="card_title_dialing" msgid="8742182654254431781">"Marcando"</string>
<string name="card_title_redialing" msgid="18130232613559964">"Volviendo a marcar"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Activa la red móvil y desactiva el modo de avión o el modo de ahorro de batería para realizar una llamada."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Desactivar modo de avión para hacer una llamada"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Desactivar el modo de avión o conectarse a una red inalámbrica para hacer una llamada"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Se sobrecalentó el teléfono"</b>\n\n"No se puede completar esta llamada. Vuelve a intentar cuando se enfríe el teléfono.\n\nDe todos modos, puedes hacer llamadas de emergencia."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Para realizar una llamada que no sea de emergencia, sal del modo de devolución de llamada de emergencia."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"No registrado en la red."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"La red móvil no está disponible."</string>
@@ -805,7 +804,7 @@
<string name="messageCallBarring" msgid="5537730400652466912">"Ingresa la contraseña"</string>
<string name="call_barring_settings" msgid="4616607285790258919">"Configuración de restricción de llamadas"</string>
<string name="callFailed_NetworkBusy" msgid="5437103975842913681">"La red está ocupada. Vuelve a realizar la llamada más tarde."</string>
- <string name="callFailed_NetworkCongested" msgid="6801283142342775380">"La red está congestionada. Comunícate con tu operador de telefonía celular para recibir asistencia."</string>
+ <string name="callFailed_NetworkCongested" msgid="6801283142342775380">"La red está congestionada. Comunícate con tu operador de telefonía móvil para recibir asistencia."</string>
<string name="supp_service_notification_call_deflected" msgid="4980942818105909813">"Se desvió la llamada."</string>
<string name="supp_service_notification_call_forwarded" msgid="7102930311735433088">"Se desvió la llamada."</string>
<string name="supp_service_notification_call_waiting" msgid="4577403881609445324">"Llamada en espera."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR disponible:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Estado de NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frecuencia de NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Establecer modo de banda de radio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Cargando lista de bandas…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Establecer"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index a106ba2..4d1f877 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -92,7 +92,7 @@
<string name="additional_cdma_call_settings" msgid="2178016561980611304">"Ajustes adicionales de llamadas CDMA"</string>
<string name="sum_cdma_call_settings" msgid="3185825305136993636">"Ajustes adicionales de llamadas solo CDMA"</string>
<string name="labelNwService" msgid="6015891883487125120">"Ajustes del servicio de red"</string>
- <string name="labelCallerId" msgid="2090540744550903172">"Identificación de llamada"</string>
+ <string name="labelCallerId" msgid="2090540744550903172">"ID de llamada"</string>
<string name="sum_loading_settings" msgid="434063780286688775">"Cargando ajustes…"</string>
<string name="sum_hide_caller_id" msgid="131100328602371933">"Número oculto en llamadas salientes"</string>
<string name="sum_show_caller_id" msgid="3571854755324664591">"Número mostrado en llamadas salientes"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Activa la red móvil o desactiva el modo avión o el modo de ahorro de batería para hacer una llamada."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Desactiva el modo avión parra hacer llamadas."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Desactiva el modo avión o conéctate a una red inalámbrica para hacer llamadas."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"El teléfono está demasiado caliente"</b>\n\n"No se ha podido completar esta llamada. Vuelve a intentarlo cuando el teléfono se enfríe.\n\nNo obstante, puedes hacer llamadas de emergencia."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Sal del modo de devolución de llamada de emergencia para hacer otro tipo de llamada."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"No se ha podido conectar a la red"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"La red móvil no está disponible."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR disponible:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Estado de NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frecuencia de NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Establecer modo de banda de señal móvil"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Cargando lista de bandas…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Seleccionar"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 076160a..26366e9 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Helistamiseks lülitage mobiilsidevõrk sisse, lennu- või akusäästjarežiim välja."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Helistamiseks lülitage lennurežiim välja."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Helistamiseks lülitage lennurežiim välja või looge ühendus traadita võrguga."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon on liiga kuum"</b>\n\n"Kõnet ei saa teha. Proovige uuesti, kui telefon on jahtunud.\n\nSaate endiselt teha hädaabikõnesid."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Muude kui hädaabikõne tegemiseks väljuge hädaabikõnede režiimist."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ei ole võrku registreeritud."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobiilsidevõrk pole saadaval."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR saadaval:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR-i olek:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR-i sagedus:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Raadio ribarežiimi määramine"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Ribaloendi laadimine …"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Määra"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 85f4776..81af2b4 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -49,7 +49,7 @@
<string name="add_vm_number_str" msgid="7368168964435881637">"Gehitu zenbakia"</string>
<string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"Erabiltzaile nagusiak bakarrik alda ditzake erantzungailuaren ezarpenak."</string>
<string name="puk_unlocked" msgid="4627340655215746511">"SIM txartela desblokeatu da. Telefonoa desblokeatzen…"</string>
- <string name="label_ndp" msgid="7617392683877410341">"SIMaren sarea desblokeatzeko PINa"</string>
+ <string name="label_ndp" msgid="7617392683877410341">"SIM sarea desblokeatzeko PIN kodea"</string>
<string name="label_phoneid" msgid="8775611434123577808">"Operadore hau dauka finkatuta SIM txartelak:"</string>
<string name="sim_ndp_unlock_text" msgid="7737338355451978338">"Desblokeatu"</string>
<string name="sim_ndp_dismiss_text" msgid="89667342248929777">"Baztertu"</string>
@@ -162,15 +162,15 @@
<string name="no_change" msgid="3737264882821031892">"Ez da aldaketarik egin."</string>
<string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"Aukeratu erantzungailu-zerbitzua"</string>
<string name="voicemail_default" msgid="6427575113775462077">"Operadorea"</string>
- <string name="vm_change_pin_old_pin" msgid="7154951790929009241">"PIN zaharra"</string>
- <string name="vm_change_pin_new_pin" msgid="2656200418481288069">"PIN berria"</string>
+ <string name="vm_change_pin_old_pin" msgid="7154951790929009241">"PIN kode zaharra"</string>
+ <string name="vm_change_pin_new_pin" msgid="2656200418481288069">"PIN kode berria"</string>
<string name="vm_change_pin_progress_message" msgid="626015184502739044">"Itxaron, mesedez."</string>
- <string name="vm_change_pin_error_too_short" msgid="1789139338449945483">"Laburregia da PIN berria."</string>
- <string name="vm_change_pin_error_too_long" msgid="3634907034310018954">"Luzeegia da PIN berria."</string>
- <string name="vm_change_pin_error_too_weak" msgid="8581892952627885719">"Ez da batere segurua PIN berria. Pasahitza segurua izan dadin, ez du izan behar zenbaki-segidarik edo errepikatutako zenbakirik."</string>
- <string name="vm_change_pin_error_mismatch" msgid="5364847280026257331">"PIN zaharra ez dator bat."</string>
- <string name="vm_change_pin_error_invalid" msgid="5230002671175580674">"Balio ez duten karaktereak ditu PIN berriak."</string>
- <string name="vm_change_pin_error_system_error" msgid="9116483527909681791">"Ezin da aldatu PINa"</string>
+ <string name="vm_change_pin_error_too_short" msgid="1789139338449945483">"Laburregia da PIN kode berria."</string>
+ <string name="vm_change_pin_error_too_long" msgid="3634907034310018954">"Luzeegia da PIN kode berria."</string>
+ <string name="vm_change_pin_error_too_weak" msgid="8581892952627885719">"Ez da batere segurua PIN kode berria. Pasahitza segurua izan dadin, ez du izan behar zenbaki-segidarik edo errepikatutako zenbakirik."</string>
+ <string name="vm_change_pin_error_mismatch" msgid="5364847280026257331">"PIN kode zaharra ez dator bat."</string>
+ <string name="vm_change_pin_error_invalid" msgid="5230002671175580674">"Balio ez duten karaktereak ditu PIN kode berriak."</string>
+ <string name="vm_change_pin_error_system_error" msgid="9116483527909681791">"Ezin da aldatu PIN kodea"</string>
<string name="vvm_unsupported_message_format" msgid="4206402558577739713">"Ez dira onartzen mota honetako mezuak. Entzuteko, deitu <xliff:g id="NUMBER">%s</xliff:g> zenbakira."</string>
<string name="network_settings_title" msgid="7560807107123171541">"Sare mugikorra"</string>
<string name="label_available" msgid="1316084116670821258">"Sare erabilgarriak"</string>
@@ -449,7 +449,7 @@
<string name="enable_fdn_ok" msgid="5080925177369329827">"Desgaitu markatze finkoko zenbakia"</string>
<string name="disable_fdn_ok" msgid="3745475926874838676">"Gaitu markatze finkoko zenbakiak"</string>
<string name="sum_fdn" msgid="6152246141642323582">"Kudeatu Markatze finkoko zenbakiak"</string>
- <string name="sum_fdn_change_pin" msgid="3510994280557335727">"Aldatu markatze finkoko zenbakien PINa"</string>
+ <string name="sum_fdn_change_pin" msgid="3510994280557335727">"Aldatu markatze finkoko zenbakien PIN kodea"</string>
<string name="sum_fdn_manage_list" msgid="3311397063233992907">"Kudeatu telefono-zenbakien zerrenda"</string>
<string name="voice_privacy" msgid="7346935172372181951">"Ahots-pribatutasuna"</string>
<string name="voice_privacy_summary" msgid="3556460926168473346">"Gaitu pribatutasun modu hobetua"</string>
@@ -475,7 +475,7 @@
<string name="delete_fdn_contact" msgid="7027405651994507077">"Ezabatu markatze finkoko zenbakia"</string>
<string name="deleting_fdn_contact" msgid="6872320570844460428">"Markatze finkoko zenbakia ezabatzen…"</string>
<string name="fdn_contact_deleted" msgid="1680714996763848838">"Markatze finkoko zenbakia ezabatu da."</string>
- <string name="pin2_invalid" msgid="2313954262684494442">"Ez da eguneratu markatze finkoko zenbakia, PIN okerra idatzi duzulako."</string>
+ <string name="pin2_invalid" msgid="2313954262684494442">"Ez da eguneratu markatze finkoko zenbakia, PIN kode okerra idatzi duzulako."</string>
<string name="fdn_invalid_number" msgid="9067189814657840439">"Ez da eguneratu markatze finkoko zenbakia, zenbakiak <xliff:g id="FDN_NUMBER_LIMIT_LENGTH">%d</xliff:g> digitu baino gehiago dituelako."</string>
<string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"Ez da eguneratu markatze finkoko zenbakia. PIN2 kodea ez da zuzena edo telefono-zenbakia baztertu da."</string>
<string name="fdn_failed" msgid="216592346853420250">"Markatze finkoko zenbakiaren eragiketak huts egin du."</string>
@@ -483,23 +483,23 @@
<string name="simContacts_empty" msgid="1135632055473689521">"Ez duzu kontakturik SIM txartelean."</string>
<string name="simContacts_title" msgid="2714029230160136647">"Aukeratu inportatu beharreko kontaktuak"</string>
<string name="simContacts_airplaneMode" msgid="4654884030631503808">"SIM txarteleko kontaktuak inportatzeko, desaktibatu hegaldi modua."</string>
- <string name="enable_pin" msgid="967674051730845376">"Gaitu/Desgaitu SIMaren PINa"</string>
- <string name="change_pin" msgid="3657869530942905790">"Aldatu SIMaren PINa"</string>
- <string name="enter_pin_text" msgid="3182311451978663356">"SIMaren PINa:"</string>
+ <string name="enable_pin" msgid="967674051730845376">"Gaitu/Desgaitu SIM txartelaren PIN kodea"</string>
+ <string name="change_pin" msgid="3657869530942905790">"Aldatu SIM txartelaren PIN kodea"</string>
+ <string name="enter_pin_text" msgid="3182311451978663356">"SIM txartelaren PIN kodea:"</string>
<string name="oldPinLabel" msgid="8618515202411987721">"PIN zaharra"</string>
<string name="newPinLabel" msgid="3585899083055354732">"PIN berria"</string>
- <string name="confirmPinLabel" msgid="7783531218662473778">"Berretsi PIN berria"</string>
- <string name="badPin" msgid="4549286285015892321">"Idatzi duzun PIN zaharra ez da zuzena. Saiatu berriro."</string>
+ <string name="confirmPinLabel" msgid="7783531218662473778">"Berretsi PIN kode berria"</string>
+ <string name="badPin" msgid="4549286285015892321">"Idatzi duzun PIN kode zaharra ez da zuzena. Saiatu berriro."</string>
<string name="mismatchPin" msgid="1467254768290323845">"Idatzi dituzun PIN kodeak ez datoz bat. Saiatu berriro."</string>
- <string name="invalidPin" msgid="7363723429414001979">"Idatzi 4 eta 8 zenbaki arteko PIN bat."</string>
- <string name="disable_sim_pin" msgid="3112303905548613752">"Garbitu SIMaren PINa"</string>
- <string name="enable_sim_pin" msgid="445461050748318980">"Ezarri SIMaren PINa"</string>
- <string name="enable_in_progress" msgid="4135305985717272592">"PINa ezartzen…"</string>
- <string name="enable_pin_ok" msgid="2877428038280804256">"Ezarri da PINa"</string>
- <string name="disable_pin_ok" msgid="888505244389647754">"Garbitu da PINa"</string>
- <string name="pin_failed" msgid="4527347792881939652">"PINa ez da zuzena"</string>
- <string name="pin_changed" msgid="7291153750090452808">"Eguneratu da PINa"</string>
- <string name="puk_requested" msgid="2061337960609806851">"Pasahitza ez da zuzena. PINa blokeatu egin da. PUKa behar da."</string>
+ <string name="invalidPin" msgid="7363723429414001979">"Idatzi 4 eta 8 zenbaki arteko PIN kodea."</string>
+ <string name="disable_sim_pin" msgid="3112303905548613752">"Garbitu SIM txartelaren PIN kodea"</string>
+ <string name="enable_sim_pin" msgid="445461050748318980">"Ezarri SIM txartelaren PIN kodea"</string>
+ <string name="enable_in_progress" msgid="4135305985717272592">"PIN kodea ezartzen…"</string>
+ <string name="enable_pin_ok" msgid="2877428038280804256">"PIN kodea ezarri da"</string>
+ <string name="disable_pin_ok" msgid="888505244389647754">"PIN kodea garbitu da"</string>
+ <string name="pin_failed" msgid="4527347792881939652">"PIN kodea ez da zuzena"</string>
+ <string name="pin_changed" msgid="7291153750090452808">"PIN kodea eguneratu da"</string>
+ <string name="puk_requested" msgid="2061337960609806851">"Pasahitza ez da zuzena. PIN kodea blokeatu egin da. PUK kodea behar da."</string>
<string name="enter_pin2_text" msgid="7266379426804295979">"PIN2 kodea"</string>
<string name="oldPin2Label" msgid="4648543187859997203">"PIN2 kode zaharra"</string>
<string name="newPin2Label" msgid="1840905981784453939">"PIN2 berria"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Deitzeko, aktibatu sare mugikorra, desaktibatu hegaldi modua edo desaktibatu bateria-aurrezlea."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Deia egiteko, desaktibatu hegaldi modua."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Deia egiteko, desaktibatu hegaldi modua edo konektatu haririk gabeko sare batera."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefonoa beroegi dago"</b>\n\n"Ezin da egin deia. Saiatu berriro telefonoa hozten denean.\n\nHala ere, larrialdi-deiak egin ditzakezu."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Larrialdikoak ez diren deiak egiteko, irten larrialdi-zerbitzuen deiak jasotzeko modutik."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ez dago sarean erregistratuta."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Sare mugikorra ez dago erabilgarri."</string>
@@ -621,7 +620,7 @@
<string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"Saltatu"</string>
<string name="ota_activate" msgid="7939695753665438357">"Aktibatu"</string>
<string name="ota_title_activate_success" msgid="1272135024761004889">"Telefonoa aktibatuta dago."</string>
- <string name="ota_title_problem_with_activation" msgid="7019745985413368726">"Arazo bat izan da aktibazioarekin"</string>
+ <string name="ota_title_problem_with_activation" msgid="7019745985413368726">"Arazo bat gertatu da aktibazioarekin"</string>
<string name="ota_listen" msgid="2772252405488894280">"Jarraitu hitzezko argibideei aktibazioa osatu dela entzun arte."</string>
<string name="ota_speaker" msgid="1086766980329820528">"Bozgorailua"</string>
<string name="ota_progress" msgid="8837259285255700132">"Telefonoa programatzen…"</string>
@@ -669,8 +668,8 @@
<string name="description_dialpad_button" msgid="7395114120463883623">"erakutsi markagailua"</string>
<string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"Larrialdietarako markagailua"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"Ikusizko erantzungailua"</string>
- <string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"Ezarri PINa"</string>
- <string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"Aldatu PINa"</string>
+ <string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"Ezarri PIN kodea"</string>
+ <string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"Aldatu PIN kodea"</string>
<string name="preference_category_ringtone" msgid="8787281191375434976">"Tonua eta dardara"</string>
<string name="pstn_connection_service_label" msgid="9200102709997537069">"SIM txartel integratuak"</string>
<string name="enable_video_calling_title" msgid="7246600931634161830">"Aktibatu bideo-deiak"</string>
@@ -693,18 +692,18 @@
<string name="callFailed_low_battery" msgid="4056828320214416182">"Bideo-deia amaitu egin da bateria gutxi gelditzen delako."</string>
<string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Ez daude erabilgarri wifi bidezko larrialdi-deiak kokapen honetan."</string>
<string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"Ez daude erabilgarri wifi bidezko deiak kokapen honetan."</string>
- <string name="change_pin_title" msgid="3564254326626797321">"Aldatu erantzungailuaren PINa"</string>
+ <string name="change_pin_title" msgid="3564254326626797321">"Aldatu erantzungailuaren PIN kodea"</string>
<string name="change_pin_continue_label" msgid="5177011752453506371">"Egin aurrera"</string>
<string name="change_pin_cancel_label" msgid="2301711566758827936">"Utzi"</string>
<string name="change_pin_ok_label" msgid="6861082678817785330">"Ados"</string>
- <string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"Berretsi PIN zaharra"</string>
- <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"Aurrera egiteko, idatzi erantzungailuaren PINa."</string>
- <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"Ezarri PIN berri bat"</string>
+ <string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"Berretsi PIN kode zaharra"</string>
+ <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"Idatzi erantzungailuaren PIN kodea jarraitzeko."</string>
+ <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"Ezarri PIN kode berria"</string>
<string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"<xliff:g id="MIN">%1$d</xliff:g> eta <xliff:g id="MAX">%2$d</xliff:g> digituren artean izan behar ditu PIN kodeak."</string>
- <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"Berretsi PINa"</string>
+ <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"Berretsi PIN kodea"</string>
<string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"PINak ez datoz bat"</string>
- <string name="change_pin_succeeded" msgid="2504705600693014403">"Eguneratu da erantzungailuaren PINa"</string>
- <string name="change_pin_system_error" msgid="7772788809875146873">"Ezin da ezarri PINa"</string>
+ <string name="change_pin_succeeded" msgid="2504705600693014403">"Eguneratu da erantzungailuaren PIN kodea"</string>
+ <string name="change_pin_system_error" msgid="7772788809875146873">"Ezin da ezarri PIN kodea"</string>
<string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"Desaktibatuta daude ibiltaritzako datuak"</string>
<string name="mobile_data_status_roaming_turned_on_subtext" msgid="5615757897768777865">"Aktibatuta daude ibiltaritzako datuak"</string>
<string name="mobile_data_status_roaming_without_plan_subtext" msgid="6536671968072284677">"Ibiltaritza moduan zaude une honetan. Datu-plan bat behar duzu."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR erabilgarri:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR estatua:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR maiztasuna:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Ezarri irrati-bandaren modua"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Banden zerrenda kargatzen…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Ezarri"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 221aa63..7cb550c 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -317,7 +317,7 @@
<string name="throttle_current_usage" msgid="7483859109708658613">"دادههای مورد استفاده در دوره زمانی فعلی"</string>
<string name="throttle_time_frame" msgid="1813452485948918791">"مدت زمان مصرف داده"</string>
<string name="throttle_rate" msgid="7641913901133634905">"قانون نرخ داده"</string>
- <string name="throttle_help" msgid="2624535757028809735">"بیشتر بدانید"</string>
+ <string name="throttle_help" msgid="2624535757028809735">"بیشتر بیاموزید"</string>
<string name="throttle_status_subtext" msgid="1110276415078236687">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) از <xliff:g id="USED_2">%3$s</xliff:g> حداکثر مدت زمان\nمدت زمان بعدی در فاصله <xliff:g id="USED_3">%4$d</xliff:g> روز (<xliff:g id="USED_4">%5$s</xliff:g>) شروع میشود."</string>
<string name="throttle_data_usage_subtext" msgid="3185429653996709840">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) از حداکثر مدت زمان <xliff:g id="USED_2">%3$s</xliff:g>"</string>
<string name="throttle_data_rate_reduced_subtext" msgid="8369839346277847725">"<xliff:g id="USED_0">%1$s</xliff:g> بیش از حداکثر مجاز\nنرخ داده به <xliff:g id="USED_1">%2$d</xliff:g> کیلو بیت در ثانیه کاهش یافت"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"برای برقراری تماس، شبکه تلفن همراه را روشن کنید، حالت هواپیما یا «بهینهسازی باتری» را غیرفعال کنید."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"برای برقراری تماس، حالت پرواز را خاموش کنید."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"برای برقرای تماس، حالت پرواز را خاموش کنید یا به شبکه بیسیم وصل شوید."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"تلفن خیلی داغ است"</b>\n\n"نمیتوان این تماس را بهپایان رساند. وقتی تلفن خنک شد، دوباره امتحان کنید.\n\nهمچنان میتوانید تماسهای اضطراری برقرار کنید."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"برای برقراری تماس غیراضطراری از حالت پاسخ تماس اضطراری خارج شوید."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"در شبکه ثبت نشده است."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"شبکهٔ تلفن همراه موجود نیست."</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR دردسترس است:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"وضعیت NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"فرکانس NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"پیکربندی برش شبکه:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"تنظیم حالت باند رادیو"</string>
<string name="band_mode_loading" msgid="795923726636735967">"درحال بار کردن فهرست باند…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"تنظیم"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 34d40a8..6506746 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Ota mobiiliverkko käyttöön tai poista lentokonetila ja virransäästötila käytöstä, jos haluat soittaa puhelun."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Poista lentokonetila käytöstä, jos haluat soittaa puhelun."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Poista lentokonetila käytöstä tai yhdistä langattomaan verkkoon, jos haluat soittaa puhelun."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Liian kuuma puhelin"</b>\n\n"Puhelua ei voida soittaa. Yritä uudelleen, kun puhelin on jäähtynyt.\n\nVoit silti soittaa hätäpuheluita."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Poistu hätäpuhelujen takaisinsoittotilasta soittaaksesi muun kuin hätäpuhelun."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ei rekisteröity verkkoon."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobiiliverkko ei käytettävissä."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR saatavilla:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR:n tila:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR:n taajuus:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Radion taajuustilan valinta"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Ladataan taajuusluetteloa…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Aseta"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 3236666..76d9bb6 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Activez le réseau cellulaire ou désactivez le mode Avion ou le mode Économiseur de pile pour faire un appel."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Désactivez le mode Avion pour faire un appel."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Désactivez le mode Avion ou connectez-vous à un réseau Wi-Fi pour faire un appel."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Le téléphone est trop chaud"</b>\n\n"Impossible de passer cet appel. Réessayez plus tard quand le téléphone aura refroidi.\n\nVous pouvez toujours effectuer des appels d\'urgence."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Quittez le mode de rappel d\'urgence pour effectuer un appel non urgent."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Non enregistré sur le réseau"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Réseau pour mobile non disponible"</string>
@@ -578,7 +577,7 @@
<string name="onscreenHoldText" msgid="4025348842151665191">"Attente"</string>
<string name="onscreenEndCallText" msgid="6138725377654842757">"Terminé"</string>
<string name="onscreenShowDialpadText" msgid="658465753816164079">"Clavier numérique"</string>
- <string name="onscreenMuteText" msgid="5470306116733843621">"Couper le son"</string>
+ <string name="onscreenMuteText" msgid="5470306116733843621">"Ignorer"</string>
<string name="onscreenAddCallText" msgid="9075675082903611677">"Autre appel"</string>
<string name="onscreenMergeCallsText" msgid="3692389519611225407">"Fusionner les appels"</string>
<string name="onscreenSwapCallsText" msgid="2682542150803377991">"Permuter"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR disponible :"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"État NR :"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Fréquence NR :"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Définir le mode de bande radio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Chargement de la liste de bandes en cours…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Définir"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 957e361..e92aac6 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Pour passer un appel, activez le réseau mobile, et désactivez les modes Avion et Économiseur de batterie."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Désactivez le mode Avion pour passer un appel."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Désactivez le mode Avion ou connectez-vous à un réseau sans fil pour passer un appel."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Téléphone trop chaud"</b>\n\n"Impossible de passer cet appel. Réessayez lorsque votre téléphone aura refroidi.\n\nVous pouvez toujours passer des appels d\'urgence."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Veuillez quitter le mode de rappel d\'urgence pour passer un appel standard."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Non enregistré sur le réseau."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Réseau mobile non disponible"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Accès NR disponible :"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"État NR :"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Fréquence NR :"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Définir le mode de bande radio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Chargement de la liste de bandes…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Définir"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 6fdca2d..145ce03 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Para facer unha chamada, activa a rede de telefonía móbil, desactiva o modo avión ou desactiva o modo Aforro de batería."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Desactiva o modo avión para facer unha chamada."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Desactiva o modo avión ou conéctate a unha rede sen fíos para facer unha chamada."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"A temperatura do teléfono é moi alta"</b>\n\n"Non se pode completar esta chamada. Téntao de novo cando arrefríe o teléfono.\n\nAínda así, podes facer chamadas de emerxencia."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Sae do modo de devolución de chamada de emerxencia para facer unha chamada que non sexa de emerxencia."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Sen rexistro na rede"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"A rede móbil non está dispoñible."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR dispoñible:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Estado de NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frecuencia de NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Definir modo de banda de radio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Cargando lista de bandas…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Definir"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 454dc44..9ae6f2f 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -47,7 +47,7 @@
<string name="no_vm_number" msgid="6623853880546176930">"વૉઇસમેઇલ નંબર ખૂટે છે"</string>
<string name="no_vm_number_msg" msgid="5165161462411372504">"SIM કાર્ડ પર કોઈ વૉઇસમેઇલ નંબર સંગ્રહિત નથી."</string>
<string name="add_vm_number_str" msgid="7368168964435881637">"નંબર ઉમેરો"</string>
- <string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"વૉઇસમેઇલ સેટિંગ ફક્ત પ્રાથમિક વપરાશકર્તા દ્વારા જ ફેરફાર કરી શકાય છે."</string>
+ <string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"વૉઇસમેઇલ સેટિંગ્સને ફક્ત પ્રાથમિક વપરાશકર્તા દ્વારા જ સંશોધિત કરી શકાય છે."</string>
<string name="puk_unlocked" msgid="4627340655215746511">"તમારા SIM કાર્ડને અનાવરોધિત કરવામાં આવ્યું છે. તમારા ફોનને અનલૉક કરી રહ્યાં છે…"</string>
<string name="label_ndp" msgid="7617392683877410341">"SIM નેટવર્ક અનલૉક PIN"</string>
<string name="label_phoneid" msgid="8775611434123577808">"ઑપરેટર દ્વારા સિમ કાર્ડ લૉક કરવામાં આવ્યું છે"</string>
@@ -56,13 +56,13 @@
<string name="requesting_unlock" msgid="930512210309437741">"નેટવર્ક અનલૉકની વિનંતી કરી રહ્યાં છે…"</string>
<string name="unlock_failed" msgid="7103543844840661366">"નેટવર્ક અનલૉક વિનંતી અસફળ."</string>
<string name="unlock_success" msgid="32681089371067565">"નેટવર્ક અનલૉક સફળ."</string>
- <string name="mobile_network_settings_not_available" msgid="8678168497517090039">"મોબાઇલ નેટવર્ક સેટિંગ આ વપરાશકર્તા માટે ઉપલબ્ધ નથી"</string>
- <string name="labelGSMMore" msgid="7354182269461281543">"GSM કૉલ સેટિંગ"</string>
- <string name="labelGsmMore_with_label" msgid="3206015314393246224">"GSM કૉલ સેટિંગ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
- <string name="labelCDMAMore" msgid="7937441382611224632">"CDMA કૉલ સેટિંગ"</string>
- <string name="labelCdmaMore_with_label" msgid="7759692829160238152">"CDMA કૉલ સેટિંગ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+ <string name="mobile_network_settings_not_available" msgid="8678168497517090039">"મોબાઇલ નેટવર્ક સેટિંગ્સ આ વપરાશકર્તા માટે ઉપલબ્ધ નથી"</string>
+ <string name="labelGSMMore" msgid="7354182269461281543">"GSM કૉલ સેટિંગ્સ"</string>
+ <string name="labelGsmMore_with_label" msgid="3206015314393246224">"GSM કૉલ સેટિંગ્સ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+ <string name="labelCDMAMore" msgid="7937441382611224632">"CDMA કૉલ સેટિંગ્સ"</string>
+ <string name="labelCdmaMore_with_label" msgid="7759692829160238152">"CDMA કૉલ સેટિંગ્સ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="apn_settings" msgid="1978652203074756623">"ઍક્સેસ પોઇન્ટનું નામ"</string>
- <string name="settings_label" msgid="9101778088412567956">"નેટવર્ક સેટિંગ"</string>
+ <string name="settings_label" msgid="9101778088412567956">"નેટવર્ક સેટિંગ્સ"</string>
<string name="phone_accounts" msgid="1216879437523774604">"કૉલ કરવા માટેના એકાઉન્ટ"</string>
<string name="phone_accounts_make_calls_with" msgid="16747814788918145">"આના વડે કૉલ કરો"</string>
<string name="phone_accounts_make_sip_calls_with" msgid="4691221006731847255">"આના વડે SIP કૉલ્સ કરો"</string>
@@ -72,7 +72,7 @@
<string name="phone_accounts_choose_accounts" msgid="4748805293314824974">"એકાઉન્ટ્સ પસંદ કરો"</string>
<string name="phone_accounts_selection_header" msgid="2945830843104108440">"ફોન એકાઉન્ટ્સ"</string>
<string name="phone_accounts_add_sip_account" msgid="1437634802033309305">"SIP એકાઉન્ટ ઉમેરો"</string>
- <string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"એકાઉન્ટ સેટિંગ ગોઠવો"</string>
+ <string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"એકાઉન્ટ સેટિંગ્સ ગોઠવો"</string>
<string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"બધા કૉલિંગ એકાઉન્ટ્સ"</string>
<string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"કયા એકાઉન્ટ્સ કૉલ કરી શકે તે પસંદ કરો"</string>
<string name="wifi_calling" msgid="3650509202851355742">"Wi-Fi કૉલિંગ"</string>
@@ -88,15 +88,15 @@
<string name="call_settings" msgid="3677282690157603818">"કૉલ સેટિંગ"</string>
<string name="additional_gsm_call_settings" msgid="1561980168685658846">"વધારાના સેટિંગ"</string>
<string name="additional_gsm_call_settings_with_label" msgid="7973920539979524908">"વધારાના સેટિંગ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
- <string name="sum_gsm_call_settings" msgid="7964692601608878138">"ફક્ત વધારાના GSM કૉલ સેટિંગ"</string>
- <string name="additional_cdma_call_settings" msgid="2178016561980611304">"વધારાના CDMA કૉલ સેટિંગ"</string>
- <string name="sum_cdma_call_settings" msgid="3185825305136993636">"ફક્ત વધારાના CDMA કૉલ સેટિંગ"</string>
- <string name="labelNwService" msgid="6015891883487125120">"નેટવર્ક સેવા સેટિંગ"</string>
+ <string name="sum_gsm_call_settings" msgid="7964692601608878138">"ફક્ત વધારાની GSM કૉલ સેટિંગ્સ"</string>
+ <string name="additional_cdma_call_settings" msgid="2178016561980611304">"વધારાની CDMA કૉલ સેટિંગ્સ"</string>
+ <string name="sum_cdma_call_settings" msgid="3185825305136993636">"ફક્ત વધારાની CDMA કૉલ સેટિંગ્સ"</string>
+ <string name="labelNwService" msgid="6015891883487125120">"નેટવર્ક સેવા સેટિંગ્સ"</string>
<string name="labelCallerId" msgid="2090540744550903172">"કૉલર ID"</string>
- <string name="sum_loading_settings" msgid="434063780286688775">"સેટિંગ લોડ કરી રહ્યાં છીએ..."</string>
+ <string name="sum_loading_settings" msgid="434063780286688775">"સેટિંગ્સ લોડ કરી રહ્યાં છે..."</string>
<string name="sum_hide_caller_id" msgid="131100328602371933">"આઉટગોઇંગ કૉલ્સમાં નંબર છુપાવેલ છે"</string>
<string name="sum_show_caller_id" msgid="3571854755324664591">"આઉટગોઇંગ કૉલ્સમાં નંબર પ્રદર્શિત થાય છે"</string>
- <string name="sum_default_caller_id" msgid="1767070797135682959">"આઉટગોઇંગ કૉલમાં મારો નંબર પ્રદર્શિત કરવા માટે ડિફૉલ્ટ ઑપરેટર સેટિંગનો ઉપયોગ કરો"</string>
+ <string name="sum_default_caller_id" msgid="1767070797135682959">"આઉટગોઇંગ કૉલ્સમાં મારો નંબર પ્રદર્શિત કરવા માટે ડિફોલ્ટ ઓપરેટર સેટિંગ્સનો ઉપયોગ કરો"</string>
<string name="labelCW" msgid="8449327023861428622">"કૉલ પ્રતીક્ષા"</string>
<string name="sum_cw_enabled" msgid="3977308526187139996">"કૉલ દરમ્યાન, મને ઇનકમિંગ કૉલની સૂચના આપો"</string>
<string name="sum_cw_disabled" msgid="3658094589461768637">"કૉલ દરમ્યાન, મને ઇનકમિંગ કૉલની સૂચના આપો"</string>
@@ -113,17 +113,17 @@
<string name="messageCFB" msgid="1958017270393563388">"જ્યારે વ્યસ્ત હોય તે સમય માટેનો નંબર"</string>
<string name="sum_cfb_enabled" msgid="332037613072049492">"<xliff:g id="PHONENUMBER">{0}</xliff:g> પર ફોરવર્ડ કરી રહ્યાં છે"</string>
<string name="sum_cfb_disabled" msgid="3589913334164866035">"બંધ"</string>
- <string name="disable_cfb_forbidden" msgid="4831494744351633961">"જ્યારે તમારો ફોન વ્યસ્ત હોય ત્યારે તમારા ઑપરેટર કૉલ ફૉરવર્ડિંગ બંધ કરવાને સપોર્ટ કરતા નથી."</string>
+ <string name="disable_cfb_forbidden" msgid="4831494744351633961">"જ્યારે તમારો ફોન વ્યસ્ત હોય ત્યારે તમારા ઓપરેટર કૉલ ફોરવર્ડિંગને અક્ષમ કરવાને સમર્થન આપતા નથી."</string>
<string name="labelCFNRy" msgid="3403533792248457946">"જ્યારે જવાબ આપેલ ન હોય ત્યારે"</string>
<string name="messageCFNRy" msgid="7644434155765359009">"જ્યારે જવાબ ન આપેલ હોય તે સમય માટેનો નંબર"</string>
<string name="sum_cfnry_enabled" msgid="3000500837493854799">"<xliff:g id="PHONENUMBER">{0}</xliff:g> પર ફોરવર્ડ કરી રહ્યાં છે"</string>
<string name="sum_cfnry_disabled" msgid="1990563512406017880">"બંધ"</string>
- <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"જ્યારે તમારો ફોન જવાબ નહીં આપે ત્યારે તમારા ઑપરેટર કૉલ ફૉરવર્ડિંગ બંધ કરવાને સપોર્ટ કરતા નથી."</string>
+ <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"જ્યારે તમારો ફોન જવાબ નહીં આપે ત્યારે તમારા ઓપરેટર કૉલ ફોરવર્ડિંગને અક્ષમ કરવાને સમર્થન આપતા નથી."</string>
<string name="labelCFNRc" msgid="4163399350778066013">"જ્યારે પહોંચયોગ્ય ન હોય ત્યારે"</string>
<string name="messageCFNRc" msgid="6980340731313007250">"જ્યારે પહોંચયોગ્ય ન હોય તે સમય માટેનો નંબર"</string>
<string name="sum_cfnrc_enabled" msgid="1799069234006073477">"<xliff:g id="PHONENUMBER">{0}</xliff:g> પર ફોરવર્ડ કરી રહ્યાં છે"</string>
<string name="sum_cfnrc_disabled" msgid="739289696796917683">"બંધ"</string>
- <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"જ્યારે તમારો ફોન પહોંચયોગ્ય ન હોય ત્યારે તમારા કૅરિઅર કૉલ ફૉરવર્ડિંગ બંધ કરવાને સપોર્ટ કરતા નથી."</string>
+ <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"જ્યારે તમારો ફોન પહોંચયોગ્ય ન હોય ત્યારે તમારા કેરિઅર કૉલ ફોરવર્ડિંગને અક્ષમ કરવાને સમર્થન આપતા નથી."</string>
<string name="registration_cf_forbidden" msgid="4386482610771190420">"તમારા મોબાઇલ ઑપરેટર કૉલ ફૉર્વર્ડિંગને સપોર્ટ કરતા નથી."</string>
<string name="cdma_call_waiting" msgid="4565070960879673216">"કૉલ પ્રતીક્ષા ચાલુ કરવા માગો છો?"</string>
<string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"કૉલ દરમ્યાન, તમને ઇનકમિંગ કૉલ વિશે નોટિફિકેશન આપવામાં આવશે"</string>
@@ -132,12 +132,12 @@
<string name="cdma_call_waiting_in_ims_on" msgid="6390979414188659218">"IMS હેઠળ CDMA કૉલ પ્રતીક્ષા ચાલુ છે"</string>
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS હેઠળ CDMA કૉલ પ્રતીક્ષા બંધ છે"</string>
<string name="updating_title" msgid="6130548922615719689">"કૉલ સેટિંગ"</string>
- <string name="call_settings_admin_user_only" msgid="7238947387649986286">"કૉલ સેટિંગને ફક્ત ઍડમિન વપરાશકર્તા દ્વારા જ બદલી શકાય છે."</string>
+ <string name="call_settings_admin_user_only" msgid="7238947387649986286">"કૉલ સેટિંગ્સને ફક્ત એડમિન વપરાશકર્તા દ્વારા જ બદલી શકાય છે."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"સેટિંગ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"કૉલ સેટિંગની ભૂલ"</string>
<string name="reading_settings" msgid="1605904432450871183">"સેટિંગ વાંચી રહ્યાં છે…"</string>
<string name="updating_settings" msgid="3650396734816028808">"સેટિંગ અપડેટ કરી રહ્યાં છીએ..."</string>
- <string name="reverting_settings" msgid="7378668837291012205">"સેટિંગ પાછું ફેરવી રહ્યાં છીએ…"</string>
+ <string name="reverting_settings" msgid="7378668837291012205">"સેટિંગ્સ પાછી ફરાવી રહ્યાં છે…"</string>
<string name="response_error" msgid="3904481964024543330">"નેટવર્ક તરફથી અનપેક્ષિત પ્રતિસાદ."</string>
<string name="exception_error" msgid="330994460090467">"નેટવર્ક અથવા SIM કાર્ડ ભૂલ."</string>
<string name="stk_cc_ss_to_dial_error" msgid="5147693491690618704">"SS વિનંતીને નિયમિત કૉલમાં બદલવામાં આવી છે"</string>
@@ -145,7 +145,7 @@
<string name="stk_cc_ss_to_ss_error" msgid="8297155544652134278">"નવી SS વિનંતીમાં બદલવામાં આવી છે"</string>
<string name="stk_cc_ss_to_dial_video_error" msgid="4255261231466032505">"SS વિનંતીને વીડિઓ કૉલમાં બદલવામાં આવી છે"</string>
<string name="fdn_check_failure" msgid="1833769746374185247">"તમારી ફોન એપ્લિકેશનની ફિક્સ્ડ ડાયલિંગ નંબર્સ સેટિંગ ચાલુ છે. પરિણામ રૂપે, કેટલીક કૉલ સંબંધિત સુવિધાઓ કાર્ય કરતી નથી."</string>
- <string name="radio_off_error" msgid="8321564164914232181">"આ સેટિંગ જોતા પહેલાં રેડિયો ચાલુ કરો."</string>
+ <string name="radio_off_error" msgid="8321564164914232181">"આ સેટિંગ્સ જોતા પહેલાં રેડિઓ ચાલુ કરો."</string>
<string name="close_dialog" msgid="1074977476136119408">"ઓકે"</string>
<string name="enable" msgid="2636552299455477603">"ચાલુ કરો"</string>
<string name="disable" msgid="1122698860799462116">"બંધ કરો"</string>
@@ -158,7 +158,7 @@
<string name="vm_changed" msgid="4739599044379692505">"વૉઇસમેઇલ નંબર બદલ્યો."</string>
<string name="vm_change_failed" msgid="7877733929455763566">"વૉઇસમેઇલ નંબર બદલી શકાયો નથી.\nજો આ સમસ્યા ચાલુ રહે છે, તો તમારા કેરિઅરનો સંપર્ક કરો."</string>
<string name="fw_change_failed" msgid="9179241823460192148">"ફોરવર્ડિંગ નંબર બદલી શકાયો નથી.\nજો આ સમસ્યા ચાલુ રહે છે, તો તમારા કેરિઅરનો સંપર્ક કરો."</string>
- <string name="fw_get_in_vm_failed" msgid="2432678237218183844">"વર્તમાન ફૉરવર્ડિંગ નંબર સેટિંગને પાછ મેળવી અને સાચવી શકાયા નથી.\nકોઈપણ રીતે નવા પ્રદાતા પર સ્વિચ કરીએ?"</string>
+ <string name="fw_get_in_vm_failed" msgid="2432678237218183844">"વર્તમાન ફોરવર્ડિંગ નંબર સેટિંગ્સને પુનઃપ્રાપ્ત કરી અને સાચવી શકાઇ નથી.\nકોઈપણ રીતે નવા પ્રદાતા પર સ્વિચ કરીએ?"</string>
<string name="no_change" msgid="3737264882821031892">"કોઇ બદલાવો થયાં ન હતાં."</string>
<string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"વૉઇસમેઇલ સેવા પસંદ કરો"</string>
<string name="voicemail_default" msgid="6427575113775462077">"તમારો કેરિઅર"</string>
@@ -328,7 +328,7 @@
<string name="enable_disable_cell_bc_sms" msgid="4759958924031721350">"સેલ બ્રોડકાસ્ટ SMS"</string>
<string name="cell_bc_sms_enable" msgid="2019708772024632073">"સેલ બ્રોડકાસ્ટ SMS સક્ષમ કરેલ છે"</string>
<string name="cell_bc_sms_disable" msgid="1214238639910875347">"સેલ બ્રોડકાસ્ટ SMS અક્ષમ કરેલ છે"</string>
- <string name="cb_sms_settings" msgid="6858093721831312036">"સેલ બ્રોડકાસ્ટ SMS સેટિંગ"</string>
+ <string name="cb_sms_settings" msgid="6858093721831312036">"સેલ બ્રોડકાસ્ટ SMS સેટિંગ્સ"</string>
<string name="enable_disable_emergency_broadcast" msgid="6325655044472196496">"કટોકટીનું બ્રોડકાસ્ટ"</string>
<string name="emergency_broadcast_enable" msgid="5759610647771102442">"કટોકટીનું બ્રોડકાસ્ટ સક્ષમ કરેલ છે"</string>
<string name="emergency_broadcast_disable" msgid="2844904734469323266">"કટોકટીનું બ્રોડકાસ્ટ અક્ષમ કરેલ છે"</string>
@@ -420,7 +420,7 @@
<string name="cdma_system_select_dialogtitle" msgid="5524639510676501802">"સિસ્ટમ પસંદગી"</string>
<string-array name="cdma_system_select_choices">
<item msgid="462340042928284921">"ફક્ત હોમ"</item>
- <item msgid="6058010046783562674">"ઑટોમૅટિક"</item>
+ <item msgid="6058010046783562674">"સ્વચલિત"</item>
</string-array>
<string name="cdma_subscription_title" msgid="3449527179325589434">"CDMA સબ્સ્ક્રિપ્શન"</string>
<string name="cdma_subscription_summary" msgid="5681152534466169001">"RUIM/SIM અને NV વચ્ચે બદલો"</string>
@@ -435,7 +435,7 @@
</string-array>
<string name="cdma_activate_device" msgid="5914720276140097632">"ઉપકરણને સક્રિય કરો"</string>
<string name="cdma_lte_data_service" msgid="359786441782404562">"ડેટા સેવા સેટ કરો"</string>
- <string name="carrier_settings_title" msgid="6292869148169850220">"કૅરિઅર સેટિંગ"</string>
+ <string name="carrier_settings_title" msgid="6292869148169850220">"કેરિઅર સેટિંગ્સ"</string>
<string name="fdn" msgid="2545904344666098749">"ફિક્સ્ડ ડાયલિંગ નંબર્સ"</string>
<string name="fdn_with_label" msgid="6412087553365709494">"ફિક્સ્ડ ડાયલિંગ નંબર્સ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="manage_fdn_list" msgid="3341716430375195441">"FDN સૂચિ"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"કૉલ કરવા માટે મોબાઇલ નેટવર્ક ચાલુ કરો, એરપ્લેન મોડ બંધ કરો અથવા બૅટરી બચતકર્તા મોડ બંધ કરો."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"કૉલ કરવા માટે એરપ્લેન મોડ બંધ કરો."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"કૉલ કરવા માટે એરપ્લેન મોડ બંધ કરો અથવા વાયરલેસ નેટવર્કથી કનેક્ટ કરો."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ફોન ખૂબ ગરમ છે"</b>\n\n"આ કૉલ પૂર્ણ કરી શકતા નથી. તમારો ફોન ઠંડો પડે ત્યાર પછી ફરીથી પ્રયાસ કરો.\n\nતમે હજી પણ ઇમર્જન્સી કૉલ કરી શકો છો."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"બિન-કટોકટીનો કૉલ કરવા માટે કટોકટી કૉલબૅક મોડમાંથી બહાર નીકળો."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"નેટવર્ક પર નોંધણી કરાયેલ નથી."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"મોબાઇલ નેટવર્ક ઉપલબ્ધ નથી."</string>
@@ -659,7 +658,7 @@
<string name="voicemail_provider" msgid="4158806657253745294">"સેવા"</string>
<string name="voicemail_settings" msgid="4451045613238972776">"સેટઅપ"</string>
<string name="voicemail_number_not_set" msgid="8831561283386938155">"<સેટ કરેલ નથી>"</string>
- <string name="other_settings" msgid="8895088007393598447">"અન્ય કૉલ સેટિંગ"</string>
+ <string name="other_settings" msgid="8895088007393598447">"અન્ય કૉલ સેટિંગ્સ"</string>
<string name="calling_via_template" msgid="1791323450703751750">"<xliff:g id="PROVIDER_NAME">%s</xliff:g> મારફતે કૉલ કરે છે"</string>
<string name="contactPhoto" msgid="7885089213135154834">"સંપર્ક ફોટો"</string>
<string name="goPrivate" msgid="4645108311382209551">"ખાનગી જાઓ"</string>
@@ -674,8 +673,8 @@
<string name="preference_category_ringtone" msgid="8787281191375434976">"રિંગટોન અને વાઇબ્રેટ"</string>
<string name="pstn_connection_service_label" msgid="9200102709997537069">"બિલ્ટ-ઇન SIM કાર્ડ્સ"</string>
<string name="enable_video_calling_title" msgid="7246600931634161830">"વિડિઓ કૉલિંગ ચાલુ કરો"</string>
- <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"વીડિયો કૉલિંગ ચાલુ કરવા માટે, તમારે નેટવર્ક સેટિંગમાં વધારેલ 4G LTE મોડને ચાલુ કરવાની જરૂર છે."</string>
- <string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"નેટવર્ક સેટિંગ"</string>
+ <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"વિડિઓ કૉલિંગ ચાલુ કરવા માટે, તમારે નેટવર્ક સેટિંગ્સમાં વધારેલ 4G LTE મોડને સક્ષમ કરવાની જરૂર છે."</string>
+ <string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"નેટવર્ક સેટિંગ્સ"</string>
<string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"બંધ કરો"</string>
<string name="sim_label_emergency_calls" msgid="9078241989421522310">"કટોકટીના કૉલ્સ"</string>
<string name="sim_description_emergency_calls" msgid="5146872803938897296">"ફક્ત કટોકટીની કૉલિંગ"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR ઉપલબ્ધ:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR સ્ટેટસ:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR આવર્તન:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"રેડિયો બૅન્ડ મોડ સેટ કરો"</string>
<string name="band_mode_loading" msgid="795923726636735967">"બૅન્ડની સૂચિ લોડ કરી રહ્યું છે…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"સેટ કરો"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 24399f2..0346a6d 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -186,9 +186,9 @@
<string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"%1$s से कनेक्ट किए जाने पर उपलब्ध नहीं है"</string>
<string name="network_select_title" msgid="4117305053881611988">"नेटवर्क"</string>
<string name="register_automatically" msgid="3907580547590554834">"स्वचालित पंजीकरण..."</string>
- <string name="preferred_network_mode_title" msgid="5253395265169539830">"पसंदीदा नेटवर्क टाइप"</string>
+ <string name="preferred_network_mode_title" msgid="5253395265169539830">"पसंदीदा नेटवर्क प्रकार"</string>
<string name="preferred_network_mode_summary" msgid="3787989000044330064">"नेटवर्क संचालन मोड बदलें"</string>
- <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"पसंदीदा नेटवर्क टाइप"</string>
+ <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"पसंदीदा नेटवर्क प्रकार"</string>
<string name="forbidden_network" msgid="5081729819561333023">"(मना है)"</string>
<string name="choose_network_title" msgid="5335832663422653082">"नेटवर्क चुनें"</string>
<string name="network_disconnected" msgid="8844141106841160825">"डिसकनेक्ट है"</string>
@@ -282,8 +282,8 @@
<string name="data_enable_summary" msgid="696860063456536557">"डेटा उपयोग करने दें"</string>
<string name="dialog_alert_title" msgid="5260471806940268478">"ध्यान दें"</string>
<string name="roaming" msgid="1576180772877858949">"रोमिंग"</string>
- <string name="roaming_enable" msgid="6853685214521494819">"रोमिंग में डेटा चालू करें"</string>
- <string name="roaming_disable" msgid="8856224638624592681">"रोमिंग में डेटा चालू करें"</string>
+ <string name="roaming_enable" msgid="6853685214521494819">"रोमिंग के समय डेटा सेवाएं कनेक्ट करें"</string>
+ <string name="roaming_disable" msgid="8856224638624592681">"रोमिंग के समय डेटा सेवाएं कनेक्ट करें"</string>
<string name="roaming_reenable_message" msgid="1951802463885727915">"डेटा रोमिंग बंद है. चालू करने के लिए टैप करें."</string>
<string name="roaming_enabled_message" msgid="9022249120750897">"रोमिंग शुल्क लागू हो सकते हैं. बदलाव करने के लिए टैप करें."</string>
<string name="roaming_notification_title" msgid="3590348480688047320">"मोबाइल डेटा कनेक्शन उपलब्ध नहीं है"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"कॉल करने के लिए मोबाइल नेटवर्क चालू करें, हवाई जहाज़ मोड या बैटरी सेवर मोड बंद करें."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"कॉल करने के लिए हवाई जहाज़ मोड बंद करें."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"कॉल करने के लिए हवाई जहाज़ मोड बंद करें या किसी वायरलेस नेटवर्क से कनेक्ट करें."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"आपका फ़ोन बहुत गर्म हो गया है"</b>\n\n"यह कॉल नहीं लगाया जा सकता. फ़ोन का तापमान कम होने के बाद, फिर से कोशिश करें.\n\nहालांकि, आप अब भी आपातकालीन कॉल कर सकते हैं."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"गैर-आपातकालीन कॉल करने के लिए आपातकालीन कॉलबैक मोड से बाहर निकलें."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"नेटवर्क पर पंजीकृत नहीं."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"मोबाइल नेटवर्क उपलब्ध नहीं."</string>
@@ -556,7 +555,7 @@
<string name="incall_error_supp_service_hold" msgid="8535056414643540997">"कॉल होल्ड नहीं किए जा सकते."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"कॉल करने के लिए किसी वायरलेस नेटवर्क से कनेक्ट करें."</string>
<string name="incall_error_promote_wfc" msgid="9164896813931363415">"कॉल करने के लिए वाई-फ़ाई कॉलिंग सक्षम करें."</string>
- <string name="emergency_information_hint" msgid="9208897544917793012">"आपातकाल में दिखने वाली जानकारी"</string>
+ <string name="emergency_information_hint" msgid="9208897544917793012">"आपातकालीन जानकारी"</string>
<string name="emergency_information_owner_hint" msgid="6256909888049185316">"मालिक"</string>
<string name="emergency_information_confirm_hint" msgid="5109017615894918914">"जानकारी देखने के लिए फिर से टैप करें"</string>
<string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"आपातकालीन कॉल"</string>
@@ -678,7 +677,7 @@
<string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"नेटवर्क सेटिंग"</string>
<string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"बंद करें"</string>
<string name="sim_label_emergency_calls" msgid="9078241989421522310">"आपातकालीन कॉल"</string>
- <string name="sim_description_emergency_calls" msgid="5146872803938897296">"सिर्फ़ आपातकालीन कॉल"</string>
+ <string name="sim_description_emergency_calls" msgid="5146872803938897296">"केवल आपातकालीन कॉल"</string>
<string name="sim_description_default" msgid="7474671114363724971">"सिम कार्ड, स्लॉट: <xliff:g id="SLOT_ID">%s</xliff:g>"</string>
<string name="accessibility_settings_activity_title" msgid="7883415189273700298">"सुलभता"</string>
<string name="status_hint_label_incoming_wifi_call" msgid="2606052595898044071">"इससे वाई-फ़ाई कॉल"</string>
@@ -890,14 +889,14 @@
<string name="radio_info_ppp_resets_label" msgid="9131901102339077661">"चालू करने के बाद से पीपीपी रीसेट की संख्या:"</string>
<string name="radio_info_current_network_label" msgid="3052098695239642450">"मौजूदा नेटवर्क:"</string>
<string name="radio_info_ppp_received_label" msgid="5753592451640644889">"मिलने वाला डेटा :"</string>
- <string name="radio_info_gsm_service_label" msgid="6443348321714241328">"वॉइस सेवा:"</string>
+ <string name="radio_info_gsm_service_label" msgid="6443348321714241328">"Voice की सेवा:"</string>
<string name="radio_info_signal_strength_label" msgid="5545444702102543260">"सिग्नल कितना अच्छा है:"</string>
- <string name="radio_info_call_status_label" msgid="7693575431923095487">"वॉइस कॉल की स्थिति:"</string>
+ <string name="radio_info_call_status_label" msgid="7693575431923095487">"Voice कॉल की स्थिति:"</string>
<string name="radio_info_ppp_sent_label" msgid="6542208429356199695">"भेजा गया डेटा :"</string>
<string name="radio_info_message_waiting_label" msgid="1886549432566952078">"मैसेज वेटिंग:"</string>
<string name="radio_info_phone_number_label" msgid="2533852539562512203">"फ़ोन नंबर:"</string>
<string name="radio_info_band_mode_label" msgid="23480556225515290">"रेडियो का बैंड चुनें"</string>
- <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"वॉइस नेटवर्क टाइप:"</string>
+ <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"Voice के नेटवर्क प्रकार:"</string>
<string name="radio_info_data_network_type_label" msgid="8886597029237501929">"डेटा नेटवर्क प्रकार:"</string>
<string name="phone_index_label" msgid="6222406512768964268">"फ़ोन इंडेक्स चुनें"</string>
<string name="radio_info_set_perferred_label" msgid="7408131389363136210">"पसंदीदा नेटवर्क प्रकार सेट करें:"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR उपलब्ध है:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR की स्थिति:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR की फ़्रीक्वेंसी:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"\'रेडियो बैंड\' मोड सेट करें"</string>
<string name="band_mode_loading" msgid="795923726636735967">"बैंड सूची लोड की जा रही है…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"सेट करें"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index b9a8d0b..10d0bff 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Uključite mobilnu mrežu, isključite način rada u zrakoplovu ili štednju baterije da biste uputili poziv."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Isključite način rada u zrakoplovu da biste uputili poziv."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Isključite način rada u zrakoplovu ili se povežite s bežičnom mrežom da biste uputili poziv."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon je prevruć"</b>\n\n"Poziv se ne može dovršiti. Pokušajte ponovno kad se telefon ohladi.\n\nI dalje možete upućivati hitne pozive."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Isključite način hitnih poziva da biste uputili poziv koji nije hitan."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Nije registrirano na mreži."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilna mreža nije dostupna."</string>
@@ -918,6 +917,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Dostupno za NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Stanje NR-a:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frekvencija NR-a:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Postavi način radijske frekvencije"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Učitavanje popisa frekvencija…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Postavi"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 80d1865..92d1d08 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"A hívás indításához kapcsolja be a hálózatot, és kapcsolja ki a repülős vagy akkumulátorkímélő üzemmódot."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Repülős üzemmód kikapcsolása hívás indításához."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Hívás indításához kapcsolja ki a repülős üzemmódot, illetve csatlakozzon egy vezeték nélküli hálózathoz."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Túlmelegedett a telefon"</b>\n\n"Ezt a hívást nem lehet végrehajtani. Próbálkozzon újra, ha már lehűlt a telefon.\n\nSegélyhívást így is indíthat."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Lépjen ki a Segélykérő visszahívása módból nem vészjellegű hívás kezdeményezéséhez."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Nincs regisztrálva a hálózaton."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"A mobilhálózat nem érhető el."</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR rendelkezésre áll:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR-állapot:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR-frekvencia:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Network slicing config:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Rádióhullámsáv mód beállítása"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Sávlista betöltése…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Beállítás"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 7ccb20d..6d5e980 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Զանգ կատարելու համար միացեք բջջային ցանցին, անջատեք մարտկոցի տնտեսումը կամ ավիառեժիմը:"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Զանգ կատարելու համար անջատեք Ավիառեժիմը:"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Զանգ կատարելու համար անջատեք Ավիառեժիմը կամ միացեք անլար ցանցին:"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Հեռախոսը գերտաքացել է"</b>\n\n"Չհաջողվեց կատարել զանգը։ Նորից փորձեք, երբ հեռախոսը հովանա։\n\nԴուք նախկինի պես կկարողանաք շտապ կանչեր կատարել։"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Սովորական զանգ կատարելու համար դուրս եկեք շտապ կանչի ռեժիմից։"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ցանցում գրանցված չէ:"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Բջջային ցանցն անհասանելի է:"</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR-ը հասանելի է՝"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR-ի կարգավիճակը՝"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR-ի հաճախականությունը՝"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Ցանցի հատվածավորման կազմաձև՝"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Կարգավորել հաճախությունների շերտի ռեժիմը"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Շերտերի ցուցակը բեռնվում է…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Կարգավորել"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index b36e02f..c1a13ce 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -183,7 +183,7 @@
<string name="registration_done" msgid="5337407023566953292">"Terdaftar pada jaringan."</string>
<string name="already_auto" msgid="8607068290733079336">"Sudah ada di pemilihan otomatis."</string>
<string name="select_automatically" msgid="779750291257872651">"Pilih jaringan secara otomatis"</string>
- <string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"Tidak tersedia saat terhubung ke %1$s"</string>
+ <string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"Tidak tersedia saat tersambung ke %1$s"</string>
<string name="network_select_title" msgid="4117305053881611988">"Jaringan"</string>
<string name="register_automatically" msgid="3907580547590554834">"Pendaftaran otomatis..."</string>
<string name="preferred_network_mode_title" msgid="5253395265169539830">"Jenis jaringan yang dipilih"</string>
@@ -194,7 +194,7 @@
<string name="network_disconnected" msgid="8844141106841160825">"Terputus"</string>
<string name="network_connected" msgid="2760235679963580224">"Terhubung"</string>
<string name="network_connecting" msgid="160901383582774987">"Menghubungkan..."</string>
- <string name="network_could_not_connect" msgid="6547460848093727998">"Tidak dapat terhubung"</string>
+ <string name="network_could_not_connect" msgid="6547460848093727998">"Tidak dapat tersambung"</string>
<string-array name="preferred_network_mode_choices">
<item msgid="4531933377509551889">"GSM/WCDMA lebih disukai"</item>
<item msgid="5120532750027435355">"GSM saja"</item>
@@ -313,7 +313,7 @@
<string name="video_calling_settings_title" msgid="342829454913266078">"Panggilan video operator"</string>
<string name="gsm_umts_options" msgid="4968446771519376808">"Opsi GSM//UMTS"</string>
<string name="cdma_options" msgid="3669592472226145665">"Opsi CDMA"</string>
- <string name="throttle_data_usage" msgid="1944145350660420711">"Penggunaan data"</string>
+ <string name="throttle_data_usage" msgid="1944145350660420711">"Penggunaan kuota"</string>
<string name="throttle_current_usage" msgid="7483859109708658613">"Data yang digunakan dalam periode saat ini"</string>
<string name="throttle_time_frame" msgid="1813452485948918791">"Periode penggunaan data"</string>
<string name="throttle_rate" msgid="7641913901133634905">"Kebijakan kecepatan data"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Aktifkan jaringan seluler, lalu nonaktifkan mode pesawat atau penghemat baterai untuk melakukan panggilan."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Nonaktifkan mode pesawat untuk melakukan panggilan"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Nonaktifkan mode pesawat atau sambungkan ke jaringan nirkabel untuk melakukan panggilan"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Ponsel terlalu panas"</b>\n\n"Tidak dapat menyelesaikan panggilan ini. Coba lagi saat ponsel mendingin.\n\nAnda masih dapat melakukan panggilan darurat."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Keluar dari mode telepon balik darurat untuk melakukan panggilan non-darurat."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Tidak terdaftar pada jaringan."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Jaringan seluler tidak tersedia."</string>
@@ -687,7 +686,7 @@
<string name="message_decode_error" msgid="1061856591500290887">"Terjadi kesalahan saat mendekode pesan."</string>
<string name="callFailed_cdma_activation" msgid="5392057031552253550">"Kartu SIM telah mengaktifkan layanan dan memperbarui kemampuan roaming ponsel."</string>
<string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"Ada terlalu banyak panggilan aktif. Akhiri atau gabungkan panggilan yang ada sebelum melakukan panggilan baru."</string>
- <string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"Tidak dapat terhubung, masukkan kartu SIM yang valid."</string>
+ <string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"Tidak dapat tersambung, masukkan kartu SIM yang valid."</string>
<string name="callFailed_wifi_lost" msgid="1788036730589163141">"Sambungan Wi-Fi terputus. Panggilan diakhiri."</string>
<string name="dialFailed_low_battery" msgid="6857904237423407056">"Panggilan video tidak bisa dilakukan karena daya baterai lemah."</string>
<string name="callFailed_low_battery" msgid="4056828320214416182">"Panggilan video berakhir karena daya baterai lemah."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR Tersedia:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Status NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frekuensi NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Setel Mode Band Radio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Memuat Daftar Band…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Setel"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index b44afa2..68dd17e 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Kveiktu á farsímakerfie eða slökktu á flugstillingu eða rafhlöðusparnaði til að hringja."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Slökktu á flugstillingu til að hringja."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Slökktu á flugstillingu eða tengstu þráðlausu neti til að hringja."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Síminn er of heitur"</b>\n\n"Ekki er hægt að ljúka þessu símtali. Reyndu aftur þegar síminn hefur kólnað.\n\nÞú getur ennþá hringt neyðarsímtöl."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Hætta í stillingu fyrir svarhringingu neyðarsímtala til að hringja símtal sem ekki er neyðarsímtal."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ekki skráð á símkerfi."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Farsímakerfi ekki tiltækt."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR tiltækt:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR staða:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR tíðni:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Velja útvarpstíðni"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Hleður lista yfir tíðnisvið…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Stilla"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index f7ff030..a4b3fe1 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -297,7 +297,7 @@
<string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"Account SIP deprecati trovati e rimossi"</string>
<string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Le chiamate SIP non sono più supportate dalla piattaforma Android.\nI tuoi account SIP esistenti (<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g>) sono stati rimossi.\nConferma l\'impostazione del tuo account predefinito per le chiamate."</string>
<string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Vai alle impostazioni"</string>
- <string name="data_usage_title" msgid="8438592133893837464">"Utilizzo dati delle app"</string>
+ <string name="data_usage_title" msgid="8438592133893837464">"Utilizzo dei dati delle app"</string>
<string name="data_usage_template" msgid="6287906680674061783">"Dati mobili usati: <xliff:g id="ID_1">%1$s</xliff:g> nel periodo <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="advanced_options_title" msgid="9208195294513520934">"Avanzate"</string>
<string name="carrier_settings_euicc" msgid="1190237227261337749">"Operatore"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Attiva la rete mobile e disattiva la modalità aereo o il risparmio energetico per effettuare una chiamata."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Disattiva la modalità aereo per effettuare una chiamata."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Disattiva la modalità aereo o connettiti a una rete wireless per effettuare una chiamata."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefono surriscaldato"</b>\n\n"Impossibile completare la chiamata. Riprova quando il telefono si sarà raffreddato.\n\nPuoi comunque effettuare chiamate di emergenza."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Per effettuare chiamate non di emergenza, esci dalla modalità di richiamata di emergenza."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Non registrato sulla rete."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Rete cellulare non disponibile."</string>
@@ -638,12 +637,12 @@
<string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Connessione dati disabilitata"</string>
<string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"Nessuna connessione dati fino alle ore <xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
<plurals name="alert_dialog_exit_ecm" formatted="false" msgid="5425906903766466743">
- <item quantity="one">The phone will be in Emergency Callback mode for <xliff:g id="COUNT_1">%s</xliff:g> minutes. While in this mode no applications using a data connection can be used. Do you want to exit now?</item>
<item quantity="other">Il telefono sarà in modalità Richiamata di emergenza per <xliff:g id="COUNT_1">%s</xliff:g> minuti. In questa modalità non è possibile utilizzare applicazioni che impiegano una connessione dati. Vuoi uscire ora?</item>
+ <item quantity="one">Il telefono sarà in modalità Richiamata di emergenza per <xliff:g id="COUNT_0">%s</xliff:g> minuto. In questa modalità non è possibile utilizzare app che impiegano una connessione dati. Vuoi uscire ora?</item>
</plurals>
<plurals name="alert_dialog_not_avaialble_in_ecm" formatted="false" msgid="1152682528741457004">
- <item quantity="one">The selected action isn\'t available while in the Emergency Callback mode. The phone will be in this mode for <xliff:g id="COUNT_1">%s</xliff:g> minutes. Do you want to exit now?</item>
<item quantity="other">L\'azione selezionata non è disponibile in modalità Richiamata di emergenza. Il telefono sarà in questa modalità per <xliff:g id="COUNT_1">%s</xliff:g> minuti. Vuoi uscire ora?</item>
+ <item quantity="one">L\'azione selezionata non è disponibile in modalità Richiamata di emergenza. Il telefono sarà in questa modalità per <xliff:g id="COUNT_0">%s</xliff:g> minuto. Vuoi uscire ora?</item>
</plurals>
<string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"L\'azione selezionata non è disponibile in modalità di chiamata di emergenza."</string>
<string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"Uscita dalla modalità di richiamata di emergenza"</string>
@@ -653,8 +652,8 @@
<string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"Il telefono è in modalità di richiamata di emergenza"</string>
<string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"Fino alle ore <xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
<plurals name="alert_dialog_exit_ecm_without_data_restriction_hint" formatted="false" msgid="6477733043040328640">
- <item quantity="one">Il telefono sarà in modalità di richiamata di emergenza per <xliff:g id="COUNT_1">%s</xliff:g> minuti.\nVuoi uscire ora?</item>
<item quantity="other">Il telefono sarà in modalità di richiamata di emergenza per <xliff:g id="COUNT_1">%s</xliff:g> minuti.\nVuoi uscire ora?</item>
+ <item quantity="one">Il telefono sarà in modalità di richiamata di emergenza per <xliff:g id="COUNT_0">%s</xliff:g> minuto.\nVuoi uscire ora?</item>
</plurals>
<string name="voicemail_provider" msgid="4158806657253745294">"Servizio"</string>
<string name="voicemail_settings" msgid="4451045613238972776">"Configurazione"</string>
@@ -668,7 +667,7 @@
<string name="description_dial_button" msgid="8614631902795087259">"componi"</string>
<string name="description_dialpad_button" msgid="7395114120463883623">"mostra tastierino"</string>
<string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"Tastierino di emergenza"</string>
- <string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"Lettura della segreteria"</string>
+ <string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"Leggi la segreteria"</string>
<string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"Imposta PIN"</string>
<string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"Cambia PIN"</string>
<string name="preference_category_ringtone" msgid="8787281191375434976">"Suoneria e vibrazione"</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR disponibile:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Stato NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frequenza NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Configurazione network slicing:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Imposta modalità banda radio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Caricamento elenco bande…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Imposta"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 5fbf20d..b5b2f75 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -31,29 +31,29 @@
<string name="ussdRunning" msgid="1163586813106772717">"קוד USSD פועל…"</string>
<string name="mmiCancelled" msgid="5339191899200678272">"קוד MMI מבוטל"</string>
<string name="cancel" msgid="8984206397635155197">"ביטול"</string>
- <string name="enter_input" msgid="6193628663039958990">"הודעת USSD חייבת להיות באורך של <xliff:g id="MIN_LEN">%1$d</xliff:g> עד <xliff:g id="MAX_LEN">%2$d</xliff:g> תווים. יש לנסות שוב."</string>
+ <string name="enter_input" msgid="6193628663039958990">"הודעת USSD חייבת להיות באורך של <xliff:g id="MIN_LEN">%1$d</xliff:g> עד <xliff:g id="MAX_LEN">%2$d</xliff:g> תווים. נסה שוב."</string>
<string name="manageConferenceLabel" msgid="8415044818156353233">"ניהול שיחת ועידה"</string>
<string name="ok" msgid="7818974223666140165">"אישור"</string>
<string name="audio_mode_speaker" msgid="243689733219312360">"רמקול"</string>
<string name="audio_mode_earpiece" msgid="2823700267171134282">"אוזניה"</string>
- <string name="audio_mode_wired_headset" msgid="5028010823105817443">"אוזניות חוטיות"</string>
+ <string name="audio_mode_wired_headset" msgid="5028010823105817443">"אוזניות קוויות"</string>
<string name="audio_mode_bluetooth" msgid="25732183428018809">"Bluetooth"</string>
<string name="wait_prompt_str" msgid="5136209532150094910">"לשלוח את הצלילים הבאים?\n"</string>
- <string name="pause_prompt_str" msgid="2308897950360272213">"שליחת צלילים מתבצעת\n"</string>
+ <string name="pause_prompt_str" msgid="2308897950360272213">"שולח צלילים\n"</string>
<string name="send_button" msgid="5070379600779031932">"שליחה"</string>
<string name="pause_prompt_yes" msgid="8184132073048369575">"כן"</string>
<string name="pause_prompt_no" msgid="2145264674774138579">"לא"</string>
<string name="wild_prompt_str" msgid="5858910969703305375">"החלפת התו הכללי ב"</string>
<string name="no_vm_number" msgid="6623853880546176930">"חסר מספר של דואר קולי"</string>
<string name="no_vm_number_msg" msgid="5165161462411372504">"בכרטיס ה-SIM לא מאוחסן מספר של דואר קולי."</string>
- <string name="add_vm_number_str" msgid="7368168964435881637">"הוספת מספר"</string>
+ <string name="add_vm_number_str" msgid="7368168964435881637">"הוסף מספר"</string>
<string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"רק המשתמש הראשי יכול לשנות את ההגדרות של הדואר הקולי."</string>
- <string name="puk_unlocked" msgid="4627340655215746511">"בוטלה החסימה של כרטיס SIM. ביטול חסימת הטלפון מתבצעת..."</string>
- <string name="label_ndp" msgid="7617392683877410341">"קוד אימות לביטול נעילה של רשת SIM"</string>
+ <string name="puk_unlocked" msgid="4627340655215746511">"בוטלה החסימה של כרטיס SIM. מבטל את חסימת הטלפון..."</string>
+ <string name="label_ndp" msgid="7617392683877410341">"PIN לביטול נעילה של רשת SIM"</string>
<string name="label_phoneid" msgid="8775611434123577808">"כרטיס ה-SIM נעול על ידי הספק הסלולרי"</string>
- <string name="sim_ndp_unlock_text" msgid="7737338355451978338">"ביטול נעילה"</string>
- <string name="sim_ndp_dismiss_text" msgid="89667342248929777">"סגירה"</string>
- <string name="requesting_unlock" msgid="930512210309437741">"בקשה לביטול נעילת הרשת מתבצעת..."</string>
+ <string name="sim_ndp_unlock_text" msgid="7737338355451978338">"בטל נעילה"</string>
+ <string name="sim_ndp_dismiss_text" msgid="89667342248929777">"סגור"</string>
+ <string name="requesting_unlock" msgid="930512210309437741">"מבקש ביטול נעילת רשת..."</string>
<string name="unlock_failed" msgid="7103543844840661366">"הבקשה לביטול נעילת הרשת נכשלה."</string>
<string name="unlock_success" msgid="32681089371067565">"ביטול נעילת הרשת התבצע בהצלחה."</string>
<string name="mobile_network_settings_not_available" msgid="8678168497517090039">"הגדרות של רשת סלולרית אינן זמינות עבור המשתמש הזה"</string>
@@ -64,17 +64,17 @@
<string name="apn_settings" msgid="1978652203074756623">"שמות של נקודות גישה"</string>
<string name="settings_label" msgid="9101778088412567956">"הגדרות רשת"</string>
<string name="phone_accounts" msgid="1216879437523774604">"חשבונות להתקשרות"</string>
- <string name="phone_accounts_make_calls_with" msgid="16747814788918145">"ביצוע שיחות באמצעות"</string>
- <string name="phone_accounts_make_sip_calls_with" msgid="4691221006731847255">"ביצוע שיחות SIP באמצעות"</string>
- <string name="phone_accounts_ask_every_time" msgid="6192347582666047168">"יש לשאול לפני ביצוע"</string>
+ <string name="phone_accounts_make_calls_with" msgid="16747814788918145">"בצע שיחות באמצעות"</string>
+ <string name="phone_accounts_make_sip_calls_with" msgid="4691221006731847255">"בצע שיחות SIP באמצעות"</string>
+ <string name="phone_accounts_ask_every_time" msgid="6192347582666047168">"שאל לפני ביצוע"</string>
<string name="phone_accounts_default_account_label" msgid="5107598881335931101">"אין רשתות זמינות"</string>
<string name="phone_accounts_settings_header" msgid="6296501692964706536">"הגדרות"</string>
- <string name="phone_accounts_choose_accounts" msgid="4748805293314824974">"בחירת חשבונות"</string>
+ <string name="phone_accounts_choose_accounts" msgid="4748805293314824974">"בחר חשבונות"</string>
<string name="phone_accounts_selection_header" msgid="2945830843104108440">"חשבונות טלפון"</string>
- <string name="phone_accounts_add_sip_account" msgid="1437634802033309305">"הוספת חשבון SIP"</string>
- <string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"קביעת הגדרות החשבון"</string>
+ <string name="phone_accounts_add_sip_account" msgid="1437634802033309305">"הוסף חשבון SIP"</string>
+ <string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"קבע את הגדרות החשבון"</string>
<string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"כל החשבונות לביצוע שיחות"</string>
- <string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"בחירת החשבונות שיכולים להתקשר"</string>
+ <string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"בחר אילו חשבונות יכולים להתקשר"</string>
<string name="wifi_calling" msgid="3650509202851355742">"שיחות ב-Wi-Fi"</string>
<string name="connection_service_default_label" msgid="7332739049855715584">"שירות חיבור מובנה"</string>
<string name="voicemail" msgid="7697769412804195032">"דואר קולי"</string>
@@ -93,7 +93,7 @@
<string name="sum_cdma_call_settings" msgid="3185825305136993636">"הגדרות שיחה נוספות של CDMA בלבד"</string>
<string name="labelNwService" msgid="6015891883487125120">"הגדרות שירות רשת"</string>
<string name="labelCallerId" msgid="2090540744550903172">"שיחה מזוהה"</string>
- <string name="sum_loading_settings" msgid="434063780286688775">"טעינת ההגדרות מתבצעת..."</string>
+ <string name="sum_loading_settings" msgid="434063780286688775">"טוען הגדרות..."</string>
<string name="sum_hide_caller_id" msgid="131100328602371933">"המספר מוסתר בשיחות יוצאות"</string>
<string name="sum_show_caller_id" msgid="3571854755324664591">"מספר המוצג בשיחות יוצאות"</string>
<string name="sum_default_caller_id" msgid="1767070797135682959">"שימוש בהגדרות ברירת המחדל של המפעיל כדי להציג את המספר שלי בשיחות יוצאות"</string>
@@ -103,25 +103,25 @@
<string name="call_forwarding_settings" msgid="8937130467468257671">"הגדרות של העברת שיחות"</string>
<string name="call_forwarding_settings_with_label" msgid="2345432813399564272">"הגדרות של העברת שיחות (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="labelCF" msgid="3578719437928476078">"העברת שיחות"</string>
- <string name="labelCFU" msgid="8870170873036279706">"העברה תמיד"</string>
- <string name="messageCFU" msgid="1361806450979589744">"יש להשתמש תמיד במספר זה"</string>
- <string name="sum_cfu_enabled_indicator" msgid="9030139213402432776">"כל השיחות מועברות"</string>
- <string name="sum_cfu_enabled" msgid="5806923046528144526">"כל השיחות מועברות אל <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
+ <string name="labelCFU" msgid="8870170873036279706">"העבר תמיד"</string>
+ <string name="messageCFU" msgid="1361806450979589744">"השתמש תמיד במספר זה"</string>
+ <string name="sum_cfu_enabled_indicator" msgid="9030139213402432776">"מעביר את כל השיחות"</string>
+ <string name="sum_cfu_enabled" msgid="5806923046528144526">"מעביר את כל השיחות אל <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfu_enabled_no_number" msgid="7287752761743377930">"המספר לא זמין"</string>
<string name="sum_cfu_disabled" msgid="5010617134210809853">"כבוי"</string>
<string name="labelCFB" msgid="615265213360512768">"כאשר לא פנוי"</string>
<string name="messageCFB" msgid="1958017270393563388">"מספר כאשר לא פנוי"</string>
- <string name="sum_cfb_enabled" msgid="332037613072049492">"העברה אל <xliff:g id="PHONENUMBER">{0}</xliff:g> מתבצעת"</string>
+ <string name="sum_cfb_enabled" msgid="332037613072049492">"מעביר אל <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfb_disabled" msgid="3589913334164866035">"כבוי"</string>
<string name="disable_cfb_forbidden" msgid="4831494744351633961">"הספק שלך אינו תומך בהשבתה של העברת שיחות כאשר הטלפון תפוס."</string>
<string name="labelCFNRy" msgid="3403533792248457946">"כאשר אין מענה"</string>
<string name="messageCFNRy" msgid="7644434155765359009">"מספר לחיוג כשאין מענה"</string>
- <string name="sum_cfnry_enabled" msgid="3000500837493854799">"העברה אל <xliff:g id="PHONENUMBER">{0}</xliff:g> מתבצעת"</string>
+ <string name="sum_cfnry_enabled" msgid="3000500837493854799">"מעביר אל <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfnry_disabled" msgid="1990563512406017880">"כבוי"</string>
<string name="disable_cfnry_forbidden" msgid="3174731413216550689">"הספק אינו תומך בהשבתה של העברת שיחות כאשר אין מענה בטלפון."</string>
<string name="labelCFNRc" msgid="4163399350778066013">"כאשר לא נגיש"</string>
<string name="messageCFNRc" msgid="6980340731313007250">"המספר לחיוג כשלא ניתן להשיג"</string>
- <string name="sum_cfnrc_enabled" msgid="1799069234006073477">"העברה אל <xliff:g id="PHONENUMBER">{0}</xliff:g> מתבצעת"</string>
+ <string name="sum_cfnrc_enabled" msgid="1799069234006073477">"מעביר אל <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfnrc_disabled" msgid="739289696796917683">"כבוי"</string>
<string name="disable_cfnrc_forbidden" msgid="775348748084726890">"הספק שלך לא תומך בהשבתה של העברת שיחות כאשר הטלפון כבוי."</string>
<string name="registration_cf_forbidden" msgid="4386482610771190420">"הספק הסלולרי שלך לא תומך בהעברת שיחות."</string>
@@ -135,9 +135,9 @@
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"רק מנהל המערכת יכול לשנות הגדרות שיחה."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"הגדרות (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"שגיאה בהגדרות שיחה"</string>
- <string name="reading_settings" msgid="1605904432450871183">"קריאת ההגדרות מתבצעת…"</string>
- <string name="updating_settings" msgid="3650396734816028808">"עדכון ההגדרות מתבצע..."</string>
- <string name="reverting_settings" msgid="7378668837291012205">"אחזור ההגדרות הקודמות מתבצע…"</string>
+ <string name="reading_settings" msgid="1605904432450871183">"קורא הגדרות…"</string>
+ <string name="updating_settings" msgid="3650396734816028808">"מעדכן הגדרות..."</string>
+ <string name="reverting_settings" msgid="7378668837291012205">"מאחזר הגדרות הקודמות…"</string>
<string name="response_error" msgid="3904481964024543330">"תגובה לא צפויה מהרשת."</string>
<string name="exception_error" msgid="330994460090467">"שגיאת רשת או שגיאה של כרטיס SIM."</string>
<string name="stk_cc_ss_to_dial_error" msgid="5147693491690618704">"בקשת SS שונתה לשיחה רגילה"</string>
@@ -145,41 +145,41 @@
<string name="stk_cc_ss_to_ss_error" msgid="8297155544652134278">"היה שינוי לבקשת SS חדשה"</string>
<string name="stk_cc_ss_to_dial_video_error" msgid="4255261231466032505">"בקשת SS שונתה לשיחת וידאו"</string>
<string name="fdn_check_failure" msgid="1833769746374185247">"הגדרת מספרי החיוג הקבועים של אפליקציית הטלפון שלך מופעלת. כתוצאה מכך, חלק מהתכונות הקשורות לשיחות לא פועלות."</string>
- <string name="radio_off_error" msgid="8321564164914232181">"יש להפעיל את הרדיו לפני ההצגה של הגדרות אלה."</string>
+ <string name="radio_off_error" msgid="8321564164914232181">"הפעל את הרדיו לפני ההצגה של הגדרות אלה."</string>
<string name="close_dialog" msgid="1074977476136119408">"אישור"</string>
<string name="enable" msgid="2636552299455477603">"הפעלה"</string>
- <string name="disable" msgid="1122698860799462116">"כיבוי"</string>
- <string name="change_num" msgid="6982164494063109334">"עדכון"</string>
+ <string name="disable" msgid="1122698860799462116">"כבה"</string>
+ <string name="change_num" msgid="6982164494063109334">"עדכן"</string>
<string-array name="clir_display_values">
<item msgid="8477364191403806960">"רשת ברירת מחדל"</item>
- <item msgid="6813323051965618926">"הסתרת מספר"</item>
- <item msgid="9150034130629852635">"הצגת מספר"</item>
+ <item msgid="6813323051965618926">"הסתר מספר"</item>
+ <item msgid="9150034130629852635">"הצג מספר"</item>
</string-array>
<string name="vm_changed" msgid="4739599044379692505">"המספר של הדואר הקולי השתנה."</string>
- <string name="vm_change_failed" msgid="7877733929455763566">"לא ניתן לשנות את מספר הגישה לדואר הקולי.\nאם הבעיה נמשכת, יש לפנות לספק."</string>
- <string name="fw_change_failed" msgid="9179241823460192148">"לא ניתן לשנות את מספר ההעברה.\nאם הבעיה נמשכת, יש לפנות לספק."</string>
+ <string name="vm_change_failed" msgid="7877733929455763566">"לא ניתן לשנות את מספר הגישה לדואר הקולי.\nאם הבעיה נמשכת, פנה לספק."</string>
+ <string name="fw_change_failed" msgid="9179241823460192148">"לא ניתן לשנות את מספר ההעברה.\nאם הבעיה נמשכת, פנה לספק."</string>
<string name="fw_get_in_vm_failed" msgid="2432678237218183844">"לא ניתן לאחזר ולשמור את הגדרות מספר ההעברה הנוכחי.\nלעבור בכל זאת לספק החדש?"</string>
<string name="no_change" msgid="3737264882821031892">"לא בוצעו שינויים."</string>
- <string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"בחירת שירות דואר קולי"</string>
+ <string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"בחר שירות של דואר קולי"</string>
<string name="voicemail_default" msgid="6427575113775462077">"הספק שלך"</string>
<string name="vm_change_pin_old_pin" msgid="7154951790929009241">"קוד גישה ישן"</string>
<string name="vm_change_pin_new_pin" msgid="2656200418481288069">"קוד גישה חדש"</string>
- <string name="vm_change_pin_progress_message" msgid="626015184502739044">"יש להמתין."</string>
+ <string name="vm_change_pin_progress_message" msgid="626015184502739044">"אנא המתן."</string>
<string name="vm_change_pin_error_too_short" msgid="1789139338449945483">"קוד הגישה החדש קצר מדי."</string>
<string name="vm_change_pin_error_too_long" msgid="3634907034310018954">"קוד הגישה החדש ארוך מדי."</string>
<string name="vm_change_pin_error_too_weak" msgid="8581892952627885719">"קוד הגישה החדש חלש מדי. בסיסמה חזקה אסור שיהיו ספרות ברצף מספרי או ספרות שחוזרות על עצמן."</string>
<string name="vm_change_pin_error_mismatch" msgid="5364847280026257331">"קוד הגישה הישן אינו תואם."</string>
<string name="vm_change_pin_error_invalid" msgid="5230002671175580674">"קוד הגישה החדש מכיל תווים לא חוקיים."</string>
<string name="vm_change_pin_error_system_error" msgid="9116483527909681791">"לא ניתן לשנות את קוד הגישה"</string>
- <string name="vvm_unsupported_message_format" msgid="4206402558577739713">"סוג ההודעה לא נתמך. יש להתקשר למספר <xliff:g id="NUMBER">%s</xliff:g> כדי להאזין לה."</string>
+ <string name="vvm_unsupported_message_format" msgid="4206402558577739713">"סוג ההודעה לא נתמך. התקשר למספר <xliff:g id="NUMBER">%s</xliff:g> כדי להאזין לה."</string>
<string name="network_settings_title" msgid="7560807107123171541">"רשת סלולרית"</string>
<string name="label_available" msgid="1316084116670821258">"רשתות זמינות"</string>
- <string name="load_networks_progress" msgid="4051433047717401683">"החיפוש מתבצע..."</string>
+ <string name="load_networks_progress" msgid="4051433047717401683">"מחפש..."</string>
<string name="empty_networks_list" msgid="9216418268008582342">"לא נמצאו רשתות."</string>
<string name="network_query_error" msgid="3862515805115145124">"לא נמצאו רשתות. אפשר לנסות שוב."</string>
- <string name="register_on_network" msgid="4194770527833960423">"ההרשמה ב-<xliff:g id="NETWORK">%s</xliff:g> מתבצעת…"</string>
+ <string name="register_on_network" msgid="4194770527833960423">"נרשם ב-<xliff:g id="NETWORK">%s</xliff:g>…"</string>
<string name="not_allowed" msgid="8541221928746104798">"כרטיס ה-SIM לא מאפשר חיבור לרשת זו."</string>
- <string name="connect_later" msgid="1950138106010005425">"לא ניתן להתחבר לרשת זו כעת. יש לנסות שוב מאוחר יותר."</string>
+ <string name="connect_later" msgid="1950138106010005425">"לא ניתן להתחבר לרשת זו כעת. נסה שוב מאוחר יותר."</string>
<string name="registration_done" msgid="5337407023566953292">"רשום ברשת."</string>
<string name="already_auto" msgid="8607068290733079336">"הבחירה האוטומטית כבר מופעלת."</string>
<string name="select_automatically" msgid="779750291257872651">"בחירה אוטומטית של הרשת"</string>
@@ -187,7 +187,7 @@
<string name="network_select_title" msgid="4117305053881611988">"רשת"</string>
<string name="register_automatically" msgid="3907580547590554834">"רישום אוטומטי..."</string>
<string name="preferred_network_mode_title" msgid="5253395265169539830">"סוג רשת מועדף"</string>
- <string name="preferred_network_mode_summary" msgid="3787989000044330064">"שינוי מצב ההפעלה של הרשת"</string>
+ <string name="preferred_network_mode_summary" msgid="3787989000044330064">"שנה את מצב ההפעלה של הרשת"</string>
<string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"סוג רשת מועדף"</string>
<string name="forbidden_network" msgid="5081729819561333023">"(אסור)"</string>
<string name="choose_network_title" msgid="5335832663422653082">"בחירת רשת"</string>
@@ -239,25 +239,25 @@
<string name="preferred_network_mode_cdma_evdo_summary" msgid="3629440709757307077">"מצב רשת מועדפת: CDMA / EvDo"</string>
<string name="preferred_network_mode_cdma_only_summary" msgid="211164451887102568">"מצב רשת מועדפת: CDMA בלבד"</string>
<string name="preferred_network_mode_evdo_only_summary" msgid="939116631952132878">"מצב רשת מועדפת: EvDo בלבד"</string>
- <string name="preferred_network_mode_cdma_evdo_gsm_wcdma_summary" msgid="7891131456022601976">"מצב רשת מועדפת: CDMA/EvDo/GSM/WCDMA"</string>
- <string name="preferred_network_mode_lte_summary" msgid="8050539466545797149">"מצב רשת מועדפת: LTE"</string>
- <string name="preferred_network_mode_lte_gsm_wcdma_summary" msgid="2217794334331254936">"מצב רשת מועדפת: GSM/WCDMA/LTE"</string>
- <string name="preferred_network_mode_lte_cdma_evdo_summary" msgid="5559198623419981805">"מצב רשת מועדפת: CDMA+LTE/EVDO"</string>
+ <string name="preferred_network_mode_cdma_evdo_gsm_wcdma_summary" msgid="7891131456022601976">"מצב רשת מועדף: CDMA/EvDo/GSM/WCDMA"</string>
+ <string name="preferred_network_mode_lte_summary" msgid="8050539466545797149">"מצב רשת מועדף: LTE"</string>
+ <string name="preferred_network_mode_lte_gsm_wcdma_summary" msgid="2217794334331254936">"מצב רשת מועדף: GSM/WCDMA/LTE"</string>
+ <string name="preferred_network_mode_lte_cdma_evdo_summary" msgid="5559198623419981805">"מצב רשת מועדף: CDMA+LTE/EVDO"</string>
<string name="preferred_network_mode_lte_cdma_evdo_gsm_wcdma_summary" msgid="6707224437925495615">"מצב רשת מועדפת: LTE/CDMA/EvDo/GSM/WCDMA"</string>
<string name="preferred_network_mode_global_summary" msgid="3847086258439582411">"מצב רשת מועדף: גלובלי"</string>
- <string name="preferred_network_mode_lte_wcdma_summary" msgid="7001804022020813865">"מצב רשת מועדפת: LTE / WCDMA"</string>
- <string name="preferred_network_mode_lte_gsm_umts_summary" msgid="6484203890156282179">"מצב רשת מועדפת: LTE / GSM / UMTS"</string>
+ <string name="preferred_network_mode_lte_wcdma_summary" msgid="7001804022020813865">"מצב רשת מועדף: LTE / WCDMA"</string>
+ <string name="preferred_network_mode_lte_gsm_umts_summary" msgid="6484203890156282179">"מצב רשת מועדף: LTE / GSM / UMTS"</string>
<string name="preferred_network_mode_lte_cdma_summary" msgid="8187929456614068518">"מצב רשת מועדפת: LTE / CDMA"</string>
- <string name="preferred_network_mode_tdscdma_summary" msgid="3602127224234207206">"מצב רשת מועדפת: TDSCDMA"</string>
- <string name="preferred_network_mode_tdscdma_wcdma_summary" msgid="7076968749402201123">"מצב רשת מועדפת: TDSCDMA / WCDMA"</string>
- <string name="preferred_network_mode_lte_tdscdma_summary" msgid="3001058390866953624">"מצב רשת מועדפת: LTE / TDSCDMA"</string>
- <string name="preferred_network_mode_tdscdma_gsm_summary" msgid="1716983444872465309">"מצב רשת מועדפת: TDSCDMA / GSM"</string>
- <string name="preferred_network_mode_lte_tdscdma_gsm_summary" msgid="1349057007230669585">"מצב רשת מועדפת: LTE/GSM/TDSCDMA"</string>
- <string name="preferred_network_mode_tdscdma_gsm_wcdma_summary" msgid="2092262901885164194">"מצב רשת מועדפת: TDSCDMA/GSM/WCDMA"</string>
- <string name="preferred_network_mode_lte_tdscdma_wcdma_summary" msgid="56422129430744466">"מצב רשת מועדפת: LTE/TDSCDMA/WCDMA"</string>
- <string name="preferred_network_mode_lte_tdscdma_gsm_wcdma_summary" msgid="2993923113350341106">"מצב רשת מועדפת: LTE/TDSCDMA/GSM/WCDMA"</string>
- <string name="preferred_network_mode_tdscdma_cdma_evdo_gsm_wcdma_summary" msgid="2779089629254220257">"מצב רשת מועדפת: TDSCDMA/CDMA/EvDo/GSM/WCDMA"</string>
- <string name="preferred_network_mode_lte_tdscdma_cdma_evdo_gsm_wcdma_summary" msgid="9065672185435798587">"מצב רשת מועדפת: LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA"</string>
+ <string name="preferred_network_mode_tdscdma_summary" msgid="3602127224234207206">"מצב רשת מועדף: TDSCDMA"</string>
+ <string name="preferred_network_mode_tdscdma_wcdma_summary" msgid="7076968749402201123">"מצב רשת מועדף: TDSCDMA / WCDMA"</string>
+ <string name="preferred_network_mode_lte_tdscdma_summary" msgid="3001058390866953624">"מצב רשת מועדף: LTE / TDSCDMA"</string>
+ <string name="preferred_network_mode_tdscdma_gsm_summary" msgid="1716983444872465309">"מצב רשת מועדף: TDSCDMA / GSM"</string>
+ <string name="preferred_network_mode_lte_tdscdma_gsm_summary" msgid="1349057007230669585">"מצב רשת מועדף: LTE/GSM/TDSCDMA"</string>
+ <string name="preferred_network_mode_tdscdma_gsm_wcdma_summary" msgid="2092262901885164194">"מצב רשת מועדף: TDSCDMA/GSM/WCDMA"</string>
+ <string name="preferred_network_mode_lte_tdscdma_wcdma_summary" msgid="56422129430744466">"מצב רשת מועדף: LTE/TDSCDMA/WCDMA"</string>
+ <string name="preferred_network_mode_lte_tdscdma_gsm_wcdma_summary" msgid="2993923113350341106">"מצב רשת מועדף: LTE/TDSCDMA/GSM/WCDMA"</string>
+ <string name="preferred_network_mode_tdscdma_cdma_evdo_gsm_wcdma_summary" msgid="2779089629254220257">"מצב רשת מועדף: TDSCDMA/CDMA/EvDo/GSM/WCDMA"</string>
+ <string name="preferred_network_mode_lte_tdscdma_cdma_evdo_gsm_wcdma_summary" msgid="9065672185435798587">"מצב רשת מועדף: LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA"</string>
<string name="preferred_network_mode_nr_only_summary" msgid="1467452233297987391">"מצב רשת מועדפת: NR בלבד"</string>
<string name="preferred_network_mode_nr_lte_summary" msgid="5890170406507535976">"מצב רשת מועדפת: NR / LTE"</string>
<string name="preferred_network_mode_nr_lte_cdma_evdo_summary" msgid="5507940227264296616">"מצב רשת מועדפת: NR/LTE/CDMA/EvDo"</string>
@@ -273,17 +273,17 @@
<string name="network_operator_category" msgid="4992217193732304680">"רשת"</string>
<string name="enhanced_4g_lte_mode_title" msgid="4213420368777080540">"מצב 4G LTE משופר"</string>
<!-- no translation found for enhanced_4g_lte_mode_title_variant:0 (7240155150166394308) -->
- <string name="enhanced_4g_lte_mode_summary" msgid="7725708511804143638">"שימוש בשירותי LTE כדי לשפר את הקול ודרכי תקשורת אחרות (מומלץ)"</string>
+ <string name="enhanced_4g_lte_mode_summary" msgid="7725708511804143638">"השתמש בשירותי LTE כדי לשפר את הקול ודרכי תקשורת אחרות (מומלץ)"</string>
<string name="enhanced_4g_lte_mode_summary_o2" msgid="2521108446409016542">"שימוש בשירותי 4G כדי לשפר את הקול ודרכי תקשורת אחרות (מומלץ)"</string>
<!-- no translation found for enhanced_4g_lte_mode_sumary_variant:0 (2943982616649705147) -->
<!-- no translation found for enhanced_4g_lte_mode_sumary_variant:1 (5262249464504131443) -->
<!-- no translation found for enhanced_4g_lte_mode_sumary_variant:2 (6356974241850241718) -->
<string name="data_enabled" msgid="22525832097434368">"נתונים מופעלים"</string>
- <string name="data_enable_summary" msgid="696860063456536557">"התרת שימוש בחבילת הגלישה"</string>
+ <string name="data_enable_summary" msgid="696860063456536557">"התר שימוש בנתונים"</string>
<string name="dialog_alert_title" msgid="5260471806940268478">"זהירות"</string>
<string name="roaming" msgid="1576180772877858949">"נדידה"</string>
- <string name="roaming_enable" msgid="6853685214521494819">"יש להתחבר לשירותי נתונים בעת נדידה"</string>
- <string name="roaming_disable" msgid="8856224638624592681">"יש להתחבר לשירותי נתונים בעת נדידה"</string>
+ <string name="roaming_enable" msgid="6853685214521494819">"התחבר לשירותי נתונים בעת נדידה"</string>
+ <string name="roaming_disable" msgid="8856224638624592681">"התחבר לשירותי נתונים בעת נדידה"</string>
<string name="roaming_reenable_message" msgid="1951802463885727915">"הנדידה מושבתת. אפשר להקיש כדי להפעיל אותה."</string>
<string name="roaming_enabled_message" msgid="9022249120750897">"ייתכנו חיובי נדידה. יש להקיש כדי לשנות."</string>
<string name="roaming_notification_title" msgid="3590348480688047320">"המכשיר התנתק מחבילת הגלישה"</string>
@@ -355,7 +355,7 @@
<string name="international_enable" msgid="8943466745792690340">"חדשות פנים מופעלות"</string>
<string name="international_disable" msgid="4803498658100318265">"חדשות בינלאומיות מושבתות"</string>
<string name="list_language_title" msgid="1850167908665485738">"שפה"</string>
- <string name="list_language_summary" msgid="7921756070782277559">"בחירת שפת החדשות"</string>
+ <string name="list_language_summary" msgid="7921756070782277559">"בחר את שפת החדשות"</string>
<string-array name="list_language_entries">
<item msgid="2347238508726934281">"אנגלית"</item>
<item msgid="5172468397620875174">"צרפתית"</item>
@@ -416,7 +416,7 @@
<string name="network_4G" msgid="6800527815504223913">"4G (מומלץ)"</string>
<string name="network_global" msgid="3289646154407617631">"גלובלי"</string>
<string name="cdma_system_select_title" msgid="614165233552656431">"בחירת מערכת"</string>
- <string name="cdma_system_select_summary" msgid="3840420390242060407">"שינוי מצב נדידת CDMA"</string>
+ <string name="cdma_system_select_summary" msgid="3840420390242060407">"שנה את מצב נדידת CDMA"</string>
<string name="cdma_system_select_dialogtitle" msgid="5524639510676501802">"בחירת מערכת"</string>
<string-array name="cdma_system_select_choices">
<item msgid="462340042928284921">"בית בלבד"</item>
@@ -433,8 +433,8 @@
<item msgid="2953825013895327785">"0"</item>
<item msgid="7970797749269738435">"1"</item>
</string-array>
- <string name="cdma_activate_device" msgid="5914720276140097632">"הפעלת המכשיר"</string>
- <string name="cdma_lte_data_service" msgid="359786441782404562">"הגדרת שירות נתונים"</string>
+ <string name="cdma_activate_device" msgid="5914720276140097632">"הפעל מכשיר"</string>
+ <string name="cdma_lte_data_service" msgid="359786441782404562">"הגדר שירות נתונים"</string>
<string name="carrier_settings_title" msgid="6292869148169850220">"הגדרות ספק"</string>
<string name="fdn" msgid="2545904344666098749">"מספרי חיוג קבועים"</string>
<string name="fdn_with_label" msgid="6412087553365709494">"מספרי חיוג קבועים (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
@@ -445,7 +445,7 @@
<string name="fdn_disabled" msgid="6696468878037736600">"מספרי חיוג קבועים מושבתים"</string>
<string name="enable_fdn" msgid="4830555730418033723">"הפעלת מספרי חיוג קבועים"</string>
<string name="disable_fdn" msgid="3918794950264647541">"השבתת מספרי חיוג קבועים"</string>
- <string name="change_pin2" msgid="3110844547237754871">"שינוי קוד אימות 2"</string>
+ <string name="change_pin2" msgid="3110844547237754871">"שינוי PIN2"</string>
<string name="enable_fdn_ok" msgid="5080925177369329827">"השבת מספרי חיוג קבועים"</string>
<string name="disable_fdn_ok" msgid="3745475926874838676">"הפעלה של מספרי חיוג קבועים"</string>
<string name="sum_fdn" msgid="6152246141642323582">"ניהול מספרי חיוג קבועים"</string>
@@ -454,97 +454,96 @@
<string name="voice_privacy" msgid="7346935172372181951">"פרטיות קול"</string>
<string name="voice_privacy_summary" msgid="3556460926168473346">"הפעלת מצב פרטיות משופרת"</string>
<string name="tty_mode_option_title" msgid="3843817710032641703">"מצב TTY"</string>
- <string name="tty_mode_option_summary" msgid="4770510287236494371">"הגדרת מצב TTY"</string>
+ <string name="tty_mode_option_summary" msgid="4770510287236494371">"הגדר מצב TTY"</string>
<string name="auto_retry_mode_title" msgid="2985801935424422340">"ניסיון חוזר אוטומטי"</string>
<string name="auto_retry_mode_summary" msgid="2863919925349511402">"הפעלת מצב \'ניסיון חוזר\'."</string>
<string name="tty_mode_not_allowed_video_call" msgid="6551976083652752815">"שינוי מצב TTY אינו מותר במהלך שיחת וידאו"</string>
- <string name="menu_add" msgid="5616487894975773141">"הוספת איש קשר"</string>
- <string name="menu_edit" msgid="3593856941552460706">"עריכת איש קשר"</string>
- <string name="menu_delete" msgid="6326861853830546488">"מחיקת איש קשר"</string>
+ <string name="menu_add" msgid="5616487894975773141">"הוסף איש קשר"</string>
+ <string name="menu_edit" msgid="3593856941552460706">"ערוך איש קשר"</string>
+ <string name="menu_delete" msgid="6326861853830546488">"מחק איש קשר"</string>
<string name="menu_dial" msgid="4178537318419450012">"חיוג לאיש הקשר"</string>
- <string name="get_pin2" msgid="4221654606863196332">"יש להקליד קוד אימות 2"</string>
+ <string name="get_pin2" msgid="4221654606863196332">"הקלד PIN2"</string>
<string name="name" msgid="1347432469852527784">"שם"</string>
<string name="number" msgid="1564053487748491000">"מספר"</string>
- <string name="save" msgid="983805790346099749">"שמירה"</string>
- <string name="add_fdn_contact" msgid="1169713422306640887">"הוספת מספר חיוג קבוע"</string>
- <string name="adding_fdn_contact" msgid="3112531600824361259">"הוספת מספר חיוג קבוע מתבצעת..."</string>
+ <string name="save" msgid="983805790346099749">"שמור"</string>
+ <string name="add_fdn_contact" msgid="1169713422306640887">"הוסף מספר חיוג קבוע"</string>
+ <string name="adding_fdn_contact" msgid="3112531600824361259">"מוסיף מספר חיוג קבוע..."</string>
<string name="fdn_contact_added" msgid="2840016151693394596">"מספר חיוג קבוע נוסף."</string>
- <string name="edit_fdn_contact" msgid="6030829994819587408">"עריכת מספר חיוג קבוע"</string>
- <string name="updating_fdn_contact" msgid="6989341376868227150">"עדכון מספר החיוג הקבוע מתבצע..."</string>
+ <string name="edit_fdn_contact" msgid="6030829994819587408">"ערוך מספר חיוג קבוע"</string>
+ <string name="updating_fdn_contact" msgid="6989341376868227150">"מעדכן מספר חיוג קבוע..."</string>
<string name="fdn_contact_updated" msgid="6876330243323118937">"מספר חיוג קבוע עודכן."</string>
- <string name="delete_fdn_contact" msgid="7027405651994507077">"מחיקת מספר חיוג קבוע"</string>
- <string name="deleting_fdn_contact" msgid="6872320570844460428">"מחיקת מספר חיוג קבוע מתבצעת..."</string>
+ <string name="delete_fdn_contact" msgid="7027405651994507077">"מחק מספר חיוג קבוע"</string>
+ <string name="deleting_fdn_contact" msgid="6872320570844460428">"מוחק מספר חיוג קבוע..."</string>
<string name="fdn_contact_deleted" msgid="1680714996763848838">"מספר חיוג קבוע נמחק."</string>
<string name="pin2_invalid" msgid="2313954262684494442">"רשימת מספרי חיוג קבועים לא עודכנה מכיוון שקוד הגישה שגוי."</string>
<string name="fdn_invalid_number" msgid="9067189814657840439">"מספר ה-FDN לא עודכן כי הוא מכיל יותר מ-<xliff:g id="FDN_NUMBER_LIMIT_LENGTH">%d</xliff:g> ספרות."</string>
<string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"רשימת מספרי החיוג הקבועים לא עודכנה. קוד הגישה היה שגוי או שמספר הטלפון נדחה."</string>
<string name="fdn_failed" msgid="216592346853420250">"פעולת FDN נכשלה."</string>
- <string name="simContacts_emptyLoading" msgid="4989040293858675483">"קריאה מכרטיס SIM מתבצעת…"</string>
+ <string name="simContacts_emptyLoading" msgid="4989040293858675483">"קורא מכרטיס SIM…"</string>
<string name="simContacts_empty" msgid="1135632055473689521">"אין אנשי קשר בכרטיס ה-SIM."</string>
- <string name="simContacts_title" msgid="2714029230160136647">"בחירת אנשי קשר לייבוא"</string>
- <string name="simContacts_airplaneMode" msgid="4654884030631503808">"יש לבטל את מצב טיסה כדי לייבא אנשי קשר מכרטיס ה-SIM."</string>
- <string name="enable_pin" msgid="967674051730845376">"הפעלה/השבתה של קוד האימות של SIM"</string>
- <string name="change_pin" msgid="3657869530942905790">"שינוי קוד אימות של SIM"</string>
- <string name="enter_pin_text" msgid="3182311451978663356">"קוד אימות של SIM:"</string>
- <string name="oldPinLabel" msgid="8618515202411987721">"קוד אימות ישן"</string>
- <string name="newPinLabel" msgid="3585899083055354732">"קוד אימות חדש"</string>
- <string name="confirmPinLabel" msgid="7783531218662473778">"אישור קוד אימות חדש"</string>
- <string name="badPin" msgid="4549286285015892321">"קוד האימות הישן שהקלדת שגוי. יש לנסות שוב."</string>
- <string name="mismatchPin" msgid="1467254768290323845">"קודי האימות שהקלדת לא תואמים. יש לנסות שוב."</string>
- <string name="invalidPin" msgid="7363723429414001979">"יש להקליד קוד אימות שאורכו 4 עד 8 ספרות."</string>
+ <string name="simContacts_title" msgid="2714029230160136647">"בחר אנשי קשר לייבוא"</string>
+ <string name="simContacts_airplaneMode" msgid="4654884030631503808">"בטל את מצב טיסה כדי לייבא אנשי קשר מכרטיס ה-SIM."</string>
+ <string name="enable_pin" msgid="967674051730845376">"הפעלה/השבתה של ה-PIN של SIM"</string>
+ <string name="change_pin" msgid="3657869530942905790">"שנה PIN של SIM"</string>
+ <string name="enter_pin_text" msgid="3182311451978663356">"PIN של SIM:"</string>
+ <string name="oldPinLabel" msgid="8618515202411987721">"PIN ישן"</string>
+ <string name="newPinLabel" msgid="3585899083055354732">"PIN חדש"</string>
+ <string name="confirmPinLabel" msgid="7783531218662473778">"אשר PIN חדש"</string>
+ <string name="badPin" msgid="4549286285015892321">"ה-PIN הישן שהקלדת שגוי. נסה שוב."</string>
+ <string name="mismatchPin" msgid="1467254768290323845">"קודי ה-PIN שהקלדת אינם תואמים. נסה שוב."</string>
+ <string name="invalidPin" msgid="7363723429414001979">"הקלד PIN שאורכו 4 עד 8 ספרות."</string>
<string name="disable_sim_pin" msgid="3112303905548613752">"ניקוי PIN עבור SIM"</string>
- <string name="enable_sim_pin" msgid="445461050748318980">"הגדרת קוד אימות של SIM"</string>
- <string name="enable_in_progress" msgid="4135305985717272592">"הגדרת קוד האימות מתבצעת…"</string>
- <string name="enable_pin_ok" msgid="2877428038280804256">"קוד אימות הוגדר"</string>
- <string name="disable_pin_ok" msgid="888505244389647754">"קוד האימות נמחק"</string>
- <string name="pin_failed" msgid="4527347792881939652">"קוד אימות 2 שגוי"</string>
- <string name="pin_changed" msgid="7291153750090452808">"קוד אימות עודכן"</string>
- <string name="puk_requested" msgid="2061337960609806851">"סיסמה שגויה. קוד האימות נעול כעת. יש להזין PUK."</string>
- <string name="enter_pin2_text" msgid="7266379426804295979">"קוד אימות 2"</string>
- <string name="oldPin2Label" msgid="4648543187859997203">"קוד אימות 2 ישן"</string>
- <string name="newPin2Label" msgid="1840905981784453939">"קוד אימות 2 חדש"</string>
- <string name="confirmPin2Label" msgid="4336025914667593762">"אישור קוד אימות 2 חדש"</string>
- <string name="badPuk2" msgid="6438182906645832235">"PUK2 שגוי. יש לנסות שוב."</string>
- <string name="badPin2" msgid="2760917538643074635">"קוד אימות 2 הישן שגוי. יש לנסות שוב."</string>
- <string name="mismatchPin2" msgid="4952718725266700631">"קודי אימות 2 לא תואמים. יש לנסות שוב."</string>
- <string name="invalidPin2" msgid="6467957903056379343">"יש להזין קוד אימות 2 שאורכו בין 4 ל-8 ספרות."</string>
- <string name="invalidPuk2" msgid="713729511903849544">"יש להזין PUK2 שאורכו 8 ספרות."</string>
- <string name="pin2_changed" msgid="5710551850481287821">"קוד אימות 2 עודכן"</string>
- <string name="label_puk2_code" msgid="2852217004288085562">"הזנת קוד PUK2"</string>
- <string name="fdn_enable_puk2_requested" msgid="5793652792131588041">"סיסמה שגויה. קוד אימות 2 חסום כעת. כדי לנסות שוב, יש לשנות את PIN 2."</string>
- <string name="puk2_requested" msgid="6992374450720307514">"סיסמה שגויה. ה-SIM נעול כעת. יש להזין PUK2."</string>
+ <string name="enable_sim_pin" msgid="445461050748318980">"הגדרת PIN עבור SIM"</string>
+ <string name="enable_in_progress" msgid="4135305985717272592">"מגדיר PIN…"</string>
+ <string name="enable_pin_ok" msgid="2877428038280804256">"PIN הוגדר"</string>
+ <string name="disable_pin_ok" msgid="888505244389647754">"ה-PIN נוקה"</string>
+ <string name="pin_failed" msgid="4527347792881939652">"PIN2 שגוי"</string>
+ <string name="pin_changed" msgid="7291153750090452808">"PIN עודכן"</string>
+ <string name="puk_requested" msgid="2061337960609806851">"סיסמה שגויה. PIN נעול כעת. יש להזין PUK."</string>
+ <string name="enter_pin2_text" msgid="7266379426804295979">"PIN2"</string>
+ <string name="oldPin2Label" msgid="4648543187859997203">"PIN2 ישן"</string>
+ <string name="newPin2Label" msgid="1840905981784453939">"PIN2 חדש"</string>
+ <string name="confirmPin2Label" msgid="4336025914667593762">"אשר PIN2 חדש"</string>
+ <string name="badPuk2" msgid="6438182906645832235">"PUK2 שגוי. נסה שוב."</string>
+ <string name="badPin2" msgid="2760917538643074635">"PIN2 הישן שגוי. נסה שוב."</string>
+ <string name="mismatchPin2" msgid="4952718725266700631">"קודי PIN2 לא תואמים. נסה שוב."</string>
+ <string name="invalidPin2" msgid="6467957903056379343">"הזן PIN2 שאורכו בין 4 ל-8 ספרות."</string>
+ <string name="invalidPuk2" msgid="713729511903849544">"הזן PUK2 שאורכו 8 ספרות."</string>
+ <string name="pin2_changed" msgid="5710551850481287821">"PIN2 עודכן"</string>
+ <string name="label_puk2_code" msgid="2852217004288085562">"הזן קוד PUK2"</string>
+ <string name="fdn_enable_puk2_requested" msgid="5793652792131588041">"סיסמה שגויה. PIN2 חסום כעת. כדי לנסות שוב, יש לשנות את PIN 2."</string>
+ <string name="puk2_requested" msgid="6992374450720307514">"סיסמה שגויה. ה-SIM נעול כעת. הזן PUK2."</string>
<string name="puk2_blocked" msgid="3131139031779319911">"PUK2 נחסם לצמיתות."</string>
<string name="pin2_attempts" msgid="5625178102026453023">\n"נותרו לך עוד <xliff:g id="NUMBER">%d</xliff:g> ניסיונות."</string>
<string name="puk2_locked" msgid="6497760825455461057">"נעילת PUK2. כדי לבטל את הנעילה, צריך לפנות לספק השירות."</string>
- <string name="pin2_unblocked" msgid="4481107908727789303">"קוד אימות 2 אינו חסום עוד"</string>
+ <string name="pin2_unblocked" msgid="4481107908727789303">"PIN2 אינו חסום עוד"</string>
<string name="pin2_error_exception" msgid="8116103864600823641">"שגיאת רשת או כרטיס SIM"</string>
<string name="doneButton" msgid="7371209609238460207">"סיום"</string>
<string name="voicemail_settings_number_label" msgid="1265118640154688162">"המספר של הדואר הקולי"</string>
- <string name="card_title_dialing" msgid="8742182654254431781">"החיוג מתבצע"</string>
- <string name="card_title_redialing" msgid="18130232613559964">"חיוג חוזר מתבצע"</string>
+ <string name="card_title_dialing" msgid="8742182654254431781">"מחייג"</string>
+ <string name="card_title_redialing" msgid="18130232613559964">"מחייג שוב"</string>
<string name="card_title_conf_call" msgid="901197309274457427">"שיחת ועידה"</string>
<string name="card_title_incoming_call" msgid="881424648458792430">"שיחה נכנסת"</string>
<string name="card_title_call_ended" msgid="650223980095026340">"השיחה הסתיימה"</string>
<string name="card_title_on_hold" msgid="9028319436626975207">"בהמתנה"</string>
- <string name="card_title_hanging_up" msgid="814874106866647871">"הניתוק מתבצע"</string>
+ <string name="card_title_hanging_up" msgid="814874106866647871">"מנתק"</string>
<string name="card_title_in_call" msgid="8231896539567594265">"בשיחה"</string>
<string name="notification_voicemail_title" msgid="3932876181831601351">"דואר קולי חדש"</string>
<string name="notification_voicemail_title_count" msgid="2806950319222327082">"דואר קולי חדש (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="5720947141702312537">"חיוג ל-<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="5720947141702312537">"חייג <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
<string name="notification_voicemail_no_vm_number" msgid="3423686009815186750">"המספר של הדואר הקולי אינו ידוע"</string>
<string name="notification_network_selection_title" msgid="255595526707809121">"אין שירות"</string>
<string name="notification_network_selection_text" msgid="553288408722427659">"הרשת שנבחרה (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) לא זמינה"</string>
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"עליך להפעיל את הרשת הסלולרית, להשבית את מצב הטיסה או להשבית את מצב החיסכון בסוללה כדי להתקשר."</string>
- <string name="incall_error_power_off" product="default" msgid="8131672264311208673">"יש לבטל את מצב טיסה כדי לבצע שיחה."</string>
- <string name="incall_error_power_off_wfc" msgid="9125661184694727052">"יש לבטל את מצב טיסה או להתחבר לרשת אלחוטית כדי לבצע שיחה."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"הטמפרטורה של הטלפון גבוהה מדי"</b>\n\n"אי אפשר להשלים את השיחה. אפשר לנסות שוב כשהטלפון יתקרר.\n\nבינתיים אפשר להתקשר רק למספרי חירום"</string>
+ <string name="incall_error_power_off" product="default" msgid="8131672264311208673">"בטל את מצב טיסה כדי לבצע שיחה."</string>
+ <string name="incall_error_power_off_wfc" msgid="9125661184694727052">"בטל את מצב טיסה או התחבר לרשת אלחוטית כדי לבצע שיחה."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"עליך לצאת ממצב חירום של התקשרות חזרה כדי לבצע שיחות שאינן שיחות חירום."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"לא רשום ברשת."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"הרשת הסלולרית אינה זמינה."</string>
<string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"הרשת הסלולרית לא זמינה. עליך להתחבר לרשת אלחוטית כדי להתקשר."</string>
- <string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"כדי להתקשר, יש להזין מספר טלפון חוקי."</string>
+ <string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"כדי להתקשר, הזן מספר טלפון חוקי."</string>
<string name="incall_error_call_failed" msgid="393508653582682539">"השיחה נכשלה."</string>
- <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"לא ניתן להוסיף את השיחה כרגע. אפשר לנסות לשלוח הודעה."</string>
+ <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"לא ניתן להוסיף את השיחה כרגע. ניתן לנסות לשלוח הודעה."</string>
<string name="incall_error_supp_service_unknown" msgid="8751177117194592623">"שירות לא נתמך"</string>
<string name="incall_error_supp_service_switch" msgid="5272822448189448479">"לא ניתן לעבור בין שיחות."</string>
<string name="incall_error_supp_service_resume" msgid="1276861499306817035">"לא ניתן להמשיך את השיחה."</string>
@@ -554,8 +553,8 @@
<string name="incall_error_supp_service_reject" msgid="3044363092441655912">"לא ניתן לדחות שיחה."</string>
<string name="incall_error_supp_service_hangup" msgid="836524952243836735">"לא ניתן לשחרר שיחות."</string>
<string name="incall_error_supp_service_hold" msgid="8535056414643540997">"לא ניתן להחזיק שיחות."</string>
- <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"יש להתחבר לרשת אלחוטית כדי לבצע שיחה."</string>
- <string name="incall_error_promote_wfc" msgid="9164896813931363415">"יש להפעיל את \'שיחות Wi-Fi\' כדי להתקשר."</string>
+ <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"התחבר לרשת אלחוטית כדי לבצע שיחה."</string>
+ <string name="incall_error_promote_wfc" msgid="9164896813931363415">"הפעל את \'שיחות Wi-Fi\' כדי להתקשר."</string>
<string name="emergency_information_hint" msgid="9208897544917793012">"מידע למקרה חירום"</string>
<string name="emergency_information_owner_hint" msgid="6256909888049185316">"בעלים"</string>
<string name="emergency_information_confirm_hint" msgid="5109017615894918914">"אפשר להקיש שוב כדי להציג את הפרטים"</string>
@@ -563,19 +562,19 @@
<string name="single_emergency_number_title" msgid="8413371079579067196">"מספר חירום"</string>
<string name="numerous_emergency_numbers_title" msgid="8972398932506755510">"מספרי חירום"</string>
<string name="emergency_call_shortcut_hint" msgid="1290485125107779500">"אפשר להקיש שוב כדי להתקשר אל <xliff:g id="EMERGENCY_NUMBER">%s</xliff:g>"</string>
- <string name="emergency_enable_radio_dialog_message" msgid="1695305158151408629">"הפעלת הרדיו מתבצעת…"</string>
- <string name="emergency_enable_radio_dialog_retry" msgid="4329131876852608587">"אין שירות. ניסיון חוזר מתבצע..."</string>
+ <string name="emergency_enable_radio_dialog_message" msgid="1695305158151408629">"מפעיל את הרדיו…"</string>
+ <string name="emergency_enable_radio_dialog_retry" msgid="4329131876852608587">"אין שירות. מנסה שוב..."</string>
<string name="radio_off_during_emergency_call" msgid="8011154134040481609">"אי אפשר לעבור למצב טיסה בזמן שיחת חירום."</string>
<string name="dial_emergency_error" msgid="825822413209026039">"לא ניתן להתקשר. <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> אינו מספר חירום."</string>
- <string name="dial_emergency_empty_error" msgid="2785803395047793634">"לא ניתן להתקשר. יש לחייג למספר חירום."</string>
+ <string name="dial_emergency_empty_error" msgid="2785803395047793634">"לא ניתן להתקשר. חייג למספר חירום."</string>
<string name="dial_emergency_calling_not_available" msgid="6485846193794727823">"אי אפשר לבצע שיחות חירום"</string>
<string name="pin_puk_system_user_only" msgid="1045147220686867922">"רק הבעלים של המכשיר יכול להזין קודי אימות/PUK."</string>
<string name="police_type_description" msgid="2819533883972081757">"משטרה"</string>
<string name="ambulance_type_description" msgid="6798237503553180461">"אמבולנס"</string>
<string name="fire_type_description" msgid="6565200468934914930">"אש"</string>
<string name="description_concat_format" msgid="2014471565101724088">"%1$s, %2$s"</string>
- <string name="dialerKeyboardHintText" msgid="1115266533703764049">"שימוש במקלדת כדי לחייג"</string>
- <string name="onscreenHoldText" msgid="4025348842151665191">"השהיה"</string>
+ <string name="dialerKeyboardHintText" msgid="1115266533703764049">"השתמש במקלדת כדי לחייג"</string>
+ <string name="onscreenHoldText" msgid="4025348842151665191">"השהה"</string>
<string name="onscreenEndCallText" msgid="6138725377654842757">"סיום"</string>
<string name="onscreenShowDialpadText" msgid="658465753816164079">"לוח חיוג"</string>
<string name="onscreenMuteText" msgid="5470306116733843621">"השתקה"</string>
@@ -586,10 +585,10 @@
<string name="onscreenManageConferenceText" msgid="4700574060601755137">"ניהול שיחת ועידה"</string>
<string name="onscreenAudioText" msgid="7224226735052019986">"אודיו"</string>
<string name="onscreenVideoCallText" msgid="1743992456126258698">"שיחת וידאו"</string>
- <string name="importSimEntry" msgid="3892354284082689894">"ייבוא"</string>
- <string name="importAllSimEntries" msgid="2628391505643564007">"ייבוא הכול"</string>
- <string name="importingSimContacts" msgid="4995457122107888932">"ייבוא אנשי קשר מ-SIM מתבצע"</string>
- <string name="importToFDNfromContacts" msgid="5068664870738407341">"ייבוא מאנשי קשר"</string>
+ <string name="importSimEntry" msgid="3892354284082689894">"ייבא"</string>
+ <string name="importAllSimEntries" msgid="2628391505643564007">"ייבא הכל"</string>
+ <string name="importingSimContacts" msgid="4995457122107888932">"מייבא אנשי קשר מ-SIM"</string>
+ <string name="importToFDNfromContacts" msgid="5068664870738407341">"ייבא מאנשי קשר"</string>
<string name="singleContactImportedMsg" msgid="3619804066300998934">"איש הקשר יובא"</string>
<string name="failedToImportSingleContactMsg" msgid="228095510489830266">"ייבוא איש הקשר נכשל"</string>
<string name="hac_mode_title" msgid="4127986689621125468">"מכשירי שמיעה"</string>
@@ -605,16 +604,16 @@
<item msgid="2131559553795606483">"TTY VCO"</item>
</string-array>
<string name="dtmf_tones_title" msgid="7874845461117175236">"צלילי DTMF"</string>
- <string name="dtmf_tones_summary" msgid="2294822239899471201">"הגדרת האורך של צלילי DTMF"</string>
+ <string name="dtmf_tones_summary" msgid="2294822239899471201">"הגדר את האורך של צלילי DTMF"</string>
<string-array name="dtmf_tone_entries">
<item msgid="2271798469250155310">"רגיל"</item>
<item msgid="6044210222666533564">"ארוך"</item>
</string-array>
<string name="network_info_message" msgid="7599413947016532355">"הודעת רשת"</string>
<string name="network_error_message" msgid="4271579424089326618">"הודעת שגיאה"</string>
- <string name="ota_title_activate" msgid="4049645324841263423">"הפעלת הטלפון"</string>
- <string name="ota_touch_activate" msgid="838764494319694754">"יש לבצע שיחה מיוחדת כדי להפעיל את השירות לטלפון. \n\nלאחר הלחיצה על \'הפעלה\', יש להקשיב להוראות להפעלת הטלפון."</string>
- <string name="ota_hfa_activation_title" msgid="3300556778212729671">"ההפעלה מתבצעת..."</string>
+ <string name="ota_title_activate" msgid="4049645324841263423">"הפעל את הטלפון"</string>
+ <string name="ota_touch_activate" msgid="838764494319694754">"יש לבצע שיחה מיוחדת כדי להפעיל את השירות לטלפון. \n\nלאחר הלחיצה על \'הפעל\', הקשב להוראות להפעלת הטלפון."</string>
+ <string name="ota_hfa_activation_title" msgid="3300556778212729671">"מפעיל..."</string>
<string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"הטלפון מפעיל את שירותי הנתונים שלך לנייד.\n\nהתהליך עשוי לארוך עד 5 דקות."</string>
<string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"לדלג על ההפעלה?"</string>
<string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"אם מדלגים על ההפעלה, אי אפשר להתקשר או להתחבר לרשתות נתונים לנייד (אך אפשר להתחבר לרשתות Wi-Fi). עד להפעלת הטלפון תופיע הודעה שמבקשת לבצע את ההפעלה בכל פעם שמדליקים את הטלפון."</string>
@@ -622,26 +621,26 @@
<string name="ota_activate" msgid="7939695753665438357">"הפעלה"</string>
<string name="ota_title_activate_success" msgid="1272135024761004889">"הטלפון מופעל."</string>
<string name="ota_title_problem_with_activation" msgid="7019745985413368726">"בעיה בהפעלה"</string>
- <string name="ota_listen" msgid="2772252405488894280">"יש לבצע את ההוראות הנאמרות עד ששומעים שההפעלה הושלמה."</string>
+ <string name="ota_listen" msgid="2772252405488894280">"בצע את ההוראות הנאמרות עד שתשמע שההפעלה הושלמה."</string>
<string name="ota_speaker" msgid="1086766980329820528">"רמקול"</string>
- <string name="ota_progress" msgid="8837259285255700132">"התכנות של הטלפון שלך מתבצע…"</string>
+ <string name="ota_progress" msgid="8837259285255700132">"מתכנת את הטלפון שלך…"</string>
<string name="ota_failure" msgid="5674217489921481576">"לא ניתן היה לתכנת את הטלפון שלך"</string>
- <string name="ota_successful" msgid="1106825981548107774">"הטלפון שלך מופעל כעת. ייתכן שיהיה צורך להמתין עד 15 דקות להפעלת השירות."</string>
+ <string name="ota_successful" msgid="1106825981548107774">"הטלפון שלך מופעל כעת. ייתכן שתמתין עד 15 דקות להפעלת השירות."</string>
<string name="ota_unsuccessful" msgid="8531037653803955754">"הטלפון שלך לא הופעל. \nייתכן שעליך למצוא מקום שהקליטה בו טובה יותר (ליד חלון או בחוץ). \n\nנסה שוב או התקשר לשירות לקוחות לקבלת אפשרויות נוספות."</string>
<string name="ota_spc_failure" msgid="904092035241370080">"כשלים מרובים של SPC"</string>
<string name="ota_call_end" msgid="8657746378290737034">"הקודם"</string>
- <string name="ota_try_again" msgid="6914781945599998550">"יש לנסות שוב"</string>
+ <string name="ota_try_again" msgid="6914781945599998550">"נסו שוב"</string>
<string name="ota_next" msgid="2041016619313475914">"הבא"</string>
<string name="ecm_exit_dialog" msgid="4200691880721429078">"EcmExitDialog"</string>
- <string name="phone_entered_ecm_text" msgid="8431238297843035842">"מתבצע מעבר למצב חירום של התקשרות חזרה"</string>
+ <string name="phone_entered_ecm_text" msgid="8431238297843035842">"נכנס למצב חירום של התקשרות חזרה"</string>
<string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"מצב חירום של התקשרות חזרה"</string>
<string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"חיבור נתונים מושבת"</string>
<string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"אין חיבור לרשת נתונים עד <xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
<plurals name="alert_dialog_exit_ecm" formatted="false" msgid="5425906903766466743">
- <item quantity="two">הטלפון יהיה במצב חירום של התקשרות חזרה למשך <xliff:g id="COUNT_1">%s</xliff:g> דקות. בזמן שהטלפון במצב הזה, לא ניתן להשתמש באפליקציות הזקוקות לחבילת גלישה. האם ברצונך לצאת כעת?</item>
- <item quantity="many">הטלפון יהיה במצב חירום של התקשרות חזרה למשך <xliff:g id="COUNT_1">%s</xliff:g> דקות. בזמן שהטלפון במצב הזה, לא ניתן להשתמש באפליקציות הזקוקות לחבילת גלישה. האם ברצונך לצאת כעת?</item>
- <item quantity="other">הטלפון יהיה במצב חירום של התקשרות חזרה למשך <xliff:g id="COUNT_1">%s</xliff:g> דקות. בזמן שהטלפון במצב הזה, לא ניתן להשתמש באפליקציות הזקוקות לחבילת גלישה. האם ברצונך לצאת כעת?</item>
- <item quantity="one">הטלפון יהיה במצב חירום של התקשרות חזרה למשך דקה <xliff:g id="COUNT_0">%s</xliff:g>. בזמן שהטלפון במצב הזה, לא ניתן להשתמש באפליקציות הזקוקות לחבילת גלישה. האם ברצונך לצאת כעת?</item>
+ <item quantity="two">הטלפון יהיה במצב חירום של התקשרות חזרה למשך <xliff:g id="COUNT_1">%s</xliff:g> דקות. בזמן שהטלפון במצב הזה, לא ניתן להשתמש באפליקציות הזקוקות לחיבור נתונים. האם ברצונך לצאת כעת?</item>
+ <item quantity="many">הטלפון יהיה במצב חירום של התקשרות חזרה למשך <xliff:g id="COUNT_1">%s</xliff:g> דקות. בזמן שהטלפון במצב הזה, לא ניתן להשתמש באפליקציות הזקוקות לחיבור נתונים. האם ברצונך לצאת כעת?</item>
+ <item quantity="other">הטלפון יהיה במצב חירום של התקשרות חזרה למשך <xliff:g id="COUNT_1">%s</xliff:g> דקות. בזמן שהטלפון במצב הזה, לא ניתן להשתמש באפליקציות הזקוקות לחיבור נתונים. האם ברצונך לצאת כעת?</item>
+ <item quantity="one">הטלפון יהיה במצב חירום של התקשרות חזרה למשך דקה <xliff:g id="COUNT_0">%s</xliff:g>. בזמן שהטלפון במצב הזה, לא ניתן להשתמש באפליקציות הזקוקות לחיבור נתונים. האם ברצונך לצאת כעת?</item>
</plurals>
<plurals name="alert_dialog_not_avaialble_in_ecm" formatted="false" msgid="1152682528741457004">
<item quantity="two">הפעולה הנבחרת אינה זמינה במצב חירום של התקשרות חזרה. הטלפון יהיה במצב זה למשך <xliff:g id="COUNT_1">%s</xliff:g> דקות. האם ברצונך לצאת כעת?</item>
@@ -653,7 +652,7 @@
<string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"יציאה ממצב התקשרות חזרה בחירום"</string>
<string name="alert_dialog_yes" msgid="3532525979632841417">"כן"</string>
<string name="alert_dialog_no" msgid="1075632654085988420">"לא"</string>
- <string name="alert_dialog_dismiss" msgid="1336356286354517054">"סגירה"</string>
+ <string name="alert_dialog_dismiss" msgid="1336356286354517054">"סגור"</string>
<string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"הטלפון במצב \'התקשרות בחזרה בחירום\'"</string>
<string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"עד <xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
<plurals name="alert_dialog_exit_ecm_without_data_restriction_hint" formatted="false" msgid="6477733043040328640">
@@ -668,10 +667,10 @@
<string name="other_settings" msgid="8895088007393598447">"הגדרות שיחה אחרות"</string>
<string name="calling_via_template" msgid="1791323450703751750">"שיחה באמצעות <xliff:g id="PROVIDER_NAME">%s</xliff:g>"</string>
<string name="contactPhoto" msgid="7885089213135154834">"תמונה של איש קשר"</string>
- <string name="goPrivate" msgid="4645108311382209551">"מעבר לשיחה פרטית"</string>
- <string name="selectContact" msgid="1527612842599767382">"בחירת איש קשר"</string>
+ <string name="goPrivate" msgid="4645108311382209551">"עבור לשיחה פרטית"</string>
+ <string name="selectContact" msgid="1527612842599767382">"בחר איש קשר"</string>
<string name="not_voice_capable" msgid="2819996734252084253">"חיוג קולי אינו נתמך"</string>
- <string name="description_dial_button" msgid="8614631902795087259">"חויג"</string>
+ <string name="description_dial_button" msgid="8614631902795087259">"חייג"</string>
<string name="description_dialpad_button" msgid="7395114120463883623">"הצגת לוח החיוג"</string>
<string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"לוח חיוג לחירום"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"דואר קולי ויזואלי"</string>
@@ -679,10 +678,10 @@
<string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"שינוי קוד הגישה"</string>
<string name="preference_category_ringtone" msgid="8787281191375434976">"רינגטון ורטט"</string>
<string name="pstn_connection_service_label" msgid="9200102709997537069">"כרטיסי SIM מובנים"</string>
- <string name="enable_video_calling_title" msgid="7246600931634161830">"הפעלת שיחות וידאו"</string>
+ <string name="enable_video_calling_title" msgid="7246600931634161830">"הפעל שיחות וידאו"</string>
<string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"כדי להפעיל שיחת וידאו, עליך להפעיל את \'מצב 4G LTE משופר\' ב\'הגדרות רשת\'."</string>
<string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"הגדרות רשת"</string>
- <string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"סגירה"</string>
+ <string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"סגור"</string>
<string name="sim_label_emergency_calls" msgid="9078241989421522310">"שיחות חירום"</string>
<string name="sim_description_emergency_calls" msgid="5146872803938897296">"שיחות חירום בלבד"</string>
<string name="sim_description_default" msgid="7474671114363724971">"כרטיס SIM, חריץ: <xliff:g id="SLOT_ID">%s</xliff:g>"</string>
@@ -693,7 +692,7 @@
<string name="message_decode_error" msgid="1061856591500290887">"אירעה שגיאה בעת פענוח ההודעה."</string>
<string name="callFailed_cdma_activation" msgid="5392057031552253550">"כרטיס SIM הפעיל את השירות שלך ועדכן את יכולות הנדידה של הטלפון."</string>
<string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"יש יותר מדי שיחות פעילות. כדי להתחיל שיחה חדשה עליך לסיים או למזג חלק מהשיחות הפעילות."</string>
- <string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"לא ניתן להתחבר. יש להכניס כרטיס SIM תקין."</string>
+ <string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"לא ניתן להתחבר. הכנס כרטיס SIM תקין."</string>
<string name="callFailed_wifi_lost" msgid="1788036730589163141">"השיחה הסתיימה כי החיבור לרשת ה-Wi-Fi נותק."</string>
<string name="dialFailed_low_battery" msgid="6857904237423407056">"אי אפשר לבצע את שיחת הווידאו מכיוון שהסוללה חלשה."</string>
<string name="callFailed_low_battery" msgid="4056828320214416182">"שיחת הווידאו הסתיימה מכיוון שהסוללה חלשה."</string>
@@ -703,12 +702,12 @@
<string name="change_pin_continue_label" msgid="5177011752453506371">"המשך"</string>
<string name="change_pin_cancel_label" msgid="2301711566758827936">"ביטול"</string>
<string name="change_pin_ok_label" msgid="6861082678817785330">"אישור"</string>
- <string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"אישור קוד הגישה הישן"</string>
- <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"יש להזין את קוד הגישה לדואר הקולי כדי להמשיך."</string>
- <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"הגדרת קוד גישה חדש"</string>
+ <string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"אשר את קוד הגישה הישן"</string>
+ <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"הזן את קוד הגישה לדואר הקולי כדי להמשיך."</string>
+ <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"הגדר קוד גישה חדש"</string>
<string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"האורך של קוד הגישה חייב להיות <xliff:g id="MAX">%2$d</xliff:g>-<xliff:g id="MIN">%1$d</xliff:g> ספרות."</string>
- <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"אישור קוד הגישה"</string>
- <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"קודי הגישה לא תואמים"</string>
+ <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"אשר את קוד הגישה"</string>
+ <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"קודי הגישה אינם תואמים"</string>
<string name="change_pin_succeeded" msgid="2504705600693014403">"קוד הגישה לדואר הקולי עודכן"</string>
<string name="change_pin_system_error" msgid="7772788809875146873">"לא ניתן להגדיר את קוד הגישה"</string>
<string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"חבילת הגלישה בנדידה הושבתה"</string>
@@ -907,7 +906,7 @@
<string name="radio_info_data_network_type_label" msgid="8886597029237501929">"סוג רשת נתונים:"</string>
<string name="phone_index_label" msgid="6222406512768964268">"בחירת אינדקס טלפון"</string>
<string name="radio_info_set_perferred_label" msgid="7408131389363136210">"הגדרת סוג רשת מועדף:"</string>
- <string name="radio_info_ping_hostname_v4" msgid="6951237885381284790">"נדנוד לשם המארח (www.google.com) מסוג IPv4:"</string>
+ <string name="radio_info_ping_hostname_v4" msgid="6951237885381284790">"נדנד לשם המארח (www.google.com) מסוג IPv4:"</string>
<string name="radio_info_ping_hostname_v6" msgid="2748637889486554603">"נדנוד לשם המארח (www.google.com) מסוג IPv6:"</string>
<string name="radio_info_http_client_test" msgid="1329583721088428238">"בדיקת לקוח HTTP:"</string>
<string name="ping_test_label" msgid="448617502935719694">"הפעלת בדיקת פינג"</string>
@@ -921,11 +920,12 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"תומך ב-5G NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"מצב 5G NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"תדירות 5G NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"הגדרת החלוקה לפרוסות ברשת:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"הגדרת מצב תדרים של רדיו"</string>
- <string name="band_mode_loading" msgid="795923726636735967">"הטעינה של רשימת התדרים מתבצעת…"</string>
+ <string name="band_mode_loading" msgid="795923726636735967">"טוען רשימת תדרים…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"הגדרה"</string>
<string name="band_mode_failed" msgid="1707488541847192924">"נכשל"</string>
- <string name="band_mode_succeeded" msgid="2230018000534761063">"המעבר הצליח"</string>
+ <string name="band_mode_succeeded" msgid="2230018000534761063">"עבר בהצלחה"</string>
<string name="phone_info_label" product="tablet" msgid="7477478709388477397">"פרטי טאבלט"</string>
<string name="phone_info_label" product="default" msgid="1784175881556791433">"פרטי טלפון"</string>
<string name="carrier_provisioning" msgid="2668065041869578376">"פרטי ניהול תצורה של ספק סלולרי"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 7e62fee..c304b74 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -44,10 +44,10 @@
<string name="pause_prompt_yes" msgid="8184132073048369575">"はい"</string>
<string name="pause_prompt_no" msgid="2145264674774138579">"いいえ"</string>
<string name="wild_prompt_str" msgid="5858910969703305375">"ワイルド文字を置換:"</string>
- <string name="no_vm_number" msgid="6623853880546176930">"留守番電話の番号がありません"</string>
- <string name="no_vm_number_msg" msgid="5165161462411372504">"SIMカードに留守番電話の番号がありません。"</string>
+ <string name="no_vm_number" msgid="6623853880546176930">"ボイスメール番号がありません"</string>
+ <string name="no_vm_number_msg" msgid="5165161462411372504">"SIMカードにボイスメールの番号がありません。"</string>
<string name="add_vm_number_str" msgid="7368168964435881637">"番号を追加"</string>
- <string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"留守番電話の設定を変更できるのはメインユーザーのみに限られています。"</string>
+ <string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"ボイスメール設定を変更できるのはメインユーザーのみに限られています。"</string>
<string name="puk_unlocked" msgid="4627340655215746511">"SIMカードロックを解除しました。デバイスのロックを解除しています..."</string>
<string name="label_ndp" msgid="7617392683877410341">"SIM のネットワーク ロック解除 PIN"</string>
<string name="label_phoneid" msgid="8775611434123577808">"携帯通信会社の SIM ロックがかかっています"</string>
@@ -75,10 +75,10 @@
<string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"アカウントを設定"</string>
<string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"すべての通話アカウント"</string>
<string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"通話できるアカウントを選択"</string>
- <string name="wifi_calling" msgid="3650509202851355742">"Wi-Fi 通話"</string>
+ <string name="wifi_calling" msgid="3650509202851355742">"Wi-Fi通話"</string>
<string name="connection_service_default_label" msgid="7332739049855715584">"組み込みの接続サービス"</string>
- <string name="voicemail" msgid="7697769412804195032">"留守番電話"</string>
- <string name="voicemail_settings_with_label" msgid="4228431668214894138">"留守番電話(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+ <string name="voicemail" msgid="7697769412804195032">"ボイスメール"</string>
+ <string name="voicemail_settings_with_label" msgid="4228431668214894138">"ボイスメール(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_abbreviated" msgid="7746778673131551185">"VM:"</string>
<string name="make_and_receive_calls" msgid="4868913166494621109">"通話の発着と着信"</string>
<string name="smart_forwarding_settings_menu" msgid="8850429887958938540">"スマート転送"</string>
@@ -155,12 +155,12 @@
<item msgid="6813323051965618926">"番号を非通知"</item>
<item msgid="9150034130629852635">"番号を通知"</item>
</string-array>
- <string name="vm_changed" msgid="4739599044379692505">"留守番電話の番号が変更されました。"</string>
+ <string name="vm_changed" msgid="4739599044379692505">"ボイスメールの番号が変更されました。"</string>
<string name="vm_change_failed" msgid="7877733929455763566">"ボイスメール番号を変更できませんでした。\nこの問題が続くようであれば携帯通信会社にお問い合わせください。"</string>
<string name="fw_change_failed" msgid="9179241823460192148">"転送番号を変更できませんでした。\nこの問題が続くようであれば携帯通信会社にお問い合わせください。"</string>
<string name="fw_get_in_vm_failed" msgid="2432678237218183844">"現在の転送先番号設定の取得と保存ができませんでした。\nかまわず新しい携帯通信会社に切り替えますか?"</string>
<string name="no_change" msgid="3737264882821031892">"変更されていません。"</string>
- <string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"留守番電話サービスを選択"</string>
+ <string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"ボイスメールサービスを選択"</string>
<string name="voicemail_default" msgid="6427575113775462077">"携帯通信会社"</string>
<string name="vm_change_pin_old_pin" msgid="7154951790929009241">"古い PIN"</string>
<string name="vm_change_pin_new_pin" msgid="2656200418481288069">"新しい PIN"</string>
@@ -490,7 +490,7 @@
<string name="newPinLabel" msgid="3585899083055354732">"新しいPIN"</string>
<string name="confirmPinLabel" msgid="7783531218662473778">"新しいPINを確認"</string>
<string name="badPin" msgid="4549286285015892321">"入力した古いPINは正しくありません。入力し直してください。"</string>
- <string name="mismatchPin" msgid="1467254768290323845">"入力した PIN が一致しません。入力し直してください。"</string>
+ <string name="mismatchPin" msgid="1467254768290323845">"入力したPINは一致しません。入力し直してください。"</string>
<string name="invalidPin" msgid="7363723429414001979">"4~8桁の数字のPINを入力してください。"</string>
<string name="disable_sim_pin" msgid="3112303905548613752">"SIM PINの消去"</string>
<string name="enable_sim_pin" msgid="445461050748318980">"SIM PINの設定"</string>
@@ -519,7 +519,7 @@
<string name="pin2_unblocked" msgid="4481107908727789303">"PIN2はブロックされなくなりました"</string>
<string name="pin2_error_exception" msgid="8116103864600823641">"ネットワークまたはSIMカードのエラー"</string>
<string name="doneButton" msgid="7371209609238460207">"完了"</string>
- <string name="voicemail_settings_number_label" msgid="1265118640154688162">"留守番電話の番号"</string>
+ <string name="voicemail_settings_number_label" msgid="1265118640154688162">"ボイスメールの番号"</string>
<string name="card_title_dialing" msgid="8742182654254431781">"発信中"</string>
<string name="card_title_redialing" msgid="18130232613559964">"リダイヤル中"</string>
<string name="card_title_conf_call" msgid="901197309274457427">"グループ通話"</string>
@@ -528,16 +528,15 @@
<string name="card_title_on_hold" msgid="9028319436626975207">"保留中"</string>
<string name="card_title_hanging_up" msgid="814874106866647871">"通話終了"</string>
<string name="card_title_in_call" msgid="8231896539567594265">"着信"</string>
- <string name="notification_voicemail_title" msgid="3932876181831601351">"新しい留守番電話"</string>
- <string name="notification_voicemail_title_count" msgid="2806950319222327082">"新しい留守番電話(<xliff:g id="COUNT">%d</xliff:g>)"</string>
+ <string name="notification_voicemail_title" msgid="3932876181831601351">"新しいボイスメール"</string>
+ <string name="notification_voicemail_title_count" msgid="2806950319222327082">"新しいボイスメール(<xliff:g id="COUNT">%d</xliff:g>)"</string>
<string name="notification_voicemail_text_format" msgid="5720947141702312537">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>にダイヤル"</string>
- <string name="notification_voicemail_no_vm_number" msgid="3423686009815186750">"留守番電話の番号が不明です"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="3423686009815186750">"ボイスメールの番号が不明です"</string>
<string name="notification_network_selection_title" msgid="255595526707809121">"通信サービスなし"</string>
<string name="notification_network_selection_text" msgid="553288408722427659">"選択したネットワーク(<xliff:g id="OPERATOR_NAME">%s</xliff:g>)は利用できません"</string>
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"通話を発信するには、モバイル ネットワークを ON にし、機内モードまたはバッテリー セーバー モードを OFF にしてください。"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"電話をかけるには機内モードをオフにしてください。"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"電話をかけるには、機内モードをオフにするか無線ネットワークに接続してください。"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"スマートフォンが熱くなりすぎています"</b>\n\n"この通話を完了できません。スマートフォンの熱が冷めてから、もう一度お試しください。\n\n緊急通報は通常どおり発信できます。"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"緊急通報以外の通話を発信するには、緊急通報待機モードを終了してください。"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"ご加入の通信サービスがありません"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"モバイルネットワークが利用できません。"</string>
@@ -668,7 +667,7 @@
<string name="description_dial_button" msgid="8614631902795087259">"発信"</string>
<string name="description_dialpad_button" msgid="7395114120463883623">"ダイヤルパッドを表示"</string>
<string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"緊急通報ダイヤルパッド"</string>
- <string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"ビジュアル留守番電話"</string>
+ <string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"ビジュアルボイスメール"</string>
<string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"PIN の設定"</string>
<string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"PIN の変更"</string>
<string name="preference_category_ringtone" msgid="8787281191375434976">"着信音とバイブレーション"</string>
@@ -682,7 +681,7 @@
<string name="sim_description_default" msgid="7474671114363724971">"SIMカード、スロット: <xliff:g id="SLOT_ID">%s</xliff:g>"</string>
<string name="accessibility_settings_activity_title" msgid="7883415189273700298">"ユーザー補助機能"</string>
<string name="status_hint_label_incoming_wifi_call" msgid="2606052595898044071">"Wi-Fi 通話の着信"</string>
- <string name="status_hint_label_wifi_call" msgid="942993035689809853">"Wi-Fi 通話"</string>
+ <string name="status_hint_label_wifi_call" msgid="942993035689809853">"Wi-Fi通話"</string>
<string name="emergency_action_launch_hint" msgid="2762016865340891314">"開くにはもう一度タップしてください"</string>
<string name="message_decode_error" msgid="1061856591500290887">"メッセージのデコード中にエラーが発生しました。"</string>
<string name="callFailed_cdma_activation" msgid="5392057031552253550">"SIMカードでサービスが有効になり、スマートフォンのローミング機能が更新されています。"</string>
@@ -693,17 +692,17 @@
<string name="callFailed_low_battery" msgid="4056828320214416182">"電池残量が低下したため、ビデオハングアウトが終了しました。"</string>
<string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"この場所では Wi-Fi 通話による緊急通報はご利用いただけません。"</string>
<string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"この場所では Wi-Fi 通話はご利用いただけません。"</string>
- <string name="change_pin_title" msgid="3564254326626797321">"留守番電話 PIN の変更"</string>
+ <string name="change_pin_title" msgid="3564254326626797321">"ボイスメール PIN の変更"</string>
<string name="change_pin_continue_label" msgid="5177011752453506371">"続行"</string>
<string name="change_pin_cancel_label" msgid="2301711566758827936">"キャンセル"</string>
<string name="change_pin_ok_label" msgid="6861082678817785330">"OK"</string>
<string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"古い PIN の確認"</string>
- <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"続行するには留守番電話 PIN を入力してください。"</string>
+ <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"続行するにはボイスメール PIN を入力してください。"</string>
<string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"新しい PIN の設定"</string>
<string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"PIN は <xliff:g id="MIN">%1$d</xliff:g>~<xliff:g id="MAX">%2$d</xliff:g> 桁にしてください。"</string>
<string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"PIN の確認"</string>
<string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"PIN が一致しません"</string>
- <string name="change_pin_succeeded" msgid="2504705600693014403">"留守番電話 PIN を更新しました"</string>
+ <string name="change_pin_succeeded" msgid="2504705600693014403">"ボイスメール PIN を更新しました"</string>
<string name="change_pin_system_error" msgid="7772788809875146873">"PIN を設定できません"</string>
<string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"データ ローミングが OFF になっています"</string>
<string name="mobile_data_status_roaming_turned_on_subtext" msgid="5615757897768777865">"データ ローミングが ON になっています"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR 利用可能:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR ステータス:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR 周波数:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"無線バンドモードの設定"</string>
<string name="band_mode_loading" msgid="795923726636735967">"バンドリストを読み込み中…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"設定"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index dfd6c9a..2b6a1f6 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"დასარეკად ჩართეთ მობილური ქსელი, გამორთეთ თვითმფრინავის რეჟიმი ან ბატარეის დაზოგვის რეჟიმი."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ზარის განსახორციელებლად, გამორთეთ თვითმფრინავის რეჟიმი."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ზარის განსახორციელებლად, გამორთეთ თვითმფრინავის რეჟიმი ან დაუკავშირდით უსადენო ქსელს."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ტელეფონი ძალიან ცხელია"</b>\n\n"ამ ზარის დასრულება შეუძლებელია. სცადეთ ხელახლა, როდესაც ტელეფონი გაგრილდება.\n\nგადაუდებელი ზარების განხორციელება მაინც შეგიძლიათ."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"გამოდით გადაუდებელი გადმორეკვის რეჟიმიდან არაგადაუდებელი ზარის განსახორციელებლად."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"ქსელში რეგისტრირებული არ არის."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"მობილური ქსელი მიუწვდომელია."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR ხელმისაწვდომია:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR-ის მდგომარეობა:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR-ის სიხშირე:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"რადიოდიაპაზონის რეჟიმის დაყენება"</string>
<string name="band_mode_loading" msgid="795923726636735967">"მიმდინარეობს დიაპაზონთა სიის ჩატვირთვა…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"დაყენება"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index baf170c..d488dcd 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -63,18 +63,18 @@
<string name="labelCdmaMore_with_label" msgid="7759692829160238152">"CDMA қоңырау параметрлері (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="apn_settings" msgid="1978652203074756623">"APN"</string>
<string name="settings_label" msgid="9101778088412567956">"Желі параметрлері"</string>
- <string name="phone_accounts" msgid="1216879437523774604">"Қоңырау шалу аккаунттары"</string>
+ <string name="phone_accounts" msgid="1216879437523774604">"Қоңырау шалу есептік жазбалары"</string>
<string name="phone_accounts_make_calls_with" msgid="16747814788918145">"Келесінің көмегімен қоңыраулар шалу"</string>
<string name="phone_accounts_make_sip_calls_with" msgid="4691221006731847255">"Келесінің көмегімен SIP қоңырауларын шалу"</string>
<string name="phone_accounts_ask_every_time" msgid="6192347582666047168">"Алдымен сұрау"</string>
<string name="phone_accounts_default_account_label" msgid="5107598881335931101">"Қолжетімді желі жоқ"</string>
<string name="phone_accounts_settings_header" msgid="6296501692964706536">"Параметрлер"</string>
- <string name="phone_accounts_choose_accounts" msgid="4748805293314824974">"Аккаунттарды таңдау"</string>
- <string name="phone_accounts_selection_header" msgid="2945830843104108440">"Телефон аккаунттары"</string>
- <string name="phone_accounts_add_sip_account" msgid="1437634802033309305">"SIP аккаунтын қосу"</string>
- <string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"Аккаунт параметрлерін конфигурациялау"</string>
- <string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"Барлық қоңырау шалу аккаунттары"</string>
- <string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"Қай аккаунттардың қоңырау шала алатынын таңдау"</string>
+ <string name="phone_accounts_choose_accounts" msgid="4748805293314824974">"Есептік жазбаларды таңдау"</string>
+ <string name="phone_accounts_selection_header" msgid="2945830843104108440">"Телефон есептік жазбалары"</string>
+ <string name="phone_accounts_add_sip_account" msgid="1437634802033309305">"SIP есептік жазбасын қосу"</string>
+ <string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"Есептік жазба параметрлерін конфигурациялау"</string>
+ <string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"Барлық қоңырау шалу есептік жазбалары"</string>
+ <string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"Қай есептік жазбалардың қоңырау шала алатынын таңдау"</string>
<string name="wifi_calling" msgid="3650509202851355742">"Wi-Fi қоңыраулары"</string>
<string name="connection_service_default_label" msgid="7332739049855715584">"Кірістірілген байланыс қызметі"</string>
<string name="voicemail" msgid="7697769412804195032">"Дауыстық пошта"</string>
@@ -294,8 +294,8 @@
<string name="limited_sim_function_notification_title" msgid="612715399099846281">"SIM картасының жұмысы шектеулі"</string>
<string name="limited_sim_function_with_phone_num_notification_message" msgid="5928988883403677610">"<xliff:g id="PHONE_NUMBER">%2$s</xliff:g> нөмірін пайдаланған кезде <xliff:g id="CARRIER_NAME">%1$s</xliff:g> қоңыраулары мен дерек тасымалдау қызметтері бөгелуі мүмкін."</string>
<string name="limited_sim_function_notification_message" msgid="5338638075496721160">"Екінші SIM картасын пайдаланылғанда, <xliff:g id="CARRIER_NAME">%1$s</xliff:g> қоңырауы мен дерек қызметі бөгелуі мүмкін."</string>
- <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"Қолданыстан шыққан SIP аккаунттары табылды және өшірілді"</string>
- <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Android платформасында бұдан былай SIP арқылы қоңырау шалу мүмкін емес.\nҚазіргі SIP аккаунтларыңыз (<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g>) өшірілді.\nҚоңырау шалуға қолданылатын әдепкі аккаунт параметрін растаңыз."</string>
+ <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"Қолданыстан шыққан SIP есептік жазбалары табылды және өшірілді"</string>
+ <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Android платформасында бұдан былай SIP арқылы қоңырау шалу мүмкін емес.\nҚазіргі SIP есептік жазбаларыңыз (<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g>) өшірілді.\nҚоңырау шалуға қолданылатын әдепкі есептік жазба параметрін растаңыз."</string>
<string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Параметрлерге өту"</string>
<string name="data_usage_title" msgid="8438592133893837464">"Қолданба деректерінің трафигі"</string>
<string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_2">%2$s</xliff:g> аралығында <xliff:g id="ID_1">%1$s</xliff:g> мобильдік дерек қолданылды"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Қоңырау шалу мүмкін болуы үшін мобильдік байланысты қосып, ұшақ режимін немесе батарея үнемдеу режимін өшіріңіз."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Қоңырау шалу үшін ұшақ режимін өшіріңіз."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Қоңырау шалу үшін ұшақ режимін өшіріңіз не сымсыз желіге қосылыңыз."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Телефон қызып кетті"</b>\n\n"Қоңырауды аяқтау мүмкін емес. Телефон суығаннан кейін, әрекетті қайталап көріңіз.\n\nҚұтқару қызметіне қоңырау шалу бұрынғыша мүмкін болады."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Төтенше емес қоңырау шалу үшін төтенше қоңырауды кері шалу режимінен шығыңыз."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Желіде тіркелмеген."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Ұялы желі қол жетімсіз."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR қолжетімді:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR күйі:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR жиілігі:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Радиожолақ режимін орнату"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Жолақтар тізімі жүктелуде…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Орнату"</string>
@@ -926,5 +927,5 @@
<string name="trigger_carrier_provisioning" msgid="1301829588620638234">"Операторды инциализациялауды іске қосу"</string>
<string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth сигналы нашар. Спикерфонға ауысып көріңіз."</string>
<string name="call_quality_notification_name" msgid="3476828289553948830">"Қоңырау сапасы туралы хабарландыру"</string>
- <string name="notification_channel_sip_account" msgid="1261816025156179637">"Қолданыстан шыққан SIP аккаунттары"</string>
+ <string name="notification_channel_sip_account" msgid="1261816025156179637">"Қолданыстан шыққан SIP есептік жазбалары"</string>
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index fb246f9..c280faa 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"បើកបណ្ដាញទូរសព្ទចល័ត បិទមុខងារពេលជិះយន្តហោះ ឬបិទមុខងារកម្មវិធីសន្សំថ្ម ដើម្បីហៅទូរសព្ទ។"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"បិទរបៀបយន្តហោះដើម្បីធ្វើការហៅ។"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"បិទរបៀបយន្តហោះ ឬភ្ជាប់ទៅបណ្តាញឥតខ្សែដើម្បីធ្វើការហៅ។"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ទូរសព្ទក្ដៅពេក"</b>\n\n"មិនអាចធ្វើការហៅទូរសព្ទនេះបានទេ។ សូមព្យាយាមម្ដងទៀត នៅពេលទូរសព្ទរបស់អ្នកចុះត្រជាក់។\n\nអ្នកនៅតែអាចធ្វើការហៅទៅលេខសង្គ្រោះបន្ទាន់បាន។"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"ចាកចេញពីរបៀបហៅទៅវិញពេលមានអាសន្នដើម្បីធ្វើការហៅធម្មតា។"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"មិនបានចុះឈ្មោះនៅលើបណ្ដាញ។"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"បណ្ដាញឧបករណ៍ចល័តមិនអាចប្រើបាន។"</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"មាន NR៖"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"ស្ថានភាព NR៖"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"កម្រិតញឹកញាប់នៃ NR៖"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"ការកំណត់រចនាសម្ព័ន្ធការបែងចែកបណ្ដាញ៖"</string>
<string name="band_mode_title" msgid="7988822920724576842">"កំណត់មុខងារកម្រិតបញ្ជូនវិទ្យុ"</string>
<string name="band_mode_loading" msgid="795923726636735967">"កំពុងដំណើរការបញ្ជីក្រុម…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"កំណត់"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index e1b6827..ced50c5 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -61,7 +61,7 @@
<string name="labelGsmMore_with_label" msgid="3206015314393246224">"GSM ಕರೆ ಸೆಟ್ಟಿಂಗ್ಗಳು (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="labelCDMAMore" msgid="7937441382611224632">"CDMA ಕರೆ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="labelCdmaMore_with_label" msgid="7759692829160238152">"CDMA ಕರೆ ಸೆಟ್ಟಿಂಗ್ಗಳು (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
- <string name="apn_settings" msgid="1978652203074756623">"ಆ್ಯಕ್ಸೆಸ್ ಪಾಯಿಂಟ್ ಹೆಸರುಗಳು"</string>
+ <string name="apn_settings" msgid="1978652203074756623">"ಪ್ರವೇಶಿಸುವಿಕೆ ಕೇಂದ್ರದ ಹೆಸರುಗಳು"</string>
<string name="settings_label" msgid="9101778088412567956">"ನೆಟ್ವರ್ಕ್ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="phone_accounts" msgid="1216879437523774604">"ಕರೆ ಮಾಡುವ ಖಾತೆಗಳು"</string>
<string name="phone_accounts_make_calls_with" msgid="16747814788918145">"ಇದರೊಂದಿಗೆ ಕರೆಗಳನ್ನು ಮಾಡಿ"</string>
@@ -537,11 +537,10 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"ಕರೆ ಮಾಡಲು ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಆನ್ ಮಾಡಿ, ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ ಅಥವಾ ಬ್ಯಾಟರಿ ಉಳಿತಾಯ ಮೋಡ್ ಅನ್ನು ಆಫ್ ಮಾಡಿ."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ಕರೆ ಮಾಡಲು ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ ಆಫ್ ಮಾಡಿ."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ ಆಫ್ ಮಾಡಿ ಅಥವಾ ಕರೆ ಮಾಡಲು ವೈರ್ಲೆಸ್ ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಿಸಿ."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ಫೋನ್ ತುಂಬಾ ಬಿಸಿಯಾಗಿದೆ"</b>\n\n"ಈ ಕರೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಫೋನ್ ತಣ್ಣಗಾದ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.\n\nನೀವು ಈಗಲೂ ತುರ್ತು ಕರೆಗಳನ್ನು ಮಾಡಬಹುದು."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"ತುರ್ತು ರಹಿತ ಕರೆಯನ್ನು ಮಾಡಲು ತುರ್ತು ಮರು ಕರೆಮಾಡುವಿಕೆ ಮೋಡ್ ಅನ್ನು ನಿರ್ಗಮಿಸಿ."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಇನ್ನೂ ನೋಂದಣಿಯಾಗಿಲ್ಲ."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಲಭ್ಯವಿಲ್ಲ."</string>
- <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಲಭ್ಯವಿಲ್ಲ. ಕರೆ ಮಾಡಲು ವೈರ್ಲೆಸ್ ನೆಟ್ವರ್ಕ್ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಿ."</string>
+ <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಲಭ್ಯವಿಲ್ಲ. ಕರೆ ಮಾಡಲು ವೈರ್ಲೆಸ್ ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಿಸಿ."</string>
<string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"ಕರೆಯನ್ನು ಮಾಡಲು, ಮಾನ್ಯವಾದ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ."</string>
<string name="incall_error_call_failed" msgid="393508653582682539">"ಕರೆ ವಿಫಲವಾಗಿದೆ."</string>
<string name="incall_error_cannot_add_call" msgid="5425764862628655443">"ಈ ಸಮಯದಲ್ಲಿ ಕರೆಯನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುವ ಮೂಲಕ ನೀವು ಸಂಪರ್ಕಿಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು."</string>
@@ -619,7 +618,7 @@
<string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"ಸಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಸ್ಕಿಪ್ ಮಾಡುವುದೇ?"</string>
<string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಸ್ಕಿಪ್ ಮಾಡಿದರೆ, ನೀವು ಕರೆಗಳನ್ನು ಮಾಡಲು ಅಥವಾ ಮೊಬೈಲ್ ಡೇಟಾ ನೆಟ್ವರ್ಕ್ಗಳಿಗೆ ಸಂಪರ್ಕಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ (ಆದರೂ ನೀವು ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗಳಿಗೆ ಸಂಪರ್ಕಗೊಳಿಸಬಹುದು). ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುವವರೆಗೂ, ನೀವು ಅದನ್ನು ಪ್ರತಿಬಾರಿ ಆನ್ ಮಾಡಿದಾಗಲೆಲ್ಲಾ ಅದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿಮಗೆ ತಿಳಿಸಲಾಗುತ್ತದೆ."</string>
<string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"ಸ್ಕಿಪ್"</string>
- <string name="ota_activate" msgid="7939695753665438357">"ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+ <string name="ota_activate" msgid="7939695753665438357">"ಸಕ್ರಿಯಗೊಳಿಸು"</string>
<string name="ota_title_activate_success" msgid="1272135024761004889">"ಫೋನ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
<string name="ota_title_problem_with_activation" msgid="7019745985413368726">"ಸಕ್ರಿಯಗೊಳಿಸುವಲ್ಲಿ ಸಮಸ್ಯೆ"</string>
<string name="ota_listen" msgid="2772252405488894280">"ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ ಎಂಬುದು ನಿಮ್ಮ ಕಿವಿಗೆ ಬೀಳುವ ತನಕ ಧ್ವನಿ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR ಲಭ್ಯವಿದೆ:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR ಸ್ಥಿತಿ:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR ಫ್ರೀಕ್ವೆನ್ಸಿ:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"ರೇಡಿಯೋ ಬ್ಯಾಂಡ್ ಮೋಡ್ ಹೊಂದಿಸಿ"</string>
<string name="band_mode_loading" msgid="795923726636735967">"ಬ್ಯಾಂಡ್ ಪಟ್ಟಿಯನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"ಹೊಂದಿಸಿ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 52ad67b..541dc23 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"전화를 걸려면 모바일 네트워크를 사용 설정하고 비행기 모드 또는 절전 모드를 사용 중지하세요."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"전화를 걸려면 비행기 모드를 사용 중지하세요."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"전화를 걸려면 비행기 모드를 사용 중지하거나 무선 네트워크에 연결하세요."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"휴대전화의 온도가 너무 높습니다."</b>\n\n"현재 전화를 걸 수 없습니다. 휴대전화의 온도가 내려가면 다시 시도해 보세요.\n\n긴급 전화 기능은 계속해서 사용할 수 있습니다."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"일반 전화를 걸려면 긴급 콜백 모드를 해제하세요."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"네트워크에서 등록되지 않았습니다."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"모바일 네트워크를 사용할 수 없습니다."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR 사용 가능:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR 상태:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR 빈도:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"무선 주파수 대역 모드 설정"</string>
<string name="band_mode_loading" msgid="795923726636735967">"대역 목록 로드 중…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"설정"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 1420182..5d533a6 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -341,7 +341,7 @@
<string name="general_news_settings" msgid="2670499575962080411">"Жалпы жаңылыктар"</string>
<string name="bf_news_settings" msgid="8571709425370794221">"Ишкердик жана каржы жаңылыктары"</string>
<string name="sports_news_settings" msgid="2684364556989168438">"Спорт жаңылыктары"</string>
- <string name="entertainment_news_settings" msgid="4228527702346305543">"Көңүл ачуу жаатындагы жаңылыктар"</string>
+ <string name="entertainment_news_settings" msgid="4228527702346305543">"Көңүл ачуу жаңылыктары"</string>
<string name="enable_disable_local" msgid="7654175079979415572">"Жергиликтүү"</string>
<string name="local_enable" msgid="790606890868710629">"Жергиликтүү жаңылыктар иштетилген"</string>
<string name="local_disable" msgid="7649945293198602877">"Жергиликтүү жаңылыктар өчүрүлгөн"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Мобилдик тармакты күйгүзүңүз, чалуу үчүн \"Учакта\" режимин же \"Батареяны үнөмдөө\" режимин өчүрүңүз."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Чалуу үчүн учак режимин өчүрүңүз."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Чалуу үчүн учак режимин өчүрүңүз же зымсыз тармакка туташыңыз."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Телефон ысып кетти"</b>\n\n"Бул чалуу аяктабай жатат. Телефон муздагандан кийин кайра аракет кылыңыз.\n\nШашылыш чалууларды аткара берсеңиз болот."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Кадимки шартта чалуу үчүн шашылыш кайра чалуу режиминен чыгыңыз."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Тармакта катталган эмес."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Мобилдик тармак жок."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR жеткиликтүү:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR абалы:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR жыштыгы:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Радио жыштыгынын режимин коюу"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Жыштык режиминин тизмеси жүктөлүүдө…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Жөндөө"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index a7b1640..d09086d 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"ເປີດໃຊ້ເຄືອຂ່າຍມືຖື, ປິດໂໝດຢູ່ໃນຍົນ ຫຼື ປິດໂໝດຕົວປະຢັດແບັດເຕີຣີເພື່ອໂທ."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ປິດໂໝດເຄື່ອງບິນເພື່ອເຮັດການໂທ."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ປິດໂໝດເຄື່ອງບິນ ຫຼືເຊື່ອມຕໍ່ກັບເຄືອຂ່າຍໄຮ້ສາຍເພື່ອເຮັດການໂທ."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ໂທລະສັບຮ້ອນເກີນໄປ"</b>\n\n"ບໍ່ສາມາດເຮັດການໂທນີ້ໄດ້. ກະລຸນາລອງອີກຄັ້ງເມື່ອໂທລະສັບຂອງທ່ານເຢັນລົງ.\n\nທ່ານຍັງສາມາດໂທສຸກເສີນໄດ້."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"ອອກຈາກໂໝດໂທກັບສຸກເສີນ ເພື່ອເຮັດການໂທປົກກະຕິ."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"ບໍ່ໄດ້ລົງທະບຽນໃນເຄືອຂ່າຍ."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"ເຄືອຂ່າຍມືຖືບໍ່ສາມາດໃຊ້ໄດ້."</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"ມີ NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"ສະຖານະ NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"ຄວາມຖີ່ NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"ການກຳນົດການແບ່ງສ່ວນເຄືອຂ່າຍ:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"ຕັ້ງໂໝດແຖບຄວາມຖີ່ວິທະຍຸ"</string>
<string name="band_mode_loading" msgid="795923726636735967">"ກຳລັງດາວໂຫລດລາຍຊື່ແຖບຄວາມຖີ່..."</string>
<string name="band_mode_set" msgid="6657819412803771421">"ກຳນົດ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 44e358f..c0b663b 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Įjunkite mobiliojo ryšio tinklą, išjunkite lėktuvo arba akumuliatoriaus tausojimo priemonės režimą, kad galėtumėte skambinti."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Išjunkite lėktuvo režimą, kad galėtumėte skambinti."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Išjunkite lėktuvo režimą arba prisijunkite prie belaidžio ryšio tinklo, kad galėtumėte skambinti."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefonas per karštas"</b>\n\n"Negalima užbaigti šio skambučio. Bandykite dar kartą, kai telefonas atvės.\n\nJūs vis dar galite skambinti pagalbos numeriais."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Jei norite skambinti ne pagalbos numeriu, išjunkite atgalinio skambinimo pagalbos numeriu režimą."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Neregistruota tinkle."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilusis tinklas negalimas."</string>
@@ -921,6 +920,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR (pasiekiama):"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR būsena:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR dažnis:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Nustatyti radijo dažnių režimą"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Įkeliamas dažnių sąrašas…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Nustatyti"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 5fe13bb..2d710a7 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Lai veiktu zvanu, ieslēdziet mobilo tīklu, izslēdziet lidojuma režīmu vai izslēdziet akumulatora enerģijas taupīšanas režīmu."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Lai veiktu zvanu, izslēdziet lidojuma režīmu."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Lai veiktu zvanu, izslēdziet lidojuma režīmu vai izveidojiet savienojumu ar bezvadu tīklu."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Tālrunis ir pārkarsis"</b>\n\n"Nevar veikt šo zvanu. Kad tālrunis būs atdzisis, mēģiniet vēlreiz.\n\nJoprojām varat veikt ārkārtas izsaukumus."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Lai veiktu parastu zvanu, izejiet no ārkārtas atzvana režīma."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Tīklā nav reģistrēts."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilais tīkls nav pieejams."</string>
@@ -918,6 +917,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR pieejamība:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR statuss:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR biežums:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Radio frekvenču joslu režīma iestatīšana"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Notiek joslu saraksta ielāde…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Iestatīt"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index b8f98df..7f72fa5 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Вклучете мобилна мрежа, исклучете го авионскиот режим или пак, штедачот на батеријата за да воспоставите повик."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Исклучете го авионскиот режим за да повикате."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Исклучете го авионскиот режим или поврзете се на безжична мрежа за да повикате."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Телефонот е премногу загреан"</b>\n\n"Повиков не може да се заврши. Обидете се повторно кога ќе се подизлади телефонот.\n\nСѐ уште може да воспоставувате итни повици."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Излезете од режимот на итен повратен повик за да направите обичен повик."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Не е регистриран на мрежа."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Не е достапна мобилна мрежа."</string>
@@ -615,9 +614,9 @@
<string name="ota_title_activate" msgid="4049645324841263423">"Активирај го телефонот"</string>
<string name="ota_touch_activate" msgid="838764494319694754">"Треба да се направи посебен повик за да ја активирате вашата телефонска услуга. \n\nПо притискање на „Активирај“, слушнете ги упатствата дадени за да го активирате вашиот телефон."</string>
<string name="ota_hfa_activation_title" msgid="3300556778212729671">"Се активира..."</string>
- <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"Телефонот ја активира услугата за мобилен интернет.\n\nОва може да потрае до 5 минути."</string>
+ <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"Телефонот ја активира услугата за мобилни податоци.\n\nОва може да потрае до 5 минути."</string>
<string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"Прескокни активација?"</string>
- <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Ако ја прескокнете активацијата, не може да воспоставувате повици или да се поврзувате на мрежи за мобилен интернет (иако може да се поврзувате со Wi-Fi мрежи). Додека не го активирате вашиот телефон, ќе ви стигнува порака да го активирате секој пат кога ќе го вклучите."</string>
+ <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Ако ја прескокнете активацијата, не може да воспоставувате повици или да се поврзувате на мрежи за мобилни податоци (иако може да се поврзувате со Wi-Fi мрежи). Додека не го активирате вашиот телефон, ќе ви стигнува порака да го активирате секој пат кога ќе го вклучите."</string>
<string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"Прескокни"</string>
<string name="ota_activate" msgid="7939695753665438357">"Активирај"</string>
<string name="ota_title_activate_success" msgid="1272135024761004889">"Телефонот е активиран."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Достапно за NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Состојба на NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Фреквенција на NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Поставете режим на појас на радио"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Се вчитува список на појаси…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Постави"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 7963e41..4703be3 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -340,22 +340,22 @@
<string name="maintenance_disable" msgid="2121032601497725602">"അറ്റകുറ്റപ്പണി സേവനങ്ങൾ പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="general_news_settings" msgid="2670499575962080411">"പൊതുവായ വാർത്തകൾ"</string>
<string name="bf_news_settings" msgid="8571709425370794221">"ബിസിനസ്സ്, സാമ്പത്തിക വാർത്തകൾ"</string>
- <string name="sports_news_settings" msgid="2684364556989168438">"കായിക വാർത്തകൾ"</string>
- <string name="entertainment_news_settings" msgid="4228527702346305543">"വിനോദ വാർത്തകൾ"</string>
+ <string name="sports_news_settings" msgid="2684364556989168438">"കായിക വാർത്ത"</string>
+ <string name="entertainment_news_settings" msgid="4228527702346305543">"വിനോദവാർത്ത"</string>
<string name="enable_disable_local" msgid="7654175079979415572">"പ്രാദേശികം"</string>
- <string name="local_enable" msgid="790606890868710629">"പ്രാദേശിക വാർത്തകൾ പ്രവർത്തനക്ഷമമാക്കി"</string>
- <string name="local_disable" msgid="7649945293198602877">"പ്രാദേശിക വാർത്തകൾ പ്രവർത്തനരഹിതമാക്കി"</string>
+ <string name="local_enable" msgid="790606890868710629">"പ്രാദേശിക വാർത്ത പ്രവർത്തനക്ഷമമാക്കി"</string>
+ <string name="local_disable" msgid="7649945293198602877">"പ്രാദേശിക വാർത്ത പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="enable_disable_regional" msgid="5783403191376564638">"പ്രാദേശികം"</string>
<string name="regional_enable" msgid="7730109417536296079">"പ്രാദേശിക വാർത്തകൾ പ്രവർത്തനക്ഷമമാക്കി"</string>
<string name="regional_disable" msgid="3781951818157772545">"പ്രാദേശിക വാർത്തകൾ പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="enable_disable_national" msgid="6198481711934897632">"ദേശീയം"</string>
- <string name="national_enable" msgid="5159683504138239304">"ദേശീയ വാർത്തകൾ പ്രവർത്തനക്ഷമമാക്കി"</string>
- <string name="national_disable" msgid="8484356368757118987">"ദേശീയ വാർത്തകൾ പ്രവർത്തനരഹിതമാക്കി"</string>
+ <string name="national_enable" msgid="5159683504138239304">"ദേശീയ വാർത്ത പ്രവർത്തനക്ഷമമാക്കി"</string>
+ <string name="national_disable" msgid="8484356368757118987">"ദേശീയ വാർത്ത പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="enable_disable_international" msgid="4204334217211198792">"അന്തര്ദ്ദേശീയം"</string>
- <string name="international_enable" msgid="8943466745792690340">"അന്തർദ്ദേശീയ വാർത്തകൾ പ്രവർത്തനക്ഷമമാക്കി"</string>
+ <string name="international_enable" msgid="8943466745792690340">"അന്തർദ്ദേശീയ വാർത്ത പ്രവർത്തനക്ഷമമാക്കി"</string>
<string name="international_disable" msgid="4803498658100318265">"അന്തർദ്ദേശീയ വാർത്തകൾ പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="list_language_title" msgid="1850167908665485738">"ഭാഷ"</string>
- <string name="list_language_summary" msgid="7921756070782277559">"വാർത്താഭാഷ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="list_language_summary" msgid="7921756070782277559">"വാർത്താഭാഷ തിരഞ്ഞെടുക്"</string>
<string-array name="list_language_entries">
<item msgid="2347238508726934281">"ഇംഗ്ലീഷ്"</item>
<item msgid="5172468397620875174">"ഫ്രഞ്ച്"</item>
@@ -405,9 +405,9 @@
<string name="enable_disable_mhh" msgid="715930476289202466">"മെഡിക്കൽ, ആരോഗ്യം, ആശുപത്രി എന്നിവ"</string>
<string name="mhh_enable" msgid="7224396815285147008">"മെഡിക്കൽ, ആരോഗ്യം, ആശുപത്രി എന്നിവ പ്രവർത്തനക്ഷമമാക്കി"</string>
<string name="mhh_disable" msgid="5503643028885686265">"മെഡിക്കൽ, ആരോഗ്യം, ആശുപത്രി എന്നിവ പ്രവർത്തനരഹിതമാക്കി"</string>
- <string name="enable_disable_technology_news" msgid="2794845609698078400">"സാങ്കേതിക വാർത്തകൾ"</string>
- <string name="technology_news_enable" msgid="1908991199492598311">"സാങ്കേതിക വാർത്തകൾ പ്രവർത്തനക്ഷമമാക്കി"</string>
- <string name="technology_news_disable" msgid="8388582607149800889">"സാങ്കേതിക വാർത്തകൾ പ്രവർത്തനരഹിതമാക്കി"</string>
+ <string name="enable_disable_technology_news" msgid="2794845609698078400">"സാങ്കേതിക വാർത്ത"</string>
+ <string name="technology_news_enable" msgid="1908991199492598311">"സാങ്കേതിക വാർത്ത പ്രവർത്തനക്ഷമമാക്കി"</string>
+ <string name="technology_news_disable" msgid="8388582607149800889">"സാങ്കേതിക വാർത്ത പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="enable_disable_multi_category" msgid="5958248155437940625">"ഒന്നിലധികം വിഭാഗം"</string>
<string name="multi_category_enable" msgid="4531915767817483960">"ഒന്നിലധികം വിഭാഗം പ്രവർത്തനക്ഷമമാക്കി"</string>
<string name="multi_category_disable" msgid="6325934413701238104">"ഒന്നിലധികം വിഭാഗം പ്രവർത്തനരഹിതമാക്കി"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"ഒരു കോൾ വിളിക്കാൻ മൊബൈൽ നെറ്റ്വർക്ക് ഓണാക്കുകയോ ഫ്ലൈറ്റ് മോഡ് അല്ലെങ്കിൽ ബാറ്ററി ലാഭിക്കൽ മോഡ് ഓഫാക്കുകയോ ചെയ്യുക."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ഒരു കോൾ വിളിക്കാൻ വിമാന മോഡ് ഓഫാക്കുക."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ഒരു കോൾ വിളിക്കാൻ വിമാന മോഡ് ഓഫാക്കുക അല്ലെങ്കിൽ വയർലെസ്സ് നെറ്റ്വർക്കിലേക്ക് കണക്റ്റുചെയ്യുക."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ഫോൺ വളരെയധികം ചൂടായിരിക്കുന്നു"</b>\n\n"ഈ കോൾ പൂർത്തിയാക്കാനാകില്ല. ഫോൺ തണുക്കുമ്പോൾ വീണ്ടും ശ്രമിക്കുക.\n\nഎമർജൻസി കോളുകൾ നിങ്ങൾക്ക് ഇപ്പോഴും ചെയ്യാവുന്നതാണ്."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"അടിയന്തിരമല്ലാത്ത കോൾ ചെയ്യാൻ അടിയന്തിര കോൾബാക്ക് മോഡിൽ നിന്ന് പുറത്തുകടക്കുക."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"നെറ്റ്വർക്കിൽ രജിസ്റ്റർ ചെയ്തിട്ടില്ല."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"മൊബൈൽ നെറ്റ്വർക്ക് ലഭ്യമല്ല."</string>
@@ -878,8 +877,8 @@
<string name="radioInfo_cid" msgid="1423185536264406705">"CID"</string>
<string name="radio_info_subid" msgid="6839966868621703203">"നിലവിലെ ഉപഐഡി:"</string>
<string name="radio_info_dds" msgid="1122593144425697126">"ഡിഫോൾട്ട് ഡാറ്റാ സിമ്മിന്റെ ഉപഐഡി:"</string>
- <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL ബാൻഡ്വിഡ്ത് (kbps):"</string>
- <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL ബാൻഡ്വിഡ്ത് (kbps):"</string>
+ <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL ബാൻഡ്വിത്ത് (kbps):"</string>
+ <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL ബാൻഡ്വിത്ത് (kbps):"</string>
<string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ഫിസിക്കൽ ചാനൽ കോൺഫിഗറേഷൻ:"</string>
<string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"സെൽ വിവരങ്ങൾ പുതുക്കിയെടുക്കൽ നിരക്ക്:"</string>
<string name="radio_info_cellinfo_label" msgid="8199062974670377659">"എല്ലാ സെൽ അളവ് വിവരങ്ങളും:"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR ലഭ്യം:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR നില:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR ഫ്രീക്വൻസി:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"റേഡിയോ ബാൻഡ് മോഡ് സജ്ജീകരിക്കുക"</string>
<string name="band_mode_loading" msgid="795923726636735967">"ബാൻഡ് ലിസ്റ്റ് ലോഡ് ചെയ്യുന്നു…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"സജ്ജീകരിക്കുക"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 48ac8c0..783c821 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -49,7 +49,7 @@
<string name="add_vm_number_str" msgid="7368168964435881637">"Дугаар нэмэх"</string>
<string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"Дуут шуудангийн тохиргоог зөвхөн Үндсэн хэрэглэгч өөрчлөх боломжтой."</string>
<string name="puk_unlocked" msgid="4627340655215746511">"Таны SIM карт тайлагдлаа. Таны утас тайлагдаж байна…"</string>
- <string name="label_ndp" msgid="7617392683877410341">"SIM сүлжээ тайлах ПИН"</string>
+ <string name="label_ndp" msgid="7617392683877410341">"SIM сүлжээ тайлах PIN"</string>
<string name="label_phoneid" msgid="8775611434123577808">"Операторын SIM түгжигдсэн"</string>
<string name="sim_ndp_unlock_text" msgid="7737338355451978338">"Тайлах"</string>
<string name="sim_ndp_dismiss_text" msgid="89667342248929777">"Алгасах"</string>
@@ -162,15 +162,15 @@
<string name="no_change" msgid="3737264882821031892">"Ямар ч өөрчлөлт хийгдсэнгүй."</string>
<string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"Дуут шуудангийн үйлчилгээг сонгох"</string>
<string name="voicemail_default" msgid="6427575113775462077">"Таны оператор компани"</string>
- <string name="vm_change_pin_old_pin" msgid="7154951790929009241">"Хуучин ПИН"</string>
- <string name="vm_change_pin_new_pin" msgid="2656200418481288069">"Шинэ ПИН"</string>
+ <string name="vm_change_pin_old_pin" msgid="7154951790929009241">"Хуучин PIN"</string>
+ <string name="vm_change_pin_new_pin" msgid="2656200418481288069">"Шинэ PIN"</string>
<string name="vm_change_pin_progress_message" msgid="626015184502739044">"Түр хүлээнэ үү."</string>
- <string name="vm_change_pin_error_too_short" msgid="1789139338449945483">"Шинэ ПИН хэт богино байна."</string>
- <string name="vm_change_pin_error_too_long" msgid="3634907034310018954">"Шинэ ПИН хэт урт байна."</string>
- <string name="vm_change_pin_error_too_weak" msgid="8581892952627885719">"Шинэ ПИН хэт амархан байна. Сайн нууц үгэнд үргэлжилсэн дараалал буюу давтагдсан цифр ордоггүй."</string>
- <string name="vm_change_pin_error_mismatch" msgid="5364847280026257331">"Хуучин ПИН таарахгүй байна."</string>
- <string name="vm_change_pin_error_invalid" msgid="5230002671175580674">"Шинэ ПИН-д буруу тэмдэгт агуулагдаж байна."</string>
- <string name="vm_change_pin_error_system_error" msgid="9116483527909681791">"ПИН-г өөрчлөх боломжгүй"</string>
+ <string name="vm_change_pin_error_too_short" msgid="1789139338449945483">"Шинэ PIN хэт богино байна."</string>
+ <string name="vm_change_pin_error_too_long" msgid="3634907034310018954">"Шинэ PIN хэт урт байна."</string>
+ <string name="vm_change_pin_error_too_weak" msgid="8581892952627885719">"Шинэ PIN хэт амархан байна. Сайн нууц үгэнд үргэлжилсэн дараалал буюу давтагдсан цифр ордоггүй."</string>
+ <string name="vm_change_pin_error_mismatch" msgid="5364847280026257331">"Хуучин PIN таарахгүй байна."</string>
+ <string name="vm_change_pin_error_invalid" msgid="5230002671175580674">"Шинэ PIN-д буруу тэмдэгт агуулагдаж байна."</string>
+ <string name="vm_change_pin_error_system_error" msgid="9116483527909681791">"PIN-г өөрчлөх боломжгүй"</string>
<string name="vvm_unsupported_message_format" msgid="4206402558577739713">"Дэмжигдээгүй мессежийн төрөл, сонсохын тулд <xliff:g id="NUMBER">%s</xliff:g> руу залгана уу."</string>
<string name="network_settings_title" msgid="7560807107123171541">"Мобайл сүлжээ"</string>
<string name="label_available" msgid="1316084116670821258">"Боломжтой сүлжээнүүд"</string>
@@ -449,7 +449,7 @@
<string name="enable_fdn_ok" msgid="5080925177369329827">"FDN идэвхгүйжүүлэх"</string>
<string name="disable_fdn_ok" msgid="3745475926874838676">"FDN-г идэвхжүүлэх"</string>
<string name="sum_fdn" msgid="6152246141642323582">"Тогтсон залгах дугааруудыг удирдах"</string>
- <string name="sum_fdn_change_pin" msgid="3510994280557335727">"FDN хандалтын ПИН-г өөрчлөх"</string>
+ <string name="sum_fdn_change_pin" msgid="3510994280557335727">"FDN хандалтын PIN-г өөрчлөх"</string>
<string name="sum_fdn_manage_list" msgid="3311397063233992907">"Утасны дугаарын жагсаалтыг удирдах"</string>
<string name="voice_privacy" msgid="7346935172372181951">"Дууны нууцлал"</string>
<string name="voice_privacy_summary" msgid="3556460926168473346">"Сайжруулсан нууцлалын төлвийг идэвхжүүлэх"</string>
@@ -475,7 +475,7 @@
<string name="delete_fdn_contact" msgid="7027405651994507077">"Тогтвортой залгах дугаарыг устгах"</string>
<string name="deleting_fdn_contact" msgid="6872320570844460428">"Тогтвортой залгах дугаарыг устгаж байна…"</string>
<string name="fdn_contact_deleted" msgid="1680714996763848838">"Тогтвортой залгах дугаарыг устгав."</string>
- <string name="pin2_invalid" msgid="2313954262684494442">"Та буруу ПИН оруулсан учир FDN шинэчлэгдсэнгүй."</string>
+ <string name="pin2_invalid" msgid="2313954262684494442">"Та буруу PIN оруулсан учир FDN шинэчлэгдсэнгүй."</string>
<string name="fdn_invalid_number" msgid="9067189814657840439">"Дугаар <xliff:g id="FDN_NUMBER_LIMIT_LENGTH">%d</xliff:g> цифрээс хэтэрсэн тул FDN-г шинэчлээгүй."</string>
<string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"FDN шинэчлэгдсэнгүй. PIN2 буруу байсан, эсхүл утасны дугаар зөвшөөрөгдсөнгүй."</string>
<string name="fdn_failed" msgid="216592346853420250">"ФДН ажиллуулах амжилтгүй."</string>
@@ -483,23 +483,23 @@
<string name="simContacts_empty" msgid="1135632055473689521">"Таны SIM картанд харилцагчид байхгүй байна."</string>
<string name="simContacts_title" msgid="2714029230160136647">"Оруулах харилцагчдыг сонгоно уу"</string>
<string name="simContacts_airplaneMode" msgid="4654884030631503808">"SIM картнаас дугаар импортлохын тулд онгоцны горимыг унтраа"</string>
- <string name="enable_pin" msgid="967674051730845376">"SIM ПИН Идэвхжүүлэх/идэвхгүйжүүлэх"</string>
- <string name="change_pin" msgid="3657869530942905790">"SIM ПИН өөрчлөх"</string>
- <string name="enter_pin_text" msgid="3182311451978663356">"SIM ПИН:"</string>
- <string name="oldPinLabel" msgid="8618515202411987721">"Хуучин ПИН"</string>
- <string name="newPinLabel" msgid="3585899083055354732">"Шинэ ПИН"</string>
- <string name="confirmPinLabel" msgid="7783531218662473778">"Шинэ ПИН-г баталгаажуулах"</string>
- <string name="badPin" msgid="4549286285015892321">"Таны оруулсан хуучин ПИН буруу байна. Дахин оролдоно уу."</string>
- <string name="mismatchPin" msgid="1467254768290323845">"Таны оруулсан ПИН таарахгүй байна. Дахин оролдоно уу."</string>
- <string name="invalidPin" msgid="7363723429414001979">"4-с 8 цифртэй ПИН оруулна уу"</string>
- <string name="disable_sim_pin" msgid="3112303905548613752">"SIM-ний ПИН-г цэвэрлэх"</string>
+ <string name="enable_pin" msgid="967674051730845376">"SIM PIN Идэвхжүүлэх/идэвхгүйжүүлэх"</string>
+ <string name="change_pin" msgid="3657869530942905790">"SIM PIN өөрчлөх"</string>
+ <string name="enter_pin_text" msgid="3182311451978663356">"SIM PIN:"</string>
+ <string name="oldPinLabel" msgid="8618515202411987721">"Хуучин PIN"</string>
+ <string name="newPinLabel" msgid="3585899083055354732">"Шинэ PIN"</string>
+ <string name="confirmPinLabel" msgid="7783531218662473778">"Шинэ PIN-г баталгаажуулах"</string>
+ <string name="badPin" msgid="4549286285015892321">"Таны оруулсан хуучин PIN буруу байна. Дахин оролдоно уу."</string>
+ <string name="mismatchPin" msgid="1467254768290323845">"Таны оруулсан PIN таарахгүй байна. Дахин оролдоно уу."</string>
+ <string name="invalidPin" msgid="7363723429414001979">"4-с 8 цифртэй PIN оруулна уу"</string>
+ <string name="disable_sim_pin" msgid="3112303905548613752">"SIM-ний PIN-г цэвэрлэх"</string>
<string name="enable_sim_pin" msgid="445461050748318980">"SIM-ний ПИН-г тохируулах"</string>
<string name="enable_in_progress" msgid="4135305985717272592">"ПИН-г тохируулж байна..."</string>
- <string name="enable_pin_ok" msgid="2877428038280804256">"ПИН-г тохирууллаа"</string>
- <string name="disable_pin_ok" msgid="888505244389647754">"ПИН цэвэрлэгдсэн"</string>
- <string name="pin_failed" msgid="4527347792881939652">"ПИН буруу байна"</string>
- <string name="pin_changed" msgid="7291153750090452808">"ПИН шинэчлэгдсэн"</string>
- <string name="puk_requested" msgid="2061337960609806851">"Нууц үг буруу байна. ПИН код одоо түгжигдсэн. PUK кодыг авах хүсэлт тавигдсан."</string>
+ <string name="enable_pin_ok" msgid="2877428038280804256">"PIN-г тохирууллаа"</string>
+ <string name="disable_pin_ok" msgid="888505244389647754">"PIN цэвэрлэгдсэн"</string>
+ <string name="pin_failed" msgid="4527347792881939652">"PIN буруу байна"</string>
+ <string name="pin_changed" msgid="7291153750090452808">"PIN шинэчлэгдсэн"</string>
+ <string name="puk_requested" msgid="2061337960609806851">"Нууц үг буруу байна. PIN код одоо түгжигдсэн. PUK кодыг авах хүсэлт тавигдсан."</string>
<string name="enter_pin2_text" msgid="7266379426804295979">"PIN2"</string>
<string name="oldPin2Label" msgid="4648543187859997203">"Хуучин PIN2"</string>
<string name="newPin2Label" msgid="1840905981784453939">"Шинэ PIN2"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Дуудлага хийхийн тулд мобайл сүлжээг асаах, нислэгийн горим буюу батерей хэмнэх горимыг идэвхгүй болгоно уу."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Дуудлага хийхийн тулд онгоцны горимыг унтраа."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Дуудлага хийхийн тулд онгоцны горимыг унтраа эсвэл утасгүй интернетэд холбогдоно уу."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Утас хэт халуун байна"</b>\n\n"Энэ дуудлагыг гүйцээх боломжгүй. Та утсаа хөрсөн үед дахин оролдоно уу.\n\nТа яаралтай дуудлага хийх боломжтой хэвээр байна."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Яаралтай түргэн тусламжийн бус дуудлага хийхийн тулд яаралтай түргэн тусламжийн callback горимоос гарна уу."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Сүлжээнд бүртгэгдээгүй."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Мобайль сүлжээ байхгүй."</string>
@@ -669,8 +668,8 @@
<string name="description_dialpad_button" msgid="7395114120463883623">"дугаар цуглуулах самбарыг харуулах"</string>
<string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"Яаралтай тусламжийн дугаар цуглуулах самбар"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"Визуал дуут шуудан"</string>
- <string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"ПИН тохируулах"</string>
- <string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"ПИН өөрчлөх"</string>
+ <string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"PIN тохируулах"</string>
+ <string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"PIN өөрчлөх"</string>
<string name="preference_category_ringtone" msgid="8787281191375434976">"Хонхны ая & Чичиргээ"</string>
<string name="pstn_connection_service_label" msgid="9200102709997537069">"Суурилагдсан SIM карт"</string>
<string name="enable_video_calling_title" msgid="7246600931634161830">"Видео дуудлагыг идэвхжүүлэх"</string>
@@ -693,18 +692,18 @@
<string name="callFailed_low_battery" msgid="4056828320214416182">"Цэнэг бага байгаа тул видео дуудлагыг дуусгасан."</string>
<string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Энэ байрлалд Wi-Fi дуудлагаар яаралтай дуудлага хийх боломжгүй."</string>
<string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"Энэ байрлалд Wi-Fi дуудлага хийх боломжгүй байна."</string>
- <string name="change_pin_title" msgid="3564254326626797321">"Дуут шуудангийн ПИН-г өөрчлөх"</string>
+ <string name="change_pin_title" msgid="3564254326626797321">"Дуут шуудангийн PIN-г өөрчлөх"</string>
<string name="change_pin_continue_label" msgid="5177011752453506371">"Үргэлжлүүлэх"</string>
<string name="change_pin_cancel_label" msgid="2301711566758827936">"Цуцлах"</string>
<string name="change_pin_ok_label" msgid="6861082678817785330">"OK"</string>
- <string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"Хуучин ПИН-ээ баталгаажуулна уу"</string>
- <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"Үргэлжлүүлэхийн тулд дуут шуудангийн ПИН оруулна уу."</string>
- <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"Шинэ ПИН тохируулах"</string>
- <string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"ПИН <xliff:g id="MIN">%1$d</xliff:g> - <xliff:g id="MAX">%2$d</xliff:g> цифртэй байх ёстой."</string>
- <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"ПИН кодоо баталгаажуулна уу"</string>
- <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"ПИН код таарахгүй байна"</string>
- <string name="change_pin_succeeded" msgid="2504705600693014403">"Дуут шуудангийн ПИН шинэчлэгдсэн"</string>
- <string name="change_pin_system_error" msgid="7772788809875146873">"ПИН тохируулах боломжгүй"</string>
+ <string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"Хуучин PIN-ээ баталгаажуулна уу"</string>
+ <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"Үргэлжлүүлэхийн тулд дуут шуудангийн PIN оруулна уу."</string>
+ <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"Шинэ PIN тохируулах"</string>
+ <string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"PIN <xliff:g id="MIN">%1$d</xliff:g> - <xliff:g id="MAX">%2$d</xliff:g> цифртэй байх ёстой."</string>
+ <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"PIN кодоо баталгаажуулна уу"</string>
+ <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"PIN код таарахгүй байна"</string>
+ <string name="change_pin_succeeded" msgid="2504705600693014403">"Дуут шуудангийн PIN шинэчлэгдсэн"</string>
+ <string name="change_pin_system_error" msgid="7772788809875146873">"PIN тохируулах боломжгүй"</string>
<string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"Дата роумингийг идэвхгүй болгосон"</string>
<string name="mobile_data_status_roaming_turned_on_subtext" msgid="5615757897768777865">"Дата роумингийг асаасан"</string>
<string name="mobile_data_status_roaming_without_plan_subtext" msgid="6536671968072284677">"Одоо роумингтэй байна, дата багц шаардлагатай"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR боломжтой:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR төлөв:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR давтамж:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Радио мессежийн горимыг тохируулах"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Мессежийн жагсаалтыг ачаалж байна…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Тохируулах"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 7c788fa..1c32881 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -523,7 +523,7 @@
<string name="card_title_dialing" msgid="8742182654254431781">"डायल करत आहे"</string>
<string name="card_title_redialing" msgid="18130232613559964">"रीडायल करत आहे"</string>
<string name="card_title_conf_call" msgid="901197309274457427">"कॉंफरन्स कॉल"</string>
- <string name="card_title_incoming_call" msgid="881424648458792430">"इनकमिंग कॉल"</string>
+ <string name="card_title_incoming_call" msgid="881424648458792430">"येणारे कॉल"</string>
<string name="card_title_call_ended" msgid="650223980095026340">"कॉल संपला"</string>
<string name="card_title_on_hold" msgid="9028319436626975207">"होल्ड वर"</string>
<string name="card_title_hanging_up" msgid="814874106866647871">"हँग अप करणेे"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"कॉल करण्यासाठी मोबाइल नेटवर्क सुरू करा, विमान मोड बंद करा किंवा बॅटरी बचकर्ता मोड बंद करा."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"कॉल करण्यासाठी विमान मोड बंद करा."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"कॉल करण्यासाठी विमान मोड बंद करा किंवा वायरलेस नेटवर्कशी कनेक्ट करा."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"फोन खूप गरम झाला आहे"</b>\n\n"हा कॉल पूर्ण करू शकत नाही. तुमचा फोन थंड झाल्यावर पुन्हा प्रयत्न करा.\n\nतुम्ही अजूनही आणीबाणी कॉल करू शकता."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"आणीबाणी नसलेला कॉल करण्यासाठी आणीबाणी कॉलबॅक मोडमधून बाहेर पडा."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"नेटवर्कवर नोंदणीकृत नाही."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"मोबाइल नेटवर्क उपलब्ध नाही."</string>
@@ -785,8 +784,8 @@
<string name="call_barring_baoicr_enabled" msgid="1615324165512798478">"जाणारे इंटरनॅशनल रोमिंग ब्लॉक करणे बंद करायचे का?"</string>
<string name="call_barring_baoicr_disabled" msgid="172010175248142831">"जाणारे इंटरनॅशनल रोमिंग ब्लॉक करायचे का?"</string>
<string name="call_barring_baic" msgid="7941393541678658566">"सर्व येणारे"</string>
- <string name="call_barring_baic_enabled" msgid="4357332358020337470">"सर्व इनकमिंग कॉल ब्लॉक करणे बंद करायचे का?"</string>
- <string name="call_barring_baic_disabled" msgid="2355945245938240958">"सर्व इनकमिंग कॉल ब्लॉक करायचे का?"</string>
+ <string name="call_barring_baic_enabled" msgid="4357332358020337470">"सर्व येणारे कॉल ब्लॉक करणे बंद करायचे का?"</string>
+ <string name="call_barring_baic_disabled" msgid="2355945245938240958">"सर्व येणारे कॉल ब्लॉक करायचे का?"</string>
<string name="call_barring_baicr" msgid="8712249337313034226">"येणारे इंटरनॅशनल रोमिंग"</string>
<string name="call_barring_baicr_enabled" msgid="64774270234828175">"सर्व येणारे इंटरनॅशनल रोमिंग ब्लॉक करणे बंद करायचे का?"</string>
<string name="call_barring_baicr_disabled" msgid="3488129262744027262">"येणारे इंटरनॅशनल रोमिंग ब्लॉक करायचे का?"</string>
@@ -811,7 +810,7 @@
<string name="supp_service_notification_call_waiting" msgid="4577403881609445324">"कॉल प्रतीक्षेत आहे."</string>
<string name="supp_service_clir_suppression_rejected" msgid="6105737020194776121">"क्रमांक ब्लॉक करणे रद्द केले."</string>
<string name="supp_service_closed_user_group_call" msgid="2811636666505250689">"बंद वापरकर्ता गट कॉल."</string>
- <string name="supp_service_incoming_calls_barred" msgid="2034627421274447674">"इनकमिंग कॉल अवरोधित केले."</string>
+ <string name="supp_service_incoming_calls_barred" msgid="2034627421274447674">"येणारे कॉल अवरोधित केले."</string>
<string name="supp_service_outgoing_calls_barred" msgid="5205725332394087112">"जाणारे कॉल अवरोधित केले."</string>
<string name="supp_service_call_forwarding_active" msgid="7910162960395132464">"कॉल फॉरवर्ड होत आहे."</string>
<string name="supp_service_additional_call_forwarded" msgid="8772753260008398632">"अतिरिक्त कॉल फॉरवर्ड केला."</string>
@@ -846,8 +845,8 @@
<string name="dsds_dialog_confirm" msgid="9032004888134129885">"रीस्टार्ट करा"</string>
<string name="dsds_dialog_cancel" msgid="3245958947099586655">"रद्द करा"</string>
<string name="radio_info_radio_power" msgid="8805595022160471587">"मोबाइल रेडिओ पॉवर"</string>
- <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"सिम ॲड्रेस बुक पहा"</string>
- <string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"निश्चित डायलिंग नंबर पहा"</string>
+ <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"सिम ॲड्रेस बुक पाहा"</string>
+ <string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"निश्चित डायलिंग नंबर पाहा"</string>
<string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"सर्व्हिस डायलिंग नंबर पहा"</string>
<string name="radioInfo_menu_getIMS" msgid="1950869267853198232">"IMS सेवा स्थिती"</string>
<string name="radio_info_ims_reg_status_title" msgid="6875885401313992007">"IMS स्थिती"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR उपलब्ध:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR स्थिती:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR वारंवारता:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"रेडिओ बँड मोड सेट करा"</string>
<string name="band_mode_loading" msgid="795923726636735967">"बँड सूची लोड करत आहे…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"सेट करा"</string>
@@ -924,7 +925,7 @@
<string name="phone_info_label" product="default" msgid="1784175881556791433">"फोनची माहिती"</string>
<string name="carrier_provisioning" msgid="2668065041869578376">"वाहक सुविधा माहिती"</string>
<string name="trigger_carrier_provisioning" msgid="1301829588620638234">"वाहक सुविधा ट्रिगर करा"</string>
- <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"तुमचा ब्लूटूथ सिग्नल कमकुवत आहे. स्पीकरफोनवर स्विच करून पहा."</string>
+ <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"तुमचा ब्लूटूथ सिग्नल कमकुवत आहे. स्पीकरफोनवर स्विच करून पाहा."</string>
<string name="call_quality_notification_name" msgid="3476828289553948830">"कॉल गुणवत्ता सूचना"</string>
<string name="notification_channel_sip_account" msgid="1261816025156179637">"कालबाह्य झालेली SIP खाती"</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 4ddb2e6..c58d6f6 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Hidupkan rangkaian mudah alih, matikan mod pesawat atau matikan mod penjimat bateri untuk membuat panggilan."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Matikan mod pesawat untuk membuat panggilan."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Matikan mod pesawat atau sambungkan ke rangkaian wayarles untuk membuat panggilan."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon terlalu panas"</b>\n\n"Tidak dapat melengkapkan panggilan ini. Cuba lagi apabila telefon anda menyejuk.\n\nAnda masih boleh membuat panggilan kecemasan."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Keluar daripada mod panggil balik kecemasan untuk membuat panggilan bukan kecemasan."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Tidak didaftarkan pada rangkaian."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Rangkaian mudah alih tidak tersedia."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR Tersedia:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Keadaan NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frekuensi NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Tetapkan Mod Jalur Radio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Memuatkan Senarai Jalur…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Tetapkan"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 03aea11..16dc582 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -49,7 +49,7 @@
<string name="add_vm_number_str" msgid="7368168964435881637">"နံပါတ်ထပ်ထည့်ရန်"</string>
<string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"အသံမေးလ်ဆက်တင်များကို အဓိကအသုံးပြုသူသာ ပြင်ဆင်နိုင်ပါသည်။"</string>
<string name="puk_unlocked" msgid="4627340655215746511">"သင့် ဆင်းမ်ကဒ်အား ပိတ်ဆို့မှုကို ဖယ်ရှားပြီးပါပြီ။ သင့်ဖုန်းဟာ သော့ဖွင့်နေပါသည်…"</string>
- <string name="label_ndp" msgid="7617392683877410341">"ဆင်းမ်ကတ် ကွန်ရက် သော့ဖွင့်သော ပင်နံပါတ်"</string>
+ <string name="label_ndp" msgid="7617392683877410341">"ဆင်းမ်ကဒ် ကွန်ရက် သော့ဖွင့်သော ပင်နံပါတ်"</string>
<string name="label_phoneid" msgid="8775611434123577808">"အော်ပရေတာအတွက် ဆင်းမ်ကတ်ကို လော့ခ်ချထားသည်"</string>
<string name="sim_ndp_unlock_text" msgid="7737338355451978338">"ဖွင့်ရန်"</string>
<string name="sim_ndp_dismiss_text" msgid="89667342248929777">"ပယ်ရန်"</string>
@@ -186,9 +186,9 @@
<string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"%1$s သို့ ချိတ်ဆက်ထားချိန်တွင် မရရှိနိုင်ပါ"</string>
<string name="network_select_title" msgid="4117305053881611988">"ကွန်ရက်"</string>
<string name="register_automatically" msgid="3907580547590554834">"အလိုအလျောက် မှတ်ပုံတင်ခြင်း…"</string>
- <string name="preferred_network_mode_title" msgid="5253395265169539830">"ဦးစားပေး ကွန်ရက်အမျိုးအစား"</string>
+ <string name="preferred_network_mode_title" msgid="5253395265169539830">"ပိုနှစ်သက်သော ကွန်ရက်အမျိုးအစား"</string>
<string name="preferred_network_mode_summary" msgid="3787989000044330064">"ကွန်ရက် လုပ်ဆောင်မှုစနစ်အား ပြောင်းပါ"</string>
- <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"ဦးစားပေး ကွန်ရက်အမျိုးအစား"</string>
+ <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"ပိုနှစ်သက်သော ကွန်ရက်အမျိုးအစား"</string>
<string name="forbidden_network" msgid="5081729819561333023">"(တားမြစ်ထားသည်)"</string>
<string name="choose_network_title" msgid="5335832663422653082">"ကွန်ရက် ရွေးရန်"</string>
<string name="network_disconnected" msgid="8844141106841160825">"ချိတ်ဆက်မှုပြတ်နေပါသည်"</string>
@@ -301,7 +301,7 @@
<string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_2">%2$s</xliff:g> အထိ မိုဘိုင်းဒေတာ <xliff:g id="ID_1">%1$s</xliff:g> ကို အသုံးပြုထားပါသည်"</string>
<string name="advanced_options_title" msgid="9208195294513520934">"အဆင့်မြင့်"</string>
<string name="carrier_settings_euicc" msgid="1190237227261337749">"ဝန်ဆောင်မှုပေးသူ"</string>
- <string name="keywords_carrier_settings_euicc" msgid="8540160967922063745">"ဖုန်းကုမ္ပဏီ၊ esim၊ ဆင်းမ်ကတ်၊ euicc၊ ဖုန်းလိုင်းများ ပြောင်းရန်၊ ဖုန်းလိုင်း ထည့်ရန်"</string>
+ <string name="keywords_carrier_settings_euicc" msgid="8540160967922063745">"ဖုန်းကုမ္ပဏီ၊ esim၊ ဆင်းမ်ကဒ်၊ euicc၊ ဖုန်းလိုင်းများ ပြောင်းရန်၊ ဖုန်းလိုင်း ထည့်ရန်"</string>
<string name="carrier_settings_euicc_summary" msgid="2027941166597330117">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> — <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>"</string>
<string name="mobile_data_settings_title" msgid="7228249980933944101">"မိုဘိုင်းဒေတာ"</string>
<string name="mobile_data_settings_summary" msgid="5012570152029118471">"မိုဘိုင်းကွန်ရက်သုံးပြီး ဒေတာကို ဝင်သုံးခွင့်ပေးပါ"</string>
@@ -484,8 +484,8 @@
<string name="simContacts_title" msgid="2714029230160136647">"ထည့်ယူရန် လိပ်စာများ ရွေးပါ"</string>
<string name="simContacts_airplaneMode" msgid="4654884030631503808">"SIM ကဒ်မှ အဆက်အသွယ်များ သွင်းယူရန် လေယာဉ်ပျံမုဒ် ပိတ်ထားပါ။"</string>
<string name="enable_pin" msgid="967674051730845376">"ဆင်းမ် ပင်နံပါတ်ကို ပယ်ဖျက်၊ပြုလုပ်ရန်"</string>
- <string name="change_pin" msgid="3657869530942905790">"ဆင်းမ်ကတ် ပင်နံပါတ်ပြောင်းရန်"</string>
- <string name="enter_pin_text" msgid="3182311451978663356">"ဆင်းမ်ကတ် ပင်နံပါတ်:"</string>
+ <string name="change_pin" msgid="3657869530942905790">"ဆင်းမ်ကဒ် ပင်နံပါတ်ပြောင်းရန်"</string>
+ <string name="enter_pin_text" msgid="3182311451978663356">"ဆင်းမ်ကဒ် ပင်နံပါတ်:"</string>
<string name="oldPinLabel" msgid="8618515202411987721">"ပင်နံပါတ် အဟောင်း"</string>
<string name="newPinLabel" msgid="3585899083055354732">"ပင်နံပါတ် အသစ်"</string>
<string name="confirmPinLabel" msgid="7783531218662473778">"ပင်နံပါတ်အသစ်အား သေချာကြောင်း လက်ခံပါ"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"ဖုန်းခေါ်ရန် မိုဘိုင်းကွန်ရက်ဖွင့်ပြီး လေယာဉ်ပျံမုဒ် (သို့) ဘက်ထရီချွေတာရေးမုဒ်ကို ပိတ်ပါ။"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ဖုန်းခေါ်ရန် လေယာဉ်ပျံမုဒ် ပိတ်ထားပါ။"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ဖုန်းခေါ်ရန် လေယာဉ်ပျံမုဒ် ပိတ်ပါ သို့မဟုတ် ကြိုးမဲ့ကွန်ယက်သို့ ချိတ်ဆက်ပါ။"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ဖုန်းအလွန်ပူနေသည်"</b>\n\n"ဤဖုန်းကို ခေါ်ဆို၍မရပါ။ ဖုန်းအေးသွားသောအခါ ထပ်စမ်းကြည့်ပါ။\n\nအရေးပေါ်ဖုန်းခေါ်ခြင်းများ ပြုလုပ်နိုင်သေးသည်။"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"အရေးပေါ် မဟုတ်သည့် ခေါ်ဆိုမှုကို ပြုလုပ်ရန် အရေးပေါ် ဖုန်းခေါ်မှုမှ ထွက်ပါ။"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"ကွန်ယက်ပေါ်မှာ မှတ်ပုံတင်မှု မပြုလုပ်ထားပါ"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"မိုဘိုင်းကွန်ယက်များ မရှိပါ"</string>
@@ -674,7 +673,7 @@
<string name="preference_category_ringtone" msgid="8787281191375434976">"ဖုန်းမြည်သံ & တုန်ခါသံ"</string>
<string name="pstn_connection_service_label" msgid="9200102709997537069">"တပ်ဆင်ပြီး ဆင်းမ် ကဒ်များ"</string>
<string name="enable_video_calling_title" msgid="7246600931634161830">"ဗီဒီယို ခေါ်ဆိုမှုများကို ဖွင့်ထားရန်"</string>
- <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"ဗီဒီယိုခေါ်ဆိုမှု ဖွင့်လိုပါက အဆင့်မြှင့်ထားသည့် 4G LTE မုဒ်ကို ကွန်ရက်ဆက်တင်များတွင် ဖွင့်ရပါမည်။"</string>
+ <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"ဗွီဒီယို ခေါ်ဆိုမှု ဖွင့်ရန်၊ မြှင့်ထားသည့် 4G LTE မုဒ်ကို ကွန်ရက် ချိိန်ညှိချက်များတွင် ဖွင့်ပေးရပါမည်။"</string>
<string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"ကွန်ရက် ဆက်တင်များ"</string>
<string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"ပိတ်ရန်"</string>
<string name="sim_label_emergency_calls" msgid="9078241989421522310">"အရေးပေါ်ခေါ်ဆိုမှုများ"</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR အသုံးပြုနိုင်သည် -"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR အခြေအနေ -"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR ကြိမ်နှုန်း -"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"ကွန်ရက်ခွဲခြားမှု စီစဉ်သတ်မှတ်ချက်-"</string>
<string name="band_mode_title" msgid="7988822920724576842">"ရေဒီယိုလိုင်းမုဒ်အဖြစ် သတ်မှတ်ပါ"</string>
<string name="band_mode_loading" msgid="795923726636735967">"ရေဒီယိုလိုင်းစာရင်းကို ဖွင့်နေသည်…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"သတ်မှတ်ရန်"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index b956af6..efce396 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Slå på mobilnettverket, slå av flymodus eller slå av batterisparingsmodus for å ringe ut."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Slå av flymodus for å ringe."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Slå av flymodus eller koble til et trådløst nettverk for å ringe."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefonen er for varm"</b>\n\n"Kan ikke fullføre dette anropet. Prøv igjen når telefonen har kjølt seg ned.\n\nDu kan fortsatt foreta nødanrop."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Avslutt modusen for nødanrop for å gjøre et vanlig anrop."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ikke registrert på nettverket."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilnettverket er ikke tilgjengelig."</string>
@@ -596,7 +595,7 @@
<string name="hac_mode_summary" msgid="7774989500136009881">"Slå på kompatibilitet med høreapparater"</string>
<string name="rtt_mode_title" msgid="3075948111362818043">"Sanntidstekst-anrop (STT)"</string>
<string name="rtt_mode_summary" msgid="8631541375609989562">"Tillat meldingsutveksling i talesamtaler"</string>
- <string name="rtt_mode_more_information" msgid="587500128658756318">"STT er til hjelp for brukere som er døve, hørselshemmede, har taleproblemer 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="rtt_mode_more_information" msgid="587500128658756318">"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="5268008247378355389">"Merk: RTT er ikke tilgjengelig ved roaming"</string>
<string-array name="tty_mode_entries">
<item msgid="3238070884803849303">"TTY av"</item>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR tilgjengelig:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR-tilstand:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR-frekvens:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Angi båndmodus for radio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Laster inn båndlisten …"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Angi"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index e6d6abc..7e0dac8 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -282,8 +282,8 @@
<string name="data_enable_summary" msgid="696860063456536557">"डेटा उपयोगलाई अनुमति दिनुहोस्"</string>
<string name="dialog_alert_title" msgid="5260471806940268478">"ध्यानाकर्षण"</string>
<string name="roaming" msgid="1576180772877858949">"रोमिङ"</string>
- <string name="roaming_enable" msgid="6853685214521494819">"रोमिङको समयमा डेटा सेवामा कनेक्ट गर्नुहोस्"</string>
- <string name="roaming_disable" msgid="8856224638624592681">"रोमिङको समयमा डेटा सेवा कनेक्ट गर्नुहोस्"</string>
+ <string name="roaming_enable" msgid="6853685214521494819">"रोमिङको समयमा डेटा सेवामा जडान गर्नुहोस्"</string>
+ <string name="roaming_disable" msgid="8856224638624592681">"रोमिङको समयमा डेटा सेवा जडान गर्नुहोस्"</string>
<string name="roaming_reenable_message" msgid="1951802463885727915">"डेटा रोमिङ सक्रिय गरियो। सक्रिय गर्न ट्याप गर्नुहोस्।"</string>
<string name="roaming_enabled_message" msgid="9022249120750897">"रोमिङ शुल्क लाग्न सक्छ। परिमार्जन गर्न ट्याप गर्नुहोस्"</string>
<string name="roaming_notification_title" msgid="3590348480688047320">"मोबाइल डेटाको जडान टुट्यो"</string>
@@ -536,12 +536,11 @@
<string name="notification_network_selection_text" msgid="553288408722427659">"चयन गरिएको नेटवर्क <xliff:g id="OPERATOR_NAME">%s</xliff:g> उपलब्ध छैन"</string>
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"मोबाइल नेटवर्क सक्रिय पार्नुहोस्, कल गर्न हवाइजहाज मोड वा ब्याट्री सेवर मोड निष्क्रिय पार्नुहोस्।"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"एक कल गर्न हवाइजहाज मोड बन्द गर्नुहोस्।"</string>
- <string name="incall_error_power_off_wfc" msgid="9125661184694727052">"एक कल गर्न हवाइजहाज मोड बन्द गर्नुहोस् वा एक ताररहितको सञ्जालमा कनेक्ट गर्नुहोस्।"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"फोन ज्यादै तातेको छ"</b>\n\n"यो कल जारी राख्न सकिँदैन। फोन सेलाएपछि फेरि प्रयास गर्नुहोस्।\n\nतपाईं अझै पनि आपत्कालीन कलहरू गर्न सक्नुहुन्छ।"</string>
+ <string name="incall_error_power_off_wfc" msgid="9125661184694727052">"एक कल गर्न हवाइजहाज मोड बन्द गर्नुहोस् वा एक ताररहितको सञ्जालमा जडान गर्नुहोस्।"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"गैर-आपत्कालीन कल गर्न आपत्कालीन कलब्याक मोडबाट निस्कनुहोस्।"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"नेटवर्कमा दर्ता भएको छैन।"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"मोबाइल नेटवर्क उपलब्ध छैन।"</string>
- <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"मोबाइल नेटवर्क उपलब्ध छैन। कल गर्न तारविनाको नेटवर्कमा कनेक्ट गर्नुहोस्।"</string>
+ <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"मोबाइल नेटवर्क उपलब्ध छैन। कल गर्न तारविनाको नेटवर्कमा जडान गर्नुहोस्।"</string>
<string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"एक कल गर्नको लागि, एक वैध नम्बर प्रविष्टि गर्नुहोस्।"</string>
<string name="incall_error_call_failed" msgid="393508653582682539">"कल विफल भयो।"</string>
<string name="incall_error_cannot_add_call" msgid="5425764862628655443">"यतिबेला कल गर्न सकिएन। तपाईंले कुनै सन्देश पठाएर सम्पर्क गर्ने प्रयास गर्न सक्नुहुन्छ।"</string>
@@ -554,7 +553,7 @@
<string name="incall_error_supp_service_reject" msgid="3044363092441655912">"कल अस्वीकार गर्न सक्दैन।"</string>
<string name="incall_error_supp_service_hangup" msgid="836524952243836735">"कल (हरू) जारी गर्न सकिँदैन ।"</string>
<string name="incall_error_supp_service_hold" msgid="8535056414643540997">"कल सञ्चालन गर्न सकिँदैन।"</string>
- <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"एक कल गर्न एक ताररहितको सञ्जालमा कनेक्ट गर्नुहोस्।"</string>
+ <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"एक कल गर्न एक ताररहितको सञ्जालमा जडान गर्नुहोस्।"</string>
<string name="incall_error_promote_wfc" msgid="9164896813931363415">"कल गर्नका लागि Wi-Fi कलिङ सक्षम गर्नुहोस्।"</string>
<string name="emergency_information_hint" msgid="9208897544917793012">"आपत्कालीन जानकारी"</string>
<string name="emergency_information_owner_hint" msgid="6256909888049185316">"मालिक"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR उपलब्ध छ:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR को स्थिती:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR फ्रिक्वेन्सी:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"रेडियोको ब्यान्डसम्बन्धी मोडलाई सेट गर्नुहोस्"</string>
<string name="band_mode_loading" msgid="795923726636735967">"ब्यान्डको सूची लोड गर्दै…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"सेट गर्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index b13d9c8..c590abd 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -113,21 +113,21 @@
<string name="messageCFB" msgid="1958017270393563388">"Nummer indien in gesprek"</string>
<string name="sum_cfb_enabled" msgid="332037613072049492">"Doorschakelen naar <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfb_disabled" msgid="3589913334164866035">"Uit"</string>
- <string name="disable_cfb_forbidden" msgid="4831494744351633961">"Je provider biedt geen ondersteuning voor het uitzetten van oproepdoorschakelingen wanneer je telefoon bezet is."</string>
+ <string name="disable_cfb_forbidden" msgid="4831494744351633961">"Je provider biedt geen ondersteuning voor het uitschakelen van oproepdoorschakelingen wanneer je telefoon bezet is."</string>
<string name="labelCFNRy" msgid="3403533792248457946">"Indien niet opgenomen"</string>
<string name="messageCFNRy" msgid="7644434155765359009">"Nummer indien onbeantwoord"</string>
<string name="sum_cfnry_enabled" msgid="3000500837493854799">"Doorschakelen naar <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfnry_disabled" msgid="1990563512406017880">"Uit"</string>
- <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"Je provider biedt geen ondersteuning voor het uitzetten van oproepdoorschakelingen wanneer je telefoon niet wordt opgenomen."</string>
+ <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"Je provider biedt geen ondersteuning voor het uitschakelen van oproepdoorschakelingen wanneer je telefoon niet wordt opgenomen."</string>
<string name="labelCFNRc" msgid="4163399350778066013">"Indien geen bereik"</string>
<string name="messageCFNRc" msgid="6980340731313007250">"Nummer indien onbereikbaar"</string>
<string name="sum_cfnrc_enabled" msgid="1799069234006073477">"Doorschakelen naar <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfnrc_disabled" msgid="739289696796917683">"Uit"</string>
- <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"Je provider biedt geen ondersteuning voor het uitzetten van oproepdoorschakelingen wanneer je telefoon niet bereikbaar is."</string>
+ <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"Je provider biedt geen ondersteuning voor het uitschakelen van oproepdoorschakelingen wanneer je telefoon niet bereikbaar is."</string>
<string name="registration_cf_forbidden" msgid="4386482610771190420">"Je provider ondersteunt het doorschakelen van gesprekken niet."</string>
- <string name="cdma_call_waiting" msgid="4565070960879673216">"Wisselgesprek aanzetten?"</string>
+ <string name="cdma_call_waiting" msgid="4565070960879673216">"Wisselgesprek inschakelen?"</string>
<string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"Tijdens een gesprek krijg je een melding over inkomende gesprekken"</string>
- <string name="enable_cdma_cw" msgid="811047045863422232">"Aanzetten"</string>
+ <string name="enable_cdma_cw" msgid="811047045863422232">"Inschakelen"</string>
<string name="disable_cdma_cw" msgid="7119290446496301734">"Annuleren"</string>
<string name="cdma_call_waiting_in_ims_on" msgid="6390979414188659218">"CDMA-wisselgesprek onder IMS aan"</string>
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA-wisselgesprek onder IMS uit"</string>
@@ -144,16 +144,16 @@
<string name="stk_cc_ss_to_ussd_error" msgid="8330749347425752192">"SS-verzoek gewijzigd in USSD-verzoek"</string>
<string name="stk_cc_ss_to_ss_error" msgid="8297155544652134278">"Gewijzigd in nieuw SS-verzoek"</string>
<string name="stk_cc_ss_to_dial_video_error" msgid="4255261231466032505">"SS-verzoek gewijzigd in videogesprek"</string>
- <string name="fdn_check_failure" msgid="1833769746374185247">"De instelling \'Vaste nummers\' in je app Telefoon staat aan. Hierdoor werken sommige oproepgerelateerde functies niet."</string>
+ <string name="fdn_check_failure" msgid="1833769746374185247">"De instelling \'Vaste nummers\' in je app Telefoon is ingeschakeld. Hierdoor werken sommige oproepgerelateerde functies niet."</string>
<string name="radio_off_error" msgid="8321564164914232181">"Schakel de radio in voordat je deze instellingen bekijkt."</string>
<string name="close_dialog" msgid="1074977476136119408">"OK"</string>
- <string name="enable" msgid="2636552299455477603">"Aanzetten"</string>
+ <string name="enable" msgid="2636552299455477603">"Inschakelen"</string>
<string name="disable" msgid="1122698860799462116">"Uit"</string>
<string name="change_num" msgid="6982164494063109334">"Updaten"</string>
<string-array name="clir_display_values">
<item msgid="8477364191403806960">"Netwerkstandaard"</item>
<item msgid="6813323051965618926">"Nummer verbergen"</item>
- <item msgid="9150034130629852635">"Nummer tonen"</item>
+ <item msgid="9150034130629852635">"Nummer weergeven"</item>
</string-array>
<string name="vm_changed" msgid="4739599044379692505">"Voicemailnummer gewijzigd."</string>
<string name="vm_change_failed" msgid="7877733929455763566">"Kan het voicemailnummer niet wijzigen.\nNeem contact op met je provider als dit probleem zich blijft voordoen."</string>
@@ -284,10 +284,10 @@
<string name="roaming" msgid="1576180772877858949">"Roaming"</string>
<string name="roaming_enable" msgid="6853685214521494819">"Verbinding maken met dataservices tijdens roaming"</string>
<string name="roaming_disable" msgid="8856224638624592681">"Verbinding maken met dataservices tijdens roaming"</string>
- <string name="roaming_reenable_message" msgid="1951802463885727915">"Dataroaming staat uit. Tik om aan te zetten."</string>
+ <string name="roaming_reenable_message" msgid="1951802463885727915">"Dataroaming is uitgeschakeld. Tik om in te schakelen."</string>
<string name="roaming_enabled_message" msgid="9022249120750897">"Er kunnen kosten voor roaming in rekening worden gebracht. Tik om te wijzigen."</string>
<string name="roaming_notification_title" msgid="3590348480688047320">"Mobiele internetverbinding is verbroken"</string>
- <string name="roaming_on_notification_title" msgid="7451473196411559173">"Dataroaming staat aan"</string>
+ <string name="roaming_on_notification_title" msgid="7451473196411559173">"Dataroaming is ingeschakeld"</string>
<string name="roaming_warning" msgid="7855681468067171971">"Er kunnen hoge roamingkosten in rekening worden gebracht."</string>
<string name="roaming_check_price_warning" msgid="8212484083990570215">"Neem contact op met je netwerkprovider over de prijzen."</string>
<string name="roaming_alert_title" msgid="5689615818220960940">"Dataroaming toestaan?"</string>
@@ -305,7 +305,7 @@
<string name="carrier_settings_euicc_summary" msgid="2027941166597330117">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> — <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>"</string>
<string name="mobile_data_settings_title" msgid="7228249980933944101">"Mobiele data"</string>
<string name="mobile_data_settings_summary" msgid="5012570152029118471">"Datatoegang via mobiel netwerk"</string>
- <string name="data_usage_disable_mobile" msgid="5669109209055988308">"Mobiele data uitzetten?"</string>
+ <string name="data_usage_disable_mobile" msgid="5669109209055988308">"Mobiele data uitschakelen?"</string>
<string name="sim_selection_required_pref" msgid="6985901872978341314">"Selectie vereist"</string>
<string name="sim_change_data_title" msgid="9142726786345906606">"Sim voor gegevens wijzigen?"</string>
<string name="sim_change_data_message" msgid="3567358694255933280">"<xliff:g id="NEW_SIM">%1$s</xliff:g> in plaats van <xliff:g id="OLD_SIM">%2$s</xliff:g> gebruiken voor mobiele data?"</string>
@@ -327,33 +327,33 @@
<string name="cell_broadcast_sms" msgid="4053449797289031063">"Infodienstbericht"</string>
<string name="enable_disable_cell_bc_sms" msgid="4759958924031721350">"SMS Infodienstbericht"</string>
<string name="cell_bc_sms_enable" msgid="2019708772024632073">"SMS Infodienstbericht ingeschakeld"</string>
- <string name="cell_bc_sms_disable" msgid="1214238639910875347">"Infodienstbericht staat uit"</string>
+ <string name="cell_bc_sms_disable" msgid="1214238639910875347">"Infodienstbericht uitgeschakeld"</string>
<string name="cb_sms_settings" msgid="6858093721831312036">"Instellingen voor SMS infodienstberichten"</string>
<string name="enable_disable_emergency_broadcast" msgid="6325655044472196496">"Bericht bij noodsituatie"</string>
<string name="emergency_broadcast_enable" msgid="5759610647771102442">"Bericht bij noodsituatie ingeschakeld"</string>
- <string name="emergency_broadcast_disable" msgid="2844904734469323266">"Bericht bij noodsituatie staat uit"</string>
+ <string name="emergency_broadcast_disable" msgid="2844904734469323266">"Bericht bij noodsituatie uitgeschakeld"</string>
<string name="enable_disable_administrative" msgid="7825925366822117961">"Beheer"</string>
<string name="administrative_enable" msgid="5717963431079532028">"Beheer ingeschakeld"</string>
- <string name="administrative_disable" msgid="156796633660118691">"Beheer staat uit"</string>
+ <string name="administrative_disable" msgid="156796633660118691">"Beheer uitgeschakeld"</string>
<string name="enable_disable_maintenance" msgid="3824817751053035017">"Onderhoud"</string>
<string name="maintenance_enable" msgid="2646784483222342290">"Onderhoud ingeschakeld"</string>
- <string name="maintenance_disable" msgid="2121032601497725602">"Onderhoud staat uit"</string>
+ <string name="maintenance_disable" msgid="2121032601497725602">"Onderhoud uitgeschakeld"</string>
<string name="general_news_settings" msgid="2670499575962080411">"Algemeen nieuws"</string>
<string name="bf_news_settings" msgid="8571709425370794221">"Zakelijk en financieel nieuws"</string>
<string name="sports_news_settings" msgid="2684364556989168438">"Sportnieuws"</string>
<string name="entertainment_news_settings" msgid="4228527702346305543">"Amusementsnieuws"</string>
<string name="enable_disable_local" msgid="7654175079979415572">"Lokaal"</string>
<string name="local_enable" msgid="790606890868710629">"Lokaal nieuws ingeschakeld"</string>
- <string name="local_disable" msgid="7649945293198602877">"Lokaal nieuws staat uit"</string>
+ <string name="local_disable" msgid="7649945293198602877">"Lokaal nieuws uitgeschakeld"</string>
<string name="enable_disable_regional" msgid="5783403191376564638">"Regionaal"</string>
<string name="regional_enable" msgid="7730109417536296079">"Regionaal nieuws ingeschakeld"</string>
- <string name="regional_disable" msgid="3781951818157772545">"Regionaal nieuws staat uit"</string>
+ <string name="regional_disable" msgid="3781951818157772545">"Regionaal nieuws uitgeschakeld"</string>
<string name="enable_disable_national" msgid="6198481711934897632">"Binnenlands"</string>
<string name="national_enable" msgid="5159683504138239304">"Binnenlands nieuws ingeschakeld"</string>
- <string name="national_disable" msgid="8484356368757118987">"Binnenlands nieuws staat uit"</string>
+ <string name="national_disable" msgid="8484356368757118987">"Binnenlands nieuws uitgeschakeld"</string>
<string name="enable_disable_international" msgid="4204334217211198792">"Buitenlands"</string>
<string name="international_enable" msgid="8943466745792690340">"Buitenlands nieuws ingeschakeld"</string>
- <string name="international_disable" msgid="4803498658100318265">"Buitenlands nieuws staat uit"</string>
+ <string name="international_disable" msgid="4803498658100318265">"Buitenlands nieuws uitgeschakeld"</string>
<string name="list_language_title" msgid="1850167908665485738">"Taal"</string>
<string name="list_language_summary" msgid="7921756070782277559">"De taal voor het nieuws selecteren"</string>
<string-array name="list_language_entries">
@@ -377,7 +377,7 @@
<string name="list_language_dtitle" msgid="7457017255633587047">"Talen"</string>
<string name="enable_disable_local_weather" msgid="7734933941872511543">"Lokaal weerbericht"</string>
<string name="local_weather_enable" msgid="2143929735295254729">"Lokaal weerbericht ingeschakeld"</string>
- <string name="local_weather_disable" msgid="4209936355998349647">"Lokaal weerbericht staat uit"</string>
+ <string name="local_weather_disable" msgid="4209936355998349647">"Lokaal weerbericht uitgeschakeld"</string>
<string name="enable_disable_atr" msgid="821714821057385390">"Verkeersberichten"</string>
<string name="atr_enable" msgid="1799097759998768186">"Verkeersberichten ingeschakeld"</string>
<string name="atr_disable" msgid="6456758173289065766">"Verkeersberichten uitgeschakeld"</string>
@@ -392,7 +392,7 @@
<string name="lodgings_disable" msgid="5145649659459722661">"Overnachtingen uitgeschakeld"</string>
<string name="enable_disable_retail_directory" msgid="9095153426757081972">"Winkeloverzicht"</string>
<string name="retail_directory_enable" msgid="2532176568755452171">"Winkeloverzicht ingeschakeld"</string>
- <string name="retail_directory_disable" msgid="7242451210736299193">"Winkeloverzicht staat uit"</string>
+ <string name="retail_directory_disable" msgid="7242451210736299193">"Winkeloverzicht uitgeschakeld"</string>
<string name="enable_disable_advertisements" msgid="8704125663718797151">"Advertenties"</string>
<string name="advertisements_enable" msgid="8651409664217899145">"Advertenties ingeschakeld"</string>
<string name="advertisements_disable" msgid="2999957360508271492">"Advertenties uitgeschakeld"</string>
@@ -404,10 +404,10 @@
<string name="eo_disable" msgid="3955421278929647485">"Vacatures uitgeschakeld"</string>
<string name="enable_disable_mhh" msgid="715930476289202466">"Medisch, gezondheid en ziekenhuis"</string>
<string name="mhh_enable" msgid="7224396815285147008">"Medisch, gezondheid en ziekenhuis ingeschakeld"</string>
- <string name="mhh_disable" msgid="5503643028885686265">"Medisch, gezondheid en ziekenhuis staat uit"</string>
+ <string name="mhh_disable" msgid="5503643028885686265">"Medisch, gezondheid en ziekenhuis uitgeschakeld"</string>
<string name="enable_disable_technology_news" msgid="2794845609698078400">"Technologienieuws"</string>
<string name="technology_news_enable" msgid="1908991199492598311">"Technologienieuws ingeschakeld"</string>
- <string name="technology_news_disable" msgid="8388582607149800889">"Technologienieuws staat uit"</string>
+ <string name="technology_news_disable" msgid="8388582607149800889">"Technologienieuws uitgeschakeld"</string>
<string name="enable_disable_multi_category" msgid="5958248155437940625">"Meerdere categorieën"</string>
<string name="multi_category_enable" msgid="4531915767817483960">"Meerdere categorieën ingeschakeld"</string>
<string name="multi_category_disable" msgid="6325934413701238104">"Meerdere categorieën uitgeschakeld"</string>
@@ -441,22 +441,22 @@
<string name="manage_fdn_list" msgid="3341716430375195441">"FDN-lijst"</string>
<string name="fdn_list_with_label" msgid="1409655283510382556">"FDN-lijst (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="fdn_activation" msgid="2178637004710435895">"FDN-activering"</string>
- <string name="fdn_enabled" msgid="7017355494808056447">"Vaste nummers staan aan"</string>
- <string name="fdn_disabled" msgid="6696468878037736600">"Vaste nummers staan uit"</string>
- <string name="enable_fdn" msgid="4830555730418033723">"FDN aanzetten"</string>
- <string name="disable_fdn" msgid="3918794950264647541">"FDN uitzetten"</string>
+ <string name="fdn_enabled" msgid="7017355494808056447">"Vaste nummers zijn ingeschakeld"</string>
+ <string name="fdn_disabled" msgid="6696468878037736600">"Vaste nummers zijn uitgeschakeld"</string>
+ <string name="enable_fdn" msgid="4830555730418033723">"FDN inschakelen"</string>
+ <string name="disable_fdn" msgid="3918794950264647541">"FDN uitschakelen"</string>
<string name="change_pin2" msgid="3110844547237754871">"PIN2-code wijzigen"</string>
- <string name="enable_fdn_ok" msgid="5080925177369329827">"FDN uitzetten"</string>
- <string name="disable_fdn_ok" msgid="3745475926874838676">"FDN aanzetten"</string>
+ <string name="enable_fdn_ok" msgid="5080925177369329827">"FDN uitschakelen"</string>
+ <string name="disable_fdn_ok" msgid="3745475926874838676">"FDN inschakelen"</string>
<string name="sum_fdn" msgid="6152246141642323582">"Vaste nummers beheren"</string>
<string name="sum_fdn_change_pin" msgid="3510994280557335727">"Pincode voor FDN-toegang wijzigen"</string>
<string name="sum_fdn_manage_list" msgid="3311397063233992907">"Lijst met telefoonnummers beheren"</string>
<string name="voice_privacy" msgid="7346935172372181951">"Spraakprivacy"</string>
- <string name="voice_privacy_summary" msgid="3556460926168473346">"Geavanceerde privacymodus aanzetten"</string>
+ <string name="voice_privacy_summary" msgid="3556460926168473346">"Geavanceerde privacymodus inschakelen"</string>
<string name="tty_mode_option_title" msgid="3843817710032641703">"TTY-modus"</string>
<string name="tty_mode_option_summary" msgid="4770510287236494371">"TTY-modus instellen"</string>
<string name="auto_retry_mode_title" msgid="2985801935424422340">"Automatisch opnieuw proberen"</string>
- <string name="auto_retry_mode_summary" msgid="2863919925349511402">"Modus voor automatisch opnieuw proberen aanzetten"</string>
+ <string name="auto_retry_mode_summary" msgid="2863919925349511402">"Modus voor automatisch opnieuw proberen inschakelen"</string>
<string name="tty_mode_not_allowed_video_call" msgid="6551976083652752815">"De TTY-modus mag niet worden gewijzigd tijdens een videogesprek"</string>
<string name="menu_add" msgid="5616487894975773141">"Contact toevoegen"</string>
<string name="menu_edit" msgid="3593856941552460706">"Contact bewerken"</string>
@@ -483,7 +483,7 @@
<string name="simContacts_empty" msgid="1135632055473689521">"Geen contacten op je simkaart."</string>
<string name="simContacts_title" msgid="2714029230160136647">"Contacten selecteren om te importeren"</string>
<string name="simContacts_airplaneMode" msgid="4654884030631503808">"Schakel de vliegtuigmodus uit om contacten van de simkaart te importeren."</string>
- <string name="enable_pin" msgid="967674051730845376">"SIM pincode aan-/uitzetten"</string>
+ <string name="enable_pin" msgid="967674051730845376">"SIM pincode in-/uitschakelen"</string>
<string name="change_pin" msgid="3657869530942905790">"Pincode simkaart wijzigen"</string>
<string name="enter_pin_text" msgid="3182311451978663356">"Pincode simkaart:"</string>
<string name="oldPinLabel" msgid="8618515202411987721">"Oude pincode"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Schakel het mobiele netwerk in, schakel de vliegtuigmodus uit of schakel Batterijbesparing uit om te bellen."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Schakel de vliegtuigmodus uit om te bellen."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Schakel de vliegtuigmodus uit of maak verbinding met een draadloos netwerk om te bellen."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefoon te heet"</b>\n\n"Kan dit gesprek niet tot stand brengen. Probeer het opnieuw als je telefoon is afgekoeld.\n\nJe kunt nog steeds noodoproepen plaatsen."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Sluit de modus voor noodoproepen af om een niet-noodoproep te plaatsen."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Niet geregistreerd op netwerk."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobiel netwerk niet beschikbaar."</string>
@@ -593,7 +592,7 @@
<string name="singleContactImportedMsg" msgid="3619804066300998934">"Contact geïmporteerd"</string>
<string name="failedToImportSingleContactMsg" msgid="228095510489830266">"Kan contact niet importeren"</string>
<string name="hac_mode_title" msgid="4127986689621125468">"Hoortoestellen"</string>
- <string name="hac_mode_summary" msgid="7774989500136009881">"Compatibiliteit voor hoortoestel aanzetten"</string>
+ <string name="hac_mode_summary" msgid="7774989500136009881">"Compatibiliteit voor hoortoestel inschakelen"</string>
<string name="rtt_mode_title" msgid="3075948111362818043">"Realtime tekstoproep (RTT)"</string>
<string name="rtt_mode_summary" msgid="8631541375609989562">"Berichten in een audiogesprek toestaan"</string>
<string name="rtt_mode_more_information" msgid="587500128658756318">"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>
@@ -617,7 +616,7 @@
<string name="ota_hfa_activation_title" msgid="3300556778212729671">"Activeren..."</string>
<string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"De telefoon activeert je mobiele-dataservice.\n\nDit kan tot vijf minuten duren."</string>
<string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"Activering overslaan?"</string>
- <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Als je de activering overslaat, kun je niet bellen of verbinding maken met mobiele-datanetwerken (je kunt wel verbinding maken met wifi-netwerken). Tot je de telefoon activeert, wordt je gevraagd deze te activeren telkens wanneer je de telefoon aanzet."</string>
+ <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Als je de activering overslaat, kun je niet bellen of verbinding maken met mobiele-datanetwerken (je kunt wel verbinding maken met wifi-netwerken). Tot je de telefoon activeert, wordt je gevraagd deze te activeren telkens wanneer je de telefoon inschakelt."</string>
<string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"Overslaan"</string>
<string name="ota_activate" msgid="7939695753665438357">"Activeren"</string>
<string name="ota_title_activate_success" msgid="1272135024761004889">"De telefoon is geactiveerd."</string>
@@ -635,7 +634,7 @@
<string name="ecm_exit_dialog" msgid="4200691880721429078">"EcmExitDialog"</string>
<string name="phone_entered_ecm_text" msgid="8431238297843035842">"Modus voor noodoproepen ingeschakeld"</string>
<string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"Modus voor noodoproepen"</string>
- <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Gegevensverbinding staat uit"</string>
+ <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Gegevensverbinding uitgeschakeld"</string>
<string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"Geen dataverbinding tot <xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
<plurals name="alert_dialog_exit_ecm" formatted="false" msgid="5425906903766466743">
<item quantity="other">De telefoon bevindt zich <xliff:g id="COUNT_1">%s</xliff:g> minuten in de modus voor noodoproepen. In deze modus kunnen geen apps worden gebruikt waarvoor een gegevensverbinding nodig is. Wil je nu afsluiten?</item>
@@ -666,15 +665,15 @@
<string name="selectContact" msgid="1527612842599767382">"contact selecteren"</string>
<string name="not_voice_capable" msgid="2819996734252084253">"Audiogesprekken worden niet ondersteund"</string>
<string name="description_dial_button" msgid="8614631902795087259">"bellen"</string>
- <string name="description_dialpad_button" msgid="7395114120463883623">"toetsenblok tonen"</string>
+ <string name="description_dialpad_button" msgid="7395114120463883623">"toetsenblok weergeven"</string>
<string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"Noodtoetsenblok"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"Visuele voicemail"</string>
<string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"Pincode instellen"</string>
<string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"Pincode wijzigen"</string>
<string name="preference_category_ringtone" msgid="8787281191375434976">"Ringtone en trillen"</string>
<string name="pstn_connection_service_label" msgid="9200102709997537069">"Ingebouwde simkaarten"</string>
- <string name="enable_video_calling_title" msgid="7246600931634161830">"Videogesprekken aanzetten"</string>
- <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"Als je videogesprekken wilt aanzetten, moet je de geoptimaliseerde 4G LTE-modus aanzetten in de netwerkinstellingen."</string>
+ <string name="enable_video_calling_title" msgid="7246600931634161830">"Videogesprekken inschakelen"</string>
+ <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"Als je videogesprekken wilt inschakelen, moet je de geoptimaliseerde 4G LTE-modus inschakelen in de netwerkinstellingen."</string>
<string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"Netwerkinstellingen"</string>
<string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"Sluiten"</string>
<string name="sim_label_emergency_calls" msgid="9078241989421522310">"Noodoproepen"</string>
@@ -705,8 +704,8 @@
<string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"Pincodes komen niet overeen"</string>
<string name="change_pin_succeeded" msgid="2504705600693014403">"Voicemailpincode geüpdatet"</string>
<string name="change_pin_system_error" msgid="7772788809875146873">"Kan pincode niet instellen"</string>
- <string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"Dataroaming staat uit"</string>
- <string name="mobile_data_status_roaming_turned_on_subtext" msgid="5615757897768777865">"Dataroaming staat aan"</string>
+ <string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"Dataroaming is uitgeschakeld"</string>
+ <string name="mobile_data_status_roaming_turned_on_subtext" msgid="5615757897768777865">"Dataroaming is ingeschakeld"</string>
<string name="mobile_data_status_roaming_without_plan_subtext" msgid="6536671968072284677">"Momenteel aan het roamen, data-abonnement nodig"</string>
<string name="mobile_data_status_roaming_with_plan_subtext" msgid="2576177169108123095">"Momenteel aan het roamen, data-abonnement is actief"</string>
<string name="mobile_data_status_no_plan_subtext" msgid="170331026419263657">"Geen mobiele data meer"</string>
@@ -720,7 +719,7 @@
<string name="mobile_data_activate_button" msgid="1139792516354374612">"DATA TOEVOEGEN"</string>
<string name="mobile_data_activate_cancel_button" msgid="3530174817572005860">"ANNULEREN"</string>
<string name="clh_card_title_call_ended_txt" msgid="5977978317527299698">"Gesprek beëindigd"</string>
- <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Vliegtuigmodus staat aan"</string>
+ <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Vliegtuigmodus is ingeschakeld"</string>
<string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Kan geen toegang tot simkaart krijgen"</string>
<string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobiel netwerk niet beschikbaar"</string>
<string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Probleem met het telefoonnummer dat je probeert te bellen. Foutcode 1."</string>
@@ -826,29 +825,29 @@
<string name="callFailed_otasp_provisioning_in_process" msgid="3345666183602879326">"Kan geen gesprek plaatsen omdat het apparaat momenteel wordt geregistreerd."</string>
<string name="callFailed_already_dialing" msgid="7250591188960691086">"Kan gesprek niet plaatsen omdat er al een uitgaand gesprek is gestart."</string>
<string name="callFailed_already_ringing" msgid="2376603543544289303">"Kan gesprek niet plaatsen omdat er een niet-beantwoord inkomend gesprek is. Beantwoord of weiger het inkomende gesprek voordat je een nieuw gesprek plaatst."</string>
- <string name="callFailed_calling_disabled" msgid="5010992739401206283">"Kan gesprek niet plaatsen omdat bellen is uitgezet via de systeemeigenschap ro.telephony.disable-call."</string>
+ <string name="callFailed_calling_disabled" msgid="5010992739401206283">"Kan gesprek niet plaatsen omdat bellen is uitgeschakeld via de systeemeigenschap ro.telephony.disable-call."</string>
<string name="callFailed_too_many_calls" msgid="5379426826618582180">"Kan gesprek niet plaatsen omdat er al twee actieve gesprekken zijn. Verbreek de verbinding in een van de gesprekken of voeg ze samen tot een conferencecall voordat je een nieuw gesprek plaatst."</string>
- <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"Als je <xliff:g id="SUPP_SERVICE">%s</xliff:g> wilt gebruiken, zorg je dat je mobiele data hebt aangezet. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string>
- <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"Als je <xliff:g id="SUPP_SERVICE">%s</xliff:g> wilt gebruiken, zorg je dat je mobiele data en dataroaming hebt aangezet. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string>
- <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"Als je <xliff:g id="SUPP_SERVICE">%1$s</xliff:g> wilt gebruiken, zorg je dat je mobiele data hebt aangezet voor sim <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string>
- <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"Als je <xliff:g id="SUPP_SERVICE">%1$s</xliff:g> wilt gebruiken, zorg je dat je mobiele data en dataroaming hebt aangezet voor sim <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string>
+ <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"Als je <xliff:g id="SUPP_SERVICE">%s</xliff:g> wilt gebruiken, zorg je dat je mobiele data hebt ingeschakeld. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string>
+ <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"Als je <xliff:g id="SUPP_SERVICE">%s</xliff:g> wilt gebruiken, zorg je dat je mobiele data en dataroaming hebt ingeschakeld. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string>
+ <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"Als je <xliff:g id="SUPP_SERVICE">%1$s</xliff:g> wilt gebruiken, zorg je dat je mobiele data hebt ingeschakeld voor sim <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string>
+ <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"Als je <xliff:g id="SUPP_SERVICE">%1$s</xliff:g> wilt gebruiken, zorg je dat je mobiele data en dataroaming hebt ingeschakeld voor sim <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string>
<string name="supp_service_over_ut_precautions_dialog_dismiss" msgid="5934541487903081652">"Sluiten"</string>
- <string name="radio_info_data_connection_enable" msgid="6183729739783252840">"Dataverbinding aanzetten"</string>
- <string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Dataverbinding uitzetten"</string>
+ <string name="radio_info_data_connection_enable" msgid="6183729739783252840">"Dataverbinding inschakelen"</string>
+ <string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Dataverbinding uitschakelen"</string>
<string name="volte_provisioned_switch_string" msgid="4812874990480336178">"VoLTE-registratie"</string>
<string name="vt_provisioned_switch_string" msgid="8295542122512195979">"Videogesprekken geregistreerd"</string>
<string name="wfc_provisioned_switch_string" msgid="3835004640321078988">"Wifi-gesprekken geregistreerd"</string>
<string name="eab_provisioned_switch_string" msgid="4449676720736033035">"EAB/aanwezigheid geregistreerd"</string>
<string name="cbrs_data_switch_string" msgid="6060356430838077653">"CBRS-gegevens"</string>
- <string name="dsds_switch_string" msgid="7564769822086764796">"DSDS aanzetten"</string>
+ <string name="dsds_switch_string" msgid="7564769822086764796">"DSDS inschakelen"</string>
<string name="dsds_dialog_title" msgid="8494569893941847575">"Apparaat opnieuw opstarten?"</string>
<string name="dsds_dialog_message" msgid="4047480385678538850">"Start het apparaat opnieuw op om de instelling te wijzigen."</string>
<string name="dsds_dialog_confirm" msgid="9032004888134129885">"Opnieuw opstarten"</string>
<string name="dsds_dialog_cancel" msgid="3245958947099586655">"Annuleren"</string>
<string name="radio_info_radio_power" msgid="8805595022160471587">"Mobiel radiovermogen"</string>
- <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"Adresboek op simkaart bekijken"</string>
- <string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"Vaste nummers bekijken"</string>
- <string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"Servicenummers bekijken"</string>
+ <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"Adresboek op simkaart weergeven"</string>
+ <string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"Vaste nummers weergeven"</string>
+ <string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"Servicenummers weergeven"</string>
<string name="radioInfo_menu_getIMS" msgid="1950869267853198232">"IMS-servicestatus"</string>
<string name="radio_info_ims_reg_status_title" msgid="6875885401313992007">"IMS-status"</string>
<string name="radio_info_ims_reg_status_registered" msgid="7095182114078864326">"Geregistreerd"</string>
@@ -908,13 +907,15 @@
<string name="radio_info_smsc_label" msgid="3749927072726033763">"SMSC:"</string>
<string name="radio_info_smsc_update_label" msgid="5141996256097115753">"Updaten"</string>
<string name="radio_info_smsc_refresh_label" msgid="8409923721451604560">"Vernieuwen"</string>
- <string name="radio_info_toggle_dns_check_label" msgid="1394078554927787350">"DNS-controle aan-/uitzetten"</string>
+ <string name="radio_info_toggle_dns_check_label" msgid="1394078554927787350">"DNS-controle in-/uitschakelen"</string>
<string name="oem_radio_info_label" msgid="2914167475119997456">"OEM-specifieke gegevens/instellingen"</string>
<string name="radio_info_endc_available" msgid="4410653375290113436">"EN-DC beschikbaar:"</string>
<string name="radio_info_dcnr_restricted" msgid="2469125498066960807">"DCNR beperkt:"</string>
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR beschikbaar:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR-status:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR-frequentie:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Modus voor radioband instellen"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Bandlijst laden…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Instellen"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 3ceb270..f3b5023 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -182,7 +182,7 @@
<string name="connect_later" msgid="1950138106010005425">"ବର୍ତ୍ତମାନ ଏହି ନେଟ୍ୱର୍କରେ କନେକ୍ଟ ହୋଇପାରିବ ନାହିଁ। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="registration_done" msgid="5337407023566953292">"ଏହି ନେଟ୍ୱର୍କରେ ପଞ୍ଜୀକୃତ କରାଯାଇଛି।"</string>
<string name="already_auto" msgid="8607068290733079336">"ପୂର୍ବରୁ ସ୍ଵାଚାଳିତ ଚୟନରେ ଅଛି।"</string>
- <string name="select_automatically" msgid="779750291257872651">"ସ୍ଵଚାଳିତ ଭାବେ ନେଟୱାର୍କ ଚୟନ କରନ୍ତୁ"</string>
+ <string name="select_automatically" msgid="779750291257872651">"ସ୍ଵଚାଳିତ ଭାବେ ନେଟ୍ୱର୍କ ଚୟନ କରନ୍ତୁ"</string>
<string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"%1$s ସହ କନେକ୍ଟ ହେଲେ ଉପଲବ୍ଧ ହେବ ନାହିଁ"</string>
<string name="network_select_title" msgid="4117305053881611988">"ନେଟ୍ୱାର୍କ"</string>
<string name="register_automatically" msgid="3907580547590554834">"ସ୍ଵଚାଳିତ ପଞ୍ଜୀକରଣ…"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"କଲ୍ କରିବା ପାଇଁ ମୋବାଇଲ୍ ନେଟ୍ୱର୍କକୁ ଚାଲୁ କରନ୍ତୁ, ଏୟାରପ୍ଲେନ୍ ମୋଡ୍କୁ ବନ୍ଦ କରନ୍ତୁ କିମ୍ବା ବ୍ୟାଟେରୀ ସେଭର୍କୁ ବନ୍ଦ କରନ୍ତୁ।"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ଗୋଟିଏ କଲ୍ କରିବା ପାଇଁ ଏୟାରପ୍ଲେନ୍ ମୋଡ୍କୁ ବନ୍ଦ କରନ୍ତୁ।"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ଗୋଟିଏ କଲ୍ କରିବା ପାଇଁ ଏୟାରପ୍ଲେନ୍ ମୋଡ୍କୁ ବନ୍ଦ କରନ୍ତୁ କିମ୍ବା ଏକ ତାରବିହୀନ ନେଟ୍ୱର୍କ ସହ କନେକ୍ଟ କରନ୍ତୁ।"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ଫୋନଟି ବହୁତ ଗରମ ହୋଇଯାଇଛି"</b>\n\n"ଏହି କଲକୁ ସମ୍ପୂର୍ଣ୍ଣ କରାଯାଇପାରିବ ନାହିଁ। ଆପଣଙ୍କ ଫୋନ୍ ଥଣ୍ଡା ହେବା ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ। \n\nଆପଣ ଏବେ ବି ଜରୁରୀକାଳୀନ କଲ୍ କରିପାରିବେ।"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"ଗୋଟିଏ ସାଧାରଣ କଲ୍ କରିବା ପାଇଁ ଜରୁରିକାଳୀନ କଲବ୍ୟାକ୍ ମୋଡ୍ରୁ ବାହାରି ଆସନ୍ତୁ।"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"ନେଟ୍ୱର୍କରେ ପଞ୍ଜୀକୃତ କରାଯାଇନାହିଁ।"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"ମୋବାଇଲ୍ ନେଟ୍ୱର୍କ ଉପଲବ୍ଧ ନାହିଁ।"</string>
@@ -720,7 +719,7 @@
<string name="mobile_data_activate_button" msgid="1139792516354374612">"ଡାଟା ଯୋଡ଼ନ୍ତୁ"</string>
<string name="mobile_data_activate_cancel_button" msgid="3530174817572005860">"ବାତିଲ୍ କରନ୍ତୁ"</string>
<string name="clh_card_title_call_ended_txt" msgid="5977978317527299698">"କଲ୍ ସମାପ୍ତ ହୋଇଛି"</string>
- <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"ଏୟାରପ୍ଲେନ୍ ମୋଡ୍ ଚାଲୁ ଅଛି"</string>
+ <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"ଏୟାରପ୍ଲେନ୍ ମୋଡ୍ ଅନ୍ ଅଛି"</string>
<string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM କାର୍ଡକୁ ଆକ୍ସେସ୍ କରିହେଉନାହିଁ"</string>
<string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"ମୋବାଇଲ୍ ନେଟ୍ୱର୍କ ଉପଲବ୍ଧ ଅଛି"</string>
<string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"ଆପଣ ଡାଏଲ୍ କରିବା ପାଇଁ ଚେଷ୍ଟା କରୁଥିବା ଫୋନ୍ ନମ୍ବର୍ରେ ସମସ୍ୟା ଅଛି। ତ୍ରୁଟି କୋଡ୍ 1।"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR ଉପଲବ୍ଧ:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR ସ୍ଥିତି:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR ଫ୍ରିକ୍ୱେନ୍ସୀ:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"ରେଡିଓ ବ୍ୟାଣ୍ଡ ମୋଡ୍ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="band_mode_loading" msgid="795923726636735967">"ବ୍ୟାଣ୍ଡ ତାଲିକା ଲୋଡ୍ କରାଯାଉଛି…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"ସେଟ୍ କରନ୍ତୁ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index e4883ef..1305a0c 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -273,7 +273,7 @@
<string name="network_operator_category" msgid="4992217193732304680">"ਨੈੱਟਵਰਕ"</string>
<string name="enhanced_4g_lte_mode_title" msgid="4213420368777080540">"ਵਿਸਤ੍ਰਿਤ 4G LTE ਮੋਡ"</string>
<!-- no translation found for enhanced_4g_lte_mode_title_variant:0 (7240155150166394308) -->
- <string name="enhanced_4g_lte_mode_summary" msgid="7725708511804143638">"ਅਵਾਜ਼ੀ ਕਾਲਾਂ ਅਤੇ ਹੋਰ ਸੰਚਾਰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ LTE ਸੇਵਾਵਾਂ ਵਰਤੋ (ਸਿਫ਼ਾਰਸ਼ੀ)"</string>
+ <string name="enhanced_4g_lte_mode_summary" msgid="7725708511804143638">"ਵੌਇਸ ਅਤੇ ਹੋਰ ਸੰਚਾਰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ LTE ਸੇਵਾਵਾਂ ਵਰਤੋ ( ਸਿਫ਼ਾਰਸ਼ ਕੀਤਾ)"</string>
<string name="enhanced_4g_lte_mode_summary_o2" msgid="2521108446409016542">"ਅਵਾਜ਼ ਅਤੇ ਹੋਰ ਸੰਚਾਰਾਂ (ਸਿਫ਼ਾਰਸ਼ ਕੀਤੇ) ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ 4G ਸੇਵਾਵਾਂ ਵਰਤੋ"</string>
<!-- no translation found for enhanced_4g_lte_mode_sumary_variant:0 (2943982616649705147) -->
<!-- no translation found for enhanced_4g_lte_mode_sumary_variant:1 (5262249464504131443) -->
@@ -338,24 +338,24 @@
<string name="enable_disable_maintenance" msgid="3824817751053035017">"ਪ੍ਰਬੰਧਨ"</string>
<string name="maintenance_enable" msgid="2646784483222342290">"ਪ੍ਰਬੰਧਨ ਸਮਰਥਿਤ"</string>
<string name="maintenance_disable" msgid="2121032601497725602">"ਪ੍ਰਬੰਧਨ ਅਸਮਰਥਿਤ"</string>
- <string name="general_news_settings" msgid="2670499575962080411">"ਸਧਾਰਨ ਖਬਰਾਂ"</string>
- <string name="bf_news_settings" msgid="8571709425370794221">"ਕਾਰੋਬਾਰੀ ਅਤੇ ਵਿੱਤੀ ਖਬਰਾਂ"</string>
- <string name="sports_news_settings" msgid="2684364556989168438">"ਖੇਡਾਂ ਨਾਲ ਸੰਬੰਧਿਤ ਖਬਰਾਂ"</string>
- <string name="entertainment_news_settings" msgid="4228527702346305543">"ਮਨੋਰੰਜਨ ਸੰਬੰਧੀ ਖਬਰਾਂ"</string>
+ <string name="general_news_settings" msgid="2670499575962080411">"ਸਧਾਰਨ ਖ਼ਬਰਾਂ"</string>
+ <string name="bf_news_settings" msgid="8571709425370794221">"ਵਪਾਰਕ ਅਤੇ ਵਿੱਤੀ ਖ਼ਬਰਾਂ"</string>
+ <string name="sports_news_settings" msgid="2684364556989168438">"ਖੇਡ ਦੀਆਂ ਖ਼ਬਰਾਂ"</string>
+ <string name="entertainment_news_settings" msgid="4228527702346305543">"ਮਨੋਰੰਜਕ ਖ਼ਬਰਾਂ"</string>
<string name="enable_disable_local" msgid="7654175079979415572">"ਸਥਾਨਕ"</string>
- <string name="local_enable" msgid="790606890868710629">"ਸਥਾਨਕ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
- <string name="local_disable" msgid="7649945293198602877">"ਸਥਾਨਕ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
+ <string name="local_enable" msgid="790606890868710629">"ਸਥਾਨਕ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string>
+ <string name="local_disable" msgid="7649945293198602877">"ਸਥਾਨਕ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string>
<string name="enable_disable_regional" msgid="5783403191376564638">"ਖੇਤਰੀ"</string>
- <string name="regional_enable" msgid="7730109417536296079">"ਖੇਤਰੀ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
- <string name="regional_disable" msgid="3781951818157772545">"ਖੇਤਰੀ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
+ <string name="regional_enable" msgid="7730109417536296079">"ਖੇਤਰੀ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string>
+ <string name="regional_disable" msgid="3781951818157772545">"ਖੇਤਰੀ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string>
<string name="enable_disable_national" msgid="6198481711934897632">"ਰਾਸ਼ਟਰੀ"</string>
- <string name="national_enable" msgid="5159683504138239304">"ਰਾਸ਼ਟਰੀ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
- <string name="national_disable" msgid="8484356368757118987">"ਰਾਸ਼ਟਰੀ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
+ <string name="national_enable" msgid="5159683504138239304">"ਰਾਸ਼ਟਰੀ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string>
+ <string name="national_disable" msgid="8484356368757118987">"ਰਾਸ਼ਟਰੀ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string>
<string name="enable_disable_international" msgid="4204334217211198792">"ਅੰਤਰਰਾਸ਼ਟਰੀ"</string>
- <string name="international_enable" msgid="8943466745792690340">"ਅੰਤਰਰਾਸ਼ਟਰੀ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
- <string name="international_disable" msgid="4803498658100318265">"ਅੰਤਰਰਾਸ਼ਟਰੀ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
+ <string name="international_enable" msgid="8943466745792690340">"ਅੰਤਰਰਾਸ਼ਟਰੀ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string>
+ <string name="international_disable" msgid="4803498658100318265">"ਅੰਤਰਰਾਸ਼ਟਰੀ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string>
<string name="list_language_title" msgid="1850167908665485738">"ਭਾਸ਼ਾ"</string>
- <string name="list_language_summary" msgid="7921756070782277559">"ਖਬਰਾਂ ਦੀ ਭਾਸ਼ਾ ਚੁਣੋ"</string>
+ <string name="list_language_summary" msgid="7921756070782277559">"ਖ਼ਬਰਾਂ ਦੀ ਭਾਸ਼ਾ ਚੁਣੋ"</string>
<string-array name="list_language_entries">
<item msgid="2347238508726934281">"ਅੰਗ੍ਰੇਜ਼ੀ"</item>
<item msgid="5172468397620875174">"ਫਰਾਂਸੀਸੀ"</item>
@@ -405,9 +405,9 @@
<string name="enable_disable_mhh" msgid="715930476289202466">"ਚਿਕਿਤਸਾ, ਸਿਹਤ ਅਤੇ ਹਸਪਤਾਲ"</string>
<string name="mhh_enable" msgid="7224396815285147008">"ਚਿਕਿਤਸਾ, ਸਿਹਤ ਅਤੇ ਹਸਪਤਾਲ ਸਮਰਥਿਤ"</string>
<string name="mhh_disable" msgid="5503643028885686265">"ਚਿਕਿਤਸਾ, ਸਿਹਤ ਅਤੇ ਹਸਪਤਾਲ ਅਸਮਰਥਿਤ"</string>
- <string name="enable_disable_technology_news" msgid="2794845609698078400">"ਤਕਨਾਲੋਜੀ ਖਬਰਾਂ"</string>
- <string name="technology_news_enable" msgid="1908991199492598311">"ਤਕਨਾਲੋਜੀ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
- <string name="technology_news_disable" msgid="8388582607149800889">"ਤਕਨਾਲੋਜੀ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
+ <string name="enable_disable_technology_news" msgid="2794845609698078400">"ਟੈਕਨਾਲੋਜੀ ਖ਼ਬਰਾਂ"</string>
+ <string name="technology_news_enable" msgid="1908991199492598311">"ਟੈਕਨਾਲੋਜੀ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string>
+ <string name="technology_news_disable" msgid="8388582607149800889">"ਟੈਕਨਾਲੋਜੀ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string>
<string name="enable_disable_multi_category" msgid="5958248155437940625">"ਮਲਟੀ-ਸ਼੍ਰੇਣੀ"</string>
<string name="multi_category_enable" msgid="4531915767817483960">"ਮਲਟੀ-ਸ਼੍ਰੇਣੀ ਸਮਰਥਿਤ"</string>
<string name="multi_category_disable" msgid="6325934413701238104">"ਮਲਟੀ-ਸ਼੍ਰੇਣੀ ਅਸਮਰਥਿਤ"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"ਕਾਲ ਕਰਨ ਲਈ ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਚਾਲੂ ਕਰੋ, ਜਹਾਜ਼ ਮੋਡ ਬੰਦ ਕਰੋ ਜਾਂ ਬੈਟਰੀ ਸੇਵਰ ਮੋਡ ਬੰਦ ਕਰੋ।"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ਇੱਕ ਕਾਲ ਕਰਨ ਲਈ ਏਅਰਪਲੇਨ ਮੋਡ ਬੰਦ ਕਰੋ।"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ਏਅਰਪਲੇਨ ਮੋਡ ਬੰਦ ਕਰੋ ਜਾਂ ਇੱਕ ਕਾਲ ਕਰਨ ਲਈ ਇੱਕ ਵਾਇਰਲੈਸ ਨੈਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰੋ।"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਹੋ ਗਿਆ ਹੈ"</b>\n\n"ਇਸ ਕਾਲ ਨੂੰ ਪੂਰਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਫ਼ੋਨ ਦੇ ਠੰਡਾ ਹੋਣ ਜਾਣ \'ਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।\n\nਤੁਸੀਂ ਹਾਲੇ ਵੀ ਸੰਕਟਕਾਲੀਨ ਕਾਲਾਂ ਕਰ ਸਕਦੇ ਹੋ।"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"ਇੱਕ ਗ਼ੈਰ-ਅਪਾਤਕਾਲ ਕਾਲ ਕਰਨ ਲਈ ਅਪਾਤਕਾਲ ਕਾਲਬੈਕ ਮੋਡ ਤੋਂ ਬਾਹਰ ਆਓ।"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"ਨੈਟਵਰਕ ਤੇ ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤਾ।"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"ਮੋਬਾਈਲ ਨੈਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ।"</string>
@@ -595,7 +594,7 @@
<string name="hac_mode_title" msgid="4127986689621125468">"ਸੁਣਨ ਲਈ ਸਹਾਇਕ ਸਾਧਨ"</string>
<string name="hac_mode_summary" msgid="7774989500136009881">"ਸੁਣਨ ਲਈ ਸਹਾਇਕ ਸਾਧਨ ਅਨੁਕੂਲਤਾ ਚਾਲੂ ਕਰੋ"</string>
<string name="rtt_mode_title" msgid="3075948111362818043">"ਨਾਲ-ਦੀ-ਨਾਲ ਦਿਸਦੀ ਲਿਖਤ (RTT) ਵਾਲੀ ਕਾਲ"</string>
- <string name="rtt_mode_summary" msgid="8631541375609989562">"ਕਿਸੇ ਅਵਾਜ਼ੀ ਕਾਲ ਦੌਰਾਨ ਸੁਨੇਹਾ ਭੇਜਣ ਦਿਓ"</string>
+ <string name="rtt_mode_summary" msgid="8631541375609989562">"ਕਿਸੇ ਵੌਇਸ ਕਾਲ ਦੌਰਾਨ ਸੁਨੇਹਾ ਭੇਜਣ ਦਿਓ"</string>
<string name="rtt_mode_more_information" msgid="587500128658756318">"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="5268008247378355389">"ਨੋਟ ਕਥਨ:ਵੇਲੇ RTT ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
<string-array name="tty_mode_entries">
@@ -664,7 +663,7 @@
<string name="contactPhoto" msgid="7885089213135154834">"ਸੰਪਰਕ ਫ਼ੋਟੋ"</string>
<string name="goPrivate" msgid="4645108311382209551">"ਨਿੱਜੀ ਜਾਓ"</string>
<string name="selectContact" msgid="1527612842599767382">"ਸੰਪਰਕ ਚੁਣੋ"</string>
- <string name="not_voice_capable" msgid="2819996734252084253">"ਅਵਾਜ਼ੀ ਕਾਲਿੰਗ ਸਮਰਥਿਤ ਨਹੀਂ"</string>
+ <string name="not_voice_capable" msgid="2819996734252084253">"ਵੌਇਸ ਕਾਲਿੰਗ ਸਮਰਥਿਤ ਨਹੀਂ"</string>
<string name="description_dial_button" msgid="8614631902795087259">"ਡਾਇਲ ਕਰੋ"</string>
<string name="description_dialpad_button" msgid="7395114120463883623">"ਡਾਇਲਪੈਡ ਦਿਖਾਓ"</string>
<string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"ਸੰਕਟਕਾਲੀਨ ਡਾਇਲਪੈਡ"</string>
@@ -855,7 +854,7 @@
<string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤੀ ਗਈ"</string>
<string name="radio_info_ims_feature_status_available" msgid="6493200914756969292">"ਉਪਲਬਧ"</string>
<string name="radio_info_ims_feature_status_unavailable" msgid="8930391136839759778">"ਅਣਉਪਲਬਧ"</string>
- <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS ਰਜਿਸਟਰੇਸ਼ਨ: <xliff:g id="STATUS">%1$s</xliff:g>\nLTE \'ਤੇ ਅਵਾਜ਼: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nਵਾਈ-ਫਾਈ \'ਤੇ ਅਵਾਜ਼ੀ ਕਾਲ: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nਵੀਡੀਓ ਕਾਲਿੰਗ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ਇੰਟਰਫੇਸ: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
+ <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS ਰਜਿਸਟਰੇਸ਼ਨ: <xliff:g id="STATUS">%1$s</xliff:g>\nLTE \'ਤੇ ਵੌਇਸ: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nਵਾਈ-ਫਾਈ \'ਤੇ ਵੌਇਸ: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nਵੀਡੀਓ ਕਾਲਿੰਗ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ਇੰਟਰਫੇਸ: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="45753418231446400">"ਸੇਵਾ ਵਿੱਚ"</string>
<string name="radioInfo_service_out" msgid="287972405416142312">"ਸੇਵਾ ਵਿੱਚ ਨਹੀਂ"</string>
<string name="radioInfo_service_emergency" msgid="4763879891415016848">"ਸਿਰਫ਼ ਸੰਕਟਕਾਲੀਨ ਕਾਲਾਂ"</string>
@@ -892,12 +891,12 @@
<string name="radio_info_ppp_received_label" msgid="5753592451640644889">"ਡਾਟਾ ਪ੍ਰਾਪਤ ਹੋਇਆ:"</string>
<string name="radio_info_gsm_service_label" msgid="6443348321714241328">"ਵੌਇਸ ਸੇਵਾ:"</string>
<string name="radio_info_signal_strength_label" msgid="5545444702102543260">"ਸਿਗਨਲ ਦੀ ਤੀਬਰਤਾ:"</string>
- <string name="radio_info_call_status_label" msgid="7693575431923095487">"ਅਵਾਜ਼ੀ ਕਾਲ ਸਥਿਤੀ:"</string>
+ <string name="radio_info_call_status_label" msgid="7693575431923095487">"ਵੌਇਸ ਕਾਲ ਸਥਿਤੀ:"</string>
<string name="radio_info_ppp_sent_label" msgid="6542208429356199695">"ਡਾਟਾ ਭੇਜਿਆ ਗਿਆ:"</string>
<string name="radio_info_message_waiting_label" msgid="1886549432566952078">"ਸੁਨੇਹੇ ਦੀ ਉਡੀਕ:"</string>
<string name="radio_info_phone_number_label" msgid="2533852539562512203">"ਫ਼ੋਨ ਨੰਬਰ:"</string>
<string name="radio_info_band_mode_label" msgid="23480556225515290">"ਰੇਡੀਓ ਬੈਂਡ ਚੁਣੋ"</string>
- <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"ਅਵਾਜ਼ੀ ਨੈੱਟਵਰਕ ਦੀ ਕਿਸਮ:"</string>
+ <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"ਵੌਇਸ ਨੈੱਟਵਰਕ ਕਿਸਮ:"</string>
<string name="radio_info_data_network_type_label" msgid="8886597029237501929">"ਡਾਟਾ ਨੈੱਟਵਰਕ ਕਿਸਮ:"</string>
<string name="phone_index_label" msgid="6222406512768964268">"ਫ਼ੋਨ ਕ੍ਰਮ-ਸੂਚੀ ਚੁਣੋ"</string>
<string name="radio_info_set_perferred_label" msgid="7408131389363136210">"ਤਰਜੀਹੀ ਨੈੱਟਵਰਕ ਕਿਸਮ ਸੈੱਟ ਕਰੋ:"</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR ਉਪਲਬਧ:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR ਸਥਿਤੀ:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR ਵਾਰਵਾਰਤਾ:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"ਨੈੱਟਵਰਕ ਸਲਾਈਸਿੰਗ ਸੰਰੂਪਣ:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"ਰੇਡੀਓ ਬੈਂਡ ਮੋਡ ਸੈੱਟ ਕਰੋ"</string>
<string name="band_mode_loading" msgid="795923726636735967">"ਬੈਂਡ ਸੂਚੀ ਲੋਡ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"ਸੈੱਟ ਕਰੋ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 006693b..03358d9 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -278,7 +278,7 @@
<!-- no translation found for enhanced_4g_lte_mode_sumary_variant:0 (2943982616649705147) -->
<!-- no translation found for enhanced_4g_lte_mode_sumary_variant:1 (5262249464504131443) -->
<!-- no translation found for enhanced_4g_lte_mode_sumary_variant:2 (6356974241850241718) -->
- <string name="data_enabled" msgid="22525832097434368">"Przesyłanie danych włączone"</string>
+ <string name="data_enabled" msgid="22525832097434368">"Włączone przesyłanie danych"</string>
<string name="data_enable_summary" msgid="696860063456536557">"Zezwalaj na użycie danych"</string>
<string name="dialog_alert_title" msgid="5260471806940268478">"Uwaga"</string>
<string name="roaming" msgid="1576180772877858949">"Roaming"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Aby zadzwonić, włącz sieć komórkową, wyłącz tryb samolotowy lub wyłącz tryb oszczędzania baterii."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Wyłącz tryb samolotowy, by zadzwonić."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Wyłącz tryb samolotowy lub połącz się z siecią bezprzewodową, by zadzwonić."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon jest zbyt gorący"</b>\n\n"Nie można nawiązać tego połączenia. Spróbuj ponownie, gdy telefon się ochłodzi.\n\nNadal możesz wykonywać połączenia alarmowe."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Aby zadzwonić normalnie, wyjdź z trybu alarmowego połączenia zwrotnego."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Nie zarejestrowano w sieci"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Sieć komórkowa jest niedostępna."</string>
@@ -921,6 +920,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Dostępne NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Stan NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Częstotliwość NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Ustawianie trybu pasma radiowego"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Ładuję listę pasm…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Ustaw"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 89d2279..3e92292 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Ative a rede móvel, desative o modo de avião ou desative o modo de poupança de bateria para fazer uma chamada."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Desative o modo de avião para fazer uma chamada."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Desative o modo de avião ou ligue-se a uma rede sem fios para fazer uma chamada."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"O telemóvel está demasiado quente"</b>\n\n"Não é possível concluir esta chamada. Tente novamente depois de o telemóvel arrefecer.\n\nAinda pode efetuar chamadas de emergência."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Sair do modo de chamada de retorno de emergência para efetuar uma chamada que não é de emergência."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Sem registo na rede."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Rede móvel não disponível."</string>
@@ -638,12 +637,12 @@
<string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Ligação de dados desativada"</string>
<string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"Sem ligação de dados até à(s) <xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
<plurals name="alert_dialog_exit_ecm" formatted="false" msgid="5425906903766466743">
- <item quantity="one">O telemóvel fica no modo de Chamada de emergência durante <xliff:g id="COUNT_0">%s</xliff:g> minuto. Neste modo, não é possível utilizar aplicações com uma ligação de dados. Pretende sair agora?</item>
<item quantity="other">O telemóvel fica no modo de Chamada de emergência durante <xliff:g id="COUNT_1">%s</xliff:g> minutos. Neste modo, não é possível utilizar aplicações com uma ligação de dados. Pretende sair agora?</item>
+ <item quantity="one">O telemóvel fica no modo de Chamada de emergência durante <xliff:g id="COUNT_0">%s</xliff:g> minuto. Neste modo, não é possível utilizar aplicações com uma ligação de dados. Pretende sair agora?</item>
</plurals>
<plurals name="alert_dialog_not_avaialble_in_ecm" formatted="false" msgid="1152682528741457004">
- <item quantity="one">A ação selecionada não está disponível no modo de Chamada de emergência. O telemóvel fica neste modo durante <xliff:g id="COUNT_0">%s</xliff:g> minuto. Pretende sair agora?</item>
<item quantity="other">A ação selecionada não está disponível no modo de Chamada de emergência. O telemóvel fica neste modo durante <xliff:g id="COUNT_1">%s</xliff:g> minutos. Pretende sair agora?</item>
+ <item quantity="one">A ação selecionada não está disponível no modo de Chamada de emergência. O telemóvel fica neste modo durante <xliff:g id="COUNT_0">%s</xliff:g> minuto. Pretende sair agora?</item>
</plurals>
<string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"A ação selecionada não está disponível durante uma chamada de emergência."</string>
<string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"A sair do modo de chamada de retorno de emergência"</string>
@@ -653,8 +652,8 @@
<string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"O telemóvel está no modo de chamada de retorno de emergência."</string>
<string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"Até à(s) <xliff:g id="COMPLETETIME">%s</xliff:g>."</string>
<plurals name="alert_dialog_exit_ecm_without_data_restriction_hint" formatted="false" msgid="6477733043040328640">
- <item quantity="one">O telemóvel ficará no modo de chamada de retorno de emergência durante <xliff:g id="COUNT_0">%s</xliff:g> minuto.\nPretende sair agora?</item>
<item quantity="other">O telemóvel ficará no modo de chamada de retorno de emergência durante <xliff:g id="COUNT_1">%s</xliff:g> minutos.\nPretende sair agora?</item>
+ <item quantity="one">O telemóvel ficará no modo de chamada de retorno de emergência durante <xliff:g id="COUNT_0">%s</xliff:g> minuto.\nPretende sair agora?</item>
</plurals>
<string name="voicemail_provider" msgid="4158806657253745294">"Serviço"</string>
<string name="voicemail_settings" msgid="4451045613238972776">"Configuração"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR disponível:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Estado NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frequência NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Definir modo de banda de rádio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"A carregar lista de bandas…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Definir"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index b1b1a2f..40eaf23 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -32,7 +32,7 @@
<string name="mmiCancelled" msgid="5339191899200678272">"Código MMI cancelado"</string>
<string name="cancel" msgid="8984206397635155197">"Cancelar"</string>
<string name="enter_input" msgid="6193628663039958990">"A mensagem USSD deve ter de <xliff:g id="MIN_LEN">%1$d</xliff:g> a <xliff:g id="MAX_LEN">%2$d</xliff:g> caracteres. Tente novamente."</string>
- <string name="manageConferenceLabel" msgid="8415044818156353233">"Gerenciar conferência"</string>
+ <string name="manageConferenceLabel" msgid="8415044818156353233">"Gerenciar teleconferência"</string>
<string name="ok" msgid="7818974223666140165">"OK"</string>
<string name="audio_mode_speaker" msgid="243689733219312360">"Alto-falante"</string>
<string name="audio_mode_earpiece" msgid="2823700267171134282">"Minifone do aparelho"</string>
@@ -86,11 +86,11 @@
<string name="voicemail_notifications_preference_title" msgid="7829238858063382977">"Notificações"</string>
<string name="cell_broadcast_settings" msgid="8135324242541809924">"Transmissões de emergência"</string>
<string name="call_settings" msgid="3677282690157603818">"Configurações de chamadas"</string>
- <string name="additional_gsm_call_settings" msgid="1561980168685658846">"Configurações avançadas"</string>
- <string name="additional_gsm_call_settings_with_label" msgid="7973920539979524908">"Configurações avançadas (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
- <string name="sum_gsm_call_settings" msgid="7964692601608878138">"Configurações avançadas somente de chamada GSM"</string>
+ <string name="additional_gsm_call_settings" msgid="1561980168685658846">"Configurações adicionais"</string>
+ <string name="additional_gsm_call_settings_with_label" msgid="7973920539979524908">"Configurações adicionais (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+ <string name="sum_gsm_call_settings" msgid="7964692601608878138">"Configurações adicionais somente de chamada GSM"</string>
<string name="additional_cdma_call_settings" msgid="2178016561980611304">"Configurações de chamada CDMA adicionais"</string>
- <string name="sum_cdma_call_settings" msgid="3185825305136993636">"Configurações avançadas somente de chamada CDMA"</string>
+ <string name="sum_cdma_call_settings" msgid="3185825305136993636">"Configurações adicionais somente de chamada CDMA"</string>
<string name="labelNwService" msgid="6015891883487125120">"Configurações do serviço de rede"</string>
<string name="labelCallerId" msgid="2090540744550903172">"Identificador de chamadas"</string>
<string name="sum_loading_settings" msgid="434063780286688775">"Carregando configurações…"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Ative a rede móvel e desative o modo avião ou o modo de economia de bateria para ligar."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Desative o modo avião para fazer uma chamada."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Desative o modo avião ou conecte-se a uma rede sem fio para fazer uma chamada."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"O smartphone está muito quente"</b>\n\n"Não é possível completar esta chamada. Tente de novo quando seu smartphone esfriar.\n\nVocê ainda pode fazer chamadas de emergência."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Saia do modo de retorno de chamada de emergência para fazer uma chamada que não seja de emergência."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Não registrado na rede."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Rede móvel não disponível."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR disponível:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Estado do NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frequência do NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Definir modo de banda de rádio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Carregando a lista de bandas…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Definir"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 326cc52..4fc807d 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Activați rețeaua mobilă, dezactivați modul avion sau modul de economisire a bateriei pentru a iniția un apel."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Pentru a apela, dezactivați modul Avion."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Pentru a apela, dezactivați modul Avion sau conectați-vă la o rețea wireless."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefonul este prea fierbinte"</b>\n\n"Nu se poate iniția apelul. Încercați din nou după ce telefonul se răcește.\n\nPuteți, totuși, să inițiați apeluri de urgență."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Ieșiți din modul de apelare inversă de urgență pentru a efectua un apel care nu este de urgență."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Neînregistrat în rețea."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Rețeaua mobilă nu este disponibilă."</string>
@@ -918,6 +917,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Disponibilă NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Stare NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frecvență NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Configurația secționării rețelei:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Setați Modul bandă radio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Se încarcă lista de benzi…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Setați"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 4a6ee96..cdbbf6a 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -303,7 +303,7 @@
<string name="carrier_settings_euicc" msgid="1190237227261337749">"Оператор"</string>
<string name="keywords_carrier_settings_euicc" msgid="8540160967922063745">"оператор, esim, sim, euicc, сменить оператора, добавить оператора"</string>
<string name="carrier_settings_euicc_summary" msgid="2027941166597330117">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> – <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>"</string>
- <string name="mobile_data_settings_title" msgid="7228249980933944101">"Мобильный интернет"</string>
+ <string name="mobile_data_settings_title" msgid="7228249980933944101">"Мобильный Интернет"</string>
<string name="mobile_data_settings_summary" msgid="5012570152029118471">"Доступ к Интернету по мобильной сети"</string>
<string name="data_usage_disable_mobile" msgid="5669109209055988308">"Отключить мобильный Интернет?"</string>
<string name="sim_selection_required_pref" msgid="6985901872978341314">"Выберите SIM-карту"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Чтобы позвонить, подключитесь к мобильной сети или отключите режим полета либо режим энергосбережения."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Чтобы позвонить, отключите режим полета."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Чтобы позвонить, отключите режим полета и подключитесь к Wi-Fi."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Телефон перегрелся."</b>\n\n"Не удалось совершить звонок. Повторите попытку, когда телефон остынет.\n\nЭто не касается экстренных вызовов."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Чтобы сделать обычный звонок, выйдите из режима экстренных обратных вызовов."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Нет регистрации в сети."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Мобильная сеть недоступна."</string>
@@ -921,6 +920,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR доступно:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Состояние NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Частота NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Настройки фрагментирования сети:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Настроить режим сети"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Загрузка списка частот…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Сохранить"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 7efc245..0af60b6 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"ජංගම ජාලය ක්රියාත්මක කරන්න, ඇමතුමක් ගැනීමට ගුවන් යානා ප්රකාරය හෝ බැටරි සුරැකුම් ප්රකාරය ක්රියාවිරහිත කරන්න."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ඇමතුමක් ගැනීමට ගුවන් යානා මාදිලිය අක්රිය කරන්න."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ඇමතුමක් ලබා ගැනීමට ගුවන් යානා මෝඩය අක්රිය කරන්න හෝ රැහැන් රහිත ජාලයකට සම්බන්ධ වෙන්න."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"දුරකථනය ඉතා උණුසුම් ය"</b>\n\n"මෙම ඇමතුම සම්පූර්ණ කළ නොහැක. ඔබේ දුරකථනය සිසිල් වන විට නැවත උත්සාහ කරන්න.\n\nඔබට තවමත් හදිසි ඇමතුම් ලබා ගත හැක."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"හදිසි-නොවන ඇමතුමක් සිදු කිරීමට හදිසි අවස්ථා පසු ඇමතුම් ප්රකාරයෙන් ඉවත් වන්න."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"ජාලය මත ලියාපදිංචි වී නැත."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"ජංගම ජාලය නොමැත."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR ලබා ගත හැකි:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR තත්ත්වය:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR සංඛ්යාතය:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"රේඩියෝ කලාප ප්රකාරය සකසන්න"</string>
<string name="band_mode_loading" msgid="795923726636735967">"කලාප ලැයිස්තුව පූරණය කරමින්…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"සකසන්න"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 7f9bc94..6a8a304 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Ak chcete volať, zapnite mobilnú sieť a vypnite režim v lietadle alebo režim šetriča batérie."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Ak chcete volať, vypnite režim v lietadle"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Ak chcete volať, vypnite režim v lietadle alebo sa pripojte k bezdrôtovej sieti"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefón sa príliš zahrial"</b>\n\n"Tento hovor sa nedá uskutočniť. Skúste to znova, keď telefón vychladne.\n\nTiesňové volania môžete uskutočňovať aj naďalej."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Ak chcete volať štandardným spôsobom, ukončite režim tiesňového spätného volania."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Prihlásenie do siete nebolo úspešné."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobilná sieť nie je k dispozícii."</string>
@@ -921,6 +920,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Dostupné NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Stav NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frekvencia NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Nastaviť režim rádiového pásma"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Načítava sa zoznam pásiem…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Nastaviť"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 5feb01d..8f0a397 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Vklopite mobilno omrežje, izklopite način za letalo ali način za varčevanje z energijo akumulatorja, če želite opraviti klic."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Izklopite način za letalo, če želite opraviti klic."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Izklopite način za letalo ali se povežite v omrežje Wi-Fi, če želite opraviti klic."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon je prevroč"</b>\n\n"Tega klica ni mogoče dokončati. Poskusite znova, ko se telefon ohladi.\n\nŠe vedno lahko opravljate klice v sili."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Če ne gre za klic v sili, zaprite način za povratni klici v sili."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ni registrirano v omrežju."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Omrežje prenosnega telefona ni na voljo."</string>
@@ -921,6 +920,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Razpoložljivo za NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Stanje NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frekvenca NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Konfiguracija razkosanja omrežja:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Nastavljanje načina radijskega območja"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Nalaganje seznama frekvenčnih pasov …"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Nastavi"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 8ea15ab..483bf92 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Aktivizo rrjetin celular, çaktivizo modalitetin e aeroplanit ose modalitetin e kursyesit të baterisë për të bërë një telefonatë."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Çaktivizo modalitetin e aeroplanit për të bërë telefonata."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Çaktivizo modalitetin e aeroplanit ose lidhu me ndonjë rrjet interneti valor për të bërë telefonata."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefoni është shumë i nxehtë"</b>\n\n"Kjo telefonatë nuk mund të kryhet. Provo përsëri kur të ftohet telefoni.\n\nMund të bësh përsëri telefonata të urgjencës."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Dil nga modaliteti i kthimit të telefonatës së urgjencës për të bërë një telefonatë jo urgjente."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"I paregjistruar në rrjet."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Rrjeti celular nuk mundësohet."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Ofrohet NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Gjendja e NR-së:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frekuenca e NR-së:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Cakto modalitetin e brezit të radios"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Po ngarkon listën e brezave…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Cakto"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index ecd1ff1..905f491 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Укључите мобилну мрежу и искључите режим рада у авиону или режим уштеде батерије да бисте упутили позив."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Искључите режим рада у авиону да бисте упутили позив."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Искључите режим рада у авиону или се повежите на бежичну мрежу да бисте упутили позив."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Телефон је превише врућ"</b>\n\n"Позив не може да се заврши. Пробајте поново када се телефон охлади.\n\nИ даље можете да упућујете хитне позиве."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Изађите из режима хитног повратног позива да бисте упутили позив који није хитан."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Није регистровано на мрежи."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Мобилна мрежа није доступна."</string>
@@ -615,7 +614,7 @@
<string name="ota_title_activate" msgid="4049645324841263423">"Активирајте телефон"</string>
<string name="ota_touch_activate" msgid="838764494319694754">"Потребно је да упутите посебан позив да бисте активирали услугу свој телефона. \n\nНакон што притиснете дугме „Активирај“, слушајте дата упутства да бисте да бисте активирали свој телефон."</string>
<string name="ota_hfa_activation_title" msgid="3300556778212729671">"Активирање..."</string>
- <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"Телефон активира услугу мобилних података.\n\nТо може да потраје и до 5 минута."</string>
+ <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"Телефон активира услугу мобилног преноса података.\n\nТо може да потраје и до 5 минута."</string>
<string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"Желите ли да прескочите активацију?"</string>
<string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Ако прескочите активацију, не можете да упућујете позиве или да се повезујете са мрежама за мобилни пренос података (иако можете да се повежете са WiFi мрежама). Све док не активирате свој телефон, бићете упитани да то учините сваки пут када га укључите."</string>
<string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"Прескочи"</string>
@@ -918,6 +917,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR доступно:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR стање:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR учесталост:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Подесите режим радијског опсега"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Учитава се листа опсега…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Подеси"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 4b112c4..0d4af3f 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -75,7 +75,7 @@
<string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"Konfigurera kontoinställningar"</string>
<string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"Alla konton för samtal"</string>
<string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"Välj vilka konton som kan ringa samtal"</string>
- <string name="wifi_calling" msgid="3650509202851355742">"wifi-samtal"</string>
+ <string name="wifi_calling" msgid="3650509202851355742">"Wi-Fi-samtal"</string>
<string name="connection_service_default_label" msgid="7332739049855715584">"Inbyggd anslutningstjänst"</string>
<string name="voicemail" msgid="7697769412804195032">"Röstbrevlåda"</string>
<string name="voicemail_settings_with_label" msgid="4228431668214894138">"Röstbrevlåda (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
@@ -309,7 +309,7 @@
<string name="sim_selection_required_pref" msgid="6985901872978341314">"Du måste välja något"</string>
<string name="sim_change_data_title" msgid="9142726786345906606">"Vill du ändra data-SIM?"</string>
<string name="sim_change_data_message" msgid="3567358694255933280">"Vill du använda <xliff:g id="NEW_SIM">%1$s</xliff:g> i stället för <xliff:g id="OLD_SIM">%2$s</xliff:g> för mobildata?"</string>
- <string name="wifi_calling_settings_title" msgid="5800018845662016507">"wifi-samtal"</string>
+ <string name="wifi_calling_settings_title" msgid="5800018845662016507">"Wi-Fi-samtal"</string>
<string name="video_calling_settings_title" msgid="342829454913266078">"Videosamtal via operatören"</string>
<string name="gsm_umts_options" msgid="4968446771519376808">"Alternativ för GSM/UMTS"</string>
<string name="cdma_options" msgid="3669592472226145665">"CDMA-alternativ"</string>
@@ -451,8 +451,8 @@
<string name="sum_fdn" msgid="6152246141642323582">"Hantera fasta nummer"</string>
<string name="sum_fdn_change_pin" msgid="3510994280557335727">"Ändra PIN-kod för FDN-åtkomst"</string>
<string name="sum_fdn_manage_list" msgid="3311397063233992907">"Hantera nummerlistan"</string>
- <string name="voice_privacy" msgid="7346935172372181951">"Integritet för Voice"</string>
- <string name="voice_privacy_summary" msgid="3556460926168473346">"Aktivera avancerat integritetsläge"</string>
+ <string name="voice_privacy" msgid="7346935172372181951">"Sekretess för Voice"</string>
+ <string name="voice_privacy_summary" msgid="3556460926168473346">"Aktivera avancerat sekretessläge"</string>
<string name="tty_mode_option_title" msgid="3843817710032641703">"TTY-läge"</string>
<string name="tty_mode_option_summary" msgid="4770510287236494371">"Ange TTY-läge"</string>
<string name="auto_retry_mode_title" msgid="2985801935424422340">"Försök igen automatiskt"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Aktivera mobilt nätverk, stäng av flygplansläget eller batterisparläget för att ringa ett samtal."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Inaktivera flygplansläget om du vill ringa."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Inaktivera flygplansläget eller anslut till ett trådlöst nätverk om du vill ringa."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefonen för varm"</b>\n\n"Det går inte att genomföra samtalet. Försök igen när telefonen svalnar.\n\nDet går fortfarande att ringa nödsamtal."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Avsluta läget för återuppringning vid nödsamtal om du vill ringa ett vanligt samtal."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Inte registrerat på nätverk."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Inget mobilt nätverk är tillgängligt."</string>
@@ -555,7 +554,7 @@
<string name="incall_error_supp_service_hangup" msgid="836524952243836735">"Det gick inte att släppa samtal."</string>
<string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Det går inte att hålla kvar samtal."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Anslut till ett trådlöst nätverk om du vill ringa."</string>
- <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Aktivera wifi-samtal för att ringa."</string>
+ <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Aktivera Wi-Fi-samtal för att ringa."</string>
<string name="emergency_information_hint" msgid="9208897544917793012">"Nödinformation"</string>
<string name="emergency_information_owner_hint" msgid="6256909888049185316">"Ägare"</string>
<string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tryck igen för att visa information"</string>
@@ -617,7 +616,7 @@
<string name="ota_hfa_activation_title" msgid="3300556778212729671">"Aktiveras ..."</string>
<string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"Din mobila datatjänst aktiveras av mobilen.\n\nDetta kan ta upp till fem minuter."</string>
<string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"Vill du hoppa över aktiveringen?"</string>
- <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Om du hoppar över aktiveringen kan du inte ringa samtal eller ansluta till mobila datanätverk (men du kan ansluta till wifi-nätverk). Du kommer att påminnas om att aktivera telefonen varje gång du sätter på den, tills du har aktiverat den."</string>
+ <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Om du hoppar över aktiveringen kan du inte ringa samtal eller ansluta till mobila datanätverk (men du kan ansluta till Wi-Fi-nätverk). Du kommer att påminnas om att aktivera telefonen varje gång du sätter på den, tills du har aktiverat den."</string>
<string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"Hoppa över"</string>
<string name="ota_activate" msgid="7939695753665438357">"Aktivera"</string>
<string name="ota_title_activate_success" msgid="1272135024761004889">"Telefonen är aktiverad."</string>
@@ -681,18 +680,18 @@
<string name="sim_description_emergency_calls" msgid="5146872803938897296">"Endast nödsamtal"</string>
<string name="sim_description_default" msgid="7474671114363724971">"SIM-kortsplats: <xliff:g id="SLOT_ID">%s</xliff:g>"</string>
<string name="accessibility_settings_activity_title" msgid="7883415189273700298">"Tillgänglighet"</string>
- <string name="status_hint_label_incoming_wifi_call" msgid="2606052595898044071">"wifi-samtal från"</string>
- <string name="status_hint_label_wifi_call" msgid="942993035689809853">"wifi-samtal"</string>
+ <string name="status_hint_label_incoming_wifi_call" msgid="2606052595898044071">"Wi-Fi-samtal från"</string>
+ <string name="status_hint_label_wifi_call" msgid="942993035689809853">"Wi-Fi-samtal"</string>
<string name="emergency_action_launch_hint" msgid="2762016865340891314">"Tryck igen för att öppna"</string>
<string name="message_decode_error" msgid="1061856591500290887">"Ett fel inträffade när meddelandet avkodades."</string>
<string name="callFailed_cdma_activation" msgid="5392057031552253550">"Ett SIM-kort har använts för att aktivera tjänsten och uppdatera roamingfunktionerna i mobilen."</string>
<string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"Det finns för många aktiva samtal. Avsluta eller slå samman pågående samtal innan du ringer ett nytt."</string>
<string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"Det går inte att ansluta. Sätt i ett giltigt SIM-kort."</string>
- <string name="callFailed_wifi_lost" msgid="1788036730589163141">"wifi-anslutningen bruten. Samtal avslutat."</string>
+ <string name="callFailed_wifi_lost" msgid="1788036730589163141">"Wi-Fi-anslutningen bruten. Samtal avslutat."</string>
<string name="dialFailed_low_battery" msgid="6857904237423407056">"Det går inte att ringa videosamtal på grund av svagt batteri."</string>
<string name="callFailed_low_battery" msgid="4056828320214416182">"Videosamtalet slutade på grund av svagt batteri."</string>
- <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Nödsamtal via wifi är inte tillgängligt på den här platsen."</string>
- <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"wifi-samtal är inte tillgängligt på den här platsen."</string>
+ <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Nödsamtal via Wi-Fi är inte tillgängligt på den här platsen."</string>
+ <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"Wi-Fi-samtal är inte tillgängligt på den här platsen."</string>
<string name="change_pin_title" msgid="3564254326626797321">"Ändra röstbrevlådans pinkod"</string>
<string name="change_pin_continue_label" msgid="5177011752453506371">"Fortsätt"</string>
<string name="change_pin_cancel_label" msgid="2301711566758827936">"Avbryt"</string>
@@ -837,7 +836,7 @@
<string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Inaktivera dataanslutning"</string>
<string name="volte_provisioned_switch_string" msgid="4812874990480336178">"VoLTE-administrerad"</string>
<string name="vt_provisioned_switch_string" msgid="8295542122512195979">"Videosamtal tillhandahålls"</string>
- <string name="wfc_provisioned_switch_string" msgid="3835004640321078988">"wifi-samtal tillhandahålls"</string>
+ <string name="wfc_provisioned_switch_string" msgid="3835004640321078988">"Wi-Fi-samtal tillhandahålls"</string>
<string name="eab_provisioned_switch_string" msgid="4449676720736033035">"EAB/Presence tillhandahålls"</string>
<string name="cbrs_data_switch_string" msgid="6060356430838077653">"Data via CBRS"</string>
<string name="dsds_switch_string" msgid="7564769822086764796">"Aktivera DSDS"</string>
@@ -855,7 +854,7 @@
<string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"Inte registrerad"</string>
<string name="radio_info_ims_feature_status_available" msgid="6493200914756969292">"Tillgänglig"</string>
<string name="radio_info_ims_feature_status_unavailable" msgid="8930391136839759778">"Inte tillgängligt"</string>
- <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS-registrering: <xliff:g id="STATUS">%1$s</xliff:g>\nRöst via LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nRöst via wifi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideosamtal: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT-gränssnitt: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
+ <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS-registrering: <xliff:g id="STATUS">%1$s</xliff:g>\nRöst via LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nRöst via Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideosamtal: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT-gränssnitt: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="45753418231446400">"I tjänst"</string>
<string name="radioInfo_service_out" msgid="287972405416142312">"Ur funktion"</string>
<string name="radioInfo_service_emergency" msgid="4763879891415016848">"Endast nödsamtal"</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR tillgänglig:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR-status:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR-frekvens:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Nätverkets uppdelningskonfiguration:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Konfigurera radiobandsläget"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Läser in bandlista …"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Ange"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 83727d0..8241f0b 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -297,7 +297,7 @@
<string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"Akaunti za SIP ambazo zimefungwa zimepatikana na zikaondolewa"</string>
<string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Huduma ya kupiga simu kupitia SIP haipatikani tena kwenye mfumo wa Android.\nAkaunti zako za SIP zilizopo <xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g> zimeondolewa.\nTafadhali thibitisha mipangilio ya akaunti yako chaguomsingi ya kupiga simu."</string>
<string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Nenda kwenye mipangilio"</string>
- <string name="data_usage_title" msgid="8438592133893837464">"Programu inavyotumia data"</string>
+ <string name="data_usage_title" msgid="8438592133893837464">"Matumizi ya data ya programu"</string>
<string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_1">%1$s</xliff:g> za data ya mtandao wa simu zimetumika kuanzia <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="advanced_options_title" msgid="9208195294513520934">"Mipangilio ya Kina"</string>
<string name="carrier_settings_euicc" msgid="1190237227261337749">"Mtoa huduma"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Washa mtandao wa simu, zima hali ya ndegeni au uzime hali ya kiokoa betri ili upige simu."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Zima hali ya ndegeni ili upige simu."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Zima hali ya ndegeni au uunganishe kwenye mtandao pasiwaya ili upige simu."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Simu ina kiwango cha joto cha juu sana"</b>\n\n"Imeshindwa kupiga simu hii. Jaribu tena wakati kiwango cha joto cha simu yako kitapungua.\n\nBado unaweza kupiga simu za dharura."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Ondoka kwenye hali ya kupiga simu za dharura ili upige simu zisizokuwa za dharura."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Haijasajiliwa kwa mitandao"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mtandao wa simu haupatikani."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR Inapatikana:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Hali ya NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Masafa ya NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Weka Hali ya Bendi ya Redio"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Inapakia Orodha ya Bendi…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Weka"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 029c5bd..5a28420 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -49,13 +49,13 @@
<string name="add_vm_number_str" msgid="7368168964435881637">"எண்ணைச் சேர்"</string>
<string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"முதன்மை பயனர் மட்டுமே குரலஞ்சல் அமைப்புகளை மாற்ற முடியும்."</string>
<string name="puk_unlocked" msgid="4627340655215746511">"சிம் கார்டின் தடுப்பு நீக்கப்பட்டது. மொபைல் திறக்கப்படுகிறது…"</string>
- <string name="label_ndp" msgid="7617392683877410341">"சிம் நெட்வொர்க்கை அன்லாக் செய்யும் பின்"</string>
+ <string name="label_ndp" msgid="7617392683877410341">"சிம் நெட்வொர்க்கின் தடைநீக்க பின்"</string>
<string name="label_phoneid" msgid="8775611434123577808">"ஆப்பரேட்டருக்கு சிம் பூட்டப்பட்டுள்ளது"</string>
- <string name="sim_ndp_unlock_text" msgid="7737338355451978338">"அன்லாக் செய்"</string>
+ <string name="sim_ndp_unlock_text" msgid="7737338355451978338">"தடைநீக்கு"</string>
<string name="sim_ndp_dismiss_text" msgid="89667342248929777">"விலக்கு"</string>
- <string name="requesting_unlock" msgid="930512210309437741">"நெட்வொர்க்கை அன்லாக் செய்யக் கோருகிறது…"</string>
- <string name="unlock_failed" msgid="7103543844840661366">"நெட்வொர்க்கை அன்லாக் செய்வதற்கான கோரிக்கை தோல்வியடைந்தது."</string>
- <string name="unlock_success" msgid="32681089371067565">"நெட்வொர்க் அன்லாக் செய்யப்பட்டது."</string>
+ <string name="requesting_unlock" msgid="930512210309437741">"நெட்வொர்க் தடைநீக்கத்தைக் கோருகிறது…"</string>
+ <string name="unlock_failed" msgid="7103543844840661366">"நெட்வொர்க் தடைநீக்கத்திற்கான கோரிக்கை தோல்வி."</string>
+ <string name="unlock_success" msgid="32681089371067565">"நெட்வொர்க்கின் தடைநீக்கப்பட்டது."</string>
<string name="mobile_network_settings_not_available" msgid="8678168497517090039">"இவரால் மொபைல் நெட்வொர்க் அமைப்புகளை மாற்ற முடியாது"</string>
<string name="labelGSMMore" msgid="7354182269461281543">"GSM அழைப்பு அமைப்பு"</string>
<string name="labelGsmMore_with_label" msgid="3206015314393246224">"GSM அழைப்பு அமைப்புகள் (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
@@ -339,7 +339,7 @@
<string name="maintenance_enable" msgid="2646784483222342290">"பராமரிப்பு இயக்கப்பட்டது"</string>
<string name="maintenance_disable" msgid="2121032601497725602">"பராமரிப்பு முடக்கப்பட்டது"</string>
<string name="general_news_settings" msgid="2670499575962080411">"பொது செய்திகள்"</string>
- <string name="bf_news_settings" msgid="8571709425370794221">"பிசினஸ் மற்றும் நிதிசார்ந்த செய்திகள்"</string>
+ <string name="bf_news_settings" msgid="8571709425370794221">"வணிகம் மற்றும் நிதிசார்ந்த செய்திகள்"</string>
<string name="sports_news_settings" msgid="2684364556989168438">"விளையாட்டுச் செய்திகள்"</string>
<string name="entertainment_news_settings" msgid="4228527702346305543">"பொழுதுபோக்குச் செய்திகள்"</string>
<string name="enable_disable_local" msgid="7654175079979415572">"உள்ளூர்"</string>
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"அழைக்க, மொபைல் நெட்வொர்க்கை இயக்கவும், விமானப் பயன்முறை அல்லது பேட்டரி சேமிப்பான் பயன்முறையை முடக்கவும்."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"அழைக்க, விமானப் பயன்முறையை முடக்கவும்."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"அழைக்க, விமானப் பயன்முறையை முடக்கவும் அல்லது வயர்லெஸ் நெட்வொர்க்குடன் இணைக்கவும்."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"மொபைல் மிகச் சூடாக உள்ளது"</b>\n\n"இந்த அழைப்பைத் தொடர முடியவில்லை. மொபைலின் சூடு முழுமையாகத் தணிந்ததும் மீண்டும் அழைக்கவும்.\n\nஇருப்பினும் அவசர அழைப்புகளைச் செய்யலாம்."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"வழக்கமான அழைப்பிற்கு, அவசரகாலத் திரும்ப அழைக்கும் பயன்முறையிலிருந்து வெளியேறவும்."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"நெட்வொர்க்கில் பதிவுசெய்யப்படவில்லை."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"மொபைல் நெட்வொர்க் கிடைக்கவில்லை."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR உள்ளது:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR நிலை:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR அலைவரிசை:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"ரேடியோ பேண்டு பயன்முறையை அமை"</string>
<string name="band_mode_loading" msgid="795923726636735967">"பேண்டு பட்டியலை ஏற்றுகிறது…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"அமை"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 1c232bf..0b0220f 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -20,25 +20,25 @@
<string name="phoneAppLabel" product="default" msgid="130465039375347763">"ఫోన్ సేవలు"</string>
<string name="emergencyDialerIconLabel" msgid="8668005772339436680">"అత్యవసర డయలర్"</string>
<string name="phoneIconLabel" msgid="3015941229249651419">"ఫోన్"</string>
- <string name="fdnListLabel" msgid="4119121875004244097">"FDN లిస్ట్"</string>
+ <string name="fdnListLabel" msgid="4119121875004244097">"FDN జాబితా"</string>
<string name="unknown" msgid="8279698889921830815">"తెలియదు"</string>
<string name="private_num" msgid="4487990167889159992">"ప్రైవేట్ నంబర్"</string>
<string name="payphone" msgid="7936735771836716941">"పే ఫోన్"</string>
<string name="onHold" msgid="6132725550015899006">"హోల్డ్లో ఉంది"</string>
- <string name="carrier_mmi_msg_title" msgid="6050165242447507034">"<xliff:g id="MMICARRIER">%s</xliff:g>మెసేజ్"</string>
- <string name="default_carrier_mmi_msg_title" msgid="7754317179938537213">"క్యారియర్ మెసేజ్"</string>
+ <string name="carrier_mmi_msg_title" msgid="6050165242447507034">"<xliff:g id="MMICARRIER">%s</xliff:g>సందేశం"</string>
+ <string name="default_carrier_mmi_msg_title" msgid="7754317179938537213">"క్యారియర్ సందేశం"</string>
<string name="mmiStarted" msgid="9212975136944568623">"MMI కోడ్ ప్రారంభించబడింది"</string>
<string name="ussdRunning" msgid="1163586813106772717">"USSD కోడ్ అమలు చేయబడుతోంది…"</string>
<string name="mmiCancelled" msgid="5339191899200678272">"MMI కోడ్ రద్దు చేయబడింది"</string>
<string name="cancel" msgid="8984206397635155197">"రద్దు చేయి"</string>
- <string name="enter_input" msgid="6193628663039958990">"USSD మెసేజ్ తప్పనిసరిగా <xliff:g id="MIN_LEN">%1$d</xliff:g> మరియు <xliff:g id="MAX_LEN">%2$d</xliff:g> అక్షరాల మధ్య ఉండాలి. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
+ <string name="enter_input" msgid="6193628663039958990">"USSD సందేశం తప్పనిసరిగా <xliff:g id="MIN_LEN">%1$d</xliff:g> మరియు <xliff:g id="MAX_LEN">%2$d</xliff:g> అక్షరాల మధ్య ఉండాలి. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
<string name="manageConferenceLabel" msgid="8415044818156353233">"కాన్ఫరెన్స్ కాల్ను నిర్వహించండి"</string>
<string name="ok" msgid="7818974223666140165">"సరే"</string>
<string name="audio_mode_speaker" msgid="243689733219312360">"స్పీకర్"</string>
<string name="audio_mode_earpiece" msgid="2823700267171134282">"హ్యాండ్సెట్ ఇయర్పీస్"</string>
<string name="audio_mode_wired_headset" msgid="5028010823105817443">"వైర్ గల హెడ్సెట్"</string>
<string name="audio_mode_bluetooth" msgid="25732183428018809">"బ్లూటూత్"</string>
- <string name="wait_prompt_str" msgid="5136209532150094910">"కింది టోన్లు పంపాలా?\n"</string>
+ <string name="wait_prompt_str" msgid="5136209532150094910">"క్రింది టోన్లు పంపాలా?\n"</string>
<string name="pause_prompt_str" msgid="2308897950360272213">"టోన్లు పంపుతోంది\n"</string>
<string name="send_button" msgid="5070379600779031932">"పంపు"</string>
<string name="pause_prompt_yes" msgid="8184132073048369575">"అవును"</string>
@@ -54,7 +54,7 @@
<string name="sim_ndp_unlock_text" msgid="7737338355451978338">"అన్లాక్ చేయి"</string>
<string name="sim_ndp_dismiss_text" msgid="89667342248929777">"తీసివేయి"</string>
<string name="requesting_unlock" msgid="930512210309437741">"నెట్వర్క్ అన్లాక్ను అభ్యర్థిస్తోంది…"</string>
- <string name="unlock_failed" msgid="7103543844840661366">"నెట్వర్క్ అన్లాక్ రిక్వెస్ట్ విఫలమైంది."</string>
+ <string name="unlock_failed" msgid="7103543844840661366">"నెట్వర్క్ అన్లాక్ అభ్యర్థన విఫలమైంది."</string>
<string name="unlock_success" msgid="32681089371067565">"నెట్వర్క్ అన్లాక్ విజయవంతమైంది."</string>
<string name="mobile_network_settings_not_available" msgid="8678168497517090039">"ఈ వినియోగదారుకు మొబైల్ నెట్వర్క్ సెట్టింగ్లు అందుబాటులో లేవు"</string>
<string name="labelGSMMore" msgid="7354182269461281543">"GSM కాల్ సెట్టింగ్లు"</string>
@@ -64,8 +64,8 @@
<string name="apn_settings" msgid="1978652203074756623">"యాక్సెస్ పాయింట్ పేర్లు"</string>
<string name="settings_label" msgid="9101778088412567956">"నెట్వర్క్ సెట్టింగ్లు"</string>
<string name="phone_accounts" msgid="1216879437523774604">"కాల్ చేయగల ఖాతాలు"</string>
- <string name="phone_accounts_make_calls_with" msgid="16747814788918145">"దీనితో కాల్స్ చేయి"</string>
- <string name="phone_accounts_make_sip_calls_with" msgid="4691221006731847255">"దీనితో SIP కాల్స్ను చేయి"</string>
+ <string name="phone_accounts_make_calls_with" msgid="16747814788918145">"దీనితో కాల్లు చేయి"</string>
+ <string name="phone_accounts_make_sip_calls_with" msgid="4691221006731847255">"దీనితో SIP కాల్లను చేయి"</string>
<string name="phone_accounts_ask_every_time" msgid="6192347582666047168">"ముందుగానే అడుగు"</string>
<string name="phone_accounts_default_account_label" msgid="5107598881335931101">"నెట్వర్క్ ఏదీ అందుబాటులో లేదు"</string>
<string name="phone_accounts_settings_header" msgid="6296501692964706536">"సెట్టింగ్లు"</string>
@@ -74,15 +74,15 @@
<string name="phone_accounts_add_sip_account" msgid="1437634802033309305">"SIP ఖాతాను జోడించు"</string>
<string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"ఖాతా సెట్టింగ్లను కాన్ఫిగర్ చేయి"</string>
<string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"అన్ని కాలింగ్ ఖాతాలు"</string>
- <string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"ఏ ఖాతాల నుండి కాల్స్ చేయవచ్చనే దాన్ని ఎంచుకోండి"</string>
+ <string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"ఏ ఖాతాల నుండి కాల్లు చేయవచ్చనే దాన్ని ఎంచుకోండి"</string>
<string name="wifi_calling" msgid="3650509202851355742">"Wi-Fi కాలింగ్"</string>
<string name="connection_service_default_label" msgid="7332739049855715584">"అంతర్నిర్మిత కనెక్షన్ సేవ"</string>
<string name="voicemail" msgid="7697769412804195032">"వాయిస్ మెయిల్"</string>
<string name="voicemail_settings_with_label" msgid="4228431668214894138">"వాయిస్ మెయిల్ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_abbreviated" msgid="7746778673131551185">"VM:"</string>
- <string name="make_and_receive_calls" msgid="4868913166494621109">"కాల్స్ను చేయండి & స్వీకరించండి"</string>
+ <string name="make_and_receive_calls" msgid="4868913166494621109">"కాల్లను చేయండి & స్వీకరించండి"</string>
<string name="smart_forwarding_settings_menu" msgid="8850429887958938540">"స్మార్ట్ ఫార్వర్డ్ను ప్రారంభించు"</string>
- <string name="smart_forwarding_settings_menu_summary" msgid="5096947726032885325">"ఒక నంబర్ను చేరుకోలేకపోయినప్పుడు, మీ ఇతర నంబర్లకు కాల్స్ను ఎల్లప్పుడూ ఫార్వర్డ్ చేయబడతాయి."</string>
+ <string name="smart_forwarding_settings_menu_summary" msgid="5096947726032885325">"ఒక నంబర్ను చేరుకోలేకపోయినప్పుడు, మీ ఇతర నంబర్లకు కాల్లను ఎల్లప్పుడూ ఫార్వర్డ్ చేయబడతాయి."</string>
<string name="voicemail_notifications_preference_title" msgid="7829238858063382977">"నోటిఫికేషన్లు"</string>
<string name="cell_broadcast_settings" msgid="8135324242541809924">"అత్యవసర ప్రసారాలు"</string>
<string name="call_settings" msgid="3677282690157603818">"కాల్ సెట్టింగ్లు"</string>
@@ -96,17 +96,17 @@
<string name="sum_loading_settings" msgid="434063780286688775">"సెట్టింగ్లను లోడ్ చేస్తోంది…"</string>
<string name="sum_hide_caller_id" msgid="131100328602371933">"అవుట్గోయింగ్ కాల్స్లో నంబర్ దాచబడుతుంది"</string>
<string name="sum_show_caller_id" msgid="3571854755324664591">"అవుట్గోయింగ్ కాల్స్లో నంబర్ ప్రదర్శించబడుతుంది"</string>
- <string name="sum_default_caller_id" msgid="1767070797135682959">"అవుట్గోయింగ్ కాల్స్లో నా నంబర్ను ప్రదర్శించడానికి ఆటోమేటిక్ ఆపరేటర్ సెట్టింగ్లను ఉపయోగించు"</string>
+ <string name="sum_default_caller_id" msgid="1767070797135682959">"అవుట్గోయింగ్ కాల్స్లో నా నంబర్ను ప్రదర్శించడానికి డిఫాల్ట్ ఆపరేటర్ సెట్టింగ్లను ఉపయోగించు"</string>
<string name="labelCW" msgid="8449327023861428622">"కాల్ నిరీక్షణ"</string>
- <string name="sum_cw_enabled" msgid="3977308526187139996">"కాల్ సమయంలో, ఇన్కమింగ్ కాల్స్ల గురించి నాకు తెలియజేయి"</string>
- <string name="sum_cw_disabled" msgid="3658094589461768637">"కాల్ సమయంలో, ఇన్కమింగ్ కాల్స్ల గురించి నాకు తెలియజేయి"</string>
+ <string name="sum_cw_enabled" msgid="3977308526187139996">"కాల్ సమయంలో, ఇన్కమింగ్ కాల్ల గురించి నాకు తెలియజేయి"</string>
+ <string name="sum_cw_disabled" msgid="3658094589461768637">"కాల్ సమయంలో, ఇన్కమింగ్ కాల్ల గురించి నాకు తెలియజేయి"</string>
<string name="call_forwarding_settings" msgid="8937130467468257671">"కాల్ ఫార్వర్డింగ్ సెట్టింగ్లు"</string>
<string name="call_forwarding_settings_with_label" msgid="2345432813399564272">"కాల్ ఫార్వార్డింగ్ సెట్టింగ్లు (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="labelCF" msgid="3578719437928476078">"కాల్ ఫార్వార్డింగ్"</string>
<string name="labelCFU" msgid="8870170873036279706">"ఎల్లప్పుడూ ఫార్వర్డ్ చేయి"</string>
<string name="messageCFU" msgid="1361806450979589744">"ఎల్లప్పుడూ ఈ నంబర్ను ఉపయోగించు"</string>
- <string name="sum_cfu_enabled_indicator" msgid="9030139213402432776">"అన్ని కాల్స్ను ఫార్వార్డ్ చేస్తోంది"</string>
- <string name="sum_cfu_enabled" msgid="5806923046528144526">"అన్ని కాల్స్ను <xliff:g id="PHONENUMBER">{0}</xliff:g>కి ఫార్వార్డ్ చేస్తోంది"</string>
+ <string name="sum_cfu_enabled_indicator" msgid="9030139213402432776">"అన్ని కాల్లను ఫార్వార్డ్ చేస్తోంది"</string>
+ <string name="sum_cfu_enabled" msgid="5806923046528144526">"అన్ని కాల్లను <xliff:g id="PHONENUMBER">{0}</xliff:g>కి ఫార్వార్డ్ చేస్తోంది"</string>
<string name="sum_cfu_enabled_no_number" msgid="7287752761743377930">"నంబర్ అందుబాటులో లేదు"</string>
<string name="sum_cfu_disabled" msgid="5010617134210809853">"ఆఫ్లో ఉంది"</string>
<string name="labelCFB" msgid="615265213360512768">"బిజీగా ఉన్నప్పుడు"</string>
@@ -126,7 +126,7 @@
<string name="disable_cfnrc_forbidden" msgid="775348748084726890">"మీ ఫోన్ను చేరుకోవడం సాధ్యపడనప్పుడు కాల్ ఫార్వర్డింగ్ను నిలిపివేయడానికి మీ క్యారియర్ మద్దతు ఇవ్వదు."</string>
<string name="registration_cf_forbidden" msgid="4386482610771190420">"కాల్ ఫార్వర్డింగ్ను మీ క్యారియర్ సపోర్ట్ చేయదు."</string>
<string name="cdma_call_waiting" msgid="4565070960879673216">"కాల్ వెయిటింగ్ను ఆన్ చేయాలా?"</string>
- <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"మీరు కాల్స్లో ఉండగా, ఇన్కమింగ్ కాల్స్ల గురించి మీకు తెలియజేయబడుతుంది"</string>
+ <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"మీరు కాల్లో ఉండగా, ఇన్కమింగ్ కాల్ల గురించి మీకు తెలియజేయబడుతుంది"</string>
<string name="enable_cdma_cw" msgid="811047045863422232">"ఆన్ చేయి"</string>
<string name="disable_cdma_cw" msgid="7119290446496301734">"రద్దు చేయి"</string>
<string name="cdma_call_waiting_in_ims_on" msgid="6390979414188659218">"IMSలో CDMA కాల్ వెయిటింగ్ ఆన్లో ఉంది"</string>
@@ -140,18 +140,18 @@
<string name="reverting_settings" msgid="7378668837291012205">"సెట్టింగ్లను తిరిగి మారుస్తోంది…"</string>
<string name="response_error" msgid="3904481964024543330">"నెట్వర్క్ నుండి ఊహించని ప్రతిస్పందన."</string>
<string name="exception_error" msgid="330994460090467">"నెట్వర్క్ లేదా SIM కార్డు లోపం."</string>
- <string name="stk_cc_ss_to_dial_error" msgid="5147693491690618704">"SS రిక్వెస్ట్ సాధారణ కాల్కు మార్చబడింది"</string>
- <string name="stk_cc_ss_to_ussd_error" msgid="8330749347425752192">"SS రిక్వెస్ట్ USSD రిక్వెస్ట్కు మార్చబడింది"</string>
- <string name="stk_cc_ss_to_ss_error" msgid="8297155544652134278">"కొత్త SS రిక్వెస్ట్కు మార్చబడింది"</string>
- <string name="stk_cc_ss_to_dial_video_error" msgid="4255261231466032505">"SS రిక్వెస్ట్ వీడియో కాల్కి మార్చబడింది"</string>
- <string name="fdn_check_failure" msgid="1833769746374185247">"మీ ఫోన్ యాప్ యొక్క ఫిక్స్డ్ డయలింగ్ నంబర్ల సెట్టింగ్ ప్రారంభించబడింది. తత్ఫలితంగా, కాల్ సంబంధిత లక్షణాల్లో కొన్ని పని చేయడం లేదు."</string>
+ <string name="stk_cc_ss_to_dial_error" msgid="5147693491690618704">"SS అభ్యర్థన సాధారణ కాల్కు మార్చబడింది"</string>
+ <string name="stk_cc_ss_to_ussd_error" msgid="8330749347425752192">"SS అభ్యర్థన USSD అభ్యర్థనకు మార్చబడింది"</string>
+ <string name="stk_cc_ss_to_ss_error" msgid="8297155544652134278">"కొత్త SS అభ్యర్థనకు మార్చబడింది"</string>
+ <string name="stk_cc_ss_to_dial_video_error" msgid="4255261231466032505">"SS అభ్యర్థన వీడియో కాల్కి మార్చబడింది"</string>
+ <string name="fdn_check_failure" msgid="1833769746374185247">"మీ ఫోన్ అనువర్తనం యొక్క ఫిక్స్డ్ డయలింగ్ నంబర్ల సెట్టింగ్ ప్రారంభించబడింది. తత్ఫలితంగా, కాల్ సంబంధిత లక్షణాల్లో కొన్ని పని చేయడం లేదు."</string>
<string name="radio_off_error" msgid="8321564164914232181">"ఈ సెట్టింగ్లను వీక్షించడానికి ముందు రేడియోను ప్రారంభించండి."</string>
<string name="close_dialog" msgid="1074977476136119408">"సరే"</string>
<string name="enable" msgid="2636552299455477603">"ఆన్ చేయి"</string>
<string name="disable" msgid="1122698860799462116">"ఆఫ్ చేయి"</string>
<string name="change_num" msgid="6982164494063109334">"అప్డేట్ చేయి"</string>
<string-array name="clir_display_values">
- <item msgid="8477364191403806960">"నెట్వర్క్ ఆటోమేటిక్"</item>
+ <item msgid="8477364191403806960">"నెట్వర్క్ డిఫాల్ట్"</item>
<item msgid="6813323051965618926">"నంబర్ను దాచు"</item>
<item msgid="9150034130629852635">"నంబర్ను చూపు"</item>
</string-array>
@@ -181,11 +181,11 @@
<string name="not_allowed" msgid="8541221928746104798">"మీ SIM కార్డు ఈ నెట్వర్క్కు కనెక్షన్ను అనుమతించదు."</string>
<string name="connect_later" msgid="1950138106010005425">"ప్రస్తుతం ఈ నెట్వర్క్కు కనెక్ట్ చేయడం సాధ్యపడదు. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
<string name="registration_done" msgid="5337407023566953292">"నెట్వర్క్లో నమోదు అయింది."</string>
- <string name="already_auto" msgid="8607068290733079336">"ఇప్పటికే ఆటోమేటిక్ ఎంపికలో ఉంది."</string>
+ <string name="already_auto" msgid="8607068290733079336">"ఇప్పటికే స్వయంచాలక ఎంపికలో ఉంది."</string>
<string name="select_automatically" msgid="779750291257872651">"నెట్వర్క్ను ఆటోమేటిక్గా ఎంచుకో"</string>
<string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"%1$sకు కనెక్ట్ చేసినప్పుడు అందుబాటులో లేదు"</string>
<string name="network_select_title" msgid="4117305053881611988">"నెట్వర్క్"</string>
- <string name="register_automatically" msgid="3907580547590554834">"ఆటోమేటిక్ నమోదు…"</string>
+ <string name="register_automatically" msgid="3907580547590554834">"స్వయంచాలక నమోదు…"</string>
<string name="preferred_network_mode_title" msgid="5253395265169539830">"ప్రాధాన్య నెట్వర్క్ రకం"</string>
<string name="preferred_network_mode_summary" msgid="3787989000044330064">"నెట్వర్క్ ఆపరేటింగ్ మోడ్ను మార్చండి"</string>
<string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"ప్రాధాన్య నెట్వర్క్ రకం"</string>
@@ -292,8 +292,8 @@
<string name="roaming_check_price_warning" msgid="8212484083990570215">"ధరల కోసం మీ నెట్వర్క్ ప్రదాతను అడగండి."</string>
<string name="roaming_alert_title" msgid="5689615818220960940">"డేటా రోమింగ్ను అనుమతించాలా?"</string>
<string name="limited_sim_function_notification_title" msgid="612715399099846281">"SIM పనితీరు పరిమితంగా ఉంది"</string>
- <string name="limited_sim_function_with_phone_num_notification_message" msgid="5928988883403677610">"<xliff:g id="PHONE_NUMBER">%2$s</xliff:g> ఉపయోగిస్తున్నప్పుడు <xliff:g id="CARRIER_NAME">%1$s</xliff:g> కాల్స్ మరియు డేటా సేవలు బ్లాక్ చేయబడవచ్చు."</string>
- <string name="limited_sim_function_notification_message" msgid="5338638075496721160">"వేరొక SIMను ఉపయోగిస్తున్నప్పుడు <xliff:g id="CARRIER_NAME">%1$s</xliff:g> కాల్స్ మరియు డేటా సేవలు బ్లాక్ చేయబడవచ్చు."</string>
+ <string name="limited_sim_function_with_phone_num_notification_message" msgid="5928988883403677610">"<xliff:g id="PHONE_NUMBER">%2$s</xliff:g> ఉపయోగిస్తున్నప్పుడు <xliff:g id="CARRIER_NAME">%1$s</xliff:g> కాల్లు మరియు డేటా సేవలు బ్లాక్ చేయబడవచ్చు."</string>
+ <string name="limited_sim_function_notification_message" msgid="5338638075496721160">"వేరొక SIMను ఉపయోగిస్తున్నప్పుడు <xliff:g id="CARRIER_NAME">%1$s</xliff:g> కాల్లు మరియు డేటా సేవలు బ్లాక్ చేయబడవచ్చు."</string>
<string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"తీసివేయబడిన SIP ఖాతాలు కనుగొనబడ్డాయి, తీసివేయబడ్డాయి"</string>
<string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"SIP కాలింగ్కు ఇకపై Android ప్లాట్ఫామ్లో సపోర్ట్ ఉండదు.\nఇప్పటికే ఉన్న మీ SIP ఖాతాలు<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g> తీసివేయబడ్డాయి.\nదయచేసి మీ ఆటోమేటిక్ కాలింగ్ ఖాతా సెట్టింగ్ను ధృవీకరించండి."</string>
<string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"సెట్టింగ్లకు వెళ్లు"</string>
@@ -339,7 +339,7 @@
<string name="maintenance_enable" msgid="2646784483222342290">"నిర్వహణ ప్రారంభించబడింది"</string>
<string name="maintenance_disable" msgid="2121032601497725602">"నిర్వహణ నిలిపివేయబడింది"</string>
<string name="general_news_settings" msgid="2670499575962080411">"సాధారణ వార్తలు"</string>
- <string name="bf_news_settings" msgid="8571709425370794221">"బిజినెస్ మరియు ఆర్థిక వార్తలు"</string>
+ <string name="bf_news_settings" msgid="8571709425370794221">"వ్యాపార మరియు ఆర్థిక వార్తలు"</string>
<string name="sports_news_settings" msgid="2684364556989168438">"క్రీడల వార్తలు"</string>
<string name="entertainment_news_settings" msgid="4228527702346305543">"వినోద సంబంధ వార్తలు"</string>
<string name="enable_disable_local" msgid="7654175079979415572">"స్థానికం"</string>
@@ -378,9 +378,9 @@
<string name="enable_disable_local_weather" msgid="7734933941872511543">"స్థానిక వాతావరణం"</string>
<string name="local_weather_enable" msgid="2143929735295254729">"స్థానిక వాతావరణం ప్రారంభించబడింది"</string>
<string name="local_weather_disable" msgid="4209936355998349647">"స్థానిక వాతావరణం నిలిపివేయబడింది"</string>
- <string name="enable_disable_atr" msgid="821714821057385390">"ప్రాంతపు ట్రాఫిక్ రిపోర్ట్లు"</string>
- <string name="atr_enable" msgid="1799097759998768186">"ప్రాంతపు ట్రాఫిక్ రిపోర్ట్లు ప్రారంభించబడ్డాయి"</string>
- <string name="atr_disable" msgid="6456758173289065766">"ప్రాంతపు ట్రాఫిక్ రిపోర్ట్లు నిలిపివేయబడ్డాయి"</string>
+ <string name="enable_disable_atr" msgid="821714821057385390">"ప్రాంతపు ట్రాఫిక్ నివేదికలు"</string>
+ <string name="atr_enable" msgid="1799097759998768186">"ప్రాంతపు ట్రాఫిక్ నివేదికలు ప్రారంభించబడ్డాయి"</string>
+ <string name="atr_disable" msgid="6456758173289065766">"ప్రాంతపు ట్రాఫిక్ నివేదికలు నిలిపివేయబడ్డాయి"</string>
<string name="enable_disable_lafs" msgid="7448060358300805661">"స్థానిక విమానాశ్రయ విమాన షెడ్యూల్లు"</string>
<string name="lafs_enable" msgid="3125783406052655690">"స్థానిక విమానాశ్రయ విమాన షెడ్యూల్లు ప్రారంభించబడ్డాయి"</string>
<string name="lafs_disable" msgid="7326815066813851447">"స్థానిక విమానాశ్రయ విమాన షెడ్యూల్లు నిలిపివేయబడ్డాయి"</string>
@@ -393,9 +393,9 @@
<string name="enable_disable_retail_directory" msgid="9095153426757081972">"రీటైల్ డైరెక్టరీ"</string>
<string name="retail_directory_enable" msgid="2532176568755452171">"రీటైల్ డైరెక్టరీ ప్రారంభించబడింది"</string>
<string name="retail_directory_disable" msgid="7242451210736299193">"రీటైల్ డైరెక్టరీ నిలిపివేయబడింది"</string>
- <string name="enable_disable_advertisements" msgid="8704125663718797151">"అడ్వర్టయిజ్మెంట్లు"</string>
- <string name="advertisements_enable" msgid="8651409664217899145">"అడ్వర్టయిజ్మెంట్లు ఎనేబుల్ చేయబడ్డాయి"</string>
- <string name="advertisements_disable" msgid="2999957360508271492">"అడ్వర్టయిజ్మెంట్లు డిజేబుల్ చేయబడ్డాయి"</string>
+ <string name="enable_disable_advertisements" msgid="8704125663718797151">"వ్యాపార ప్రకటనలు"</string>
+ <string name="advertisements_enable" msgid="8651409664217899145">"వ్యాపార ప్రకటనలు ప్రారంభించబడ్డాయి"</string>
+ <string name="advertisements_disable" msgid="2999957360508271492">"వ్యాపార ప్రకటనలు నిలిపివేయబడ్డాయి"</string>
<string name="enable_disable_stock_quotes" msgid="631498357725951825">"స్టాక్ కోట్లు"</string>
<string name="stock_quotes_enable" msgid="5104318195579771947">"స్టాక్ కోట్లు ప్రారంభించబడ్డాయి"</string>
<string name="stock_quotes_disable" msgid="3126423481704498278">"స్టాక్ కోట్లు నిలిపివేయబడ్డాయి"</string>
@@ -438,8 +438,8 @@
<string name="carrier_settings_title" msgid="6292869148169850220">"క్యారియర్ సెట్టింగ్లు"</string>
<string name="fdn" msgid="2545904344666098749">"ఫిక్సెడ్ డయలింగ్ నంబర్లు"</string>
<string name="fdn_with_label" msgid="6412087553365709494">"ఫిక్సెడ్ డయలింగ్ నంబర్లు (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
- <string name="manage_fdn_list" msgid="3341716430375195441">"FDN లిస్ట్"</string>
- <string name="fdn_list_with_label" msgid="1409655283510382556">"FDN లిస్ట్ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+ <string name="manage_fdn_list" msgid="3341716430375195441">"FDN జాబితా"</string>
+ <string name="fdn_list_with_label" msgid="1409655283510382556">"FDN జాబితా (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="fdn_activation" msgid="2178637004710435895">"FDN సక్రియం"</string>
<string name="fdn_enabled" msgid="7017355494808056447">"ఫిక్సెడ్ డయలింగ్ నంబర్లు ప్రారంభించబడ్డాయి"</string>
<string name="fdn_disabled" msgid="6696468878037736600">"ఫిక్సెడ్ డయలింగ్ నంబర్లు నిలిపివేయబడ్డాయి"</string>
@@ -450,7 +450,7 @@
<string name="disable_fdn_ok" msgid="3745475926874838676">"FDNని ప్రారంభించు"</string>
<string name="sum_fdn" msgid="6152246141642323582">"ఫిక్స్డ్ డయలింగ్ నంబర్లను నిర్వహించండి"</string>
<string name="sum_fdn_change_pin" msgid="3510994280557335727">"FDN యాక్సెస్ కోసం పిన్ను మార్చండి"</string>
- <string name="sum_fdn_manage_list" msgid="3311397063233992907">"ఫోన్ నంబర్ లిస్ట్ను నిర్వహించండి"</string>
+ <string name="sum_fdn_manage_list" msgid="3311397063233992907">"ఫోన్ నంబర్ జాబితాను నిర్వహించండి"</string>
<string name="voice_privacy" msgid="7346935172372181951">"వాయిస్ గోప్యత"</string>
<string name="voice_privacy_summary" msgid="3556460926168473346">"మెరుగైన గోప్యతా మోడ్ను ప్రారంభించండి"</string>
<string name="tty_mode_option_title" msgid="3843817710032641703">"TTY మోడ్"</string>
@@ -458,10 +458,10 @@
<string name="auto_retry_mode_title" msgid="2985801935424422340">"స్వీయ-పునఃప్రయత్నం"</string>
<string name="auto_retry_mode_summary" msgid="2863919925349511402">"స్వీయ-పునఃప్రయత్నం మోడ్ను ప్రారంభించండి"</string>
<string name="tty_mode_not_allowed_video_call" msgid="6551976083652752815">"వీడియో కాల్ సమయంలో TTY మోడ్ మార్పు అనుమతించబడదు"</string>
- <string name="menu_add" msgid="5616487894975773141">"కాంటాక్ట్ను జోడించండి"</string>
- <string name="menu_edit" msgid="3593856941552460706">"కాంటాక్ట్ను ఎడిట్ చేయండి"</string>
- <string name="menu_delete" msgid="6326861853830546488">"కాంటాక్ట్ను తొలగించండి"</string>
- <string name="menu_dial" msgid="4178537318419450012">"కాంటాక్ట్కు డయల్ చేయండి"</string>
+ <string name="menu_add" msgid="5616487894975773141">"పరిచయాన్ని జోడించు"</string>
+ <string name="menu_edit" msgid="3593856941552460706">"పరిచయాన్ని సవరించు"</string>
+ <string name="menu_delete" msgid="6326861853830546488">"పరిచయాన్ని తొలగించు"</string>
+ <string name="menu_dial" msgid="4178537318419450012">"పరిచయానికి డయల్ చేయి"</string>
<string name="get_pin2" msgid="4221654606863196332">"PIN2ని టైప్ చేయండి"</string>
<string name="name" msgid="1347432469852527784">"పేరు"</string>
<string name="number" msgid="1564053487748491000">"నంబర్"</string>
@@ -469,8 +469,8 @@
<string name="add_fdn_contact" msgid="1169713422306640887">"ఫిక్స్డ్ డయలింగ్ నంబర్ను జోడించండి"</string>
<string name="adding_fdn_contact" msgid="3112531600824361259">"ఫిక్స్డ్ డయలింగ్ నంబర్ను జోడిస్తోంది..."</string>
<string name="fdn_contact_added" msgid="2840016151693394596">"ఫిక్స్డ్ డయలింగ్ నంబర్ జోడించబడింది."</string>
- <string name="edit_fdn_contact" msgid="6030829994819587408">"ఫిక్స్డ్ డయలింగ్ నంబర్ను ఎడిట్ చేయండి"</string>
- <string name="updating_fdn_contact" msgid="6989341376868227150">"ఫిక్స్డ్ డయలింగ్ నంబర్ను అప్డేట్ చేస్తోంది..."</string>
+ <string name="edit_fdn_contact" msgid="6030829994819587408">"ఫిక్స్డ్ డయలింగ్ నంబర్ను సవరించండి"</string>
+ <string name="updating_fdn_contact" msgid="6989341376868227150">"ఫిక్స్డ్ డయలింగ్ నంబర్ను నవీకరిస్తోంది..."</string>
<string name="fdn_contact_updated" msgid="6876330243323118937">"ఫిక్స్డ్ డయలింగ్ నంబర్ నవీకరించబడింది."</string>
<string name="delete_fdn_contact" msgid="7027405651994507077">"ఫిక్స్డ్ డయలింగ్ నంబర్ను తొలగించండి"</string>
<string name="deleting_fdn_contact" msgid="6872320570844460428">"ఫిక్స్డ్ డయలింగ్ నంబర్ను తొలగిస్తోంది..."</string>
@@ -480,9 +480,9 @@
<string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"FDN నవీకరించబడలేదు. PIN2 చెల్లదు లేదా ఫోన్ నంబర్ తిరస్కరించబడింది."</string>
<string name="fdn_failed" msgid="216592346853420250">"FDN చర్య విఫలమైంది."</string>
<string name="simContacts_emptyLoading" msgid="4989040293858675483">"SIM కార్డు నుండి చదువుతోంది…"</string>
- <string name="simContacts_empty" msgid="1135632055473689521">"మీ SIM కార్డులో కాంటాక్ట్లు ఏవీ లేవు."</string>
- <string name="simContacts_title" msgid="2714029230160136647">"దిగుమతి చేసుకోవాలనుకున్న కాంటాక్ట్లను ఎంచుకోండి"</string>
- <string name="simContacts_airplaneMode" msgid="4654884030631503808">"SIM కార్డ్లోని కాంటాక్ట్లను దిగుమతి చేయడానికి ఎయిర్ప్లైన్ మోడ్ను ఆఫ్ చేయండి."</string>
+ <string name="simContacts_empty" msgid="1135632055473689521">"మీ SIM కార్డులో పరిచయాలు ఏవీ లేవు."</string>
+ <string name="simContacts_title" msgid="2714029230160136647">"దిగుమతికి పరిచయాల ఎంపిక"</string>
+ <string name="simContacts_airplaneMode" msgid="4654884030631503808">"SIM కార్డ్లోని పరిచయాలను దిగుమతి చేయడానికి ఎయిర్ప్లైన్ మోడ్ను ఆఫ్ చేయండి."</string>
<string name="enable_pin" msgid="967674051730845376">"SIM PINను ప్రారంభించండి/నిలిపివేయండి"</string>
<string name="change_pin" msgid="3657869530942905790">"SIM PINను మార్చండి"</string>
<string name="enter_pin_text" msgid="3182311451978663356">"SIM పిన్:"</string>
@@ -537,23 +537,22 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"కాల్ చేయడానికి మొబైల్ నెట్వర్క్ను ఆన్ చేయండి, అలాగే ఎయిర్ప్లైన్ మోడ్ లేదా బ్యాటరీ సేవర్ మోడ్ ఆన్లో ఉంటే ఆఫ్ చేయండి."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"కాల్ చేయడానికి ఎయిర్ప్లైన్ మోడ్ను ఆఫ్ చేయండి."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"కాల్ చేయడానికి ఎయిర్ప్లైన్ మోడ్ను ఆఫ్ చేయండి లేదా వైర్లెస్ నెట్వర్క్కు కనెక్ట్ చేయండి."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ఫోన్ చాలా వేడిగా ఉంది"</b>\n\n"ఈ కాల్ను పూర్తి చేయడం సాధ్యపడదు. మీ ఫోన్ చల్లబడినప్పుడు మళ్లీ ట్రై చేయండి.\n\nమీరు ఇప్పటికీ ఎమర్జెన్సీ కాల్స్ చేయవచ్చు."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"సాధారణ కాల్ చేయడానికి అత్యవసర కాల్బ్యాక్ మోడ్ నుండి నిష్క్రమించండి."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"నెట్వర్క్లో నమోదు కాలేదు."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"మొబైల్ నెట్వర్క్ అందుబాటులో లేదు."</string>
<string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"మొబైల్ నెట్వర్క్ అందుబాటులో లేదు. కాల్ చేయడానికి వైర్లెస్ నెట్వర్క్కు కనెక్ట్ చేయండి."</string>
<string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"కాల్ చేయడానికి, చెల్లుబాటు అయ్యే నంబర్ను నమోదు చేయండి."</string>
<string name="incall_error_call_failed" msgid="393508653582682539">"కాల్ విఫలమైంది."</string>
- <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"ఈ సమయంలో కాల్ జోడించబడదు. మీరు మెసేజ్ను పంపడం ద్వారా సంప్రదించవచ్చు."</string>
+ <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"ఈ సమయంలో కాల్ జోడించబడదు. మీరు సందేశాన్ని పంపడం ద్వారా సంప్రదించవచ్చు."</string>
<string name="incall_error_supp_service_unknown" msgid="8751177117194592623">"సేవకు మద్దతు లేదు"</string>
- <string name="incall_error_supp_service_switch" msgid="5272822448189448479">"కాల్స్ను మార్చలేరు."</string>
+ <string name="incall_error_supp_service_switch" msgid="5272822448189448479">"కాల్లను మార్చలేరు."</string>
<string name="incall_error_supp_service_resume" msgid="1276861499306817035">"కాల్ను పునఃప్రారంభించలేరు."</string>
<string name="incall_error_supp_service_separate" msgid="8932660028965274353">"కాల్ను వేరు చేయలేరు."</string>
<string name="incall_error_supp_service_transfer" msgid="8211925891867334323">"బదిలీ చేయలేరు."</string>
- <string name="incall_error_supp_service_conference" msgid="27578082433544702">"కాల్స్ను విలీనం చేయడం సాధ్యపడలేదు."</string>
+ <string name="incall_error_supp_service_conference" msgid="27578082433544702">"కాల్లను విలీనం చేయడం సాధ్యపడలేదు."</string>
<string name="incall_error_supp_service_reject" msgid="3044363092441655912">"కాల్ను తిరస్కరించలేరు."</string>
<string name="incall_error_supp_service_hangup" msgid="836524952243836735">"కాల్(ల)ను విడిచిపెట్టలేరు."</string>
- <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"కాల్స్ను హోల్డ్ చేయలేరు."</string>
+ <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"కాల్లను హోల్డ్ చేయలేరు."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"కాల్ చేయడానికి వైర్లెస్ నెట్వర్క్కు కనెక్ట్ చేయండి."</string>
<string name="incall_error_promote_wfc" msgid="9164896813931363415">"కాల్ను చేయడానికి Wi-Fi కాలింగ్ను ప్రారంభించండి."</string>
<string name="emergency_information_hint" msgid="9208897544917793012">"అత్యవసర సమాచారం"</string>
@@ -580,23 +579,23 @@
<string name="onscreenShowDialpadText" msgid="658465753816164079">"డయల్ప్యాడ్"</string>
<string name="onscreenMuteText" msgid="5470306116733843621">"మ్యూట్ చేయి"</string>
<string name="onscreenAddCallText" msgid="9075675082903611677">"కాల్ను జోడించు"</string>
- <string name="onscreenMergeCallsText" msgid="3692389519611225407">"కాల్స్ను విలీనం చేయి"</string>
+ <string name="onscreenMergeCallsText" msgid="3692389519611225407">"కాల్లను విలీనం చేయి"</string>
<string name="onscreenSwapCallsText" msgid="2682542150803377991">"స్వాప్ చేయి"</string>
- <string name="onscreenManageCallsText" msgid="1162047856081836469">"కాల్స్ను నిర్వహించు"</string>
+ <string name="onscreenManageCallsText" msgid="1162047856081836469">"కాల్లను నిర్వహించు"</string>
<string name="onscreenManageConferenceText" msgid="4700574060601755137">"కాన్ఫరెన్స్ను నిర్వహించు"</string>
<string name="onscreenAudioText" msgid="7224226735052019986">"ఆడియో"</string>
<string name="onscreenVideoCallText" msgid="1743992456126258698">"వీడియో కాల్"</string>
<string name="importSimEntry" msgid="3892354284082689894">"దిగుమతి చేయి"</string>
<string name="importAllSimEntries" msgid="2628391505643564007">"అన్నింటినీ దిగుమతి చేయి"</string>
- <string name="importingSimContacts" msgid="4995457122107888932">"SIM కాంటాక్ట్లను దిగుమతి చేస్తోంది"</string>
- <string name="importToFDNfromContacts" msgid="5068664870738407341">"కాంటాక్ట్ల నుండి దిగుమతి చేయి"</string>
- <string name="singleContactImportedMsg" msgid="3619804066300998934">"కాంటాక్ట్ దిగుమతి చేయబడింది"</string>
- <string name="failedToImportSingleContactMsg" msgid="228095510489830266">"కాంటాక్ట్ను దిగుమతి చేయడంలో విఫలమైంది"</string>
+ <string name="importingSimContacts" msgid="4995457122107888932">"SIM పరిచయాలను దిగుమతి చేస్తోంది"</string>
+ <string name="importToFDNfromContacts" msgid="5068664870738407341">"పరిచయాల నుండి దిగుమతి చేయి"</string>
+ <string name="singleContactImportedMsg" msgid="3619804066300998934">"పరిచయం దిగుమతి చేయబడింది"</string>
+ <string name="failedToImportSingleContactMsg" msgid="228095510489830266">"పరిచయాన్ని దిగుమతి చేయడంలో విఫలమైంది"</string>
<string name="hac_mode_title" msgid="4127986689621125468">"వినికిడి సహాయక సాధనాలు"</string>
<string name="hac_mode_summary" msgid="7774989500136009881">"వినికిడి సహాయక సాధనం అనుకూలతను ప్రారంభించండి"</string>
<string name="rtt_mode_title" msgid="3075948111362818043">"రియల్-టైమ్ టెక్స్ట్ (RTT) కాల్"</string>
- <string name="rtt_mode_summary" msgid="8631541375609989562">"వాయిస్ కాల్లో మెసేజ్లు పంపడానికి అనుమతించండి"</string>
- <string name="rtt_mode_more_information" msgid="587500128658756318">"బధిరులు, వినికిడి సమస్యలు ఉన్న వారు, మాట్లాడటంలో సమస్యలు ఉన్న వారు లేదా కేవలం వాయిస్తో అర్థం చేసుకోలేని కాలర్లకు 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="rtt_mode_summary" msgid="8631541375609989562">"వాయిస్ కాల్లో సందేశాలు పంపడానికి అనుమతించండి"</string>
+ <string name="rtt_mode_more_information" msgid="587500128658756318">"బధిరులు, వినికిడి సమస్యలు ఉన్న వారు, మాట్లాడటంలో సమస్యలు ఉన్న వారు లేదా కేవలం వాయిస్తో అర్థం చేసుకోలేని కాలర్లకు 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="5268008247378355389">"గమనిక: రోమింగ్లో ఉండగా RTTఅందుబాటులో ఉండదు"</string>
<string-array name="tty_mode_entries">
<item msgid="3238070884803849303">"TTY ఆఫ్లో ఉంది"</item>
@@ -610,16 +609,16 @@
<item msgid="2271798469250155310">"సాధారణం"</item>
<item msgid="6044210222666533564">"ఎక్కువ నిడివి"</item>
</string-array>
- <string name="network_info_message" msgid="7599413947016532355">"నెట్వర్క్ మెసేజ్"</string>
- <string name="network_error_message" msgid="4271579424089326618">"లోప మెసేజ్"</string>
+ <string name="network_info_message" msgid="7599413947016532355">"నెట్వర్క్ సందేశం"</string>
+ <string name="network_error_message" msgid="4271579424089326618">"లోప సందేశం"</string>
<string name="ota_title_activate" msgid="4049645324841263423">"మీ ఫోన్ను సక్రియం చేయండి"</string>
<string name="ota_touch_activate" msgid="838764494319694754">"మీ ఫోన్ సేవను సక్రియం చేయడానికి ప్రత్యేక కాల్ చేయాల్సి ఉంటుంది. \n\n“సక్రియం చేయి” నొక్కిన తర్వాత, మీ ఫోన్ను సక్రియం చేయడానికి అందించబడే సూచనలను వినండి."</string>
<string name="ota_hfa_activation_title" msgid="3300556778212729671">"సక్రియం చేస్తోంది..."</string>
<string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"ఫోన్ మీ మొబైల్ డేటా సేవను సక్రియం చేస్తోంది.\n\nదీనికి గరిష్టంగా 5 నిమిషాలు పట్టవచ్చు."</string>
<string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"సక్రియం చేయడాన్ని దాటవేయాలా?"</string>
- <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"మీరు సక్రియం చేయడాన్ని దాటవేస్తే, కాల్స్ చేయలేరు లేదా మొబైల్ డేటా నెట్వర్క్లకు కనెక్ట్ చేయలేరు (మీరు Wi-Fi నెట్వర్క్లకు కనెక్ట్ చేయగలిగినప్పటికీ). మీరు మీ ఫోన్ను సక్రియం చేసేవరకు, దాన్ని ప్రారంభించే ప్రతిసారీ సక్రియం చేయమని మిమ్మల్ని అడుగుతుంది."</string>
+ <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"మీరు సక్రియం చేయడాన్ని దాటవేస్తే, కాల్లు చేయలేరు లేదా మొబైల్ డేటా నెట్వర్క్లకు కనెక్ట్ చేయలేరు (మీరు Wi-Fi నెట్వర్క్లకు కనెక్ట్ చేయగలిగినప్పటికీ). మీరు మీ ఫోన్ను సక్రియం చేసేవరకు, దాన్ని ప్రారంభించే ప్రతిసారీ సక్రియం చేయమని మిమ్మల్ని అడుగుతుంది."</string>
<string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"దాటవేయి"</string>
- <string name="ota_activate" msgid="7939695753665438357">"యాక్టివేట్ చేయండి"</string>
+ <string name="ota_activate" msgid="7939695753665438357">"సక్రియం చేయి"</string>
<string name="ota_title_activate_success" msgid="1272135024761004889">"ఫోన్ సక్రియం చేయబడింది."</string>
<string name="ota_title_problem_with_activation" msgid="7019745985413368726">"సక్రియం చేయడంలో సమస్య"</string>
<string name="ota_listen" msgid="2772252405488894280">"సక్రియం చేయడం పూర్తయిందని మీకు వినిపించేవరకు చదివి వినిపించే సూచనలను అనుసరించండి."</string>
@@ -661,10 +660,10 @@
<string name="voicemail_number_not_set" msgid="8831561283386938155">"<సెట్ చేయలేదు>"</string>
<string name="other_settings" msgid="8895088007393598447">"ఇతర కాల్ సెట్టింగ్లు"</string>
<string name="calling_via_template" msgid="1791323450703751750">"<xliff:g id="PROVIDER_NAME">%s</xliff:g>తో కాల్ వెళుతోంది"</string>
- <string name="contactPhoto" msgid="7885089213135154834">"కాంటాక్ట్ ఫోటో"</string>
+ <string name="contactPhoto" msgid="7885089213135154834">"పరిచయ ఫోటో"</string>
<string name="goPrivate" msgid="4645108311382209551">"ప్రైవేట్గా వెళ్లు"</string>
- <string name="selectContact" msgid="1527612842599767382">"కాంటాక్ట్ను ఎంచుకోండి"</string>
- <string name="not_voice_capable" msgid="2819996734252084253">"వాయిస్ కాలింగ్కు సపోర్ట్ లేదు"</string>
+ <string name="selectContact" msgid="1527612842599767382">"పరిచయాన్ని ఎంచుకోండి"</string>
+ <string name="not_voice_capable" msgid="2819996734252084253">"వాయిస్ కాలింగ్కు మద్దతు లేదు"</string>
<string name="description_dial_button" msgid="8614631902795087259">"డయల్ చేయి"</string>
<string name="description_dialpad_button" msgid="7395114120463883623">"డయల్ప్యాడ్ను చూపు"</string>
<string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"అత్యవసర డయల్ప్యాడ్"</string>
@@ -677,24 +676,24 @@
<string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"వీడియో కాలింగ్ను ఆన్ చేయడానికి, మీరు నెట్వర్క్ సెట్టింగ్ల్లో మెరుగుపరిచిన 4G LTE మోడ్ను ప్రారంభించాలి."</string>
<string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"నెట్వర్క్ సెట్టింగ్లు"</string>
<string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"మూసివేయి"</string>
- <string name="sim_label_emergency_calls" msgid="9078241989421522310">"అత్యవసర కాల్స్"</string>
+ <string name="sim_label_emergency_calls" msgid="9078241989421522310">"అత్యవసర కాల్లు"</string>
<string name="sim_description_emergency_calls" msgid="5146872803938897296">"అత్యవసర కాలింగ్ మాత్రమే"</string>
<string name="sim_description_default" msgid="7474671114363724971">"SIM కార్డ్, స్లాట్: <xliff:g id="SLOT_ID">%s</xliff:g>"</string>
<string name="accessibility_settings_activity_title" msgid="7883415189273700298">"యాక్సెస్ సామర్థ్యం"</string>
<string name="status_hint_label_incoming_wifi_call" msgid="2606052595898044071">"వీరి నుండి Wi-Fi కాల్"</string>
<string name="status_hint_label_wifi_call" msgid="942993035689809853">"Wi-Fi కాల్"</string>
<string name="emergency_action_launch_hint" msgid="2762016865340891314">"తెరవడానికి మళ్లీ నొక్కండి"</string>
- <string name="message_decode_error" msgid="1061856591500290887">"మెసేజ్ను డీకోడ్ చేస్తున్నప్పుడు లోపం సంభవించింది."</string>
+ <string name="message_decode_error" msgid="1061856591500290887">"సందేశాన్ని డీకోడ్ చేస్తున్నప్పుడు లోపం సంభవించింది."</string>
<string name="callFailed_cdma_activation" msgid="5392057031552253550">"SIM కార్డ్ మీ సేవను సక్రియం చేసింది మరియు మీ ఫోన్ రోమింగ్ సామర్థ్యాలను నవీకరించింది."</string>
- <string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"చాలా ఎక్కువ కాల్స్ సక్రియంగా ఉన్నాయి. దయచేసి మరొక కొత్త కాల్ చేసే ముందు ఇప్పటికే ఉన్న కాల్స్ను ముగించండి లేదా విలీనం చేయండి."</string>
+ <string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"చాలా ఎక్కువ కాల్లు సక్రియంగా ఉన్నాయి. దయచేసి మరొక కొత్త కాల్ చేసే ముందు ఇప్పటికే ఉన్న కాల్లను ముగించండి లేదా విలీనం చేయండి."</string>
<string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"కనెక్ట్ చేయడం సాధ్యపడలేదు, దయచేసి చెల్లుబాటు అయ్యే SIM కార్డ్ను చొప్పించండి."</string>
<string name="callFailed_wifi_lost" msgid="1788036730589163141">"Wi-Fi కనెక్షన్ పోయింది. కాల్ ముగిసింది."</string>
<string name="dialFailed_low_battery" msgid="6857904237423407056">"తక్కువ బ్యాటరీ కారణంగా మీ వీడియో కాల్ చేయడం సాధ్యపడదు."</string>
<string name="callFailed_low_battery" msgid="4056828320214416182">"తక్కువ బ్యాటరీ కారణంగా వీడియో కాల్ ముగిసింది."</string>
- <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Wi-Fi కాలింగ్ ద్వారా అత్యవసర కాల్స్ ఈ లొకేషన్లో అందుబాటులో లేవు."</string>
- <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"ఈ లొకేషన్లో Wi-Fi కాలింగ్ అందుబాటులో లేదు."</string>
+ <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Wi-Fi కాలింగ్ ద్వారా అత్యవసర కాల్లు ఈ స్థానంలో అందుబాటులో లేవు."</string>
+ <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"ఈ స్థానంలో Wi-Fi కాలింగ్ అందుబాటులో లేదు."</string>
<string name="change_pin_title" msgid="3564254326626797321">"వాయిస్ మెయిల్ PINని మార్చండి"</string>
- <string name="change_pin_continue_label" msgid="5177011752453506371">"కొనసాగించండి"</string>
+ <string name="change_pin_continue_label" msgid="5177011752453506371">"కొనసాగించు"</string>
<string name="change_pin_cancel_label" msgid="2301711566758827936">"రద్దు చేయి"</string>
<string name="change_pin_ok_label" msgid="6861082678817785330">"సరే"</string>
<string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"మీ పాత PINని నిర్ధారించండి"</string>
@@ -776,17 +775,17 @@
<string name="sum_call_barring_enabled" msgid="5184331188926370824">"ఆన్"</string>
<string name="sum_call_barring_disabled" msgid="5699448000600153096">"ఆఫ్"</string>
<string name="call_barring_baoc" msgid="7400892586336429326">"అన్ని అవుట్గోయింగ్"</string>
- <string name="call_barring_baoc_enabled" msgid="3131509193386668182">"అన్ని అవుట్గోయింగ్ కాల్స్ను బ్లాక్ చేయడాన్ని నిలిపివేయాలా?"</string>
- <string name="call_barring_baoc_disabled" msgid="8534224684091141509">"అన్ని అవుట్గోయింగ్ కాల్స్ను బ్లాక్ చేయాలా?"</string>
+ <string name="call_barring_baoc_enabled" msgid="3131509193386668182">"అన్ని అవుట్గోయింగ్ కాల్లను బ్లాక్ చేయడాన్ని నిలిపివేయాలా?"</string>
+ <string name="call_barring_baoc_disabled" msgid="8534224684091141509">"అన్ని అవుట్గోయింగ్ కాల్లను బ్లాక్ చేయాలా?"</string>
<string name="call_barring_baoic" msgid="8668125428666851665">"అవుట్గోయింగ్ అంతర్జాతీయ"</string>
- <string name="call_barring_baoic_enabled" msgid="1203758092657630123">"అవుట్గోయింగ్ అంతర్జాతీయ కాల్స్ను బ్లాక్ చేయడాన్ని నిలిపివేయాలా?"</string>
- <string name="call_barring_baoic_disabled" msgid="5656889339002997449">"అవుట్గోయింగ్ అంతర్జాతీయ కాల్స్ను బ్లాక్ చేయాలా?"</string>
+ <string name="call_barring_baoic_enabled" msgid="1203758092657630123">"అవుట్గోయింగ్ అంతర్జాతీయ కాల్లను బ్లాక్ చేయడాన్ని నిలిపివేయాలా?"</string>
+ <string name="call_barring_baoic_disabled" msgid="5656889339002997449">"అవుట్గోయింగ్ అంతర్జాతీయ కాల్లను బ్లాక్ చేయాలా?"</string>
<string name="call_barring_baoicr" msgid="8566167764432343487">"అవుట్గోయింగ్ అంతర్జాతీయ రోమింగ్"</string>
<string name="call_barring_baoicr_enabled" msgid="1615324165512798478">"అవుట్గోయింగ్ అంతర్జాతీయ రోమింగ్ని బ్లాక్ చేయడాన్ని నిలిపివేయాలా?"</string>
<string name="call_barring_baoicr_disabled" msgid="172010175248142831">"అవుట్గోయింగ్ అంతర్జాతీయ రోమింగ్ని బ్లాక్ చేయాలా?"</string>
<string name="call_barring_baic" msgid="7941393541678658566">"అన్ని ఇన్కమింగ్"</string>
- <string name="call_barring_baic_enabled" msgid="4357332358020337470">"అన్ని ఇన్కమింగ్ కాల్స్ను బ్లాక్ చేయడాన్ని నిలిపివేయాలా?"</string>
- <string name="call_barring_baic_disabled" msgid="2355945245938240958">"అన్ని ఇన్కమింగ్ కాల్స్ను బ్లాక్ చేయాలా?"</string>
+ <string name="call_barring_baic_enabled" msgid="4357332358020337470">"అన్ని ఇన్కమింగ్ కాల్లను బ్లాక్ చేయడాన్ని నిలిపివేయాలా?"</string>
+ <string name="call_barring_baic_disabled" msgid="2355945245938240958">"అన్ని ఇన్కమింగ్ కాల్లను బ్లాక్ చేయాలా?"</string>
<string name="call_barring_baicr" msgid="8712249337313034226">"ఇన్కమింగ్ అంతర్జాతీయ రోమింగ్"</string>
<string name="call_barring_baicr_enabled" msgid="64774270234828175">"ఇన్కమింగ్ అంతర్జాతీయ రోమింగ్ని మొత్తం బ్లాక్ చేయడాన్ని నిలిపివేయాలా?"</string>
<string name="call_barring_baicr_disabled" msgid="3488129262744027262">"ఇన్కమింగ్ అంతర్జాతీయ రోమింగ్ని బ్లాక్ చేయాలా?"</string>
@@ -811,8 +810,8 @@
<string name="supp_service_notification_call_waiting" msgid="4577403881609445324">"కాల్ నిరీక్షణలో ఉంది."</string>
<string name="supp_service_clir_suppression_rejected" msgid="6105737020194776121">"నంబర్ బ్లాకింగ్ తిరస్కరించబడింది."</string>
<string name="supp_service_closed_user_group_call" msgid="2811636666505250689">"దగ్గరి వినియోగదారు సమూహ కాల్."</string>
- <string name="supp_service_incoming_calls_barred" msgid="2034627421274447674">"ఇన్కమింగ్ కాల్స్ నిరోధించబడ్డాయి"</string>
- <string name="supp_service_outgoing_calls_barred" msgid="5205725332394087112">"అవుట్గోయింగ్ కాల్స్ నిరోధించబడ్డాయి."</string>
+ <string name="supp_service_incoming_calls_barred" msgid="2034627421274447674">"ఇన్కమింగ్ కాల్లు నిరోధించబడ్డాయి"</string>
+ <string name="supp_service_outgoing_calls_barred" msgid="5205725332394087112">"అవుట్గోయింగ్ కాల్లు నిరోధించబడ్డాయి."</string>
<string name="supp_service_call_forwarding_active" msgid="7910162960395132464">"కాల్ ఫార్వర్డింగ్ సక్రియంగా ఉంది."</string>
<string name="supp_service_additional_call_forwarded" msgid="8772753260008398632">"అదనపు కాల్ ఫార్వార్డ్ చేయబడింది."</string>
<string name="supp_service_additional_ect_connected" msgid="8525934162945220237">"అభ్యంతరకరమైన కాల్ బదిలీ పూర్తయింది."</string>
@@ -827,7 +826,7 @@
<string name="callFailed_already_dialing" msgid="7250591188960691086">"ఇంకొక అవుట్గోయింగ్ కాల్ ఇప్పటికే చేస్తున్నందున మరో కాల్ చేయడం సాధ్యపడదు."</string>
<string name="callFailed_already_ringing" msgid="2376603543544289303">"మాట్లాడాల్సిన ఇన్కమింగ్ కాల్ వస్తున్నందున బయటికి కాల్ చేయడం సాధ్యపడదు. కొత్త కాల్ చేయడం కంటే ముందుగా ఇన్కమింగ్ కాల్కి జవాబివ్వండి లేదా కాల్ నిరాకరించండి."</string>
<string name="callFailed_calling_disabled" msgid="5010992739401206283">"ro.telephony.disable-call సిస్టమ్ లక్షణాన్ని ఉపయోగించి కాలింగ్ని నిలిపివేసినందున, ఇప్పుడు కాల్ చేయలేరు."</string>
- <string name="callFailed_too_many_calls" msgid="5379426826618582180">"ఇప్పటికే రెండు కాల్స్ జరుగుతున్నందున కాల్ చేయడం సాధ్యపడదు. ఆ కాల్స్లో ఒకదానిని డిస్కనెక్ట్ చేయండి లేదా అవి రెండింటినీ కలిపి ఒక కాన్ఫరెన్స్ కాల్గా మార్చి, తర్వాత కొత్త కాల్ చేయండి."</string>
+ <string name="callFailed_too_many_calls" msgid="5379426826618582180">"ఇప్పటికే రెండు కాల్లు జరుగుతున్నందున కాల్ చేయడం సాధ్యపడదు. ఆ కాల్లలో ఒకదానిని డిస్కనెక్ట్ చేయండి లేదా అవి రెండింటినీ కలిపి ఒక కాన్ఫరెన్స్ కాల్గా మార్చి, తర్వాత కొత్త కాల్ చేయండి."</string>
<string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"<xliff:g id="SUPP_SERVICE">%s</xliff:g>ని ఉపయోగించడానికి, మొబైల్ డేటాను తప్పకుండా ఆన్ చేసారని నిర్ధారించుకోండి. మీరు దీనిని మొబైల్ నెట్వర్క్ సెట్టింగ్లలో మార్చవచ్చు."</string>
<string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"<xliff:g id="SUPP_SERVICE">%s</xliff:g>ని ఉపయోగించడానికి, మొబైల్ డేటా మరియు డేటా రోమింగ్ని తప్పకుండా ఆన్ చేసారని నిర్ధారించుకోండి. మీరు వీటిని మొబైల్ నెట్వర్క్ సెట్టింగ్లలో మార్చవచ్చు."</string>
<string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>ని ఉపయోగించడానికి, SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g> కోసం మొబైల్ డేటాను తప్పకుండా ఆన్ చేసారని నిర్ధారించుకోండి. మీరు దీనిని మొబైల్ నెట్వర్క్ సెట్టింగ్లలో మార్చవచ్చు."</string>
@@ -846,11 +845,11 @@
<string name="dsds_dialog_confirm" msgid="9032004888134129885">"పునఃప్రారంభించు"</string>
<string name="dsds_dialog_cancel" msgid="3245958947099586655">"రద్దు చేయండి"</string>
<string name="radio_info_radio_power" msgid="8805595022160471587">"మొబైల్ రేడియో పవర్"</string>
- <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"SIM అడ్రస్ పుస్తకాన్ని చూడండి"</string>
+ <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"SIM చిరునామా పుస్తకాన్ని చూడండి"</string>
<string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"ఫిక్స్డ్ డయలింగ్ నంబర్లను చూడండి"</string>
- <string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"సర్వీస్ డయలింగ్ నంబర్లను చూడండి"</string>
- <string name="radioInfo_menu_getIMS" msgid="1950869267853198232">"IMS సేవ స్టేటస్"</string>
- <string name="radio_info_ims_reg_status_title" msgid="6875885401313992007">"IMS స్టేటస్"</string>
+ <string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"సర్వీస్ డయలింగ్ నంబర్లను వీక్షించండి"</string>
+ <string name="radioInfo_menu_getIMS" msgid="1950869267853198232">"IMS సేవ స్థితి"</string>
+ <string name="radio_info_ims_reg_status_title" msgid="6875885401313992007">"IMS స్థితి"</string>
<string name="radio_info_ims_reg_status_registered" msgid="7095182114078864326">"నమోదు చేయబడింది"</string>
<string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"నమోదు కాలేదు"</string>
<string name="radio_info_ims_feature_status_available" msgid="6493200914756969292">"అందుబాటులో ఉన్నారు"</string>
@@ -858,7 +857,7 @@
<string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS నమోదు: <xliff:g id="STATUS">%1$s</xliff:g>\nవాయిస్ ఓవర్ LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nవాయిస్ ఓవర్ WiFi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nవీడియో కాలింగ్: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ఇంటర్ఫేస్: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="45753418231446400">"సేవ అందుబాటులో ఉంది"</string>
<string name="radioInfo_service_out" msgid="287972405416142312">"సేవ అందుబాటులో లేదు"</string>
- <string name="radioInfo_service_emergency" msgid="4763879891415016848">"అత్యవసర కాల్స్ మాత్రమే"</string>
+ <string name="radioInfo_service_emergency" msgid="4763879891415016848">"అత్యవసర కాల్లు మాత్రమే"</string>
<string name="radioInfo_service_off" msgid="3456583511226783064">"రేడియో ఆఫ్లో ఉంది"</string>
<string name="radioInfo_roaming_in" msgid="3156335577793145965">"రోమింగ్"</string>
<string name="radioInfo_roaming_not" msgid="1904547918725478110">"రోమింగ్లో లేదు"</string>
@@ -877,7 +876,7 @@
<string name="radioInfo_lac" msgid="3892986460272607013">"LAC"</string>
<string name="radioInfo_cid" msgid="1423185536264406705">"CID"</string>
<string name="radio_info_subid" msgid="6839966868621703203">"ప్రస్తుత subId:"</string>
- <string name="radio_info_dds" msgid="1122593144425697126">"ఆటోమేటిక్ డేటా SIM యొక్క SubId:"</string>
+ <string name="radio_info_dds" msgid="1122593144425697126">"డిఫాల్ట్ డేటా SIM యొక్క SubId:"</string>
<string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL బ్యాండ్విడ్త్ (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL బ్యాండ్విడ్త్ (kbps):"</string>
<string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE భౌతిక ఛానెల్ కాన్ఫిగరేషన్:"</string>
@@ -890,9 +889,9 @@
<string name="radio_info_ppp_resets_label" msgid="9131901102339077661">"బూట్ చేసినప్పటి నుండి PPP రీసెట్ సంఖ్య:"</string>
<string name="radio_info_current_network_label" msgid="3052098695239642450">"ప్రస్తుత నెట్వర్క్:"</string>
<string name="radio_info_ppp_received_label" msgid="5753592451640644889">"స్వీకరించిన డేటా:"</string>
- <string name="radio_info_gsm_service_label" msgid="6443348321714241328">"వాయిస్ సర్వీస్:"</string>
+ <string name="radio_info_gsm_service_label" msgid="6443348321714241328">"వాయిస్ సేవ:"</string>
<string name="radio_info_signal_strength_label" msgid="5545444702102543260">"సిగ్నల్ సామర్థ్యం:"</string>
- <string name="radio_info_call_status_label" msgid="7693575431923095487">"వాయిస్ కాల్ స్టేటస్:"</string>
+ <string name="radio_info_call_status_label" msgid="7693575431923095487">"వాయిస్ కాల్ స్థితి:"</string>
<string name="radio_info_ppp_sent_label" msgid="6542208429356199695">"పంపిన డేటా:"</string>
<string name="radio_info_message_waiting_label" msgid="1886549432566952078">"సందేశ నిరీక్షణ:"</string>
<string name="radio_info_phone_number_label" msgid="2533852539562512203">"ఫోన్ నంబర్:"</string>
@@ -915,8 +914,10 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR అందుబాటులో ఉంది:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR స్టేటస్:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR ఫ్రీక్వెన్సీ:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"రేడియో బ్యాండ్ మోడ్ను సెట్ చేయండి"</string>
- <string name="band_mode_loading" msgid="795923726636735967">"బ్యాండ్ లిస్ట్ను లోడ్ చేస్తోంది…"</string>
+ <string name="band_mode_loading" msgid="795923726636735967">"బ్యాండ్ జాబితాను లోడ్ చేస్తోంది…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"సెట్ చేయి"</string>
<string name="band_mode_failed" msgid="1707488541847192924">"విఫలమైంది"</string>
<string name="band_mode_succeeded" msgid="2230018000534761063">"విజయవంతమైంది"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index f2e94dd..68a48c1 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"เปิดเครือข่ายมือถือ ปิดโหมดบนเครื่องบิน หรือปิดโหมดประหยัดแบตเตอรี่เพื่อโทรออก"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"ปิดโหมดบนเครื่องบินเพื่อโทรออก"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"ปิดโหมดบนเครื่องบินหรือเชื่อมต่อเครือข่ายไร้สายเพื่อโทรออก"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"โทรศัพท์ร้อนเกินไป"</b>\n\n"ไม่สามารถโทรได้ โปรดลองอีกครั้งเมื่อโทรศัพท์เย็นลงแล้ว\n\nคุณยังสามารถโทรหมายเลขฉุกเฉินได้อยู่"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"โปรดออกจากโหมดการโทรกลับกรณีฉุกเฉินเพื่อโทรไปยังหมายเลขที่ไม่ใช่หมายเลขฉุกเฉิน"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"ยังไม่ได้ลงทะเบียนบนเครือข่าย"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"เครือข่ายมือถือใช้งานไม่ได้"</string>
@@ -579,7 +578,7 @@
<string name="onscreenEndCallText" msgid="6138725377654842757">"สิ้นสุด"</string>
<string name="onscreenShowDialpadText" msgid="658465753816164079">"แป้นหมายเลข"</string>
<string name="onscreenMuteText" msgid="5470306116733843621">"ปิดเสียง"</string>
- <string name="onscreenAddCallText" msgid="9075675082903611677">"เพิ่มสาย"</string>
+ <string name="onscreenAddCallText" msgid="9075675082903611677">"เพิ่มการโทร"</string>
<string name="onscreenMergeCallsText" msgid="3692389519611225407">"รวมสาย"</string>
<string name="onscreenSwapCallsText" msgid="2682542150803377991">"สลับ"</string>
<string name="onscreenManageCallsText" msgid="1162047856081836469">"จัดการการโทร"</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"มี NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"สถานะ NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"ความถี่ NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"กำหนดค่าการแบ่งส่วนเครือข่าย:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"ตั้งค่าโหมดย่านความถี่วิทยุ"</string>
<string name="band_mode_loading" msgid="795923726636735967">"กำลังโหลดรายการย่านความถี่…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"ตั้งค่า"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 495807b..a54cd9a 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"I-on ang mobile network, i-off ang airplane mode o i-off ang battery saver mode upang tumawag."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"I-off ang airplane mode upang makatawag."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"I-off ang airplane mode o kumonekta sa isang wireless network upang makatawag."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Masyadong mainit ang telepono"</b>\n\n"Hindi makumpleto ang tawag na ito. Subukan ulit kapag lumamig ang iyong telepono.\n\nMakakagawa ka pa rin ng mga emergency na tawag."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Lumabas sa emergency callback mode upang makapagsagawa ng hindi pang-emergency na pagtawag."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Hindi nakarehistro sa network."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Hindi available ang mobile network."</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Available ang NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Status ng NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Frequency ng NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Configuration ng pag-slice ng network:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Itakda ang Band Mode ng Radyo"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Nilo-load ang Listahan ng Band…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Itakda"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 74bb70b..01cdf49 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Telefon etmek için mobil ağı açın, uçak modunu veya pil tasarrufu modunu kapatın."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Telefon etmek için uçak modunu kapatın."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Telefon etmek için uçak modunu kapatın veya kablosuz ağa bağlanın."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon çok ısındı"</b>\n\n"Bu arama tamamlanamıyor. Telefonunuz soğuyana kadar bekleyip tekrar deneyin.\n\nBu süre zarfında acil durum aramaları yapabilirsiniz."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Acil durum çağrısı dışında bir çağrı yapmak için acil durumda geri aranma modundan çıkın."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ağda kayıtlı değil."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobil ağ kullanılamıyor."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR Kullanılabilir:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR Durumu:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR Frekansı:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Radyo Bant Modunu Ayarla"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Bant Listesi Yükleniyor…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Ayarla"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 92aa4d3..c2b0ee6 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Щоб зателефонувати, увімкніть мобільну мережу, вимкніть режим польоту або режим економії заряду."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Щоб зателефонувати, вимкніть режим польоту."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Щоб зателефонувати, вимкніть режим польоту або під’єднайтеся до бездротової мережі."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Телефон занадто нагрівся"</b>\n\n"Не вдалося завершити виклик. Зачекайте, доки телефон охолоне, і повторіть спробу.\n\nЕкстрені виклики доступні."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Щоб зателефонувати на звичайний номер, вимкніть режим екстрених викликів."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Не зареєстровано в мережі."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Мобільна мережа недоступна."</string>
@@ -921,6 +920,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR доступно:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Статус NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Частота NR:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"Конфігурація сегментування мережі:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"Установити режим радіодіапазону"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Завантаження списку діапазонів частот…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Установити"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 7a5e676..46b33bd 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"کال کرنے کیلئے موبائل نیٹ ورک آن کریں، ہوائی جہاز موڈ یا بیٹری سیور موڈ آف کریں۔"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"کال کرنے کیلئے ہوائی جہاز وضع آف کریں۔"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"کال کرنے کیلئے ہوائی جہاز وضع آف کریں یا کسی وائرلیس نیٹ ورک سے منسلک ہوں۔"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"فون بہت گرم ہے"</b>\n\n"اس کال کو مکمل نہیں کیا جا سکتا۔ جب آپ کا فون ٹھنڈا ہو جائے تو دوبارہ کوشش کریں۔\n\nآپ اب بھی ہنگامی کالز کر سکتے ہیں۔"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"غیر ہنگامی کال کرنے کیلئے ہنگامی کال بیک موڈ سے اخراج کریں۔"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"نیٹ ورک پر رجسٹرڈ نہیں ہے۔"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"موبائل نیٹ ورک دستیاب نہیں ہے۔"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR دستیاب ہے:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR ریاست:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR فریکوئنسی:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"ریڈیو بینڈ موڈ سیٹ کریں"</string>
<string name="band_mode_loading" msgid="795923726636735967">"بینڈ کی فہرست لوڈ ہو رہی ہے…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"سیٹ کریں"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index c86c5ee..cfd69b0 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Telefon qilish uchun mobil tarmoqni yoqing, parvoz yoki quvvat tejash rejimini oʻchiring."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Qo‘ng‘iroq qilish uchun parvoz rejimini o‘chiring"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Qo‘ng‘iroq qilish uchun parvoz rejimini o‘chiring yoki simsiz tarmoqqa ulaning."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Telefon qizib ketdi"</b>\n\n"Chaqiruvni amalga oshirish imkonsiz. Telefoningiz soviganida qayta urining.\n\nFavqulodda chaqiruvlarni har qanday holatda ham amalga oshira olasiz."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Odatiy qo‘ng‘iroq qilish uchun favqulodda qayta qo‘ng‘iroq rejimidan chiqing."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Tarmoqda ro‘yxatdan o‘tmagan."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Uyali tarmoq mavjud emas."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR ochiq:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR holati:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR chastotasi:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Tarmoq rejimini sozlash"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Chastotalar ro‘yxati yuklanmoqda…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Saqlash"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index a6d8d20..28f7a37 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Bật mạng di động, tắt chế độ trên máy bay hoặc tắt chế độ trình tiết kiệm pin để thực hiện cuộc gọi."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Tắt chế độ trên máy bay để thực hiện cuộc gọi."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Tắt chế độ trên máy bay hoặc kết nối với mạng không dây để thực hiện cuộc gọi."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Điện thoại quá nóng"</b>\n\n"Không thể hoàn tất cuộc gọi này. Hãy thử lại khi điện thoại nguội bớt.\n\nBạn vẫn có thể thực hiện cuộc gọi khẩn cấp."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Thoát khỏi chế độ gọi lại khẩn cấp để thực hiện cuộc gọi không khẩn cấp."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Chưa được đăng ký trên mạng."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Mạng di động không khả dụng."</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"Hỗ trợ NR:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Trạng thái NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Tần số NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Đặt chế độ dải tần số"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Đang tải danh sách băng tần…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Đặt"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 6bcb0a5..e568da3 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"需开启移动网络,并关闭飞行模式或省电模式才能拨打电话。"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"需关闭飞行模式才能拨打电话。"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"需关闭飞行模式或连接至无线网络才能拨打电话。"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"手机过热"</b>\n\n"无法完成此通话。请先让手机降温,然后再重试。\n\n您仍然可以拨打紧急呼救电话。"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"要拨打非紧急电话,请先退出紧急回拨模式。"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"尚未注册网络。"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"无法连接到移动网络"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"5G 可用:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"5G 状态:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"5G 频率:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"设置无线装置频道模式"</string>
<string name="band_mode_loading" msgid="795923726636735967">"正在加载频道列表…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"设置"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 85cedaa..4d04727 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"開啟流動網絡、關閉飛行模式或關閉省電模式,以撥打電話。"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"關閉飛行模式以撥打電話。"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"關閉飛行模式或連接無線網絡,以撥打電話。"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"電話過熱"</b>\n\n"無法完成此通話。請在電話冷卻後再試一次。\n\n您仍可進行緊急電話。"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"離開緊急回撥模式即可撥打非緊急電話。"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"未在網絡上完成註冊。"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"無法使用流動網絡。"</string>
@@ -915,6 +914,7 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR 可用:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR 狀態:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR 頻率:"</string>
+ <string name="radio_info_network_slicing_config" msgid="7675131833885031563">"網絡切片設定:"</string>
<string name="band_mode_title" msgid="7988822920724576842">"設定無線電頻段模式"</string>
<string name="band_mode_loading" msgid="795923726636735967">"正在載入頻段清單…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"設定"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 64a54cd..23393be 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"如要撥打電話,請開啟行動網路,並關閉飛航模式或省電模式。"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"關閉飛航模式即可撥打電話。"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"關閉飛航模式或連上無線網路即可撥打電話。"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"手機過熱"</b>\n\n"無法撥打這通電話。請等到手機降溫後再試一次。\n\n在這段期間內仍可撥打緊急電話。"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"結束緊急回撥模式,以便撥打非緊急電話。"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"尚未註冊網路。"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"無法使用 Google 行動服務網路。"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"NR 可供使用:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"NR 狀態:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR 頻率:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"設定無線電頻帶模式"</string>
<string name="band_mode_loading" msgid="795923726636735967">"正在載入頻帶清單…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"設定"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index bcc1562..4ad89d0 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -537,7 +537,6 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Vula inethiwekhi yeselula, vala imodi yendiza noma vala imodi yokulondoloza ibhethri ukuze wenze ikholi."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Vala imodi yendiza ukuze wenze ikholi."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Vala imodi yendiza noma xhumeka kunethiwekhi engenantambo ukuze wenze ikholi."</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Ifoni ishisa kakhulu"</b>\n\n"Ayikwazi ukwenza le kholi. Zama futhi lapho ifoni iphola.\n\nUsengakwazi ukwenza amakholi aphuthumayo."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Phuma kwimodi yokushayela emuva yesiko esiphuthumayo ukuze wenze ikholi yemodi engaphuthumi."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Ayibhalisiwe kwinethiwekhi."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Inethiwekhi yefoni ayitholakali"</string>
@@ -915,6 +914,8 @@
<string name="radio_info_nr_available" msgid="1321318331361249997">"I-NR Iyatholakala:"</string>
<string name="radio_info_nr_state" msgid="1337571996788535356">"Isimo se-NR:"</string>
<string name="radio_info_nr_frequency" msgid="1201156032796584128">"Imvamisa ye-NR:"</string>
+ <!-- no translation found for radio_info_network_slicing_config (7675131833885031563) -->
+ <skip />
<string name="band_mode_title" msgid="7988822920724576842">"Isetha imodi yebhendi yerediyo"</string>
<string name="band_mode_loading" msgid="795923726636735967">"Ilayisha uhlu lwebhendi…"</string>
<string name="band_mode_set" msgid="6657819412803771421">"Setha"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index a296254..9f8cc81 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -317,8 +317,4 @@
<!-- The package names which can request thermal mitigation. -->
<string-array name="thermal_mitigation_allowlisted_packages" translatable="false">
</string-array>
-
- <!-- The package name of the app which hosts the
- {@link TelecomManager#ACTION_SHOW_CALL_SETTINGS} settings screen. -->
- <string name="call_settings_package_name">com.android.phone</string>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2077530..1684e89 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1446,19 +1446,19 @@
<!-- ECM: Displays the time when ECM will end, Example: "No Data Connection until 10:45 AM" -->
<string name="phone_in_ecm_notification_complete_time">No data connection until <xliff:g id="completeTime">%s</xliff:g></string>
<!-- ECM: Dialog box message for exiting from the notifications screen -->
- <plurals name="alert_dialog_exit_ecm">
+ <string name="alert_dialog_exit_ecm"> {count, plural,
<!-- number of minutes is one -->
- <item quantity="one">The phone will be in Emergency Callback mode for <xliff:g id="count">%s</xliff:g> minute. While in this mode no apps using a data connection can be used. Do you want to exit now?</item>
+ =1 {The phone will be in Emergency Callback mode for one minute. While in this mode no apps using a data connection can be used. Do you want to exit now?}
<!-- number of minutes is not equal to one -->
- <item quantity="other">The phone will be in Emergency Callback mode for <xliff:g id="count">%s</xliff:g> minutes. While in this mode no applications using a data connection can be used. Do you want to exit now?</item>
- </plurals>
+ other {The phone will be in Emergency Callback mode for %s minutes. While in this mode no applications using a data connection can be used. Do you want to exit now?}
+ }</string>
<!-- ECM: Dialog box message for exiting from any other app -->
- <plurals name="alert_dialog_not_avaialble_in_ecm">
+ <string name="alert_dialog_not_avaialble_in_ecm"> {count, plural,
<!-- number of minutes is one -->
- <item quantity="one">The selected action isn\'t available while in the Emergency Callback mode. The phone will be in this mode for <xliff:g id="count">%s</xliff:g> minute. Do you want to exit now?</item>
+ =1 {The selected action isn\'t available while in the Emergency Callback mode. The phone will be in this mode for one minute. Do you want to exit now?}
<!-- number of minutes is not equal to one -->
- <item quantity="other">The selected action isn\'t available while in the Emergency Callback mode. The phone will be in this mode for <xliff:g id="count">%s</xliff:g> minutes. Do you want to exit now?</item>
- </plurals>
+ other {The selected action isn\'t available while in the Emergency Callback mode. The phone will be in this mode for %s minutes. Do you want to exit now?}
+ }</string>
<!-- ECM: Dialog box message while in emergency call -->
<string name="alert_dialog_in_ecm_call">The selected action isn\'t available while in an emergency call.</string>
<!-- ECM: Progress text -->
@@ -1474,12 +1474,12 @@
<!-- ECM: Displays the time when ECM will end without data restriction hint, Example: "Until 10:45 AM" -->
<string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint">Until <xliff:g id="completeTime">%s</xliff:g></string>
<!-- ECM: Dialog box message without data restriction hint for exiting from the notifications screen -->
- <plurals name="alert_dialog_exit_ecm_without_data_restriction_hint">
+ <string name="alert_dialog_exit_ecm_without_data_restriction_hint"> {count, plural,
<!-- number of minutes is one -->
- <item quantity="one">The phone will be in emergency callback mode for <xliff:g id="count">%s</xliff:g> minute.\nDo you want to exit now?</item>
+ =1 {The phone will be in emergency callback mode for one minute.\nDo you want to exit now?}
<!-- number of minutes is not equal to one -->
- <item quantity="other">The phone will be in emergency callback mode for <xliff:g id="count">%s</xliff:g> minutes.\nDo you want to exit now?</item>
- </plurals>
+ other {The phone will be in emergency callback mode for %s minutes.\nDo you want to exit now?}
+ }</string>
<!-- For incoming calls, this is a string we can get from a CDMA network instead of
the actual phone number, to indicate there's no number present. DO NOT TRANSLATE. -->
@@ -1952,7 +1952,7 @@
<string name="callFailed_calling_disabled">Cannot place a call as calling has been disabled using the ro.telephony.disable-call system property.</string>
<!-- In-call screen: error message shown when the user attempts to place a call, but calling has
been disabled using a debug property. -->
- <string name="callFailed_too_many_calls">Cannot place a call a there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call.</string>
+ <string name="callFailed_too_many_calls">Cannot place a call as there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call.</string>
<!-- Message displayed to the user when they attempt to edit options for a supplementary service
(call waiting, call barring, call forwarding, and caller ID), but they are required to
enable mobile data first. -->
diff --git a/sip/res/values-as/strings.xml b/sip/res/values-as/strings.xml
index 13043e3..76a0b5f 100644
--- a/sip/res/values-as/strings.xml
+++ b/sip/res/values-as/strings.xml
@@ -20,7 +20,7 @@
<string name="sip_accounts" msgid="7297896885665783239">"SIP একাউণ্টসমূহ"</string>
<string name="sip_accounts_title" msgid="3061686404598143943">"একাউণ্টসমূহ"</string>
<string name="sip_receive_calls" msgid="3403644006618369349">"অন্তৰ্গামী কল লাভ কৰি থকা হৈছে"</string>
- <string name="sip_receive_calls_summary" msgid="5306603671778761443">"বেটাৰী অধিক ব্যৱহাৰ কৰে"</string>
+ <string name="sip_receive_calls_summary" msgid="5306603671778761443">"বেটাৰি অধিক ব্যৱহাৰ কৰে"</string>
<string name="sip_call_options_title" msgid="5027066677561068192">"SIP কলিং ব্যৱহাৰ কৰক"</string>
<string name="sip_call_options_wifi_only_title" msgid="6663105297927456484">"SIP কলিং ব্যৱহাৰ কৰক (কেৱল ৱাই-ফাই)"</string>
<string name="sip_call_options_entry_1" msgid="4722647332760934261">"ডেটা নেটৱৰ্ক উপলব্ধ থাকোঁতে সকলো কলৰ বাবে"</string>
diff --git a/sip/res/values-gu/strings.xml b/sip/res/values-gu/strings.xml
index 708452b..9eb810b 100644
--- a/sip/res/values-gu/strings.xml
+++ b/sip/res/values-gu/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sip_settings" msgid="7452587325305604702">"SIP સેટિંગ"</string>
+ <string name="sip_settings" msgid="7452587325305604702">"SIP સેટિંગ્સ"</string>
<string name="sip_accounts" msgid="7297896885665783239">"SIP એકાઉન્ટ્સ"</string>
<string name="sip_accounts_title" msgid="3061686404598143943">"એકાઉન્ટ"</string>
<string name="sip_receive_calls" msgid="3403644006618369349">"આવનારા કૉલ્સ પ્રાપ્ત કરો"</string>
@@ -58,7 +58,7 @@
<string name="port_title" msgid="1703586046264385110">"પોર્ટ નંબર"</string>
<string name="transport_title" msgid="1661659138226029178">"સંક્રમણ પ્રકાર"</string>
<string name="send_keepalive_title" msgid="5319788151608946049">"કીપ-અલાઇવ મોકલો"</string>
- <string name="advanced_settings" msgid="2704644977548662872">"વૈકલ્પિક સેટિંગ"</string>
+ <string name="advanced_settings" msgid="2704644977548662872">"વૈકલ્પિક સેટિંગ્સ"</string>
<string name="auth_username_title" msgid="9002505242616662698">"પ્રમાણીકરણ વપરાશકર્તાનામ"</string>
<string name="auth_username_summary" msgid="6346313945275377230">"પ્રમાણીકરણ માટે ઉપયોગમાં લેવાયેલ વપરાશકર્તાનામ"</string>
<string name="default_preference_summary_username" msgid="8788114717555599222">"<સેટ કરેલ નથી>"</string>
@@ -72,9 +72,9 @@
<string name="empty_alert" msgid="3693655518612836718">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> આવશ્યક છે અને ખાલી છોડી શકાતું નથી."</string>
<string name="not_a_valid_port" msgid="3664668836663491376">"પોર્ટ નંબર 1000 અને 65534 ની અંદરનો હોવો જોઈએ."</string>
<string name="no_internet_available" msgid="161720645084325479">"SIP કૉલ કરવા માટે, પ્રથમ તમારું ઇન્ટરનેટ કનેક્શન તપાસો."</string>
- <string name="no_wifi_available" msgid="1179092018692306312">"SIP કૉલ માટે તમારે વાઇ-ફાઇ નેટવર્કથી કનેક્ટ હોવું જરૂરી છે (વાયરલેસ અને નેટવર્ક સેટિંગનો ઉપયોગ કરો)."</string>
+ <string name="no_wifi_available" msgid="1179092018692306312">"SIP કૉલ્સ માટે તમારે Wi-Fi નેટવર્કથી કનેક્ટ હોવું જરૂરી છે (વાયરલેસ અને નેટવર્ક સેટિંગ્સનો ઉપયોગ કરો)."</string>
<string name="no_voip" msgid="3366395789297981738">"SIP કૉલિંગ સમર્થિત નથી"</string>
- <string name="sip_system_decide" msgid="197230378376326430">"ઑટોમૅટિક"</string>
+ <string name="sip_system_decide" msgid="197230378376326430">"સ્વચલિત"</string>
<string name="sip_always_send_keepalive" msgid="4986533673960084769">"હંમેશાં મોકલો"</string>
<string name="sip_connection_service_label" msgid="8796284274240316006">"બિલ્ટ-ઇન SIP કૉલિંગ"</string>
</resources>
diff --git a/sip/res/values-in/strings.xml b/sip/res/values-in/strings.xml
index 6c52a73..709205c 100644
--- a/sip/res/values-in/strings.xml
+++ b/sip/res/values-in/strings.xml
@@ -72,7 +72,7 @@
<string name="empty_alert" msgid="3693655518612836718">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> diwajibkan dan tidak boleh kosong."</string>
<string name="not_a_valid_port" msgid="3664668836663491376">"Nomor port harus dalam rentang 1000 dan 65534."</string>
<string name="no_internet_available" msgid="161720645084325479">"Untuk melakukan panggilan SIP, periksa koneksi internet terlebih dahulu."</string>
- <string name="no_wifi_available" msgid="1179092018692306312">"Anda harus terhubung ke jaringan Wi-Fi untuk melakukan panggilan SIP (gunakan setelan Nirkabel & Jaringan)."</string>
+ <string name="no_wifi_available" msgid="1179092018692306312">"Anda harus tersambung ke jaringan Wi-Fi untuk melakukan panggilan SIP (gunakan setelan Nirkabel & Jaringan)."</string>
<string name="no_voip" msgid="3366395789297981738">"Panggilan SIP tidak didukung"</string>
<string name="sip_system_decide" msgid="197230378376326430">"Otomatis"</string>
<string name="sip_always_send_keepalive" msgid="4986533673960084769">"Selalu kirim"</string>
diff --git a/sip/res/values-iw/strings.xml b/sip/res/values-iw/strings.xml
index 34b1b20..6e84560 100644
--- a/sip/res/values-iw/strings.xml
+++ b/sip/res/values-iw/strings.xml
@@ -24,29 +24,29 @@
<string name="sip_call_options_title" msgid="5027066677561068192">"שימוש בשיחות SIP"</string>
<string name="sip_call_options_wifi_only_title" msgid="6663105297927456484">"שימוש בשיחות SIP (Wi-Fi בלבד)"</string>
<string name="sip_call_options_entry_1" msgid="4722647332760934261">"לכל השיחות כאשר רשת הנתונים זמינה"</string>
- <string name="sip_call_options_entry_2" msgid="7338504256051655013">"מעבר לשיחות SIP בלבד"</string>
+ <string name="sip_call_options_entry_2" msgid="7338504256051655013">"עבור שיחות SIP בלבד"</string>
<string name="sip_call_options_wifi_only_entry_1" msgid="922329055414010991">"לכל השיחות"</string>
<string name="add_sip_account" msgid="5754758646745144384">"חשבון חדש"</string>
<string name="remove_sip_account" msgid="8272617403399636513">"הסרת חשבון"</string>
<string name="sip_account_list" msgid="2596262496233721769">"חשבונות SIP"</string>
- <string name="saving_account" msgid="3390358043846687266">"שמירת החשבון מתבצעת..."</string>
- <string name="removing_account" msgid="1544132880414780408">"הסרת החשבון מתבצעת..."</string>
- <string name="sip_menu_save" msgid="4377112554203123060">"שמירה"</string>
- <string name="sip_menu_discard" msgid="1883166691772895243">"מחיקה"</string>
- <string name="alert_dialog_close" msgid="1734746505531110706">"סגירת הפרופיל"</string>
+ <string name="saving_account" msgid="3390358043846687266">"שומר את החשבון..."</string>
+ <string name="removing_account" msgid="1544132880414780408">"מסיר את החשבון..."</string>
+ <string name="sip_menu_save" msgid="4377112554203123060">"שמור"</string>
+ <string name="sip_menu_discard" msgid="1883166691772895243">"מחק"</string>
+ <string name="alert_dialog_close" msgid="1734746505531110706">"סגור את הפרופיל"</string>
<string name="alert_dialog_ok" msgid="7806760618798687406">"אישור"</string>
- <string name="close_profile" msgid="3756064641769751774">"סגירה"</string>
- <string name="registration_status_checking_status" msgid="884179594507591180">"בדיקת המצב מתבצעת..."</string>
- <string name="registration_status_registering" msgid="7986331597809521791">"הרישום מתבצע..."</string>
- <string name="registration_status_still_trying" msgid="7178623685868766282">"הניסיון מתבצע..."</string>
+ <string name="close_profile" msgid="3756064641769751774">"סגור"</string>
+ <string name="registration_status_checking_status" msgid="884179594507591180">"בודק מצב..."</string>
+ <string name="registration_status_registering" msgid="7986331597809521791">"מבצע רישום..."</string>
+ <string name="registration_status_still_trying" msgid="7178623685868766282">"עדיין מנסה..."</string>
<string name="registration_status_not_receiving" msgid="3873074208531938401">"לא מקבל שיחות."</string>
<string name="registration_status_no_data" msgid="2987064560116584121">"רישום החשבון הופסק כיוון שאין חיבור לאינטרנט."</string>
<string name="registration_status_no_wifi_data" msgid="685470618241482948">"רישום החשבון הופסק כיוון שאין חיבור Wi-Fi."</string>
<string name="registration_status_not_running" msgid="6236403137652262659">"רישום החשבון נכשל."</string>
- <string name="registration_status_done" msgid="6787397199273357721">"קבלת שיחות."</string>
+ <string name="registration_status_done" msgid="6787397199273357721">"מקבל שיחות."</string>
<string name="registration_status_failed_try_later" msgid="7855389184910312091">"רישום החשבון נכשל: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); ניסיון חוזר יבוצע מאוחר יותר"</string>
<string name="registration_status_invalid_credentials" msgid="8896714049938660777">"רישום החשבון נכשל: שם המשתמש או הסיסמה שגויים."</string>
- <string name="registration_status_server_unreachable" msgid="3832339558868965604">"רישום החשבון נכשל: יש לבדוק את שם השרת."</string>
+ <string name="registration_status_server_unreachable" msgid="3832339558868965604">"רישום החשבון נכשל: בדוק את שם השרת."</string>
<string name="third_party_account_summary" msgid="5918779106950859167">"האפליקציה <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> משתמשת כרגע בחשבון הזה."</string>
<string name="sip_edit_title" msgid="7438891546610820307">"פרטי חשבון SIP"</string>
<string name="sip_edit_new_title" msgid="8394790068979636381">"פרטי חשבון SIP"</string>
@@ -57,7 +57,7 @@
<string name="proxy_address_title" msgid="4120361943254795287">"כתובת שרת Proxy יוצא"</string>
<string name="port_title" msgid="1703586046264385110">"מספר יציאה"</string>
<string name="transport_title" msgid="1661659138226029178">"סוג העברה"</string>
- <string name="send_keepalive_title" msgid="5319788151608946049">"שליחת אות חיבור"</string>
+ <string name="send_keepalive_title" msgid="5319788151608946049">"שלח אות חיבור"</string>
<string name="advanced_settings" msgid="2704644977548662872">"הגדרות אופציונליות"</string>
<string name="auth_username_title" msgid="9002505242616662698">"שם משתמש לאימות"</string>
<string name="auth_username_summary" msgid="6346313945275377230">"שם משתמש המשמש לאימות"</string>
@@ -67,14 +67,14 @@
<string name="display_name_summary" msgid="6749135030093260358">"<זהה לשם משתמש>"</string>
<string name="optional_summary" msgid="620379377865437488">"<אופציונלי>"</string>
<string name="advanced_settings_show" msgid="2318728080037568529">"איפה כל ההגדרות?"</string>
- <string name="advanced_settings_hide" msgid="6200816937370652083">"▽ יש לגעת כדי להסתיר את הכול"</string>
- <string name="all_empty_alert" msgid="6085603517610199098">"יש להזין את פרטי חשבון ה-SIP החדש."</string>
+ <string name="advanced_settings_hide" msgid="6200816937370652083">"▽ גע כדי להסתיר את הכול"</string>
+ <string name="all_empty_alert" msgid="6085603517610199098">"הזן את פרטי חשבון ה-SIP החדש."</string>
<string name="empty_alert" msgid="3693655518612836718">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> הוא שדה חובה ולא ניתן להשאיר אותו ריק."</string>
<string name="not_a_valid_port" msgid="3664668836663491376">"מספר היציאה צריך להיות בין 1000 ל-65534."</string>
- <string name="no_internet_available" msgid="161720645084325479">"כדי לבצע שיחת SIP, ראשית יש לבדוק את חיבור האינטרנט שלך."</string>
- <string name="no_wifi_available" msgid="1179092018692306312">"יש צורך בחיבור לרשת Wi-Fi כדי לבצע שיחות SIP (יש להשתמש ב\'הגדרות רשת ותקשורת אלחוטית\')."</string>
+ <string name="no_internet_available" msgid="161720645084325479">"כדי לבצע שיחת SIP, ראשית בדוק את חיבור האינטרנט שלך."</string>
+ <string name="no_wifi_available" msgid="1179092018692306312">"עליך להיות מחובר לרשת Wi-Fi כדי לבצע שיחות SIP (השתמש ב\'הגדרות רשת ותקשורת אלחוטית\')."</string>
<string name="no_voip" msgid="3366395789297981738">"שיחות SIP לא נתמכות"</string>
<string name="sip_system_decide" msgid="197230378376326430">"אוטומטי"</string>
- <string name="sip_always_send_keepalive" msgid="4986533673960084769">"שליחה תמיד"</string>
+ <string name="sip_always_send_keepalive" msgid="4986533673960084769">"שלח תמיד"</string>
<string name="sip_connection_service_label" msgid="8796284274240316006">"שיחות SIP מובנות"</string>
</resources>
diff --git a/sip/res/values-kk/strings.xml b/sip/res/values-kk/strings.xml
index 2f90a2a..1e59711 100644
--- a/sip/res/values-kk/strings.xml
+++ b/sip/res/values-kk/strings.xml
@@ -17,8 +17,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="sip_settings" msgid="7452587325305604702">"SIP параметрлері"</string>
- <string name="sip_accounts" msgid="7297896885665783239">"SIP аккаунттары"</string>
- <string name="sip_accounts_title" msgid="3061686404598143943">"Аккаунттар"</string>
+ <string name="sip_accounts" msgid="7297896885665783239">"SIP есептік жазбалары"</string>
+ <string name="sip_accounts_title" msgid="3061686404598143943">"Есептік жазбалар"</string>
<string name="sip_receive_calls" msgid="3403644006618369349">"Кіріс қоңырауларды қабылдау"</string>
<string name="sip_receive_calls_summary" msgid="5306603671778761443">"Көбірек батарея қуатын пайдаланады"</string>
<string name="sip_call_options_title" msgid="5027066677561068192">"SIP қызметін пайдалану"</string>
@@ -26,11 +26,11 @@
<string name="sip_call_options_entry_1" msgid="4722647332760934261">"Деректер желісі қол жетімді болғанда барлық қоңыраулар үшін"</string>
<string name="sip_call_options_entry_2" msgid="7338504256051655013">"Тек SIP қоңыраулары үшін"</string>
<string name="sip_call_options_wifi_only_entry_1" msgid="922329055414010991">"Барлық қоңыраулар үшін"</string>
- <string name="add_sip_account" msgid="5754758646745144384">"Аккаунт қосу"</string>
- <string name="remove_sip_account" msgid="8272617403399636513">"Аккаунтты жою"</string>
- <string name="sip_account_list" msgid="2596262496233721769">"SIP аккаунттары"</string>
- <string name="saving_account" msgid="3390358043846687266">"Аккаунт сақталуда…"</string>
- <string name="removing_account" msgid="1544132880414780408">"Аккаунт жойылуда…"</string>
+ <string name="add_sip_account" msgid="5754758646745144384">"Есептік жазба қосу"</string>
+ <string name="remove_sip_account" msgid="8272617403399636513">"Есептік жазбаны жою"</string>
+ <string name="sip_account_list" msgid="2596262496233721769">"SIP есептік жазбалары"</string>
+ <string name="saving_account" msgid="3390358043846687266">"Есептік жазба сақталуда…"</string>
+ <string name="removing_account" msgid="1544132880414780408">"Есептік жазба жойылуда…"</string>
<string name="sip_menu_save" msgid="4377112554203123060">"Сақтау"</string>
<string name="sip_menu_discard" msgid="1883166691772895243">"Алып тастау"</string>
<string name="alert_dialog_close" msgid="1734746505531110706">"Профильді жабу"</string>
@@ -40,16 +40,16 @@
<string name="registration_status_registering" msgid="7986331597809521791">"Тіркелуде…"</string>
<string name="registration_status_still_trying" msgid="7178623685868766282">"Әлі әрекеттенуде…"</string>
<string name="registration_status_not_receiving" msgid="3873074208531938401">"Қоңыраулар қабылданып жатқан жоқ."</string>
- <string name="registration_status_no_data" msgid="2987064560116584121">"Аккаунтты тіркеу тоқтатылды, себебі интернет байланысы жоқ."</string>
- <string name="registration_status_no_wifi_data" msgid="685470618241482948">"Аккаунтты тіркеу тоқтатылды, себебі Wi-Fi байланысы жоқ."</string>
- <string name="registration_status_not_running" msgid="6236403137652262659">"Аккаунт тіркеу сәтсіз аяқталды."</string>
+ <string name="registration_status_no_data" msgid="2987064560116584121">"Есептік жазбаны тіркеу тоқтатылды, себебі интернет байланысы жоқ."</string>
+ <string name="registration_status_no_wifi_data" msgid="685470618241482948">"Есептік жазбаны тіркеу тоқтатылды, себебі Wi-Fi байланысы жоқ."</string>
+ <string name="registration_status_not_running" msgid="6236403137652262659">"Есептік жазба тіркеу сәтсіз аяқталды."</string>
<string name="registration_status_done" msgid="6787397199273357721">"Қоңыраулар қабылдануда."</string>
- <string name="registration_status_failed_try_later" msgid="7855389184910312091">"Аккаунтты тіркеу сәтсіз аяқталды: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); әрекет кейінірек қайталанады"</string>
- <string name="registration_status_invalid_credentials" msgid="8896714049938660777">"Аккаунтты тіркеу сәтсіз аяқталды: Пайдаланушы аты немесе құпия сөз қате."</string>
- <string name="registration_status_server_unreachable" msgid="3832339558868965604">"Аккаунт тіркеу сәтсіз аяқталды: Сервер атауын тексеріңіз."</string>
- <string name="third_party_account_summary" msgid="5918779106950859167">"Бұл аккаунтты қазіргі уақытта <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> қолданбасы пайдалануда."</string>
- <string name="sip_edit_title" msgid="7438891546610820307">"SIP аккаунты туралы мәліметтер"</string>
- <string name="sip_edit_new_title" msgid="8394790068979636381">"SIP аккаунты туралы мәліметтер"</string>
+ <string name="registration_status_failed_try_later" msgid="7855389184910312091">"Есептік жазбаны тіркеу сәтсіз аяқталды: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); әрекет кейінірек қайталанады"</string>
+ <string name="registration_status_invalid_credentials" msgid="8896714049938660777">"Есептік жазбаны тіркеу сәтсіз аяқталды: Пайдаланушы аты немесе құпия сөз қате."</string>
+ <string name="registration_status_server_unreachable" msgid="3832339558868965604">"Есептік жазба тіркеу сәтсіз аяқталды: Сервер атауын тексеріңіз."</string>
+ <string name="third_party_account_summary" msgid="5918779106950859167">"Бұл есептік жазбаны қазіргі уақытта <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> қолданбасы пайдалануда."</string>
+ <string name="sip_edit_title" msgid="7438891546610820307">"SIP есептік жазбасы туралы мәліметтер"</string>
+ <string name="sip_edit_new_title" msgid="8394790068979636381">"SIP есептік жазбасы туралы мәліметтер"</string>
<string name="domain_address_title" msgid="8238078615181248579">"Сервер"</string>
<string name="username_title" msgid="298416796886107970">"Пайдаланушы аты"</string>
<string name="password_title" msgid="8035579335591959021">"Құпия сөз"</string>
@@ -68,7 +68,7 @@
<string name="optional_summary" msgid="620379377865437488">"<Міндетті емес>"</string>
<string name="advanced_settings_show" msgid="2318728080037568529">"▷ Барлығын көрсету үшін түрту"</string>
<string name="advanced_settings_hide" msgid="6200816937370652083">"▽ Барлығын жасыру үшін түрту"</string>
- <string name="all_empty_alert" msgid="6085603517610199098">"Жаңа SIP аккаунтының мәліметтерін енгізіңіз."</string>
+ <string name="all_empty_alert" msgid="6085603517610199098">"Жаңа SIP есептік жазбасының мәліметтерін енгізіңіз."</string>
<string name="empty_alert" msgid="3693655518612836718">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> міндетті және оны бос қалдыруға болмайды."</string>
<string name="not_a_valid_port" msgid="3664668836663491376">"Порт нөмірі 1000 және 65534 аралығында болуы керек."</string>
<string name="no_internet_available" msgid="161720645084325479">"SIP қоңырауын шалу үшін алдымен интернет қосылымын тексеріңіз."</string>
diff --git a/sip/res/values-kn/strings.xml b/sip/res/values-kn/strings.xml
index 99fe93e..cf7cd59 100644
--- a/sip/res/values-kn/strings.xml
+++ b/sip/res/values-kn/strings.xml
@@ -19,7 +19,7 @@
<string name="sip_settings" msgid="7452587325305604702">"ಎಸ್ಐಪಿ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="sip_accounts" msgid="7297896885665783239">"ಎಸ್ಐಪಿ ಖಾತೆಗಳು"</string>
<string name="sip_accounts_title" msgid="3061686404598143943">"ಖಾತೆಗಳು"</string>
- <string name="sip_receive_calls" msgid="3403644006618369349">"ಒಳಬರುವ ಕರೆಗಳನ್ನು ಸ್ವೀಕರಿಸಿ"</string>
+ <string name="sip_receive_calls" msgid="3403644006618369349">"ಒಳಬರುವ ಕರೆಗಳನ್ನು ಸ್ವೀಕರಿಸು"</string>
<string name="sip_receive_calls_summary" msgid="5306603671778761443">"ಹೆಚ್ಚು ಬ್ಯಾಟರಿಯನ್ನು ಬಳಸುತ್ತದೆ"</string>
<string name="sip_call_options_title" msgid="5027066677561068192">"ಎಸ್ಐಪಿ ಕರೆ ಮಾಡುವಿಕೆಯನ್ನು ಬಳಸಿ"</string>
<string name="sip_call_options_wifi_only_title" msgid="6663105297927456484">"ಎಸ್ಐಪಿ ಕರೆ ಮಾಡುವಿಕೆಯನ್ನು ಬಳಸಿ (ವೈ-ಫೈ ಮಾತ್ರ)"</string>
diff --git a/sip/res/values-mr/strings.xml b/sip/res/values-mr/strings.xml
index 6eb7245..60d9c88 100644
--- a/sip/res/values-mr/strings.xml
+++ b/sip/res/values-mr/strings.xml
@@ -19,7 +19,7 @@
<string name="sip_settings" msgid="7452587325305604702">"SIP सेटिंग्ज"</string>
<string name="sip_accounts" msgid="7297896885665783239">"SIP खाती"</string>
<string name="sip_accounts_title" msgid="3061686404598143943">"खाती"</string>
- <string name="sip_receive_calls" msgid="3403644006618369349">"इनकमिंग कॉल घ्या"</string>
+ <string name="sip_receive_calls" msgid="3403644006618369349">"येणारे कॉल घ्या"</string>
<string name="sip_receive_calls_summary" msgid="5306603671778761443">"अधिक बॅटरी वापरते"</string>
<string name="sip_call_options_title" msgid="5027066677561068192">"SIP कॉलिंग वापरा"</string>
<string name="sip_call_options_wifi_only_title" msgid="6663105297927456484">"SIP कॉलिंग वापरा (वाय-फाय केवळ)"</string>
diff --git a/sip/res/values-sv/strings.xml b/sip/res/values-sv/strings.xml
index a59eb21..2976425 100644
--- a/sip/res/values-sv/strings.xml
+++ b/sip/res/values-sv/strings.xml
@@ -41,7 +41,7 @@
<string name="registration_status_still_trying" msgid="7178623685868766282">"Försöker fortfarande ..."</string>
<string name="registration_status_not_receiving" msgid="3873074208531938401">"Tar inte emot samtal."</string>
<string name="registration_status_no_data" msgid="2987064560116584121">"Kontoregistreringen avbröts eftersom det inte finns någon internetanslutning."</string>
- <string name="registration_status_no_wifi_data" msgid="685470618241482948">"Kontoregistreringen avbröts eftersom det inte finns någon wifi-anslutning."</string>
+ <string name="registration_status_no_wifi_data" msgid="685470618241482948">"Kontoregistreringen avbröts eftersom det inte finns någon Wi-Fi-anslutning."</string>
<string name="registration_status_not_running" msgid="6236403137652262659">"Det gick inte att registrera kontot."</string>
<string name="registration_status_done" msgid="6787397199273357721">"Tar emot samtal."</string>
<string name="registration_status_failed_try_later" msgid="7855389184910312091">"Det gick inte att registrera kontot: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); försöker igen senare"</string>
@@ -72,7 +72,7 @@
<string name="empty_alert" msgid="3693655518612836718">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> är ett obligatoriskt fält som måste fyllas i."</string>
<string name="not_a_valid_port" msgid="3664668836663491376">"Portnumret ska vara mellan 1000 och 65534."</string>
<string name="no_internet_available" msgid="161720645084325479">"Om du vill ringa ett SIP-samtal kontrollerar du först att du är ansluten till internet."</string>
- <string name="no_wifi_available" msgid="1179092018692306312">"Du måste vara ansluten till wifi för att kunna ringa SIP-samtal (du ändrar detta i inställningarna för Trådlöst och nätverk)."</string>
+ <string name="no_wifi_available" msgid="1179092018692306312">"Du måste vara ansluten till Wi-Fi för att kunna ringa SIP-samtal (du ändrar detta i inställningarna för Trådlöst och nätverk)."</string>
<string name="no_voip" msgid="3366395789297981738">"SIP-samtal stöds inte"</string>
<string name="sip_system_decide" msgid="197230378376326430">"Automatiskt"</string>
<string name="sip_always_send_keepalive" msgid="4986533673960084769">"Skicka alltid"</string>
diff --git a/sip/res/values-te/strings.xml b/sip/res/values-te/strings.xml
index b821a60..9abb6f5 100644
--- a/sip/res/values-te/strings.xml
+++ b/sip/res/values-te/strings.xml
@@ -19,13 +19,13 @@
<string name="sip_settings" msgid="7452587325305604702">"SIP సెట్టింగ్లు"</string>
<string name="sip_accounts" msgid="7297896885665783239">"SIP ఖాతాలు"</string>
<string name="sip_accounts_title" msgid="3061686404598143943">"ఖాతాలు"</string>
- <string name="sip_receive_calls" msgid="3403644006618369349">"ఇన్కమింగ్ కాల్స్ను స్వీకరించు"</string>
+ <string name="sip_receive_calls" msgid="3403644006618369349">"ఇన్కమింగ్ కాల్లను స్వీకరించు"</string>
<string name="sip_receive_calls_summary" msgid="5306603671778761443">"ఎక్కువ బ్యాటరీని ఉపయోగిస్తుంది"</string>
<string name="sip_call_options_title" msgid="5027066677561068192">"SIP కాలింగ్ను ఉపయోగించండి"</string>
<string name="sip_call_options_wifi_only_title" msgid="6663105297927456484">"SIP కాలింగ్ను (Wi-Fi మాత్రమే) ఉపయోగించండి"</string>
- <string name="sip_call_options_entry_1" msgid="4722647332760934261">"డేటా నెట్వర్క్ అందుబాటులో ఉన్నప్పుడు అన్ని కాల్స్ల కోసం"</string>
- <string name="sip_call_options_entry_2" msgid="7338504256051655013">"SIP కాల్స్ల కోసం మాత్రమే"</string>
- <string name="sip_call_options_wifi_only_entry_1" msgid="922329055414010991">"అన్ని కాల్స్ల కోసం"</string>
+ <string name="sip_call_options_entry_1" msgid="4722647332760934261">"డేటా నెట్వర్క్ అందుబాటులో ఉన్నప్పుడు అన్ని కాల్ల కోసం"</string>
+ <string name="sip_call_options_entry_2" msgid="7338504256051655013">"SIP కాల్ల కోసం మాత్రమే"</string>
+ <string name="sip_call_options_wifi_only_entry_1" msgid="922329055414010991">"అన్ని కాల్ల కోసం"</string>
<string name="add_sip_account" msgid="5754758646745144384">"ఖాతాను జోడించు"</string>
<string name="remove_sip_account" msgid="8272617403399636513">"ఖాతాను తీసివేయి"</string>
<string name="sip_account_list" msgid="2596262496233721769">"SIP ఖాతాలు"</string>
@@ -36,28 +36,28 @@
<string name="alert_dialog_close" msgid="1734746505531110706">"ప్రొఫైల్ను మూసివేయండి"</string>
<string name="alert_dialog_ok" msgid="7806760618798687406">"సరే"</string>
<string name="close_profile" msgid="3756064641769751774">"మూసివేయి"</string>
- <string name="registration_status_checking_status" msgid="884179594507591180">"స్టేటస్ని తనిఖీ చేస్తోంది..."</string>
+ <string name="registration_status_checking_status" msgid="884179594507591180">"స్థితిని తనిఖీ చేస్తోంది..."</string>
<string name="registration_status_registering" msgid="7986331597809521791">"నమోదు చేస్తోంది…"</string>
<string name="registration_status_still_trying" msgid="7178623685868766282">"ఇప్పటికీ ప్రయత్నిస్తోంది..."</string>
- <string name="registration_status_not_receiving" msgid="3873074208531938401">"కాల్స్ను స్వీకరించడం లేదు."</string>
+ <string name="registration_status_not_receiving" msgid="3873074208531938401">"కాల్లను స్వీకరించడం లేదు."</string>
<string name="registration_status_no_data" msgid="2987064560116584121">"ఇంటర్నెట్ కనెక్షన్ లేని కారణంగా ఖాతా నమోదు ఆపివేయబడింది."</string>
<string name="registration_status_no_wifi_data" msgid="685470618241482948">"Wi-Fi కనెక్షన్ లేని కారణంగా ఖాతా నమోదు ఆపివేయబడింది."</string>
<string name="registration_status_not_running" msgid="6236403137652262659">"ఖాతా నమోదు విఫలమైంది."</string>
- <string name="registration_status_done" msgid="6787397199273357721">"కాల్స్ను స్వీకరిస్తోంది."</string>
+ <string name="registration_status_done" msgid="6787397199273357721">"కాల్లను స్వీకరిస్తోంది."</string>
<string name="registration_status_failed_try_later" msgid="7855389184910312091">"ఖాతా నమోదు విఫలమైంది: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); తర్వాత ప్రయత్నిస్తుంది"</string>
<string name="registration_status_invalid_credentials" msgid="8896714049938660777">"ఖాతా నమోదు విఫలమైంది: చెల్లని వినియోగదారు పేరు లేదా పాస్వర్డ్."</string>
<string name="registration_status_server_unreachable" msgid="3832339558868965604">"ఖాతా నమోదు విఫలమైంది: సర్వర్ పేరు తనిఖీ చేయండి."</string>
- <string name="third_party_account_summary" msgid="5918779106950859167">"ఈ ఖాతా ప్రస్తుతం <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> యాప్ ద్వారా ఉపయోగంలో ఉంది."</string>
+ <string name="third_party_account_summary" msgid="5918779106950859167">"ఈ ఖాతా ప్రస్తుతం <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> అనువర్తనం ద్వారా ఉపయోగంలో ఉంది."</string>
<string name="sip_edit_title" msgid="7438891546610820307">"SIP ఖాతా వివరాలు"</string>
<string name="sip_edit_new_title" msgid="8394790068979636381">"SIP ఖాతా వివరాలు"</string>
<string name="domain_address_title" msgid="8238078615181248579">"సర్వర్"</string>
<string name="username_title" msgid="298416796886107970">"వినియోగదారు పేరు"</string>
<string name="password_title" msgid="8035579335591959021">"పాస్వర్డ్"</string>
<string name="display_name_title" msgid="3730105783656830160">"ప్రదర్శన పేరు"</string>
- <string name="proxy_address_title" msgid="4120361943254795287">"అవుట్బౌండ్ ప్రాక్సీ అడ్రస్"</string>
+ <string name="proxy_address_title" msgid="4120361943254795287">"అవుట్బౌండ్ ప్రాక్సీ చిరునామా"</string>
<string name="port_title" msgid="1703586046264385110">"పోర్ట్ సంఖ్య"</string>
<string name="transport_title" msgid="1661659138226029178">"రవాణా రకం"</string>
- <string name="send_keepalive_title" msgid="5319788151608946049">"యాక్టివ్గా ఉంచే మెసేజ్ పంపండి"</string>
+ <string name="send_keepalive_title" msgid="5319788151608946049">"యాక్టివ్గా ఉంచే సందేశం పంపండి"</string>
<string name="advanced_settings" msgid="2704644977548662872">"ఐచ్ఛిక సెట్టింగ్లు"</string>
<string name="auth_username_title" msgid="9002505242616662698">"ప్రామాణీకరణ వినియోగదారు పేరు"</string>
<string name="auth_username_summary" msgid="6346313945275377230">"ప్రామాణీకరణ కోసం వినియోగదారు పేరు ఉపయోగించబడింది"</string>
@@ -72,7 +72,7 @@
<string name="empty_alert" msgid="3693655518612836718">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> అవసరం కావున ఖాళీగా వదిలిపెట్టకూడదు."</string>
<string name="not_a_valid_port" msgid="3664668836663491376">"పోర్ట్ సంఖ్య 1000 మరియు 65534 మధ్య ఉండాలి."</string>
<string name="no_internet_available" msgid="161720645084325479">"SIP కాల్ చేయడానికి, ముందుగా మీ ఇంటర్నెట్ కనెక్షన్ను తనిఖీ చేయండి."</string>
- <string name="no_wifi_available" msgid="1179092018692306312">"మీరు SIP కాల్స్ చేయడం కోసం Wi-Fi నెట్వర్క్కు కనెక్ట్ అవ్వడం అవసరం (వైర్లెస్ & నెట్వర్క్ సెట్టింగ్లను ఉపయోగించండి)."</string>
+ <string name="no_wifi_available" msgid="1179092018692306312">"మీరు SIP కాల్లు చేయడం కోసం Wi-Fi నెట్వర్క్కు కనెక్ట్ అవ్వడం అవసరం (వైర్లెస్ & నెట్వర్క్ సెట్టింగ్లను ఉపయోగించండి)."</string>
<string name="no_voip" msgid="3366395789297981738">"SIP కాలింగ్కి మద్దతు లేదు"</string>
<string name="sip_system_decide" msgid="197230378376326430">"1205664026446156265"</string>
<string name="sip_always_send_keepalive" msgid="4986533673960084769">"ఎల్లప్పుడూ పంపు"</string>
diff --git a/sip/src/com/android/services/telephony/sip/SipEditor.java b/sip/src/com/android/services/telephony/sip/SipEditor.java
index dd475e6..9efe5bf 100644
--- a/sip/src/com/android/services/telephony/sip/SipEditor.java
+++ b/sip/src/com/android/services/telephony/sip/SipEditor.java
@@ -16,7 +16,6 @@
package com.android.services.telephony.sip;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Intent;
@@ -37,6 +36,8 @@
import android.widget.Button;
import android.widget.Toast;
+import com.android.phone.FrameworksUtils;
+
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Arrays;
@@ -93,7 +94,7 @@
public Dialog onCreateDialog(Bundle savedInstanceState) {
String message = getArguments().getString(KEY_MESSAGE);
- return new AlertDialog.Builder(getActivity())
+ return FrameworksUtils.makeAlertDialogBuilder(getActivity())
.setTitle(android.R.string.dialog_alert_title)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(message)
diff --git a/sip/src/com/android/services/telephony/sip/SipSettings.java b/sip/src/com/android/services/telephony/sip/SipSettings.java
index 813ba51..5137963 100644
--- a/sip/src/com/android/services/telephony/sip/SipSettings.java
+++ b/sip/src/com/android/services/telephony/sip/SipSettings.java
@@ -17,7 +17,6 @@
package com.android.services.telephony.sip;
import android.app.ActionBar;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -39,6 +38,7 @@
import android.view.Menu;
import android.view.MenuItem;
+import com.android.phone.FrameworksUtils;
import com.android.phone.R;
import java.io.IOException;
@@ -287,7 +287,7 @@
startSipEditor(profile);
return;
}
- new AlertDialog.Builder(this)
+ FrameworksUtils.makeAlertDialogBuilder(this)
.setTitle(R.string.alert_dialog_close)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setPositiveButton(R.string.close_profile,
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index ec6ea2b..d249fae 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -220,7 +220,7 @@
if (mImsMgr.isEnhanced4gLteModeSettingEnabledByUser()) {
mImsMgr.setVtSetting((boolean) objValue);
} else {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ AlertDialog.Builder builder = FrameworksUtils.makeAlertDialogBuilder(this);
DialogInterface.OnClickListener networkSettingsClickListener =
new Dialog.OnClickListener() {
@Override
diff --git a/src/com/android/phone/CallForwardEditPreference.java b/src/com/android/phone/CallForwardEditPreference.java
index 45121f7..2cbb7c5 100644
--- a/src/com/android/phone/CallForwardEditPreference.java
+++ b/src/com/android/phone/CallForwardEditPreference.java
@@ -428,7 +428,8 @@
default: // not reachable
s = getContext().getText(R.string.disable_cfnrc_forbidden);
}
- AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ AlertDialog.Builder builder =
+ FrameworksUtils.makeAlertDialogBuilder(getContext());
builder.setNeutralButton(R.string.close_dialog, null);
builder.setTitle(getContext()
.getText(R.string.error_updating_title));
@@ -441,7 +442,8 @@
// Handle the fail-to-enable case.
CharSequence s = getContext()
.getText(R.string.registration_cf_forbidden);
- AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ AlertDialog.Builder builder =
+ FrameworksUtils.makeAlertDialogBuilder(getContext());
builder.setNeutralButton(R.string.close_dialog, null);
builder.setTitle(getContext()
.getText(R.string.error_updating_title));
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index a8ef220..7f61f78 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -276,23 +276,10 @@
private int mState;
// The possible tones we can play.
public static final int TONE_NONE = 0;
- public static final int TONE_CALL_WAITING = 1;
- public static final int TONE_BUSY = 2;
- public static final int TONE_CONGESTION = 3;
- public static final int TONE_CALL_ENDED = 4;
public static final int TONE_VOICE_PRIVACY = 5;
- public static final int TONE_REORDER = 6;
- public static final int TONE_INTERCEPT = 7;
- public static final int TONE_CDMA_DROP = 8;
- public static final int TONE_OUT_OF_SERVICE = 9;
- public static final int TONE_REDIAL = 10;
- public static final int TONE_OTA_CALL_END = 11;
- public static final int TONE_UNOBTAINABLE_NUMBER = 13;
// The tone volume relative to other sounds in the stream
- static final int TONE_RELATIVE_VOLUME_EMERGENCY = 100;
static final int TONE_RELATIVE_VOLUME_HIPRI = 80;
- static final int TONE_RELATIVE_VOLUME_LOPRI = 50;
// Buffer time (in msec) to add on to tone timeout value.
// Needed mainly when the timeout value for a tone is the
@@ -320,70 +307,11 @@
int phoneType = mCM.getFgPhone().getPhoneType();
switch (mToneId) {
- case TONE_CALL_WAITING:
- toneType = ToneGenerator.TONE_SUP_CALL_WAITING;
- toneVolume = TONE_RELATIVE_VOLUME_HIPRI;
- // Call waiting tone is stopped by stopTone() method
- toneLengthMillis = Integer.MAX_VALUE - TONE_TIMEOUT_BUFFER;
- break;
- case TONE_BUSY:
- if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {
- toneType = ToneGenerator.TONE_CDMA_NETWORK_BUSY_ONE_SHOT;
- toneVolume = TONE_RELATIVE_VOLUME_LOPRI;
- toneLengthMillis = 1000;
- } else if (phoneType == PhoneConstants.PHONE_TYPE_GSM
- || phoneType == PhoneConstants.PHONE_TYPE_SIP
- || phoneType == PhoneConstants.PHONE_TYPE_IMS
- || phoneType == PhoneConstants.PHONE_TYPE_THIRD_PARTY) {
- toneType = ToneGenerator.TONE_SUP_BUSY;
- toneVolume = TONE_RELATIVE_VOLUME_HIPRI;
- toneLengthMillis = 4000;
- } else {
- throw new IllegalStateException("Unexpected phone type: " + phoneType);
- }
- break;
- case TONE_CONGESTION:
- toneType = ToneGenerator.TONE_SUP_CONGESTION;
- toneVolume = TONE_RELATIVE_VOLUME_HIPRI;
- toneLengthMillis = 4000;
- break;
-
- case TONE_CALL_ENDED:
- toneType = ToneGenerator.TONE_PROP_PROMPT;
- toneVolume = TONE_RELATIVE_VOLUME_HIPRI;
- toneLengthMillis = 200;
- break;
case TONE_VOICE_PRIVACY:
toneType = ToneGenerator.TONE_CDMA_ALERT_NETWORK_LITE;
toneVolume = TONE_RELATIVE_VOLUME_HIPRI;
toneLengthMillis = 5000;
break;
- case TONE_REORDER:
- toneType = ToneGenerator.TONE_CDMA_REORDER;
- toneVolume = TONE_RELATIVE_VOLUME_HIPRI;
- toneLengthMillis = 4000;
- break;
- case TONE_INTERCEPT:
- toneType = ToneGenerator.TONE_CDMA_ABBR_INTERCEPT;
- toneVolume = TONE_RELATIVE_VOLUME_LOPRI;
- toneLengthMillis = 500;
- break;
- case TONE_CDMA_DROP:
- case TONE_OUT_OF_SERVICE:
- toneType = ToneGenerator.TONE_CDMA_CALLDROP_LITE;
- toneVolume = TONE_RELATIVE_VOLUME_LOPRI;
- toneLengthMillis = 375;
- break;
- case TONE_REDIAL:
- toneType = ToneGenerator.TONE_CDMA_ALERT_AUTOREDIAL_LITE;
- toneVolume = TONE_RELATIVE_VOLUME_LOPRI;
- toneLengthMillis = 5000;
- break;
- case TONE_UNOBTAINABLE_NUMBER:
- toneType = ToneGenerator.TONE_SUP_ERROR;
- toneVolume = TONE_RELATIVE_VOLUME_HIPRI;
- toneLengthMillis = 4000;
- break;
default:
throw new IllegalArgumentException("Bad toneId: " + mToneId);
}
diff --git a/src/com/android/phone/CallerInfoCache.java b/src/com/android/phone/CallerInfoCache.java
deleted file mode 100644
index 2707c7c..0000000
--- a/src/com/android/phone/CallerInfoCache.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Copyright (C) 2012 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.database.Cursor;
-import android.os.AsyncTask;
-import android.os.PowerManager;
-import android.os.SystemProperties;
-import android.provider.ContactsContract.CommonDataKinds.Callable;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Data;
-import android.telephony.PhoneNumberUtils;
-import android.util.Log;
-
-import java.util.HashMap;
-import java.util.Map.Entry;
-
-/**
- * Holds "custom ringtone" and "send to voicemail" information for each contact as a fallback of
- * contacts database. The cached information is refreshed periodically and used when database
- * lookup (via ContentResolver) takes longer time than expected.
- *
- * The data inside this class shouldn't be treated as "primary"; they may not reflect the
- * latest information stored in the original database.
- */
-public class CallerInfoCache {
- private static final String LOG_TAG = CallerInfoCache.class.getSimpleName();
- private static final boolean DBG =
- (PhoneGlobals.DBG_LEVEL >= 1) && (SystemProperties.getInt("ro.debuggable", 0) == 1);
-
- /** This must not be set to true when submitting changes. */
- private static final boolean VDBG = false;
-
- public static final int MESSAGE_UPDATE_CACHE = 0;
-
- // Assuming DATA.DATA1 corresponds to Phone.NUMBER and SipAddress.ADDRESS, we just use
- // Data columns as much as we can. One exception: because normalized numbers won't be used in
- // SIP cases, Phone.NORMALIZED_NUMBER is used as is instead of using Data.
- private static final String[] PROJECTION = new String[] {
- Data.DATA1, // 0
- Phone.NORMALIZED_NUMBER, // 1
- Data.CUSTOM_RINGTONE, // 2
- Data.SEND_TO_VOICEMAIL // 3
- };
-
- private static final int INDEX_NUMBER = 0;
- private static final int INDEX_NORMALIZED_NUMBER = 1;
- private static final int INDEX_CUSTOM_RINGTONE = 2;
- private static final int INDEX_SEND_TO_VOICEMAIL = 3;
-
- private static final String SELECTION = "("
- + "(" + Data.CUSTOM_RINGTONE + " IS NOT NULL OR " + Data.SEND_TO_VOICEMAIL + "=1)"
- + " AND " + Data.DATA1 + " IS NOT NULL)";
-
- public static class CacheEntry {
- public final String customRingtone;
- public final boolean sendToVoicemail;
- public CacheEntry(String customRingtone, boolean shouldSendToVoicemail) {
- this.customRingtone = customRingtone;
- this.sendToVoicemail = shouldSendToVoicemail;
- }
-
- @Override
- public String toString() {
- return "ringtone: " + customRingtone + ", " + sendToVoicemail;
- }
- }
-
- private class CacheAsyncTask extends AsyncTask<Void, Void, Void> {
-
- private PowerManager.WakeLock mWakeLock;
-
- /**
- * Call {@link PowerManager.WakeLock#acquire} and call {@link AsyncTask#execute(Object...)},
- * guaranteeing the lock is held during the asynchronous task.
- */
- public void acquireWakeLockAndExecute() {
- // Prepare a separate partial WakeLock than what PhoneApp has so to avoid
- // unnecessary conflict.
- PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
- mWakeLock.acquire();
- execute();
- }
-
- @Override
- protected Void doInBackground(Void... params) {
- if (DBG) log("Start refreshing cache.");
- refreshCacheEntry();
- return null;
- }
-
- @Override
- protected void onPostExecute(Void result) {
- if (VDBG) log("CacheAsyncTask#onPostExecute()");
- super.onPostExecute(result);
- releaseWakeLock();
- }
-
- @Override
- protected void onCancelled(Void result) {
- if (VDBG) log("CacheAsyncTask#onCanceled()");
- super.onCancelled(result);
- releaseWakeLock();
- }
-
- private void releaseWakeLock() {
- if (mWakeLock != null && mWakeLock.isHeld()) {
- mWakeLock.release();
- }
- }
- }
-
- private final Context mContext;
-
- /**
- * The mapping from number to CacheEntry.
- *
- * The number will be:
- * - last 7 digits of each "normalized phone number when it is for PSTN phone call, or
- * - a full SIP address for SIP call
- *
- * When cache is being refreshed, this whole object will be replaced with a newer object,
- * instead of updating elements inside the object. "volatile" is used to make
- * {@link #getCacheEntry(String)} access to the newer one every time when the object is
- * being replaced.
- */
- private volatile HashMap<String, CacheEntry> mNumberToEntry;
-
- /**
- * Used to remember if the previous task is finished or not. Should be set to null when done.
- */
- private CacheAsyncTask mCacheAsyncTask;
-
- public static CallerInfoCache init(Context context) {
- if (DBG) log("init()");
- CallerInfoCache cache = new CallerInfoCache(context);
- // The first cache should be available ASAP.
- cache.startAsyncCache();
- return cache;
- }
-
- private CallerInfoCache(Context context) {
- mContext = context;
- mNumberToEntry = new HashMap<String, CacheEntry>();
- }
-
- /* package */ void startAsyncCache() {
- if (DBG) log("startAsyncCache");
-
- if (mCacheAsyncTask != null) {
- Log.w(LOG_TAG, "Previous cache task is remaining.");
- mCacheAsyncTask.cancel(true);
- }
- mCacheAsyncTask = new CacheAsyncTask();
- mCacheAsyncTask.acquireWakeLockAndExecute();
- }
-
- private void refreshCacheEntry() {
- if (VDBG) log("refreshCacheEntry() started");
-
- // There's no way to know which part of the database was updated. Also we don't want
- // to block incoming calls asking for the cache. So this method just does full query
- // and replaces the older cache with newer one. To refrain from blocking incoming calls,
- // it keeps older one as much as it can, and replaces it with newer one inside a very small
- // synchronized block.
-
- Cursor cursor = null;
- try {
- cursor = mContext.getContentResolver().query(Callable.CONTENT_URI,
- PROJECTION, SELECTION, null, null);
- if (cursor != null) {
- // We don't want to block real in-coming call, so prepare a completely fresh
- // cache here again, and replace it with older one.
- final HashMap<String, CacheEntry> newNumberToEntry =
- new HashMap<String, CacheEntry>(cursor.getCount());
-
- while (cursor.moveToNext()) {
- final String number = cursor.getString(INDEX_NUMBER);
- String normalizedNumber = cursor.getString(INDEX_NORMALIZED_NUMBER);
- if (normalizedNumber == null) {
- // There's no guarantee normalized numbers are available every time and
- // it may become null sometimes. Try formatting the original number.
- normalizedNumber = PhoneNumberUtils.normalizeNumber(number);
- }
- final String customRingtone = cursor.getString(INDEX_CUSTOM_RINGTONE);
- final boolean sendToVoicemail = cursor.getInt(INDEX_SEND_TO_VOICEMAIL) == 1;
-
- if (PhoneNumberUtils.isUriNumber(number)) {
- // SIP address case
- putNewEntryWhenAppropriate(
- newNumberToEntry, number, customRingtone, sendToVoicemail);
- } else {
- // PSTN number case
- // Each normalized number may or may not have full content of the number.
- // Contacts database may contain +15001234567 while a dialed number may be
- // just 5001234567. Also we may have inappropriate country
- // code in some cases (e.g. when the location of the device is inconsistent
- // with the device's place). So to avoid confusion we just rely on the last
- // 7 digits here. It may cause some kind of wrong behavior, which is
- // unavoidable anyway in very rare cases..
- final int length = normalizedNumber.length();
- final String key = length > 7
- ? normalizedNumber.substring(length - 7, length)
- : normalizedNumber;
- putNewEntryWhenAppropriate(
- newNumberToEntry, key, customRingtone, sendToVoicemail);
- }
- }
-
- if (VDBG) {
- Log.d(LOG_TAG, "New cache size: " + newNumberToEntry.size());
- for (Entry<String, CacheEntry> entry : newNumberToEntry.entrySet()) {
- Log.d(LOG_TAG, "Number: " + entry.getKey() + " -> " + entry.getValue());
- }
- }
-
- mNumberToEntry = newNumberToEntry;
-
- if (DBG) {
- log("Caching entries are done. Total: " + newNumberToEntry.size());
- }
- } else {
- // Let's just wait for the next refresh..
- //
- // If the cursor became null at that exact moment, probably we don't want to
- // drop old cache. Also the case is fairly rare in usual cases unless acore being
- // killed, so we don't take care much of this case.
- Log.w(LOG_TAG, "cursor is null");
- }
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
-
- if (VDBG) log("refreshCacheEntry() ended");
- }
-
- private void putNewEntryWhenAppropriate(HashMap<String, CacheEntry> newNumberToEntry,
- String numberOrSipAddress, String customRingtone, boolean sendToVoicemail) {
- if (newNumberToEntry.containsKey(numberOrSipAddress)) {
- // There may be duplicate entries here and we should prioritize
- // "send-to-voicemail" flag in any case.
- final CacheEntry entry = newNumberToEntry.get(numberOrSipAddress);
- if (!entry.sendToVoicemail && sendToVoicemail) {
- newNumberToEntry.put(numberOrSipAddress,
- new CacheEntry(customRingtone, sendToVoicemail));
- }
- } else {
- newNumberToEntry.put(numberOrSipAddress,
- new CacheEntry(customRingtone, sendToVoicemail));
- }
- }
-
- /**
- * Returns CacheEntry for the given number (PSTN number or SIP address).
- *
- * @param number OK to be unformatted.
- * @return CacheEntry to be used. Maybe null if there's no cache here. Note that this may
- * return null when the cache itself is not ready. BE CAREFUL. (or might be better to throw
- * an exception)
- */
- public CacheEntry getCacheEntry(String number) {
- if (mNumberToEntry == null) {
- // Very unusual state. This implies the cache isn't ready during the request, while
- // it should be prepared on the boot time (i.e. a way before even the first request).
- Log.w(LOG_TAG, "Fallback cache isn't ready.");
- return null;
- }
-
- CacheEntry entry;
- if (PhoneNumberUtils.isUriNumber(number)) {
- if (VDBG) log("Trying to lookup " + number);
-
- entry = mNumberToEntry.get(number);
- } else {
- final String normalizedNumber = PhoneNumberUtils.normalizeNumber(number);
- final int length = normalizedNumber.length();
- final String key =
- (length > 7 ? normalizedNumber.substring(length - 7, length)
- : normalizedNumber);
- if (VDBG) log("Trying to lookup " + key);
-
- entry = mNumberToEntry.get(key);
- }
- if (VDBG) log("Obtained " + entry);
- return entry;
- }
-
- private static void log(String msg) {
- Log.d(LOG_TAG, msg);
- }
-}
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index 45ca974..8a007b6 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -349,7 +349,7 @@
try {
ICarrierService carrierService =
ICarrierService.Stub.asInterface(conn.service);
- carrierService.getCarrierConfig(carrierId, resultReceiver);
+ carrierService.getCarrierConfig(phoneId, carrierId, resultReceiver);
logdWithLocalLog("Fetch config for default app: "
+ mPlatformCarrierConfigPackage
+ " carrierid: " + carrierId.toString());
@@ -489,7 +489,7 @@
try {
ICarrierService carrierService =
ICarrierService.Stub.asInterface(conn.service);
- carrierService.getCarrierConfig(carrierId, resultReceiver);
+ carrierService.getCarrierConfig(phoneId, carrierId, resultReceiver);
logdWithLocalLog("Fetch config for carrier app: "
+ getCarrierPackageForPhoneId(phoneId)
+ " carrierid: " + carrierId.toString());
@@ -657,7 +657,7 @@
try {
ICarrierService carrierService =
ICarrierService.Stub.asInterface(conn.service);
- carrierService.getCarrierConfig(null, resultReceiver);
+ carrierService.getCarrierConfig(phoneId, null, resultReceiver);
logdWithLocalLog("Fetch no sim config from default app: "
+ mPlatformCarrierConfigPackage);
} catch (RemoteException e) {
diff --git a/src/com/android/phone/CdmaCallWaitingPreference.java b/src/com/android/phone/CdmaCallWaitingPreference.java
index 3713b19..6ff47d2 100644
--- a/src/com/android/phone/CdmaCallWaitingPreference.java
+++ b/src/com/android/phone/CdmaCallWaitingPreference.java
@@ -78,7 +78,7 @@
public void onClick() {
super.onClick();
- AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
+ AlertDialog.Builder builder = FrameworksUtils.makeAlertDialogBuilder(mContext);
builder.setTitle(mContext.getText(R.string.cdma_call_waiting));
builder.setMessage(mContext.getText(R.string.enable_cdma_call_waiting_setting));
builder.setPositiveButton(R.string.enable_cdma_cw, new DialogInterface.OnClickListener() {
diff --git a/src/com/android/phone/ChangeIccPinScreen.java b/src/com/android/phone/ChangeIccPinScreen.java
index 70bf431..5369aa3 100644
--- a/src/com/android/phone/ChangeIccPinScreen.java
+++ b/src/com/android/phone/ChangeIccPinScreen.java
@@ -277,7 +277,7 @@
private AlertDialog mPUKAlert;
private void displayPUKAlert () {
if (mPUKAlert == null) {
- mPUKAlert = new AlertDialog.Builder(this)
+ mPUKAlert = FrameworksUtils.makeAlertDialogBuilder(this)
.setMessage (R.string.puk_requested)
.setCancelable(false)
.show();
diff --git a/src/com/android/phone/EmergencyCallbackModeExitDialog.java b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
index adba850..fc0e513 100644
--- a/src/com/android/phone/EmergencyCallbackModeExitDialog.java
+++ b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
@@ -30,6 +30,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
+import android.icu.text.MessageFormat;
import android.os.AsyncResult;
import android.os.Bundle;
import android.os.CountDownTimer;
@@ -43,6 +44,9 @@
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.TelephonyIntents;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* Displays dialog that enables users to exit Emergency Callback Mode
*
@@ -297,20 +301,22 @@
int minutes = (int)(millisUntilFinished / 60000);
String time = String.format("%d:%02d", minutes,
(millisUntilFinished % 60000) / 1000);
+ Map<String, Object> msgArgs = new HashMap<>();
+ msgArgs.put("count", minutes);
switch (mDialogType) {
case EXIT_ECM_BLOCK_OTHERS:
- return String.format(getResources().getQuantityText(
- R.plurals.alert_dialog_not_avaialble_in_ecm, minutes).toString(), time);
+ return MessageFormat.format(getResources().getString(
+ R.string.alert_dialog_not_avaialble_in_ecm, time), msgArgs);
case EXIT_ECM_DIALOG:
boolean shouldRestrictData = mPhone.getImsPhone() != null
&& mPhone.getImsPhone().isInImsEcm();
- return String.format(getResources().getQuantityText(
+ return MessageFormat.format(getResources().getString(
// During IMS ECM, data restriction hint should be removed.
shouldRestrictData
- ? R.plurals.alert_dialog_exit_ecm_without_data_restriction_hint
- : R.plurals.alert_dialog_exit_ecm,
- minutes).toString(), time);
+ ? R.string.alert_dialog_exit_ecm_without_data_restriction_hint
+ : R.string.alert_dialog_exit_ecm,
+ time), msgArgs);
}
return null;
}
diff --git a/src/com/android/phone/FrameworksUtils.java b/src/com/android/phone/FrameworksUtils.java
new file mode 100644
index 0000000..dcf10bd
--- /dev/null
+++ b/src/com/android/phone/FrameworksUtils.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2021 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.res.Configuration;
+
+/**
+ * This class provides utility functions over framework APIs
+ */
+public class FrameworksUtils {
+ /**
+ * Create a new instance of {@link AlertDialog.Builder}.
+ * @param context reference to a Context
+ * @return an instance of AlertDialog.Builder
+ */
+ public static AlertDialog.Builder makeAlertDialogBuilder(Context context) {
+ boolean isDarkTheme = (context.getResources().getConfiguration().uiMode
+ & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
+ return new AlertDialog.Builder(context, isDarkTheme
+ ? android.R.style.Theme_DeviceDefault_Dialog_Alert : 0);
+ }
+}
diff --git a/src/com/android/phone/ImsProvisioningController.java b/src/com/android/phone/ImsProvisioningController.java
new file mode 100644
index 0000000..acedf22
--- /dev/null
+++ b/src/com/android/phone/ImsProvisioningController.java
@@ -0,0 +1,1508 @@
+/*
+ * Copyright (C) 2021 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.telephony.ims.ProvisioningManager.KEY_EAB_PROVISIONING_STATUS;
+import static android.telephony.ims.ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE;
+import static android.telephony.ims.ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS;
+import static android.telephony.ims.ProvisioningManager.KEY_VT_PROVISIONING_STATUS;
+import static android.telephony.ims.ProvisioningManager.PROVISIONING_VALUE_DISABLED;
+import static android.telephony.ims.ProvisioningManager.PROVISIONING_VALUE_ENABLED;
+import static android.telephony.ims.feature.ImsFeature.FEATURE_MMTEL;
+import static android.telephony.ims.feature.ImsFeature.FEATURE_RCS;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_CALL_COMPOSER;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_SMS;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE;
+import static android.telephony.ims.feature.RcsFeature.RcsImsCapabilities.CAPABILITY_TYPE_OPTIONS_UCE;
+import static android.telephony.ims.feature.RcsFeature.RcsImsCapabilities.CAPABILITY_TYPE_PRESENCE_UCE;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_LTE;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_MAX;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_NONE;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_NR;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.os.AsyncResult;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.os.Message;
+import android.os.PersistableBundle;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.telephony.CarrierConfigManager;
+import android.telephony.CarrierConfigManager.Ims;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyRegistryManager;
+import android.telephony.ims.ProvisioningManager;
+import android.telephony.ims.aidl.IFeatureProvisioningCallback;
+import android.telephony.ims.aidl.IImsConfig;
+import android.telephony.ims.feature.MmTelFeature.MmTelCapabilities;
+import android.telephony.ims.feature.RcsFeature.RcsImsCapabilities;
+import android.telephony.ims.stub.ImsConfigImplBase;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
+import android.util.SparseArray;
+
+import com.android.ims.FeatureConnector;
+import com.android.ims.ImsConfig;
+import com.android.ims.ImsException;
+import com.android.ims.ImsManager;
+import com.android.ims.RcsFeatureManager;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.PhoneConfigurationManager;
+import com.android.internal.telephony.util.HandlerExecutor;
+import com.android.telephony.Rlog;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.concurrent.Executor;
+
+/**
+ * Provides APIs for MMTEL and RCS provisioning status. This class handles provisioning status and
+ * notifies the status changing for each capability
+ * {{@link MmTelCapabilities.MmTelCapability} for MMTel services}
+ * {{@link RcsImsCapabilities.RcsImsCapabilityFlag} for RCS services}
+ */
+public class ImsProvisioningController {
+ private static final String TAG = "ImsProvisioningController";
+ private static final int INVALID_VALUE = -1;
+
+ private static final int EVENT_SUB_CHANGED = 1;
+ private static final int EVENT_PROVISIONING_CAPABILITY_CHANGED = 2;
+ @VisibleForTesting
+ protected static final int EVENT_MULTI_SIM_CONFIGURATION_CHANGE = 3;
+
+ // Provisioning Keys that are handled via AOSP cache and not sent to the ImsService
+ private static final int[] LOCAL_IMS_CONFIG_KEYS = {
+ KEY_VOLTE_PROVISIONING_STATUS,
+ KEY_VT_PROVISIONING_STATUS,
+ KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE,
+ KEY_EAB_PROVISIONING_STATUS
+ };
+ private static final int[] LOCAL_RADIO_TECHS = {
+ REGISTRATION_TECH_LTE,
+ REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM,
+ REGISTRATION_TECH_NR
+ };
+
+ private static final int MMTEL_CAPABILITY_MIN = MmTelCapabilities.CAPABILITY_TYPE_NONE;
+ private static final int MMTEL_CAPABILITY_MAX = MmTelCapabilities.CAPABILITY_TYPE_MAX;
+
+ private static final int RCS_CAPABILITY_MIN = RcsImsCapabilities.CAPABILITY_TYPE_NONE;
+ private static final int RCS_CAPABILITY_MAX = RcsImsCapabilities.CAPABILITY_TYPE_MAX;
+
+ private static final int[] LOCAL_MMTEL_CAPABILITY = {
+ CAPABILITY_TYPE_VOICE,
+ CAPABILITY_TYPE_VIDEO,
+ CAPABILITY_TYPE_UT,
+ CAPABILITY_TYPE_SMS,
+ CAPABILITY_TYPE_CALL_COMPOSER
+ };
+
+ /**
+ * map the MmTelCapabilities.MmTelCapability and
+ * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_VOICE_INT
+ * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_VIDEO_INT
+ * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_UT_INT
+ * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_SMS_INT
+ * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_CALL_COMPOSER_INT
+ */
+ private static final Map<Integer, String> KEYS_MMTEL_CAPABILITY = Map.of(
+ CAPABILITY_TYPE_VOICE, Ims.KEY_CAPABILITY_TYPE_VOICE_INT_ARRAY,
+ CAPABILITY_TYPE_VIDEO, Ims.KEY_CAPABILITY_TYPE_VIDEO_INT_ARRAY,
+ CAPABILITY_TYPE_UT, Ims.KEY_CAPABILITY_TYPE_UT_INT_ARRAY,
+ CAPABILITY_TYPE_SMS, Ims.KEY_CAPABILITY_TYPE_SMS_INT_ARRAY,
+ CAPABILITY_TYPE_CALL_COMPOSER, Ims.KEY_CAPABILITY_TYPE_CALL_COMPOSER_INT_ARRAY
+ );
+
+ /**
+ * map the RcsImsCapabilities.RcsImsCapabilityFlag and
+ * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_OPTIONS_UCE
+ * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_PRESENCE_UCE
+ */
+ private static final Map<Integer, String> KEYS_RCS_CAPABILITY = Map.of(
+ CAPABILITY_TYPE_OPTIONS_UCE, Ims.KEY_CAPABILITY_TYPE_OPTIONS_UCE_INT_ARRAY,
+ CAPABILITY_TYPE_PRESENCE_UCE, Ims.KEY_CAPABILITY_TYPE_PRESENCE_UCE_INT_ARRAY
+ );
+
+ /**
+ * Create a FeatureConnector for this class to use to connect to an ImsManager.
+ */
+ @VisibleForTesting
+ public interface MmTelFeatureConnector {
+ /**
+ * Create a FeatureConnector for this class to use to connect to an ImsManager.
+ * @param listener will receive ImsManager instance.
+ * @param executor that the Listener callbacks will be called on.
+ * @return A FeatureConnector
+ */
+ FeatureConnector<ImsManager> create(Context context, int slotId,
+ String logPrefix, FeatureConnector.Listener<ImsManager> listener,
+ Executor executor);
+ }
+
+ /**
+ * Create a FeatureConnector for this class to use to connect to an RcsFeatureManager.
+ */
+ @VisibleForTesting
+ public interface RcsFeatureConnector {
+ /**
+ * Create a FeatureConnector for this class to use to connect to an RcsFeatureManager.
+ * @param listener will receive RcsFeatureManager instance.
+ * @param executor that the Listener callbacks will be called on.
+ * @return A FeatureConnector
+ */
+ FeatureConnector<RcsFeatureManager> create(Context context, int slotId,
+ FeatureConnector.Listener<RcsFeatureManager> listener,
+ Executor executor, String logPrefix);
+ }
+
+ private static ImsProvisioningController sInstance;
+
+ private final PhoneGlobals mApp;
+ private final Handler mHandler;
+ private final CarrierConfigManager mCarrierConfigManager;
+ private final SubscriptionManager mSubscriptionManager;
+ private final TelephonyRegistryManager mTelephonyRegistryManager;
+ private final MmTelFeatureConnector mMmTelFeatureConnector;
+ private final RcsFeatureConnector mRcsFeatureConnector;
+
+ // maps a slotId to a list of MmTelFeatureListeners
+ private final SparseArray<MmTelFeatureListener> mMmTelFeatureListenersSlotMap =
+ new SparseArray<>();
+ // maps a slotId to a list of RcsFeatureListeners
+ private final SparseArray<RcsFeatureListener> mRcsFeatureListenersSlotMap =
+ new SparseArray<>();
+ // map a slotId to a list of ProvisioningCallbackManager
+ private final SparseArray<ProvisioningCallbackManager> mProvisioningCallbackManagersSlotMap =
+ new SparseArray<>();
+ private final ImsProvisioningLoader mImsProvisioningLoader;
+
+ private int mNumSlot;
+
+ /**
+ * This class contains the provisioning status to notify changes.
+ * {{@link MmTelCapabilities.MmTelCapability} for MMTel services}
+ * {{@link RcsImsCapabilities.RcsImsCapabilityFlag} for RCS services}
+ * {{@link ImsRegistrationImplBase.ImsRegistrationTech} for Registration tech}
+ */
+ private static final class FeatureProvisioningData {
+ public final int mCapability;
+ public final int mTech;
+ public final boolean mProvisioned;
+ public final boolean mIsMmTel;
+
+ FeatureProvisioningData(int capability, int tech, boolean provisioned, boolean isMmTel) {
+ mCapability = capability;
+ mTech = tech;
+ mProvisioned = provisioned;
+ mIsMmTel = isMmTel;
+ }
+ }
+
+ private final class MessageHandler extends Handler {
+ private static final String LOG_PREFIX = "Handler";
+ MessageHandler(Looper looper) {
+ super(looper);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case EVENT_SUB_CHANGED:
+ onSubscriptionsChanged();
+ break;
+ case EVENT_PROVISIONING_CAPABILITY_CHANGED:
+ try {
+ mProvisioningCallbackManagersSlotMap.get(msg.arg1)
+ .notifyProvisioningCapabilityChanged(
+ (FeatureProvisioningData) msg.obj);
+ } catch (NullPointerException e) {
+ logw(LOG_PREFIX, msg.arg1,
+ "can not find callback manager message" + msg.what);
+ }
+ break;
+ case EVENT_MULTI_SIM_CONFIGURATION_CHANGE:
+ int activeModemCount = (int) ((AsyncResult) msg.obj).result;
+ onMultiSimConfigChanged(activeModemCount);
+ break;
+ default:
+ log("unknown message " + msg);
+ break;
+ }
+ }
+ }
+
+ private final SubscriptionManager.OnSubscriptionsChangedListener mSubChangedListener =
+ new SubscriptionManager.OnSubscriptionsChangedListener() {
+ @Override
+ public void onSubscriptionsChanged() {
+ if (!mHandler.hasMessages(EVENT_SUB_CHANGED)) {
+ mHandler.sendEmptyMessage(EVENT_SUB_CHANGED);
+ }
+ }
+ };
+
+ private final class ProvisioningCallbackManager {
+ private static final String LOG_PREFIX = "ProvisioningCallbackManager";
+ private RemoteCallbackList<IFeatureProvisioningCallback> mIFeatureProvisioningCallbackList;
+ private int mSubId;
+ private int mSlotId;
+
+ ProvisioningCallbackManager(int slotId) {
+ mIFeatureProvisioningCallbackList =
+ new RemoteCallbackList<IFeatureProvisioningCallback>();
+ mSlotId = slotId;
+ mSubId = getSubId(slotId);
+ log(LOG_PREFIX, mSlotId, "ProvisioningCallbackManager create");
+ }
+
+ public void clear() {
+ log(LOG_PREFIX, mSlotId, "ProvisioningCallbackManager clear ");
+
+ mIFeatureProvisioningCallbackList.kill();
+
+ // All registered callbacks are unregistered, and the list is disabled
+ // need to create again
+ mIFeatureProvisioningCallbackList =
+ new RemoteCallbackList<IFeatureProvisioningCallback>();
+ }
+
+ public void registerCallback(IFeatureProvisioningCallback localCallback) {
+ if (!mIFeatureProvisioningCallbackList.register(localCallback, (Object) mSubId)) {
+ log(LOG_PREFIX, mSlotId, "registration callback fail");
+ }
+ }
+
+ public void unregisterCallback(IFeatureProvisioningCallback localCallback) {
+ mIFeatureProvisioningCallbackList.unregister(localCallback);
+ }
+
+ public void setSubId(int subId) {
+ if (mSubId == subId) {
+ log(LOG_PREFIX, mSlotId, "subId is not changed ");
+ return;
+ }
+
+ mSubId = subId;
+ mSlotId = getSlotId(subId);
+
+ // subId changed means the registered callbacks are not available.
+ clear();
+ }
+
+ public boolean hasCallblacks() {
+ int size = mIFeatureProvisioningCallbackList.beginBroadcast();
+ mIFeatureProvisioningCallbackList.finishBroadcast();
+
+ return (size > 0);
+ }
+
+ public void notifyProvisioningCapabilityChanged(FeatureProvisioningData data) {
+ int size = mIFeatureProvisioningCallbackList.beginBroadcast();
+ for (int index = 0; index < size; index++) {
+ try {
+ IFeatureProvisioningCallback imsFeatureProvisioningCallback =
+ mIFeatureProvisioningCallbackList.getBroadcastItem(index);
+
+ // MMTEL
+ if (data.mIsMmTel
+ && Arrays.stream(LOCAL_MMTEL_CAPABILITY)
+ .anyMatch(value -> value == data.mCapability)) {
+ imsFeatureProvisioningCallback.onFeatureProvisioningChanged(
+ data.mCapability, data.mTech, data.mProvisioned);
+ logi(LOG_PREFIX, mSlotId, "notifyProvisioningCapabilityChanged : "
+ + "onFeatureProvisioningChanged"
+ + " capability " + data.mCapability
+ + " tech " + data.mTech
+ + " isProvisioned " + data.mProvisioned);
+ } else if (data.mCapability == CAPABILITY_TYPE_PRESENCE_UCE) {
+ imsFeatureProvisioningCallback.onRcsFeatureProvisioningChanged(
+ data.mCapability, data.mTech, data.mProvisioned);
+ logi(LOG_PREFIX, mSlotId, "notifyProvisioningCapabilityChanged : "
+ + "onRcsFeatureProvisioningChanged"
+ + " capability " + data.mCapability
+ + " tech " + data.mTech
+ + " isProvisioned " + data.mProvisioned);
+ } else {
+ loge(LOG_PREFIX, mSlotId, "notifyProvisioningCapabilityChanged : "
+ + "unknown capability "
+ + data.mCapability);
+ }
+ } catch (RemoteException e) {
+ loge(LOG_PREFIX, mSlotId,
+ "notifyProvisioningChanged: callback #" + index + " failed");
+ }
+ }
+ mIFeatureProvisioningCallbackList.finishBroadcast();
+ }
+ }
+
+ private final class MmTelFeatureListener implements FeatureConnector.Listener<ImsManager> {
+ private static final String LOG_PREFIX = "MmTelFeatureListener";
+ private FeatureConnector<ImsManager> mConnector;
+ private ImsManager mImsManager;
+ private boolean mReady = false;
+ // stores whether the initial provisioning key value should be notified to ImsService
+ private boolean mRequiredNotify = false;
+ private int mSubId;
+ private int mSlotId;
+
+ MmTelFeatureListener(int slotId) {
+ log(LOG_PREFIX, slotId, "created");
+
+ mSlotId = slotId;
+ mSubId = getSubId(slotId);
+ mConnector = mMmTelFeatureConnector.create(
+ mApp, slotId, TAG, this, new HandlerExecutor(mHandler));
+ mConnector.connect();
+ }
+
+ public void setSubId(int subId) {
+ if (mRequiredNotify && mReady) {
+ mRequiredNotify = false;
+ setInitialProvisioningKeys(subId);
+ }
+ if (mSubId == subId) {
+ log(LOG_PREFIX, mSlotId, "subId is not changed");
+ return;
+ }
+
+ mSubId = subId;
+ mSlotId = getSlotId(subId);
+ }
+
+ public void destroy() {
+ log("destroy");
+ mConnector.disconnect();
+ mConnector = null;
+ mReady = false;
+ mImsManager = null;
+ }
+
+ public @Nullable ImsManager getImsManager() {
+ return mImsManager;
+ }
+
+ @Override
+ public void connectionReady(ImsManager manager, int subId) {
+ log(LOG_PREFIX, mSlotId, "connection ready");
+ mReady = true;
+ mImsManager = manager;
+
+ onMmTelAvailable();
+ }
+
+ @Override
+ public void connectionUnavailable(int reason) {
+ log(LOG_PREFIX, mSlotId, "connection unavailable " + reason);
+
+ mReady = false;
+ mImsManager = null;
+
+ // keep the callback for other reason
+ if (reason == FeatureConnector.UNAVAILABLE_REASON_IMS_UNSUPPORTED) {
+ onMmTelUnavailable();
+ }
+ }
+
+ public int setProvisioningValue(int key, int value) {
+ int retVal = ImsConfigImplBase.CONFIG_RESULT_FAILED;
+
+ if (!mReady) {
+ loge(LOG_PREFIX, mSlotId, "service is Unavailable");
+ return retVal;
+ }
+ try {
+ // getConfigInterface() will return not null or throw the ImsException
+ // need not null checking
+ ImsConfig imsConfig = getImsConfig(mImsManager);
+ retVal = imsConfig.setConfig(key, value);
+ log(LOG_PREFIX, mSlotId, "setConfig called with key " + key + " value " + value);
+ } catch (ImsException e) {
+ logw(LOG_PREFIX, mSlotId,
+ "setConfig operation failed for key =" + key
+ + ", value =" + value + ". Exception:" + e.getMessage());
+ }
+ return retVal;
+ }
+
+ public int getProvisioningValue(int key) {
+ if (!mReady) {
+ loge(LOG_PREFIX, mSlotId, "service is Unavailable");
+ return INVALID_VALUE;
+ }
+
+ int retValue = INVALID_VALUE;
+ try {
+ // getConfigInterface() will return not null or throw the ImsException
+ // need not null checking
+ ImsConfig imsConfig = getImsConfig(mImsManager);
+ retValue = imsConfig.getConfigInt(key);
+ } catch (ImsException e) {
+ logw(LOG_PREFIX, mSlotId,
+ "getConfig operation failed for key =" + key
+ + ", value =" + retValue + ". Exception:" + e.getMessage());
+ }
+ return retValue;
+ }
+
+ public void onMmTelAvailable() {
+ log(LOG_PREFIX, mSlotId, "onMmTelAvailable");
+
+ if (isValidSubId(mSubId)) {
+ mRequiredNotify = false;
+
+ // notify provisioning key value to ImsService
+ setInitialProvisioningKeys(mSubId);
+ } else {
+ // wait until subId is valid
+ mRequiredNotify = true;
+ }
+ }
+
+ public void onMmTelUnavailable() {
+ log(LOG_PREFIX, mSlotId, "onMmTelUnavailable");
+
+ try {
+ // delete all callbacks reference from ProvisioningManager
+ mProvisioningCallbackManagersSlotMap.get(getSlotId(mSubId)).clear();
+ } catch (NullPointerException e) {
+ logw(LOG_PREFIX, getSlotId(mSubId), "can not find callback manager to clear");
+ }
+ }
+
+ private void setInitialProvisioningKeys(int subId) {
+ boolean required;
+ int value = ImsProvisioningLoader.STATUS_NOT_SET;
+
+ // updating KEY_VOLTE_PROVISIONING_STATUS
+ required = isProvisioningRequired(subId, CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE,
+ /*isMmTel*/true);
+ log(LOG_PREFIX, mSlotId,
+ "setInitialProvisioningKeys provisioning required(voice, lte) " + required);
+ if (required) {
+ value = mImsProvisioningLoader.getProvisioningStatus(subId, FEATURE_MMTEL,
+ CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE);
+ if (value != ImsProvisioningLoader.STATUS_NOT_SET) {
+ value = (value == ImsProvisioningLoader.STATUS_PROVISIONED)
+ ? PROVISIONING_VALUE_ENABLED : PROVISIONING_VALUE_DISABLED;
+ setProvisioningValue(KEY_VOLTE_PROVISIONING_STATUS, value);
+ }
+ }
+
+ // updating KEY_VT_PROVISIONING_STATUS
+ required = isProvisioningRequired(subId, CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_LTE,
+ /*isMmTel*/true);
+ log(LOG_PREFIX, mSlotId,
+ "setInitialProvisioningKeys provisioning required(video, lte) " + required);
+ if (required) {
+ value = mImsProvisioningLoader.getProvisioningStatus(subId, FEATURE_MMTEL,
+ CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_LTE);
+ if (value != ImsProvisioningLoader.STATUS_NOT_SET) {
+ value = (value == ImsProvisioningLoader.STATUS_PROVISIONED)
+ ? PROVISIONING_VALUE_ENABLED : PROVISIONING_VALUE_DISABLED;
+ setProvisioningValue(KEY_VT_PROVISIONING_STATUS, value);
+ }
+ }
+
+ // updating KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE
+ required = isProvisioningRequired(subId, CAPABILITY_TYPE_VOICE,
+ REGISTRATION_TECH_IWLAN, /*isMmTel*/true);
+ log(LOG_PREFIX, mSlotId,
+ "setInitialProvisioningKeys provisioning required(voice, iwlan) " + required);
+ if (required) {
+ value = mImsProvisioningLoader.getProvisioningStatus(subId, FEATURE_MMTEL,
+ CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_IWLAN);
+ if (value != ImsProvisioningLoader.STATUS_NOT_SET) {
+ value = (value == ImsProvisioningLoader.STATUS_PROVISIONED)
+ ? PROVISIONING_VALUE_ENABLED : PROVISIONING_VALUE_DISABLED;
+ setProvisioningValue(KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE, value);
+ }
+ }
+ }
+ }
+
+ private final class RcsFeatureListener implements FeatureConnector.Listener<RcsFeatureManager> {
+ private static final String LOG_PREFIX = "RcsFeatureListener";
+ private FeatureConnector<RcsFeatureManager> mConnector;
+ private RcsFeatureManager mRcsFeatureManager;
+ private boolean mReady = false;
+ // stores whether the initial provisioning key value should be notified to ImsService
+ private boolean mRequiredNotify = false;
+ private int mSubId;
+ private int mSlotId;
+
+ RcsFeatureListener(int slotId) {
+ log(LOG_PREFIX, slotId, "created");
+
+ mSlotId = slotId;
+ mSubId = getSubId(slotId);
+ mConnector = mRcsFeatureConnector.create(
+ mApp, slotId, this, new HandlerExecutor(mHandler), TAG);
+ mConnector.connect();
+ }
+
+ public void setSubId(int subId) {
+ if (mRequiredNotify && mReady) {
+ mRequiredNotify = false;
+ setInitialProvisioningKeys(subId);
+ }
+ if (mSubId == subId) {
+ log(LOG_PREFIX, mSlotId, "subId is not changed");
+ return;
+ }
+
+ mSubId = subId;
+ mSlotId = getSlotId(subId);
+ }
+
+ public void destroy() {
+ log(LOG_PREFIX, mSlotId, "destroy");
+ mConnector.disconnect();
+ mConnector = null;
+ mReady = false;
+ mRcsFeatureManager = null;
+ }
+
+ @Override
+ public void connectionReady(RcsFeatureManager manager, int subId) {
+ log(LOG_PREFIX, mSlotId, "connection ready");
+ mReady = true;
+ mRcsFeatureManager = manager;
+
+ onRcsAvailable();
+ }
+
+ @Override
+ public void connectionUnavailable(int reason) {
+ log(LOG_PREFIX, mSlotId, "connection unavailable");
+ mReady = false;
+ mRcsFeatureManager = null;
+
+ // keep the callback for other reason
+ if (reason == FeatureConnector.UNAVAILABLE_REASON_IMS_UNSUPPORTED) {
+ onRcsUnavailable();
+ }
+ }
+
+ public int setProvisioningValue(int key, int value) {
+ int retVal = ImsConfigImplBase.CONFIG_RESULT_FAILED;
+
+ if (!mReady) {
+ loge(LOG_PREFIX, mSlotId, "service is Unavailable");
+ return retVal;
+ }
+
+ try {
+ // getConfigInterface() will return not null or throw the ImsException
+ // need not null checking
+ ImsConfig imsConfig = getImsConfig(mRcsFeatureManager.getConfig());
+ retVal = imsConfig.setConfig(key, value);
+ log(LOG_PREFIX, mSlotId, "setConfig called with key " + key + " value " + value);
+ } catch (ImsException e) {
+ logw(LOG_PREFIX, mSlotId,
+ "setConfig operation failed for key =" + key
+ + ", value =" + value + ". Exception:" + e.getMessage());
+ }
+ return retVal;
+ }
+
+ public int getProvisioningValue(int key) {
+ if (!mReady) {
+ loge(LOG_PREFIX, mSlotId, "service is Unavailable");
+ return INVALID_VALUE;
+ }
+
+ int retValue = INVALID_VALUE;
+ try {
+ // getConfigInterface() will return not null or throw the ImsException
+ // need not null checking
+ ImsConfig imsConfig = getImsConfig(mRcsFeatureManager.getConfig());
+ retValue = imsConfig.getConfigInt(key);
+ } catch (ImsException e) {
+ logw(LOG_PREFIX, mSlotId,
+ "getConfig operation failed for key =" + key
+ + ", value =" + retValue + ". Exception:" + e.getMessage());
+ }
+ return retValue;
+ }
+
+ public void onRcsAvailable() {
+ log(LOG_PREFIX, mSlotId, "onRcsAvailable");
+
+ if (isValidSubId(mSubId)) {
+ mRequiredNotify = false;
+
+ // notify provisioning key value to ImsService
+ setInitialProvisioningKeys(mSubId);
+ } else {
+ // wait until subId is valid
+ mRequiredNotify = true;
+ }
+ }
+
+ public void onRcsUnavailable() {
+ log(LOG_PREFIX, mSlotId, "onRcsUnavailable");
+
+ try {
+ // delete all callbacks reference from ProvisioningManager
+ mProvisioningCallbackManagersSlotMap.get(getSlotId(mSubId)).clear();
+ } catch (NullPointerException e) {
+ logw(LOG_PREFIX, getSlotId(mSubId), "can not find callback manager to clear");
+ }
+ }
+
+ private void setInitialProvisioningKeys(int subId) {
+ boolean required;
+ int value = ImsProvisioningLoader.STATUS_NOT_SET;
+
+ // KEY_EAB_PROVISIONING_STATUS
+ int capability = CAPABILITY_TYPE_PRESENCE_UCE;
+ // Assume that all radio techs have the same provisioning value
+ int tech = REGISTRATION_TECH_LTE;
+
+ required = isProvisioningRequired(subId, capability, tech, /*isMmTel*/false);
+ if (required) {
+ value = mImsProvisioningLoader.getProvisioningStatus(subId, FEATURE_RCS,
+ capability, tech);
+ if (value != ImsProvisioningLoader.STATUS_NOT_SET) {
+ value = (value == ImsProvisioningLoader.STATUS_PROVISIONED)
+ ? PROVISIONING_VALUE_ENABLED : PROVISIONING_VALUE_DISABLED;
+ setProvisioningValue(KEY_EAB_PROVISIONING_STATUS, value);
+ }
+ }
+ }
+ }
+
+ /**
+ * Do NOT use this directly, instead use {@link #getInstance()}.
+ */
+ @VisibleForTesting
+ public ImsProvisioningController(PhoneGlobals app, int numSlot, Looper looper,
+ MmTelFeatureConnector mmTelFeatureConnector, RcsFeatureConnector rcsFeatureConnector,
+ ImsProvisioningLoader imsProvisioningLoader) {
+ log("ImsProvisioningController");
+ mApp = app;
+ mNumSlot = numSlot;
+ mHandler = new MessageHandler(looper);
+ mMmTelFeatureConnector = mmTelFeatureConnector;
+ mRcsFeatureConnector = rcsFeatureConnector;
+ mCarrierConfigManager = mApp.getSystemService(CarrierConfigManager.class);
+ mSubscriptionManager = mApp.getSystemService(SubscriptionManager.class);
+ mTelephonyRegistryManager = mApp.getSystemService(TelephonyRegistryManager.class);
+ mTelephonyRegistryManager.addOnSubscriptionsChangedListener(
+ mSubChangedListener, mSubChangedListener.getHandlerExecutor());
+ mImsProvisioningLoader = imsProvisioningLoader;
+
+ PhoneConfigurationManager.registerForMultiSimConfigChange(mHandler,
+ EVENT_MULTI_SIM_CONFIGURATION_CHANGE, null);
+
+ initialize(numSlot);
+ }
+
+ private void initialize(int numSlot) {
+ for (int i = 0; i < numSlot; i++) {
+ MmTelFeatureListener m = new MmTelFeatureListener(i);
+ mMmTelFeatureListenersSlotMap.put(i, m);
+
+ RcsFeatureListener r = new RcsFeatureListener(i);
+ mRcsFeatureListenersSlotMap.put(i, r);
+
+ ProvisioningCallbackManager p = new ProvisioningCallbackManager(i);
+ mProvisioningCallbackManagersSlotMap.put(i, p);
+ }
+ }
+
+ private void onMultiSimConfigChanged(int newNumSlot) {
+ log("onMultiSimConfigChanged: NumSlot " + mNumSlot + " newNumSlot " + newNumSlot);
+
+ if (mNumSlot < newNumSlot) {
+ for (int i = mNumSlot; i < newNumSlot; i++) {
+ MmTelFeatureListener m = new MmTelFeatureListener(i);
+ mMmTelFeatureListenersSlotMap.put(i, m);
+
+ RcsFeatureListener r = new RcsFeatureListener(i);
+ mRcsFeatureListenersSlotMap.put(i, r);
+
+ ProvisioningCallbackManager p = new ProvisioningCallbackManager(i);
+ mProvisioningCallbackManagersSlotMap.put(i, p);
+ }
+ } else if (mNumSlot > newNumSlot) {
+ for (int i = (mNumSlot - 1); i > (newNumSlot - 1); i--) {
+ MmTelFeatureListener m = mMmTelFeatureListenersSlotMap.get(i);
+ mMmTelFeatureListenersSlotMap.remove(i);
+ m.destroy();
+
+ RcsFeatureListener r = mRcsFeatureListenersSlotMap.get(i);
+ mRcsFeatureListenersSlotMap.remove(i);
+ r.destroy();
+
+ ProvisioningCallbackManager p = mProvisioningCallbackManagersSlotMap.get(i);
+ mProvisioningCallbackManagersSlotMap.remove(i);
+ p.clear();
+ }
+ }
+
+ mNumSlot = newNumSlot;
+ }
+
+ /**
+ * destroy the instance
+ */
+ @VisibleForTesting
+ public void destroy() {
+ log("destroy");
+
+ mHandler.getLooper().quit();
+
+ mTelephonyRegistryManager.removeOnSubscriptionsChangedListener(mSubChangedListener);
+
+ for (int i = 0; i < mMmTelFeatureListenersSlotMap.size(); i++) {
+ mMmTelFeatureListenersSlotMap.get(i).destroy();
+ }
+ mMmTelFeatureListenersSlotMap.clear();
+
+ for (int i = 0; i < mRcsFeatureListenersSlotMap.size(); i++) {
+ mRcsFeatureListenersSlotMap.get(i).destroy();
+ }
+ mRcsFeatureListenersSlotMap.clear();
+
+ for (int i = 0; i < mProvisioningCallbackManagersSlotMap.size(); i++) {
+ mProvisioningCallbackManagersSlotMap.get(i).clear();
+ }
+ }
+
+ /**
+ * create an instance
+ */
+ @VisibleForTesting
+ public static ImsProvisioningController make(PhoneGlobals app, int numSlot) {
+ synchronized (ImsProvisioningController.class) {
+ if (sInstance == null) {
+ Rlog.i(TAG, "ImsProvisioningController created");
+ HandlerThread handlerThread = new HandlerThread(TAG);
+ handlerThread.start();
+ sInstance = new ImsProvisioningController(app, numSlot, handlerThread.getLooper(),
+ ImsManager::getConnector, RcsFeatureManager::getConnector,
+ new ImsProvisioningLoader(app));
+ }
+ }
+ return sInstance;
+ }
+
+ /**
+ * Gets a ImsProvisioningController instance
+ */
+ @VisibleForTesting
+ public static ImsProvisioningController getInstance() {
+ synchronized (ImsProvisioningController.class) {
+ return sInstance;
+ }
+ }
+
+ /**
+ * Register IFeatureProvisioningCallback from ProvisioningManager
+ */
+
+ @VisibleForTesting
+ public void addFeatureProvisioningChangedCallback(int subId,
+ IFeatureProvisioningCallback callback) {
+ if (callback == null) {
+ throw new IllegalArgumentException("provisioning callback can't be null");
+ }
+ int slotId = getSlotId(subId);
+ if (slotId < 0 || slotId >= mNumSlot) {
+ throw new IllegalArgumentException("subscription id is not available");
+ }
+
+ try {
+ mProvisioningCallbackManagersSlotMap.get(slotId).registerCallback(callback);
+ log("Feature Provisioning Callback registered.");
+ } catch (NullPointerException e) {
+ logw("can not access callback manager to add callback");
+ }
+ }
+
+ /**
+ * Remove IFeatureProvisioningCallback
+ */
+ @VisibleForTesting
+ public void removeFeatureProvisioningChangedCallback(int subId,
+ IFeatureProvisioningCallback callback) {
+ if (callback == null) {
+ throw new IllegalArgumentException("provisioning callback can't be null");
+ }
+
+ int slotId = getSlotId(subId);
+ if (slotId < 0 || slotId >= mNumSlot) {
+ throw new IllegalArgumentException("subscription id is not available");
+ }
+
+ try {
+ mProvisioningCallbackManagersSlotMap.get(slotId).unregisterCallback(callback);
+ log("Feature Provisioning Callback removed.");
+ } catch (NullPointerException e) {
+ logw("can not access callback manager to remove callback");
+ }
+ }
+
+ /**
+ * return the boolean whether MmTel capability is required provisioning or not
+ */
+ @VisibleForTesting
+ public boolean isImsProvisioningRequiredForCapability(int subId, int capability, int tech) {
+ // check subId
+ int slotId = getSlotId(subId);
+ if (slotId <= SubscriptionManager.INVALID_SIM_SLOT_INDEX || slotId >= mNumSlot) {
+ loge("Fail to retrieve slotId from subId");
+ throw new IllegalArgumentException("subscribe id is invalid");
+ }
+
+ // check valid capability
+ if (!(MMTEL_CAPABILITY_MIN < capability && capability < MMTEL_CAPABILITY_MAX)) {
+ throw new IllegalArgumentException("MmTel capability '" + capability + "' is invalid");
+ }
+
+ // check valid radio tech
+ if (!(REGISTRATION_TECH_NONE < tech && tech < REGISTRATION_TECH_MAX)) {
+ log("Ims not matched radio tech " + tech);
+ throw new IllegalArgumentException("Registration technology '" + tech + "' is invalid");
+ }
+
+ boolean retVal = isProvisioningRequired(subId, capability, tech, /*isMmTel*/true);
+
+ log("isImsProvisioningRequiredForCapability capability " + capability
+ + " tech " + tech + " return value " + retVal);
+
+ return retVal;
+ }
+
+ /**
+ * return the boolean whether RCS capability is required provisioning or not
+ */
+ @VisibleForTesting
+ public boolean isRcsProvisioningRequiredForCapability(int subId, int capability, int tech) {
+ // check slotId and Phone object
+ int slotId = getSlotId(subId);
+ if (slotId <= SubscriptionManager.INVALID_SIM_SLOT_INDEX || slotId >= mNumSlot) {
+ loge("Fail to retrieve slotId from subId");
+ throw new IllegalArgumentException("subscribe id is invalid");
+ }
+
+ // check valid capability
+ if (!(RCS_CAPABILITY_MIN < capability && capability < RCS_CAPABILITY_MAX)) {
+ throw new IllegalArgumentException("Rcs capability '" + capability + "' is invalid");
+ }
+
+ // check valid radio tech
+ if (!(REGISTRATION_TECH_NONE < tech && tech < REGISTRATION_TECH_MAX)) {
+ log("Rcs not matched radio tech " + tech);
+ throw new IllegalArgumentException("Registration technology '" + tech + "' is invalid");
+ }
+
+ boolean retVal = isProvisioningRequired(subId, capability, tech, /*isMmTel*/false);
+
+ log("isRcsProvisioningRequiredForCapability capability " + capability
+ + " tech " + tech + " return value " + retVal);
+
+ return retVal;
+ }
+
+ /**
+ * return the provisioning status for MmTel capability in specific radio tech
+ */
+ @VisibleForTesting
+ public boolean getImsProvisioningStatusForCapability(int subId, int capability, int tech) {
+ boolean mmTelProvisioned = isImsProvisioningRequiredForCapability(subId, capability, tech);
+ if (!mmTelProvisioned) { // provisioning not required
+ log("getImsProvisioningStatusForCapability : not required "
+ + " capability " + capability + " tech " + tech);
+ return true;
+ }
+
+ // read value from ImsProvisioningLoader
+ int result = mImsProvisioningLoader.getProvisioningStatus(subId, FEATURE_MMTEL,
+ capability, tech);
+ if (result == ImsProvisioningLoader.STATUS_NOT_SET) {
+ // not set means initial value
+ // read data from vendor ImsService and store that in ImsProvisioningLoader
+ result = getValueFromImsService(subId, capability, tech);
+ mmTelProvisioned = getBoolValue(result);
+ if (result != ProvisioningManager.PROVISIONING_RESULT_UNKNOWN) {
+ setAndNotifyMmTelProvisioningValue(subId, capability, tech, mmTelProvisioned);
+ }
+ } else {
+ mmTelProvisioned = getBoolValue(result);
+ }
+
+ log("getImsProvisioningStatusForCapability : "
+ + " capability " + capability
+ + " tech " + tech
+ + " result " + mmTelProvisioned);
+ return mmTelProvisioned;
+ }
+
+ /**
+ * set MmTel provisioning status in specific tech
+ */
+ @VisibleForTesting
+ public void setImsProvisioningStatusForCapability(int subId, int capability, int tech,
+ boolean isProvisioned) {
+ boolean mmTelProvisioned = isImsProvisioningRequiredForCapability(subId, capability, tech);
+ if (!mmTelProvisioned) { // provisioning not required
+ log("setImsProvisioningStatusForCapability : not required "
+ + " capability " + capability + " tech " + tech);
+ return;
+ }
+
+ // write value to ImsProvisioningLoader
+ boolean isChanged = setAndNotifyMmTelProvisioningValue(subId, capability, tech,
+ isProvisioned);
+ if (!isChanged) {
+ log("status not changed mmtel capability " + capability + " tech " + tech);
+ return;
+ }
+
+ int slotId = getSlotId(subId);
+ // find matched key from capability and tech
+ int value = getIntValue(isProvisioned);
+ int key = getKeyFromCapability(capability, tech);
+ if (key != INVALID_VALUE) {
+ log("setImsProvisioningStatusForCapability : matched key " + key);
+ try {
+ // set key and value to vendor ImsService for MmTel
+ mMmTelFeatureListenersSlotMap.get(slotId).setProvisioningValue(key, value);
+
+ // notify provisioning status changed to ImsManager
+ updateImsServiceConfig(subId);
+ } catch (NullPointerException e) {
+ loge("can not access MmTelFeatureListener with capability " + capability);
+ }
+ }
+ }
+
+ /**
+ * return the provisioning status for RCS capability in specific radio tech
+ */
+ @VisibleForTesting
+ public boolean getRcsProvisioningStatusForCapability(int subId, int capability, int tech) {
+ boolean rcsProvisioned = isRcsProvisioningRequiredForCapability(subId, capability, tech);
+ if (!rcsProvisioned) { // provisioning not required
+ log("getRcsProvisioningStatusForCapability : not required"
+ + " capability " + capability + " tech " + tech);
+ return true;
+ }
+
+ // read data from ImsProvisioningLoader
+ int result = mImsProvisioningLoader.getProvisioningStatus(subId, FEATURE_RCS,
+ capability, tech);
+ if (result == ImsProvisioningLoader.STATUS_NOT_SET) {
+ // not set means initial value
+ // read data from vendor ImsService and store that in ImsProvisioningLoader
+ result = getRcsValueFromImsService(subId, capability);
+ rcsProvisioned = getBoolValue(result);
+ if (result != ProvisioningManager.PROVISIONING_RESULT_UNKNOWN) {
+ setAndNotifyRcsProvisioningValueForAllTech(subId, capability, rcsProvisioned);
+ }
+ } else {
+ rcsProvisioned = getBoolValue(result);
+ }
+
+ log("getRcsProvisioningStatusForCapability : "
+ + " capability " + capability
+ + " tech " + tech
+ + " result " + rcsProvisioned);
+ return rcsProvisioned;
+ }
+
+ /**
+ * set RCS provisioning status in specific tech
+ */
+ @VisibleForTesting
+ public void setRcsProvisioningStatusForCapability(int subId, int capability, int tech,
+ boolean isProvisioned) {
+ boolean rcsProvisioned = isRcsProvisioningRequiredForCapability(subId, capability, tech);
+ if (!rcsProvisioned) { // provisioning not required
+ log("set rcs provisioning status but not required");
+ return;
+ }
+
+ // write status using ImsProvisioningLoader
+ boolean isChanged = setAndNotifyRcsProvisioningValue(subId, capability, tech,
+ isProvisioned);
+ if (!isChanged) {
+ log("status not changed rcs capability " + capability + " tech " + tech);
+ return;
+ }
+
+ int slotId = getSlotId(subId);
+ int key = ProvisioningManager.KEY_EAB_PROVISIONING_STATUS;
+ int value = getIntValue(isProvisioned);
+ try {
+ // set key and value to vendor ImsService for Rcs
+ mRcsFeatureListenersSlotMap.get(slotId).setProvisioningValue(key, value);
+ } catch (NullPointerException e) {
+ loge("can not access RcsFeatureListener with capability " + capability);
+ }
+ }
+
+ /**
+ * set RCS provisioning status in specific key and value
+ * @param key integer key, defined as one of
+ * {@link ProvisioningManager#KEY_VOLTE_PROVISIONING_STATUS}
+ * {@link ProvisioningManager#KEY_VT_PROVISIONING_STATUS}
+ * {@link ProvisioningManager#KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE}
+ * {@link ProvisioningManager#KEY_EAB_PROVISIONING_STATUS}
+ * @param value in Integer format.
+ * @return the result of setting the configuration value, defined as one of
+ * {@link ImsConfigImplBase#CONFIG_RESULT_FAILED} or
+ * {@link ImsConfigImplBase#CONFIG_RESULT_SUCCESS} or
+ */
+ @VisibleForTesting
+ public int setProvisioningValue(int subId, int key, int value) {
+ log("setProvisioningValue");
+
+ int retVal = ImsConfigImplBase.CONFIG_RESULT_FAILED;
+ // check key value
+ if (!Arrays.stream(LOCAL_IMS_CONFIG_KEYS).anyMatch(keyValue -> keyValue == key)) {
+ log("not matched key " + key);
+ return ImsConfigImplBase.CONFIG_RESULT_UNKNOWN;
+ }
+
+ // check subId
+ int slotId = getSlotId(subId);
+ if (slotId <= SubscriptionManager.INVALID_SIM_SLOT_INDEX || slotId >= mNumSlot) {
+ loge("Fail to retrieve slotId from subId");
+ return ImsConfigImplBase.CONFIG_RESULT_FAILED;
+ }
+
+ try {
+ if (key == KEY_EAB_PROVISIONING_STATUS) {
+ // set key and value to vendor ImsService for Rcs
+ retVal = mRcsFeatureListenersSlotMap.get(slotId)
+ .setProvisioningValue(key, value);
+ } else {
+ // set key and value to vendor ImsService for MmTel
+ retVal = mMmTelFeatureListenersSlotMap.get(slotId)
+ .setProvisioningValue(key, value);
+ }
+ } catch (NullPointerException e) {
+ loge("can not access FeatureListener to set provisioning value");
+ return ImsConfigImplBase.CONFIG_RESULT_FAILED;
+ }
+
+ // update and notify provisioning status changed capability and tech from key
+ updateCapabilityTechFromKey(subId, key, value);
+
+ if (key != KEY_EAB_PROVISIONING_STATUS) {
+ // notify provisioning status changed to ImsManager
+ updateImsServiceConfig(subId);
+ }
+
+ return retVal;
+ }
+
+ /**
+ * get RCS provisioning status in specific key and value
+ * @param key integer key, defined as one of
+ * {@link ProvisioningManager#KEY_VOLTE_PROVISIONING_STATUS}
+ * {@link ProvisioningManager#KEY_VT_PROVISIONING_STATUS}
+ * {@link ProvisioningManager#KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE}
+ * {@link ProvisioningManager#KEY_EAB_PROVISIONING_STATUS}
+ * @return the result of setting the configuration value, defined as one of
+ * {@link ImsConfigImplBase#CONFIG_RESULT_FAILED} or
+ * {@link ImsConfigImplBase#CONFIG_RESULT_SUCCESS} or
+ * {@link ImsConfigImplBase#CONFIG_RESULT_UNKNOWN}
+ */
+ @VisibleForTesting
+ public int getProvisioningValue(int subId, int key) {
+ // check key value
+ if (!Arrays.stream(LOCAL_IMS_CONFIG_KEYS).anyMatch(keyValue -> keyValue == key)) {
+ log("not matched key " + key);
+ return ImsConfigImplBase.CONFIG_RESULT_UNKNOWN;
+ }
+
+ // check subId
+ int slotId = getSlotId(subId);
+ if (slotId <= SubscriptionManager.INVALID_SIM_SLOT_INDEX || slotId >= mNumSlot) {
+ loge("Fail to retrieve slotId from subId");
+ return ImsConfigImplBase.CONFIG_RESULT_UNKNOWN;
+ }
+
+ // check data from ImsProvisioningLoader
+ int capability = getCapabilityFromKey(key);
+ int tech = getTechFromKey(key);
+ int result;
+ if (capability != INVALID_VALUE && tech != INVALID_VALUE) {
+ if (key == KEY_EAB_PROVISIONING_STATUS) {
+ result = mImsProvisioningLoader.getProvisioningStatus(subId, FEATURE_RCS,
+ capability, tech);
+ } else {
+ result = mImsProvisioningLoader.getProvisioningStatus(subId, FEATURE_MMTEL,
+ capability, tech);
+ }
+ if (result != ImsProvisioningLoader.STATUS_NOT_SET) {
+ log("getProvisioningValue from loader : key " + key + " result " + result);
+ return result;
+ }
+ }
+
+ // get data from ImsService, update it in ImsProvisioningLoader
+ if (key == KEY_EAB_PROVISIONING_STATUS) {
+ result = getRcsValueFromImsService(subId, capability);
+ if (result == ImsConfigImplBase.CONFIG_RESULT_UNKNOWN) {
+ logw("getProvisioningValue : fail to get data from ImsService capability"
+ + capability);
+ return result;
+ }
+ log("getProvisioningValue from vendor : key " + key + " result " + result);
+
+ setAndNotifyRcsProvisioningValueForAllTech(subId, capability, getBoolValue(result));
+ return result;
+ } else {
+ result = getValueFromImsService(subId, capability, tech);
+ if (result == ImsConfigImplBase.CONFIG_RESULT_UNKNOWN) {
+ logw("getProvisioningValue : fail to get data from ImsService capability"
+ + capability);
+ return result;
+ }
+ log("getProvisioningValue from vendor : key " + key + " result " + result);
+
+ setAndNotifyMmTelProvisioningValue(subId, capability, tech, getBoolValue(result));
+ return result;
+ }
+ }
+
+ /**
+ * get the handler
+ */
+ @VisibleForTesting
+ public Handler getHandler() {
+ return mHandler;
+ }
+
+ private boolean isProvisioningRequired(int subId, int capability, int tech, boolean isMmTel) {
+ int[] techArray;
+ techArray = getTechsFromCarrierConfig(subId, capability, isMmTel);
+ if (techArray == null) {
+ logw("isProvisioningRequired : getTechsFromCarrierConfig failed");
+ // not exist in CarrierConfig that means provisioning is not required
+ return false;
+ }
+
+ // compare with carrier config
+ if (Arrays.stream(techArray).anyMatch(keyValue -> keyValue == tech)) {
+ // existing same tech means provisioning required
+ return true;
+ }
+
+ log("isProvisioningRequired : not matched capability " + capability + " tech " + tech);
+ return false;
+ }
+
+ @VisibleForTesting
+ protected int[] getTechsFromCarrierConfig(int subId, int capability, boolean isMmTel) {
+ String featureKey;
+ String capabilityKey;
+ if (isMmTel) {
+ featureKey = CarrierConfigManager.Ims.KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE;
+ capabilityKey = KEYS_MMTEL_CAPABILITY.get(capability);
+ } else {
+ featureKey = CarrierConfigManager.Ims.KEY_RCS_REQUIRES_PROVISIONING_BUNDLE;
+ capabilityKey = KEYS_RCS_CAPABILITY.get(capability);
+ }
+
+ if (capabilityKey != null) {
+ PersistableBundle imsCarrierConfigs = mCarrierConfigManager.getConfigForSubId(subId);
+ if (imsCarrierConfigs == null) {
+ log("getTechsFromCarrierConfig : imsCarrierConfigs null");
+ return null;
+ }
+
+ PersistableBundle provisioningBundle =
+ imsCarrierConfigs.getPersistableBundle(featureKey);
+ if (provisioningBundle == null) {
+ log("getTechsFromCarrierConfig : provisioningBundle null");
+ return null;
+ }
+
+ return provisioningBundle.getIntArray(capabilityKey);
+ }
+
+ return null;
+ }
+
+ private int getValueFromImsService(int subId, int capability, int tech) {
+ int config = ImsConfigImplBase.CONFIG_RESULT_UNKNOWN;
+
+ // operation is based on capability
+ switch (capability) {
+ case CAPABILITY_TYPE_VOICE:
+ int item = (tech == ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN)
+ ? ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE
+ : ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS;
+ // read data from vendor ImsService
+ config = mMmTelFeatureListenersSlotMap.get(getSlotId(subId))
+ .getProvisioningValue(item);
+ break;
+ case CAPABILITY_TYPE_VIDEO:
+ // read data from vendor ImsService
+ config = mMmTelFeatureListenersSlotMap.get(getSlotId(subId))
+ .getProvisioningValue(ProvisioningManager.KEY_VT_PROVISIONING_STATUS);
+ break;
+ default:
+ log("Capability " + capability + " has been provisioning");
+ break;
+ }
+
+ return config;
+ }
+
+ private int getRcsValueFromImsService(int subId, int capability) {
+ int config = ImsConfigImplBase.CONFIG_RESULT_UNKNOWN;
+
+ if (capability == CAPABILITY_TYPE_PRESENCE_UCE) {
+ try {
+ config = mRcsFeatureListenersSlotMap.get(getSlotId(subId))
+ .getProvisioningValue(ProvisioningManager.KEY_EAB_PROVISIONING_STATUS);
+ } catch (NullPointerException e) {
+ logw("can not access RcsFeatureListener");
+ }
+ } else {
+ log("Capability " + capability + " has been provisioning");
+ }
+
+ return config;
+ }
+
+ private void onSubscriptionsChanged() {
+ for (int index = 0; index < mMmTelFeatureListenersSlotMap.size(); index++) {
+ MmTelFeatureListener m = mMmTelFeatureListenersSlotMap.get(index);
+ m.setSubId(getSubId(index));
+ }
+ for (int index = 0; index < mRcsFeatureListenersSlotMap.size(); index++) {
+ RcsFeatureListener r = mRcsFeatureListenersSlotMap.get(index);
+ r.setSubId(getSubId(index));
+ }
+ for (int index = 0; index < mProvisioningCallbackManagersSlotMap.size(); index++) {
+ ProvisioningCallbackManager m = mProvisioningCallbackManagersSlotMap.get(index);
+ m.setSubId(getSubId(index));
+ }
+ }
+
+ private void updateCapabilityTechFromKey(int subId, int key, int value) {
+ boolean isProvisioned = getBoolValue(value);
+ int capability = getCapabilityFromKey(key);
+ int tech = getTechFromKey(key);
+
+ if (capability == INVALID_VALUE || tech == INVALID_VALUE) {
+ logw("updateCapabilityTechFromKey : unknown key " + key);
+ return;
+ }
+
+ if (key == KEY_VOLTE_PROVISIONING_STATUS
+ || key == KEY_VT_PROVISIONING_STATUS
+ || key == KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE) {
+ setAndNotifyMmTelProvisioningValue(subId, capability, tech, isProvisioned);
+ }
+ if (key == KEY_EAB_PROVISIONING_STATUS) {
+ setAndNotifyRcsProvisioningValueForAllTech(subId, capability, isProvisioned);
+ }
+ }
+
+ private int getCapabilityFromKey(int key) {
+ int capability;
+ switch (key) {
+ case ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS:
+ // intentional fallthrough
+ case ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE:
+ capability = CAPABILITY_TYPE_VOICE;
+ break;
+ case ProvisioningManager.KEY_VT_PROVISIONING_STATUS:
+ capability = CAPABILITY_TYPE_VIDEO;
+ break;
+ case ProvisioningManager.KEY_EAB_PROVISIONING_STATUS:
+ // default CAPABILITY_TYPE_PRESENCE_UCE used for KEY_EAB_PROVISIONING_STATUS
+ capability = CAPABILITY_TYPE_PRESENCE_UCE;
+ break;
+ default:
+ capability = INVALID_VALUE;
+ break;
+ }
+ return capability;
+ }
+
+ private int getTechFromKey(int key) {
+ int tech;
+ switch (key) {
+ case ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE:
+ tech = ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN;
+ break;
+ case ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS:
+ // intentional fallthrough
+ case ProvisioningManager.KEY_VT_PROVISIONING_STATUS:
+ // intentional fallthrough
+ case ProvisioningManager.KEY_EAB_PROVISIONING_STATUS:
+ tech = ImsRegistrationImplBase.REGISTRATION_TECH_LTE;
+ break;
+ default:
+ tech = INVALID_VALUE;
+ break;
+ }
+ return tech;
+ }
+
+ private int getKeyFromCapability(int capability, int tech) {
+ int key = INVALID_VALUE;
+ if (capability == CAPABILITY_TYPE_VOICE && tech == REGISTRATION_TECH_IWLAN) {
+ key = ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE;
+ } else if (capability == CAPABILITY_TYPE_VOICE && tech == REGISTRATION_TECH_LTE) {
+ key = ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS;
+ } else if (capability == CAPABILITY_TYPE_VIDEO && tech == REGISTRATION_TECH_LTE) {
+ key = ProvisioningManager.KEY_VT_PROVISIONING_STATUS;
+ }
+
+ return key;
+ }
+
+ protected int getSubId(int slotId) {
+ final int[] subIds = mSubscriptionManager.getSubscriptionIds(slotId);
+ int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ if (subIds != null && subIds.length >= 1) {
+ subId = subIds[0];
+ }
+
+ return subId;
+ }
+
+ protected int getSlotId(int subId) {
+ return mSubscriptionManager.getPhoneId(subId);
+ }
+
+ protected ImsConfig getImsConfig(ImsManager imsManager) throws ImsException {
+ return imsManager.getConfigInterface();
+ }
+
+ protected ImsConfig getImsConfig(IImsConfig iImsConfig) {
+ return new ImsConfig(iImsConfig);
+ }
+
+ private int getIntValue(boolean isProvisioned) {
+ return isProvisioned ? ProvisioningManager.PROVISIONING_VALUE_ENABLED
+ : ProvisioningManager.PROVISIONING_VALUE_DISABLED;
+ }
+
+ private boolean getBoolValue(int value) {
+ return value == ProvisioningManager.PROVISIONING_VALUE_ENABLED ? true : false;
+ }
+
+ private boolean setAndNotifyMmTelProvisioningValue(int subId, int capability, int tech,
+ boolean isProvisioned) {
+ boolean changed = mImsProvisioningLoader.setProvisioningStatus(subId, FEATURE_MMTEL,
+ capability, tech, isProvisioned);
+ // notify MmTel capability changed
+ if (changed) {
+ mHandler.sendMessage(mHandler.obtainMessage(EVENT_PROVISIONING_CAPABILITY_CHANGED,
+ getSlotId(subId), 0, (Object) new FeatureProvisioningData(
+ capability, tech, isProvisioned, /*isMmTel*/true)));
+ }
+
+ return changed;
+ }
+
+ private boolean setAndNotifyRcsProvisioningValue(int subId, int capability, int tech,
+ boolean isProvisioned) {
+ boolean isChanged = mImsProvisioningLoader.setProvisioningStatus(subId, FEATURE_RCS,
+ capability, tech, isProvisioned);
+
+ if (isChanged) {
+ int slotId = getSlotId(subId);
+
+ // notify RCS capability changed
+ mHandler.sendMessage(mHandler.obtainMessage(EVENT_PROVISIONING_CAPABILITY_CHANGED,
+ slotId, 0, (Object) new FeatureProvisioningData(
+ capability, tech, isProvisioned, /*isMmtel*/false)));
+ }
+
+ return isChanged;
+ }
+
+ private boolean setAndNotifyRcsProvisioningValueForAllTech(int subId, int capability,
+ boolean isProvisioned) {
+ boolean isChanged = false;
+
+ for (int tech : LOCAL_RADIO_TECHS) {
+ isChanged |= setAndNotifyRcsProvisioningValue(subId, capability, tech, isProvisioned);
+ }
+
+ return isChanged;
+ }
+
+ private void updateImsServiceConfig(int subId) {
+ try {
+ ImsManager imsManager = mMmTelFeatureListenersSlotMap.get(getSlotId(subId))
+ .getImsManager();
+ imsManager.updateImsServiceConfig();
+ log("updateImsServiceConfig");
+ } catch (NullPointerException e) {
+ loge("updateImsServiceConfig : ImsService not ready");
+ }
+ }
+
+ protected boolean isValidSubId(int subId) {
+ int slotId = getSlotId(subId);
+ if (slotId <= SubscriptionManager.INVALID_SIM_SLOT_INDEX || slotId >= mNumSlot) {
+ return false;
+ }
+
+ return true;
+ }
+
+ private void log(String s) {
+ Rlog.d(TAG, s);
+ }
+
+ private void log(String prefix, int slotId, String s) {
+ Rlog.d(TAG, prefix + "[" + slotId + "] " + s);
+ }
+
+ private void logi(String prefix, int slotId, String s) {
+ Rlog.i(TAG, prefix + "[" + slotId + "] " + s);
+ }
+
+ private void logw(String s) {
+ Rlog.w(TAG, s);
+ }
+
+ private void logw(String prefix, int slotId, String s) {
+ Rlog.w(TAG, prefix + "[" + slotId + "] " + s);
+ }
+
+ private void loge(String s) {
+ Rlog.e(TAG, s);
+ }
+
+ private void loge(String prefix, int slotId, String s) {
+ Rlog.e(TAG, prefix + "[" + slotId + "] " + s);
+ }
+}
diff --git a/src/com/android/phone/ImsProvisioningLoader.java b/src/com/android/phone/ImsProvisioningLoader.java
new file mode 100644
index 0000000..1238b9a
--- /dev/null
+++ b/src/com/android/phone/ImsProvisioningLoader.java
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2021 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.SharedPreferences;
+import android.os.PersistableBundle;
+import android.preference.PreferenceManager;
+import android.telephony.ims.ProvisioningManager;
+import android.telephony.ims.feature.ImsFeature;
+import android.telephony.ims.feature.MmTelFeature;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Provides a function to set/get Ims feature provisioning status in storage.
+ */
+public class ImsProvisioningLoader {
+ private static final String LOG_TAG = ImsProvisioningLoader.class.getSimpleName();
+
+ public static final int STATUS_NOT_SET = -1;
+ public static final int STATUS_NOT_PROVISIONED =
+ ProvisioningManager.PROVISIONING_VALUE_DISABLED;
+ public static final int STATUS_PROVISIONED =
+ ProvisioningManager.PROVISIONING_VALUE_ENABLED;
+
+ public static final int IMS_FEATURE_MMTEL = ImsFeature.FEATURE_MMTEL;
+ public static final int IMS_FEATURE_RCS = ImsFeature.FEATURE_RCS;
+
+ private static final String PROVISIONING_FILE_NAME_PREF = "imsprovisioningstatus_";
+ private static final String PREF_PROVISION_IMS_MMTEL_PREFIX = "provision_ims_mmtel_";
+
+ private Context mContext;
+ private SharedPreferences mTelephonySharedPreferences;
+ // key : sub Id, value : read from sub Id's xml and it's in-memory cache
+ private SparseArray<PersistableBundle> mSubIdBundleArray = new SparseArray<>();
+ private final Object mLock = new Object();
+
+ public ImsProvisioningLoader(Context context) {
+ mContext = context;
+ mTelephonySharedPreferences =
+ PreferenceManager.getDefaultSharedPreferences(context);
+ }
+
+ /**
+ * Get Ims feature provisioned status in storage
+ */
+ public int getProvisioningStatus(int subId, @ImsFeature.FeatureType int imsFeature,
+ int capability, @ImsRegistrationImplBase.ImsRegistrationTech int tech) {
+ initCache(subId);
+ return getImsProvisioningStatus(subId, imsFeature, tech,
+ capability);
+ }
+
+ /**
+ * Set Ims feature provisioned status in storage
+ */
+ public boolean setProvisioningStatus(int subId, @ImsFeature.FeatureType int imsFeature,
+ int capability, @ImsRegistrationImplBase.ImsRegistrationTech int tech,
+ boolean isProvisioned) {
+ initCache(subId);
+ return setImsFeatureProvisioning(subId, imsFeature, tech, capability,
+ isProvisioned);
+ }
+
+ private boolean isFileExist(int subId) {
+ File file = new File(mContext.getFilesDir(), getFileName(subId));
+ return file.exists();
+ }
+
+ private void initCache(int subId) {
+ synchronized (mLock) {
+ PersistableBundle subIdBundle = mSubIdBundleArray.get(subId, null);
+ if (subIdBundle != null) {
+ // initCache() has already been called for the subId
+ return;
+ }
+ if (isFileExist(subId)) {
+ subIdBundle = readSubIdBundleFromXml(subId);
+ } else {
+ // It should read the MMTEL capability cache as part of shared prefs and migrate
+ // over any configs for UT.
+ final int[] regTech = {ImsRegistrationImplBase.REGISTRATION_TECH_LTE,
+ ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN,
+ ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM,
+ ImsRegistrationImplBase.REGISTRATION_TECH_NR};
+ subIdBundle = new PersistableBundle();
+ for (int tech : regTech) {
+ int UtProvisioningStatus = getUTProvisioningStatus(subId, tech);
+ logd("check UT provisioning status " + UtProvisioningStatus);
+
+ if (STATUS_PROVISIONED == UtProvisioningStatus) {
+ setProvisioningStatusToSubIdBundle(ImsFeature.FEATURE_MMTEL, tech,
+ MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT, subIdBundle,
+ UtProvisioningStatus);
+ }
+ }
+ saveSubIdBundleToXml(subId, subIdBundle);
+ }
+ mSubIdBundleArray.put(subId, subIdBundle);
+ }
+ }
+
+ private int getImsProvisioningStatus(int subId, int imsFeature, int tech, int capability) {
+ PersistableBundle subIdBundle = null;
+ synchronized (mLock) {
+ subIdBundle = mSubIdBundleArray.get(subId, null);
+ }
+
+ return getProvisioningStatusFromSubIdBundle(imsFeature, tech,
+ capability, subIdBundle);
+ }
+
+ private boolean setImsFeatureProvisioning(int subId, int imsFeature, int tech, int capability,
+ boolean isProvisioned) {
+ synchronized (mLock) {
+ int preValue = getImsProvisioningStatus(subId, imsFeature, tech, capability);
+ int newValue = isProvisioned ? STATUS_PROVISIONED : STATUS_NOT_PROVISIONED;
+ if (preValue == newValue) {
+ logd("already stored provisioning status " + isProvisioned + " ImsFeature "
+ + imsFeature + " tech " + tech + " capa " + capability);
+ return false;
+ }
+
+ PersistableBundle subIdBundle = mSubIdBundleArray.get(subId, null);
+ setProvisioningStatusToSubIdBundle(imsFeature, tech, capability, subIdBundle,
+ newValue);
+ saveSubIdBundleToXml(subId, subIdBundle);
+ }
+ return true;
+ }
+
+ private int getProvisioningStatusFromSubIdBundle(int imsFeature, int tech,
+ int capability, PersistableBundle subIdBundle) {
+ // If it doesn't exist in xml, return STATUS_NOT_SET
+ if (subIdBundle == null || subIdBundle.isEmpty()) {
+ logd("xml is empty");
+ return STATUS_NOT_SET;
+ }
+
+ PersistableBundle regTechBundle = subIdBundle.getPersistableBundle(
+ String.valueOf(imsFeature));
+ if (regTechBundle == null) {
+ logd("ImsFeature " + imsFeature + " is not exist in xml");
+ return STATUS_NOT_SET;
+ }
+
+ PersistableBundle capabilityBundle = regTechBundle.getPersistableBundle(
+ String.valueOf(tech));
+ if (capabilityBundle == null) {
+ logd("RegistrationTech " + tech + " is not exist in xml");
+ return STATUS_NOT_SET;
+ }
+
+ return getIntValueFromBundle(String.valueOf(capability), capabilityBundle);
+ }
+
+ private void setProvisioningStatusToSubIdBundle(int imsFeature, int tech,
+ int capability, PersistableBundle subIdBundle, int newStatus) {
+ logd("set provisioning status " + newStatus + " ImsFeature "
+ + imsFeature + " tech " + tech + " capa " + capability);
+
+ PersistableBundle regTechBundle = subIdBundle.getPersistableBundle(
+ String.valueOf(imsFeature));
+ if (regTechBundle == null) {
+ regTechBundle = new PersistableBundle();
+ subIdBundle.putPersistableBundle(String.valueOf(imsFeature), regTechBundle);
+ }
+
+ PersistableBundle capabilityBundle = regTechBundle.getPersistableBundle(
+ String.valueOf(tech));
+ if (capabilityBundle == null) {
+ capabilityBundle = new PersistableBundle();
+ regTechBundle.putPersistableBundle(String.valueOf(tech), capabilityBundle);
+ }
+
+ capabilityBundle.putInt(String.valueOf(capability), newStatus);
+ }
+
+ // Default value is STATUS_NOT_SET
+ private int getIntValueFromBundle(String key, PersistableBundle bundle) {
+ int value = bundle.getInt(key, STATUS_NOT_SET);
+ logd("get value " + value);
+ return value;
+ }
+
+ // Return subIdBundle from imsprovisioningstatus_{subId}.xml
+ private PersistableBundle readSubIdBundleFromXml(int subId) {
+ String fileName = getFileName(subId);
+
+ PersistableBundle subIdBundles = new PersistableBundle();
+ File file = null;
+ FileInputStream inFile = null;
+ synchronized (mLock) {
+ try {
+ file = new File(mContext.getFilesDir(), fileName);
+ inFile = new FileInputStream(file);
+ subIdBundles = PersistableBundle.readFromStream(inFile);
+ inFile.close();
+ } catch (FileNotFoundException e) {
+ logd(e.toString());
+ } catch (IOException e) {
+ loge(e.toString());
+ } catch (RuntimeException e) {
+ loge(e.toString());
+ }
+ }
+
+ return subIdBundles;
+ }
+
+ private void saveSubIdBundleToXml(int subId, PersistableBundle subIdBundle) {
+ String fileName = getFileName(subId);
+
+ if (subIdBundle == null || subIdBundle.isEmpty()) {
+ logd("subIdBundle is empty");
+ return;
+ }
+
+ FileOutputStream outFile = null;
+ synchronized (mLock) {
+ try {
+ outFile = new FileOutputStream(new File(mContext.getFilesDir(), fileName));
+ subIdBundle.writeToStream(outFile);
+ outFile.flush();
+ outFile.close();
+ } catch (IOException e) {
+ loge(e.toString());
+ } catch (RuntimeException e) {
+ loge(e.toString());
+ }
+ }
+ }
+
+ private int getUTProvisioningStatus(int subId, int tech) {
+ return getMmTelCapabilityProvisioningBitfield(subId, tech) > 0 ? STATUS_PROVISIONED
+ : STATUS_NOT_SET;
+ }
+
+ /**
+ * @return the bitfield containing the MmTel provisioning for the provided subscription and
+ * technology. The bitfield should mirror the bitfield defined by
+ * {@link MmTelFeature.MmTelCapabilities.MmTelCapability}.
+ */
+ private int getMmTelCapabilityProvisioningBitfield(int subId, int tech) {
+ String key = getMmTelProvisioningKey(subId, tech);
+ // Default is no capabilities are provisioned.
+ return mTelephonySharedPreferences.getInt(key, 0 /*default*/);
+ }
+
+ private String getMmTelProvisioningKey(int subId, int tech) {
+ // Resulting key is provision_ims_mmtel_{subId}_{tech}
+ return PREF_PROVISION_IMS_MMTEL_PREFIX + subId + "_" + tech;
+ }
+
+ private String getFileName(int subId) {
+ // Resulting name is imsprovisioningstatus_{subId}.xml
+ return PROVISIONING_FILE_NAME_PREF + subId + ".xml";
+ }
+
+ @VisibleForTesting
+ void clear() {
+ synchronized (mLock) {
+ mSubIdBundleArray.clear();
+ }
+ }
+
+ @VisibleForTesting
+ void setProvisioningToXml(int subId, PersistableBundle subIdBundle,
+ String[] infoArray) {
+ for (String info : infoArray) {
+ String[] paramArray = info.split(",");
+ setProvisioningStatusToSubIdBundle(Integer.valueOf(paramArray[0]),
+ Integer.valueOf(paramArray[1]), Integer.valueOf(paramArray[2]),
+ subIdBundle, Integer.valueOf(paramArray[3]));
+ }
+ saveSubIdBundleToXml(subId, subIdBundle);
+ }
+
+ private void loge(String contents) {
+ Log.e(LOG_TAG, contents);
+ }
+
+ private void logd(String contents) {
+ Log.d(LOG_TAG, contents);
+ }
+
+}
diff --git a/src/com/android/phone/ImsRcsController.java b/src/com/android/phone/ImsRcsController.java
index 7d594d1..bf55764 100644
--- a/src/com/android/phone/ImsRcsController.java
+++ b/src/com/android/phone/ImsRcsController.java
@@ -17,9 +17,13 @@
package com.android.phone;
import android.Manifest;
+import android.app.compat.CompatChanges;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Binder;
+import android.os.Build;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.os.UserHandle;
@@ -73,6 +77,15 @@
private Boolean mSingleRegistrationOverride;
/**
+ * For apps targeting Android T and above, support the publishing state on APIs, such as
+ * {@code RcsUceAdapter#PUBLISH_STATE_PUBLISHING}
+ * @hide
+ */
+ @ChangeId
+ @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.S)
+ public static final long SUPPORT_PUBLISHING_STATE = 202894742;
+
+ /**
* Initialize the singleton ImsRcsController instance.
* This is only done once, at startup, from PhoneApp.onCreate().
*/
@@ -316,7 +329,9 @@
@Override
public @PublishState int getUcePublishState(int subId) {
enforceReadPrivilegedPermission("getUcePublishState");
+ final int uid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity();
+ boolean isSupportPublishingState = false;
try {
UceControllerManager uceCtrlManager = getRcsFeatureController(subId).getFeature(
UceControllerManager.class);
@@ -324,7 +339,10 @@
throw new ServiceSpecificException(ImsException.CODE_ERROR_UNSUPPORTED_OPERATION,
"This subscription does not support UCE.");
}
- return uceCtrlManager.getUcePublishState();
+ if (CompatChanges.isChangeEnabled(SUPPORT_PUBLISHING_STATE, uid)) {
+ isSupportPublishingState = true;
+ }
+ return uceCtrlManager.getUcePublishState(isSupportPublishingState);
} catch (ImsException e) {
throw new ServiceSpecificException(e.getCode(), e.getMessage());
} finally {
@@ -466,7 +484,9 @@
@Override
public void registerUcePublishStateCallback(int subId, IRcsUcePublishStateCallback c) {
enforceReadPrivilegedPermission("registerUcePublishStateCallback");
+ final int uid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity();
+ boolean isSupportPublishingState = false;
try {
UceControllerManager uceCtrlManager = getRcsFeatureController(subId).getFeature(
UceControllerManager.class);
@@ -474,7 +494,11 @@
throw new ServiceSpecificException(ImsException.CODE_ERROR_UNSUPPORTED_OPERATION,
"This subscription does not support UCE.");
}
- uceCtrlManager.registerPublishStateCallback(c);
+
+ if (CompatChanges.isChangeEnabled(SUPPORT_PUBLISHING_STATE, uid)) {
+ isSupportPublishingState = true;
+ }
+ uceCtrlManager.registerPublishStateCallback(c, isSupportPublishingState);
} catch (ImsException e) {
throw new ServiceSpecificException(e.getCode(), e.getMessage());
} finally {
@@ -582,6 +606,7 @@
throw new SecurityException("Passed in PackageName can not be found on device");
}
+ final int uid = Binder.getCallingUid();
final long identity = Binder.clearCallingIdentity();
SipTransportController transport = getRcsFeatureController(subId).getFeature(
SipTransportController.class);
@@ -590,7 +615,7 @@
"This subscription does not support the creation of SIP delegates");
}
try {
- transport.createSipDelegate(subId, request, packageName, delegateState,
+ transport.createSipDelegate(subId, uid, request, packageName, delegateState,
delegateMessage);
} catch (ImsException e) {
throw new ServiceSpecificException(e.getCode(), e.getMessage());
diff --git a/src/com/android/phone/ImsStateCallbackController.java b/src/com/android/phone/ImsStateCallbackController.java
new file mode 100644
index 0000000..4e2407c
--- /dev/null
+++ b/src/com/android/phone/ImsStateCallbackController.java
@@ -0,0 +1,1184 @@
+/*
+ * Copyright (C) 2021 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.telephony.ims.ImsStateCallback.REASON_IMS_SERVICE_DISCONNECTED;
+import static android.telephony.ims.ImsStateCallback.REASON_IMS_SERVICE_NOT_READY;
+import static android.telephony.ims.ImsStateCallback.REASON_NO_IMS_SERVICE_CONFIGURED;
+import static android.telephony.ims.ImsStateCallback.REASON_SUBSCRIPTION_INACTIVE;
+import static android.telephony.ims.ImsStateCallback.REASON_UNKNOWN_PERMANENT_ERROR;
+import static android.telephony.ims.ImsStateCallback.REASON_UNKNOWN_TEMPORARY_ERROR;
+import static android.telephony.ims.feature.ImsFeature.FEATURE_MMTEL;
+import static android.telephony.ims.feature.ImsFeature.FEATURE_RCS;
+import static android.telephony.ims.feature.ImsFeature.STATE_READY;
+import static android.telephony.ims.feature.ImsFeature.STATE_UNAVAILABLE;
+
+import static com.android.ims.FeatureConnector.UNAVAILABLE_REASON_DISCONNECTED;
+import static com.android.ims.FeatureConnector.UNAVAILABLE_REASON_IMS_UNSUPPORTED;
+import static com.android.ims.FeatureConnector.UNAVAILABLE_REASON_NOT_READY;
+import static com.android.ims.FeatureConnector.UNAVAILABLE_REASON_SERVER_UNAVAILABLE;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.AsyncResult;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyRegistryManager;
+import android.telephony.ims.feature.ImsFeature;
+import android.util.LocalLog;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.ims.FeatureConnector;
+import com.android.ims.ImsManager;
+import com.android.ims.RcsFeatureManager;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.IImsStateCallback;
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConfigurationManager;
+import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.ims.ImsResolver;
+import com.android.internal.telephony.util.HandlerExecutor;
+import com.android.internal.util.IndentingPrintWriter;
+import com.android.services.telephony.rcs.RcsFeatureController;
+import com.android.telephony.Rlog;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.concurrent.Executor;
+
+/**
+ * Implementation of the controller managing {@link ImsStateCallback}s
+ */
+public class ImsStateCallbackController {
+ private static final String TAG = "ImsStateCallbackController";
+ private static final boolean VDBG = false;
+ private static final int LOG_SIZE = 50;
+
+ /**
+ * Create a FeatureConnector for this class to use to connect to an ImsManager.
+ */
+ @VisibleForTesting
+ public interface MmTelFeatureConnectorFactory {
+ /**
+ * Create a FeatureConnector for this class to use to connect to an ImsManager.
+ * @param listener will receive ImsManager instance.
+ * @param executor that the Listener callbacks will be called on.
+ * @return A FeatureConnector
+ */
+ FeatureConnector<ImsManager> create(Context context, int slotId,
+ String logPrefix, FeatureConnector.Listener<ImsManager> listener,
+ Executor executor);
+ }
+
+ /**
+ * Create a FeatureConnector for this class to use to connect to an RcsFeatureManager.
+ */
+ @VisibleForTesting
+ public interface RcsFeatureConnectorFactory {
+ /**
+ * Create a FeatureConnector for this class to use to connect to an RcsFeatureManager.
+ * @param listener will receive RcsFeatureManager instance.
+ * @param executor that the Listener callbacks will be called on.
+ * @return A FeatureConnector
+ */
+ FeatureConnector<RcsFeatureManager> create(Context context, int slotId,
+ FeatureConnector.Listener<RcsFeatureManager> listener,
+ Executor executor, String logPrefix);
+ }
+
+ /** Indicates that the state is not valid, used in ExternalRcsFeatureState only */
+ private static final int STATE_UNKNOWN = -1;
+
+ /** The unavailable reason of ImsFeature is not initialized */
+ private static final int NOT_INITIALIZED = -1;
+ /** The ImsFeature is available. */
+ private static final int AVAILABLE = 0;
+
+ private static final int EVENT_SUB_CHANGED = 1;
+ private static final int EVENT_REGISTER_CALLBACK = 2;
+ private static final int EVENT_UNREGISTER_CALLBACK = 3;
+ private static final int EVENT_CARRIER_CONFIG_CHANGED = 4;
+ private static final int EVENT_EXTERNAL_RCS_STATE_CHANGED = 5;
+ private static final int EVENT_MSIM_CONFIGURATION_CHANGE = 6;
+
+ private static ImsStateCallbackController sInstance;
+ private static final LocalLog sLocalLog = new LocalLog(LOG_SIZE);
+
+ /**
+ * get the instance
+ */
+ public static ImsStateCallbackController getInstance() {
+ synchronized (ImsStateCallbackController.class) {
+ return sInstance;
+ }
+ }
+
+ private final PhoneGlobals mApp;
+ private final Handler mHandler;
+ private final ImsResolver mImsResolver;
+ private final SparseArray<MmTelFeatureListener> mMmTelFeatureListeners = new SparseArray<>();
+ private final SparseArray<RcsFeatureListener> mRcsFeatureListeners = new SparseArray<>();
+
+ private final SubscriptionManager mSubscriptionManager;
+ private final TelephonyRegistryManager mTelephonyRegistryManager;
+ private MmTelFeatureConnectorFactory mMmTelFeatureFactory;
+ private RcsFeatureConnectorFactory mRcsFeatureFactory;
+
+ private HashMap<IBinder, CallbackWrapper> mWrappers = new HashMap<>();
+
+ private final Object mDumpLock = new Object();
+
+ private int mNumSlots;
+
+ private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent == null) {
+ return;
+ }
+ if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(intent.getAction())) {
+ Bundle bundle = intent.getExtras();
+ if (bundle == null) {
+ return;
+ }
+ int slotId = bundle.getInt(CarrierConfigManager.EXTRA_SLOT_INDEX,
+ SubscriptionManager.INVALID_PHONE_INDEX);
+ int subId = bundle.getInt(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+
+ if (slotId <= SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
+ loge("onReceive ACTION_CARRIER_CONFIG_CHANGED invalid slotId");
+ return;
+ }
+
+ if (subId <= SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ loge("onReceive ACTION_CARRIER_CONFIG_CHANGED invalid subId");
+ //subscription changed will be notified by mSubChangedListener
+ return;
+ }
+
+ notifyCarrierConfigChanged(slotId);
+ }
+ }
+ };
+
+ private final SubscriptionManager.OnSubscriptionsChangedListener mSubChangedListener =
+ new SubscriptionManager.OnSubscriptionsChangedListener() {
+ @Override
+ public void onSubscriptionsChanged() {
+ if (!mHandler.hasMessages(EVENT_SUB_CHANGED)) {
+ mHandler.sendEmptyMessage(EVENT_SUB_CHANGED);
+ }
+ }
+ };
+
+ private final class MyHandler extends Handler {
+ MyHandler(Looper looper) {
+ super(looper);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ if (VDBG) logv("handleMessage: " + msg);
+ synchronized (mDumpLock) {
+ switch (msg.what) {
+ case EVENT_SUB_CHANGED:
+ onSubChanged();
+ break;
+
+ case EVENT_REGISTER_CALLBACK:
+ onRegisterCallback((ImsStateCallbackController.CallbackWrapper) msg.obj);
+ break;
+
+ case EVENT_UNREGISTER_CALLBACK:
+ onUnregisterCallback((IImsStateCallback) msg.obj);
+ break;
+
+ case EVENT_CARRIER_CONFIG_CHANGED:
+ onCarrierConfigChanged(msg.arg1);
+ break;
+
+ case EVENT_EXTERNAL_RCS_STATE_CHANGED:
+ if (msg.obj == null) break;
+ onExternalRcsStateChanged((ExternalRcsFeatureState) msg.obj);
+ break;
+
+ case EVENT_MSIM_CONFIGURATION_CHANGE:
+ AsyncResult result = (AsyncResult) msg.obj;
+ Integer numSlots = (Integer) result.result;
+ if (numSlots == null) {
+ Log.w(TAG, "msim config change with null num slots");
+ break;
+ }
+ updateFeatureControllerSize(numSlots);
+ break;
+
+ default:
+ loge("Unhandled event " + msg.what);
+ }
+ }
+ }
+ }
+
+ private final class MmTelFeatureListener implements FeatureConnector.Listener<ImsManager> {
+ private FeatureConnector<ImsManager> mConnector;
+ private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ private int mState = STATE_UNAVAILABLE;
+ private int mReason = REASON_IMS_SERVICE_DISCONNECTED;
+
+ /*
+ * Remember the last return of verifyImsMmTelConfigured().
+ * true means ImsResolver found an IMS package for FEATURE_MMTEL.
+ *
+ * mReason is updated through connectionUnavailable triggered by ImsResolver.
+ * mHasConfig is update through notifyConfigChanged triggered by mReceiver.
+ * mHasConfig can be a redundancy of (mReason == REASON_NO_IMS_SERVICE_CONFIGURED).
+ * However, when a carrier config changes, we are not sure the order
+ * of execution of connectionUnavailable and notifyConfigChanged.
+ * So, it's safe to use a separated state to retain it.
+ * We assume mHasConfig is true, until it's determined explicitly.
+ */
+ private boolean mHasConfig = true;
+
+ private int mSlotId = -1;
+ private String mLogPrefix = "";
+
+ MmTelFeatureListener(int slotId) {
+ mSlotId = slotId;
+ mLogPrefix = "[" + slotId + ", MMTEL] ";
+ if (VDBG) logv(mLogPrefix + "created");
+
+ mConnector = mMmTelFeatureFactory.create(
+ mApp, slotId, TAG, this, new HandlerExecutor(mHandler));
+ mConnector.connect();
+ }
+
+ void setSubId(int subId) {
+ if (VDBG) logv(mLogPrefix + "setSubId mSubId=" + mSubId + ", subId=" + subId);
+ if (mSubId == subId) return;
+ logd(mLogPrefix + "setSubId changed subId=" + subId);
+
+ mSubId = subId;
+ }
+
+ void destroy() {
+ if (VDBG) logv(mLogPrefix + "destroy");
+ mConnector.disconnect();
+ mConnector = null;
+ }
+
+ @Override
+ public void connectionReady(ImsManager manager, int subId) {
+ logd(mLogPrefix + "connectionReady");
+
+ mState = STATE_READY;
+ mReason = AVAILABLE;
+ mHasConfig = true;
+ onFeatureStateChange(mSubId, FEATURE_MMTEL, mState, mReason);
+ }
+
+ @Override
+ public void connectionUnavailable(int reason) {
+ logd(mLogPrefix + "connectionUnavailable reason=" + connectorReasonToString(reason));
+
+ reason = convertReasonType(reason);
+ if (mReason == reason) return;
+
+ connectionUnavailableInternal(reason);
+ }
+
+ private void connectionUnavailableInternal(int reason) {
+ mState = STATE_UNAVAILABLE;
+ mReason = reason;
+
+ /* If having no IMS package for MMTEL,
+ * dicard the reason except REASON_NO_IMS_SERVICE_CONFIGURED. */
+ if (!mHasConfig && reason != REASON_NO_IMS_SERVICE_CONFIGURED) return;
+
+ onFeatureStateChange(mSubId, FEATURE_MMTEL, mState, mReason);
+ }
+
+ void notifyConfigChanged(boolean hasConfig) {
+ if (mHasConfig == hasConfig) return;
+
+ logd(mLogPrefix + "notifyConfigChanged " + hasConfig);
+
+ mHasConfig = hasConfig;
+ if (hasConfig) {
+ // REASON_NO_IMS_SERVICE_CONFIGURED is already reported to the clients,
+ // since there is no configuration of IMS package for MMTEL.
+ // Now, a carrier configuration change is notified and
+ // the response from ImsResolver is changed from false to true.
+ if (mState != STATE_READY) {
+ if (mReason == REASON_NO_IMS_SERVICE_CONFIGURED) {
+ // In this case, notify clients the reason, REASON_DISCONNCTED,
+ // to update the state.
+ connectionUnavailable(UNAVAILABLE_REASON_DISCONNECTED);
+ } else {
+ // ImsResolver and ImsStateCallbackController run with different Looper.
+ // In this case, FeatureConnectorListener is updated ahead of this.
+ // But, connectionUnavailable didn't notify clients since mHasConfig is
+ // false. So, notify clients here.
+ connectionUnavailableInternal(mReason);
+ }
+ }
+ } else {
+ // FeatureConnector doesn't report UNAVAILABLE_REASON_IMS_UNSUPPORTED,
+ // so report the reason here.
+ connectionUnavailable(UNAVAILABLE_REASON_IMS_UNSUPPORTED);
+ }
+ }
+
+ // called from onRegisterCallback
+ boolean notifyState(CallbackWrapper wrapper) {
+ if (VDBG) logv(mLogPrefix + "notifyState subId=" + wrapper.mSubId);
+
+ return wrapper.notifyState(mSubId, FEATURE_MMTEL, mState, mReason);
+ }
+
+ void dump(IndentingPrintWriter pw) {
+ pw.println("Listener={slotId=" + mSlotId
+ + ", subId=" + mSubId
+ + ", state=" + ImsFeature.STATE_LOG_MAP.get(mState)
+ + ", reason=" + imsStateReasonToString(mReason)
+ + ", hasConfig=" + mHasConfig
+ + "}");
+ }
+ }
+
+ private final class RcsFeatureListener implements FeatureConnector.Listener<RcsFeatureManager> {
+ private FeatureConnector<RcsFeatureManager> mConnector;
+ private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ private int mState = STATE_UNAVAILABLE;
+ private int mReason = REASON_IMS_SERVICE_DISCONNECTED;
+
+ /*
+ * Remember the last return of verifyImsMmTelConfigured().
+ * true means ImsResolver found an IMS package for FEATURE_RCS.
+ *
+ * mReason is updated through connectionUnavailable triggered by ImsResolver.
+ * mHasConfig is update through notifyConfigChanged triggered by mReceiver,
+ * and notifyExternalRcsState which triggered by TelephonyRcsService refers it.
+ * mHasConfig can be a redundancy of (mReason == REASON_NO_IMS_SERVICE_CONFIGURED).
+ * However, when a carrier config changes, we are not sure the order
+ * of execution of connectionUnavailable, notifyConfigChanged and notifyExternalRcsState.
+ * So, it's safe to use a separated state to retain it.
+ * We assume mHasConfig is true, until it's determined explicitly.
+ */
+ private boolean mHasConfig = true;
+
+ /*
+ * TelephonyRcsService doesn’t try to connect to RcsFeature if there is no active feature
+ * for a given subscription. The active features are declared by carrier configs and
+ * configuration resources. The APIs of ImsRcsManager and SipDelegateManager are available
+ * only when the RcsFeatureController has a STATE_READY state connection.
+ * This configuration is different from the configuration of IMS package for RCS.
+ * ImsStateCallbackController's FeatureConnectorListener can be STATE_READY state,
+ * even in case there is no active RCS feature. But Manager's APIs throws exception.
+ *
+ * For RCS, in addition to mHasConfig, the sate of TelephonyRcsService and
+ * RcsFeatureConnector will be traced to determine the state to be notified to clients.
+ */
+ private ExternalRcsFeatureState mExternalState = null;
+
+ private int mSlotId = -1;
+ private String mLogPrefix = "";
+
+ RcsFeatureListener(int slotId) {
+ mSlotId = slotId;
+ mLogPrefix = "[" + slotId + ", RCS] ";
+ if (VDBG) logv(mLogPrefix + "created");
+
+ mConnector = mRcsFeatureFactory.create(
+ mApp, slotId, this, new HandlerExecutor(mHandler), TAG);
+ mConnector.connect();
+ }
+
+ void setSubId(int subId) {
+ if (VDBG) logv(mLogPrefix + "setSubId mSubId=" + mSubId + ", subId=" + subId);
+ if (mSubId == subId) return;
+ logd(mLogPrefix + "setSubId changed subId=" + subId);
+
+ mSubId = subId;
+ }
+
+ void destroy() {
+ if (VDBG) logv(mLogPrefix + "destroy");
+
+ mConnector.disconnect();
+ mConnector = null;
+ }
+
+ @Override
+ public void connectionReady(RcsFeatureManager manager, int subId) {
+ logd(mLogPrefix + "connectionReady");
+
+ mState = STATE_READY;
+ mReason = AVAILABLE;
+ mHasConfig = true;
+
+ if (mExternalState != null && mExternalState.isReady()) {
+ onFeatureStateChange(mSubId, FEATURE_RCS, mState, mReason);
+ }
+ }
+
+ @Override
+ public void connectionUnavailable(int reason) {
+ logd(mLogPrefix + "connectionUnavailable reason=" + connectorReasonToString(reason));
+
+ reason = convertReasonType(reason);
+ if (mReason == reason) return;
+
+ connectionUnavailableInternal(reason);
+ }
+
+ private void connectionUnavailableInternal(int reason) {
+ mState = STATE_UNAVAILABLE;
+ mReason = reason;
+
+ /* If having no IMS package for RCS,
+ * dicard the reason except REASON_NO_IMS_SERVICE_CONFIGURED. */
+ if (!mHasConfig && reason != REASON_NO_IMS_SERVICE_CONFIGURED) return;
+
+ if (mExternalState == null && reason != REASON_NO_IMS_SERVICE_CONFIGURED) {
+ // Wait until TelephonyRcsService notifies its state.
+ return;
+ }
+
+ if (mExternalState != null && !mExternalState.hasActiveFeatures()) {
+ // notifyExternalRcsState has notified REASON_NO_IMS_SERVICE_CONFIGURED already
+ // ignore it
+ return;
+ }
+
+ if ((mExternalState != null && mExternalState.hasActiveFeatures())
+ || mReason == REASON_NO_IMS_SERVICE_CONFIGURED) {
+ onFeatureStateChange(mSubId, FEATURE_RCS, mState, mReason);
+ }
+ }
+
+ void notifyConfigChanged(boolean hasConfig) {
+ if (mHasConfig == hasConfig) return;
+
+ logd(mLogPrefix + "notifyConfigChanged " + hasConfig);
+
+ mHasConfig = hasConfig;
+ if (hasConfig) {
+ // REASON_NO_IMS_SERVICE_CONFIGURED is already reported to the clients,
+ // since there is no configuration of IMS package for RCS.
+ // Now, a carrier configuration change is notified and
+ // the response from ImsResolver is changed from false to true.
+ if (mState != STATE_READY) {
+ if (mReason == REASON_NO_IMS_SERVICE_CONFIGURED) {
+ // In this case, notify clients the reason, REASON_DISCONNCTED,
+ // to update the state.
+ connectionUnavailable(UNAVAILABLE_REASON_DISCONNECTED);
+ } else {
+ // ImsResolver and ImsStateCallbackController run with different Looper.
+ // In this case, FeatureConnectorListener is updated ahead of this.
+ // But, connectionUnavailable didn't notify clients since mHasConfig is
+ // false. So, notify clients here.
+ connectionUnavailableInternal(mReason);
+ }
+ }
+ } else {
+ // FeatureConnector doesn't report UNAVAILABLE_REASON_IMS_UNSUPPORTED,
+ // so report the reason here.
+ connectionUnavailable(UNAVAILABLE_REASON_IMS_UNSUPPORTED);
+ }
+ }
+
+ void notifyExternalRcsState(ExternalRcsFeatureState fs) {
+ if (VDBG) {
+ logv(mLogPrefix + "notifyExternalRcsState"
+ + " state=" + (fs.mState == STATE_UNKNOWN
+ ? "" : ImsFeature.STATE_LOG_MAP.get(fs.mState))
+ + ", reason=" + imsStateReasonToString(fs.mReason));
+ }
+
+ ExternalRcsFeatureState oldFs = mExternalState;
+ // External state is from TelephonyRcsService while a feature is added or removed.
+ if (fs.mState == STATE_UNKNOWN) {
+ if (oldFs != null) fs.mState = oldFs.mState;
+ else fs.mState = STATE_UNAVAILABLE;
+ }
+
+ mExternalState = fs;
+
+ // No IMS package found.
+ // REASON_NO_IMS_SERVICE_CONFIGURED is notified to clients already.
+ if (!mHasConfig) return;
+
+ if (fs.hasActiveFeatures()) {
+ if (mState == STATE_READY) {
+ if ((oldFs == null || !oldFs.isReady()) && fs.isReady()) {
+ // it is waiting RcsFeatureConnector's notification.
+ // notify clients here.
+ onFeatureStateChange(mSubId, FEATURE_RCS, mState, mReason);
+ } else if (!fs.isReady()) {
+ // Wait RcsFeatureConnector's notification
+ } else {
+ // ignore duplicated notification
+ }
+ }
+ } else {
+ // notify only once
+ if (oldFs == null || oldFs.hasActiveFeatures()) {
+ if (mReason != REASON_NO_IMS_SERVICE_CONFIGURED) {
+ onFeatureStateChange(
+ mSubId, FEATURE_RCS, STATE_UNAVAILABLE,
+ REASON_NO_IMS_SERVICE_CONFIGURED);
+ }
+ } else {
+ // ignore duplicated notification
+ }
+ }
+ }
+
+ // called from onRegisterCallback
+ boolean notifyState(CallbackWrapper wrapper) {
+ if (VDBG) logv(mLogPrefix + "notifyState subId=" + wrapper.mSubId);
+
+ if (mHasConfig) {
+ if (mExternalState == null) {
+ // Wait until TelephonyRcsService notifies its state.
+ return wrapper.notifyState(mSubId, FEATURE_RCS, STATE_UNAVAILABLE,
+ REASON_IMS_SERVICE_DISCONNECTED);
+ } else if (!mExternalState.hasActiveFeatures()) {
+ return wrapper.notifyState(mSubId, FEATURE_RCS, STATE_UNAVAILABLE,
+ REASON_NO_IMS_SERVICE_CONFIGURED);
+ }
+ }
+
+ return wrapper.notifyState(mSubId, FEATURE_RCS, mState, mReason);
+ }
+
+ void dump(IndentingPrintWriter pw) {
+ pw.println("Listener={slotId=" + mSlotId
+ + ", subId=" + mSubId
+ + ", state=" + ImsFeature.STATE_LOG_MAP.get(mState)
+ + ", reason=" + imsStateReasonToString(mReason)
+ + ", hasConfig=" + mHasConfig
+ + ", isReady=" + (mExternalState == null ? false : mExternalState.isReady())
+ + ", hasFeatures=" + (mExternalState == null ? false
+ : mExternalState.hasActiveFeatures())
+ + "}");
+ }
+ }
+
+ /**
+ * A wrapper class for the callback registered
+ */
+ private static class CallbackWrapper {
+ private final int mSubId;
+ private final int mRequiredFeature;
+ private final IImsStateCallback mCallback;
+ private final IBinder mBinder;
+ private final String mCallingPackage;
+ private int mLastReason = NOT_INITIALIZED;
+
+ CallbackWrapper(int subId, int feature, IImsStateCallback callback,
+ String callingPackage) {
+ mSubId = subId;
+ mRequiredFeature = feature;
+ mCallback = callback;
+ mBinder = callback.asBinder();
+ mCallingPackage = callingPackage;
+ }
+
+ /**
+ * @return false when accessing callback binder throws an Exception.
+ * That means the callback binder is not valid any longer.
+ * The death of remote process can cause this.
+ * This instance shall be removed from the list.
+ */
+ boolean notifyState(int subId, int feature, int state, int reason) {
+ if (VDBG) {
+ logv("CallbackWrapper notifyState subId=" + subId
+ + ", feature=" + ImsFeature.FEATURE_LOG_MAP.get(feature)
+ + ", state=" + ImsFeature.STATE_LOG_MAP.get(state)
+ + ", reason=" + imsStateReasonToString(reason));
+ }
+
+ try {
+ if (state == STATE_READY) {
+ mCallback.onAvailable();
+ } else {
+ mCallback.onUnavailable(reason);
+ }
+ mLastReason = reason;
+ } catch (Exception e) {
+ loge("CallbackWrapper notifyState e=" + e);
+ return false;
+ }
+
+ return true;
+ }
+
+ void notifyInactive() {
+ if (VDBG) logv("CallbackWrapper notifyInactive subId=" + mSubId);
+
+ try {
+ mCallback.onUnavailable(REASON_SUBSCRIPTION_INACTIVE);
+ } catch (Exception e) {
+ // ignored
+ }
+ }
+
+ void dump(IndentingPrintWriter pw) {
+ pw.println("CallbackWrapper={subId=" + mSubId
+ + ", feature=" + ImsFeature.FEATURE_LOG_MAP.get(mRequiredFeature)
+ + ", reason=" + imsStateReasonToString(mLastReason)
+ + ", pkg=" + mCallingPackage
+ + "}");
+ }
+ }
+
+ private static class ExternalRcsFeatureState {
+ private int mSlotId;
+ private int mState = STATE_UNAVAILABLE;
+ private int mReason = NOT_INITIALIZED;
+
+ ExternalRcsFeatureState(int slotId, int state, int reason) {
+ mSlotId = slotId;
+ mState = state;
+ mReason = reason;
+ }
+
+ boolean hasActiveFeatures() {
+ return mReason != REASON_NO_IMS_SERVICE_CONFIGURED;
+ }
+
+ boolean isReady() {
+ return mState == STATE_READY;
+ }
+ }
+
+ /**
+ * create an instance
+ */
+ public static ImsStateCallbackController make(PhoneGlobals app, int numSlots) {
+ synchronized (ImsStateCallbackController.class) {
+ if (sInstance == null) {
+ logd("ImsStateCallbackController created");
+
+ HandlerThread handlerThread = new HandlerThread(TAG);
+ handlerThread.start();
+ sInstance = new ImsStateCallbackController(app, handlerThread.getLooper(), numSlots,
+ ImsManager::getConnector, RcsFeatureManager::getConnector,
+ ImsResolver.getInstance());
+ }
+ }
+ return sInstance;
+ }
+
+ @VisibleForTesting
+ public ImsStateCallbackController(PhoneGlobals app, Looper looper, int numSlots,
+ MmTelFeatureConnectorFactory mmTelFactory, RcsFeatureConnectorFactory rcsFactory,
+ ImsResolver imsResolver) {
+ mApp = app;
+ mHandler = new MyHandler(looper);
+ mImsResolver = imsResolver;
+ mSubscriptionManager = mApp.getSystemService(SubscriptionManager.class);
+ mTelephonyRegistryManager = mApp.getSystemService(TelephonyRegistryManager.class);
+ mMmTelFeatureFactory = mmTelFactory;
+ mRcsFeatureFactory = rcsFactory;
+
+ updateFeatureControllerSize(numSlots);
+
+ mTelephonyRegistryManager.addOnSubscriptionsChangedListener(
+ mSubChangedListener, mSubChangedListener.getHandlerExecutor());
+
+ PhoneConfigurationManager.registerForMultiSimConfigChange(mHandler,
+ EVENT_MSIM_CONFIGURATION_CHANGE, null);
+
+ mApp.registerReceiver(mReceiver, new IntentFilter(
+ CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED));
+
+ onSubChanged();
+ }
+
+ /**
+ * Update the number of {@link RcsFeatureController}s that are created based on the number of
+ * active slots on the device.
+ */
+ @VisibleForTesting
+ public void updateFeatureControllerSize(int newNumSlots) {
+ if (mNumSlots != newNumSlots) {
+ logd("updateFeatures: oldSlots=" + mNumSlots
+ + ", newNumSlots=" + newNumSlots);
+ if (mNumSlots < newNumSlots) {
+ for (int i = mNumSlots; i < newNumSlots; i++) {
+ MmTelFeatureListener m = new MmTelFeatureListener(i);
+ mMmTelFeatureListeners.put(i, m);
+ RcsFeatureListener r = new RcsFeatureListener(i);
+ mRcsFeatureListeners.put(i, r);
+ }
+ } else {
+ for (int i = (mNumSlots - 1); i > (newNumSlots - 1); i--) {
+ MmTelFeatureListener m = mMmTelFeatureListeners.get(i);
+ if (m != null) {
+ mMmTelFeatureListeners.remove(i);
+ m.destroy();
+ }
+ RcsFeatureListener r = mRcsFeatureListeners.get(i);
+ if (r != null) {
+ mRcsFeatureListeners.remove(i);
+ r.destroy();
+ }
+ }
+ }
+ }
+ mNumSlots = newNumSlots;
+ }
+
+ /**
+ * Dependencies for testing.
+ */
+ @VisibleForTesting
+ public void onSubChanged() {
+ for (int i = 0; i < mMmTelFeatureListeners.size(); i++) {
+ MmTelFeatureListener l = mMmTelFeatureListeners.valueAt(i);
+ l.setSubId(getSubId(i));
+ }
+
+ for (int i = 0; i < mRcsFeatureListeners.size(); i++) {
+ RcsFeatureListener l = mRcsFeatureListeners.valueAt(i);
+ l.setSubId(getSubId(i));
+ }
+
+ if (mWrappers.size() == 0) return;
+
+ ArrayList<IBinder> inactiveCallbacks = new ArrayList<>();
+ final int[] activeSubs = mSubscriptionManager.getActiveSubscriptionIdList();
+
+ if (VDBG) logv("onSubChanged activeSubs=" + Arrays.toString(activeSubs));
+
+ // Remove callbacks for inactive subscriptions
+ for (IBinder binder : mWrappers.keySet()) {
+ CallbackWrapper wrapper = mWrappers.get(binder);
+ if (wrapper != null) {
+ if (!isActive(activeSubs, wrapper.mSubId)) {
+ // inactive subscription
+ inactiveCallbacks.add(binder);
+ }
+ } else {
+ // unexpected, remove it
+ inactiveCallbacks.add(binder);
+ }
+ }
+ removeInactiveCallbacks(inactiveCallbacks, "onSubChanged");
+ }
+
+ private void onFeatureStateChange(int subId, int feature, int state, int reason) {
+ if (VDBG) {
+ logv("onFeatureStateChange subId=" + subId
+ + ", feature=" + ImsFeature.FEATURE_LOG_MAP.get(feature)
+ + ", state=" + ImsFeature.STATE_LOG_MAP.get(state)
+ + ", reason=" + imsStateReasonToString(reason));
+ }
+
+ ArrayList<IBinder> inactiveCallbacks = new ArrayList<>();
+ mWrappers.values().forEach(wrapper -> {
+ if (subId == wrapper.mSubId
+ && feature == wrapper.mRequiredFeature
+ && !wrapper.notifyState(subId, feature, state, reason)) {
+ // callback has exception, remove it
+ inactiveCallbacks.add(wrapper.mBinder);
+ }
+ });
+ removeInactiveCallbacks(inactiveCallbacks, "onFeatureStateChange");
+ }
+
+ private void onRegisterCallback(CallbackWrapper wrapper) {
+ if (wrapper == null) return;
+
+ if (VDBG) logv("onRegisterCallback before size=" + mWrappers.size());
+ if (VDBG) {
+ logv("onRegisterCallback subId=" + wrapper.mSubId
+ + ", feature=" + wrapper.mRequiredFeature);
+ }
+
+ // Not sure the following case can happen or not:
+ // step1) Subscription changed
+ // step2) ImsStateCallbackController not processed onSubChanged yet
+ // step3) Client registers with a strange subId
+ // The validity of the subId is checked PhoneInterfaceManager#registerImsStateCallback.
+ // So, register the wrapper here before trying to notifyState.
+ // TODO: implement the recovery for this case, notifying the current reson, in onSubChanged
+ mWrappers.put(wrapper.mBinder, wrapper);
+
+ if (wrapper.mRequiredFeature == FEATURE_MMTEL) {
+ for (int i = 0; i < mMmTelFeatureListeners.size(); i++) {
+ MmTelFeatureListener l = mMmTelFeatureListeners.valueAt(i);
+ if (l.mSubId == wrapper.mSubId
+ && !l.notifyState(wrapper)) {
+ mWrappers.remove(wrapper.mBinder);
+ break;
+ }
+ }
+ } else if (wrapper.mRequiredFeature == FEATURE_RCS) {
+ for (int i = 0; i < mRcsFeatureListeners.size(); i++) {
+ RcsFeatureListener l = mRcsFeatureListeners.valueAt(i);
+ if (l.mSubId == wrapper.mSubId
+ && !l.notifyState(wrapper)) {
+ mWrappers.remove(wrapper.mBinder);
+ break;
+ }
+ }
+ }
+
+ if (VDBG) logv("onRegisterCallback after size=" + mWrappers.size());
+ }
+
+ private void onUnregisterCallback(IImsStateCallback cb) {
+ if (cb == null) return;
+ mWrappers.remove(cb.asBinder());
+ }
+
+ private void onCarrierConfigChanged(int slotId) {
+ if (slotId >= mNumSlots) {
+ logd("onCarrierConfigChanged invalid slotId "
+ + slotId + ", mNumSlots=" + mNumSlots);
+ return;
+ }
+
+ logv("onCarrierConfigChanged slotId=" + slotId);
+
+ boolean hasConfig = verifyImsMmTelConfigured(slotId);
+ if (slotId < mMmTelFeatureListeners.size()) {
+ MmTelFeatureListener listener = mMmTelFeatureListeners.valueAt(slotId);
+ listener.notifyConfigChanged(hasConfig);
+ }
+
+ hasConfig = verifyImsRcsConfigured(slotId);
+ if (slotId < mRcsFeatureListeners.size()) {
+ RcsFeatureListener listener = mRcsFeatureListeners.valueAt(slotId);
+ listener.notifyConfigChanged(hasConfig);
+ }
+ }
+
+ private void onExternalRcsStateChanged(ExternalRcsFeatureState fs) {
+ logv("onExternalRcsStateChanged slotId=" + fs.mSlotId
+ + ", state=" + (fs.mState == STATE_UNKNOWN
+ ? "" : ImsFeature.STATE_LOG_MAP.get(fs.mState))
+ + ", reason=" + imsStateReasonToString(fs.mReason));
+
+ RcsFeatureListener listener = mRcsFeatureListeners.get(fs.mSlotId);
+ if (listener != null) {
+ listener.notifyExternalRcsState(fs);
+ } else {
+ // unexpected state
+ loge("onExternalRcsStateChanged slotId=" + fs.mSlotId + ", no listener.");
+ }
+ }
+
+ /**
+ * Interface to be notified from TelephonyRcsSerice and RcsFeatureController
+ *
+ * @param ready true if feature's state is STATE_READY. Valid only when it is true.
+ * @param hasActiveFeatures true if the RcsFeatureController has active features.
+ */
+ public void notifyExternalRcsStateChanged(
+ int slotId, boolean ready, boolean hasActiveFeatures) {
+ int state = STATE_UNKNOWN;
+ int reason = REASON_IMS_SERVICE_DISCONNECTED;
+
+ if (ready) {
+ // From RcsFeatureController
+ state = STATE_READY;
+ reason = AVAILABLE;
+ } else if (!hasActiveFeatures) {
+ // From TelephonyRcsService
+ reason = REASON_NO_IMS_SERVICE_CONFIGURED;
+ state = STATE_UNAVAILABLE;
+ } else {
+ // From TelephonyRcsService
+ // TelephonyRcsService doesn't know the exact state of FeatureConnection.
+ // Only when there is no feature, we can assume the state.
+ }
+
+ if (VDBG) {
+ logv("notifyExternalRcsStateChanged slotId=" + slotId
+ + ", ready=" + ready
+ + ", hasActiveFeatures=" + hasActiveFeatures);
+ }
+
+ ExternalRcsFeatureState fs = new ExternalRcsFeatureState(slotId, state, reason);
+ mHandler.sendMessage(mHandler.obtainMessage(EVENT_EXTERNAL_RCS_STATE_CHANGED, fs));
+ }
+
+ /**
+ * Notifies carrier configuration has changed.
+ */
+ @VisibleForTesting
+ public void notifyCarrierConfigChanged(int slotId) {
+ if (VDBG) logv("notifyCarrierConfigChanged slotId=" + slotId);
+ mHandler.sendMessage(mHandler.obtainMessage(EVENT_CARRIER_CONFIG_CHANGED, slotId, 0));
+ }
+ /**
+ * Register IImsStateCallback
+ *
+ * @param feature for which state is changed, ImsFeature.FEATURE_*
+ */
+ public void registerImsStateCallback(int subId, int feature, IImsStateCallback cb,
+ String callingPackage) {
+ if (VDBG) {
+ logv("registerImsStateCallback subId=" + subId
+ + ", feature=" + feature + ", pkg=" + callingPackage);
+ }
+
+ CallbackWrapper wrapper = new CallbackWrapper(subId, feature, cb, callingPackage);
+ mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_CALLBACK, wrapper));
+ }
+
+ /**
+ * Unegister previously registered callback
+ */
+ public void unregisterImsStateCallback(IImsStateCallback cb) {
+ if (VDBG) logv("unregisterImsStateCallback");
+
+ mHandler.sendMessage(mHandler.obtainMessage(EVENT_UNREGISTER_CALLBACK, cb));
+ }
+
+ private void removeInactiveCallbacks(
+ ArrayList<IBinder> inactiveCallbacks, String message) {
+ if (inactiveCallbacks == null || inactiveCallbacks.size() == 0) return;
+
+ if (VDBG) {
+ logv("removeInactiveCallbacks size="
+ + inactiveCallbacks.size() + " from " + message);
+ }
+
+ for (IBinder binder : inactiveCallbacks) {
+ CallbackWrapper wrapper = mWrappers.get(binder);
+ if (wrapper != null) {
+ // Send the reason REASON_SUBSCRIPTION_INACTIVE to the client
+ wrapper.notifyInactive();
+ mWrappers.remove(binder);
+ }
+ }
+ inactiveCallbacks.clear();
+ }
+
+ private int getSubId(int slotId) {
+ Phone phone = mPhoneFactoryProxy.getPhone(slotId);
+ if (phone != null) return phone.getSubId();
+ return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ }
+
+ private static boolean isActive(final int[] activeSubs, int subId) {
+ for (int i : activeSubs) {
+ if (i == subId) return true;
+ }
+ return false;
+ }
+
+ private static int convertReasonType(int reason) {
+ switch(reason) {
+ case UNAVAILABLE_REASON_NOT_READY:
+ return REASON_IMS_SERVICE_NOT_READY;
+ case UNAVAILABLE_REASON_IMS_UNSUPPORTED:
+ return REASON_NO_IMS_SERVICE_CONFIGURED;
+ default:
+ break;
+ }
+
+ return REASON_IMS_SERVICE_DISCONNECTED;
+ }
+
+ private boolean verifyImsMmTelConfigured(int slotId) {
+ boolean ret = false;
+ if (mImsResolver == null) {
+ loge("verifyImsMmTelConfigured mImsResolver is null");
+ } else {
+ ret = mImsResolver.isImsServiceConfiguredForFeature(slotId, FEATURE_MMTEL);
+ }
+ if (VDBG) logv("verifyImsMmTelConfigured slotId=" + slotId + ", ret=" + ret);
+ return ret;
+ }
+
+ private boolean verifyImsRcsConfigured(int slotId) {
+ boolean ret = false;
+ if (mImsResolver == null) {
+ loge("verifyImsRcsConfigured mImsResolver is null");
+ } else {
+ ret = mImsResolver.isImsServiceConfiguredForFeature(slotId, FEATURE_RCS);
+ }
+ if (VDBG) logv("verifyImsRcsConfigured slotId=" + slotId + ", ret=" + ret);
+ return ret;
+ }
+
+ private static String connectorReasonToString(int reason) {
+ switch(reason) {
+ case UNAVAILABLE_REASON_DISCONNECTED:
+ return "DISCONNECTED";
+ case UNAVAILABLE_REASON_NOT_READY:
+ return "NOT_READY";
+ case UNAVAILABLE_REASON_IMS_UNSUPPORTED:
+ return "IMS_UNSUPPORTED";
+ case UNAVAILABLE_REASON_SERVER_UNAVAILABLE:
+ return "SERVER_UNAVAILABLE";
+ default:
+ break;
+ }
+ return "";
+ }
+
+ private static String imsStateReasonToString(int reason) {
+ switch(reason) {
+ case AVAILABLE:
+ return "READY";
+ case REASON_UNKNOWN_TEMPORARY_ERROR:
+ return "UNKNOWN_TEMPORARY_ERROR";
+ case REASON_UNKNOWN_PERMANENT_ERROR:
+ return "UNKNOWN_PERMANENT_ERROR";
+ case REASON_IMS_SERVICE_DISCONNECTED:
+ return "IMS_SERVICE_DISCONNECTED";
+ case REASON_NO_IMS_SERVICE_CONFIGURED:
+ return "NO_IMS_SERVICE_CONFIGURED";
+ case REASON_SUBSCRIPTION_INACTIVE:
+ return "SUBSCRIPTION_INACTIVE";
+ case REASON_IMS_SERVICE_NOT_READY:
+ return "IMS_SERVICE_NOT_READY";
+ default:
+ break;
+ }
+ return "";
+ }
+
+ /**
+ * PhoneFactory Dependencies for testing.
+ */
+ @VisibleForTesting
+ public interface PhoneFactoryProxy {
+ /**
+ * Override getPhone for testing.
+ */
+ Phone getPhone(int index);
+ }
+
+ private PhoneFactoryProxy mPhoneFactoryProxy = new PhoneFactoryProxy() {
+ @Override
+ public Phone getPhone(int index) {
+ return PhoneFactory.getPhone(index);
+ }
+ };
+
+ private void release() {
+ if (VDBG) logv("release");
+
+ mTelephonyRegistryManager.removeOnSubscriptionsChangedListener(mSubChangedListener);
+ mApp.unregisterReceiver(mReceiver);
+
+ for (int i = 0; i < mMmTelFeatureListeners.size(); i++) {
+ mMmTelFeatureListeners.valueAt(i).destroy();
+ }
+ mMmTelFeatureListeners.clear();
+
+ for (int i = 0; i < mRcsFeatureListeners.size(); i++) {
+ mRcsFeatureListeners.valueAt(i).destroy();
+ }
+ mRcsFeatureListeners.clear();
+ }
+
+ /**
+ * destroy the instance
+ */
+ @VisibleForTesting
+ public void destroy() {
+ if (VDBG) logv("destroy it");
+
+ release();
+ mHandler.getLooper().quit();
+ }
+
+ /**
+ * get the handler
+ */
+ @VisibleForTesting
+ public Handler getHandler() {
+ return mHandler;
+ }
+
+ /**
+ * Determine whether the callback is registered or not
+ */
+ @VisibleForTesting
+ public boolean isRegistered(IImsStateCallback cb) {
+ if (cb == null) return false;
+ return mWrappers.containsKey(cb.asBinder());
+ }
+
+ /**
+ * Dump this instance into a readable format for dumpsys usage.
+ */
+ public void dump(IndentingPrintWriter pw) {
+ pw.increaseIndent();
+ synchronized (mDumpLock) {
+ pw.println("CallbackWrappers:");
+ pw.increaseIndent();
+ mWrappers.values().forEach(wrapper -> wrapper.dump(pw));
+ pw.decreaseIndent();
+ pw.println("MmTelFeatureListeners:");
+ pw.increaseIndent();
+ for (int i = 0; i < mNumSlots; i++) {
+ MmTelFeatureListener l = mMmTelFeatureListeners.get(i);
+ if (l == null) continue;
+ l.dump(pw);
+ }
+ pw.decreaseIndent();
+ pw.println("RcsFeatureListeners:");
+ pw.increaseIndent();
+ for (int i = 0; i < mNumSlots; i++) {
+ RcsFeatureListener l = mRcsFeatureListeners.get(i);
+ if (l == null) continue;
+ l.dump(pw);
+ }
+ pw.decreaseIndent();
+ pw.println("Most recent logs:");
+ pw.increaseIndent();
+ sLocalLog.dump(pw);
+ pw.decreaseIndent();
+ }
+ pw.decreaseIndent();
+ }
+
+ private static void logv(String msg) {
+ Rlog.d(TAG, msg);
+ }
+
+ private static void logd(String msg) {
+ Rlog.d(TAG, msg);
+ sLocalLog.log(msg);
+ }
+
+ private static void loge(String msg) {
+ Rlog.e(TAG, msg);
+ sLocalLog.log(msg);
+ }
+}
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index fb45f4c..f2641a1 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -567,8 +567,6 @@
Intent intent = new Intent(TelecomManager.ACTION_SHOW_CALL_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.setPackage(mContext.getResources().getString(
- R.string.call_settings_package_name));
SubscriptionInfoHelper.addExtrasToIntent(
intent, mSubscriptionManager.getActiveSubscriptionInfo(subId));
builder.setContentIntent(PendingIntent.getActivity(mContext, subId /* requestCode */,
diff --git a/src/com/android/phone/PhoneDisplayMessage.java b/src/com/android/phone/PhoneDisplayMessage.java
index 199fbb8..be7fc7f 100644
--- a/src/com/android/phone/PhoneDisplayMessage.java
+++ b/src/com/android/phone/PhoneDisplayMessage.java
@@ -68,7 +68,7 @@
// displaying system alert dialog on the screen instead of
// using another activity to display the message. This
// places the message at the forefront of the UI.
- sDisplayMessageDialog = new AlertDialog.Builder(context)
+ sDisplayMessageDialog = FrameworksUtils.makeAlertDialogBuilder(context)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle(title)
.setMessage(msg)
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index 2535365..a4f405b 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -73,7 +73,7 @@
import com.android.internal.telephony.ims.ImsResolver;
import com.android.internal.telephony.imsphone.ImsPhone;
import com.android.internal.telephony.imsphone.ImsPhoneCallTracker;
-import com.android.internal.telephony.uicc.UiccCard;
+import com.android.internal.telephony.uicc.UiccPort;
import com.android.internal.telephony.uicc.UiccProfile;
import com.android.internal.util.IndentingPrintWriter;
import com.android.phone.settings.SettingsConstants;
@@ -155,11 +155,12 @@
CallManager mCM;
CallNotifier notifier;
- CallerInfoCache callerInfoCache;
NotificationMgr notificationMgr;
TelephonyRcsService mTelephonyRcsService;
public PhoneInterfaceManager phoneMgr;
public ImsRcsController imsRcsController;
+ public ImsStateCallbackController mImsStateCallbackController;
+ public ImsProvisioningController mImsProvisioningController;
CarrierConfigLoader configLoader;
private Phone phoneInEcm;
@@ -242,13 +243,13 @@
// if passed in subType is unknown, retrieve it here.
if (subType == -1) {
- final UiccCard uiccCard = phone.getUiccCard();
- if (uiccCard == null) {
+ final UiccPort uiccPort = phone.getUiccPort();
+ if (uiccPort == null) {
Log.e(LOG_TAG,
- "handleSimLock: uiccCard for phone " + phone.getPhoneId() + " is null");
+ "handleSimLock: uiccPort for phone " + phone.getPhoneId() + " is null");
return;
}
- final UiccProfile uiccProfile = uiccCard.getUiccProfile();
+ final UiccProfile uiccProfile = uiccPort.getUiccProfile();
if (uiccProfile == null) {
Log.e(LOG_TAG,
"handleSimLock: uiccProfile for phone " + phone.getPhoneId() + " is null");
@@ -458,21 +459,19 @@
mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
- // Create the CallerInfoCache singleton, which remembers custom ring tone and
- // send-to-voicemail settings.
- //
- // The asynchronous caching will start just after this call.
- callerInfoCache = CallerInfoCache.init(this);
-
phoneMgr = PhoneInterfaceManager.init(this);
imsRcsController = ImsRcsController.init(this);
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS)) {
+ mImsStateCallbackController =
+ ImsStateCallbackController.make(this, PhoneFactory.getPhones().length);
mTelephonyRcsService = new TelephonyRcsService(this,
PhoneFactory.getPhones().length);
mTelephonyRcsService.initialize();
imsRcsController.setRcsService(mTelephonyRcsService);
+ mImsProvisioningController =
+ ImsProvisioningController.make(this, PhoneFactory.getPhones().length);
}
configLoader = CarrierConfigLoader.init(this);
@@ -489,8 +488,12 @@
mCM.registerForMmiComplete(mHandler, MMI_COMPLETE, null);
// Initialize cell status using current airplane mode.
- handleAirplaneModeChange(this, Settings.Global.getInt(getContentResolver(),
- Settings.Global.AIRPLANE_MODE_ON, AIRPLANE_OFF));
+ handleAirplaneModeChange(
+ Settings.Global.getInt(
+ getContentResolver(),
+ Settings.Global.AIRPLANE_MODE_ON,
+ AIRPLANE_OFF)
+ == AIRPLANE_ON);
// Register for misc other intent broadcasts.
IntentFilter intentFilter =
@@ -649,20 +652,20 @@
notifier.updateCallNotifierRegistrationsAfterRadioTechnologyChange();
}
- private void handleAirplaneModeChange(Context context, int newMode) {
- int cellState = Settings.Global.getInt(context.getContentResolver(),
- Settings.Global.CELL_ON, PhoneConstants.CELL_ON_FLAG);
- boolean isAirplaneNewlyOn = (newMode == 1);
+ private void handleAirplaneModeChange(boolean isAirplaneNewlyOn) {
+ int cellState =
+ Settings.Global.getInt(
+ getContentResolver(), Settings.Global.CELL_ON, PhoneConstants.CELL_ON_FLAG);
switch (cellState) {
case PhoneConstants.CELL_OFF_FLAG:
// Airplane mode does not affect the cell radio if user
// has turned it off.
break;
case PhoneConstants.CELL_ON_FLAG:
- maybeTurnCellOff(context, isAirplaneNewlyOn);
+ maybeTurnCellOff(isAirplaneNewlyOn);
break;
case PhoneConstants.CELL_OFF_DUE_TO_AIRPLANE_MODE_FLAG:
- maybeTurnCellOn(context, isAirplaneNewlyOn);
+ maybeTurnCellOn(isAirplaneNewlyOn);
break;
}
for (Phone phone : PhoneFactory.getPhones()) {
@@ -673,57 +676,59 @@
/*
* Returns true if the radio must be turned off when entering airplane mode.
*/
- private boolean isCellOffInAirplaneMode(Context context) {
- String airplaneModeRadios = Settings.Global.getString(context.getContentResolver(),
- Settings.Global.AIRPLANE_MODE_RADIOS);
+ private boolean isCellOffInAirplaneMode() {
+ String airplaneModeRadios =
+ Settings.Global.getString(
+ getContentResolver(), Settings.Global.AIRPLANE_MODE_RADIOS);
return airplaneModeRadios == null
|| airplaneModeRadios.contains(Settings.Global.RADIO_CELL);
}
- private void setRadioPowerOff(Context context) {
+ private void setRadioPowerOff() {
Log.i(LOG_TAG, "Turning radio off - airplane");
- Settings.Global.putInt(context.getContentResolver(), Settings.Global.CELL_ON,
- PhoneConstants.CELL_OFF_DUE_TO_AIRPLANE_MODE_FLAG);
- TelephonyProperties.airplane_mode_on(true); // true means int value 1
+ Settings.Global.putInt(
+ getContentResolver(),
+ Settings.Global.CELL_ON,
+ PhoneConstants.CELL_OFF_DUE_TO_AIRPLANE_MODE_FLAG);
Settings.Global.putInt(getContentResolver(), Settings.Global.ENABLE_CELLULAR_ON_BOOT, 0);
+ TelephonyProperties.airplane_mode_on(true); // true means int value 1
PhoneUtils.setRadioPower(false);
}
- private void setRadioPowerOn(Context context) {
+ private void setRadioPowerOn() {
Log.i(LOG_TAG, "Turning radio on - airplane");
- Settings.Global.putInt(context.getContentResolver(), Settings.Global.CELL_ON,
- PhoneConstants.CELL_ON_FLAG);
- Settings.Global.putInt(getContentResolver(), Settings.Global.ENABLE_CELLULAR_ON_BOOT,
- 1);
+ Settings.Global.putInt(
+ getContentResolver(), Settings.Global.CELL_ON, PhoneConstants.CELL_ON_FLAG);
+ Settings.Global.putInt(getContentResolver(), Settings.Global.ENABLE_CELLULAR_ON_BOOT, 1);
TelephonyProperties.airplane_mode_on(false); // false means int value 0
PhoneUtils.setRadioPower(true);
}
- private void maybeTurnCellOff(Context context, boolean isAirplaneNewlyOn) {
+ private void maybeTurnCellOff(boolean isAirplaneNewlyOn) {
if (isAirplaneNewlyOn) {
// If we are trying to turn off the radio, make sure there are no active
// emergency calls. If there are, switch airplane mode back to off.
- TelecomManager tm = (TelecomManager) context.getSystemService(TELECOM_SERVICE);
+ TelecomManager tm = (TelecomManager) getSystemService(TELECOM_SERVICE);
if (tm != null && tm.isInEmergencyCall()) {
// Switch airplane mode back to off.
ConnectivityManager cm =
- (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
+ (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
cm.setAirplaneMode(false);
Toast.makeText(this, R.string.radio_off_during_emergency_call, Toast.LENGTH_LONG)
.show();
Log.i(LOG_TAG, "Ignoring airplane mode: emergency call. Turning airplane off");
- } else if (isCellOffInAirplaneMode(context)) {
- setRadioPowerOff(context);
+ } else if (isCellOffInAirplaneMode()) {
+ setRadioPowerOff();
} else {
Log.i(LOG_TAG, "Ignoring airplane mode: settings prevent cell radio power off");
}
}
}
- private void maybeTurnCellOn(Context context, boolean isAirplaneNewlyOn) {
+ private void maybeTurnCellOn(boolean isAirplaneNewlyOn) {
if (!isAirplaneNewlyOn) {
- setRadioPowerOn(context);
+ setRadioPowerOn();
}
}
@@ -735,13 +740,8 @@
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
- int airplaneMode = Settings.Global.getInt(getContentResolver(),
- Settings.Global.AIRPLANE_MODE_ON, AIRPLANE_OFF);
- // Treat any non-OFF values as ON.
- if (airplaneMode != AIRPLANE_OFF) {
- airplaneMode = AIRPLANE_ON;
- }
- handleAirplaneModeChange(context, airplaneMode);
+ boolean airplaneMode = intent.getBooleanExtra("state", false);
+ handleAirplaneModeChange(airplaneMode);
} else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) {
// re-register as it may be a new IccCard
int phoneId = intent.getIntExtra(PhoneConstants.PHONE_KEY,
@@ -1040,6 +1040,12 @@
} catch (Exception e) {
e.printStackTrace();
}
+ pw.println("ImsStateCallbackController:");
+ try {
+ if (mImsStateCallbackController != null) mImsStateCallbackController.dump(pw);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
pw.decreaseIndent();
pw.println("------- End PhoneGlobals -------");
}
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index d96c0c5..722d436 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -28,10 +28,13 @@
import android.Manifest.permission;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
import android.app.AppOpsManager;
import android.app.PendingIntent;
import android.app.compat.CompatChanges;
import android.app.role.RoleManager;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledSince;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
@@ -105,7 +108,9 @@
import android.telephony.TelephonyScanManager;
import android.telephony.ThermalMitigationRequest;
import android.telephony.UiccCardInfo;
+import android.telephony.UiccPortInfo;
import android.telephony.UiccSlotInfo;
+import android.telephony.UiccSlotMapping;
import android.telephony.UssdResponse;
import android.telephony.VisualVoicemailSmsFilterSettings;
import android.telephony.data.ApnSetting;
@@ -118,6 +123,7 @@
import android.telephony.ims.RcsClientConfiguration;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RegistrationManager;
+import android.telephony.ims.aidl.IFeatureProvisioningCallback;
import android.telephony.ims.aidl.IImsCapabilityCallback;
import android.telephony.ims.aidl.IImsConfig;
import android.telephony.ims.aidl.IImsConfigCallback;
@@ -153,6 +159,7 @@
import com.android.internal.telephony.HalVersion;
import com.android.internal.telephony.IBooleanConsumer;
import com.android.internal.telephony.ICallForwardingInfoCallback;
+import com.android.internal.telephony.IImsStateCallback;
import com.android.internal.telephony.IIntegerConsumer;
import com.android.internal.telephony.INumberVerificationCallback;
import com.android.internal.telephony.ITelephony;
@@ -191,6 +198,7 @@
import com.android.internal.telephony.uicc.UiccCard;
import com.android.internal.telephony.uicc.UiccCardApplication;
import com.android.internal.telephony.uicc.UiccController;
+import com.android.internal.telephony.uicc.UiccPort;
import com.android.internal.telephony.uicc.UiccProfile;
import com.android.internal.telephony.uicc.UiccSlot;
import com.android.internal.telephony.util.LocaleUtils;
@@ -216,6 +224,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -402,6 +411,16 @@
"reset_network_erase_modem_config_enabled";
private static final int SET_NETWORK_SELECTION_MODE_AUTOMATIC_TIMEOUT_MS = 2000; // 2 seconds
+ /**
+ * With support for MEP(multiple enabled profile) in Android T, a SIM card can have more than
+ * one ICCID active at the same time.
+ * Apps should use below API signatures if targeting SDK is T and beyond.
+ *
+ * @hide
+ */
+ @ChangeId
+ @EnabledSince(targetSdkVersion = Build.VERSION_CODES.TIRAMISU)
+ public static final long GET_API_SIGNATURES_FROM_UICC_PORT_INFO = 202110963L;
/**
* A request object to use for transmitting data to an ICC.
@@ -505,7 +524,7 @@
MainThreadRequest request;
Message onCompleted;
AsyncResult ar;
- UiccCard uiccCard;
+ UiccPort uiccPort;
IccAPDUArgument iccArgument;
final Phone defaultPhone = getDefaultPhone();
@@ -555,15 +574,15 @@
case CMD_TRANSMIT_APDU_LOGICAL_CHANNEL:
request = (MainThreadRequest) msg.obj;
iccArgument = (IccAPDUArgument) request.argument;
- uiccCard = getUiccCardFromRequest(request);
- if (uiccCard == null) {
+ uiccPort = getUiccPortFromRequest(request);
+ if (uiccPort == null) {
loge("iccTransmitApduLogicalChannel: No UICC");
request.result = new IccIoResult(0x6F, 0, (byte[])null);
notifyRequester(request);
} else {
onCompleted = obtainMessage(EVENT_TRANSMIT_APDU_LOGICAL_CHANNEL_DONE,
request);
- uiccCard.iccTransmitApduLogicalChannel(
+ uiccPort.iccTransmitApduLogicalChannel(
iccArgument.channel, iccArgument.cla, iccArgument.command,
iccArgument.p1, iccArgument.p2, iccArgument.p3, iccArgument.data,
onCompleted);
@@ -592,15 +611,15 @@
case CMD_TRANSMIT_APDU_BASIC_CHANNEL:
request = (MainThreadRequest) msg.obj;
iccArgument = (IccAPDUArgument) request.argument;
- uiccCard = getUiccCardFromRequest(request);
- if (uiccCard == null) {
+ uiccPort = getUiccPortFromRequest(request);
+ if (uiccPort == null) {
loge("iccTransmitApduBasicChannel: No UICC");
request.result = new IccIoResult(0x6F, 0, (byte[])null);
notifyRequester(request);
} else {
onCompleted = obtainMessage(EVENT_TRANSMIT_APDU_BASIC_CHANNEL_DONE,
request);
- uiccCard.iccTransmitApduBasicChannel(
+ uiccPort.iccTransmitApduBasicChannel(
iccArgument.cla, iccArgument.command, iccArgument.p1, iccArgument.p2,
iccArgument.p3, iccArgument.data, onCompleted);
}
@@ -628,15 +647,15 @@
case CMD_EXCHANGE_SIM_IO:
request = (MainThreadRequest) msg.obj;
iccArgument = (IccAPDUArgument) request.argument;
- uiccCard = getUiccCardFromRequest(request);
- if (uiccCard == null) {
+ uiccPort = getUiccPortFromRequest(request);
+ if (uiccPort == null) {
loge("iccExchangeSimIO: No UICC");
request.result = new IccIoResult(0x6F, 0, (byte[])null);
notifyRequester(request);
} else {
onCompleted = obtainMessage(EVENT_EXCHANGE_SIM_IO_DONE,
request);
- uiccCard.iccExchangeSimIO(iccArgument.cla, /* fileID */
+ uiccPort.iccExchangeSimIO(iccArgument.cla, /* fileID */
iccArgument.command, iccArgument.p1, iccArgument.p2, iccArgument.p3,
iccArgument.data, onCompleted);
}
@@ -655,14 +674,14 @@
case CMD_SEND_ENVELOPE:
request = (MainThreadRequest) msg.obj;
- uiccCard = getUiccCardFromRequest(request);
- if (uiccCard == null) {
+ uiccPort = getUiccPortFromRequest(request);
+ if (uiccPort == null) {
loge("sendEnvelopeWithStatus: No UICC");
request.result = new IccIoResult(0x6F, 0, (byte[])null);
notifyRequester(request);
} else {
onCompleted = obtainMessage(EVENT_SEND_ENVELOPE_DONE, request);
- uiccCard.sendEnvelopeWithStatus((String)request.argument, onCompleted);
+ uiccPort.sendEnvelopeWithStatus((String)request.argument, onCompleted);
}
break;
@@ -687,16 +706,16 @@
case CMD_OPEN_CHANNEL:
request = (MainThreadRequest) msg.obj;
- uiccCard = getUiccCardFromRequest(request);
+ uiccPort = getUiccPortFromRequest(request);
Pair<String, Integer> openChannelArgs = (Pair<String, Integer>) request.argument;
- if (uiccCard == null) {
+ if (uiccPort == null) {
loge("iccOpenLogicalChannel: No UICC");
request.result = new IccOpenLogicalChannelResponse(-1,
IccOpenLogicalChannelResponse.STATUS_MISSING_RESOURCE, null);
notifyRequester(request);
} else {
onCompleted = obtainMessage(EVENT_OPEN_CHANNEL_DONE, request);
- uiccCard.iccOpenLogicalChannel(openChannelArgs.first,
+ uiccPort.iccOpenLogicalChannel(openChannelArgs.first,
openChannelArgs.second, onCompleted);
}
break;
@@ -744,14 +763,14 @@
case CMD_CLOSE_CHANNEL:
request = (MainThreadRequest) msg.obj;
- uiccCard = getUiccCardFromRequest(request);
- if (uiccCard == null) {
+ uiccPort = getUiccPortFromRequest(request);
+ if (uiccPort == null) {
loge("iccCloseLogicalChannel: No UICC");
request.result = false;
notifyRequester(request);
} else {
onCompleted = obtainMessage(EVENT_CLOSE_CHANNEL_DONE, request);
- uiccCard.iccCloseLogicalChannel((Integer) request.argument, onCompleted);
+ uiccPort.iccCloseLogicalChannel((Integer) request.argument, onCompleted);
}
break;
@@ -1098,7 +1117,9 @@
// any service for voice call.
if ((callForwardInfo.serviceClass
& CommandsInterface.SERVICE_CLASS_VOICE) > 0) {
- callForwardingInfo = new CallForwardingInfo(true,
+ callForwardingInfo = new CallForwardingInfo(
+ callForwardInfo.status
+ == CommandsInterface.CF_ACTION_ENABLE,
callForwardInfo.reason,
callForwardInfo.number,
callForwardInfo.timeSeconds);
@@ -1463,16 +1484,16 @@
case CMD_GET_FORBIDDEN_PLMNS:
request = (MainThreadRequest) msg.obj;
- uiccCard = getUiccCardFromRequest(request);
- if (uiccCard == null) {
- loge("getForbiddenPlmns() UiccCard is null");
+ uiccPort = getUiccPortFromRequest(request);
+ if (uiccPort == null) {
+ loge("getForbiddenPlmns() UiccPort is null");
request.result = new IllegalArgumentException(
- "getForbiddenPlmns() UiccCard is null");
+ "getForbiddenPlmns() UiccPort is null");
notifyRequester(request);
break;
}
Integer appType = (Integer) request.argument;
- UiccCardApplication uiccApp = uiccCard.getApplicationByType(appType);
+ UiccCardApplication uiccApp = uiccPort.getApplicationByType(appType);
if (uiccApp == null) {
loge("getForbiddenPlmns() no app with specified type -- "
+ appType);
@@ -1768,9 +1789,9 @@
break;
case CMD_SET_FORBIDDEN_PLMNS:
request = (MainThreadRequest) msg.obj;
- uiccCard = getUiccCardFromRequest(request);
- if (uiccCard == null) {
- loge("setForbiddenPlmns: UiccCard is null");
+ uiccPort = getUiccPortFromRequest(request);
+ if (uiccPort == null) {
+ loge("setForbiddenPlmns: UiccPort is null");
request.result = -1;
notifyRequester(request);
break;
@@ -1779,7 +1800,7 @@
(Pair<Integer, List<String>>) request.argument;
appType = setFplmnsArgs.first;
List<String> fplmns = setFplmnsArgs.second;
- uiccApp = uiccCard.getApplicationByType(appType);
+ uiccApp = uiccPort.getApplicationByType(appType);
if (uiccApp == null) {
loge("setForbiddenPlmns: no app with specified type -- " + appType);
request.result = -1;
@@ -1977,7 +1998,7 @@
(Pair<Integer, SignalStrengthUpdateRequest>) request.argument;
onCompleted = obtainMessage(EVENT_SET_SIGNAL_STRENGTH_UPDATE_REQUEST_DONE,
request);
- phone.getServiceStateTracker().setSignalStrengthUpdateRequest(
+ phone.getSignalStrengthController().setSignalStrengthUpdateRequest(
request.subId, pair.first /*callingUid*/,
pair.second /*request*/, onCompleted);
break;
@@ -2005,7 +2026,7 @@
(Pair<Integer, SignalStrengthUpdateRequest>) request.argument;
onCompleted = obtainMessage(EVENT_CLEAR_SIGNAL_STRENGTH_UPDATE_REQUEST_DONE,
request);
- phone.getServiceStateTracker().clearSignalStrengthUpdateRequest(
+ phone.getSignalStrengthController().clearSignalStrengthUpdateRequest(
request.subId, pair.first /*callingUid*/,
pair.second /*request*/, onCompleted);
break;
@@ -2057,8 +2078,7 @@
case CMD_PREPARE_UNATTENDED_REBOOT:
request = (MainThreadRequest) msg.obj;
request.result =
- UiccController.getInstance().getPinStorage()
- .prepareUnattendedReboot(request.workSource);
+ UiccController.getInstance().getPinStorage().prepareUnattendedReboot();
notifyRequester(request);
break;
@@ -2298,10 +2318,10 @@
? getDefaultPhone() : getPhone(subId);
}
- private UiccCard getUiccCardFromRequest(MainThreadRequest request) {
+ private UiccPort getUiccPortFromRequest(MainThreadRequest request) {
Phone phone = getPhoneFromRequest(request);
return phone == null ? null :
- UiccController.getInstance().getUiccCard(phone.getPhoneId());
+ UiccController.getInstance().getUiccPort(phone.getPhoneId());
}
// returns phone associated with the subId.
@@ -3224,7 +3244,12 @@
String tac = null;
if (phone != null) {
String imei = phone.getImei();
- tac = imei == null ? null : imei.substring(0, TYPE_ALLOCATION_CODE_LENGTH);
+ try {
+ tac = imei == null ? null : imei.substring(0, TYPE_ALLOCATION_CODE_LENGTH);
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(LOG_TAG, "IMEI length shorter than upper index.");
+ return null;
+ }
}
return tac;
}
@@ -3263,7 +3288,13 @@
String manufacturerCode = null;
if (phone != null) {
String meid = phone.getMeid();
- manufacturerCode = meid == null ? null : meid.substring(0, MANUFACTURER_CODE_LENGTH);
+ try {
+ manufacturerCode =
+ meid == null ? null : meid.substring(0, MANUFACTURER_CODE_LENGTH);
+ } catch (IndexOutOfBoundsException e) {
+ Log.e(LOG_TAG, "MEID length shorter than upper index.");
+ return null;
+ }
}
return manufacturerCode;
}
@@ -3385,17 +3416,6 @@
mApp.enforceCallingOrSelfPermission(android.Manifest.permission.MODIFY_PHONE_STATE, null);
}
- /**
- * Make sure the caller is system.
- *
- * @throws SecurityException if the caller is not system.
- */
- private static void enforceSystemCaller() {
- if (Binder.getCallingUid() != Process.SYSTEM_UID) {
- throw new SecurityException("Caller must be system");
- }
- }
-
private void enforceActiveEmergencySessionPermission() {
mApp.enforceCallingOrSelfPermission(
android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION, null);
@@ -4505,6 +4525,7 @@
@Override
public void registerImsProvisioningChangedCallback(int subId, IImsConfigCallback callback) {
enforceReadPrivilegedPermission("registerImsProvisioningChangedCallback");
+
final long identity = Binder.clearCallingIdentity();
try {
if (!isImsAvailableOnDevice()) {
@@ -4525,6 +4546,7 @@
@Override
public void unregisterImsProvisioningChangedCallback(int subId, IImsConfigCallback callback) {
enforceReadPrivilegedPermission("unregisterImsProvisioningChangedCallback");
+
final long identity = Binder.clearCallingIdentity();
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
throw new IllegalArgumentException("Invalid Subscription ID: " + subId);
@@ -4542,6 +4564,39 @@
}
}
+ @Override
+ public void registerFeatureProvisioningChangedCallback(int subId,
+ IFeatureProvisioningCallback callback) {
+ TelephonyPermissions.enforceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "registerFeatureProvisioningChangedCallback");
+
+ final long identity = Binder.clearCallingIdentity();
+ if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+ throw new IllegalArgumentException("Invalid Subscription ID: " + subId);
+ }
+
+ ImsProvisioningController.getInstance()
+ .addFeatureProvisioningChangedCallback(subId, callback);
+
+ Binder.restoreCallingIdentity(identity);
+ }
+
+ @Override
+ public void unregisterFeatureProvisioningChangedCallback(int subId,
+ IFeatureProvisioningCallback callback) {
+ TelephonyPermissions.enforceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "unregisterFeatureProvisioningChangedCallback");
+
+ final long identity = Binder.clearCallingIdentity();
+ if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+ throw new IllegalArgumentException("Invalid Subscription ID: " + subId);
+ }
+
+ ImsProvisioningController.getInstance()
+ .removeFeatureProvisioningChangedCallback(subId, callback);
+
+ Binder.restoreCallingIdentity(identity);
+ }
private void checkModifyPhoneStatePermission(int subId, String message) {
TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp, subId,
@@ -4568,60 +4623,30 @@
}
@Override
- public void setRcsProvisioningStatusForCapability(int subId, int capability,
+ public void setRcsProvisioningStatusForCapability(int subId, int capability, int tech,
boolean isProvisioned) {
checkModifyPhoneStatePermission(subId, "setRcsProvisioningStatusForCapability");
final long identity = Binder.clearCallingIdentity();
try {
- // TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
- if (!isImsProvisioningRequired(subId, capability, false)) {
- return;
- }
-
- // this capability requires provisioning, route to the correct API.
- ImsManager ims = ImsManager.getInstance(mApp, getSlotIndex(subId));
- switch (capability) {
- case RcsFeature.RcsImsCapabilities.CAPABILITY_TYPE_OPTIONS_UCE:
- case RcsFeature.RcsImsCapabilities.CAPABILITY_TYPE_PRESENCE_UCE:
- ims.setEabProvisioned(isProvisioned);
- break;
- default: {
- throw new IllegalArgumentException("Tried to set provisioning for "
- + "rcs capability '" + capability + "', which does not require "
- + "provisioning.");
- }
- }
+ ImsProvisioningController.getInstance()
+ .setRcsProvisioningStatusForCapability(subId, capability, tech, isProvisioned);
+ return;
} finally {
Binder.restoreCallingIdentity(identity);
}
-
}
@Override
- public boolean getRcsProvisioningStatusForCapability(int subId, int capability) {
- enforceReadPrivilegedPermission("getRcsProvisioningStatusForCapability");
+ public boolean getRcsProvisioningStatusForCapability(int subId, int capability, int tech) {
+ TelephonyPermissions.enforceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "getRcsProvisioningStatusForCapability");
+
final long identity = Binder.clearCallingIdentity();
try {
- // TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
- if (!isImsProvisioningRequired(subId, capability, false)) {
- return true;
- }
-
- ImsManager ims = ImsManager.getInstance(mApp, getSlotIndex(subId));
- switch (capability) {
- case RcsFeature.RcsImsCapabilities.CAPABILITY_TYPE_OPTIONS_UCE:
- case RcsFeature.RcsImsCapabilities.CAPABILITY_TYPE_PRESENCE_UCE:
- return ims.isEabProvisionedOnDevice();
-
- default: {
- throw new IllegalArgumentException("Tried to get rcs provisioning for "
- + "capability '" + capability + "', which does not require "
- + "provisioning.");
- }
- }
-
+ return ImsProvisioningController.getInstance()
+ .getRcsProvisioningStatusForCapability(subId, capability, tech);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -4630,66 +4655,12 @@
@Override
public void setImsProvisioningStatusForCapability(int subId, int capability, int tech,
boolean isProvisioned) {
- if (tech != ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN
- && tech != ImsRegistrationImplBase.REGISTRATION_TECH_LTE
- && tech != ImsRegistrationImplBase.REGISTRATION_TECH_NR
- && tech != ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM) {
- throw new IllegalArgumentException("Registration technology '" + tech + "' is invalid");
- }
checkModifyPhoneStatePermission(subId, "setImsProvisioningStatusForCapability");
+
final long identity = Binder.clearCallingIdentity();
try {
- // TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
- if (!isImsProvisioningRequired(subId, capability, true)) {
- return;
- }
- if (tech == ImsRegistrationImplBase.REGISTRATION_TECH_NR
- || tech == ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM) {
- loge("setImsProvisioningStatusForCapability: called for technology that does "
- + "not support provisioning - " + tech);
- return;
- }
-
- // this capability requires provisioning, route to the correct API.
- ImsManager ims = ImsManager.getInstance(mApp, getSlotIndex(subId));
- switch (capability) {
- case MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE: {
- if (tech == ImsRegistrationImplBase.REGISTRATION_TECH_LTE) {
- ims.setVolteProvisioned(isProvisioned);
- } else if (tech == ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN) {
- ims.setWfcProvisioned(isProvisioned);
- }
- break;
- }
- case MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO: {
- // There is currently no difference in VT provisioning type.
- ims.setVtProvisioned(isProvisioned);
- break;
- }
- case MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT: {
- // There is no "deprecated" UT provisioning mechanism through ImsConfig, so
- // change the capability of the feature instead if needed.
- if (isMmTelCapabilityProvisionedInCache(subId, capability, tech)
- == isProvisioned) {
- // No change in provisioning.
- return;
- }
- cacheMmTelCapabilityProvisioning(subId, capability, tech, isProvisioned);
- try {
- ims.changeMmTelCapability(isProvisioned, capability, tech);
- } catch (com.android.ims.ImsException e) {
- loge("setImsProvisioningStatusForCapability: couldn't change UT capability"
- + ", Exception" + e.getMessage());
- }
- break;
- }
- default: {
- throw new IllegalArgumentException("Tried to set provisioning for "
- + "MmTel capability '" + capability + "', which does not require "
- + "provisioning. ");
- }
- }
-
+ ImsProvisioningController.getInstance()
+ .setImsProvisioningStatusForCapability(subId, capability, tech, isProvisioned);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -4697,54 +4668,13 @@
@Override
public boolean getImsProvisioningStatusForCapability(int subId, int capability, int tech) {
- if (tech != ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN
- && tech != ImsRegistrationImplBase.REGISTRATION_TECH_LTE
- && tech != ImsRegistrationImplBase.REGISTRATION_TECH_NR
- && tech != ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM) {
- throw new IllegalArgumentException("Registration technology '" + tech + "' is invalid");
- }
- enforceReadPrivilegedPermission("getProvisioningStatusForCapability");
+ TelephonyPermissions.enforceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "getProvisioningStatusForCapability");
+
final long identity = Binder.clearCallingIdentity();
try {
- // TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
- if (!isImsProvisioningRequired(subId, capability, true)) {
- return true;
- }
-
- if (tech == ImsRegistrationImplBase.REGISTRATION_TECH_NR
- || tech == ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM) {
- loge("getImsProvisioningStatusForCapability: called for technology that does "
- + "not support provisioning - " + tech);
- return true;
- }
-
- ImsManager ims = ImsManager.getInstance(mApp, getSlotIndex(subId));
- switch (capability) {
- case MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE: {
- if (tech == ImsRegistrationImplBase.REGISTRATION_TECH_LTE) {
- return ims.isVolteProvisionedOnDevice();
- } else if (tech == ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN) {
- return ims.isWfcProvisionedOnDevice();
- }
- // This should never happen, since we are checking tech above to make sure it
- // is either LTE or IWLAN.
- throw new IllegalArgumentException("Invalid radio technology for voice "
- + "capability.");
- }
- case MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO: {
- // There is currently no difference in VT provisioning type.
- return ims.isVtProvisionedOnDevice();
- }
- case MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT: {
- // There is no "deprecated" UT provisioning mechanism, so get from shared prefs.
- return isMmTelCapabilityProvisionedInCache(subId, capability, tech);
- }
- default: {
- throw new IllegalArgumentException(
- "Tried to get provisioning for MmTel capability '" + capability
- + "', which does not require provisioning.");
- }
- }
+ return ImsProvisioningController.getInstance()
+ .getImsProvisioningStatusForCapability(subId, capability, tech);
} finally {
Binder.restoreCallingIdentity(identity);
@@ -4752,61 +4682,31 @@
}
@Override
- public boolean isMmTelCapabilityProvisionedInCache(int subId, int capability, int tech) {
- if (tech != ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN
- && tech != ImsRegistrationImplBase.REGISTRATION_TECH_LTE) {
- throw new IllegalArgumentException("Registration technology '" + tech + "' is invalid");
+ public boolean isProvisioningRequiredForCapability(int subId, int capability, int tech) {
+ TelephonyPermissions.enforceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "isProvisioningRequiredForCapability");
+
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return ImsProvisioningController.getInstance()
+ .isImsProvisioningRequiredForCapability(subId, capability, tech);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
}
- enforceReadPrivilegedPermission("isMmTelCapabilityProvisionedInCache");
- int provisionedBits = getMmTelCapabilityProvisioningBitfield(subId, tech);
- return (provisionedBits & capability) > 0;
}
@Override
- public void cacheMmTelCapabilityProvisioning(int subId, int capability, int tech,
- boolean isProvisioned) {
- if (tech != ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN
- && tech != ImsRegistrationImplBase.REGISTRATION_TECH_LTE) {
- throw new IllegalArgumentException("Registration technology '" + tech + "' is invalid");
- }
- TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp, subId,
- "setProvisioningStatusForCapability");
- int provisionedBits = getMmTelCapabilityProvisioningBitfield(subId, tech);
- // If the current provisioning status for capability already matches isProvisioned,
- // do nothing.
- if (((provisionedBits & capability) > 0) == isProvisioned) {
- return;
- }
- if (isProvisioned) {
- setMmTelCapabilityProvisioningBitfield(subId, tech, (provisionedBits | capability));
- } else {
- setMmTelCapabilityProvisioningBitfield(subId, tech, (provisionedBits & ~capability));
- }
- }
+ public boolean isRcsProvisioningRequiredForCapability(int subId, int capability, int tech) {
+ TelephonyPermissions.enforceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "isProvisioningRequiredForCapability");
- /**
- * @return the bitfield containing the MmTel provisioning for the provided subscription and
- * technology. The bitfield should mirror the bitfield defined by
- * {@link MmTelFeature.MmTelCapabilities.MmTelCapability}.
- */
- private int getMmTelCapabilityProvisioningBitfield(int subId, int tech) {
- String key = getMmTelProvisioningKey(subId, tech);
- // Default is no capabilities are provisioned.
- return mTelephonySharedPreferences.getInt(key, 0 /*default*/);
- }
-
- /**
- * Sets the MmTel capability provisioning bitfield (defined by
- * {@link MmTelFeature.MmTelCapabilities.MmTelCapability}) for the subscription and
- * technology specified.
- *
- * Note: This is a synchronous command and should not be called on UI thread.
- */
- private void setMmTelCapabilityProvisioningBitfield(int subId, int tech, int newField) {
- final SharedPreferences.Editor editor = mTelephonySharedPreferences.edit();
- String key = getMmTelProvisioningKey(subId, tech);
- editor.putInt(key, newField);
- editor.commit();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return ImsProvisioningController.getInstance()
+ .isRcsProvisioningRequiredForCapability(subId, capability, tech);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
private static String getMmTelProvisioningKey(int subId, int tech) {
@@ -4879,7 +4779,9 @@
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
throw new IllegalArgumentException("Invalid Subscription id '" + subId + "'");
}
- enforceReadPrivilegedPermission("getImsProvisioningInt");
+ TelephonyPermissions.enforceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "getImsProvisioningInt");
+
final long identity = Binder.clearCallingIdentity();
try {
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
@@ -4889,6 +4791,12 @@
+ subId + "' for key:" + key);
return ImsConfigImplBase.CONFIG_RESULT_UNKNOWN;
}
+
+ int retVal = ImsProvisioningController.getInstance().getProvisioningValue(subId, key);
+ if (retVal != ImsConfigImplBase.CONFIG_RESULT_UNKNOWN) {
+ return retVal;
+ }
+
return ImsManager.getInstance(mApp, slotId).getConfigInt(key);
} catch (com.android.ims.ImsException e) {
Log.w(LOG_TAG, "getImsProvisioningInt: ImsService is not available for subscription '"
@@ -4904,7 +4812,9 @@
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
throw new IllegalArgumentException("Invalid Subscription id '" + subId + "'");
}
- enforceReadPrivilegedPermission("getImsProvisioningString");
+ TelephonyPermissions.enforceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "getImsProvisioningString");
+
final long identity = Binder.clearCallingIdentity();
try {
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
@@ -4931,6 +4841,7 @@
}
TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp, subId,
"setImsProvisioningInt");
+
final long identity = Binder.clearCallingIdentity();
try {
// TODO: Refactor to remove ImsManager dependence and query through ImsPhone directly.
@@ -4940,6 +4851,13 @@
+ subId + "' for key:" + key);
return ImsConfigImplBase.CONFIG_RESULT_FAILED;
}
+
+ int retVal = ImsProvisioningController.getInstance()
+ .setProvisioningValue(subId, key, value);
+ if (retVal != ImsConfigImplBase.CONFIG_RESULT_UNKNOWN) {
+ return retVal;
+ }
+
return ImsManager.getInstance(mApp, slotId).setConfig(key, value);
} catch (com.android.ims.ImsException | RemoteException e) {
Log.w(LOG_TAG, "setImsProvisioningInt: ImsService unavailable for sub '" + subId
@@ -5058,10 +4976,13 @@
@Override
public int getDataNetworkTypeForSubscriber(int subId, String callingPackage,
String callingFeatureId) {
- if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, subId, callingPackage, callingFeatureId,
- "getDataNetworkTypeForSubscriber")) {
- return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+ String functionName = "getDataNetworkTypeForSubscriber";
+ if (!TelephonyPermissions.checkCallingOrSelfReadNonDangerousPhoneStateNoThrow(
+ mApp, functionName)) {
+ if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
+ mApp, subId, callingPackage, callingFeatureId, functionName)) {
+ return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+ }
}
final long identity = Binder.clearCallingIdentity();
@@ -5083,10 +5004,13 @@
@Override
public int getVoiceNetworkTypeForSubscriber(int subId, String callingPackage,
String callingFeatureId) {
- if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
- mApp, subId, callingPackage, callingFeatureId,
- "getDataNetworkTypeForSubscriber")) {
- return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+ String functionName = "getVoiceNetworkTypeForSubscriber";
+ if (!TelephonyPermissions.checkCallingOrSelfReadNonDangerousPhoneStateNoThrow(
+ mApp, functionName)) {
+ if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
+ mApp, subId, callingPackage, callingFeatureId, functionName)) {
+ return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+ }
}
final long identity = Binder.clearCallingIdentity();
@@ -6312,28 +6236,35 @@
* Starts a new network scan and returns the id of this scan.
*
* @param subId id of the subscription
+ * @param renounceFineLocationAccess Set this to true if the caller would not like to receive
+ * location related information which will be sent if the caller already possess
+ * {@android.Manifest.permission.ACCESS_FINE_LOCATION} and do not renounce the permission
* @param request contains the radio access networks with bands/channels to scan
* @param messenger callback messenger for scan results or errors
* @param binder for the purpose of auto clean when the user thread crashes
* @return the id of the requested scan which can be used to stop the scan.
*/
@Override
- public int requestNetworkScan(int subId, NetworkScanRequest request, Messenger messenger,
+ public int requestNetworkScan(int subId, boolean renounceFineLocationAccess,
+ NetworkScanRequest request, Messenger messenger,
IBinder binder, String callingPackage, String callingFeatureId) {
TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
mApp, subId, "requestNetworkScan");
LocationAccessPolicy.LocationPermissionResult locationResult =
- LocationAccessPolicy.checkLocationPermission(mApp,
- new LocationAccessPolicy.LocationPermissionQuery.Builder()
- .setCallingPackage(callingPackage)
- .setCallingFeatureId(callingFeatureId)
- .setCallingPid(Binder.getCallingPid())
- .setCallingUid(Binder.getCallingUid())
- .setMethod("requestNetworkScan")
- .setMinSdkVersionForFine(Build.VERSION_CODES.Q)
- .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
- .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
- .build());
+ LocationAccessPolicy.LocationPermissionResult.DENIED_HARD;
+ if (!renounceFineLocationAccess) {
+ locationResult = LocationAccessPolicy.checkLocationPermission(mApp,
+ new LocationAccessPolicy.LocationPermissionQuery.Builder()
+ .setCallingPackage(callingPackage)
+ .setCallingFeatureId(callingFeatureId)
+ .setCallingPid(Binder.getCallingPid())
+ .setCallingUid(Binder.getCallingUid())
+ .setMethod("requestNetworkScan")
+ .setMinSdkVersionForFine(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
+ .build());
+ }
if (locationResult != LocationAccessPolicy.LocationPermissionResult.ALLOWED) {
SecurityException e = checkNetworkRequestForSanitizedLocationAccess(
request, subId, callingPackage);
@@ -6351,7 +6282,7 @@
final long identity = Binder.clearCallingIdentity();
try {
return mNetworkScanRequestTracker.startNetworkScan(
- request, messenger, binder, getPhone(subId),
+ renounceFineLocationAccess, request, messenger, binder, getPhone(subId),
callingUid, callingPid, callingPackage);
} finally {
Binder.restoreCallingIdentity(identity);
@@ -6577,34 +6508,6 @@
}
/**
- * Enable or disable always reporting signal strength changes from radio.
- *
- * @param isEnable {@code true} for enabling; {@code false} for disabling.
- */
- @Override
- public void setAlwaysReportSignalStrength(int subId, boolean isEnable) {
- enforceModifyPermission();
- enforceSystemCaller();
-
- final long identity = Binder.clearCallingIdentity();
- final Phone phone = getPhone(subId);
- try {
- if (phone != null) {
- if (DBG) {
- log("setAlwaysReportSignalStrength: subId=" + subId
- + " isEnable=" + isEnable);
- }
- phone.setAlwaysReportSignalStrength(isEnable);
- } else {
- loge("setAlwaysReportSignalStrength: no phone found for subId="
- + subId);
- }
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
-
- /**
* Get the user enabled state of Mobile Data.
*
* TODO: remove and use isUserDataEnabled.
@@ -6625,18 +6528,25 @@
* There are other factors deciding whether mobile data is actually enabled, but they are
* not considered here. See {@link #isDataEnabled(int)} for more details.
*
- * Accepts either ACCESS_NETWORK_STATE, MODIFY_PHONE_STATE or carrier privileges.
+ * Accepts either READ_BASIC_PHONE_STATE, ACCESS_NETWORK_STATE, MODIFY_PHONE_STATE
+ * or carrier privileges.
*
* @return {@code true} if data is enabled else {@code false}
*/
@Override
public boolean isUserDataEnabled(int subId) {
+ String functionName = "isUserDataEnabled";
try {
- mApp.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_NETWORK_STATE,
- null);
+ try {
+ mApp.enforceCallingOrSelfPermission(permission.READ_BASIC_PHONE_STATE,
+ functionName);
+ } catch (Exception e) {
+ mApp.enforceCallingOrSelfPermission(permission.ACCESS_NETWORK_STATE, functionName);
+ }
} catch (Exception e) {
TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
- mApp, subId, "isUserDataEnabled");
+ mApp, subId, functionName);
+
}
final long identity = Binder.clearCallingIdentity();
@@ -6666,17 +6576,24 @@
*/
@Override
public boolean isDataEnabled(int subId) {
+ String functionName = "isDataEnabled";
try {
try {
mApp.enforceCallingOrSelfPermission(
android.Manifest.permission.ACCESS_NETWORK_STATE,
- null);
+ functionName);
} catch (Exception e) {
- mApp.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PHONE_STATE,
- "isDataEnabled");
+ try {
+ mApp.enforceCallingOrSelfPermission(
+ android.Manifest.permission.READ_PHONE_STATE,
+ functionName);
+ } catch (Exception e2) {
+ mApp.enforceCallingOrSelfPermission(
+ permission.READ_BASIC_PHONE_STATE, functionName);
+ }
}
} catch (Exception e) {
- enforceReadPrivilegedPermission("isDataEnabled");
+ enforceReadPrivilegedPermission(functionName);
}
final long identity = Binder.clearCallingIdentity();
@@ -6706,12 +6623,24 @@
@Override
public boolean isDataEnabledForReason(int subId,
@TelephonyManager.DataEnabledReason int reason) {
+ String functionName = "isDataEnabledForReason";
try {
- mApp.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_NETWORK_STATE,
- null);
+ try {
+ mApp.enforceCallingOrSelfPermission(
+ android.Manifest.permission.ACCESS_NETWORK_STATE,
+ functionName);
+ } catch (Exception e) {
+ mApp.enforceCallingOrSelfPermission(permission.READ_BASIC_PHONE_STATE,
+ functionName);
+ }
} catch (Exception e) {
- mApp.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PHONE_STATE,
- "isDataEnabledForReason");
+ try {
+ mApp.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PHONE_STATE,
+ functionName);
+ } catch (Exception e2) {
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
+ mApp, subId, functionName);
+ }
}
@@ -6814,14 +6743,14 @@
loge("getCarrierPrivilegeStatus: Invalid subId");
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
}
- UiccCard card = UiccController.getInstance().getUiccCard(phone.getPhoneId());
- if (card == null) {
+ UiccPort port = UiccController.getInstance().getUiccPort(phone.getPhoneId());
+ if (port == null) {
loge("getCarrierPrivilegeStatus: No UICC");
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
}
return getCarrierPrivilegeStatusFromCarrierConfigRules(
- card.getCarrierPrivilegeStatusForCurrentTransaction(
+ port.getCarrierPrivilegeStatusForCurrentTransaction(
phone.getContext().getPackageManager()), Binder.getCallingUid(), phone);
}
@@ -6852,13 +6781,13 @@
}
int phoneId = SubscriptionManager.getPhoneId(subId);
- UiccCard card = UiccController.getInstance().getUiccCard(phoneId);
- if (card == null) {
+ UiccPort port = UiccController.getInstance().getUiccPort(phoneId);
+ if (port == null) {
loge("checkCarrierPrivilegesForPackage: No UICC on subId " + subId);
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
}
return getCarrierPrivilegeStatusFromCarrierConfigRules(
- card.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName),
+ port.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName),
getPhone(phoneId), pkgName);
}
@@ -6869,14 +6798,14 @@
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
int result = TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
- UiccCard card = UiccController.getInstance().getUiccCard(i);
- if (card == null) {
+ UiccPort port = UiccController.getInstance().getUiccPort(i);
+ if (port == null) {
// No UICC in that slot.
continue;
}
result = getCarrierPrivilegeStatusFromCarrierConfigRules(
- card.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName),
+ port.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName),
getPhone(i), pkgName);
if (result == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
break;
@@ -6893,12 +6822,12 @@
loge("phoneId " + phoneId + " is not valid.");
return null;
}
- UiccCard card = UiccController.getInstance().getUiccCard(phoneId);
- if (card == null) {
+ UiccPort port = UiccController.getInstance().getUiccPort(phoneId);
+ if (port == null) {
loge("getCarrierPackageNamesForIntentAndPhone: No UICC");
return null ;
}
- return card.getCarrierPackageNamesForIntent(mApp.getPackageManager(), intent);
+ return port.getCarrierPackageNamesForIntent(mApp.getPackageManager(), intent);
}
@Override
@@ -6907,10 +6836,10 @@
PackageManager pm = mApp.getPackageManager();
List<String> privilegedPackages = new ArrayList<>();
List<PackageInfo> packages = null;
- UiccCard card = UiccController.getInstance().getUiccCard(phoneId);
+ UiccPort port = UiccController.getInstance().getUiccPort(phoneId);
// has UICC in that slot.
- if (card != null) {
- if (card.hasCarrierPrivilegeRules()) {
+ if (port != null) {
+ if (port.hasCarrierPrivilegeRules()) {
if (packages == null) {
// Only check packages in user 0 for now
packages = pm.getInstalledPackagesAsUser(
@@ -6923,7 +6852,7 @@
PackageInfo pkgInfo = packages.get(p);
if (pkgInfo != null && pkgInfo.packageName != null
&& getCarrierPrivilegeStatusFromCarrierConfigRules(
- card.getCarrierPrivilegeStatus(pkgInfo),
+ port.getCarrierPrivilegeStatus(pkgInfo),
getPhone(phoneId), pkgInfo.packageName)
== TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
privilegedPackages.add(pkgInfo.packageName);
@@ -6953,11 +6882,11 @@
private String getIccId(int subId) {
final Phone phone = getPhone(subId);
- UiccCard card = phone == null ? null : phone.getUiccCard();
- if (card == null) {
+ UiccPort port = phone == null ? null : phone.getUiccPort();
+ if (port == null) {
return null;
}
- String iccId = card.getIccId();
+ String iccId = port.getIccId();
if (TextUtils.isEmpty(iccId)) {
return null;
}
@@ -7884,49 +7813,54 @@
}
/**
- * {@hide}
* Returns the service state information on specified subscription.
*/
@Override
- public ServiceState getServiceStateForSubscriber(int subId, String callingPackage,
- String callingFeatureId) {
+ public ServiceState getServiceStateForSubscriber(int subId,
+ boolean renounceFineLocationAccess, boolean renounceCoarseLocationAccess,
+ String callingPackage, String callingFeatureId) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
mApp, subId, callingPackage, callingFeatureId, "getServiceStateForSubscriber")) {
return null;
}
- LocationAccessPolicy.LocationPermissionResult fineLocationResult =
- LocationAccessPolicy.checkLocationPermission(mApp,
- new LocationAccessPolicy.LocationPermissionQuery.Builder()
- .setCallingPackage(callingPackage)
- .setCallingFeatureId(callingFeatureId)
- .setCallingPid(Binder.getCallingPid())
- .setCallingUid(Binder.getCallingUid())
- .setMethod("getServiceStateForSubscriber")
- .setLogAsInfo(true)
- .setMinSdkVersionForFine(Build.VERSION_CODES.Q)
- .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
- .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
- .build());
+ boolean hasFinePermission = false;
+ boolean hasCoarsePermission = false;
+ if (!renounceFineLocationAccess) {
+ LocationAccessPolicy.LocationPermissionResult fineLocationResult =
+ LocationAccessPolicy.checkLocationPermission(mApp,
+ new LocationAccessPolicy.LocationPermissionQuery.Builder()
+ .setCallingPackage(callingPackage)
+ .setCallingFeatureId(callingFeatureId)
+ .setCallingPid(Binder.getCallingPid())
+ .setCallingUid(Binder.getCallingUid())
+ .setMethod("getServiceStateForSubscriber")
+ .setLogAsInfo(true)
+ .setMinSdkVersionForFine(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
+ .build());
+ hasFinePermission =
+ fineLocationResult == LocationAccessPolicy.LocationPermissionResult.ALLOWED;
+ }
- LocationAccessPolicy.LocationPermissionResult coarseLocationResult =
- LocationAccessPolicy.checkLocationPermission(mApp,
- new LocationAccessPolicy.LocationPermissionQuery.Builder()
- .setCallingPackage(callingPackage)
- .setCallingFeatureId(callingFeatureId)
- .setCallingPid(Binder.getCallingPid())
- .setCallingUid(Binder.getCallingUid())
- .setMethod("getServiceStateForSubscriber")
- .setLogAsInfo(true)
- .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
- .setMinSdkVersionForFine(Integer.MAX_VALUE)
- .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
- .build());
- // We don't care about hard or soft here -- all we need to know is how much info to scrub.
- boolean hasFinePermission =
- fineLocationResult == LocationAccessPolicy.LocationPermissionResult.ALLOWED;
- boolean hasCoarsePermission =
- coarseLocationResult == LocationAccessPolicy.LocationPermissionResult.ALLOWED;
+ if (!renounceCoarseLocationAccess) {
+ LocationAccessPolicy.LocationPermissionResult coarseLocationResult =
+ LocationAccessPolicy.checkLocationPermission(mApp,
+ new LocationAccessPolicy.LocationPermissionQuery.Builder()
+ .setCallingPackage(callingPackage)
+ .setCallingFeatureId(callingFeatureId)
+ .setCallingPid(Binder.getCallingPid())
+ .setCallingUid(Binder.getCallingUid())
+ .setMethod("getServiceStateForSubscriber")
+ .setLogAsInfo(true)
+ .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForFine(Integer.MAX_VALUE)
+ .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
+ .build());
+ hasCoarsePermission =
+ coarseLocationResult == LocationAccessPolicy.LocationPermissionResult.ALLOWED;
+ }
final Phone phone = getPhone(subId);
if (phone == null) {
@@ -8135,7 +8069,7 @@
}
String aid = null;
try {
- aid = UiccController.getInstance().getUiccCard(phone.getPhoneId())
+ aid = UiccController.getInstance().getUiccPort(phone.getPhoneId())
.getApplicationByType(appType).getAid();
} catch (Exception e) {
Log.e(LOG_TAG, "Not getting aid. Exception ex=" + e);
@@ -8648,6 +8582,7 @@
*
* <p>Requires one of the following permissions:
* {@link android.Manifest.permission#ACCESS_NETWORK_STATE},
+ * {@link android.Manifest.permission#READ_BASIC_PHONE_STATE},
* {@link android.Manifest.permission#READ_PHONE_STATE} or that the calling app has carrier
* privileges.
*
@@ -8657,12 +8592,19 @@
*/
@Override
public boolean isDataRoamingEnabled(int subId) {
+ String functionName = "isDataRoamingEnabled";
try {
- mApp.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_NETWORK_STATE,
- null);
+ try {
+ mApp.enforceCallingOrSelfPermission(
+ android.Manifest.permission.ACCESS_NETWORK_STATE,
+ functionName);
+ } catch (Exception e) {
+ mApp.enforceCallingOrSelfPermission(
+ permission.READ_BASIC_PHONE_STATE, functionName);
+ }
} catch (Exception e) {
TelephonyPermissions.enforceCallingOrSelfReadPhoneStatePermissionOrCarrierPrivilege(
- mApp, subId, "isDataRoamingEnabled");
+ mApp, subId, functionName);
}
boolean isEnabled = false;
@@ -8722,6 +8664,22 @@
return isAllowed;
}
+ private boolean haveCarrierPrivilegeAccess(UiccCard card, String callingPackage) {
+ // TODO once MEP API refactoring CL is merged, loop port list from UiccCardInfo,
+ // and if find the matching UiccPort by UiccController.getUiccPortForSlot(slot, portIdx)
+ // Update each UiccPort object based on privilege access
+ UiccPort[] uiccPorts = card.getUiccPortList();
+ for (UiccPort port : uiccPorts) {
+ UiccProfile profile = port.getUiccProfile();
+ if (profile == null ||
+ profile.getCarrierPrivilegeStatus(mApp.getPackageManager(), callingPackage)
+ != TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
+ return false;
+ }
+ }
+ return true;
+ }
+
@Override
public List<UiccCardInfo> getUiccCardsInfo(String callingPackage) {
// Verify that tha callingPackage belongs to the calling UID
@@ -8729,6 +8687,7 @@
.checkPackage(Binder.getCallingUid(), callingPackage);
boolean hasReadPermission = false;
+ boolean isIccIdAccessRestricted = false;
try {
enforceReadPrivilegedPermission("getUiccCardsInfo");
hasReadPermission = true;
@@ -8740,7 +8699,11 @@
throw new SecurityException("Caller does not have permission.");
}
}
-
+ // checking compatibility, if calling app's target SDK is T and beyond.
+ if (CompatChanges.isChangeEnabled(GET_API_SIGNATURES_FROM_UICC_PORT_INFO,
+ Binder.getCallingUid())) {
+ isIccIdAccessRestricted = true;
+ }
final long identity = Binder.clearCallingIdentity();
try {
UiccController uiccController = UiccController.getInstance();
@@ -8752,20 +8715,23 @@
// Remove private info if the caller doesn't have access
ArrayList<UiccCardInfo> filteredInfos = new ArrayList<>();
for (UiccCardInfo cardInfo : cardInfos) {
+ //setting the value after compatibility check
+ cardInfo.setIccIdAccessRestricted(isIccIdAccessRestricted);
// For an inactive eUICC, the UiccCard will be null even though the UiccCardInfo
// is available
- UiccCard card = uiccController.getUiccCardForSlot(cardInfo.getSlotIndex());
- if (card == null || card.getUiccProfile() == null) {
- // assume no access if the card or profile is unavailable
- filteredInfos.add(cardInfo.getUnprivileged());
+ UiccCard card = uiccController.getUiccCardForSlot(cardInfo.getPhysicalSlotIndex());
+ // TODO remove card.getUiccPortList().length once MEP API refactoring CL is merged
+ // Get UiccPortInfo from CardInfo and process further based on each UiccPort
+ if (card == null || card.getUiccPortList().length == 0) {
+ // assume no access if the card or ports are unavailable
+ filteredInfos.add(getUiccCardInfoUnPrivileged(cardInfo));
continue;
}
- UiccProfile profile = card.getUiccProfile();
- if (profile.getCarrierPrivilegeStatus(mApp.getPackageManager(), callingPackage)
- == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
+
+ if (haveCarrierPrivilegeAccess(card, callingPackage)) {
filteredInfos.add(cardInfo);
} else {
- filteredInfos.add(cardInfo.getUnprivileged());
+ filteredInfos.add(getUiccCardInfoUnPrivileged(cardInfo));
}
}
return filteredInfos;
@@ -8774,10 +8740,70 @@
}
}
- @Override
- public UiccSlotInfo[] getUiccSlotsInfo() {
- enforceReadPrivilegedPermission("getUiccSlotsInfo");
+ /**
+ * Returns a copy of the UiccCardinfo with the EID and ICCID set to null. These values are
+ * generally private and require carrier privileges to view.
+ *
+ * @hide
+ */
+ @NonNull
+ public UiccCardInfo getUiccCardInfoUnPrivileged(UiccCardInfo cardInfo) {
+ List<UiccPortInfo> portinfo = new ArrayList<>();
+ for (UiccPortInfo portinfos : cardInfo.getPorts()) {
+ portinfo.add(getUiccPortInfoUnPrivileged(portinfos));
+ }
+ return new UiccCardInfo(
+ cardInfo.isEuicc(),
+ cardInfo.getCardId(),
+ null,
+ cardInfo.getPhysicalSlotIndex(),
+ cardInfo.isRemovable(),
+ cardInfo.isMultipleEnabledProfilesSupported(),
+ portinfo
+ );
+ }
+ /**
+ * @hide
+ * @return a copy of the UiccPortInfo with ICCID set to {@link UiccPortInfo#ICCID_REDACTED}.
+ * These values are generally private and require carrier privileges to view.
+ */
+ @NonNull
+ public UiccPortInfo getUiccPortInfoUnPrivileged(UiccPortInfo portInfo) {
+ return new UiccPortInfo(
+ UiccPortInfo.ICCID_REDACTED,
+ portInfo.getPortIndex(),
+ portInfo.getLogicalSlotIndex(),
+ portInfo.isActive()
+ );
+ }
+ @Override
+ public UiccSlotInfo[] getUiccSlotsInfo(String callingPackage) {
+ // Verify that tha callingPackage belongs to the calling UID
+ mApp.getSystemService(AppOpsManager.class)
+ .checkPackage(Binder.getCallingUid(), callingPackage);
+
+ boolean hasReadPermission = false;
+ boolean isLogicalSlotAccessRestricted = false;
+ String iccId;
+
+ try {
+ enforceReadPrivilegedPermission("getUiccSlotsInfo");
+ hasReadPermission = true;
+ } catch (SecurityException e) {
+ // even without READ_PRIVILEGED_PHONE_STATE, we allow the call to continue if the caller
+ // has carrier privileges on an active UICC
+ if (checkCarrierPrivilegesForPackageAnyPhone(callingPackage)
+ == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
+ hasReadPermission = true;
+ }
+ }
+
+ // checking compatibility, if calling app's target SDK is T and beyond.
+ if (CompatChanges.isChangeEnabled(GET_API_SIGNATURES_FROM_UICC_PORT_INFO,
+ Binder.getCallingUid())) {
+ isLogicalSlotAccessRestricted = true;
+ }
final long identity = Binder.clearCallingIdentity();
try {
UiccSlot[] slots = UiccController.getInstance().getUiccSlots();
@@ -8785,7 +8811,6 @@
Rlog.i(LOG_TAG, "slots is null.");
return null;
}
-
UiccSlotInfo[] infos = new UiccSlotInfo[slots.length];
for (int i = 0; i < slots.length; i++) {
UiccSlot slot = slots[i];
@@ -8795,12 +8820,24 @@
String cardId;
UiccCard card = slot.getUiccCard();
+ //if has read permission
+ if (hasReadPermission) {
+ iccId = slot.getIccId();
+ } else {
+ // if no read permission checking carrier
+ if (haveCarrierPrivilegeAccess(card, callingPackage)) {
+ iccId = slot.getIccId();
+ } else {
+ //if no carrier permission redact ICCID
+ iccId = IccUtils.TEST_ICCID;
+ }
+ }
if (card != null) {
cardId = card.getCardId();
} else {
cardId = slot.getEid();
if (TextUtils.isEmpty(cardId)) {
- cardId = slot.getIccId();
+ cardId = iccId;
}
}
@@ -8828,15 +8865,19 @@
break;
}
-
infos[i] = new UiccSlotInfo(
- slot.isActive(),
slot.isEuicc(),
cardId,
cardState,
- slot.getPhoneId(),
slot.isExtendedApduSupported(),
- slot.isRemovable());
+ slot.isRemovable(), Collections.singletonList(
+ new UiccPortInfo(
+ iccId,
+ 0 /* TODO: to use portList from UiccSlots */,
+ slot.getPhoneId(),
+ slot.isActive())));
+ //setting the value after compatibility check
+ infos[i].setLogicalSlotAccessRestricted(isLogicalSlotAccessRestricted);
}
return infos;
} finally {
@@ -8845,6 +8886,8 @@
}
@Override
+ @Deprecated
+ //TODO : once integrating with HAL Changes we can clean up this Internal API.
public boolean switchSlots(int[] physicalSlots) {
enforceModifyPermission();
@@ -8857,6 +8900,24 @@
}
@Override
+ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
+ public boolean setSimSlotMapping(@NonNull List<UiccSlotMapping> slotMapping) {
+ enforceModifyPermission();
+
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ //TODO: once integrating the HAL changes we can proceed with to work on the parsing side
+ int[] physicalSlots = new int[slotMapping.size()];
+ for (int i = 0; i < physicalSlots.length; i++) {
+ physicalSlots[i] = slotMapping.get(i).getPhysicalSlotIndex();
+ }
+ return (Boolean) sendRequest(CMD_SWITCH_SLOTS, physicalSlots);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ @Override
public int getCardIdForDefaultEuicc(int subId, String callingPackage) {
final long identity = Binder.clearCallingIdentity();
try {
@@ -8883,11 +8944,11 @@
if (phone == null) {
return;
}
- UiccCard uiccCard = phone.getUiccCard();
- if (uiccCard == null) {
+ UiccPort uiccPort = phone.getUiccPort();
+ if (uiccPort == null) {
return;
}
- UiccProfile uiccProfile = uiccCard.getUiccProfile();
+ UiccProfile uiccProfile = uiccPort.getUiccProfile();
if (uiccProfile == null) {
return;
}
@@ -9394,11 +9455,11 @@
}
final long identity = Binder.clearCallingIdentity();
try {
- UiccCard uiccCard = phone.getUiccCard();
- if (uiccCard == null) {
+ UiccPort uiccPort = phone.getUiccPort();
+ if (uiccPort == null) {
return false;
}
- UiccProfile uiccProfile = uiccCard.getUiccProfile();
+ UiccProfile uiccProfile = uiccPort.getUiccProfile();
if (uiccProfile == null) {
return false;
}
@@ -9439,7 +9500,7 @@
}
@Override
- public int[] getSlotsMapping() {
+ public int[] getSlotsMapping(@NonNull String callingPackage) {
enforceReadPrivilegedPermission("getSlotsMapping");
final long identity = Binder.clearCallingIdentity();
@@ -9447,7 +9508,7 @@
int phoneCount = TelephonyManager.getDefault().getPhoneCount();
// All logical slots should have a mapping to a physical slot.
int[] logicalSlotsMapping = new int[phoneCount];
- UiccSlotInfo[] slotInfos = getUiccSlotsInfo();
+ UiccSlotInfo[] slotInfos = getUiccSlotsInfo(callingPackage);
for (int i = 0; i < slotInfos.length; i++) {
if (SubscriptionManager.isValidPhoneId(slotInfos[i].getLogicalSlotIdx())) {
logicalSlotsMapping[slotInfos[i].getLogicalSlotIdx()] = i;
@@ -10807,7 +10868,7 @@
mApp.getSystemService(AppOpsManager.class)
.checkPackage(callingUid, callingPackage);
- validateSignalStrengthUpdateRequest(request, callingUid);
+ validateSignalStrengthUpdateRequest(mApp, request, callingUid);
final long identity = Binder.clearCallingIdentity();
try {
@@ -10846,19 +10907,19 @@
}
}
- private static void validateSignalStrengthUpdateRequest(SignalStrengthUpdateRequest request,
- int callingUid) {
+ private static void validateSignalStrengthUpdateRequest(Context context,
+ SignalStrengthUpdateRequest request, int callingUid) {
if (callingUid == Process.PHONE_UID || callingUid == Process.SYSTEM_UID) {
// phone/system process do not have further restriction on request
return;
}
// Applications has restrictions on how to use the request:
- // Only system caller can set mIsSystemThresholdReportingRequestedWhileIdle
+ // Non-system callers need permission to set mIsSystemThresholdReportingRequestedWhileIdle
if (request.isSystemThresholdReportingRequestedWhileIdle()) {
- // This is not system caller which has been checked above
- throw new IllegalArgumentException(
- "Only system can set isSystemThresholdReportingRequestedWhileIdle");
+ context.enforceCallingOrSelfPermission(
+ android.Manifest.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH,
+ "validateSignalStrengthUpdateRequest");
}
for (SignalThresholdInfo info : request.getSignalThresholdInfos()) {
@@ -10910,12 +10971,11 @@
@Override
@TelephonyManager.PrepareUnattendedRebootResult
public int prepareForUnattendedReboot() {
- WorkSource workSource = getWorkSource(Binder.getCallingUid());
enforceRebootPermission();
final long identity = Binder.clearCallingIdentity();
try {
- return (int) sendRequest(CMD_PREPARE_UNATTENDED_REBOOT, null, workSource);
+ return (int) sendRequest(CMD_PREPARE_UNATTENDED_REBOOT, null);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -10939,4 +10999,156 @@
Binder.restoreCallingIdentity(identity);
}
}
+
+ /**
+ * Register an IMS connection state callback
+ */
+ @Override
+ public void registerImsStateCallback(int subId, int feature, IImsStateCallback cb,
+ String callingPackage) {
+ if (feature == ImsFeature.FEATURE_MMTEL) {
+ // ImsMmTelManager
+ // The following also checks READ_PRIVILEGED_PHONE_STATE.
+ TelephonyPermissions
+ .enforceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "registerImsStateCallback");
+ } else if (feature == ImsFeature.FEATURE_RCS) {
+ // ImsRcsManager or SipDelegateManager
+ TelephonyPermissions.enforceAnyPermissionGrantedOrCarrierPrivileges(mApp, subId,
+ Binder.getCallingUid(), "registerImsStateCallback",
+ Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
+ Manifest.permission.READ_PRECISE_PHONE_STATE,
+ Manifest.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE,
+ Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION);
+ }
+
+ if (!ImsManager.isImsSupportedOnDevice(mApp)) {
+ throw new ServiceSpecificException(ImsException.CODE_ERROR_UNSUPPORTED_OPERATION,
+ "IMS not available on device.");
+ }
+
+ if (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) {
+ throw new ServiceSpecificException(ImsException.CODE_ERROR_INVALID_SUBSCRIPTION);
+ }
+
+ ImsStateCallbackController controller = ImsStateCallbackController.getInstance();
+ if (controller == null) {
+ throw new ServiceSpecificException(ImsException.CODE_ERROR_UNSUPPORTED_OPERATION,
+ "IMS not available on device.");
+ }
+
+ if (callingPackage == null) {
+ callingPackage = getCurrentPackageName();
+ }
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ int slotId = getSlotIndexOrException(subId);
+ controller.registerImsStateCallback(subId, feature, cb, callingPackage);
+ } catch (ImsException e) {
+ throw new ServiceSpecificException(e.getCode());
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ /**
+ * Unregister an IMS connection state callback
+ */
+ @Override
+ public void unregisterImsStateCallback(IImsStateCallback cb) {
+ final long token = Binder.clearCallingIdentity();
+ ImsStateCallbackController controller = ImsStateCallbackController.getInstance();
+ if (controller == null) {
+ return;
+ }
+ try {
+ controller.unregisterImsStateCallback(cb);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ /**
+ * @return {@CellIdentity} last known cell identity {@CellIdentity}.
+ *
+ * Require {@link android.Manifest.permission#ACCESS_FINE_LOCATION} and
+ * com.android.phone.permission.ACCESS_LAST_KNOWN_CELL_ID, otherwise throws
+ * SecurityException.
+ * If there is current registered network this value will be same as the registered cell
+ * identity. If the device goes out of service the previous cell identity is cached and
+ * will be returned. If the cache age of the Cell identity is more than 24 hours
+ * it will be cleared and null will be returned.
+ *
+ */
+ @Override
+ public @Nullable CellIdentity getLastKnownCellIdentity(int subId, String callingPackage,
+ String callingFeatureId) {
+ mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
+ LocationAccessPolicy.LocationPermissionResult fineLocationResult =
+ LocationAccessPolicy.checkLocationPermission(mApp,
+ new LocationAccessPolicy.LocationPermissionQuery.Builder()
+ .setCallingPackage(callingPackage)
+ .setCallingFeatureId(callingFeatureId)
+ .setCallingPid(Binder.getCallingPid())
+ .setCallingUid(Binder.getCallingUid())
+ .setMethod("getLastKnownCellIdentity")
+ .setLogAsInfo(true)
+ .setMinSdkVersionForFine(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForCoarse(Build.VERSION_CODES.Q)
+ .setMinSdkVersionForEnforcement(Build.VERSION_CODES.Q)
+ .build());
+
+ boolean hasFinePermission =
+ fineLocationResult == LocationAccessPolicy.LocationPermissionResult.ALLOWED;
+ if (!hasFinePermission
+ || !TelephonyPermissions.checkLastKnownCellIdAccessPermission(mApp)) {
+ throw new SecurityException("getLastKnownCellIdentity need ACCESS_FINE_LOCATION "
+ + "and BIND_CONNECTION_SERVICE permission.");
+ }
+
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ Phone phone = getPhone(subId);
+ if (phone == null) return null;
+ ServiceStateTracker sst = phone.getServiceStateTracker();
+ if (sst == null) return null;
+ return sst.getLastKnownCellIdentity();
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ /**
+ * Sets the modem service class Name that Telephony will bind to.
+ *
+ * @param serviceName The class name of the modem service.
+ * @return true if the operation is succeed, otherwise false.
+ */
+ public boolean setModemService(String serviceName) {
+ Log.d(LOG_TAG, "setModemService - " + serviceName);
+ TelephonyPermissions.enforceShellOnly(Binder.getCallingUid(), "setModemService");
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "setModemService");
+ return mPhoneConfigurationManager.setModemService(serviceName);
+ }
+
+ /**
+ * Return the class name of the currently bounded modem service.
+ *
+ * @return the class name of the modem service.
+ */
+ public String getModemService() {
+ String result;
+ Log.d(LOG_TAG, "getModemService");
+ TelephonyPermissions.enforceShellOnly(Binder.getCallingUid(), "getModemService");
+ TelephonyPermissions
+ .enforceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
+ mApp, SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "getModemService");
+ result = mPhoneConfigurationManager.getModemService();
+ Log.d(LOG_TAG, "result = " + result);
+ return result;
+ }
}
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index c520063..35cfdd3 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -468,7 +468,8 @@
};
// build the dialog
- final AlertDialog newDialog = new AlertDialog.Builder(contextThemeWrapper)
+ final AlertDialog newDialog =
+ FrameworksUtils.makeAlertDialogBuilder(contextThemeWrapper)
.setMessage(text)
.setView(dialogView)
.setPositiveButton(R.string.send_button, mUSSDDialogListener)
diff --git a/src/com/android/phone/RcsProvisioningMonitor.java b/src/com/android/phone/RcsProvisioningMonitor.java
index e819afc..1ed0d72 100644
--- a/src/com/android/phone/RcsProvisioningMonitor.java
+++ b/src/com/android/phone/RcsProvisioningMonitor.java
@@ -467,7 +467,7 @@
}
@Override
- public void connectionReady(RcsFeatureManager manager) {
+ public void connectionReady(RcsFeatureManager manager, int subId) {
mRcsFeatureManager = manager;
mRcsProvisioningInfos.forEach(v -> v.onRcsStatusChanged(manager.getConfig()));
}
diff --git a/src/com/android/phone/ServiceStateProvider.java b/src/com/android/phone/ServiceStateProvider.java
index 56786f9..50f90b1 100644
--- a/src/com/android/phone/ServiceStateProvider.java
+++ b/src/com/android/phone/ServiceStateProvider.java
@@ -28,6 +28,9 @@
import static android.provider.Telephony.ServiceStateTable.getUriForSubscriptionIdAndField;
import android.Manifest;
+import android.app.compat.CompatChanges;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
@@ -230,6 +233,15 @@
*/
public static final String OPERATOR_ALPHA_SHORT_RAW = "operator_alpha_short_raw";
+ /**
+ * If the change Id is enabled, location permission is required to access location sensitive
+ * columns in the ServiceStateTable.
+ */
+ @ChangeId
+ @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.R)
+ @VisibleForTesting
+ /* package */ static final long ENFORCE_LOCATION_PERMISSION_CHECK = 191911306;
+
private final HashMap<Integer, ServiceState> mServiceStates = new HashMap<>();
@VisibleForTesting
@@ -398,7 +410,8 @@
return null;
}
- // TODO(b/182384053): replace targetSdk check with CompatChanges#isChangeEnabled
+ final boolean enforceLocationPermission =
+ CompatChanges.isChangeEnabled(ENFORCE_LOCATION_PERMISSION_CHECK);
final boolean targetingAtLeastS = TelephonyPermissions.getTargetSdk(getContext(),
getCallingPackage()) >= Build.VERSION_CODES.S;
final boolean canReadPrivilegedPhoneState = getContext().checkCallingOrSelfPermission(
@@ -406,7 +419,7 @@
final String[] availableColumns;
final ServiceState ss;
- if (targetingAtLeastS && !canReadPrivilegedPhoneState) {
+ if (enforceLocationPermission && targetingAtLeastS && !canReadPrivilegedPhoneState) {
// targetSdkVersion S+ without read privileged phone state permission can only
// access public columns which have no location sensitive info.
availableColumns = PUBLIC_COLUMNS;
@@ -415,9 +428,9 @@
availableColumns = ALL_COLUMNS;
final boolean hasLocationPermission = hasLocationPermission();
- if (hasLocationPermission) {
+ if (!enforceLocationPermission || hasLocationPermission) {
// No matter the targetSdkVersion, return unredacted ServiceState if caller does
- // have location permission.
+ // have location permission or location permission enforcement is not introduced
ss = unredactedServiceState;
} else {
// The caller has targetSdkVersion S+ but no location permission. It explicitly
@@ -687,8 +700,6 @@
/* package */ static ServiceState getLocationRedactedServiceState(ServiceState serviceState) {
ServiceState ss =
serviceState.createLocationInfoSanitizedCopy(true /*removeCoarseLocation*/);
- // TODO(b/188061647): remove the additional redaction once it is fixed in SS
- ss.setCdmaSystemAndNetworkId(ServiceState.UNKNOWN_ID, ServiceState.UNKNOWN_ID);
return ss;
}
}
diff --git a/src/com/android/phone/SimPhonebookProvider.java b/src/com/android/phone/SimPhonebookProvider.java
index 04c4f48..8952865 100644
--- a/src/com/android/phone/SimPhonebookProvider.java
+++ b/src/com/android/phone/SimPhonebookProvider.java
@@ -43,7 +43,7 @@
import android.telephony.TelephonyFrameworkInitializer;
import android.telephony.TelephonyManager;
import android.util.ArraySet;
-import android.util.Pair;
+import android.util.SparseArray;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -55,10 +55,10 @@
import com.google.common.base.Joiner;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.MoreExecutors;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
@@ -333,19 +333,25 @@
if (recordsSize == null || getRecordCount(recordsSize) == 0) {
return;
}
+ int efid = efIdForEfType(efType);
+ // Have to load the existing records to get the size because there may be more than one
+ // phonebook set in which case the total capacity is the sum of the capacity of EF_ADN for
+ // all the phonebook sets whereas the recordsSize is just the size for a single EF.
+ List<AdnRecord> existingRecords = mIccPhoneBookSupplier.get()
+ .getAdnRecordsInEfForSubscriber(subscriptionInfo.getSubscriptionId(), efid);
+ if (existingRecords == null) {
+ existingRecords = ImmutableList.of();
+ }
MatrixCursor.RowBuilder row = result.newRow()
.add(ElementaryFiles.SLOT_INDEX, subscriptionInfo.getSimSlotIndex())
.add(ElementaryFiles.SUBSCRIPTION_ID, subscriptionInfo.getSubscriptionId())
.add(ElementaryFiles.EF_TYPE, efType)
- .add(ElementaryFiles.MAX_RECORDS, getRecordCount(recordsSize))
+ .add(ElementaryFiles.MAX_RECORDS, existingRecords.size())
.add(ElementaryFiles.NAME_MAX_LENGTH,
AdnRecord.getMaxAlphaTagBytes(getRecordSize(recordsSize)))
.add(ElementaryFiles.PHONE_NUMBER_MAX_LENGTH,
AdnRecord.getMaxPhoneNumberDigits());
if (result.getColumnIndex(ElementaryFiles.RECORD_COUNT) != -1) {
- int efid = efIdForEfType(efType);
- List<AdnRecord> existingRecords = mIccPhoneBookSupplier.get()
- .getAdnRecordsInEfForSubscriber(subscriptionInfo.getSubscriptionId(), efid);
int nonEmptyCount = 0;
for (AdnRecord record : existingRecords) {
if (!record.isEmpty()) {
@@ -368,39 +374,46 @@
return new MatrixCursor(projection, 0);
}
MatrixCursor result = new MatrixCursor(projection, records.size());
- List<Pair<AdnRecord, MatrixCursor.RowBuilder>> rowBuilders = new ArrayList<>(
- records.size());
- for (AdnRecord record : records) {
+ SparseArray<MatrixCursor.RowBuilder> rowBuilders = new SparseArray<>(records.size());
+ for (int i = 0; i < records.size(); i++) {
+ AdnRecord record = records.get(i);
if (!record.isEmpty()) {
- rowBuilders.add(Pair.create(record, result.newRow()));
+ rowBuilders.put(i, result.newRow());
}
}
// This is kind of ugly but avoids looking up columns in an inner loop.
for (String column : projection) {
switch (column) {
case SimRecords.SUBSCRIPTION_ID:
- for (Pair<AdnRecord, MatrixCursor.RowBuilder> row : rowBuilders) {
- row.second.add(args.subscriptionId);
+ for (int i = 0; i < rowBuilders.size(); i++) {
+ rowBuilders.valueAt(i).add(args.subscriptionId);
}
break;
case SimRecords.ELEMENTARY_FILE_TYPE:
- for (Pair<AdnRecord, MatrixCursor.RowBuilder> row : rowBuilders) {
- row.second.add(args.efType);
+ for (int i = 0; i < rowBuilders.size(); i++) {
+ rowBuilders.valueAt(i).add(args.efType);
}
break;
case SimRecords.RECORD_NUMBER:
- for (Pair<AdnRecord, MatrixCursor.RowBuilder> row : rowBuilders) {
- row.second.add(row.first.getRecId());
+ for (int i = 0; i < rowBuilders.size(); i++) {
+ int index = rowBuilders.keyAt(i);
+ MatrixCursor.RowBuilder rowBuilder = rowBuilders.valueAt(i);
+ // See b/201685690. The logical record number, i.e. the 1-based index in the
+ // list, is used the rather than AdnRecord.getRecId() because getRecId is
+ // not offset when a single logical EF is made up of multiple physical EFs.
+ rowBuilder.add(index + 1);
}
break;
case SimRecords.NAME:
- for (Pair<AdnRecord, MatrixCursor.RowBuilder> row : rowBuilders) {
- row.second.add(row.first.getAlphaTag());
+ for (int i = 0; i < rowBuilders.size(); i++) {
+ AdnRecord record = records.get(rowBuilders.keyAt(i));
+ rowBuilders.valueAt(i).add(record.getAlphaTag());
}
break;
case SimRecords.PHONE_NUMBER:
- for (Pair<AdnRecord, MatrixCursor.RowBuilder> row : rowBuilders) {
- row.second.add(row.first.getNumber());
+ for (int i = 0; i < rowBuilders.size(); i++) {
+ AdnRecord record = records.get(rowBuilders.keyAt(i));
+ rowBuilders.valueAt(i).add(record.getNumber());
}
break;
default:
@@ -765,20 +778,9 @@
if (records == null || args.recordNumber > records.size()) {
return null;
}
- AdnRecord result = records.get(args.recordNumber - 1);
- // This should be true but the service could have a different implementation.
- if (result.getRecId() == args.recordNumber) {
- return result;
- }
- for (AdnRecord record : records) {
- if (record.getRecId() == args.recordNumber) {
- return result;
- }
- }
- return null;
+ return records.get(args.recordNumber - 1);
}
-
private int[] getRecordsSizeForEf(PhonebookArgs args) {
try {
return mIccPhoneBookSupplier.get().getAdnRecordsSizeForSubscriber(
diff --git a/src/com/android/phone/SpecialCharSequenceMgr.java b/src/com/android/phone/SpecialCharSequenceMgr.java
index 674449e..3bf0e1a 100644
--- a/src/com/android/phone/SpecialCharSequenceMgr.java
+++ b/src/com/android/phone/SpecialCharSequenceMgr.java
@@ -264,7 +264,7 @@
}
return isMMIHandled;
} else {
- AlertDialog dialog = new AlertDialog.Builder(context)
+ AlertDialog dialog = FrameworksUtils.makeAlertDialogBuilder(context)
.setMessage(R.string.pin_puk_system_user_only)
.setPositiveButton(R.string.ok, null)
.setCancelable(true).create();
@@ -294,7 +294,7 @@
int labelId = TelephonyCapabilities.getDeviceIdLabel(phone);
String deviceId = phone.getDeviceId();
- AlertDialog alert = new AlertDialog.Builder(context)
+ AlertDialog alert = FrameworksUtils.makeAlertDialogBuilder(context)
.setTitle(labelId)
.setMessage(deviceId)
.setPositiveButton(R.string.ok, null)
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index dbeb7ce..eaf4371 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -151,6 +151,10 @@
private static final String UCE_SET_CAPABILITY_REQUEST_TIMEOUT =
"set-capabilities-request-timeout";
+ private static final String RADIO_SUBCOMMAND = "radio";
+ private static final String RADIO_SET_MODEM_SERVICE = "set-modem-service";
+ private static final String RADIO_GET_MODEM_SERVICE = "get-modem-service";
+
// Check if a package has carrier privileges on any SIM, regardless of subId/phoneId.
private static final String HAS_CARRIER_PRIVILEGES_COMMAND = "has-carrier-privileges";
@@ -246,13 +250,13 @@
FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED)));
map.put("chatbot_v2", new ArraySet<>(Arrays.asList(
FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_SESSION,
- FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED)));
+ FeatureTags.FEATURE_TAG_CHATBOT_VERSION_V2_SUPPORTED)));
map.put("chatbot_sa", new ArraySet<>(Arrays.asList(
FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_STANDALONE_MSG,
FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED)));
map.put("chatbot_sa_v2", new ArraySet<>(Arrays.asList(
FeatureTags.FEATURE_TAG_CHATBOT_COMMUNICATION_USING_STANDALONE_MSG,
- FeatureTags.FEATURE_TAG_CHATBOT_VERSION_SUPPORTED)));
+ FeatureTags.FEATURE_TAG_CHATBOT_VERSION_V2_SUPPORTED)));
map.put("chatbot_role", Collections.singleton(FeatureTags.FEATURE_TAG_CHATBOT_ROLE));
TEST_FEATURE_TAG_MAP = Collections.unmodifiableMap(map);
}
@@ -357,6 +361,8 @@
pw.println(" Get the Allowed Network Types.");
pw.println(" set-allowed-network-types-for-users");
pw.println(" Set the Allowed Network Types.");
+ pw.println(" radio");
+ pw.println(" Radio Commands.");
onHelpIms();
onHelpUce();
onHelpEmergencyNumber();
@@ -368,6 +374,7 @@
onHelpD2D();
onHelpDisableOrEnablePhysicalSubscription();
onHelpAllowedNetworkTypes();
+ onHelpRadio();
}
private void onHelpD2D() {
@@ -656,6 +663,21 @@
pw.println(" LTE only : 01000001000000000000");
}
+ private void onHelpRadio() {
+ PrintWriter pw = getOutPrintWriter();
+ pw.println("Radio Commands:");
+ pw.println(" radio set-modem-service [-s SERVICE_NAME]");
+ pw.println(" Sets the class name of modem service defined in SERVICE_NAME");
+ pw.println(" to be the bound. Options are:");
+ pw.println(" -s: the service name that the modem service should be bound for.");
+ pw.println(" If no option is specified, it will bind to the default.");
+ pw.println(" radio get-modem-service");
+ pw.println(" Gets the service name of the currently defined modem service.");
+ pw.println(" If it is binding to default, 'default' returns.");
+ pw.println(" If it doesn't bind to any modem service for some reasons,");
+ pw.println(" the result would be 'unknown'.");
+ }
+
private int handleImsCommand() {
String arg = getNextArg();
if (arg == null) {
@@ -2725,4 +2747,69 @@
return -1;
}
}
+
+ private int handleRadioSetModemServiceCommand() {
+ PrintWriter errPw = getErrPrintWriter();
+ String serviceName = null;
+
+ String opt;
+ while ((opt = getNextOption()) != null) {
+ switch (opt) {
+ case "-s": {
+ serviceName = getNextArgRequired();
+ break;
+ }
+ }
+ }
+
+ try {
+ boolean result = mInterface.setModemService(serviceName);
+ if (VDBG) {
+ Log.v(LOG_TAG,
+ "RadioSetModemService " + serviceName + ", result = " + result);
+ }
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ Log.w(LOG_TAG,
+ "RadioSetModemService: " + serviceName + ", error = " + e.getMessage());
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+ return 0;
+ }
+
+ private int handleRadioGetModemServiceCommand() {
+ PrintWriter errPw = getErrPrintWriter();
+ String result;
+
+ try {
+ result = mInterface.getModemService();
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+ if (VDBG) {
+ Log.v(LOG_TAG, "RadioGetModemService, result = " + result);
+ }
+ return 0;
+ }
+
+ private int handleRadioCommand() {
+ String arg = getNextArg();
+ if (arg == null) {
+ onHelpRadio();
+ return 0;
+ }
+
+ switch (arg) {
+ case RADIO_SET_MODEM_SERVICE:
+ return handleRadioSetModemServiceCommand();
+
+ case RADIO_GET_MODEM_SERVICE:
+ return handleRadioGetModemServiceCommand();
+ }
+
+ return -1;
+ }
}
diff --git a/src/com/android/phone/TimeConsumingPreferenceActivity.java b/src/com/android/phone/TimeConsumingPreferenceActivity.java
index 8c5ae6d..caef176 100644
--- a/src/com/android/phone/TimeConsumingPreferenceActivity.java
+++ b/src/com/android/phone/TimeConsumingPreferenceActivity.java
@@ -84,7 +84,7 @@
|| id == FDN_CHECK_FAILURE || id == STK_CC_SS_TO_DIAL_ERROR
|| id == STK_CC_SS_TO_USSD_ERROR || id == STK_CC_SS_TO_SS_ERROR
|| id == STK_CC_SS_TO_DIAL_VIDEO_ERROR) {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ AlertDialog.Builder builder = FrameworksUtils.makeAlertDialogBuilder(this);
int msgId;
int titleId = R.string.error_updating_title;
diff --git a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
index 224a1f9..6bc71dc 100644
--- a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
+++ b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
@@ -78,6 +78,9 @@
new SubscriptionManager.OnSubscriptionsChangedListener() {
@Override
public void onSubscriptionsChanged() {
+ if (getActivity() == null) {
+ return;
+ }
updateAccounts();
}
};
diff --git a/src/com/android/phone/settings/RadioInfo.java b/src/com/android/phone/settings/RadioInfo.java
index d4c926e..6728138 100644
--- a/src/com/android/phone/settings/RadioInfo.java
+++ b/src/com/android/phone/settings/RadioInfo.java
@@ -17,6 +17,7 @@
package com.android.phone.settings;
import static android.net.ConnectivityManager.NetworkCallback;
+
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import android.content.ComponentName;
@@ -57,7 +58,6 @@
import android.telephony.CellSignalStrengthLte;
import android.telephony.CellSignalStrengthWcdma;
import android.telephony.DataSpecificRegistrationInfo;
-import android.telephony.data.NetworkSlicingConfig;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.PhysicalChannelConfig;
import android.telephony.RadioAccessFamily;
@@ -66,6 +66,7 @@
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
+import android.telephony.data.NetworkSlicingConfig;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
@@ -102,8 +103,8 @@
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeoutException;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
/**
* Radio Information Class
@@ -1124,24 +1125,28 @@
& TelephonyManager.NETWORK_TYPE_BITMASK_NR) == 0) {
return;
}
-
ServiceState ss = serviceState;
if (ss == null && mPhone != null) {
ss = mPhone.getServiceState();
}
if (ss != null) {
+ boolean isNrSa = ss.getDataNetworkType() == TelephonyManager.NETWORK_TYPE_NR;
NetworkRegistrationInfo nri = ss.getNetworkRegistrationInfo(
NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
if (nri != null) {
DataSpecificRegistrationInfo dsri = nri.getDataSpecificInfo();
if (dsri != null) {
- mEndcAvailable.setText(dsri.isEnDcAvailable ? "True" : "False");
- mDcnrRestricted.setText(dsri.isDcNrRestricted ? "True" : "False");
- mNrAvailable.setText(dsri.isNrAvailable ? "True" : "False");
+ mEndcAvailable.setText(isNrSa ? "N/A"
+ : dsri.isEnDcAvailable ? "True" : "False");
+ mDcnrRestricted.setText(isNrSa ? "N/A"
+ : dsri.isDcNrRestricted ? "True" : "False");
+ mNrAvailable.setText(isNrSa ? "N/A" : dsri.isNrAvailable ? "True" : "False");
}
}
- mNrState.setText(NetworkRegistrationInfo.nrStateToString(ss.getNrState()));
- mNrFrequency.setText(ServiceState.frequencyRangeToString(ss.getNrFrequencyRange()));
+ mNrState.setText(isNrSa ? "N/A"
+ : NetworkRegistrationInfo.nrStateToString(ss.getNrState()));
+ mNrFrequency.setText(isNrSa ? "N/A"
+ : ServiceState.frequencyRangeToString(ss.getNrFrequencyRange()));
}
Executor simpleExecutor = (r) -> r.run();
@@ -1170,9 +1175,16 @@
if (s == null) s = r.getString(R.string.radioInfo_unknown);
mSubscriberId.setText(s);
- //FIXME: Replace with a TelephonyManager call
- s = mPhone.getLine1Number();
- if (s == null) s = r.getString(R.string.radioInfo_unknown);
+ SubscriptionManager subMgr = getSystemService(SubscriptionManager.class);
+ int subId = mPhone.getSubId();
+ s = subMgr.getPhoneNumber(subId)
+ + " { CARRIER:"
+ + subMgr.getPhoneNumber(subId, SubscriptionManager.PHONE_NUMBER_SOURCE_CARRIER)
+ + ", UICC:"
+ + subMgr.getPhoneNumber(subId, SubscriptionManager.PHONE_NUMBER_SOURCE_UICC)
+ + ", IMS:"
+ + subMgr.getPhoneNumber(subId, SubscriptionManager.PHONE_NUMBER_SOURCE_IMS)
+ + " }";
mLine1Number.setText(s);
}
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
old mode 100755
new mode 100644
index ce3cf01..ed07726
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -2707,6 +2707,10 @@
capabilities = changeBitmask(capabilities, CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL,
isLocalVideoSupported);
+ capabilities = changeBitmask(capabilities, CAPABILITY_REMOTE_PARTY_SUPPORTS_RTT,
+ (mOriginalConnectionCapabilities & Capability.SUPPORTS_RTT_REMOTE)
+ == Capability.SUPPORTS_RTT_REMOTE);
+
return capabilities;
}
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 8c5fb66..a392876 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -65,6 +65,7 @@
import com.android.internal.telephony.imsphone.ImsExternalCallTracker;
import com.android.internal.telephony.imsphone.ImsPhone;
import com.android.internal.telephony.imsphone.ImsPhoneConnection;
+import com.android.phone.FrameworksUtils;
import com.android.phone.MMIDialogActivity;
import com.android.phone.PhoneUtils;
import com.android.phone.R;
@@ -2460,7 +2461,7 @@
if (showDialog) {
Log.d(this, "Creating UT Data enable dialog");
String message = SuppServicesUiUtil.makeMessage(context, suppKey, phone);
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ AlertDialog.Builder builder = FrameworksUtils.makeAlertDialogBuilder(context);
DialogInterface.OnClickListener networkSettingsClickListener =
new Dialog.OnClickListener() {
@Override
diff --git a/src/com/android/services/telephony/rcs/DelegateStateTracker.java b/src/com/android/services/telephony/rcs/DelegateStateTracker.java
index 18aab88..29b8121 100644
--- a/src/com/android/services/telephony/rcs/DelegateStateTracker.java
+++ b/src/com/android/services/telephony/rcs/DelegateStateTracker.java
@@ -16,6 +16,10 @@
package com.android.services.telephony.rcs;
+import android.app.compat.CompatChanges;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
+import android.os.Build;
import android.os.RemoteException;
import android.telephony.ims.DelegateRegistrationState;
import android.telephony.ims.FeatureTagState;
@@ -28,6 +32,7 @@
import android.util.LocalLog;
import android.util.Log;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.metrics.RcsStats;
import java.io.PrintWriter;
@@ -43,25 +48,69 @@
private static final String LOG_TAG = "DelegateST";
private final int mSubId;
+ private final int mUid;
private final ISipDelegateConnectionStateCallback mAppStateCallback;
private final ISipDelegate mLocalDelegateImpl;
private final LocalLog mLocalLog = new LocalLog(SipTransportController.LOG_SIZE);
+ private final RcsStats mRcsStats;
+
private List<FeatureTagState> mDelegateDeniedTags;
private DelegateRegistrationState mLastRegState;
private boolean mCreatedCalled = false;
private int mRegistrationStateOverride = -1;
-
+ private CompatChangesFactory mCompatChangesFactory;
private Set<String> mDelegateSupportedTags;
- private final RcsStats mRcsStats;
- public DelegateStateTracker(int subId, ISipDelegateConnectionStateCallback appStateCallback,
+ /**
+ * Interface for checking compatibility of apps
+ */
+ public interface CompatChangesFactory {
+ /**
+ * @param changeId The ID of the compatibility change.
+ * @param uid The UID of the app.
+ * @return {@code true} if the change is enabled for the current app.
+ */
+ boolean isChangeEnabled(long changeId, int uid);
+ }
+
+ /**
+ * For apps targeting Android T and above, support the REGISTERING state on APIs, such as
+ * {@code DelegateRegistrationState#addRegisteringFeatureTags} and
+ * {@code DelegateRegistrationState#getRegisteringFeatureTags}
+ * @hide
+ */
+ @ChangeId
+ @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.S)
+ @VisibleForTesting
+ public static final long SUPPORT_REGISTERING_DELEGATE_STATE = 205194548;
+
+ /**
+ * For apps targeting Android T and above, support the DEREGISTERING_REASON_LOSING_PDN state
+ * on APIs, such as {@code DelegateRegistrationState#addDeregisteringFeatureTag} and
+ * {@code DelegateRegistrationState#getDeregisteringFeatureTags}
+ * @hide
+ */
+ @ChangeId
+ @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.S)
+ @VisibleForTesting
+ public static final long SUPPORT_DEREGISTERING_LOSING_PDN_STATE = 201522903;
+
+ public DelegateStateTracker(int subId, int uid,
+ ISipDelegateConnectionStateCallback appStateCallback,
ISipDelegate localDelegateImpl, RcsStats rcsStats) {
mSubId = subId;
+ mUid = uid;
mAppStateCallback = appStateCallback;
mLocalDelegateImpl = localDelegateImpl;
mRcsStats = rcsStats;
+ setCompatChangesFactory((changeId, uid1) -> CompatChanges.isChangeEnabled(changeId, uid1));
+ }
+
+ @VisibleForTesting
+ protected void setCompatChangesFactory(CompatChangesFactory factory) {
+ mCompatChangesFactory = factory;
}
/**
@@ -140,6 +189,13 @@
*/
@Override
public void onRegistrationStateChanged(DelegateRegistrationState registrationState) {
+ if (!mCompatChangesFactory.isChangeEnabled(SUPPORT_DEREGISTERING_LOSING_PDN_STATE, mUid)) {
+ registrationState = overrideDeregisteringStateForCompatibility(registrationState);
+ }
+ if (!mCompatChangesFactory.isChangeEnabled(SUPPORT_REGISTERING_DELEGATE_STATE, mUid)) {
+ registrationState = overrideRegistrationForCompatibility(registrationState);
+ }
+
if (mRegistrationStateOverride > DelegateRegistrationState.DEREGISTERED_REASON_UNKNOWN) {
logi("onRegistrationStateChanged: overriding registered state to "
+ mRegistrationStateOverride);
@@ -204,6 +260,7 @@
private DelegateRegistrationState overrideRegistrationForDelegateChange(
int registerOverrideReason, DelegateRegistrationState state) {
Set<String> registeredFeatures = state.getRegisteredFeatureTags();
+ Set<String> registeringFeatures = state.getRegisteringFeatureTags();
DelegateRegistrationState.Builder overriddenState = new DelegateRegistrationState.Builder();
// keep other deregistering/deregistered tags the same.
for (FeatureTagState dereging : state.getDeregisteringFeatureTags()) {
@@ -214,13 +271,78 @@
overriddenState.addDeregisteredFeatureTag(dereged.getFeatureTag(),
dereged.getState());
}
- // Override REGISTERED only
+ // Override REGISTERING/REGISTERED
+ for (String ft : registeringFeatures) {
+ overriddenState.addDeregisteringFeatureTag(ft, registerOverrideReason);
+ }
for (String ft : registeredFeatures) {
overriddenState.addDeregisteringFeatureTag(ft, registerOverrideReason);
}
return overriddenState.build();
}
+ private DelegateRegistrationState overrideRegistrationForCompatibility(
+ DelegateRegistrationState state) {
+ Set<String> registeredFeatures = state.getRegisteredFeatureTags();
+ Set<String> registeringFeatures = state.getRegisteringFeatureTags();
+ DelegateRegistrationState.Builder overriddenState = new DelegateRegistrationState.Builder();
+ // keep other registered/deregistering/deregistered tags the same.
+ for (FeatureTagState dereging : state.getDeregisteringFeatureTags()) {
+ overriddenState.addDeregisteringFeatureTag(dereging.getFeatureTag(),
+ dereging.getState());
+ }
+ for (FeatureTagState dereged : state.getDeregisteredFeatureTags()) {
+ overriddenState.addDeregisteredFeatureTag(dereged.getFeatureTag(),
+ dereged.getState());
+ }
+ overriddenState.addRegisteredFeatureTags(registeredFeatures);
+
+ // move the REGISTERING state to the DEREGISTERED state.
+ for (String tag : registeringFeatures) {
+ overriddenState.addDeregisteredFeatureTag(tag,
+ DelegateRegistrationState.DEREGISTERED_REASON_NOT_REGISTERED);
+ }
+
+ return overriddenState.build();
+ }
+
+ /**
+ * @param state The RegistrationState reported by the SipDelegate to be sent to the
+ * IMS application .
+ * @return DEREGISTERING_REASON_PDN_CHANGE instead of DEREGISTERING_REASON_LOSING_PDN
+ * if the SUPPORT_DEREGISTERING_LOSING_PDN_STATE compat key is not enabled for the application
+ * consuming the registration change events.
+ */
+ private DelegateRegistrationState overrideDeregisteringStateForCompatibility(
+ DelegateRegistrationState state) {
+ Set<String> registeredFeatures = state.getRegisteredFeatureTags();
+ Set<String> registeringFeatures = state.getRegisteringFeatureTags();
+ DelegateRegistrationState.Builder overriddenState = new DelegateRegistrationState.Builder();
+
+ // keep other registered/registering/deregistered tags the same.
+ for (FeatureTagState dereged : state.getDeregisteredFeatureTags()) {
+ overriddenState.addDeregisteredFeatureTag(dereged.getFeatureTag(),
+ dereged.getState());
+ }
+ overriddenState.addRegisteredFeatureTags(registeredFeatures);
+ overriddenState.addRegisteringFeatureTags(registeringFeatures);
+
+ // change DEREGISTERING_REASON_LOSING_PDN to DEREGISTERING_REASON_PDN_CHANGE
+ for (FeatureTagState dereging : state.getDeregisteringFeatureTags()) {
+ overriddenState.addDeregisteringFeatureTag(dereging.getFeatureTag(),
+ getDeregisteringReasonForCompatibility(dereging.getState()));
+ }
+
+ return overriddenState.build();
+ }
+
+ private int getDeregisteringReasonForCompatibility(int reason) {
+ if (reason == DelegateRegistrationState.DEREGISTERING_REASON_LOSING_PDN) {
+ reason = DelegateRegistrationState.DEREGISTERING_REASON_PDN_CHANGE;
+ }
+ return reason;
+ }
+
private void notifySipDelegateCreated() {
try {
mAppStateCallback.onCreated(mLocalDelegateImpl);
diff --git a/src/com/android/services/telephony/rcs/RcsFeatureController.java b/src/com/android/services/telephony/rcs/RcsFeatureController.java
index 7834903..0e1cb4b 100644
--- a/src/com/android/services/telephony/rcs/RcsFeatureController.java
+++ b/src/com/android/services/telephony/rcs/RcsFeatureController.java
@@ -33,6 +33,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.imsphone.ImsRegistrationCallbackHelper;
import com.android.internal.util.IndentingPrintWriter;
+import com.android.phone.ImsStateCallbackController;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -127,7 +128,7 @@
private FeatureConnector.Listener<RcsFeatureManager> mFeatureConnectorListener =
new FeatureConnector.Listener<RcsFeatureManager>() {
@Override
- public void connectionReady(RcsFeatureManager manager)
+ public void connectionReady(RcsFeatureManager manager, int subId)
throws com.android.ims.ImsException {
if (manager == null) {
logw("connectionReady returned null RcsFeatureManager");
@@ -139,6 +140,8 @@
// ImsService is gone.
updateConnectionStatus(manager);
setupConnectionToService(manager);
+ ImsStateCallbackController.getInstance()
+ .notifyExternalRcsStateChanged(mSlotId, true, true);
} catch (ImsException e) {
updateConnectionStatus(null /*manager*/);
// Use deprecated Exception for compatibility.
diff --git a/src/com/android/services/telephony/rcs/SipDelegateController.java b/src/com/android/services/telephony/rcs/SipDelegateController.java
index c728141..860a6d9 100644
--- a/src/com/android/services/telephony/rcs/SipDelegateController.java
+++ b/src/com/android/services/telephony/rcs/SipDelegateController.java
@@ -78,6 +78,7 @@
}
private final int mSubId;
+ private final int mUid;
private final String mPackageName;
private final DelegateRequest mInitialRequest;
private final ScheduledExecutorService mExecutorService;
@@ -89,12 +90,13 @@
private DelegateBinderStateManager mBinderConnection;
private Set<String> mTrackedFeatureTags;
- public SipDelegateController(int subId, DelegateRequest initialRequest, String packageName,
- ISipTransport transportImpl, IImsRegistration registrationImpl,
+ public SipDelegateController(int subId, int uid, DelegateRequest initialRequest,
+ String packageName, ISipTransport transportImpl, IImsRegistration registrationImpl,
ScheduledExecutorService executorService,
ISipDelegateConnectionStateCallback stateCallback,
ISipDelegateMessageCallback messageCallback) {
mSubId = subId;
+ mUid = uid;
mPackageName = packageName;
mInitialRequest = initialRequest;
mExecutorService = executorService;
@@ -102,7 +104,8 @@
mMessageTransportWrapper = new MessageTransportWrapper(mSubId, executorService,
messageCallback);
- mDelegateStateTracker = new DelegateStateTracker(mSubId, stateCallback,
+
+ mDelegateStateTracker = new DelegateStateTracker(mSubId, mUid, stateCallback,
mMessageTransportWrapper.getDelegateConnection(), RcsStats.getInstance());
}
@@ -110,12 +113,13 @@
* Inject dependencies for testing only.
*/
@VisibleForTesting
- public SipDelegateController(int subId, DelegateRequest initialRequest, String packageName,
- ScheduledExecutorService executorService,
+ public SipDelegateController(int subId, int uid, DelegateRequest initialRequest,
+ String packageName, ScheduledExecutorService executorService,
MessageTransportWrapper messageTransportWrapper,
DelegateStateTracker delegateStateTracker,
DelegateBinderStateManager.Factory connectionFactory) {
mSubId = subId;
+ mUid = uid;
mInitialRequest = initialRequest;
mPackageName = packageName;
mExecutorService = executorService;
diff --git a/src/com/android/services/telephony/rcs/SipTransportController.java b/src/com/android/services/telephony/rcs/SipTransportController.java
index 709e142..0aa3aa0 100644
--- a/src/com/android/services/telephony/rcs/SipTransportController.java
+++ b/src/com/android/services/telephony/rcs/SipTransportController.java
@@ -243,9 +243,9 @@
@VisibleForTesting
public interface SipDelegateControllerFactory {
/** See {@link SipDelegateController} */
- SipDelegateController create(int subId, DelegateRequest initialRequest, String packageName,
- ISipTransport sipTransportImpl, IImsRegistration registrationImpl,
- ScheduledExecutorService executorService,
+ SipDelegateController create(int subId, int uid, DelegateRequest initialRequest,
+ String packageName, ISipTransport sipTransportImpl,
+ IImsRegistration registrationImpl, ScheduledExecutorService executorService,
ISipDelegateConnectionStateCallback stateCallback,
ISipDelegateMessageCallback messageCallback);
}
@@ -364,17 +364,18 @@
* {@link ISipDelegateConnectionStateCallback#onCreated(ISipDelegate)} must be called with
* the AIDL instance corresponding to the remote {@link SipDelegate}.
* @param subId the subId associated with the request.
+ * @param uid the uid associated with the request
* @param request The request parameters used to create the {@link SipDelegate}.
* @param delegateState The {@link DelegateConnectionStateCallback} Binder connection.
* @param delegateMessage The {@link DelegateConnectionMessageCallback} Binder Connection
* @throws ImsException if the request to create the {@link SipDelegate} did not complete.
*/
- public void createSipDelegate(int subId, DelegateRequest request, String packageName,
+ public void createSipDelegate(int subId, int uid, DelegateRequest request, String packageName,
ISipDelegateConnectionStateCallback delegateState,
ISipDelegateMessageCallback delegateMessage) throws ImsException {
logi("createSipDelegate: request= " + request + ", packageName= " + packageName);
CompletableFuture<ImsException> result = new CompletableFuture<>();
- mExecutorService.submit(() -> createSipDelegateInternal(subId, request, packageName,
+ mExecutorService.submit(() -> createSipDelegateInternal(subId, uid, request, packageName,
delegateState,
// Capture any ImsExceptions generated during the process.
delegateMessage, result::complete));
@@ -423,8 +424,8 @@
return result;
}
- private void createSipDelegateInternal(int subId, DelegateRequest request, String packageName,
- ISipDelegateConnectionStateCallback delegateState,
+ private void createSipDelegateInternal(int subId, int uid, DelegateRequest request,
+ String packageName, ISipDelegateConnectionStateCallback delegateState,
ISipDelegateMessageCallback delegateMessage,
Consumer<ImsException> startedErrorConsumer) {
ISipTransport transport;
@@ -450,8 +451,9 @@
return;
}
- SipDelegateController c = mDelegateControllerFactory.create(subId, request, packageName,
- transport, registration, mExecutorService, delegateState, delegateMessage);
+ SipDelegateController c = mDelegateControllerFactory.create(subId, uid, request,
+ packageName, transport, registration, mExecutorService, delegateState,
+ delegateMessage);
logi("createSipDelegateInternal: request= " + request + ", packageName= " + packageName
+ ", controller created: " + c);
addPendingCreateAndEvaluate(c);
diff --git a/src/com/android/services/telephony/rcs/TelephonyRcsService.java b/src/com/android/services/telephony/rcs/TelephonyRcsService.java
index 046910c..dfcea74 100644
--- a/src/com/android/services/telephony/rcs/TelephonyRcsService.java
+++ b/src/com/android/services/telephony/rcs/TelephonyRcsService.java
@@ -34,6 +34,7 @@
import com.android.internal.telephony.PhoneConfigurationManager;
import com.android.internal.telephony.metrics.RcsStats;
import com.android.internal.util.IndentingPrintWriter;
+import com.android.phone.ImsStateCallbackController;
import com.android.phone.R;
import java.io.FileDescriptor;
@@ -313,6 +314,9 @@
}
// Only start the connection procedure if we have active features.
if (c.hasActiveFeatures()) c.connect();
+
+ ImsStateCallbackController.getInstance()
+ .notifyExternalRcsStateChanged(slotId, false, c.hasActiveFeatures());
}
/**
diff --git a/src/com/android/services/telephony/rcs/UceControllerManager.java b/src/com/android/services/telephony/rcs/UceControllerManager.java
index 995d685..02ae048 100644
--- a/src/com/android/services/telephony/rcs/UceControllerManager.java
+++ b/src/com/android/services/telephony/rcs/UceControllerManager.java
@@ -206,10 +206,11 @@
*
* @throws ImsException if the ImsService connected to this controller is currently down.
*/
- public @PublishState int getUcePublishState() throws ImsException {
+ public @PublishState int getUcePublishState(boolean isSupportPublishingState)
+ throws ImsException {
Future<Integer> future = mExecutorService.submit(() -> {
checkUceControllerState();
- return mUceController.getUcePublishState();
+ return mUceController.getUcePublishState(isSupportPublishingState);
});
try {
@@ -390,10 +391,11 @@
*
* @throws ImsException if the ImsService connected to this controller is currently down.
*/
- public void registerPublishStateCallback(IRcsUcePublishStateCallback c) throws ImsException {
+ public void registerPublishStateCallback(IRcsUcePublishStateCallback c,
+ boolean supportPublishingState) throws ImsException {
Future future = mExecutorService.submit(() -> {
checkUceControllerState();
- mUceController.registerPublishStateCallback(c);
+ mUceController.registerPublishStateCallback(c, supportPublishingState);
return true;
});
diff --git a/testapps/EmbmsServiceTestApp/Android.bp b/testapps/EmbmsServiceTestApp/Android.bp
index 584e5bd..236ba43 100644
--- a/testapps/EmbmsServiceTestApp/Android.bp
+++ b/testapps/EmbmsServiceTestApp/Android.bp
@@ -1,13 +1,9 @@
-// Build the Sample Embms Services
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
+// Build the Sample Embms Services
android_app {
name: "EmbmsTestService",
srcs: ["src/**/*.java"],
diff --git a/testapps/EmbmsTestDownloadApp/Android.bp b/testapps/EmbmsTestDownloadApp/Android.bp
index c1b9425..7a70221 100644
--- a/testapps/EmbmsTestDownloadApp/Android.bp
+++ b/testapps/EmbmsTestDownloadApp/Android.bp
@@ -1,10 +1,6 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
src_dirs = ["src"]
diff --git a/testapps/EmbmsTestStreamingApp/Android.bp b/testapps/EmbmsTestStreamingApp/Android.bp
index 9f082ee..d2b8d46 100644
--- a/testapps/EmbmsTestStreamingApp/Android.bp
+++ b/testapps/EmbmsTestStreamingApp/Android.bp
@@ -1,10 +1,6 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
android_test {
diff --git a/testapps/GbaTestApp/Android.bp b/testapps/GbaTestApp/Android.bp
index b3c45dd..76e02a0 100644
--- a/testapps/GbaTestApp/Android.bp
+++ b/testapps/GbaTestApp/Android.bp
@@ -14,11 +14,7 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
android_test {
diff --git a/testapps/GbaTestApp/res/values-it/strings.xml b/testapps/GbaTestApp/res/values-it/strings.xml
index f290a5b..00409d3 100644
--- a/testapps/GbaTestApp/res/values-it/strings.xml
+++ b/testapps/GbaTestApp/res/values-it/strings.xml
@@ -21,7 +21,7 @@
<string name="request_force_bootstrapping" msgid="206043602616214325">"Forzare il bootstrapping?"</string>
<string name="request_org" msgid="8416693445448308975">"Codice organizzazione"</string>
<string name="request_security_protocol" msgid="1444164827561010482">"ID protocollo sicurezza UA"</string>
- <string name="request_tls_cipher_suite" msgid="6659854717595308404">"ID suite di crittografia TLS"</string>
+ <string name="request_tls_cipher_suite" msgid="6659854717595308404">"ID pacchetto crittografia TLS"</string>
<string name="response_success" msgid="2469204471244527663">"Autenticazione GBA riuscita?"</string>
<string name="response_fail_reason" msgid="3401426967253202496">"ID motivo errore"</string>
<string name="response_key" msgid="8839847772051686309">"Chiave GBA (CK + IK)"</string>
diff --git a/testapps/ImsTestService/Android.bp b/testapps/ImsTestService/Android.bp
index 7073749..a0bebce 100644
--- a/testapps/ImsTestService/Android.bp
+++ b/testapps/ImsTestService/Android.bp
@@ -1,10 +1,6 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
android_app {
diff --git a/testapps/SmsManagerTestApp/Android.bp b/testapps/SmsManagerTestApp/Android.bp
index 4d4afcb..52fea61 100644
--- a/testapps/SmsManagerTestApp/Android.bp
+++ b/testapps/SmsManagerTestApp/Android.bp
@@ -1,10 +1,6 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
android_app {
diff --git a/testapps/TelephonyManagerTestApp/Android.bp b/testapps/TelephonyManagerTestApp/Android.bp
index e95d62f..0ff917e 100644
--- a/testapps/TelephonyManagerTestApp/Android.bp
+++ b/testapps/TelephonyManagerTestApp/Android.bp
@@ -1,10 +1,6 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
android_test {
diff --git a/testapps/TelephonyRegistryTestApp/Android.bp b/testapps/TelephonyRegistryTestApp/Android.bp
index 2439461..991e85c 100644
--- a/testapps/TelephonyRegistryTestApp/Android.bp
+++ b/testapps/TelephonyRegistryTestApp/Android.bp
@@ -1,10 +1,6 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
android_test {
diff --git a/testapps/TestRcsApp/TestApp/Android.bp b/testapps/TestRcsApp/TestApp/Android.bp
index cda7d17..40254af 100644
--- a/testapps/TestRcsApp/TestApp/Android.bp
+++ b/testapps/TestRcsApp/TestApp/Android.bp
@@ -1,10 +1,6 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
android_app {
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/Android.bp b/testapps/TestRcsApp/aosp_test_rcsclient/Android.bp
index 215c692..34b0a12 100644
--- a/testapps/TestRcsApp/aosp_test_rcsclient/Android.bp
+++ b/testapps/TestRcsApp/aosp_test_rcsclient/Android.bp
@@ -1,22 +1,6 @@
-
-
package {
- default_applicable_licenses: [
- "packages_services_Telephony_testapps_TestRcsApp_aosp_test_rcsclient_license",
- ],
-}
-
-// Added automatically by a large-scale-change
-// See: http://go/android-license-faq
-license {
- name: "packages_services_Telephony_testapps_TestRcsApp_aosp_test_rcsclient_license",
- visibility: [":__subpackages__"],
- license_kinds: [
- "SPDX-license-identifier-Apache-2.0",
- ],
- license_text: [
- "LICENSE",
- ],
+ // See: http://go/android-license-faq
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
android_library {
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/LICENSE b/testapps/TestRcsApp/aosp_test_rcsclient/LICENSE
deleted file mode 100644
index b9b9d2a..0000000
--- a/testapps/TestRcsApp/aosp_test_rcsclient/LICENSE
+++ /dev/null
@@ -1,176 +0,0 @@
-Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/sip/SipUtils.java b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/sip/SipUtils.java
index 13fa53a..942588a 100644
--- a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/sip/SipUtils.java
+++ b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/sip/SipUtils.java
@@ -183,8 +183,8 @@
// Set a Security-Verify header if exist.
String securityVerify = configuration.getSecurityVerifyHeader();
if (!TextUtils.isEmpty(securityVerify)) {
- request.setHeader(
- sHeaderFactory.createHeader(SecurityVerifyHeader.NAME, securityVerify));
+ request.setHeaders(sHeaderFactory.createHeaders(SecurityVerifyHeader.NAME
+ + ":" + securityVerify.trim()));
}
// Add Route headers.
diff --git a/tests/Android.bp b/tests/Android.bp
index c180476..08cac05 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -16,11 +16,7 @@
package {
// See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "packages_services_Telephony_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["packages_services_Telephony_license"],
+ default_applicable_licenses: ["Android-Apache-2.0"],
}
android_test {
@@ -50,7 +46,8 @@
"telephony-common-testing",
"testng",
"truth-prebuilt",
- "testables",
+ "testables",
+ "platform-compat-test-rules",
],
test_suites: [
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
index 4188ee2..f616872 100644
--- a/tests/AndroidTest.xml
+++ b/tests/AndroidTest.xml
@@ -14,6 +14,9 @@
limitations under the License.
-->
<configuration description="Run Phone application tests.">
+ <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer">
+ <option name="force-root" value="true" />
+ </target_preparer>
<option name="test-suite-tag" value="apct" />
<option name="test-suite-tag" value="apct-instrumentation" />
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
@@ -26,5 +29,6 @@
<option name="package" value="com.android.phone.tests" />
<option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
<option name="hidden-api-checks" value="false"/>
+ <option name="test-filter-dir" value="/data/data/com.android.phone" />
</test>
</configuration>
diff --git a/tests/src/com/android/phone/ImsProvisioningControllerTest.java b/tests/src/com/android/phone/ImsProvisioningControllerTest.java
new file mode 100644
index 0000000..c26b6a0
--- /dev/null
+++ b/tests/src/com/android/phone/ImsProvisioningControllerTest.java
@@ -0,0 +1,1767 @@
+/*
+ * Copyright 2021 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.telephony.ims.ProvisioningManager.KEY_EAB_PROVISIONING_STATUS;
+import static android.telephony.ims.ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE;
+import static android.telephony.ims.ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS;
+import static android.telephony.ims.ProvisioningManager.KEY_VT_PROVISIONING_STATUS;
+import static android.telephony.ims.ProvisioningManager.PROVISIONING_VALUE_ENABLED;
+import static android.telephony.ims.feature.ImsFeature.FEATURE_MMTEL;
+import static android.telephony.ims.feature.ImsFeature.FEATURE_RCS;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_CALL_COMPOSER;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_SMS;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO;
+import static android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE;
+import static android.telephony.ims.feature.RcsFeature.RcsImsCapabilities.CAPABILITY_TYPE_OPTIONS_UCE;
+import static android.telephony.ims.feature.RcsFeature.RcsImsCapabilities.CAPABILITY_TYPE_PRESENCE_UCE;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_LTE;
+import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_NR;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.AsyncResult;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyRegistryManager;
+import android.telephony.ims.ProvisioningManager;
+import android.telephony.ims.aidl.IFeatureProvisioningCallback;
+import android.telephony.ims.aidl.IImsConfig;
+import android.telephony.ims.feature.MmTelFeature.MmTelCapabilities;
+import android.telephony.ims.feature.RcsFeature.RcsImsCapabilities;
+import android.telephony.ims.stub.ImsConfigImplBase;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.TestableLooper;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.ims.FeatureConnector;
+import com.android.ims.ImsConfig;
+import com.android.ims.ImsManager;
+import com.android.ims.RcsFeatureManager;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+/**
+ * Unit tests for ImsProvisioningContorller
+ */
+public class ImsProvisioningControllerTest {
+ private static final String TAG = "ImsProvisioningControllerTest";
+ private static final int[] MMTEL_CAPAS = new int[]{
+ CAPABILITY_TYPE_VOICE,
+ CAPABILITY_TYPE_VIDEO,
+ CAPABILITY_TYPE_UT,
+ CAPABILITY_TYPE_SMS,
+ CAPABILITY_TYPE_CALL_COMPOSER
+ };
+ private static final int MMTEL_CAPA_INVALID = 0;
+
+ private static final int RCS_CAPA_INVALID = RcsImsCapabilities.CAPABILITY_TYPE_NONE;
+
+ private static final int[] RADIO_TECHS = new int[]{
+ REGISTRATION_TECH_LTE,
+ REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM,
+ REGISTRATION_TECH_NR
+ };
+ private static final int RADIO_TECH_INVALID = ImsRegistrationImplBase.REGISTRATION_TECH_NONE;
+
+ @Mock
+ Context mContext;
+
+ @Mock
+ PhoneGlobals mPhone;
+ @Mock
+ CarrierConfigManager mCarrierConfigManager;
+ private PersistableBundle mPersistableBundle0;
+ private PersistableBundle mPersistableBundle1;
+ @Mock
+ SubscriptionManager mSubscriptionManager;
+ @Mock
+ TelephonyRegistryManager mTelephonyRegistryManager;
+ @Mock
+ ImsProvisioningLoader mImsProvisioningLoader;
+
+ @Mock
+ ImsManager mImsManager;
+ @Mock
+ ImsConfig mImsConfig;
+ @Mock
+ ImsProvisioningController.MmTelFeatureConnector mMmTelFeatureConnector;
+ @Mock
+ FeatureConnector<ImsManager> mMmTelFeatureConnector0;
+ @Mock
+ FeatureConnector<ImsManager> mMmTelFeatureConnector1;
+ @Captor
+ ArgumentCaptor<FeatureConnector.Listener<ImsManager>> mMmTelConnectorListener0;
+ @Captor
+ ArgumentCaptor<FeatureConnector.Listener<ImsManager>> mMmTelConnectorListener1;
+
+ @Mock
+ RcsFeatureManager mRcsFeatureManager;
+ @Mock
+ ImsProvisioningController.RcsFeatureConnector mRcsFeatureConnector;
+ @Mock
+ FeatureConnector<RcsFeatureManager> mRcsFeatureConnector0;
+ @Mock
+ FeatureConnector<RcsFeatureManager> mRcsFeatureConnector1;
+ @Captor
+ ArgumentCaptor<FeatureConnector.Listener<RcsFeatureManager>> mRcsConnectorListener0;
+ @Captor
+ ArgumentCaptor<FeatureConnector.Listener<RcsFeatureManager>> mRcsConnectorListener1;
+
+ @Mock
+ IFeatureProvisioningCallback mIFeatureProvisioningCallback0;
+ @Mock
+ IFeatureProvisioningCallback mIFeatureProvisioningCallback1;
+
+ @Mock
+ IBinder mIbinder0;
+ @Mock
+ IBinder mIbinder1;
+
+ private SubscriptionManager.OnSubscriptionsChangedListener mSubChangedListener;
+
+ private Handler mHandler;
+ private HandlerThread mHandlerThread;
+ private TestableLooper mLooper;
+
+ TestImsProvisioningController mTestImsProvisioningController;
+
+ int mPhoneId0 = 0;
+ int mPhoneId1 = 1;
+ int mSubId0 = 1234;
+ int mSubId1 = 5678;
+
+ SparseArray<int[]> mMmTelTechMap = new SparseArray<>();
+ SparseArray<int[]> mRcsTechMap = new SparseArray<>();
+
+ int[][] mMmTelProvisioningStorage;
+ int[][] mRcsProvisioningStorage;
+ int[][] mImsConfigStorage;
+
+ private class TestImsProvisioningController extends ImsProvisioningController {
+ boolean mIsValidSubId = true;
+
+ TestImsProvisioningController() {
+ super(mPhone, 2, mHandlerThread.getLooper(),
+ mMmTelFeatureConnector, mRcsFeatureConnector,
+ mImsProvisioningLoader);
+ }
+
+ protected int getSubId(int slotId) {
+ return (slotId == mPhoneId0) ? mSubId0 : mSubId1;
+ }
+
+ protected int getSlotId(int subId) {
+ return (subId == mSubId0) ? mPhoneId0 : mPhoneId1;
+ }
+
+ protected ImsConfig getImsConfig(ImsManager imsManager) {
+ return mImsConfig;
+ }
+
+ protected ImsConfig getImsConfig(IImsConfig iImsConfig) {
+ return mImsConfig;
+ }
+
+ protected int[] getTechsFromCarrierConfig(int subId, int capability, boolean isMmtel) {
+ if (isMmtel) {
+ return mMmTelTechMap.get(capability);
+ } else {
+ return mRcsTechMap.get(capability);
+ }
+ }
+
+ protected boolean isValidSubId(int subId) {
+ return mIsValidSubId;
+ }
+
+ public void setValidSubId(boolean valid) {
+ mIsValidSubId = valid;
+ }
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ logd("setUp");
+ MockitoAnnotations.initMocks(this);
+
+ when(mPhone.getSystemServiceName(eq(CarrierConfigManager.class)))
+ .thenReturn(Context.CARRIER_CONFIG_SERVICE);
+ when(mPhone.getSystemService(eq(Context.CARRIER_CONFIG_SERVICE)))
+ .thenReturn(mCarrierConfigManager);
+
+ mPersistableBundle0 = new PersistableBundle();
+ mPersistableBundle1 = new PersistableBundle();
+
+ when(mCarrierConfigManager.getConfigForSubId(eq(mSubId0)))
+ .thenReturn(mPersistableBundle0);
+ when(mCarrierConfigManager.getConfigForSubId(eq(mSubId1)))
+ .thenReturn(mPersistableBundle1);
+
+ when(mPhone.getSystemServiceName(eq(SubscriptionManager.class)))
+ .thenReturn(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ when(mPhone.getSystemService(eq(Context.TELEPHONY_SUBSCRIPTION_SERVICE)))
+ .thenReturn(mSubscriptionManager);
+
+
+ when(mPhone.getSystemServiceName(eq(TelephonyRegistryManager.class)))
+ .thenReturn(Context.TELEPHONY_REGISTRY_SERVICE);
+ when(mPhone.getSystemService(eq(Context.TELEPHONY_REGISTRY_SERVICE)))
+ .thenReturn(mTelephonyRegistryManager);
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ mSubChangedListener = (SubscriptionManager.OnSubscriptionsChangedListener)
+ invocation.getArguments()[0];
+ return null;
+ }
+ }).when(mTelephonyRegistryManager).addOnSubscriptionsChangedListener(
+ any(SubscriptionManager.OnSubscriptionsChangedListener.class),
+ any());
+
+ mHandlerThread = new HandlerThread("ImsStateCallbackControllerTest");
+ mHandlerThread.start();
+
+ initializeDefaultData();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ logd("tearDown");
+ if (mTestImsProvisioningController != null) {
+ mTestImsProvisioningController.destroy();
+ mTestImsProvisioningController = null;
+ }
+
+ if (mLooper != null) {
+ mLooper.destroy();
+ mLooper = null;
+ }
+ }
+
+ @Test
+ @SmallTest
+ public void addFeatureProvisioningChangedCallback_withCallback() throws Exception {
+ createImsProvisioningController();
+
+ // add callback with valid obj
+ try {
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ // add callback with invalid obj
+ try {
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(mSubId0, null);
+ } catch (IllegalArgumentException e) {
+ // expected result
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ // remove callback with valid obj
+ try {
+ mTestImsProvisioningController.removeFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ // remove callback with invalid obj
+ try {
+ mTestImsProvisioningController.removeFeatureProvisioningChangedCallback(mSubId0, null);
+ } catch (IllegalArgumentException e) {
+ // expected result
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ }
+
+ @Test
+ @SmallTest
+ public void connectionReady_MmTelFeatureListener() throws Exception {
+ createImsProvisioningController();
+
+ try {
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+
+ // change subId to be invalid
+ mTestImsProvisioningController.setValidSubId(false);
+
+ mMmTelConnectorListener0.getValue().connectionReady(mImsManager, mSubId0);
+
+ // setConfig not called, wait until subId is valid
+ verify(mImsConfig, times(0)).setConfig(anyInt(), anyInt());
+
+ // change subId
+ mSubChangedListener.onSubscriptionsChanged();
+ processAllMessages();
+
+ int[] keys = {
+ ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE,
+ ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS,
+ ProvisioningManager.KEY_VT_PROVISIONING_STATUS};
+
+ // verify # of read data times from storage : # of MmTel storage length
+ verify(mImsProvisioningLoader, atLeast(keys.length))
+ .getProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), anyInt(), anyInt());
+
+ for (int index = 0; index < keys.length; index++) {
+ // verify function call vendor interface
+ verify(mImsConfig, times(1)).setConfig(eq(keys[index]), anyInt());
+ }
+
+ // verify other interactions
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ }
+
+ @Test
+ @SmallTest
+ public void connectionReady_RcsFeatureListener() throws Exception {
+ createImsProvisioningController();
+
+ try {
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+
+ mRcsConnectorListener0.getValue().connectionReady(mRcsFeatureManager, mSubId0);
+ processAllMessages();
+
+ // verify # of read data times from storage : # of Rcs storage length
+ verify(mImsProvisioningLoader, times(1))
+ .getProvisioningStatus(eq(mSubId0), eq(FEATURE_RCS), anyInt(), anyInt());
+
+ int key = ProvisioningManager.KEY_EAB_PROVISIONING_STATUS;
+ // verify function call vendor interface
+ verify(mImsConfig, times(1)).setConfig(eq(key), anyInt());
+
+ // verify other interactions
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ }
+
+ @Test
+ @SmallTest
+ public void isImsProvisioningRequiredForCapability_withInvalidCapabilityTech()
+ throws Exception {
+ createImsProvisioningController();
+
+ // invalid Capa. and valid Radio tech - IllegalArgumentException OK
+ try {
+ mTestImsProvisioningController.isImsProvisioningRequiredForCapability(
+ mSubId0, MMTEL_CAPA_INVALID, RADIO_TECHS[0]);
+ } catch (IllegalArgumentException e) {
+ // expected result
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+
+ // valid Capa. and invalid Radio tech - IllegalArumentException OK
+ try {
+ mTestImsProvisioningController.isImsProvisioningRequiredForCapability(
+ mSubId0, MMTEL_CAPAS[0], RADIO_TECH_INVALID);
+ } catch (IllegalArgumentException e) {
+ // expected result
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ }
+
+ @Test
+ @SmallTest
+ public void isImsProvisioningRequiredForCapability_withValidCapabilityTech() throws Exception {
+ createImsProvisioningController();
+
+ // provisioning required capability
+ // voice, all tech
+ // video, all tech
+ // UT, all tech
+ mMmTelTechMap.clear();
+ mMmTelTechMap.put(CAPABILITY_TYPE_VOICE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelTechMap.put(CAPABILITY_TYPE_VIDEO,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelTechMap.put(CAPABILITY_TYPE_UT,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ boolean[][] expectedRequired = new boolean[][] {
+ {true, true, true, true},
+ {true, true, true, true},
+ {true, true, true, true},
+ {false, false, false, false},
+ {false, false, false, false}
+ };
+
+ boolean isRequired;
+ for (int i = 0; i < MMTEL_CAPAS.length; i++) {
+ for (int j = 0; j < RADIO_TECHS.length; j++) {
+ isRequired = mTestImsProvisioningController
+ .isImsProvisioningRequiredForCapability(
+ mSubId0, MMTEL_CAPAS[i], RADIO_TECHS[j]);
+ assertEquals(expectedRequired[i][j], isRequired);
+ }
+ }
+ }
+
+ @Test
+ @SmallTest
+ public void isRcsProvisioningRequiredForCapability_withInvalidCapabilityTech()
+ throws Exception {
+ createImsProvisioningController();
+
+ // invalid Capa. and valid Radio tech - IllegalArgumentException OK
+ try {
+ mTestImsProvisioningController.isRcsProvisioningRequiredForCapability(
+ mSubId0, RCS_CAPA_INVALID, RADIO_TECHS[0]);
+ } catch (IllegalArgumentException e) {
+ // expected result
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+
+ // valid Capa. and invalid Radio tech - IllegalArumentException OK
+ try {
+ mTestImsProvisioningController.isRcsProvisioningRequiredForCapability(
+ mSubId0, CAPABILITY_TYPE_PRESENCE_UCE, RADIO_TECH_INVALID);
+ } catch (IllegalArgumentException e) {
+ // expected result
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ }
+
+ @Test
+ @SmallTest
+ public void isRcsProvisioningRequiredForCapability_withValidCapabilityTech() throws Exception {
+ createImsProvisioningController();
+
+ // provisioning required capability : PRESENCE, tech : all
+ mRcsTechMap.clear();
+ mRcsTechMap.put(CAPABILITY_TYPE_PRESENCE_UCE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ boolean[] expectedRequired = new boolean[] {true, true, true, true};
+
+ boolean isRequired;
+ for (int i = 0; i < RADIO_TECHS.length; i++) {
+ isRequired = mTestImsProvisioningController
+ .isRcsProvisioningRequiredForCapability(
+ mSubId0, CAPABILITY_TYPE_PRESENCE_UCE, RADIO_TECHS[i]);
+ assertEquals(expectedRequired[i], isRequired);
+ }
+ }
+
+ @Test
+ @SmallTest
+ public void getImsProvisioningRequiredForCapability_withVoiceVideoUt() throws Exception {
+ createImsProvisioningController();
+
+ // provisioning required capability
+ // voice, all tech
+ // video, all tech
+ // UT, all tech
+ mMmTelTechMap.clear();
+ mMmTelTechMap.put(CAPABILITY_TYPE_VOICE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelTechMap.put(CAPABILITY_TYPE_VIDEO,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelTechMap.put(CAPABILITY_TYPE_UT,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ // provisioning Status
+ mMmTelProvisioningStorage = new int[][] {
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, 0},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_NR, 1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_LTE, 0},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_IWLAN, 0},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_NR, 1},
+ {CAPABILITY_TYPE_UT, REGISTRATION_TECH_LTE, 0},
+ {CAPABILITY_TYPE_UT, REGISTRATION_TECH_IWLAN, 0},
+ {CAPABILITY_TYPE_UT, REGISTRATION_TECH_CROSS_SIM, 0},
+ {CAPABILITY_TYPE_UT, REGISTRATION_TECH_NR, 0},
+ };
+
+ boolean[] expectedVoiceProvisioningStatus = new boolean[] {false, true, true, true};
+ boolean[] expectedVideoProvisioningStatus = new boolean[] {false, false, true, true};
+ boolean[] expectedUtProvisioningStatus = new boolean[] {false, false, false, false};
+
+ boolean provisioned = false;
+ int capability = CAPABILITY_TYPE_VOICE;
+ for (int i = 0; i < RADIO_TECHS.length; i++) {
+ // get provisioning status
+ provisioned = mTestImsProvisioningController
+ .getImsProvisioningStatusForCapability(mSubId0, capability, RADIO_TECHS[i]);
+
+ // verify return value
+ assertEquals(expectedVoiceProvisioningStatus[i], provisioned);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1))
+ .getProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability),
+ eq(RADIO_TECHS[i]));
+ }
+
+ capability = CAPABILITY_TYPE_VIDEO;
+ for (int i = 0; i < RADIO_TECHS.length; i++) {
+ // get provisioning status
+ provisioned = mTestImsProvisioningController
+ .getImsProvisioningStatusForCapability(mSubId0, capability, RADIO_TECHS[i]);
+
+ // verify return value
+ assertEquals(expectedVideoProvisioningStatus[i], provisioned);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1))
+ .getProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability),
+ eq(RADIO_TECHS[i]));
+ }
+
+ capability = CAPABILITY_TYPE_UT;
+ for (int i = 0; i < RADIO_TECHS.length; i++) {
+ // get provisioning status
+ provisioned = mTestImsProvisioningController
+ .getImsProvisioningStatusForCapability(mSubId0, capability, RADIO_TECHS[i]);
+
+ // verify return value
+ assertEquals(expectedUtProvisioningStatus[i], provisioned);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1))
+ .getProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability),
+ eq(RADIO_TECHS[i]));
+ }
+
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void getImsProvisioningRequiredForCapability_withNotSet() throws Exception {
+ createImsProvisioningController();
+
+ mMmTelConnectorListener0.getValue().connectionReady(mImsManager, mSubId0);
+ processAllMessages();
+
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // provisioning required capability
+ // voice, LTE, IWLAN
+ // video, LTE
+ mMmTelTechMap.clear();
+ mMmTelTechMap.put(CAPABILITY_TYPE_VOICE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN});
+ mMmTelTechMap.put(CAPABILITY_TYPE_VIDEO,
+ new int[] {REGISTRATION_TECH_LTE});
+
+ // provisioning StatusP, all of provisioning status is not provisioned
+ mMmTelProvisioningStorage = new int[][]{
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, -1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_IWLAN, -1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_LTE, -1}
+ };
+ // provisioning status in vendor ImsService
+ mImsConfigStorage = new int[][] {
+ {KEY_VOLTE_PROVISIONING_STATUS, 1},
+ {KEY_VT_PROVISIONING_STATUS, 0},
+ {KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE, 1},
+ };
+
+ boolean provisioned;
+
+ // for KEY_VOLTE_PROVISIONING_STATUS
+ int capability = CAPABILITY_TYPE_VOICE;
+ int tech = REGISTRATION_TECH_LTE;
+ provisioned = mTestImsProvisioningController
+ .getImsProvisioningStatusForCapability(mSubId0, capability, tech);
+
+ // verify return value default false - not provisioned
+ assertEquals(true, provisioned);
+
+ verify(mImsProvisioningLoader, times(1))
+ .getProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability), eq(tech));
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsConfig, times(1)).getConfigInt(eq(KEY_VOLTE_PROVISIONING_STATUS));
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1))
+ .setProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability), eq(tech),
+ eq(provisioned));
+
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // for KEY_VT_PROVISIONING_STATUS
+ capability = CAPABILITY_TYPE_VIDEO;
+ tech = REGISTRATION_TECH_LTE;
+ provisioned = mTestImsProvisioningController
+ .getImsProvisioningStatusForCapability(mSubId0, capability, tech);
+
+ // verify return value default false - not provisioned
+ assertEquals(false, provisioned);
+
+ verify(mImsProvisioningLoader, times(1))
+ .getProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability), eq(tech));
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsConfig, times(1)).getConfigInt(eq(KEY_VT_PROVISIONING_STATUS));
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1))
+ .setProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability), eq(tech),
+ eq(provisioned));
+
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void getRcsProvisioningRequiredForCapability_withPresence() throws Exception {
+ createImsProvisioningController();
+
+ // provisioning required capability
+ // PRESENCE, all tech
+ mRcsTechMap.clear();
+ mRcsTechMap.put(CAPABILITY_TYPE_PRESENCE_UCE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ // provisioning Status
+ mRcsProvisioningStorage = new int[][] {
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_LTE, 1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_NR, 1}
+ };
+
+ boolean[] expectedPresenceProvisioningStatus = new boolean[] {true, true, true, true};
+
+ boolean provisioned = false;
+ int capability = CAPABILITY_TYPE_PRESENCE_UCE;
+ for (int i = 0; i < RADIO_TECHS.length; i++) {
+ // get provisioning status
+ provisioned = mTestImsProvisioningController
+ .getRcsProvisioningStatusForCapability(mSubId0, capability, RADIO_TECHS[i]);
+
+ // verify return value
+ assertEquals(expectedPresenceProvisioningStatus[i], provisioned);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1)).getProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capability), eq(RADIO_TECHS[i]));
+ }
+
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void getRcsProvisioningRequiredForCapability_withNotSet() throws Exception {
+ createImsProvisioningController();
+
+ mRcsConnectorListener0.getValue().connectionReady(mRcsFeatureManager, mSubId0);
+ processAllMessages();
+
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // provisioning required capability
+ // PRESENCE, LTE, IWLAN
+ mRcsTechMap.clear();
+ mRcsTechMap.put(CAPABILITY_TYPE_PRESENCE_UCE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN});
+
+ // provisioning Status, all of provisioning status is not provisioned
+ mRcsProvisioningStorage = new int[][]{
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_LTE, -1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_IWLAN, -1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_CROSS_SIM, -1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_NR, -1}
+ };
+ // provisioning status in vendor ImsService
+ mImsConfigStorage = new int[][] {
+ {KEY_EAB_PROVISIONING_STATUS, 1}
+ };
+
+ boolean provisioned;
+
+ // for KEY_EAB_PROVISIONING_STATUS
+ int capability = CAPABILITY_TYPE_PRESENCE_UCE;
+ int tech = REGISTRATION_TECH_LTE;
+ provisioned = mTestImsProvisioningController
+ .getRcsProvisioningStatusForCapability(mSubId0, capability, tech);
+
+ // verify return value default false - not provisioned
+ assertEquals(true, provisioned);
+
+ verify(mImsProvisioningLoader, times(1)).getProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capability), eq(tech));
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsConfig, times(1)).getConfigInt(eq(KEY_EAB_PROVISIONING_STATUS));
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(RADIO_TECHS.length)).setProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capability), anyInt(), eq(provisioned));
+
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void setImsProvisioningRequiredForCapability_withVoice() throws Exception {
+ createImsProvisioningController();
+
+ mMmTelConnectorListener0.getValue().connectionReady(mImsManager, mSubId0);
+ processAllMessages();
+
+ // register callbacks
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // provisioning required capability
+ // voice, all tech
+ mMmTelTechMap.clear();
+ mMmTelTechMap.put(CAPABILITY_TYPE_VOICE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ // provisioning Status, all of provisioning status is not provisioned
+ mMmTelProvisioningStorage = new int[][] {
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, 0},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_IWLAN, 0},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_CROSS_SIM, 0},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_NR, 0}
+ };
+
+ boolean provisionedFirst = false;
+ boolean provisionedSecond = false;
+ int capability = CAPABILITY_TYPE_VOICE;
+ for (int i = 0; i < RADIO_TECHS.length; i++) {
+ // get provisioning status
+ provisionedFirst = mTestImsProvisioningController
+ .getImsProvisioningStatusForCapability(mSubId0, capability, RADIO_TECHS[i]);
+
+ // verify return value default false - not provisioned
+ assertEquals(false, provisionedFirst);
+
+ mTestImsProvisioningController.setImsProvisioningStatusForCapability(
+ mSubId0, capability, RADIO_TECHS[i], !provisionedFirst);
+ processAllMessages();
+
+ provisionedSecond = mTestImsProvisioningController
+ .getImsProvisioningStatusForCapability(mSubId0, capability, RADIO_TECHS[i]);
+
+ // verify return value default false - provisioned
+ assertEquals(!provisionedFirst, provisionedSecond);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(2))
+ .getProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability),
+ eq(RADIO_TECHS[i]));
+ verify(mImsProvisioningLoader, times(1))
+ .setProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability),
+ eq(RADIO_TECHS[i]), eq(provisionedSecond));
+
+ // verify weather Callback is called or not
+ verify(mIFeatureProvisioningCallback0, times(1))
+ .onFeatureProvisioningChanged(eq(capability), eq(RADIO_TECHS[i]),
+ eq(provisionedSecond));
+ }
+
+ // verify weather ImsConfig is called or not
+ verify(mImsConfig, times(1)).setConfig(
+ eq(KEY_VOLTE_PROVISIONING_STATUS), eq(PROVISIONING_VALUE_ENABLED));
+ verify(mImsConfig, times(1)).setConfig(
+ eq(KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE), eq(PROVISIONING_VALUE_ENABLED));
+
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void setImsProvisioningRequiredForCapability_withVideo() throws Exception {
+ createImsProvisioningController();
+
+ mMmTelConnectorListener0.getValue().connectionReady(mImsManager, mSubId0);
+ processAllMessages();
+
+ // register callbacks
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // provisioning required capability
+ // video, all tech
+ mMmTelTechMap.clear();
+ mMmTelTechMap.put(CAPABILITY_TYPE_VIDEO,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ // provisioning Status, all of provisioning status is not provisioned
+ mMmTelProvisioningStorage = new int[][] {
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_LTE, 0},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_IWLAN, 0},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_CROSS_SIM, 0},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_NR, 0}
+ };
+
+ boolean provisionedFirst = false;
+ boolean provisionedSecond = false;
+ int capability = CAPABILITY_TYPE_VIDEO;
+ for (int i = 0; i < RADIO_TECHS.length; i++) {
+ // get provisioning status
+ provisionedFirst = mTestImsProvisioningController
+ .getImsProvisioningStatusForCapability(mSubId0, capability, RADIO_TECHS[i]);
+
+ // verify return value default false - not provisioned
+ assertEquals(false, provisionedFirst);
+
+ mTestImsProvisioningController.setImsProvisioningStatusForCapability(
+ mSubId0, capability, RADIO_TECHS[i], !provisionedFirst);
+ processAllMessages();
+
+ provisionedSecond = mTestImsProvisioningController
+ .getImsProvisioningStatusForCapability(mSubId0, capability, RADIO_TECHS[i]);
+
+ // verify return value default false - provisioned
+ assertEquals(!provisionedFirst, provisionedSecond);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(2))
+ .getProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability),
+ eq(RADIO_TECHS[i]));
+ verify(mImsProvisioningLoader, times(1))
+ .setProvisioningStatus(eq(mSubId0), eq(FEATURE_MMTEL), eq(capability),
+ eq(RADIO_TECHS[i]), eq(provisionedSecond));
+
+ // verify weather Callback is called or not
+ verify(mIFeatureProvisioningCallback0, times(1))
+ .onFeatureProvisioningChanged(eq(capability), eq(RADIO_TECHS[i]),
+ eq(provisionedSecond));
+ }
+
+ // verify weather ImsConfig is called or not
+ verify(mImsConfig, times(1)).setConfig(
+ eq(KEY_VT_PROVISIONING_STATUS), eq(PROVISIONING_VALUE_ENABLED));
+
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void setRcsProvisioningRequiredForCapability_withPresence() throws Exception {
+ createImsProvisioningController();
+
+ mRcsConnectorListener0.getValue().connectionReady(mRcsFeatureManager, mSubId0);
+ processAllMessages();
+
+ // register callbacks
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // provisioning required capability
+ // PRESENCE, all tech
+ mRcsTechMap.clear();
+ mRcsTechMap.put(CAPABILITY_TYPE_PRESENCE_UCE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ // provisioning Status, all of provisioning status is not provisioned
+ mRcsProvisioningStorage = new int[][] {
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_LTE, 0},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_IWLAN, 0},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_CROSS_SIM, 0},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_NR, 0}
+ };
+
+ boolean provisionedFirst;
+ boolean provisionedSecond;
+ int capability = CAPABILITY_TYPE_PRESENCE_UCE;
+
+ // get provisioning status
+ provisionedFirst = mTestImsProvisioningController
+ .getRcsProvisioningStatusForCapability(mSubId0, capability, REGISTRATION_TECH_LTE);
+
+ // verify return value default false - not provisioned
+ assertEquals(false, provisionedFirst);
+
+ mTestImsProvisioningController.setRcsProvisioningStatusForCapability(
+ mSubId0, capability, REGISTRATION_TECH_LTE, !provisionedFirst);
+ processAllMessages();
+
+ provisionedSecond = mTestImsProvisioningController
+ .getRcsProvisioningStatusForCapability(mSubId0, capability, REGISTRATION_TECH_LTE);
+
+ // verify return value default false - provisioned
+ assertEquals(!provisionedFirst, provisionedSecond);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(2)).getProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capability), eq(REGISTRATION_TECH_LTE));
+ // verify setProvisioningStatus is called RADIO_TECHS.length times for all tech or not
+ verify(mImsProvisioningLoader, times(1)).setProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capability), anyInt(), eq(provisionedSecond));
+
+ // verify weather Callback is called RADIO_TECHS.length times for all tech or not
+ verify(mIFeatureProvisioningCallback0, times(1))
+ .onRcsFeatureProvisioningChanged(eq(capability), eq(REGISTRATION_TECH_LTE),
+ eq(provisionedSecond));
+
+ // verify weather ImsConfig is called or not
+ verify(mImsConfig, times(1)).setConfig(
+ eq(KEY_EAB_PROVISIONING_STATUS), eq(PROVISIONING_VALUE_ENABLED));
+
+ // verify reset
+ clearInvocations(mImsProvisioningLoader);
+
+ // only CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_LTE - provisioned
+ boolean[] expected = {true, false, false, false};
+ for (int i = 0; i < RADIO_TECHS.length; i++) {
+ provisionedSecond = mTestImsProvisioningController
+ .getRcsProvisioningStatusForCapability(mSubId0, capability, RADIO_TECHS[i]);
+
+ // verify return value
+ assertEquals(expected[i], provisionedSecond);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1)).getProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capability), eq(RADIO_TECHS[i]));
+ }
+
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void setProvisioningValue_withMmTelKey() throws Exception {
+ createImsProvisioningController();
+
+ mMmTelConnectorListener0.getValue().connectionReady(mImsManager, mSubId0);
+ processAllMessages();
+
+ // add callback with valid obj
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // provisioning required capability
+ // voice, all tech
+ // video, all tech
+ mMmTelTechMap.clear();
+ mMmTelTechMap.put(CAPABILITY_TYPE_VOICE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelTechMap.put(CAPABILITY_TYPE_VIDEO,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ // provisioning Status, all of provisioning status is not set
+ mMmTelProvisioningStorage = new int[][] {
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, -1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_IWLAN, -1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_CROSS_SIM, -1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_NR, -1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_LTE, -1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_IWLAN, -1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_CROSS_SIM, -1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_NR, -1}
+ };
+
+ // MmTel valid
+ int[] keys = {
+ ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS,
+ ProvisioningManager.KEY_VT_PROVISIONING_STATUS,
+ ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE
+ };
+ int[] capas = {
+ MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+ MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
+ MmTelCapabilities.CAPABILITY_TYPE_VOICE
+ };
+ int[] techs = {
+ ImsRegistrationImplBase.REGISTRATION_TECH_LTE,
+ ImsRegistrationImplBase.REGISTRATION_TECH_LTE,
+ ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN
+ };
+
+ int result;
+ for (int i = 0; i < keys.length; i++) {
+ clearInvocations(mIFeatureProvisioningCallback0);
+ result = mTestImsProvisioningController.setProvisioningValue(
+ mSubId0, keys[i], PROVISIONING_VALUE_ENABLED);
+ processAllMessages();
+
+ // check return value
+ assertEquals(ImsConfig.OperationStatusConstants.SUCCESS, result);
+
+ // check weather to save
+ verify(mImsProvisioningLoader, times(1)).setProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_MMTEL), eq(capas[i]), eq(techs[i]), eq(true));
+
+ verify(mIFeatureProvisioningCallback0, times(1))
+ .onFeatureProvisioningChanged(eq(capas[i]), eq(techs[i]), eq(true));
+
+ verify(mImsConfig, times(1)).setConfig(eq(keys[i]), eq(PROVISIONING_VALUE_ENABLED));
+ }
+
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void setProvisioningValue_withRcsKey() throws Exception {
+ createImsProvisioningController();
+
+ mRcsConnectorListener0.getValue().connectionReady(mRcsFeatureManager, mSubId0);
+ processAllMessages();
+
+ // add callback with valid obj
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // provisioning required capability
+ // presence, all tech
+ mRcsTechMap.clear();
+ mRcsTechMap.put(CAPABILITY_TYPE_PRESENCE_UCE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ // provisioning Status, all of provisioning status is not set
+ mRcsProvisioningStorage = new int[][]{
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_LTE, -1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_IWLAN, -1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_CROSS_SIM, -1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_NR, -1}
+ };
+
+ int key = KEY_EAB_PROVISIONING_STATUS;
+ int capa = CAPABILITY_TYPE_PRESENCE_UCE;
+
+ int result = mTestImsProvisioningController.setProvisioningValue(
+ mSubId0, key, PROVISIONING_VALUE_ENABLED);
+ processAllMessages();
+
+ // check return value
+ assertEquals(ImsConfig.OperationStatusConstants.SUCCESS, result);
+
+ // check weather to save, for all techs 4 times
+ verify(mImsProvisioningLoader, times(RADIO_TECHS.length)).setProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capa), anyInt(), eq(true));
+
+ verify(mIFeatureProvisioningCallback0, times(RADIO_TECHS.length))
+ .onRcsFeatureProvisioningChanged(eq(capa), anyInt(), eq(true));
+
+ verify(mImsConfig, times(1)).setConfig(eq(key), eq(PROVISIONING_VALUE_ENABLED));
+
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void setProvisioningValue_withInvalidKey() throws Exception {
+ createImsProvisioningController();
+
+ mMmTelConnectorListener0.getValue().connectionReady(mImsManager, mSubId0);
+ mRcsConnectorListener0.getValue().connectionReady(mRcsFeatureManager, mSubId0);
+ processAllMessages();
+
+ // add callback with valid obj
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // invalid key
+ int[] keys = {
+ ProvisioningManager.KEY_SIP_SESSION_TIMER_SEC,
+ ProvisioningManager.KEY_MINIMUM_SIP_SESSION_EXPIRATION_TIMER_SEC,
+ ProvisioningManager.KEY_TF_TIMER_VALUE_MS
+ };
+ for (int key : keys) {
+ int result = mTestImsProvisioningController.setProvisioningValue(
+ mSubId0, key, PROVISIONING_VALUE_ENABLED);
+ processAllMessages();
+
+ // check return value
+ assertEquals(ImsConfigImplBase.CONFIG_RESULT_UNKNOWN, result);
+ }
+
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void getProvisioningValue_withValidKey() throws Exception {
+ createImsProvisioningController();
+
+ mMmTelConnectorListener0.getValue().connectionReady(mImsManager, mSubId0);
+ mRcsConnectorListener0.getValue().connectionReady(mRcsFeatureManager, mSubId0);
+ processAllMessages();
+
+ // add callback with valid obj
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // provisioning required capability
+ // voice, LTE, IWLAN
+ // video, LTE
+ mMmTelTechMap.clear();
+ mMmTelTechMap.put(CAPABILITY_TYPE_VOICE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN});
+ mMmTelTechMap.put(CAPABILITY_TYPE_VIDEO,
+ new int[] {REGISTRATION_TECH_LTE});
+
+ // provisioning Status, all of provisioning status is not set
+ mMmTelProvisioningStorage = new int[][] {
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, 1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_LTE, 1}
+ };
+
+ // provisioning required capability
+ // presence, all tech
+ mRcsTechMap.clear();
+ mRcsTechMap.put(CAPABILITY_TYPE_PRESENCE_UCE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ // provisioning Status, all of provisioning status is not set
+ mRcsProvisioningStorage = new int[][]{
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_LTE, 1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_NR, 1}
+ };
+
+ // MmTel keys
+ int[] keys = {
+ KEY_VOLTE_PROVISIONING_STATUS,
+ KEY_VT_PROVISIONING_STATUS,
+ KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE,
+ };
+ int[] capas = {
+ CAPABILITY_TYPE_VOICE,
+ CAPABILITY_TYPE_VIDEO,
+ CAPABILITY_TYPE_VOICE
+ };
+ int[] techs = {
+ REGISTRATION_TECH_LTE,
+ REGISTRATION_TECH_LTE,
+ REGISTRATION_TECH_IWLAN
+ };
+ for (int i = 0; i < keys.length; i++) {
+ int result = mTestImsProvisioningController.getProvisioningValue(mSubId0, keys[i]);
+ processAllMessages();
+
+ // check return value
+ assertEquals(PROVISIONING_VALUE_ENABLED, result);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1)).getProvisioningStatus(eq(mSubId0),
+ eq(FEATURE_MMTEL), eq(capas[i]), eq(techs[i]));
+ }
+ clearInvocations(mImsProvisioningLoader);
+
+ // Rcs keys
+ int key = KEY_EAB_PROVISIONING_STATUS;
+ int capa = CAPABILITY_TYPE_PRESENCE_UCE;
+
+ int result = mTestImsProvisioningController.getProvisioningValue(mSubId0, key);
+ processAllMessages();
+
+ // check return value
+ assertEquals(PROVISIONING_VALUE_ENABLED, result);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1)).getProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capa), anyInt());
+
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void getProvisioningValue_withNotSet() throws Exception {
+ createImsProvisioningController();
+
+ mMmTelConnectorListener0.getValue().connectionReady(mImsManager, mSubId0);
+ mRcsConnectorListener0.getValue().connectionReady(mRcsFeatureManager, mSubId0);
+ processAllMessages();
+
+ // add callback with valid obj
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // provisioning required capability
+ // voice, LTE, IWLAN
+ // video, LTE
+ mMmTelTechMap.clear();
+ mMmTelTechMap.put(CAPABILITY_TYPE_VOICE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN});
+ mMmTelTechMap.put(CAPABILITY_TYPE_VIDEO,
+ new int[] {REGISTRATION_TECH_LTE});
+
+ // provisioning Status, all of provisioning status is not set
+ mMmTelProvisioningStorage = new int[][] {
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, -1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_IWLAN, -1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_LTE, -1}
+ };
+
+ // provisioning required capability
+ // presence, all tech
+ mRcsTechMap.clear();
+ mRcsTechMap.put(CAPABILITY_TYPE_PRESENCE_UCE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+
+ // provisioning Status, all of provisioning status is not set
+ mRcsProvisioningStorage = new int[][]{
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_LTE, -1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_IWLAN, -1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_CROSS_SIM, -1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_NR, -1}
+ };
+ // provisioning status in ImsService
+ mImsConfigStorage = new int[][] {
+ {KEY_VOLTE_PROVISIONING_STATUS, 1},
+ {KEY_VT_PROVISIONING_STATUS, 1},
+ {KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE, 1},
+ {KEY_EAB_PROVISIONING_STATUS, 1}
+ };
+
+ // MmTel keys
+ int[] keys = {
+ KEY_VOLTE_PROVISIONING_STATUS,
+ KEY_VT_PROVISIONING_STATUS,
+ KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE,
+ };
+ int[] capas = {
+ CAPABILITY_TYPE_VOICE,
+ CAPABILITY_TYPE_VIDEO,
+ CAPABILITY_TYPE_VOICE
+ };
+ int[] techs = {
+ REGISTRATION_TECH_LTE,
+ REGISTRATION_TECH_LTE,
+ REGISTRATION_TECH_IWLAN
+ };
+ for (int i = 0; i < keys.length; i++) {
+ int result = mTestImsProvisioningController.getProvisioningValue(mSubId0, keys[i]);
+ processAllMessages();
+
+ // check return value
+ assertEquals(PROVISIONING_VALUE_ENABLED, result);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1)).getProvisioningStatus(eq(mSubId0),
+ eq(FEATURE_MMTEL), eq(capas[i]), eq(techs[i]));
+
+ // verify weather ImsConfig is called or not
+ verify(mImsConfig, times(1)).getConfigInt(eq(keys[i]));
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1)).setProvisioningStatus(eq(mSubId0),
+ eq(FEATURE_MMTEL), eq(capas[i]), eq(techs[i]), eq(true));
+
+ // verify weather callback is called or not
+ verify(mIFeatureProvisioningCallback0, times(1)).onFeatureProvisioningChanged(
+ eq(capas[i]), eq(techs[i]), eq(true));
+ }
+ clearInvocations(mImsConfig);
+ clearInvocations(mImsProvisioningLoader);
+
+ // Rcs keys
+ int key = KEY_EAB_PROVISIONING_STATUS;
+ int capa = CAPABILITY_TYPE_PRESENCE_UCE;
+
+ int result = mTestImsProvisioningController.getProvisioningValue(mSubId0, key);
+ processAllMessages();
+
+ // check return value
+ assertEquals(PROVISIONING_VALUE_ENABLED, result);
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(1)).getProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capa), anyInt());
+
+ // verify weather ImsConfig is called or not
+ verify(mImsConfig, times(1)).getConfigInt(eq(key));
+
+ // verify weather ImsProvisioningLoader is called or not
+ verify(mImsProvisioningLoader, times(RADIO_TECHS.length)).setProvisioningStatus(
+ eq(mSubId0), eq(FEATURE_RCS), eq(capa), anyInt(), eq(true));
+
+ // verify weather callback is called or not
+ verify(mIFeatureProvisioningCallback0, times(RADIO_TECHS.length))
+ .onRcsFeatureProvisioningChanged(eq(capa), anyInt(), eq(true));
+
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback0);
+ verifyNoMoreInteractions(mIFeatureProvisioningCallback1);
+ verifyNoMoreInteractions(mImsConfig);
+ verifyNoMoreInteractions(mImsProvisioningLoader);
+ }
+
+ @Test
+ @SmallTest
+ public void onMultiSimConfigChanged() throws Exception {
+ createImsProvisioningController();
+
+ // change number of slot 2 -> 1
+ mHandler.sendMessage(mHandler.obtainMessage(
+ mTestImsProvisioningController.EVENT_MULTI_SIM_CONFIGURATION_CHANGE,
+ 0, 0, (Object) new AsyncResult(null, 1, null)));
+ processAllMessages();
+
+ // add callback with mSubId0, mPhoneId0 : Ok.
+ try {
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+
+ // add callbacks with new mSubId1, mPhoneId1 : IllegalArgumentException.
+ try {
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+ } catch (IllegalArgumentException e) {
+ // expected result
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ // check isImsProvisioningRequiredForCapability with mSubId1 : IllegalArgumentException
+ try {
+ mTestImsProvisioningController.isImsProvisioningRequiredForCapability(
+ mSubId1, CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE);
+ } catch (IllegalArgumentException e) {
+ // expected result
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+
+ // change number of slot 1 -> 2
+ mHandler.sendMessage(mHandler.obtainMessage(
+ mTestImsProvisioningController.EVENT_MULTI_SIM_CONFIGURATION_CHANGE,
+ 0, 0, (Object) new AsyncResult(null, 2, null)));
+ processAllMessages();
+
+ // add callback with mSubId0, mPhoneId0 : Ok.
+ try {
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId0, mIFeatureProvisioningCallback0);
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+
+ // add callbacks with new mSubId1, mPhoneId1 : Ok.
+ try {
+ mTestImsProvisioningController.addFeatureProvisioningChangedCallback(
+ mSubId1, mIFeatureProvisioningCallback1);
+ } catch (Exception e) {
+ throw new AssertionError("not expected exception", e);
+ }
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+
+ // check get,setImsProvisioningRequiredForCapability with mSubId1, mPhoneId1 : Ok
+ int capability = CAPABILITY_TYPE_VOICE;
+ int tech = REGISTRATION_TECH_LTE;
+ boolean provisioned;
+ provisioned = mTestImsProvisioningController.getImsProvisioningStatusForCapability(
+ mSubId1, capability, tech);
+ mTestImsProvisioningController.setImsProvisioningStatusForCapability(mSubId1,
+ capability, tech, !provisioned);
+ processAllMessages();
+
+ // verify weather Callback is called or not
+ verify(mIFeatureProvisioningCallback1, times(1))
+ .onFeatureProvisioningChanged(eq(capability), eq(tech), eq(!provisioned));
+
+ clearInvocations(mIFeatureProvisioningCallback0);
+ clearInvocations(mIFeatureProvisioningCallback1);
+ clearInvocations(mImsConfig);
+ }
+
+ private void createImsProvisioningController() throws Exception {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+
+ when(mMmTelFeatureConnector
+ .create(any(), eq(0), any(), mMmTelConnectorListener0.capture(), any()))
+ .thenReturn(mMmTelFeatureConnector0);
+ when(mMmTelFeatureConnector
+ .create(any(), eq(1), any(), mMmTelConnectorListener1.capture(), any()))
+ .thenReturn(mMmTelFeatureConnector1);
+
+ when(mRcsFeatureConnector
+ .create(any(), eq(0), mRcsConnectorListener0.capture(), any(), any()))
+ .thenReturn(mRcsFeatureConnector0);
+ when(mRcsFeatureConnector
+ .create(any(), eq(1), mRcsConnectorListener1.capture(), any(), any()))
+ .thenReturn(mRcsFeatureConnector1);
+
+ when(mImsConfig.getConfigInt(anyInt()))
+ .thenAnswer(invocation -> {
+ int i = (Integer) (invocation.getArguments()[0]);
+ return getImsConfigValue(i);
+ });
+ when(mImsConfig.setConfig(anyInt(), anyInt()))
+ .thenAnswer(invocation -> {
+ int i = (Integer) (invocation.getArguments()[0]);
+ int j = (Integer) (invocation.getArguments()[1]);
+ return setImsConfigValue(i, j);
+ });
+
+ when(mImsProvisioningLoader.getProvisioningStatus(anyInt(), eq(FEATURE_MMTEL), anyInt(),
+ anyInt()))
+ .thenAnswer(invocation -> {
+ int i = (Integer) (invocation.getArguments()[2]);
+ int j = (Integer) (invocation.getArguments()[3]);
+ return getProvisionedValue(i, j);
+ });
+ when(mImsProvisioningLoader.getProvisioningStatus(anyInt(), eq(FEATURE_RCS), anyInt(),
+ anyInt()))
+ .thenAnswer(invocation -> {
+ int i = (Integer) (invocation.getArguments()[2]);
+ int j = (Integer) (invocation.getArguments()[3]);
+ return getRcsProvisionedValue(i, j);
+ });
+ when(mImsProvisioningLoader
+ .setProvisioningStatus(anyInt(), eq(FEATURE_MMTEL), anyInt(), anyInt(),
+ anyBoolean()))
+ .thenAnswer(invocation -> {
+ int i = (Integer) (invocation.getArguments()[2]);
+ int j = (Integer) (invocation.getArguments()[3]);
+ int k = (Boolean) (invocation.getArguments()[4]) ? 1 : 0;
+ return setProvisionedValue(i, j, k);
+ });
+ when(mImsProvisioningLoader
+ .setProvisioningStatus(anyInt(), eq(FEATURE_RCS), anyInt(), anyInt(),
+ anyBoolean()))
+ .thenAnswer(invocation -> {
+ int i = (Integer) (invocation.getArguments()[2]);
+ int j = (Integer) (invocation.getArguments()[3]);
+ int k = (Boolean) (invocation.getArguments()[4]) ? 1 : 0;
+ return setRcsProvisionedValue(i, j, k);
+ });
+
+ when(mIFeatureProvisioningCallback0.asBinder()).thenReturn(mIbinder0);
+ when(mIFeatureProvisioningCallback1.asBinder()).thenReturn(mIbinder1);
+
+ doNothing().when(mIFeatureProvisioningCallback0)
+ .onFeatureProvisioningChanged(anyInt(), anyInt(), anyBoolean());
+ doNothing().when(mIFeatureProvisioningCallback0)
+ .onRcsFeatureProvisioningChanged(anyInt(), anyInt(), anyBoolean());
+ doNothing().when(mIFeatureProvisioningCallback1)
+ .onFeatureProvisioningChanged(anyInt(), anyInt(), anyBoolean());
+ doNothing().when(mIFeatureProvisioningCallback1)
+ .onRcsFeatureProvisioningChanged(anyInt(), anyInt(), anyBoolean());
+
+ mTestImsProvisioningController = new TestImsProvisioningController();
+
+ mHandler = mTestImsProvisioningController.getHandler();
+ try {
+ mLooper = new TestableLooper(mHandler.getLooper());
+ } catch (Exception e) {
+ logd("create looper from handler failed");
+ }
+
+ verify(mRcsFeatureConnector0, atLeastOnce()).connect();
+ verify(mMmTelFeatureConnector0, atLeastOnce()).connect();
+
+ verify(mRcsFeatureConnector1, atLeastOnce()).connect();
+ verify(mMmTelFeatureConnector1, atLeastOnce()).connect();
+ }
+
+ private void initializeDefaultData() throws Exception {
+ mMmTelTechMap.clear();
+ mMmTelTechMap.put(CAPABILITY_TYPE_VOICE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelTechMap.put(CAPABILITY_TYPE_VIDEO,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelTechMap.put(CAPABILITY_TYPE_UT,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelTechMap.put(CAPABILITY_TYPE_SMS,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelTechMap.put(CAPABILITY_TYPE_CALL_COMPOSER,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mMmTelProvisioningStorage = new int[][]{
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_LTE, 1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_VOICE, REGISTRATION_TECH_NR, 1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_LTE, 1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_VIDEO, REGISTRATION_TECH_NR, 1},
+ {CAPABILITY_TYPE_UT, REGISTRATION_TECH_LTE, 1},
+ {CAPABILITY_TYPE_UT, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_UT, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_UT, REGISTRATION_TECH_NR, 1},
+ {CAPABILITY_TYPE_SMS, REGISTRATION_TECH_LTE, 1},
+ {CAPABILITY_TYPE_SMS, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_SMS, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_SMS, REGISTRATION_TECH_NR, 1},
+ {CAPABILITY_TYPE_CALL_COMPOSER, REGISTRATION_TECH_LTE, 1},
+ {CAPABILITY_TYPE_CALL_COMPOSER, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_CALL_COMPOSER, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_CALL_COMPOSER, REGISTRATION_TECH_NR, 1}
+ };
+
+ mRcsTechMap.clear();
+ mRcsTechMap.put(CAPABILITY_TYPE_OPTIONS_UCE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mRcsTechMap.put(CAPABILITY_TYPE_PRESENCE_UCE,
+ new int[] {REGISTRATION_TECH_LTE, REGISTRATION_TECH_IWLAN,
+ REGISTRATION_TECH_CROSS_SIM, REGISTRATION_TECH_NR});
+ mRcsProvisioningStorage = new int[][]{
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_LTE, 1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_IWLAN, 1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_CROSS_SIM, 1},
+ {CAPABILITY_TYPE_PRESENCE_UCE, REGISTRATION_TECH_NR, 1}
+ };
+
+ mImsConfigStorage = new int[][] {
+ {KEY_VOLTE_PROVISIONING_STATUS, 1},
+ {KEY_VT_PROVISIONING_STATUS, 1},
+ {KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE, 1},
+ {KEY_EAB_PROVISIONING_STATUS, 1}
+ };
+ }
+
+ private int getProvisionedValue(int i, int j) {
+ for (int[] data : mMmTelProvisioningStorage) {
+ if (data[0] == i && data[1] == j) {
+ return data[2];
+ }
+ }
+ return 0;
+ }
+
+ private int getRcsProvisionedValue(int i, int j) {
+ for (int[] data : mRcsProvisioningStorage) {
+ if (data[0] == i && data[1] == j) {
+ return data[2];
+ }
+ }
+ return 0;
+ }
+
+ private boolean setProvisionedValue(int i, int j, int k) {
+ boolean retVal = false;
+ for (int[] data : mMmTelProvisioningStorage) {
+ if (data[0] == i && data[1] == j) {
+ if (data[2] != k) {
+ data[2] = k;
+ return true;
+ }
+ return false;
+ }
+ }
+ return retVal;
+ }
+
+ private boolean setRcsProvisionedValue(int i, int j, int k) {
+ boolean retVal = false;
+ for (int[] data : mRcsProvisioningStorage) {
+ if (data[0] == i && data[1] == j) {
+ if (data[2] != k) {
+ data[2] = k;
+ return true;
+ }
+ return false;
+ }
+ }
+ return retVal;
+ }
+
+ private int getImsConfigValue(int i) {
+ for (int[] data : mImsConfigStorage) {
+ if (data[0] == i) {
+ return data[1];
+ }
+ }
+ return -1;
+ }
+
+ private int setImsConfigValue(int i, int j) {
+ for (int[] data : mImsConfigStorage) {
+ if (data[0] == i) {
+ data[1] = j;
+ return ImsConfig.OperationStatusConstants.SUCCESS;
+ }
+ }
+ return ImsConfig.OperationStatusConstants.SUCCESS;
+ }
+
+ private void processAllMessages() {
+ while (!mLooper.getLooper().getQueue().isIdle()) {
+ mLooper.processAllMessages();
+ }
+ }
+
+ private static void logd(String str) {
+ Log.d(TAG, str);
+ }
+}
diff --git a/tests/src/com/android/phone/ImsProvisioningLoaderTest.java b/tests/src/com/android/phone/ImsProvisioningLoaderTest.java
new file mode 100644
index 0000000..61cab1d
--- /dev/null
+++ b/tests/src/com/android/phone/ImsProvisioningLoaderTest.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2021 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 junit.framework.Assert.assertEquals;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.PersistableBundle;
+import android.telephony.ims.feature.MmTelFeature;
+import android.telephony.ims.feature.RcsFeature;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Log;
+
+import androidx.test.InstrumentationRegistry;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * Unit Test for ImsProvisioningLoader.
+ */
+public class ImsProvisioningLoaderTest {
+ private static final String LOG_TAG = ImsProvisioningLoaderTest.class.getSimpleName();
+
+ private static final int IMS_FEATURE_MMTEL = ImsProvisioningLoader.IMS_FEATURE_MMTEL;
+ private static final int IMS_FEATURE_RCS = ImsProvisioningLoader.IMS_FEATURE_RCS;
+
+ private static final int TECH_LTE = ImsRegistrationImplBase.REGISTRATION_TECH_LTE;
+ private static final int TECH_IWLAN = ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN;
+ private static final int TECH_NEW = Integer.MAX_VALUE;
+
+ private static final int CAPA_VOICE = MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE;
+ private static final int CAPA_VIDEO = MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO;
+ private static final int CAPA_UT = MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT;
+ private static final int CAPA_PRESENCE =
+ RcsFeature.RcsImsCapabilities.CAPABILITY_TYPE_PRESENCE_UCE;
+ private static final int CAPA_NEW = Integer.MAX_VALUE;
+
+ private static final int STATUS_NOT_PROVISIONED = ImsProvisioningLoader.STATUS_NOT_PROVISIONED;
+ private static final int STATUS_PROVISIONED = ImsProvisioningLoader.STATUS_PROVISIONED;
+
+ private static final int SUB_ID_1 = 111111;
+ private static final int SUB_ID_2 = 222222;
+
+ @Mock
+ Context mContext;
+ @Mock
+ SharedPreferences mSharedPreferences;
+ private ImsProvisioningLoader mImsProvisioningLoader;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ doReturn(mSharedPreferences).when(mContext).getSharedPreferences(anyString(), anyInt());
+ doReturn(InstrumentationRegistry.getTargetContext().getFilesDir()).when(
+ mContext).getFilesDir();
+
+ mImsProvisioningLoader = new ImsProvisioningLoader(mContext);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ if (mImsProvisioningLoader != null) {
+ mImsProvisioningLoader.clear();
+ }
+ deleteXml(SUB_ID_1, mContext);
+ deleteXml(SUB_ID_2, mContext);
+ }
+
+ @Test
+ @SmallTest
+ public void testSetProvisioningStatus_ExistFeature() {
+ // Set MMTEL IWLAN VOICE to STATUS_PROVISIONED
+ String[] info =
+ new String[]{IMS_FEATURE_MMTEL + "," + TECH_IWLAN + "," + CAPA_VOICE + "," + getInt(
+ true)};
+ mImsProvisioningLoader.setProvisioningToXml(SUB_ID_1, new PersistableBundle(), info);
+
+ int curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_1, IMS_FEATURE_MMTEL,
+ CAPA_VOICE, TECH_IWLAN);
+ assertEquals(getXmlContents(SUB_ID_1), getInt(true), curValue);
+
+ // Change MMTEL IWLAN VOICE provisioning status
+ boolean saveResult = mImsProvisioningLoader.setProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_VOICE, TECH_IWLAN, false);
+ curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_VOICE, TECH_IWLAN);
+ assertEquals(getXmlContents(SUB_ID_1), true, saveResult);
+ assertEquals(getXmlContents(SUB_ID_1), getInt(false), curValue);
+
+ // If set to the same provisioning status, don't save it.
+ saveResult = mImsProvisioningLoader.setProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_VOICE, TECH_IWLAN, false);
+ curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_VOICE, TECH_IWLAN);
+ assertEquals(getXmlContents(SUB_ID_1), false, saveResult);
+ assertEquals(getXmlContents(SUB_ID_1), getInt(false), curValue);
+ }
+
+ @Test
+ @SmallTest
+ public void testSetProvisioningStatus_NewFeature() {
+ // Set new capability
+ // Return true as a result to setProvisioningStatus()
+ boolean saveResult = mImsProvisioningLoader.setProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_NEW, TECH_LTE, true);
+ int curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_NEW, TECH_LTE);
+ assertEquals(getXmlContents(SUB_ID_1), true, saveResult);
+ assertEquals(getXmlContents(SUB_ID_1), getInt(true), curValue);
+
+ // Set new tech
+ saveResult = mImsProvisioningLoader.setProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_VOICE, TECH_NEW, false);
+ curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_VOICE, TECH_NEW);
+ assertEquals(getXmlContents(SUB_ID_1), true, saveResult);
+ assertEquals(getXmlContents(SUB_ID_1), getInt(false), curValue);
+ }
+
+ @Test
+ @SmallTest
+ public void testSetProvisioningStatus_DifferentSim() {
+ // Check whether the provisioning status does not change even if SIM is changed
+ // Sub id 2, set provisioning status
+ boolean prevValue = getBooleanFromProvisioningStatus(SUB_ID_2,
+ IMS_FEATURE_RCS, CAPA_PRESENCE, TECH_IWLAN);
+ boolean saveResult = mImsProvisioningLoader.setProvisioningStatus(
+ SUB_ID_2, IMS_FEATURE_RCS, CAPA_PRESENCE, TECH_IWLAN, !prevValue);
+ int curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_2,
+ IMS_FEATURE_RCS, CAPA_PRESENCE, TECH_IWLAN);
+ assertEquals(getXmlContents(SUB_ID_2), true, saveResult);
+ assertEquals(getXmlContents(SUB_ID_2), getInt(!prevValue), curValue);
+
+ // Sub id 1, set other provisioned status
+ mImsProvisioningLoader.setProvisioningStatus(
+ SUB_ID_1, IMS_FEATURE_RCS, CAPA_PRESENCE, TECH_IWLAN, prevValue);
+
+ // Sub id 2, check the previous provisioning status isn't changed
+ curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_2,
+ IMS_FEATURE_RCS, CAPA_PRESENCE, TECH_IWLAN);
+ assertEquals(getXmlContents(SUB_ID_2), getInt(!prevValue), curValue);
+ }
+
+ @Test
+ @SmallTest
+ public void testGetProvisioningStatus_UtProvisioningStatusIsExistInPref() {
+ // Ut provisioning status exists in preference
+ doReturn(1).when(mSharedPreferences).getInt(anyString(), anyInt());
+ int curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_UT, TECH_LTE);
+ assertEquals(getXmlContents(SUB_ID_1), getInt(true), curValue);
+ }
+
+ @Test
+ @SmallTest
+ public void testGetProvisioningStatus_ExistXml() {
+ // Set MMTEL LTE VOICE to STATUS_PROVISIONED, MMTEL LTE VIDEO to STATUS_NOT_PROVISIONED
+ String[] info =
+ new String[]{IMS_FEATURE_MMTEL + "," + TECH_LTE + "," + CAPA_VOICE + "," + getInt(
+ true),
+ IMS_FEATURE_MMTEL + "," + TECH_LTE + "," + CAPA_VIDEO + "," + getInt(
+ false)};
+ mImsProvisioningLoader.setProvisioningToXml(SUB_ID_1, new PersistableBundle(), info);
+
+ int curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_VOICE, TECH_LTE);
+ assertEquals(getXmlContents(SUB_ID_1), getInt(true), curValue);
+
+ curValue = mImsProvisioningLoader.getProvisioningStatus(SUB_ID_1,
+ IMS_FEATURE_MMTEL, CAPA_VIDEO, TECH_LTE);
+ assertEquals(getXmlContents(SUB_ID_1), getInt(false), curValue);
+ }
+
+ private boolean getBooleanFromProvisioningStatus(int subId, int imsFeature, int capa,
+ int tech) {
+ // Return provisioning status to bool
+ return mImsProvisioningLoader.getProvisioningStatus(
+ subId, imsFeature, capa, tech) == STATUS_PROVISIONED ? true
+ : false;
+ }
+
+ private int getInt(boolean isProvisioned) {
+ return isProvisioned ? STATUS_PROVISIONED : STATUS_NOT_PROVISIONED;
+ }
+
+ private void deleteXml(int subId, Context context) {
+ String fileName = getFileName(subId);
+ File file = null;
+ try {
+ file = new File(context.getFilesDir(), fileName);
+ } catch (Exception e) {
+ logd(e.toString());
+ }
+ file.delete();
+ }
+
+ private String getXmlContents(int subId) {
+ String fileName = getFileName(subId);
+
+ File file = null;
+ FileInputStream inFile = null;
+ StringBuilder readString = new StringBuilder();
+ readString.append("file name " + fileName + "\n");
+ byte[] buffer = new byte[1024];
+ int n = 0;
+ try {
+ file = new File(mContext.getFilesDir(), fileName);
+ inFile = new FileInputStream(file);
+ while ((n = inFile.read(buffer)) != -1) {
+ readString.append(new String(buffer, 0, n));
+ }
+ inFile.close();
+ } catch (FileNotFoundException e) {
+ logd(e.toString());
+
+ } catch (IOException e) {
+ logd(e.toString());
+ }
+ return readString.toString();
+ }
+
+ private String getFileName(int subId) {
+ // Resulting name is imsprovisioningstatus_{subId}.xml
+ return "imsprovisioningstatus_" + subId + ".xml";
+ }
+
+ private static void logd(String contents) {
+ Log.d(LOG_TAG, contents);
+ }
+
+}
diff --git a/tests/src/com/android/phone/ImsStateCallbackControllerTest.java b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
new file mode 100644
index 0000000..e4cdc6e
--- /dev/null
+++ b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
@@ -0,0 +1,895 @@
+/*
+ * Copyright (C) 2021 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.telephony.ims.ImsStateCallback.REASON_IMS_SERVICE_DISCONNECTED;
+import static android.telephony.ims.ImsStateCallback.REASON_IMS_SERVICE_NOT_READY;
+import static android.telephony.ims.ImsStateCallback.REASON_NO_IMS_SERVICE_CONFIGURED;
+import static android.telephony.ims.ImsStateCallback.REASON_SUBSCRIPTION_INACTIVE;
+import static android.telephony.ims.feature.ImsFeature.FEATURE_MMTEL;
+import static android.telephony.ims.feature.ImsFeature.FEATURE_RCS;
+
+import static com.android.ims.FeatureConnector.UNAVAILABLE_REASON_DISCONNECTED;
+import static com.android.ims.FeatureConnector.UNAVAILABLE_REASON_IMS_UNSUPPORTED;
+import static com.android.ims.FeatureConnector.UNAVAILABLE_REASON_NOT_READY;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Looper;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyRegistryManager;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.TestableLooper;
+import android.util.Log;
+
+import com.android.ims.FeatureConnector;
+import com.android.ims.ImsManager;
+import com.android.ims.RcsFeatureManager;
+import com.android.internal.telephony.IImsStateCallback;
+import com.android.internal.telephony.ITelephony;
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.ims.ImsResolver;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import java.lang.reflect.Field;
+import java.util.concurrent.Executor;
+
+/**
+ * Unit tests for RcsProvisioningMonitor
+ */
+public class ImsStateCallbackControllerTest {
+ private static final String TAG = "ImsStateCallbackControllerTest";
+ private static final int FAKE_SUB_ID_BASE = 0x0FFFFFF0;
+
+ private static final int SLOT_0 = 0;
+ private static final int SLOT_1 = 1;
+
+ private static final int SLOT_0_SUB_ID = 1;
+ private static final int SLOT_1_SUB_ID = 2;
+ private static final int SLOT_2_SUB_ID = 3;
+
+ private ImsStateCallbackController mImsStateCallbackController;
+ private Handler mHandler;
+ private HandlerThread mHandlerThread;
+ private TestableLooper mLooper;
+ @Mock private SubscriptionManager mSubscriptionManager;
+ private SubscriptionManager.OnSubscriptionsChangedListener mSubChangedListener;
+ @Mock private TelephonyRegistryManager mTelephonyRegistryManager;
+ @Mock private ITelephony.Stub mITelephony;
+ @Mock private RcsFeatureManager mRcsFeatureManager;
+ @Mock private ImsManager mMmTelFeatureManager;
+ @Mock private ImsStateCallbackController.MmTelFeatureConnectorFactory mMmTelFeatureFactory;
+ @Mock private ImsStateCallbackController.RcsFeatureConnectorFactory mRcsFeatureFactory;
+ @Mock private FeatureConnector<ImsManager> mMmTelFeatureConnectorSlot0;
+ @Mock private FeatureConnector<ImsManager> mMmTelFeatureConnectorSlot1;
+ @Mock private FeatureConnector<RcsFeatureManager> mRcsFeatureConnectorSlot0;
+ @Mock private FeatureConnector<RcsFeatureManager> mRcsFeatureConnectorSlot1;
+ @Captor ArgumentCaptor<FeatureConnector.Listener<ImsManager>> mMmTelConnectorListenerSlot0;
+ @Captor ArgumentCaptor<FeatureConnector.Listener<ImsManager>> mMmTelConnectorListenerSlot1;
+ @Captor ArgumentCaptor<FeatureConnector.Listener<RcsFeatureManager>> mRcsConnectorListenerSlot0;
+ @Captor ArgumentCaptor<FeatureConnector.Listener<RcsFeatureManager>> mRcsConnectorListenerSlot1;
+ @Mock private PhoneGlobals mPhone;
+ @Mock ImsStateCallbackController.PhoneFactoryProxy mPhoneFactoryProxy;
+ @Mock Phone mPhoneSlot0;
+ @Mock Phone mPhoneSlot1;
+ @Mock private IBinder mBinder0;
+ @Mock private IBinder mBinder1;
+ @Mock private IBinder mBinder2;
+ @Mock private IBinder mBinder3;
+ @Mock private IImsStateCallback mCallback0;
+ @Mock private IImsStateCallback mCallback1;
+ @Mock private IImsStateCallback mCallback2;
+ @Mock private IImsStateCallback mCallback3;
+ @Mock private ImsResolver mImsResolver;
+
+ private Executor mExecutor = new Executor() {
+ @Override
+ public void execute(Runnable r) {
+ r.run();
+ }
+ };
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+
+ when(mPhone.getMainExecutor()).thenReturn(mExecutor);
+ when(mPhone.getSystemServiceName(eq(SubscriptionManager.class)))
+ .thenReturn(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ when(mPhone.getSystemService(eq(Context.TELEPHONY_SUBSCRIPTION_SERVICE)))
+ .thenReturn(mSubscriptionManager);
+ when(mPhone.getSystemServiceName(eq(TelephonyRegistryManager.class)))
+ .thenReturn(Context.TELEPHONY_REGISTRY_SERVICE);
+ when(mPhone.getSystemService(eq(Context.TELEPHONY_REGISTRY_SERVICE)))
+ .thenReturn(mTelephonyRegistryManager);
+ when(mPhoneFactoryProxy.getPhone(eq(0))).thenReturn(mPhoneSlot0);
+ when(mPhoneFactoryProxy.getPhone(eq(1))).thenReturn(mPhoneSlot1);
+ when(mPhoneSlot0.getSubId()).thenReturn(SLOT_0_SUB_ID);
+ when(mPhoneSlot1.getSubId()).thenReturn(SLOT_1_SUB_ID);
+
+ when(mCallback0.asBinder()).thenReturn(mBinder0);
+ when(mCallback1.asBinder()).thenReturn(mBinder1);
+ when(mCallback2.asBinder()).thenReturn(mBinder2);
+ when(mCallback3.asBinder()).thenReturn(mBinder3);
+
+ // slot 0
+ when(mImsResolver.isImsServiceConfiguredForFeature(eq(0), eq(FEATURE_MMTEL)))
+ .thenReturn(true);
+ when(mImsResolver.isImsServiceConfiguredForFeature(eq(0), eq(FEATURE_RCS)))
+ .thenReturn(true);
+
+ // slot 1
+ when(mImsResolver.isImsServiceConfiguredForFeature(eq(1), eq(FEATURE_MMTEL)))
+ .thenReturn(true);
+ when(mImsResolver.isImsServiceConfiguredForFeature(eq(1), eq(FEATURE_RCS)))
+ .thenReturn(true);
+
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ mSubChangedListener = (SubscriptionManager.OnSubscriptionsChangedListener)
+ invocation.getArguments()[0];
+ return null;
+ }
+ }).when(mTelephonyRegistryManager).addOnSubscriptionsChangedListener(
+ any(SubscriptionManager.OnSubscriptionsChangedListener.class),
+ any());
+
+ mHandlerThread = new HandlerThread("ImsStateCallbackControllerTest");
+ mHandlerThread.start();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ if (mImsStateCallbackController != null) {
+ mImsStateCallbackController.destroy();
+ mImsStateCallbackController = null;
+ }
+
+ if (mLooper != null) {
+ mLooper.destroy();
+ mLooper = null;
+ }
+ }
+
+ @Test
+ @SmallTest
+ public void testMmTelRegisterThenUnregisterCallback() throws Exception {
+ createController(1);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_MMTEL, mCallback0, "callback0");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ }
+
+ @Test
+ @SmallTest
+ public void testMmTelConnectionUnavailable() throws Exception {
+ createController(1);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_MMTEL, mCallback0, "callback0");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ mMmTelConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+
+ mMmTelConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_IMS_UNSUPPORTED);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ }
+
+ @Test
+ @SmallTest
+ public void testMmTelConnectionReady() throws Exception {
+ createController(1);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_MMTEL, mCallback0, "callback0");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback0, times(0)).onAvailable();
+
+ mMmTelConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
+ processAllMessages();
+ verify(mCallback0, atLeastOnce()).onAvailable();
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ }
+
+ @Test
+ @SmallTest
+ public void testMmTelIgnoreDuplicatedConsecutiveReason() throws Exception {
+ createController(1);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_MMTEL, mCallback0, "callback0");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ mMmTelConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_IMS_UNSUPPORTED);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+
+ mMmTelConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_IMS_UNSUPPORTED);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ }
+
+ @Test
+ @SmallTest
+ public void testRcsRegisterThenUnregisterCallback() throws Exception {
+ createController(1);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_RCS, mCallback0, "callback0");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ }
+
+ @Test
+ @SmallTest
+ public void testRcsConnectionUnavailable() throws Exception {
+ createController(1);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_RCS, mCallback0, "callback0");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ // TelephonyRcsService notifying active features
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_0, false, true);
+ processAllMessages();
+
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_IMS_UNSUPPORTED);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ }
+
+ @Test
+ @SmallTest
+ public void testRcsConnectionReady() throws Exception {
+ createController(1);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_RCS, mCallback0, "callback0");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ // TelephonyRcsService notifying active features
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_0, false, true);
+ processAllMessages();
+
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+
+ mRcsConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
+ processAllMessages();
+ verify(mCallback0, times(0)).onAvailable();
+
+ // RcsFeatureController notifying STATE_READY
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_0, true, true);
+ processAllMessages();
+ verify(mCallback0, times(1)).onAvailable();
+
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_DISCONNECTED);
+ processAllMessages();
+ verify(mCallback0, times(2)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(2)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+
+ // RcsFeatureController notifying STATE_READY
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_0, true, true);
+ processAllMessages();
+ verify(mCallback0, times(1)).onAvailable();
+
+ mRcsConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
+ processAllMessages();
+ verify(mCallback0, times(2)).onAvailable();
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ }
+
+ @Test
+ @SmallTest
+ public void testRcsHasNoActiveFeature() throws Exception {
+ createController(1);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_RCS, mCallback0, "callback0");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ // TelephonyRcsService notifying NO active feature
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_0, false, false);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(0)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+
+ mRcsConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
+ processAllMessages();
+ verify(mCallback0, times(0)).onAvailable();
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ }
+
+ @Test
+ @SmallTest
+ public void testRcsIgnoreDuplicatedConsecutiveReason() throws Exception {
+ createController(1);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_RCS, mCallback0, "callback0");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ // TelephonyRcsService notifying active features
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_0, false, true);
+ processAllMessages();
+
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ }
+
+ @Test
+ @SmallTest
+ public void testCallbackRemovedWhenSubInfoChanged() throws Exception {
+ createController(2);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_MMTEL, mCallback0, "callback0");
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_1_SUB_ID, FEATURE_RCS, mCallback1, "callback1");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback1));
+
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback1, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ makeFakeActiveSubIds(0);
+ mExecutor.execute(() -> mSubChangedListener.onSubscriptionsChanged());
+ processAllMessages();
+
+ verify(mCallback0, times(1)).onUnavailable(REASON_SUBSCRIPTION_INACTIVE);
+ verify(mCallback1, times(1)).onUnavailable(REASON_SUBSCRIPTION_INACTIVE);
+
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback1));
+ }
+
+ @Test
+ @SmallTest
+ public void testCarrierConfigurationChanged() throws Exception {
+ createController(2);
+
+ when(mImsResolver.isImsServiceConfiguredForFeature(eq(1), eq(FEATURE_MMTEL)))
+ .thenReturn(false);
+
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_MMTEL, mCallback0, "callback0");
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_1_SUB_ID, FEATURE_MMTEL, mCallback1, "callback1");
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_1_SUB_ID, FEATURE_RCS, mCallback2, "callback2");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback1));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback2));
+
+ // check initial reason
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback1, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback2, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ verify(mCallback0, times(0)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+ verify(mCallback1, times(0)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+ verify(mCallback2, times(0)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+
+ // ensure only one reason reported until now
+ verify(mCallback0, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(1)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+
+ // state change in RCS for slot 0
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+
+ // ensure there is no change, since callbacks are not interested RCS on slot 0
+ verify(mCallback0, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(1)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+
+ // carrier config changed, no MMTEL package for slot 1
+ mImsStateCallbackController.notifyCarrierConfigChanged(SLOT_1);
+ processAllMessages();
+
+ // only the callback for MMTEL of slot 1 received the reason
+ verify(mCallback0, times(0)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+ verify(mCallback1, times(1)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+ verify(mCallback2, times(0)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+
+ // ensure no other callbacks
+ verify(mCallback0, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+
+ mMmTelConnectorListenerSlot1.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ mMmTelConnectorListenerSlot1.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_DISCONNECTED);
+
+ // resons except REASON_NO_IMS_SERVICE_CONFIGURED are discared
+ verify(mCallback0, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+
+ // IMS package for MMTEL of slot 1 is added
+ when(mImsResolver.isImsServiceConfiguredForFeature(eq(1), eq(FEATURE_MMTEL)))
+ .thenReturn(true);
+ mImsStateCallbackController.notifyCarrierConfigChanged(SLOT_1);
+ processAllMessages();
+
+ // ensure the callback to MMTEL of slot 1 only received REASON_IMS_SERVICE_DISCONNECTED
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback1, times(2)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback2, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ // ensure no other reason repored
+ verify(mCallback0, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(3)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+
+ // carrier config changed, no MMTEL package for slot 1
+ when(mImsResolver.isImsServiceConfiguredForFeature(eq(1), eq(FEATURE_MMTEL)))
+ .thenReturn(false);
+ mImsStateCallbackController.notifyCarrierConfigChanged(SLOT_1);
+ mImsStateCallbackController.notifyCarrierConfigChanged(SLOT_1);
+ processAllMessages();
+ // only the callback for MMTEL of slot 1 received the reason
+ verify(mCallback0, times(0)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+ verify(mCallback1, times(2)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+ verify(mCallback2, times(0)).onUnavailable(REASON_NO_IMS_SERVICE_CONFIGURED);
+
+ // ensure no other reason repored
+ verify(mCallback0, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(4)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+
+ mMmTelConnectorListenerSlot1.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+
+ // resons except REASON_NO_IMS_SERVICE_CONFIGURED are discared
+ verify(mCallback0, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(4)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+
+ // IMS package for MMTEL of slot 1 is added
+ when(mImsResolver.isImsServiceConfiguredForFeature(eq(1), eq(FEATURE_MMTEL)))
+ .thenReturn(true);
+ mImsStateCallbackController.notifyCarrierConfigChanged(SLOT_1);
+ processAllMessages();
+
+ // ensure the callback to MMTEL of slot 1
+ // there is a pending reason UNAVAILABLE_REASON_NOT_READY
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback1, times(2)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback1, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback2, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ // ensure no other reason repored
+ verify(mCallback0, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(5)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback1));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback2));
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback1);
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback2);
+ processAllMessages();
+
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback1));
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback2));
+ }
+
+ @Test
+ @SmallTest
+ public void testMultiSubscriptions() throws Exception {
+ createController(2);
+
+ // registration
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_MMTEL, mCallback0, "callback0");
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_0_SUB_ID, FEATURE_RCS, mCallback1, "callback1");
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_1_SUB_ID, FEATURE_MMTEL, mCallback2, "callback2");
+ mImsStateCallbackController
+ .registerImsStateCallback(SLOT_1_SUB_ID, FEATURE_RCS, mCallback3, "callback3");
+ processAllMessages();
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback0));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback1));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback2));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback3));
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback1, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback2, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+ verify(mCallback3, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
+
+ // TelephonyRcsService notifying active features
+ // slot 0
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_0, false, true);
+ // slot 1
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_1, false, true);
+ processAllMessages();
+
+ verify(mCallback0, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(1)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+ verify(mCallback3, times(1)).onUnavailable(anyInt());
+
+ verify(mCallback0, times(0)).onAvailable();
+ verify(mCallback1, times(0)).onAvailable();
+ verify(mCallback2, times(0)).onAvailable();
+ verify(mCallback3, times(0)).onAvailable();
+
+ // connectionUnavailable
+ mMmTelConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(1)).onUnavailable(anyInt());
+ verify(mCallback1, times(1)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+ verify(mCallback3, times(1)).onUnavailable(anyInt());
+ verify(mCallback3, times(1)).onUnavailable(anyInt());
+
+ mRcsConnectorListenerSlot0.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(anyInt());
+ verify(mCallback3, times(1)).onUnavailable(anyInt());
+ verify(mCallback3, times(1)).onUnavailable(anyInt());
+
+ mMmTelConnectorListenerSlot1.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback2, times(2)).onUnavailable(anyInt());
+ verify(mCallback3, times(1)).onUnavailable(anyInt());
+ verify(mCallback3, times(1)).onUnavailable(anyInt());
+
+ mRcsConnectorListenerSlot1.getValue()
+ .connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
+ processAllMessages();
+ verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback2, times(2)).onUnavailable(anyInt());
+ verify(mCallback3, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
+ verify(mCallback3, times(2)).onUnavailable(anyInt());
+
+ // connectionReady
+ mMmTelConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
+ processAllMessages();
+ verify(mCallback0, times(1)).onAvailable();
+ verify(mCallback1, times(0)).onAvailable();
+ verify(mCallback2, times(0)).onAvailable();
+ verify(mCallback3, times(0)).onAvailable();
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(2)).onUnavailable(anyInt());
+ verify(mCallback3, times(2)).onUnavailable(anyInt());
+
+ mRcsConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
+ processAllMessages();
+ verify(mCallback0, times(1)).onAvailable();
+ verify(mCallback1, times(0)).onAvailable();
+ verify(mCallback2, times(0)).onAvailable();
+ verify(mCallback3, times(0)).onAvailable();
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(2)).onUnavailable(anyInt());
+ verify(mCallback3, times(2)).onUnavailable(anyInt());
+
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_0, true, true);
+ processAllMessages();
+ verify(mCallback0, times(1)).onAvailable();
+ verify(mCallback1, times(1)).onAvailable();
+ verify(mCallback2, times(0)).onAvailable();
+ verify(mCallback3, times(0)).onAvailable();
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(2)).onUnavailable(anyInt());
+ verify(mCallback3, times(2)).onUnavailable(anyInt());
+
+ mMmTelConnectorListenerSlot1.getValue().connectionReady(null, SLOT_0_SUB_ID);
+ processAllMessages();
+ verify(mCallback0, times(1)).onAvailable();
+ verify(mCallback1, times(1)).onAvailable();
+ verify(mCallback2, times(1)).onAvailable();
+ verify(mCallback3, times(0)).onAvailable();
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(2)).onUnavailable(anyInt());
+ verify(mCallback3, times(2)).onUnavailable(anyInt());
+
+ mRcsConnectorListenerSlot1.getValue().connectionReady(null, SLOT_0_SUB_ID);
+ processAllMessages();
+ verify(mCallback0, times(1)).onAvailable();
+ verify(mCallback1, times(1)).onAvailable();
+ verify(mCallback2, times(1)).onAvailable();
+ verify(mCallback3, times(0)).onAvailable();
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(2)).onUnavailable(anyInt());
+ verify(mCallback3, times(2)).onUnavailable(anyInt());
+
+ mImsStateCallbackController.notifyExternalRcsStateChanged(SLOT_1, true, true);
+ processAllMessages();
+ verify(mCallback0, times(1)).onAvailable();
+ verify(mCallback1, times(1)).onAvailable();
+ verify(mCallback2, times(1)).onAvailable();
+ verify(mCallback3, times(1)).onAvailable();
+ verify(mCallback0, times(2)).onUnavailable(anyInt());
+ verify(mCallback1, times(2)).onUnavailable(anyInt());
+ verify(mCallback2, times(2)).onUnavailable(anyInt());
+ verify(mCallback3, times(2)).onUnavailable(anyInt());
+
+ // unregistration
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback0);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback1));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback2));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback3));
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback1);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback1));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback2));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback3));
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback2);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback1));
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback2));
+ assertTrue(mImsStateCallbackController.isRegistered(mCallback3));
+
+ mImsStateCallbackController.unregisterImsStateCallback(mCallback3);
+ processAllMessages();
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback0));
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback1));
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback2));
+ assertFalse(mImsStateCallbackController.isRegistered(mCallback3));
+ }
+
+ @Test
+ @SmallTest
+ public void testSlotUpdates() throws Exception {
+ createController(1);
+
+ verify(mMmTelFeatureConnectorSlot0, times(1)).connect();
+ verify(mRcsFeatureConnectorSlot0, times(1)).connect();
+ verify(mMmTelFeatureConnectorSlot0, times(0)).disconnect();
+ verify(mRcsFeatureConnectorSlot0, times(0)).disconnect();
+
+ // Add a new slot.
+ mImsStateCallbackController.updateFeatureControllerSize(2);
+
+ // connect in slot 1
+ verify(mMmTelFeatureConnectorSlot1, times(1)).connect();
+ verify(mRcsFeatureConnectorSlot1, times(1)).connect();
+
+ // no change in slot 0
+ verify(mMmTelFeatureConnectorSlot0, times(1)).connect();
+ verify(mRcsFeatureConnectorSlot0, times(1)).connect();
+
+ // Remove a slot.
+ mImsStateCallbackController.updateFeatureControllerSize(1);
+
+ // destroy in slot 1
+ verify(mMmTelFeatureConnectorSlot1, times(1)).disconnect();
+ verify(mRcsFeatureConnectorSlot1, times(1)).disconnect();
+
+ // no change in slot 0
+ verify(mMmTelFeatureConnectorSlot0, times(0)).disconnect();
+ verify(mRcsFeatureConnectorSlot0, times(0)).disconnect();
+ }
+
+ private void createController(int slotCount) throws Exception {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ makeFakeActiveSubIds(slotCount);
+
+ when(mMmTelFeatureFactory
+ .create(any(), eq(0), any(), mMmTelConnectorListenerSlot0.capture(), any()))
+ .thenReturn(mMmTelFeatureConnectorSlot0);
+ when(mMmTelFeatureFactory
+ .create(any(), eq(1), any(), mMmTelConnectorListenerSlot1.capture(), any()))
+ .thenReturn(mMmTelFeatureConnectorSlot1);
+ when(mRcsFeatureFactory
+ .create(any(), eq(0), mRcsConnectorListenerSlot0.capture(), any(), any()))
+ .thenReturn(mRcsFeatureConnectorSlot0);
+ when(mRcsFeatureFactory
+ .create(any(), eq(1), mRcsConnectorListenerSlot1.capture(), any(), any()))
+ .thenReturn(mRcsFeatureConnectorSlot1);
+
+ mImsStateCallbackController =
+ new ImsStateCallbackController(mPhone, mHandlerThread.getLooper(),
+ slotCount, mMmTelFeatureFactory, mRcsFeatureFactory, mImsResolver);
+
+ replaceInstance(ImsStateCallbackController.class,
+ "mPhoneFactoryProxy", mImsStateCallbackController, mPhoneFactoryProxy);
+ mImsStateCallbackController.onSubChanged();
+
+ mHandler = mImsStateCallbackController.getHandler();
+ try {
+ mLooper = new TestableLooper(mHandler.getLooper());
+ } catch (Exception e) {
+ logd("Unable to create looper from handler.");
+ }
+
+ verify(mRcsFeatureConnectorSlot0, atLeastOnce()).connect();
+ verify(mMmTelFeatureConnectorSlot0, atLeastOnce()).connect();
+
+ if (slotCount == 1) {
+ verify(mRcsFeatureConnectorSlot1, times(0)).connect();
+ verify(mMmTelFeatureConnectorSlot1, times(0)).connect();
+ } else {
+ verify(mRcsFeatureConnectorSlot1, atLeastOnce()).connect();
+ verify(mMmTelFeatureConnectorSlot1, atLeastOnce()).connect();
+ }
+ }
+
+ private static void replaceInstance(final Class c,
+ final String instanceName, final Object obj, final Object newValue) throws Exception {
+ Field field = c.getDeclaredField(instanceName);
+ field.setAccessible(true);
+ field.set(obj, newValue);
+ }
+
+ private void makeFakeActiveSubIds(int count) {
+ final int[] subIds = new int[count];
+ for (int i = 0; i < count; i++) {
+ subIds[i] = FAKE_SUB_ID_BASE + i;
+ }
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(subIds);
+ }
+
+ private void processAllMessages() {
+ while (!mLooper.getLooper().getQueue().isIdle()) {
+ mLooper.processAllMessages();
+ }
+ }
+
+ private static void logd(String str) {
+ Log.d(TAG, str);
+ }
+}
diff --git a/tests/src/com/android/phone/RcsProvisioningMonitorTest.java b/tests/src/com/android/phone/RcsProvisioningMonitorTest.java
index 8873402..57f9f6b 100644
--- a/tests/src/com/android/phone/RcsProvisioningMonitorTest.java
+++ b/tests/src/com/android/phone/RcsProvisioningMonitorTest.java
@@ -152,6 +152,7 @@
private MockContentResolver mContentResolver = new MockContentResolver();
private SimInfoContentProvider mProvider;
private BroadcastReceiver mReceiver;
+ private static final int TEST_SUB_ID = 1;
@Mock
private Cursor mCursor;
@Mock
@@ -853,7 +854,7 @@
} catch (Exception e) {
logd("Unable to create looper from handler.");
}
- mConnectorListener.getValue().connectionReady(mFeatureManager);
+ mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
verify(mFeatureConnector, atLeastOnce()).connect();
}
diff --git a/tests/src/com/android/phone/ServiceStateProviderTest.java b/tests/src/com/android/phone/ServiceStateProviderTest.java
index cde584f..532b1c0 100644
--- a/tests/src/com/android/phone/ServiceStateProviderTest.java
+++ b/tests/src/com/android/phone/ServiceStateProviderTest.java
@@ -27,6 +27,8 @@
import static android.provider.Telephony.ServiceStateTable.getUriForSubscriptionId;
import static android.telephony.NetworkRegistrationInfo.REGISTRATION_STATE_HOME;
+import static com.android.phone.ServiceStateProvider.ENFORCE_LOCATION_PERMISSION_CHECK;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -42,6 +44,7 @@
import android.Manifest;
import android.app.AppOpsManager;
+import android.compat.testing.PlatformCompatChangeRule;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -62,10 +65,14 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import libcore.junit.util.compat.CoreCompatChangeRule;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -91,6 +98,9 @@
@Mock LocationManager mLocationManager;
@Mock PackageManager mPackageManager;
+ @Rule
+ public TestRule compatChangeRule = new PlatformCompatChangeRule();
+
// Exception used internally to verify if the Resolver#notifyChange has been called.
private class TestNotifierException extends RuntimeException {
TestNotifierException() {
@@ -170,6 +180,7 @@
// TODO(b/191995565): Turn this on when location access can be off
@Ignore
@SmallTest
+ @CoreCompatChangeRule.EnableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
public void testQueryServiceState_withNoSubId_withoutLocation() {
setLocationPermissions(false);
@@ -239,7 +250,19 @@
* public columns of ServiceStateTable.
*/
@Test
- public void query_publicColumns_targetS_noReadPrivilege_getPublicColumns() {
+ @CoreCompatChangeRule.EnableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
+ public void
+ query_publicColumns_enforceLocatoinEnabled_targetS_noReadPrivilege_getPublicColumns() {
+ setTargetSdkVersion(Build.VERSION_CODES.S);
+ setCanReadPrivilegedPhoneState(false);
+
+ verifyServiceStateWithPublicColumns(mTestServiceState, null /*projection*/);
+ }
+
+ @Test
+ @CoreCompatChangeRule.DisableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
+ public void
+ query_publicColumns_enforceLocationDisabled_targetS_noReadPrivilege_getPublicColumns() {
setTargetSdkVersion(Build.VERSION_CODES.S);
setCanReadPrivilegedPhoneState(false);
@@ -251,6 +274,7 @@
* non-public columns should throw IllegalArgumentException.
*/
@Test
+ @CoreCompatChangeRule.EnableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
public void query_hideColumn_targetS_noReadPrivilege_throwIllegalArgumentException() {
setTargetSdkVersion(Build.VERSION_CODES.S);
setCanReadPrivilegedPhoneState(false);
@@ -263,11 +287,30 @@
}
/**
- * Verify that apps target S+ with READ_PRIVILEGED_PHONE_STATE and location permissions should
- * be able to access all columns.
+ * Verify that with changeId ENFORCE_LOCATION_PERMISSION_CHECK enabled, apps target S+ with
+ * READ_PRIVILEGED_PHONE_STATE and location permissions should be able to access all columns.
*/
@Test
- public void query_allColumn_targetS_withReadPrivilegedAndLocation_getAllStateUnredacted() {
+ @CoreCompatChangeRule.EnableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
+ public void
+ query_allColumn_enforceLocationEnabled_targetS_withReadPrivilegedAndLocation_getUnredacted() {
+ setTargetSdkVersion(Build.VERSION_CODES.S);
+ setCanReadPrivilegedPhoneState(true);
+ setLocationPermissions(true);
+
+ verifyServiceStateForSubId(
+ getUriForSubscriptionId(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID),
+ mTestServiceState, true /*hasPermission*/);
+ }
+
+ /**
+ * Verify that with changeId ENFORCE_LOCATION_PERMISSION_CHECK disabled, apps target S+ with
+ * READ_PRIVILEGED_PHONE_STATE and location permissions should be able to access all columns.
+ */
+ @Test
+ @CoreCompatChangeRule.DisableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
+ public void
+ query_allColumn_enforceLocationDisabled_targetS_withReadPrivilegedAndLocation_getUnredacted() {
setTargetSdkVersion(Build.VERSION_CODES.S);
setCanReadPrivilegedPhoneState(true);
setLocationPermissions(true);
@@ -283,6 +326,7 @@
*/
// TODO(b/191995565): Turn this on once b/191995565 is integrated
@Ignore
+ @CoreCompatChangeRule.EnableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
public void query_locationColumn_targetS_withReadPrivilegeNoLocation_throwSecurityExecption() {
setTargetSdkVersion(Build.VERSION_CODES.S);
setCanReadPrivilegedPhoneState(true);
@@ -296,10 +340,12 @@
}
/**
- * Verify that apps target R- with location permissions should be able to access all columns.
+ * Verify that when changeId ENFORCE_LOCATION_PERMISSION_CHECK is enabled, apps target R- with
+ * location permissions should be able to access all columns.
*/
@Test
- public void query_allColumn_targetR_withLocation_getAllStateUnredacted() {
+ @CoreCompatChangeRule.EnableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
+ public void query_allColumn_enforceLoationEnabled_targetR_withLocation_getUnredacted() {
setTargetSdkVersion(Build.VERSION_CODES.R);
setLocationPermissions(true);
@@ -309,12 +355,28 @@
}
/**
- * Verify that apps target R- w/o location permissions should be able to access all columns but
- * with redacted ServiceState.
+ * Verify that when changeId ENFORCE_LOCATION_PERMISSION_CHECK is disabled, apps target R- with
+ * location permissions should be able to access all columns.
+ */
+ @Test
+ @CoreCompatChangeRule.DisableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
+ public void query_allColumn_enforceLocationDisabled_targetR_withLocation_getUnredacted() {
+ setTargetSdkVersion(Build.VERSION_CODES.R);
+ setLocationPermissions(true);
+
+ verifyServiceStateForSubId(
+ getUriForSubscriptionId(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID),
+ mTestServiceState, true /*hasPermission*/);
+ }
+
+ /**
+ * Verify that changeId ENFORCE_LOCATION_PERMISSION_CHECK is enabled, apps target R- w/o
+ * location permissions should be able to access all columns but with redacted ServiceState.
*/
// TODO(b/191995565): Turn case on when location access can be off
@Ignore
- public void query_allColumn_targetR_noLocation_getRedacted() {
+ @CoreCompatChangeRule.EnableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
+ public void query_allColumn_enforceLocationEnabled_targetR_noLocation_getRedacted() {
setTargetSdkVersion(Build.VERSION_CODES.R);
setLocationPermissions(false);
@@ -324,6 +386,22 @@
true /*hasPermission*/);
}
+ /**
+ * Verify that changeId ENFORCE_LOCATION_PERMISSION_CHECK is disabled, apps target R- w/o
+ * location permissions should be able to access all columns and with unredacted ServiceState.
+ */
+ // TODO(b/191995565): Turn case on when location access can be off
+ @Ignore
+ @CoreCompatChangeRule.DisableCompatChanges({ENFORCE_LOCATION_PERMISSION_CHECK})
+ public void query_allColumn_enforceLocationDisabled_targetR_noLocation_getUnredacted() {
+ setTargetSdkVersion(Build.VERSION_CODES.R);
+ setLocationPermissions(false);
+
+ verifyServiceStateForSubId(
+ getUriForSubscriptionId(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID),
+ mTestServiceState, true /*hasPermission*/);
+ }
+
private void verifyServiceStateWithLocationColumns(ServiceState ss, String[] projection) {
try (Cursor cursor = mContentResolver.query(ServiceStateTable.CONTENT_URI, projection, null,
null)) {
@@ -335,7 +413,6 @@
try (Cursor cursor = mContentResolver.query(ServiceStateTable.CONTENT_URI, projection, null,
null)) {
assertNotNull(cursor);
- assertEquals(cursor.getColumnCount(), ServiceStateProvider.PUBLIC_COLUMNS.length);
cursor.moveToFirst();
assertEquals(ss.getVoiceRegState(),
diff --git a/tests/src/com/android/phone/SimPhonebookProviderTest.java b/tests/src/com/android/phone/SimPhonebookProviderTest.java
index 29a653d..d8518f8 100644
--- a/tests/src/com/android/phone/SimPhonebookProviderTest.java
+++ b/tests/src/com/android/phone/SimPhonebookProviderTest.java
@@ -28,6 +28,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
@@ -180,16 +181,16 @@
public void query_entityFiles_multiSim_returnsCursorWithRowForEachSimEf() {
setupSimsWithSubscriptionIds(2, 3, 7);
- mIccPhoneBook.setRecordsSize(2, IccConstants.EF_ADN, 10, 25);
- mIccPhoneBook.setRecordsSize(2, IccConstants.EF_FDN, 5, 20);
- mIccPhoneBook.setRecordsSize(2, IccConstants.EF_SDN, 15, 20);
- mIccPhoneBook.setRecordsSize(3, IccConstants.EF_ADN, 100, 30);
+ mIccPhoneBook.setupEfWithSizes(2, IccConstants.EF_ADN, 10, 25);
+ mIccPhoneBook.setupEfWithSizes(2, IccConstants.EF_FDN, 5, 20);
+ mIccPhoneBook.setupEfWithSizes(2, IccConstants.EF_SDN, 15, 20);
+ mIccPhoneBook.setupEfWithSizes(3, IccConstants.EF_ADN, 100, 30);
// These Will be omitted from results because zero size indicates the EF is not supported.
- mIccPhoneBook.setRecordsSize(3, IccConstants.EF_FDN, 0, 0);
- mIccPhoneBook.setRecordsSize(3, IccConstants.EF_SDN, 0, 0);
- mIccPhoneBook.setRecordsSize(7, IccConstants.EF_ADN, 0, 0);
- mIccPhoneBook.setRecordsSize(7, IccConstants.EF_FDN, 0, 0);
- mIccPhoneBook.setRecordsSize(7, IccConstants.EF_SDN, 0, 0);
+ mIccPhoneBook.setupEfWithSizes(3, IccConstants.EF_FDN, 0, 0);
+ mIccPhoneBook.setupEfWithSizes(3, IccConstants.EF_SDN, 0, 0);
+ mIccPhoneBook.setupEfWithSizes(7, IccConstants.EF_ADN, 0, 0);
+ mIccPhoneBook.setupEfWithSizes(7, IccConstants.EF_FDN, 0, 0);
+ mIccPhoneBook.setupEfWithSizes(7, IccConstants.EF_SDN, 0, 0);
String[] projection = {
ElementaryFiles.SLOT_INDEX, ElementaryFiles.SUBSCRIPTION_ID,
@@ -211,15 +212,44 @@
public void query_entityFiles_simWithZeroSizes_returnsEmptyCursor() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 0, 0);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_FDN, 0, 0);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_SDN, 0, 0);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 0, 0);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_FDN, 0, 0);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_SDN, 0, 0);
try (Cursor cursor = mResolver.query(ElementaryFiles.CONTENT_URI, null, null, null)) {
assertThat(cursor).hasCount(0);
}
}
+ /**
+ * USIM cards support more than 255 records by having multiple files for one EF type but
+ * IIccPhoneBook.getAdnRecordsSizeForSubscriber returns the size for a single file and so is
+ * inaccurate for such SIMs.
+ *
+ * <p>See b/201385523#comment4 and b/201685690
+ */
+ @Test
+ public void query_entityFiles_adnRecordCountExceedsSize_returnsAdnRecordCountAsMaxRecords() {
+ setupSimsWithSubscriptionIds(1);
+
+ // There are 400 records returned by getAdnRecordsInEfForSubscriber but the count returned
+ // by getAdnRecordsSizeForSubscriber is only 200.
+ AdnRecord[] records = mIccPhoneBook.createEmptyRecords(IccConstants.EF_ADN, 400);
+ mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 200, 20);
+ mIccPhoneBook.setRecords(1, IccConstants.EF_ADN, records);
+
+ String[] projection = {
+ ElementaryFiles.SUBSCRIPTION_ID, ElementaryFiles.EF_TYPE,
+ ElementaryFiles.MAX_RECORDS
+ };
+ try (Cursor cursor = mResolver.query(
+ ElementaryFiles.CONTENT_URI, projection, null, null)) {
+ assertThat(cursor).hasCount(1);
+ assertThat(cursor)
+ .atRow(0).hasRowValues(1, ElementaryFiles.EF_ADN, 400);
+ }
+ }
+
@Test
public void query_entityFilesItem_nullProjection_returnsCursorWithCorrectProjection() {
setupSimsWithSubscriptionIds(1);
@@ -548,7 +578,7 @@
@Test
public void query_adnRecords_zeroSizeEf_throwsCorrectException() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 0, 0);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 0, 0);
IllegalArgumentException e = assertThrows(IllegalArgumentException.class,
() -> mResolver.query(SimRecords.getContentUri(1, EF_ADN), null, null, null));
@@ -617,9 +647,9 @@
@Test
public void query_itemUriEmptyRecord_returnsEmptyCursor() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 30);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_FDN, 1, 30);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_SDN, 1, 30);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 30);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_FDN, 1, 30);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_SDN, 1, 30);
try (Cursor adnItem = mResolver.query(SimRecords.getItemUri(1, ElementaryFiles.EF_ADN, 1),
null, null, null);
@@ -637,9 +667,9 @@
@Test
public void query_itemUriIndexExceedsMax_returnsEmptyCursor() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 30);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_FDN, 1, 30);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_SDN, 1, 30);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 30);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_FDN, 1, 30);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_SDN, 1, 30);
try (Cursor adnItem = mResolver.query(SimRecords.getItemUri(1, ElementaryFiles.EF_ADN, 2),
null, null, null);
@@ -740,7 +770,7 @@
@Test
public void insert_efFull_throwsCorrectException() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 30);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 30);
mIccPhoneBook.addRecord(1, IccConstants.EF_ADN, "Existing", "8005550101");
ContentValues values = new ContentValues();
@@ -842,7 +872,7 @@
@Test
public void insert_phoneNumberOmitted_throwsCorrectException() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 25);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 25);
ContentValues values = new ContentValues();
values.put(SimRecords.NAME, "Name");
@@ -855,7 +885,7 @@
@Test
public void insert_nameTooLong_throwsCorrectException() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 25);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 25);
ContentValues values = new ContentValues();
// Name is limited to 11 characters when the max record size is 25
@@ -878,7 +908,7 @@
@Test
public void insert_phoneNumberTooLong_throwsCorrectException() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 25);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 25);
ContentValues values = new ContentValues();
values.put(SimRecords.NAME, "Name");
@@ -894,7 +924,7 @@
@Test
public void insert_numberWithInvalidCharacters_throwsCorrectException() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 32);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 32);
ContentValues values = new ContentValues();
values.put(SimRecords.NAME, "Name");
@@ -914,7 +944,7 @@
@Test
public void insert_unsupportedColumn_throwsCorrectException() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 25);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 25);
ContentValues values = new ContentValues();
values.put(SimRecords.NAME, "Name");
@@ -1006,7 +1036,7 @@
@Test
public void update_indexExceedingMax_returnsZero() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 30);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 30);
ContentValues values = new ContentValues();
values.put(SimRecords.NAME, "name");
@@ -1045,7 +1075,7 @@
public void delete_indexExceedingMax_returnsZero() {
setupSimsWithSubscriptionIds(1);
mIccPhoneBook.makeAllEfsSupported(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 30);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 30);
int result = mResolver.delete(SimRecords.getItemUri(1, ElementaryFiles.EF_ADN, 2), null);
@@ -1066,7 +1096,7 @@
@Test
public void update_nameOrNumberTooLong_throwsCorrectException() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 25);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 25);
mIccPhoneBook.addRecord(1, IccConstants.EF_ADN, "Initial", "8005550101");
ContentValues values = new ContentValues();
@@ -1096,7 +1126,7 @@
@Test
public void update_numberWithInvalidCharacters_throwsCorrectException() {
setupSimsWithSubscriptionIds(1);
- mIccPhoneBook.setRecordsSize(1, IccConstants.EF_ADN, 1, 32);
+ mIccPhoneBook.setupEfWithSizes(1, IccConstants.EF_ADN, 1, 32);
mIccPhoneBook.addRecord(1, IccConstants.EF_ADN, "Initial", "8005550101");
ContentValues values = new ContentValues();
@@ -1189,6 +1219,10 @@
public void subscriptionsChange_callsNotifyChange() {
// Clear invocations that happened in setUp
Mockito.reset(mMockSubscriptionManager);
+ // Stubbing this prevents the spied instance from calling the listener when it is added
+ // which may cause flakiness.
+ doNothing().when(mMockSubscriptionManager)
+ .addOnSubscriptionsChangedListener(any(), any());
setupSimsWithSubscriptionIds(1);
mIccPhoneBook.makeAllEfsSupported(1);
SimPhonebookProvider.ContentNotifier mockNotifier = mock(
@@ -1200,9 +1234,20 @@
mResolver, mMockSubscriptionManager, mIccPhoneBook, mockNotifier);
verify(mMockSubscriptionManager).addOnSubscriptionsChangedListener(
any(), listenerCaptor.capture());
+
+ // Fake the initial call that is made by SubscriptionManager when a listener is registered
+ // with addOnSubscriptionsChangedListener
listenerCaptor.getValue().onSubscriptionsChanged();
+
+ // First subscription change
setupSimsWithSubscriptionIds(1, 2);
listenerCaptor.getValue().onSubscriptionsChanged();
+
+ // Second subscription change
+ setupSimsWithSubscriptionIds(1);
+ listenerCaptor.getValue().onSubscriptionsChanged();
+
+ // Listener is called but subscriptions didn't change so this won't notify
listenerCaptor.getValue().onSubscriptionsChanged();
verify(mockNotifier, times(2)).notifyChange(eq(SimPhonebookContract.AUTHORITY_URI));
@@ -1308,7 +1353,7 @@
// The key for both maps is the (subscription ID, efid)
private Map<Pair<Integer, Integer>, AdnRecord[]> mRecords = new HashMap<>();
// The value is the single record size
- private Map<Pair<Integer, Integer>, Integer> mRecordSizes = new HashMap<>();
+ private Map<Pair<Integer, Integer>, int[]> mRecordSizes = new HashMap<>();
private int mDefaultSubscriptionId = 101;
@@ -1316,7 +1361,7 @@
// Assume that if records are being added then the test wants it to be a valid
// elementary file so set sizes as well.
if (!mRecordSizes.containsKey(key)) {
- setRecordsSize(key.first, key.second,
+ setupEfWithSizes(key.first, key.second,
Math.max(record.getRecId(), DEFAULT_RECORDS_COUNT), DEFAULT_RECORD_SIZE);
}
mRecords.get(key)[record.getRecId() - 1] = record;
@@ -1386,18 +1431,33 @@
* subscription IDs.
*/
public void makeAllEfsSupported(int subscriptionId) {
- setRecordsSize(subscriptionId, IccConstants.EF_ADN, DEFAULT_RECORDS_COUNT,
+ setupEfWithSizes(subscriptionId, IccConstants.EF_ADN, DEFAULT_RECORDS_COUNT,
DEFAULT_RECORD_SIZE);
- setRecordsSize(subscriptionId, IccConstants.EF_FDN, DEFAULT_RECORDS_COUNT,
+ setupEfWithSizes(subscriptionId, IccConstants.EF_FDN, DEFAULT_RECORDS_COUNT,
DEFAULT_RECORD_SIZE);
- setRecordsSize(subscriptionId, IccConstants.EF_SDN, DEFAULT_RECORDS_COUNT,
+ setupEfWithSizes(subscriptionId, IccConstants.EF_SDN, DEFAULT_RECORDS_COUNT,
DEFAULT_RECORD_SIZE);
}
+ public void setRecords(int subscriptionId, int efid, AdnRecord[] records) {
+ mRecords.put(Pair.create(subscriptionId, efid), records);
+ }
+
public void setRecordsSize(int subscriptionId, int efid, int maxRecordCount,
int maxRecordSize) {
+ setRecordsSize(Pair.create(subscriptionId, efid), maxRecordCount, maxRecordSize);
+ }
+
+ private void setRecordsSize(Pair<Integer, Integer> key, int maxRecordCount,
+ int maxRecordSize) {
+ int[] sizes = { maxRecordSize, maxRecordSize * maxRecordCount, maxRecordCount };
+ mRecordSizes.put(key, sizes);
+ }
+
+ public void setupEfWithSizes(int subscriptionId, int efid, int maxRecordCount,
+ int maxRecordSize) {
Pair<Integer, Integer> key = Pair.create(subscriptionId, efid);
- mRecordSizes.put(key, maxRecordSize);
+ setRecordsSize(key, maxRecordCount, maxRecordSize);
AdnRecord[] records = mRecords.computeIfAbsent(key, unused ->
createEmptyRecords(efid, maxRecordCount));
if (records.length < maxRecordCount) {
@@ -1405,7 +1465,7 @@
}
}
- private AdnRecord[] createEmptyRecords(int efid, int count) {
+ AdnRecord[] createEmptyRecords(int efid, int count) {
AdnRecord[] records = new AdnRecord[count];
for (int i = 0; i < records.length; i++) {
if (records[i] == null) {
@@ -1483,12 +1543,11 @@
@Override
public int[] getAdnRecordsSizeForSubscriber(int subId, int efid) {
Pair<Integer, Integer> key = Pair.create(subId, efid);
- Integer recordSize = mRecordSizes.get(key);
- if (recordSize == null) {
+ int[] recordsSize = mRecordSizes.get(key);
+ if (recordsSize == null) {
return new int[]{0, 0, 0};
}
- int count = mRecords.get(key).length;
- return new int[]{recordSize, recordSize * count, count};
+ return recordsSize;
}
@Override
diff --git a/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java b/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java
index 25b5339..ffbe5ce 100644
--- a/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java
+++ b/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java
@@ -16,6 +16,8 @@
package com.android.services.telephony.rcs;
+import static com.android.services.telephony.rcs.DelegateStateTracker.SUPPORT_REGISTERING_DELEGATE_STATE;
+
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -24,7 +26,9 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import android.app.compat.CompatChanges;
import android.net.InetAddresses;
+import android.os.Binder;
import android.telephony.ims.DelegateRegistrationState;
import android.telephony.ims.FeatureTagState;
import android.telephony.ims.SipDelegateConfiguration;
@@ -33,8 +37,8 @@
import android.telephony.ims.aidl.ISipDelegateConnectionStateCallback;
import android.util.ArraySet;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
import com.android.TelephonyTestBase;
import com.android.internal.telephony.metrics.RcsStats;
@@ -77,8 +81,8 @@
@SmallTest
@Test
public void testDelegateCreated() throws Exception {
- DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback,
- mSipDelegate, mRcsStats);
+ DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID,
+ Binder.getCallingUid(), mAppCallback, mSipDelegate, mRcsStats);
Set<FeatureTagState> deniedTags = getMmTelDeniedTag();
Set<String> supportedTags = getSupportedTags();
stateTracker.sipDelegateConnected(supportedTags, deniedTags);
@@ -114,8 +118,8 @@
@SmallTest
@Test
public void testDelegateDestroyed() throws Exception {
- DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback,
- mSipDelegate, mRcsStats);
+ DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID,
+ Binder.getCallingUid(), mAppCallback, mSipDelegate, mRcsStats);
Set<FeatureTagState> deniedTags = getMmTelDeniedTag();
Set<String> supportedTags = getSupportedTags();
stateTracker.sipDelegateConnected(supportedTags, deniedTags);
@@ -139,39 +143,75 @@
@SmallTest
@Test
public void testDelegateChangingRegisteredTagsOverride() throws Exception {
- DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback,
- mSipDelegate, mRcsStats);
+ DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID,
+ Binder.getCallingUid(), mAppCallback, mSipDelegate, mRcsStats);
Set<FeatureTagState> deniedTags = getMmTelDeniedTag();
Set<String> supportedTags = getSupportedTags();
+ Set<String> registeringTags = getRegisteringTag();
stateTracker.sipDelegateConnected(supportedTags, deniedTags);
+
// SipDelegate created
verify(mAppCallback).onCreated(mSipDelegate);
+
DelegateRegistrationState regState = new DelegateRegistrationState.Builder()
.addRegisteredFeatureTag(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG)
+ .addRegisteringFeatureTags(registeringTags)
.addDeregisteringFeatureTag(ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG,
DelegateRegistrationState.DEREGISTERING_REASON_PROVISIONING_CHANGE)
.addDeregisteredFeatureTag(ImsSignallingUtils.GROUP_CHAT_TAG,
DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED)
.build();
+
stateTracker.onRegistrationStateChanged(regState);
// Simulate underlying SipDelegate switch
stateTracker.sipDelegateChanging(
DelegateRegistrationState.DEREGISTERING_REASON_FEATURE_TAGS_CHANGING);
// onFeatureTagStatusChanged should now be called with registered features overridden with
// DEREGISTERING_REASON_FEATURE_TAGS_CHANGING
- DelegateRegistrationState overrideRegState = new DelegateRegistrationState.Builder()
+ DelegateRegistrationState.Builder overrideBuilder =
+ new DelegateRegistrationState.Builder()
.addDeregisteringFeatureTag(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG,
DelegateRegistrationState.DEREGISTERING_REASON_FEATURE_TAGS_CHANGING)
// Already Deregistering/Deregistered tags should not be overridden.
.addDeregisteringFeatureTag(ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG,
DelegateRegistrationState.DEREGISTERING_REASON_PROVISIONING_CHANGE)
.addDeregisteredFeatureTag(ImsSignallingUtils.GROUP_CHAT_TAG,
- DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED)
- .build();
+ DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED);
+ if (CompatChanges.isChangeEnabled(SUPPORT_REGISTERING_DELEGATE_STATE,
+ Binder.getCallingUid())) {
+ for (String tag : registeringTags) {
+ overrideBuilder.addDeregisteringFeatureTag(tag,
+ DelegateRegistrationState.DEREGISTERING_REASON_FEATURE_TAGS_CHANGING);
+ }
+ } else {
+ for (String tag : registeringTags) {
+ overrideBuilder.addDeregisteredFeatureTag(tag,
+ DelegateRegistrationState.DEREGISTERED_REASON_NOT_REGISTERED);
+ }
+ }
+
+ DelegateRegistrationState overrideRegState = overrideBuilder.build();
+
// new underlying SipDelegate created
stateTracker.sipDelegateConnected(supportedTags, deniedTags);
stateTracker.onRegistrationStateChanged(regState);
+ DelegateRegistrationState.Builder builder = new DelegateRegistrationState.Builder()
+ .addRegisteredFeatureTag(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG)
+ .addDeregisteringFeatureTag(ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG,
+ DelegateRegistrationState.DEREGISTERING_REASON_PROVISIONING_CHANGE)
+ .addDeregisteredFeatureTag(ImsSignallingUtils.GROUP_CHAT_TAG,
+ DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED);
+ if (CompatChanges.isChangeEnabled(SUPPORT_REGISTERING_DELEGATE_STATE,
+ Binder.getCallingUid())) {
+ builder.addRegisteringFeatureTags(registeringTags);
+ } else {
+ for (String tag : registeringTags) {
+ builder.addDeregisteredFeatureTag(tag,
+ DelegateRegistrationState.DEREGISTERED_REASON_NOT_REGISTERED);
+ }
+ }
+ DelegateRegistrationState regStateResult = builder.build();
// Verify registration state through the process:
ArgumentCaptor<DelegateRegistrationState> regCaptor =
ArgumentCaptor.forClass(DelegateRegistrationState.class);
@@ -179,11 +219,11 @@
regCaptor.capture(), eq(new ArrayList<>(deniedTags)));
List<DelegateRegistrationState> testStates = regCaptor.getAllValues();
// feature tags should first be registered
- assertEquals(regState, testStates.get(0));
+ assertEquals(regStateResult, testStates.get(0));
// registered feature tags should have moved to deregistering
assertEquals(overrideRegState, testStates.get(1));
// and then moved back to registered after underlying FT change done.
- assertEquals(regState, testStates.get(2));
+ assertEquals(regStateResult, testStates.get(2));
//onCreate should only have been called once and onDestroy should have never been called.
verify(mAppCallback).onCreated(mSipDelegate);
@@ -191,14 +231,108 @@
}
/**
+ * When registration states are changed in a case that an application doesn't support the new
+ * 'registering' state the 'registering' state will be moved to the 'registered' state
+ * as the old behavior.
+ *
+ * This method tests the case where the application doesn't support consuming the
+ * DEREGISTERING_REASON_LOSING_PDN reason.
+ */
+ @Test
+ public void testDelegateChangingRegisteredTagsRegisteringDisable() throws Exception {
+ DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID,
+ Binder.getCallingUid(), mAppCallback, mSipDelegate, mRcsStats);
+ stateTracker.setCompatChangesFactory((changeId, uid) -> false);
+ Set<FeatureTagState> deniedTags = getMmTelDeniedTag();
+ Set<String> supportedTags = getSupportedTags();
+ Set<String> registeringTags = getRegisteringTag();
+ stateTracker.sipDelegateConnected(supportedTags, deniedTags);
+ // SipDelegate created
+ verify(mAppCallback).onCreated(mSipDelegate);
+ DelegateRegistrationState regState = new DelegateRegistrationState.Builder()
+ .addRegisteredFeatureTag(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG)
+ .addRegisteringFeatureTags(registeringTags)
+ .addDeregisteringFeatureTag(ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG,
+ DelegateRegistrationState.DEREGISTERING_REASON_LOSING_PDN)
+ .addDeregisteredFeatureTag(ImsSignallingUtils.GROUP_CHAT_TAG,
+ DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED)
+ .build();
+ stateTracker.onRegistrationStateChanged(regState);
+
+ DelegateRegistrationState.Builder builder = new DelegateRegistrationState.Builder()
+ .addRegisteredFeatureTag(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG)
+ .addDeregisteringFeatureTag(ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG,
+ DelegateRegistrationState.DEREGISTERING_REASON_PDN_CHANGE)
+ .addDeregisteredFeatureTag(ImsSignallingUtils.GROUP_CHAT_TAG,
+ DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED);
+ for (String tag : registeringTags) {
+ builder.addDeregisteredFeatureTag(tag,
+ DelegateRegistrationState.DEREGISTERED_REASON_NOT_REGISTERED);
+ }
+ DelegateRegistrationState overrideRegState = builder.build();
+
+
+ // Verify registration state through the process:
+ ArgumentCaptor<DelegateRegistrationState> regCaptor =
+ ArgumentCaptor.forClass(DelegateRegistrationState.class);
+ verify(mAppCallback, times(1)).onFeatureTagStatusChanged(
+ regCaptor.capture(), eq(new ArrayList<>(deniedTags)));
+ List<DelegateRegistrationState> testStates = regCaptor.getAllValues();
+
+ assertEquals(overrideRegState, testStates.get(0));
+ verify(mAppCallback).onCreated(mSipDelegate);
+ }
+
+ /**
+ * When registration states are changed in a case that an application supports the new
+ * 'registering' state the state will be kept.
+ *
+ * This method tests the case where the application supports consuming the
+ * DEREGISTERING_REASON_LOSING_PDN reason.
+ */
+ @Test
+ public void testDelegateChangingRegisteredTagsRegisteringEnable() throws Exception {
+ DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID,
+ Binder.getCallingUid(), mAppCallback, mSipDelegate, mRcsStats);
+ stateTracker.setCompatChangesFactory((changeId, uid) -> true);
+ Set<FeatureTagState> deniedTags = getMmTelDeniedTag();
+ Set<String> supportedTags = getSupportedTags();
+ Set<String> registeringTags = getRegisteringTag();
+ stateTracker.sipDelegateConnected(supportedTags, deniedTags);
+ // SipDelegate created
+ verify(mAppCallback).onCreated(mSipDelegate);
+
+ DelegateRegistrationState regState = new DelegateRegistrationState.Builder()
+ .addRegisteredFeatureTag(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG)
+ .addRegisteringFeatureTags(registeringTags)
+ .addDeregisteringFeatureTag(ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG,
+ DelegateRegistrationState.DEREGISTERING_REASON_LOSING_PDN)
+ .addDeregisteredFeatureTag(ImsSignallingUtils.GROUP_CHAT_TAG,
+ DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED)
+ .build();
+ stateTracker.onRegistrationStateChanged(regState);
+
+ // Verify registration state through the process:
+ ArgumentCaptor<DelegateRegistrationState> regCaptor =
+ ArgumentCaptor.forClass(DelegateRegistrationState.class);
+ verify(mAppCallback, times(1)).onFeatureTagStatusChanged(
+ regCaptor.capture(), eq(new ArrayList<>(deniedTags)));
+ List<DelegateRegistrationState> testStates = regCaptor.getAllValues();
+
+ assertEquals(regState, testStates.get(0));
+ verify(mAppCallback).onCreated(mSipDelegate);
+ }
+
+
+ /**
* Test the case that when the underlying Denied tags change in the SipDelegate, the change is
* properly shown in the registration update event.
*/
@SmallTest
@Test
public void testDelegateChangingDeniedTagsChanged() throws Exception {
- DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback,
- mSipDelegate, mRcsStats);
+ DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID,
+ Binder.getCallingUid(), mAppCallback, mSipDelegate, mRcsStats);
Set<FeatureTagState> deniedTags = getMmTelDeniedTag();
Set<String> supportedTags = getSupportedTags();
stateTracker.sipDelegateConnected(supportedTags, deniedTags);
@@ -255,8 +389,8 @@
@SmallTest
@Test
public void testDelegateChangingDeniedTagsChangingToDestroy() throws Exception {
- DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback,
- mSipDelegate, mRcsStats);
+ DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID,
+ Binder.getCallingUid(), mAppCallback, mSipDelegate, mRcsStats);
Set<FeatureTagState> deniedTags = getMmTelDeniedTag();
Set<String> supportedTags = getSupportedTags();
stateTracker.sipDelegateConnected(supportedTags, deniedTags);
@@ -316,4 +450,11 @@
supportedTags.add(ImsSignallingUtils.GROUP_CHAT_TAG);
return supportedTags;
}
+
+ private Set<String> getRegisteringTag() {
+ Set<String> registeringTags = new ArraySet<>();
+ registeringTags.add(ImsSignallingUtils.CHATBOT_COMMUNICATION_USING_SESSION_TAG);
+ return registeringTags;
+
+ }
}
diff --git a/tests/src/com/android/services/telephony/rcs/ImsSignallingUtils.java b/tests/src/com/android/services/telephony/rcs/ImsSignallingUtils.java
index d607f6d..0e725e0 100644
--- a/tests/src/com/android/services/telephony/rcs/ImsSignallingUtils.java
+++ b/tests/src/com/android/services/telephony/rcs/ImsSignallingUtils.java
@@ -28,4 +28,6 @@
"+g.3gpp.icsi-ref=\"urn%3Aurn-7%3A3gppservice.ims.icsi.oma.cpm.session\"";
public static final String FILE_TRANSFER_HTTP_TAG =
"+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gppapplication.ims.iari.rcs.fthttp\"";
+ public static final String CHATBOT_COMMUNICATION_USING_SESSION_TAG =
+ "+g.3gpp.iari-ref=\"urn%3Aurn-7%3A3gpp-application.ims.iari.rcs.chatbot\"";
}
diff --git a/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java b/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java
index da614fc..2a30e1a 100644
--- a/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java
+++ b/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java
@@ -96,7 +96,7 @@
controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
verify(mMockFeature).onRcsDisconnected();
// Connect the RcsFeatureManager
- mConnectorListener.getValue().connectionReady(mFeatureManager);
+ mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
verify(mFeatureManager).updateCapabilities(TEST_SUB_ID);
verify(mFeatureManager).registerImsRegistrationCallback(any());
@@ -114,7 +114,7 @@
public void testFeatureManagerConnectedAddRemoveFeature() throws Exception {
RcsFeatureController controller = createFeatureController();
// Connect the RcsFeatureManager
- mConnectorListener.getValue().connectionReady(mFeatureManager);
+ mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
verify(mMockFeature).onRcsConnected(mFeatureManager);
@@ -131,7 +131,7 @@
IImsRegistrationCallback regCb = mock(IImsRegistrationCallback.class);
IImsCapabilityCallback capCb = mock(IImsCapabilityCallback.class);
// Connect the RcsFeatureManager
- mConnectorListener.getValue().connectionReady(mFeatureManager);
+ mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
try {
controller.registerImsRegistrationCallback(TEST_SUB_ID, regCb);
@@ -165,7 +165,7 @@
public void testFeatureManagerConnectedHelper() throws Exception {
RcsFeatureController controller = createFeatureController();
// Connect the RcsFeatureManager
- mConnectorListener.getValue().connectionReady(mFeatureManager);
+ mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
ArgumentCaptor<IImsRegistrationCallback> captor =
ArgumentCaptor.forClass(IImsRegistrationCallback.class);
verify(mFeatureManager).registerImsRegistrationCallback(captor.capture());
@@ -257,7 +257,7 @@
public void testCarrierConfigChanged() throws Exception {
RcsFeatureController controller = createFeatureController();
// Connect the RcsFeatureManager
- mConnectorListener.getValue().connectionReady(mFeatureManager);
+ mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
verify(mFeatureManager).updateCapabilities(TEST_SUB_ID);
controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
@@ -272,7 +272,7 @@
public void testChangeSubId() throws Exception {
RcsFeatureController controller = createFeatureController();
// Connect the RcsFeatureManager
- mConnectorListener.getValue().connectionReady(mFeatureManager);
+ mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
verify(mFeatureManager).updateCapabilities(TEST_SUB_ID);
controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
@@ -286,7 +286,7 @@
public void testDestroy() throws Exception {
RcsFeatureController controller = createFeatureController();
// Connect the RcsFeatureManager
- mConnectorListener.getValue().connectionReady(mFeatureManager);
+ mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
controller.destroy();
diff --git a/tests/src/com/android/services/telephony/rcs/SipDelegateControllerTest.java b/tests/src/com/android/services/telephony/rcs/SipDelegateControllerTest.java
index 78f6894..575b81e 100644
--- a/tests/src/com/android/services/telephony/rcs/SipDelegateControllerTest.java
+++ b/tests/src/com/android/services/telephony/rcs/SipDelegateControllerTest.java
@@ -30,6 +30,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.os.Binder;
import android.telephony.ims.DelegateRegistrationState;
import android.telephony.ims.DelegateRequest;
import android.telephony.ims.FeatureTagState;
@@ -291,8 +292,8 @@
private SipDelegateController getTestDelegateController(DelegateRequest request,
Set<FeatureTagState> deniedSet) {
- return new SipDelegateController(TEST_SUB_ID, request, "", mExecutorService,
- mMockMessageTracker, mMockDelegateStateTracker,
+ return new SipDelegateController(TEST_SUB_ID, Binder.getCallingUid(), request, "",
+ mExecutorService, mMockMessageTracker, mMockDelegateStateTracker,
(a, b, deniedFeatureSet, d, e) -> {
assertEquals(deniedSet, deniedFeatureSet);
return mMockBinderConnection;
diff --git a/tests/src/com/android/services/telephony/rcs/SipTransportControllerTest.java b/tests/src/com/android/services/telephony/rcs/SipTransportControllerTest.java
index 0f139f8..42a45f4 100644
--- a/tests/src/com/android/services/telephony/rcs/SipTransportControllerTest.java
+++ b/tests/src/com/android/services/telephony/rcs/SipTransportControllerTest.java
@@ -78,6 +78,7 @@
@RunWith(AndroidJUnit4.class)
public class SipTransportControllerTest extends TelephonyTestBase {
private static final int TEST_SUB_ID = 1;
+ private static final int TEST_UID = 1001;
private static final String TEST_PACKAGE_NAME = "com.test_pkg";
private static final String TEST_PACKAGE_NAME_2 = "com.test_pkg2";
private static final int TIMEOUT_MS = 200;
@@ -132,13 +133,13 @@
mSmsPackageName.add(TEST_PACKAGE_NAME);
doAnswer(invocation -> {
Integer subId = invocation.getArgument(0);
- String packageName = invocation.getArgument(2);
- DelegateRequest request = invocation.getArgument(1);
+ String packageName = invocation.getArgument(3);
+ DelegateRequest request = invocation.getArgument(2);
SipDelegateController c = getMockDelegateController(subId, packageName, request);
assertNotNull("create called with no corresponding controller set up", c);
return c;
- }).when(mMockDelegateControllerFactory).create(anyInt(), any(), anyString(), any(), any(),
- any(), any(), any());
+ }).when(mMockDelegateControllerFactory).create(anyInt(), anyInt(), any(), anyString(),
+ any(), any(), any(), any(), any());
setFeatureAllowedConfig(TEST_SUB_ID, new String[]{ImsSignallingUtils.MMTEL_TAG,
ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG, ImsSignallingUtils.GROUP_CHAT_TAG,
ImsSignallingUtils.FILE_TRANSFER_HTTP_TAG});
@@ -254,7 +255,7 @@
doReturn(mSipTransport).when(mRcsManager).getSipTransport();
controller.onRcsConnected(mRcsManager);
try {
- controller.createSipDelegate(TEST_SUB_ID + 1,
+ controller.createSipDelegate(TEST_SUB_ID + 1, TEST_UID,
new DelegateRequest(Collections.emptySet()), TEST_PACKAGE_NAME,
mock(ISipDelegateConnectionStateCallback.class),
mock(ISipDelegateMessageCallback.class));
@@ -271,7 +272,7 @@
doReturn(null).when(mRcsManager).getSipTransport();
controller.onRcsConnected(mRcsManager);
try {
- controller.createSipDelegate(TEST_SUB_ID,
+ controller.createSipDelegate(TEST_SUB_ID, TEST_UID,
new DelegateRequest(Collections.emptySet()), TEST_PACKAGE_NAME,
mock(ISipDelegateConnectionStateCallback.class),
mock(ISipDelegateMessageCallback.class));
@@ -289,7 +290,7 @@
.when(mRcsManager).getSipTransport();
// No RCS connected message
try {
- controller.createSipDelegate(TEST_SUB_ID,
+ controller.createSipDelegate(TEST_SUB_ID, TEST_UID,
new DelegateRequest(Collections.emptySet()), TEST_PACKAGE_NAME,
mock(ISipDelegateConnectionStateCallback.class),
mock(ISipDelegateMessageCallback.class));
@@ -812,7 +813,7 @@
CompletableFuture<Boolean> pendingChange = setChangeSupportedFeatureTagsFuture(
delegateControllerContainer.delegateController, allowedTags, deniedTags);
try {
- controller.createSipDelegate(delegateControllerContainer.subId,
+ controller.createSipDelegate(delegateControllerContainer.subId, TEST_UID,
delegateControllerContainer.delegateRequest,
delegateControllerContainer.packageName,
delegateControllerContainer.mockDelegateConnectionCallback,
diff --git a/tests/src/com/android/services/telephony/rcs/UceControllerManagerTest.java b/tests/src/com/android/services/telephony/rcs/UceControllerManagerTest.java
index 8d719fd..17decb9 100644
--- a/tests/src/com/android/services/telephony/rcs/UceControllerManagerTest.java
+++ b/tests/src/com/android/services/telephony/rcs/UceControllerManagerTest.java
@@ -19,6 +19,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -199,9 +200,9 @@
doReturn(false).when(mUceController).isUnavailable();
uceCtrlManager.onRcsConnected(mRcsFeatureManager);
- uceCtrlManager.getUcePublishState();
+ uceCtrlManager.getUcePublishState(true);
- verify(mUceController).getUcePublishState();
+ verify(mUceController).getUcePublishState(eq(true));
}
@Test
@@ -211,7 +212,7 @@
uceCtrlManager.onRcsDisconnected();
try {
- uceCtrlManager.getUcePublishState();
+ uceCtrlManager.getUcePublishState(true);
fail();
} catch (ImsException e) {
assertEquals(ImsException.CODE_ERROR_SERVICE_UNAVAILABLE, e.getCode());
@@ -225,9 +226,9 @@
UceControllerManager uceCtrlManager = getUceControllerManager();
IRcsUcePublishStateCallback callback = Mockito.mock(IRcsUcePublishStateCallback.class);
- uceCtrlManager.registerPublishStateCallback(callback);
+ uceCtrlManager.registerPublishStateCallback(callback, true);
- verify(mUceController).registerPublishStateCallback(callback);
+ verify(mUceController).registerPublishStateCallback(callback, true);
}
@Test
@@ -238,7 +239,7 @@
try {
IRcsUcePublishStateCallback callback = Mockito.mock(IRcsUcePublishStateCallback.class);
- uceCtrlManager.registerPublishStateCallback(callback);
+ uceCtrlManager.registerPublishStateCallback(callback, true);
fail();
} catch (ImsException e) {
assertEquals(ImsException.CODE_ERROR_SERVICE_UNAVAILABLE, e.getCode());