Merge RP1A.200708.001
Change-Id: Ie7b0d38ea64b47ff1914c4f47d20ea30d1241373
diff --git a/Android.bp b/Android.bp
index 8e075b6..33efe4e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -25,6 +25,7 @@
     defaults: [
         "SettingsLibDefaults",
         "SettingsLib-search-defaults",
+        "framework-wifi-vendor-hide-access-defaults",
     ],
 
     srcs: ["src/**/*.java"],
@@ -61,6 +62,7 @@
         "telephony-common",
         "ims-common",
         "app-compat-annotations",
+        "telephony-ext",
     ],
 }
 
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2f53cc1..860683f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -190,7 +190,6 @@
             <intent-filter android:priority="1">
                 <action android:name="android.settings.WIRELESS_SETTINGS" />
                 <action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
-                <action android:name="com.android.settings.sim.SIM_SUB_INFO_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <intent-filter>
@@ -905,6 +904,36 @@
                 android:value="true" />
         </activity>
 
+        <!-- Keep compatibility with old shortcuts. -->
+        <activity-alias android:name="DisplaySettings"
+                android:label="@string/display_settings"
+                android:exported="true"
+                android:targetActivity="Settings$DisplaySettingsActivity">
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.DisplaySettings" />
+        </activity-alias>
+            <activity android:name="Settings$SMQQtiFeedbackActivity"
+                android:label="@string/qtifeedback_settings_title"
+                android:icon="@drawable/ic_settings_qti_feedback"
+                android:enabled="false"
+                android:taskAffinity="">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <intent-filter android:priority="250">
+                <action android:name="com.android.settings.action.SETTINGS" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.category"
+                android:value="com.android.settings.category.ia.system" />
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="@string/qtifeedback_intent_action" />
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                android:value="true" />
+            <meta-data android:name="com.android.settings.summary"
+                android:resource="@string/qtifeedback_settings_subtitle" />
+        </activity>
+
         <activity
             android:name="Settings$NightDisplaySettingsActivity"
             android:label="@string/night_display_title"
@@ -2697,6 +2726,27 @@
             android:exported="false"/>
 
         <activity
+            android:name="Settings$SimSettingsActivity"
+            android:label="@string/sim_settings_title"
+            android:icon="@drawable/ic_settings_sim"
+            android:parentActivityName="Settings">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="com.android.settings.action.SETTINGS" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="-2"/>
+            <meta-data android:name="com.android.settings.category"
+                android:value="com.android.settings.category.ia.wireless" />
+            <meta-data android:name="com.android.settings.summary"
+                android:resource="@string/summary_empty"/>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.sim.SimSettings" />
+        </activity>
+
+        <activity
             android:name=".wifi.RequestToggleWiFiActivity"
             android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert"
             android:excludeFromRecents="true"
@@ -3404,6 +3454,21 @@
                        android:value="com.android.settings.sound.MediaControlsSettings" />
         </activity>
 
+       <activity android:name=".network.telephony.UserPLMNListActivity"
+           android:label="@string/uplmn_settings_title"
+           android:configChanges="orientation|screenSize|keyboardHidden">
+           <intent-filter>
+               <action android:name="android.intent.action.MAIN" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".network.telephony.UserPLMNEditorActivity"
+            android:label="@string/uplmn_settings_title"
+            android:configChanges="orientation|screenSize|keyboardHidden">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+            </intent-filter>
+        </activity>
         <!-- This is the longest AndroidManifest.xml ever. -->
     </application>
 </manifest>
diff --git a/NOTICE b/NOTICE
index c5b1efa..97d3f8c 100644
--- a/NOTICE
+++ b/NOTICE
@@ -10,6 +10,35 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 
+________________________________________
+
+Copyright (c) 2018, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+______________________________________
 
                                  Apache License
                            Version 2.0, January 2004
diff --git a/res/drawable-mdpi/ic_settings_qti_feedback.png b/res/drawable-mdpi/ic_settings_qti_feedback.png
new file mode 100644
index 0000000..e7c0dae
--- /dev/null
+++ b/res/drawable-mdpi/ic_settings_qti_feedback.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_qti_feedback.png b/res/drawable-xhdpi/ic_settings_qti_feedback.png
new file mode 100644
index 0000000..a20f94e
--- /dev/null
+++ b/res/drawable-xhdpi/ic_settings_qti_feedback.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_qti_feedback.png b/res/drawable-xxhdpi/ic_settings_qti_feedback.png
new file mode 100644
index 0000000..5d0ccf6
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_settings_qti_feedback.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_qti_feedback.png b/res/drawable-xxxhdpi/ic_settings_qti_feedback.png
new file mode 100644
index 0000000..3dfb55d
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_qti_feedback.png
Binary files differ
diff --git a/res/layout/bluetooth_audio_codec_dialog.xml b/res/layout/bluetooth_audio_codec_dialog.xml
index 9636427..1fd9de8 100644
--- a/res/layout/bluetooth_audio_codec_dialog.xml
+++ b/res/layout/bluetooth_audio_codec_dialog.xml
@@ -52,8 +52,16 @@
                 layout="@layout/preference_widget_dialog_radiobutton"/>
 
             <include
+                android:id="@+id/bluetooth_audio_codec_aptx_adaptive"
+                layout="@layout/preference_widget_dialog_radiobutton"/>
+
+            <include
                 android:id="@+id/bluetooth_audio_codec_ldac"
                 layout="@layout/preference_widget_dialog_radiobutton"/>
+
+            <include
+                android:id="@+id/bluetooth_audio_codec_aptx_twsp"
+                layout="@layout/preference_widget_dialog_radiobutton"/>
         </RadioGroup>
 
         <include
diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml
index 45ecd61..d0a4159 100644
--- a/res/layout/wifi_dialog.xml
+++ b/res/layout/wifi_dialog.xml
@@ -141,6 +141,24 @@
                             android:prompt="@string/wifi_eap_method" />
                 </LinearLayout>
 
+                <LinearLayout android:id="@+id/l_sim_card"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:visibility="gone"
+                            style="@style/wifi_item" >
+                    <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            style="@style/wifi_item_label"
+                            android:text="@string/select_sim_card" />
+
+                    <Spinner android:id="@+id/sim_card"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            style="@style/wifi_item_content"
+                            android:prompt="@string/select_sim_card" />
+                </LinearLayout>
+
                 <LinearLayout android:id="@+id/l_phase2"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
@@ -393,6 +411,13 @@
                     android:visibility="gone"/>
             </LinearLayout>
 
+            <CheckBox android:id="@+id/share_this_wifi"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/wifi_item_content"
+                    android:textSize="14sp"
+                    android:text="@string/share_this_wifi" />
+
             <LinearLayout android:id="@+id/metered_settings_fields"
                           android:layout_width="match_parent"
                           android:layout_height="wrap_content"
diff --git a/res/values-af/arrays.xml b/res/values-af/arrays.xml
index 5b8ed28..c7f6e5f 100644
--- a/res/values-af/arrays.xml
+++ b/res/values-af/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Interne toestelberging"</item>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index cda838f..8f19616 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Geen klank of vibrasie nie"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Geen klank of vibrasie nie en verskyn laer in gespreksafdeling"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Kan lui of vibreer op grond van fooninstellings"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Wys prioriteitkennisgewings hieronder. Altyd stil."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Wys prioriteitkennisgewings hieronder. Altyd stil."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Wys prioriteitkennisgewings hieronder. Altyd stil."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Wys kennisgewings as \'n banier boaan die skerm wanneer die toestel ontsluit is"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Alle \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"-kennisgewings"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Alle <xliff:g id="APP_NAME">%1$s</xliff:g>-kennisgewings"</string>
diff --git a/res/values-am/arrays.xml b/res/values-am/arrays.xml
index f44cb48..0d92a25 100644
--- a/res/values-am/arrays.xml
+++ b/res/values-am/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"የውስጥ መሣሪያ ማከማቻ"</item>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index c96ece2..448b2f6 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"ምንም ድምጽ ወይም ንዝረት የለም"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"ምንም ድምጽ ወይም ንዝረት የለም እና በውይይት ክፍል ላይ አይታይም"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"በእርስዎ የስልክ ቅንብሮች የሚወሰን ሆኖ ሊደውል ወይም ሊነዝር ይችላል"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"ከዚህ በታች ቅድሚያ የሚሰጣቸው ማሳወቂያዎችን ያሳያል። ሁልጊዜ ጸጥ ያለ።"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"ከዚህ በታች ቅድሚያ የሚሰጣቸው ማሳወቂያዎችን ያሳያል። ሁልጊዜ ጸጥ ያለ።"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"ከዚህ በታች ቅድሚያ የሚሰጣቸው ማሳወቂያዎችን ያሳያል። ሁልጊዜ ጸጥ ያለ።"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"መሣሪያ ሲከፈት፣ ማሳወቂያዎችን እንደ ሰንደቅ በማያ ገጹ አናት ላይ እንዳለ አሳይ"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"ሁሉም «<xliff:g id="APP_NAME">%1$s</xliff:g>» ማሳወቂያዎች"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"ሁሉም የ<xliff:g id="APP_NAME">%1$s</xliff:g> ማሳወቂያዎች"</string>
@@ -4949,4 +4952,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"ተጫዋች አሳይ"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"ምንም ተጫዋቾች አይገኙም"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"ሚዲያ"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"የጣት ምልክትን ይዝለሉ"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"ጸጥታ የጣት ምልክትን ያነቃል"</string>
+    <string name="qtifeedback_settings_title"> ስለ ሃርድዌር ግብረ-መልስ</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc ሪፖርት</string>
 </resources>
diff --git a/res/values-ar/arrays.xml b/res/values-ar/arrays.xml
index 4218a24..6091bf8 100644
--- a/res/values-ar/arrays.xml
+++ b/res/values-ar/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"مساحة تخزين الجهاز الداخلية"</item>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index f530bde..0b115c6 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -3774,6 +3774,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"بدون صوت أو اهتزاز وتظهر في موضع أسفل في قسم المحادثات"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"يمكن إصدار رنين أو اهتزاز بناءً على إعدادات الهاتف"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"عند فتح قفل الجهاز، تظهر الإشعارات في صورة بانر أعلى الشاشة."</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"يتم عرض هذه الإشعارات أسفل الإشعارات ذات الأولوية. كتم الصوت دائمًا."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"يتم عرض هذه الإشعارات أسفل الإشعارات ذات الأولوية. كتم الصوت دائمًا."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"يتم عرض هذه الإشعارات أسفل الإشعارات ذات الأولوية. كتم الصوت دائمًا."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"جميع إشعارات \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"جميع إشعارات <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"الإشعارات التكيّفية"</string>
@@ -5310,4 +5313,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"إظهار المشغِّل"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"ما مِن مشغِّلات متاحة"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"الوسائط"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"إيماءة التخطي"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"إيماءة كتم صوت التنبيهات"</string>
+    <string name="qtifeedback_settings_title">الإبلاغ عن</string>
+    <string name="qtifeedback_settings_subtitle">ملاحظات حول أجهزة Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 2124195..474eb5c 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"কোনো ধ্বনি অথবা কম্পন নাই"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"কোনো ধ্বনি অথবা কম্পন নাই আৰু বাৰ্তালাপ শাখাটোৰ তলৰ অংশত দেখা পোৱা যায়"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ফ’নৰ ছেটিঙৰ ওপৰত নিৰ্ভৰ কৰি ৰিং কৰিব অথবা কম্পন হ’ব পাৰে"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"অগ্ৰাধিকাৰপ্ৰাপ্ত জাননীসমূহৰ তলত দেখুৱায়। সদায় নীৰৱ।"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"অগ্ৰাধিকাৰপ্ৰাপ্ত জাননীসমূহৰ তলত দেখুৱায়। সদায় নীৰৱ।"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"অগ্ৰাধিকাৰপ্ৰাপ্ত জাননীসমূহৰ তলত দেখুৱায়। সদায় নীৰৱ।"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"ডিভাইচটো আনলক কৰি ৰাখিলে, স্ক্ৰীণৰ ওপৰ অংশত বেনাৰ হিচাপে জাননীসমূহ দেখুৱাওক"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"ৰ সকলো জাননী"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ সকলো জাননী"</string>
diff --git a/res/values-az/arrays.xml b/res/values-az/arrays.xml
index 1a73dd6..e8f42e1 100644
--- a/res/values-az/arrays.xml
+++ b/res/values-az/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Cihazın daxili yaddaşı"</item>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 5557114..498737f 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Səs və ya vibrasiya yoxdur"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Səs və ya vibrasiya yoxdur və söhbət bölməsinin aşağısında görünür"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Telefon ayarlarına əsasən zəng çala və ya vibrasiya edə bilər"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Mühüm bildirişlərin aşağısında göstərilir. Həmişə səssiz."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Mühüm bildirişlərin aşağısında göstərilir. Həmişə səssiz."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Mühüm bildirişlərin aşağısında göstərilir. Həmişə səssiz."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Cihaz kilidli olduğu zaman bildirişlər ekranının yuxarısında baner ilə göstərilsin"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Bütün \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" bildirişləri"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Bütün <xliff:g id="APP_NAME">%1$s</xliff:g> bildirişləri"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Oyunçunu göstərin"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Əlçatan oyunçu yoxdur"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"media"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"İşarəni keçin"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Səssizlik rejimi siqnalları"</string>
+    <string name="qtifeedback_settings_title"> Avadanlığa dair sorğu</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc üçün hesabat</string>
 </resources>
diff --git a/res/values-b+sr+Latn/arrays.xml b/res/values-b+sr+Latn/arrays.xml
index 65beb05..d361b80 100644
--- a/res/values-b+sr+Latn/arrays.xml
+++ b/res/values-b+sr+Latn/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Skladište unutrašnjeg uređaja"</item>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 4d015c9..ec6c06d 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -3629,6 +3629,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Bez zvuka i vibriranja"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Bez zvuka i vibriranja i prikazuje se u nastavku odeljka za konverzacije"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Može da zvoni ili vibrira u zavisnosti od podešavanja telefona"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Prikazuje se ispod prioritetnih obaveštenja. Uvek nečujno."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Prikazuje se ispod prioritetnih obaveštenja. Uvek nečujno."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Prikazuje se ispod prioritetnih obaveštenja. Uvek nečujno."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Kada je uređaj otključan, prikazuje obaveštenja kao baner u vrhu ekrana"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Sva obaveštenja aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Sva obaveštenja aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-be/arrays.xml b/res/values-be/arrays.xml
index 0e22b48..67856ab 100644
--- a/res/values-be/arrays.xml
+++ b/res/values-be/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Унутраная памяць прылады"</item>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index c6700dc..705a9f8 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -3677,6 +3677,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Без гуку ці вібрацыі"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Паказваецца без гуку ці вібрацыі ў раздзеле размоў"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"У залежнасці ад налад тэлефона магчымы званок або вібрацыя"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Паказвае ўнізе апавяшчэнні з высокім прыярытэтам. Заўсёды без гуку."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Паказвае ўнізе апавяшчэнні з высокім прыярытэтам. Заўсёды без гуку."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Паказвае ўнізе апавяшчэнні з высокім прыярытэтам. Заўсёды без гуку."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Калі прылада разблакіравана, паказваць апавяшчэнні ў выглядзе банера ўверсе экрана"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Усе апавяшчэнні праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Усе апавяшчэнні праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
diff --git a/res/values-bg/arrays.xml b/res/values-bg/arrays.xml
index 6960746..5ddc6d1 100644
--- a/res/values-bg/arrays.xml
+++ b/res/values-bg/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Вътрешно хранилище на устройство"</item>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 7cc8d7a..064d3ad 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Без звук или вибриране"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Без звук или вибриране и се показва по-долу в секцията с разговори"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Може да звъни или да вибрира въз основа на настройките за телефона"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Показва се под приоритетните известия. Винаги в тих режим."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Показва се под приоритетните известия. Винаги в тих режим."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Показва се под приоритетните известия. Винаги в тих режим."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Когато устройството е отключено, известията се показват като банер в горната част на екрана"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Всички известия от <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Всички известия от <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4428,6 +4431,8 @@
       <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> секунди</item>
       <item quantity="one">1 секунда</item>
     </plurals>
+    <string name="qtifeedback_settings_title"> Обратна връзка за хардуер</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc доклади</string>
     <string name="automatic_storage_manager_settings" msgid="519158151463974656">"Управление на хранилището"</string>
     <string name="automatic_storage_manager_text" msgid="6900593059927987273">"За да ви помогне да освободите място за съхранение, мениджърът на хранилището премахва от устройството ви резервните копия на снимки и видеоклипове."</string>
     <string name="automatic_storage_manager_days_title" msgid="5077286114860539367">"Премахване на снимките и видеоклиповете"</string>
diff --git a/res/values-bn/arrays.xml b/res/values-bn/arrays.xml
index 8b5aaa1..02d7ffb 100644
--- a/res/values-bn/arrays.xml
+++ b/res/values-bn/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"ইন্টারনাল ডিভাইসের স্টোরেজ"</item>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 1e06896..b9f7339 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"আওয়াজ করবে না বা ভাইব্রেট হবে না"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"আওয়াজ করবে না বা ভাইব্রেট হবে না এবং কথোপকথন বিভাগের নিচের দিকে দেখা যাবে"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ফোনের সেটিংস অনুযায়ী ফোন রিং বা ভাইব্রেট হতে পারে"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"অগ্রাধিকারযুক্ত বিজ্ঞপ্তির নিচে দেখানো হয়। সবসময় সাইলেন্ট।"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"অগ্রাধিকারযুক্ত বিজ্ঞপ্তির নিচে দেখানো হয়। সবসময় সাইলেন্ট।"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"অগ্রাধিকারযুক্ত বিজ্ঞপ্তির নিচে দেখানো হয়। সবসময় সাইলেন্ট।"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"কোনও ডিভাইস আনলক করা হলে বিজ্ঞপ্তি, স্ক্রিনের উপরে একটি ব্যানার হিসেবে দেখানো হয়"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"সমস্ত \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" বিজ্ঞপ্তি"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"সমস্ত <xliff:g id="APP_NAME">%1$s</xliff:g> সংক্রান্ত বিজ্ঞপ্তি"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"প্লেয়ার দেখুন"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"কোনও প্লেয়ার উপলভ্য নেই"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"মিডিয়া"</string>
+    <string name="qtifeedback_settings_title">হার্ডওয়্যার ফিডব্যাক</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc প্রতিবেদন</string>
 </resources>
diff --git a/res/values-bs/arrays.xml b/res/values-bs/arrays.xml
index 154723b..61cf7bc 100644
--- a/res/values-bs/arrays.xml
+++ b/res/values-bs/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Interna pohrana uređaja"</item>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 5583ada..99c2434 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -3630,6 +3630,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Bez zvuka ili vibracije i pojavljuje se pri dnu odjeljka za razgovor"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Može zvoniti ili vibrirati na osnovu postavki vašeg telefona"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Kada je uređaj otključan, vidite obavještenja u vidu banera na vrhu ekrana"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Prikazuje se ispod prioritetnih obavještenja. Uvijek nečujno."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Prikazuje se ispod prioritetnih obavještenja. Uvijek nečujno."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Prikazuje se ispod prioritetnih obavještenja. Uvijek nečujno."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Sva obavještenja iz aplikacije \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Sva obavještenja aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Prilagodljiva obavještenja"</string>
diff --git a/res/values-ca/arrays.xml b/res/values-ca/arrays.xml
index ac0e8bd..2a0a66a 100644
--- a/res/values-ca/arrays.xml
+++ b/res/values-ca/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Emmagatzematge intern del dispositiu"</item>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 561fd52..5d051ae 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Sense so ni vibració"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Sense so ni vibració i es mostra més avall a la secció de converses"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Pot sonar o vibrar en funció de la configuració del telèfon"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Es mostra a sota de les notificacions prioritàries. Sempre silenciosa."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Es mostra a sota de les notificacions prioritàries. Sempre silenciosa."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Es mostra a sota de les notificacions prioritàries. Sempre silenciosa."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Quan el dispositiu estigui desbloquejat, mostra les notificacions en forma de bàner a la part superior de la pantalla"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Totes les notificacions de: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Totes les notificacions de l\'aplicació <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Mostra el reproductor"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"No hi ha cap reproductor disponible"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"multimèdia"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Omet el gest"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Silencia el gest d\'alertes"</string>
+    <string name="qtifeedback_settings_title">Comentaris sobre el maquinari</string>
+    <string name="qtifeedback_settings_subtitle">Informar Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml
index a28e701..23721c2 100644
--- a/res/values-cs/arrays.xml
+++ b/res/values-cs/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Interní úložiště zařízení"</item>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 2d6f3f4..18e6a92 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -3677,6 +3677,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Žádný zvuk ani vibrace"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Žádný zvuk ani vibrace a zobrazovat níže v sekci konverzací"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Může vyzvánět nebo vibrovat v závislosti na nastavení telefonu"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Zobrazí oznámení s nižší prioritou. Vždy tichý režim."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Zobrazí oznámení s nižší prioritou. Vždy tichý režim."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Zobrazí oznámení s nižší prioritou. Vždy tichý režim."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Když je zařízení odemčené, zobrazovat oznámení jako banner v horní části obrazovky"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Všechna oznámení aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Všechna oznámení aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -5128,4 +5131,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Zobrazit přehrávač"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Nejsou k dispozici žádné přehrávače"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"média"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Přeskočit gesto"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Gesto ke ztišení upozornění"</string>
+    <string name="qtifeedback_settings_title">Informace o hardwaru</string>
+    <string name="qtifeedback_settings_subtitle">Odesílání informací společnosti Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-da/arrays.xml b/res/values-da/arrays.xml
index 2aa7c34..1080791 100644
--- a/res/values-da/arrays.xml
+++ b/res/values-da/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Intern lagerplads på enheden"</item>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 382a87e..601feb3 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Ingen lyd eller vibration"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Ingen lyd eller vibration, og den vises længere nede i samtalesektionen"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Kan ringe eller vibrere baseret på telefonens indstillinger"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Viser notifikationer med lav prioritet. Altid lydløs."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Viser notifikationer med lav prioritet. Altid lydløs."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Viser notifikationer med lav prioritet. Altid lydløs."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Når enheden er låst op, vises notifikationer som et banner øverst på skærmen"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Alle notifikationer fra \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Alle notifikationer for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Vis afspiller"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Der er ingen tilgængelige afspillere"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"Medier"</string>
+    <string name="qtifeedback_settings_title">Hardware-feedback</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Rapportering</string>
 </resources>
diff --git a/res/values-de/arrays.xml b/res/values-de/arrays.xml
index 4c32e97..2a68307 100644
--- a/res/values-de/arrays.xml
+++ b/res/values-de/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Interner Gerätespeicher"</item>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index e33733a..0fc849b 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Kein Ton und keine Vibration"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Kein Ton und keine Vibration, erscheint weiter unten im Bereich \"Unterhaltungen\""</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Kann klingeln oder vibrieren, abhängig von den Telefoneinstellungen"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Erscheinen unter den wichtigen Benachrichtigungen. Immer lautlos."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Erscheinen unter den wichtigen Benachrichtigungen. Immer lautlos."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Erscheinen unter den wichtigen Benachrichtigungen. Immer lautlos."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Bei entsperrtem Gerät Benachrichtigungen als Banner oben auf dem Bildschirm anzeigen"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Alle Benachrichtigungen von \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Alle <xliff:g id="APP_NAME">%1$s</xliff:g>-Benachrichtigungen"</string>
@@ -4950,4 +4953,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Player anzeigen"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Es sind keine Player verfügbar."</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"Medien"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Bewegung zum Überspringen"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Bewegung zum Stummschalten von Benachrichtigungen"</string>
+    <string name="qtifeedback_settings_title">Hardware-Feedback</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Berichte</string>
 </resources>
diff --git a/res/values-el/arrays.xml b/res/values-el/arrays.xml
index e0d0aa7..d2e7e83 100644
--- a/res/values-el/arrays.xml
+++ b/res/values-el/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Εσωτερικός αποθηκευτικός χώρος της συσκευής"</item>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 22b57ab..88962fe 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Χωρίς ήχο ή δόνηση"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Χωρίς ήχο ή δόνηση και εμφανίζεται χαμηλά στην ενότητα συζητήσεων"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Ενδέχεται να κουδουνίζει ή να δονείται βάσει των ρυθμίσεων του τηλεφώνου"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Εμφανίζεται κάτω από ειδοποιήσεις προτεραιότητας. Πάντα σε σίγαση."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Εμφανίζεται κάτω από ειδοποιήσεις προτεραιότητας. Πάντα σε σίγαση."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Εμφανίζεται κάτω από ειδοποιήσεις προτεραιότητας. Πάντα σε σίγαση."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Όταν η συσκευή είναι ξεκλειδωμένη, οι ειδοποιήσεις εμφανίζονται ως banner επάνω στην οθόνη"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Όλες οι ειδοποιήσεις \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Όλες οι ειδοποιήσεις <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Εμφάνιση προγράμματος αναπαραγωγής"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Δεν υπάρχουν διαθέσιμα προγράμματα αναπαραγωγής"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"μέσα"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Κίνηση παράβλεψης"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Κίνηση σίγασης ειδοποιήσεων"</string>
+    <string name="qtifeedback_settings_title">Ανάδραση υλικού</string>
+    <string name="qtifeedback_settings_subtitle">Αναφορά στην Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-en-rAU/arrays.xml b/res/values-en-rAU/arrays.xml
index ec8510a..558fb54 100644
--- a/res/values-en-rAU/arrays.xml
+++ b/res/values-en-rAU/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Internal device storage"</item>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 461c667..2f49533 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"No sound or vibration"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"No sound or vibration and appears lower in conversation section"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"May ring or vibrate based on phone settings"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Displays below priority notifications. Always silent."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Displays below priority notifications. Always silent."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Displays below priority notifications. Always silent."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"When device is unlocked, show notifications as a banner across the top of the screen"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"All \'<xliff:g id="APP_NAME">%1$s</xliff:g>\' notifications"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"All <xliff:g id="APP_NAME">%1$s</xliff:g> notifications"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 6902b54..8961714 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"No sound or vibration"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"No sound or vibration and appears lower in conversation section"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"May ring or vibrate based on phone settings"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Displays below priority notifications. Always silent."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Displays below priority notifications. Always silent."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Displays below priority notifications. Always silent."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"When device is unlocked, show notifications as a banner across the top of the screen"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"All \'<xliff:g id="APP_NAME">%1$s</xliff:g>\' notifications"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"All <xliff:g id="APP_NAME">%1$s</xliff:g> notifications"</string>
diff --git a/res/values-en-rGB/arrays.xml b/res/values-en-rGB/arrays.xml
index ec8510a..558fb54 100644
--- a/res/values-en-rGB/arrays.xml
+++ b/res/values-en-rGB/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Internal device storage"</item>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index ad08f75..afbf011 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"No sound or vibration"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"No sound or vibration and appears lower in conversation section"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"May ring or vibrate based on phone settings"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Displays below priority notifications. Always silent."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Displays below priority notifications. Always silent."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Displays below priority notifications. Always silent."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"When device is unlocked, show notifications as a banner across the top of the screen"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"All \'<xliff:g id="APP_NAME">%1$s</xliff:g>\' notifications"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"All <xliff:g id="APP_NAME">%1$s</xliff:g> notifications"</string>
diff --git a/res/values-en-rIN/arrays.xml b/res/values-en-rIN/arrays.xml
index ec8510a..558fb54 100644
--- a/res/values-en-rIN/arrays.xml
+++ b/res/values-en-rIN/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Internal device storage"</item>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 5f3b9db..292d6a1 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"No sound or vibration"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"No sound or vibration and appears lower in conversation section"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"May ring or vibrate based on phone settings"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Displays below priority notifications. Always silent."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Displays below priority notifications. Always silent."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Displays below priority notifications. Always silent."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"When device is unlocked, show notifications as a banner across the top of the screen"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"All \'<xliff:g id="APP_NAME">%1$s</xliff:g>\' notifications"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"All <xliff:g id="APP_NAME">%1$s</xliff:g> notifications"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 3146501..ead7784 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‎No sound or vibration‎‏‎‎‏‎"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎No sound or vibration and appears lower in conversation section‎‏‎‎‏‎"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎May ring or vibrate based on phone settings‎‏‎‎‏‎"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‎Displays below priority notifications. Always silent.‎‏‎‎‏‎"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‎Displays below priority notifications. Always silent.‎‏‎‎‏‎"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎Displays below priority notifications. Always silent.‎‏‎‎‏‎"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎When device is unlocked, show notifications as a banner across the top of the screen‎‏‎‎‏‎"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎All \"‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎\" notifications‎‏‎‎‏‎"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎All ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ notifications‎‏‎‎‏‎"</string>
diff --git a/res/values-es-rUS/arrays.xml b/res/values-es-rUS/arrays.xml
index e1c0b85..3fba674 100644
--- a/res/values-es-rUS/arrays.xml
+++ b/res/values-es-rUS/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Dispositivo de almacenamiento interno"</item>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 548f12a..9935f62 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"No suena ni vibra, y aparece en una parte inferior de la sección de conversaciones"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Puede sonar o vibrar en función de la configuración del teléfono"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Con el dispositivo desbloqueado, mostrar notificaciones como banner en la parte superior de la pantalla"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Se muestra debajo de las notificaciones de prioridad. Siempre en silencio."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Se muestra debajo de las notificaciones de prioridad. Siempre en silencio."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Se muestra debajo de las notificaciones de prioridad. Siempre en silencio."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Todas las notificaciones de \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Todas las notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Notificaciones adaptables"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Mostrar reproductor"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"No hay jugadores disponibles"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"contenido multimedia"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Gesto para omitir"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Gesto para silenciar alertas"</string>
+    <string name="qtifeedback_settings_title">Comentarios sobre el hardware</string>
+    <string name="qtifeedback_settings_subtitle">Informes de Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
index 1f2dc1a..cdc7d94 100644
--- a/res/values-es/arrays.xml
+++ b/res/values-es/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Almacenamiento de dispositivo interno"</item>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index b211680..140898f 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Sin sonido ni vibración y se muestra más abajo en la sección de conversaciones"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Es posible que suene o vibre según los ajustes del teléfono"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Cuando el dispositivo está desbloqueado, muestra las notificaciones en la parte superior"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Muestra las notificaciones con prioridad baja. Siempre en silencio."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Muestra las notificaciones con prioridad baja. Siempre en silencio."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Muestra las notificaciones con prioridad baja. Siempre en silencio."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Todas las notificaciones de \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Todas las notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Notificaciones adaptativas"</string>
@@ -4429,6 +4432,8 @@
       <item quantity="one">1 segundo</item>
     </plurals>
     <string name="automatic_storage_manager_settings" msgid="519158151463974656">"Gestionar almacenamiento"</string>
+    <string name="qtifeedback_settings_title">Comentarios sobre el hardware</string>
+    <string name="qtifeedback_settings_subtitle">Informes de Qualcomm Technologies, Inc</string>
     <string name="automatic_storage_manager_text" msgid="6900593059927987273">"Para liberar espacio, el Administrador de Almacenamiento borrará de tu dispositivo las fotos y vídeos que tengan copia de seguridad."</string>
     <string name="automatic_storage_manager_days_title" msgid="5077286114860539367">"Borrar fotos y vídeos"</string>
     <string name="automatic_storage_manager_preference_title" msgid="3483357910142595444">"Administrador de almacenamiento"</string>
diff --git a/res/values-et/arrays.xml b/res/values-et/arrays.xml
index 036cf5f..6c578d9 100644
--- a/res/values-et/arrays.xml
+++ b/res/values-et/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Seadme sisemine salvestusruum"</item>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 69c46bd..f65be68 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Ilma heli ja vibreerimiseta"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Ilma heli ja vibreerimiseta, kuvatakse vestluste jaotises allpool"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Võib telefoni seadete põhjal heliseda või vibreerida"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Kuvatakse prioriteetsete märguannete all. Alati vaikne."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Kuvatakse prioriteetsete märguannete all. Alati vaikne."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Kuvatakse prioriteetsete märguannete all. Alati vaikne."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Kui seade on avatud, kuvatakse märguanded bännerina ekraanikuva ülaosas"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Kõik rakenduse „<xliff:g id="APP_NAME">%1$s</xliff:g>” märguanded"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Kõik rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> märguanded"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Kuva pleier"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Ühtegi pleierit pole saadaval"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"meedia"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Vahelejätmise liigutus"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Teatiste vaigistamise liigutus"</string>
+    <string name="qtifeedback_settings_title">Tagasiside</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc riistvara kohta</string>
 </resources>
diff --git a/res/values-eu/arrays.xml b/res/values-eu/arrays.xml
index 7bbff21..16b4ac0 100644
--- a/res/values-eu/arrays.xml
+++ b/res/values-eu/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Gailuaren barneko memoria"</item>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 749f267..6208ae8 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Ez du tonurik jotzen edo dar-dar egiten"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Ez du tonurik jotzen edo dar-dar egiten, eta elkarrizketaren atalaren behealdean agertzen da"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Tonua jo edo dar-dar egin dezake, telefonoaren ezarpenen arabera"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Lehentasunik ez duten jakinarazpenak erakusten ditu. Beti isilik."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Lehentasunik ez duten jakinarazpenak erakusten ditu. Beti isilik."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Lehentasunik ez duten jakinarazpenak erakusten ditu. Beti isilik."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Gailua desblokeatuta dagoenean, erakutsi jakinarazpenak banda gisa pantailaren goialdean"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" aplikazioaren jakinarazpen guztiak"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioaren jakinarazpen guztiak"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Erakutsi erreproduzigailua"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Ez dago erreproduzigailurik erabilgarri"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"multimedia-edukia"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Saltatu keinua"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Alertak isilarazteko keinua"</string>
+    <string name="qtifeedback_settings_title">Hardwareri buruzko iritzia</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc enpresaren txostenak</string>
 </resources>
diff --git a/res/values-fa/arrays.xml b/res/values-fa/arrays.xml
index bc7c51d..ac7f483 100644
--- a/res/values-fa/arrays.xml
+++ b/res/values-fa/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"دستگاه ذخیره‌سازی داخلی"</item>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 0a1310f..f276f86 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"بدون صدا یا لرزش"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"بدون صدا و لرزش در پایین بخش مکالمه نشان داده می‌شود"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"بسته به تنظیمات ممکن است تلفن زنگ بزند یا لرزش داشته باشد"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"اعلان‌های با اولویت پایین را نشان می‌دهد. همیشه بی‌صدا."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"اعلان‌های با اولویت پایین را نشان می‌دهد. همیشه بی‌صدا."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"اعلان‌های با اولویت پایین را نشان می‌دهد. همیشه بی‌صدا."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"وقتی قفل دستگاه باز می‌شود، اعلان‌ها به‌صورت برنمایی در بالای صفحه‌نمایش نشان داده شود"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"همه اعلان‌های «<xliff:g id="APP_NAME">%1$s</xliff:g>»"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"همه اعلان‌های <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"نمایش دادن پخش‌کننده"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"پخش‌کننده‌ای دردسترس نیست"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"رسانه‌"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"اشاره رد کردن"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"اشاره هشدارهای ساکت کردن"</string>
+    <string name="qtifeedback_settings_title">اطلاعات سخت‌افزار</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc گزارش</string>
 </resources>
diff --git a/res/values-fi/arrays.xml b/res/values-fi/arrays.xml
index 92a3668..99508cb 100644
--- a/res/values-fi/arrays.xml
+++ b/res/values-fi/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Laitteen sisäinen tallennustila"</item>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index cd450e9..a5bfccd 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Ei ääntä tai värinää ja näkyy alempana keskusteluosiossa"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Voi soida tai väristä puhelimen asetuksista riippuen"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Kun laitteen lukitus on avattuna, näytä ilmoitukset bannerina sivun yläreunassa"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Näytetään priorisoitujen ilmoitusten alapuolella. Aina äänetön."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Näytetään priorisoitujen ilmoitusten alapuolella. Aina äänetön."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Näytetään priorisoitujen ilmoitusten alapuolella. Aina äänetön."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Kaikki ilmoitukset: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Kaikki ilmoitukset: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Mukautuvat ilmoitukset"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Näytä soitin"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Soittimia ei saatavilla"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"media"</string>
+    <string name="qtifeedback_settings_title">Palaute laitteesta</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc -raportointi</string>
 </resources>
diff --git a/res/values-fr-rCA/arrays.xml b/res/values-fr-rCA/arrays.xml
index 70688e9..7746543 100644
--- a/res/values-fr-rCA/arrays.xml
+++ b/res/values-fr-rCA/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Mémoire interne du mobile"</item>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index dcce836..2a5556a 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Aucun son ni vibration, et s\'affiche plus bas dans la section des conversations"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Peut sonner ou vibrer, selon les paramètres du téléphone"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Lorsque l\'appareil est déverrouillé, afficher les notifications dans une bannière dans le haut de l\'écran"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"S\'affiche sous les notifications prioritaires. Toujours silencieux."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"S\'affiche sous les notifications prioritaires. Toujours silencieux."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"S\'affiche sous les notifications prioritaires. Toujours silencieux."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Toutes les notifications de « <xliff:g id="APP_NAME">%1$s</xliff:g> »"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Toutes les notifications de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Notifications adaptatives"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Afficher le lecteur"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Aucun lecteur n\'a été trouvé"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"commandes multimédias"</string>
+    <string name="qtifeedback_settings_title">Avis sur le matériel</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Transmission de rapports</string>
 </resources>
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
index 93d84fd..e665b35 100644
--- a/res/values-fr/arrays.xml
+++ b/res/values-fr/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Mémoire interne du mobile"</item>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 5d5bbed..4d465c6 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Aucun son ni vibration"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Aucun son ni vibration, s\'affiche plus bas dans la section des conversations"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Peut sonner ou vibrer en fonction des paramètres du téléphone"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"S\'affiche sous les notifications prioritaires. Toujours silencieux."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"S\'affiche sous les notifications prioritaires. Toujours silencieux."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"S\'affiche sous les notifications prioritaires. Toujours silencieux."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Lorsque l\'appareil est déverrouillé, afficher les notifications dans une bannière en haut de l\'écran"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Toutes les notifications <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Toutes les notifications <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Afficher le lecteur"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Aucun lecteur disponible"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"Multimédia"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Geste permettant d\'ignorer"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Geste permettant de couper le son des alertes"</string>
+    <string name="qtifeedback_settings_title">Avis sur le matériel</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Transmission de rapports</string>
 </resources>
diff --git a/res/values-gl/arrays.xml b/res/values-gl/arrays.xml
index 7aa91b8..e6966e0 100644
--- a/res/values-gl/arrays.xml
+++ b/res/values-gl/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Almacenamento interno do dispositivo"</item>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index da36eb1..48caf92 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Sen son nin vibración"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Non soa nin vibra, e aparece máis abaixo na sección de conversas"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Podería soar ou vibrar en función da configuración do teléfono"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Mostra as notificacións con prioridade baixa. Sempre en silencio."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Mostra as notificacións con prioridade baixa. Sempre en silencio."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Mostra as notificacións con prioridade baixa. Sempre en silencio."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Ao desbloquear o dispositivo, as notificacións móstranse nun cartel na parte superior da pantalla"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Todas as notificacións da aplicación <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Todas as notificacións de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Mostrar reprodutor"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Non hai reprodutores dispoñibles"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"contido multimedia"</string>
+    <string name="qtifeedback_settings_title">Comentarios sobre o hardware</string>
+    <string name="qtifeedback_settings_subtitle">Informe de Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-gu/arrays.xml b/res/values-gu/arrays.xml
index f019fd5..845976c 100644
--- a/res/values-gu/arrays.xml
+++ b/res/values-gu/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"આંતરિક ઉપકરણ સંગ્રહ"</item>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 71a8cd9..ea45bed 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"કોઈપણ સાઉન્ડ અથવા વાઇબ્રેશન નથી"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"કોઈપણ સાઉન્ડ અથવા વાઇબ્રેશન નથી અને વાતચીત વિભાગમાં તે વધુ નીચેની દિશાએ દેખાય છે"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ફોન સેટિંગના આધારે રિંગ અથવા વાઇબ્રેટ થઈ શકે છે"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"પ્રાધાન્યતાવાળા નોટિફિકેશન નીચે બતાવે છે. હંમેશાં સાઇલન્ટ."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"પ્રાધાન્યતાવાળા નોટિફિકેશન નીચે બતાવે છે. હંમેશાં સાઇલન્ટ."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"પ્રાધાન્યતાવાળા નોટિફિકેશન નીચે બતાવે છે. હંમેશાં સાઇલન્ટ."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"ડિવાઇસ અનલૉક થયેલું હોય ત્યારે, સ્ક્રીનના ઉપરના ભાગ પર બૅનરના સ્વરૂપમાં નોટિફિકેશન બતાવો"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"ના તમામ નોટિફિકેશન"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>ના બધા નોટિફિકેશન"</string>
diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml
index 1b2569a..01f51ed 100644
--- a/res/values-hi/arrays.xml
+++ b/res/values-hi/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"आंतरिक डिवाइस मेमोरी"</item>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 04716b2..8802a06 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"किसी तरह की आवाज़ या वाइब्रेशन न हो"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"इससे किसी तरह की आवाज़ या वाइब्रेशन नहीं होता और \'बातचीत\', सेक्शन में सबसे नीचे दिखती है"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"फ़ोन की सेटिंग के आधार पर, सूचना आने पर घंटी बज सकती है या वाइब्रेशन हो सकता है"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"कम ज़रूरी सूचनाएं दिखती हैं. दिखते समय आवाज़ और वाइब्रेशन हमेशा बंद रहते हैं."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"कम ज़रूरी सूचनाएं दिखती हैं. दिखते समय आवाज़ और वाइब्रेशन हमेशा बंद रहते हैं."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"कम ज़रूरी सूचनाएं दिखती हैं. दिखते समय आवाज़ और वाइब्रेशन हमेशा बंद रहते हैं."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"जब डिवाइस अनलॉक हो, तो स्क्रीन के सबसे ऊपर बैनर के रूप में सूचनाएं दिखाएं"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" की सभी सूचनाएं"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> की सभी सूचनाएं"</string>
@@ -4946,4 +4949,7 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"मीडिया प्लेयर दिखाएं"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"कोई मीडिया प्लेयर उपलब्ध नहीं है"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"मीडिया"</string>
+    <string name="no_connected_devices" msgid="6657176404588389594">"कोई डिवाइस नहीं जुड़ा है"</string>
+    <string name="qtifeedback_settings_title"> हार्डवेयर प्रतिसाद</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc रिपोर्टिंग</string>
 </resources>
diff --git a/res/values-hr/arrays.xml b/res/values-hr/arrays.xml
index 5c322b2..aea4f7d 100644
--- a/res/values-hr/arrays.xml
+++ b/res/values-hr/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Interno pohranjivanje na uređaj"</item>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 241a024..17bf50e 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -3629,6 +3629,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Bez zvuka ili vibracije"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Bez zvuka ili vibracije i prikazuje se pri dnu odjeljka razgovora"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Možda će zvoniti ili vibrirati, ovisno o postavkama telefona"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Prikazuje obavijesti nižeg prioriteta. Uvijek bešumno."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Prikazuje obavijesti nižeg prioriteta. Uvijek bešumno."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Prikazuje obavijesti nižeg prioriteta. Uvijek bešumno."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Kad se uređaj otključa, prikaži obavijesti kao natpis pri vrhu zaslona"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Sve obavijesti aplikacije \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Sve obavijesti aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -5037,4 +5040,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Prikaži player"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Nijedan player nije dostupan"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"mediji"</string>
+    <string name="qtifeedback_settings_title">Povratne informacije o hardveru</string>
+    <string name="qtifeedback_settings_subtitle"> Slanje izvještaja tvrtki Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-hu/arrays.xml b/res/values-hu/arrays.xml
index 8ea94c5..f917858 100644
--- a/res/values-hu/arrays.xml
+++ b/res/values-hu/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Belső tárhely"</item>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index a061e62..114dc3c 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Nincs hang és rezgés"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Nincs hang és rezgés, továbbá lejjebb jelenik meg a beszélgetések szakaszában"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"A telefonbeállítások alapján csöröghet és rezeghet"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Az elsőbbségi értesítések alatt jelenik meg. Mindig némítva van."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Az elsőbbségi értesítések alatt jelenik meg. Mindig némítva van."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Az elsőbbségi értesítések alatt jelenik meg. Mindig némítva van."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Feloldott állapotban az értesítések megjelenítése szalag formájában a képernyő felső részén"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"A(z) „<xliff:g id="APP_NAME">%1$s</xliff:g>” összes értesítése"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Az összes <xliff:g id="APP_NAME">%1$s</xliff:g>-értesítés"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Lejátszó megjelenítése"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Nincs rendelkezésre álló lejátszó"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"média"</string>
+    <string name="qtifeedback_settings_title">Hardverrel kapcsolatos visszajelzés</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Jelentésküldés</string>
 </resources>
diff --git a/res/values-hy/arrays.xml b/res/values-hy/arrays.xml
index 50238b9..30cf9ca 100644
--- a/res/values-hy/arrays.xml
+++ b/res/values-hy/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Սարքի ներքին պահոց"</item>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 3e29df5..43f18d6 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Առանց ձայնի կամ թրթռոցի"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Հայտնվում է զրույցների ցանկի ներքևում, առանց ձայնի և թրթռոցի"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Կարող է զնգալ կամ թրթռալ (հեռախոսի կարգավորումներից կախված)"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Ցուցադրվում են կարևոր ծանուցումների տակ: Միշտ անձայն:"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Ցուցադրվում են կարևոր ծանուցումների տակ: Միշտ անձայն:"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Ցուցադրվում են կարևոր ծանուցումների տակ: Միշտ անձայն:"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Երբ սարքն ապակողպված է, ցույց տալ ծանուցումները էկրանի վերևում ազդերիզի տեսքով"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"«<xliff:g id="APP_NAME">%1$s</xliff:g>» պիտակով բոլոր ծանուցումները"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի բոլոր ծանուցումները"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Ցուցադրել նվագարկիչը"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Հասանելի նվագարկիչներ չկան"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"մեդիա"</string>
+    <string name="qtifeedback_settings_title">Հետադարձ կապ սարքակազմի մասին</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Զեկուցում</string>
 </resources>
diff --git a/res/values-in/arrays.xml b/res/values-in/arrays.xml
index 1851f0c..ea40c69 100644
--- a/res/values-in/arrays.xml
+++ b/res/values-in/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Penyimpanan perangkat internal"</item>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 57bf242..bdf1745 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Tidak ada suara atau getaran"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Tidak ada suara atau getaran dan ditampilkan lebih rendah di bagian percakapan"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Dapat berdering atau bergetar berdasarkan setelan ponsel"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Ditampilkan di bawah notifikasi prioritas. Selalu senyap."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Ditampilkan di bawah notifikasi prioritas. Selalu senyap."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Ditampilkan di bawah notifikasi prioritas. Selalu senyap."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Jika perangkat dibuka kuncinya, menampilkan notifikasi sebagai banner di bagian atas layar"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Semua notifikasi \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Semua notifikasi <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Menampilkan pemutar"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Tidak ada pemutar yang tersedia"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"media"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Lewati gestur"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Senyapkan gestur notifikasi"</string>
+    <string name="qtifeedback_settings_title">Umpan Balik tentang Perangkat Keras</string>
+    <string name="qtifeedback_settings_subtitle">Laporan Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-is/arrays.xml b/res/values-is/arrays.xml
index 90d6b3b..0f04e0e 100644
--- a/res/values-is/arrays.xml
+++ b/res/values-is/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Innbyggð geymsla tækis"</item>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index e39fcac3..11d392a 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Ekkert hljóð eða titringur"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Ekkert hljóð eða titringur og birtist neðar í samtalshluta"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Gæti hringt eða titrað eftir stillingum símans"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Birtir tilkynningar með lítinn forgang. Alltaf án hljóðs."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Birtir tilkynningar með lítinn forgang. Alltaf án hljóðs."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Birtir tilkynningar með lítinn forgang. Alltaf án hljóðs."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Birta tilkynningar á borða efst á skjánum þegar tækið er opið"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Allar tilkynningar frá „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Allar tilkynningar frá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Sýna spilara"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Engir spilarar tiltækir"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"margmiðlunarefni"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Sleppa bendingu"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Slökkva á hljóði fyrir tilkynningar"</string>
+    <string name="qtifeedback_settings_title">Svörun vélbúnaðar</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Skýrslugjöf</string>
 </resources>
diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml
index 5a9f87f..0fdcdef 100644
--- a/res/values-it/arrays.xml
+++ b/res/values-it/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Memorizzazione su dispositivo interno"</item>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index a49cb61..51116d5 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Nessun suono o vibrazione"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Nessun suono o vibrazione e appare più in basso nella sezione delle conversazioni"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Può suonare o vibrare in base alle impostazioni del telefono"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Vengono mostrate le notifiche con priorità bassa. Sempre silenziose."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Vengono mostrate le notifiche con priorità bassa. Sempre silenziose."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Vengono mostrate le notifiche con priorità bassa. Sempre silenziose."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Quando il dispositivo è sbloccato, mostra le notifiche come banner in cima allo schermo"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Tutte le notifiche \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Tutte le notifiche di <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Mostra lettore multimediale"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Nessun lettore multimediale disponibile"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"contenuti multimediali"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Gesto per ignorare"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Gesto per disattivare gli avvisi"</string>
+    <string name="qtifeedback_settings_title">Feedback sull\'hardware</string>
+    <string name="qtifeedback_settings_subtitle">Invio di rapporti a Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-iw/arrays.xml b/res/values-iw/arrays.xml
index f71da6d..fd0f545 100644
--- a/res/values-iw/arrays.xml
+++ b/res/values-iw/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"אחסון פנימי במכשיר"</item>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 432c690..13bed5d 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -3677,6 +3677,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"ללא צליל או רטט"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"ללא צליל או רטט ומופיעה למטה בקטע התראות השיחה"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ייתכן שיופעל צלצול או רטט בהתאם להגדרות הטלפון"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"מציגה התראות בעדיפות נמוכה. תמיד שקטה."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"מציגה התראות בעדיפות נמוכה. תמיד שקטה."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"מציגה התראות בעדיפות נמוכה. תמיד שקטה."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"כשהמכשיר לא נעול, יש להציג התראות כבאנר בראש המסך"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"כל ההתראות של \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"כל ההתראות של <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml
index a73bef3..e90a8d6 100644
--- a/res/values-ja/arrays.xml
+++ b/res/values-ja/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"内部デバイスストレージ"</item>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index c03af5f..6872587 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"着信音もバイブレーションも無効です"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"着信音もバイブレーションも無効になり会話セクションの下に表示されます"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"スマートフォンの設定を基に着信音またはバイブレーションが有効になります"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"優先度の低い通知を表示します。常に通知音は鳴りません。"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"優先度の低い通知を表示します。常に通知音は鳴りません。"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"優先度の低い通知を表示します。常に通知音は鳴りません。"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"デバイスのロックが解除されているとき、画面上部にバナーとして通知を表示します"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」のすべての通知"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> のすべての通知"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"プレーヤーを表示"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"プレーヤーなし"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"メディア"</string>
+    <string name="qtifeedback_settings_title"> ハードウェアに関するフィードバック</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Incレポート</string>
 </resources>
diff --git a/res/values-ka/arrays.xml b/res/values-ka/arrays.xml
index 077403f..2775f9e 100644
--- a/res/values-ka/arrays.xml
+++ b/res/values-ka/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"შიდა მოწყობილობის მეხსიერება"</item>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 74334f3..7a56f0c 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"ხმისა და ვიბრაციის გარეშე"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"ხმისა და ვიბრაციის გარეშე, ჩნდება მიმოწერების სექციის ქვედა ნაწილში"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"დარეკვა ან ვიბრაცია ტელეფონის პარამეტრების მიხედვით"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"აჩვენებს ნაკლებად პრიორიტეტულ შეტყობინებებს. ყოველთვის ჩუმია."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"აჩვენებს ნაკლებად პრიორიტეტულ შეტყობინებებს. ყოველთვის ჩუმია."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"აჩვენებს ნაკლებად პრიორიტეტულ შეტყობინებებს. ყოველთვის ჩუმია."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"როცა მოწყობილობა განბლოკილია, შეტყობინებები გამოჩნდეს ეკრანის ზედა ნაწილზე გადაჭიმული ბანერის სახით"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“-ის ყველა შეტყობინება"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ის ყველა შეტყობინება"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"დამკვრელის ჩვენება"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"დამკვრელები მიუწვდომელია"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"მედია"</string>
+    <string name="qtifeedback_settings_title">აპარატურის შესახებ უკუკავშირი</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc რეპორტინგი</string>
 </resources>
diff --git a/res/values-kk/arrays.xml b/res/values-kk/arrays.xml
index 4c744df..a49efc2 100644
--- a/res/values-kk/arrays.xml
+++ b/res/values-kk/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Ішкі құрылғы жады"</item>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 2f0cc55..8ce46e2 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Дыбыс не діріл қолданылмайды"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Дыбыс не діріл қолданылмайды, төменде әңгімелер бөлімінде шығады"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Телефон параметрлеріне байланысты шылдырлауы не дірілдеуі мүмкін"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Маңыздылығы төмен хабарландыруларды көрсетеді. Үнемі дыбыссыз режимде болады."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Маңыздылығы төмен хабарландыруларды көрсетеді. Үнемі дыбыссыз режимде болады."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Маңыздылығы төмен хабарландыруларды көрсетеді. Үнемі дыбыссыз режимде болады."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Құрылғының құлпы ашылғанда, хабарландырулар экранның жоғарғы жағында баннер ретінде көрсетіледі"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Барлық \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" хабарландырулары"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Барлық <xliff:g id="APP_NAME">%1$s</xliff:g> хабарландырулары"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Ойнатқышты көрсету"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Ойнатқыштар жоқ"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"мультимeдиа"</string>
+    <string name="qtifeedback_settings_title"> Жабдыққа байланысты пікір</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc хабарламасы</string>
 </resources>
diff --git a/res/values-km/arrays.xml b/res/values-km/arrays.xml
index d074efd..ca8dc1f 100644
--- a/res/values-km/arrays.xml
+++ b/res/values-km/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"ឧបករណ៍​ផ្ទុក​ខាង​ក្នុង"</item>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 4a70b0f..ec29ef8 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"គ្មានសំឡេង ឬការញ័រ និងការបង្ហាញ​កម្រិតទាបជាង​នេះនៅក្នុង​ផ្នែកសន្ទនាទេ"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"អាចរោទ៍ ឬញ័រ ដោយផ្អែកលើ​ការកំណត់​ទូរសព្ទ"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"បង្ហាញការ​ជូនដំណឹងជា​ផ្ទាំងនៅផ្នែក​ខាងលើ​អេក្រង់ នៅពេល​ឧបករណ៍មិនជាប់សោ"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"បង្ហាញ​ខាងក្រោម​ការជូនដំណឹង​អាទិភាព។ បិទសំឡេង​ជានិច្ច។"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"បង្ហាញ​ខាងក្រោម​ការជូនដំណឹង​អាទិភាព។ បិទសំឡេង​ជានិច្ច។"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"បង្ហាញ​ខាងក្រោម​ការជូនដំណឹង​អាទិភាព។ បិទសំឡេង​ជានិច្ច។"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"ការជូនដំណឹង​ទាំងអស់អំពី \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"ការជូនដំណឹង​ទាំងអស់​របស់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"ការជូនដំណឺង​ដែល​មានភាព​បត់បែន"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"បង្ហាញ​កម្មវិធីចាក់"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"មិនមាន​កម្មវិធីចាក់ទេ"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"មេឌៀ"</string>
+    <string name="qtifeedback_settings_title">មតិតប​នៃ​ហាដវែរ</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc ការរាយការណ៍</string>
 </resources>
diff --git a/res/values-kn/arrays.xml b/res/values-kn/arrays.xml
index e858ca6..db468d4 100644
--- a/res/values-kn/arrays.xml
+++ b/res/values-kn/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"ಆಂತರಿಕ ಸಾಧನ ಸಂಗ್ರಹಣೆ"</item>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 7ba49b2..d4f0852 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"ಯಾವುದೇ ಧ್ವನಿ ಅಥವಾ ವೈಬ್ರೇಷನ್‌ ಆಗುವುದಿಲ್ಲ"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"ಯಾವುದೇ ಧ್ವನಿ ಅಥವಾ ವೈಬ್ರೇಷನ್‌ ಆಗುವುದಿಲ್ಲ, ಸಂಭಾಷಣೆ ವಿಭಾಗದ ಕೆಳಭಾಗದಲ್ಲಿ ಗೋಚರಿಸುತ್ತದೆ"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಆಧರಿಸಿ ಫೋನ್ ರಿಂಗ್ ಅಥವಾ ವೈಬ್ರೇಟ್ ಆಗುತ್ತದೆ"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"ಆದ್ಯತೆಯ ಅಧಿಸೂಚನೆಗಳ ಅಡಿಯಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ. ಯಾವಾಗಲೂ ನಿಶ್ಶಬ್ದ."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"ಆದ್ಯತೆಯ ಅಧಿಸೂಚನೆಗಳ ಅಡಿಯಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ. ಯಾವಾಗಲೂ ನಿಶ್ಶಬ್ದ."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"ಆದ್ಯತೆಯ ಅಧಿಸೂಚನೆಗಳ ಅಡಿಯಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ. ಯಾವಾಗಲೂ ನಿಶ್ಶಬ್ದ."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿದಾಗ, ಅಧಿಸೂಚನೆಗಳನ್ನು ಪರದೆಯ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಬ್ಯಾನರ್‌ನಂತೆ ತೋರಿಸಿ"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"ಎಲ್ಲಾ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ಅಧಿಸೂಚನೆಗಳು"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"ಎಲ್ಲಾ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅಧಿಸೂಚನೆಗಳು"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"ಪ್ಲೇಯರ್ ತೋರಿಸಿ"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"ಯಾವುದೇ ಪ್ಲೇಯರ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"ಮಾಧ್ಯಮ"</string>
+    <string name="qtifeedback_settings_title">ಹಾರ್ಡ್‌ವೇರ್ ಪ್ರತಿಕ್ರಿಯೆ</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc ವರದಿ</string>
 </resources>
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
index 8c61c6b..608f7df 100644
--- a/res/values-ko/arrays.xml
+++ b/res/values-ko/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"내부 기기 저장용량"</item>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 63243fb..5edb640 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"소리 또는 진동 없음"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"소리나 진동이 울리지 않으며 대화 섹션 하단에 표시됨"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"휴대전화 설정에 따라 벨소리나 진동이 울릴 수 있음"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"우선순위 알림 아래에 표시됩니다. 항상 음소거됩니다."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"우선순위 알림 아래에 표시됩니다. 항상 음소거됩니다."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"우선순위 알림 아래에 표시됩니다. 항상 음소거됩니다."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"기기가 잠금 해제되었을 때 화면 상단에 알림 배너 표시"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"모든 ‘<xliff:g id="APP_NAME">%1$s</xliff:g>’ 알림"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"모든 <xliff:g id="APP_NAME">%1$s</xliff:g> 알림"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"플레이어를 표시합니다."</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"사용 가능한 플레이어가 없습니다."</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"미디어"</string>
+    <string name="qtifeedback_settings_title">하드웨어 피드백</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc 보고</string>
 </resources>
diff --git a/res/values-ky/arrays.xml b/res/values-ky/arrays.xml
index 0cd420a..f9fcfe7 100644
--- a/res/values-ky/arrays.xml
+++ b/res/values-ky/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Ички түзмөк эстутуму"</item>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 1c16df5..2e97641 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Үнү чыгып же дирилдебейт жана жазышуу бөлүмүнүн ылдый жагында көрүнөт"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Телефондун жөндөөлөрүнө жараша шыңгырап же дирилдеши мүмкүн"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Телефон кулпуланып турганда, билдирмелер экрандын жогору жагында баннер түрүндө көрүнөт"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Маанилүү билдирмелердин ылдый жагында чагылдырылат. Ар дайым үнсүз."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Маанилүү билдирмелердин ылдый жагында чагылдырылат. Ар дайым үнсүз."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Маанилүү билдирмелердин ылдый жагында чагылдырылат. Ар дайым үнсүз."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" колдонмосундагы бардык билдирмелер"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунун бардык билдирмелери"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Ыңгайлаштырылуучу билдирмелер"</string>
diff --git a/res/values-lo/arrays.xml b/res/values-lo/arrays.xml
index 2568a52..5b4951c 100644
--- a/res/values-lo/arrays.xml
+++ b/res/values-lo/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"ພື້ນທີ່ຈັດເກັບຂໍ້ມູນພາຍໃນອຸປະກອນ"</item>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 0f65f1e..4500bf6 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"ບໍ່ມີສຽງ ຫຼື ການສັ່ນເຕືອນ"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"ບໍ່ມີສຽງ ຫຼື ການສັ່ນເຕືອນ ແລະ ປາກົດຢູ່ທາງລຸ່ມຂອງພາກສ່ວນການສົນທະນາ"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ອາດສົ່ງສຽງ ຫຼື ສັ່ນເຕືອນໂດຍອ້າງອີງຈາກການຕັ້ງຄ່າໂທລະສັບ"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"ສະແດງການແຈ້ງເຕືອນທີ່ຄວາມສຳຄັນຕ່ຳລົງ. ປິດສຽງຕະຫຼອດ."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"ສະແດງການແຈ້ງເຕືອນທີ່ຄວາມສຳຄັນຕ່ຳລົງ. ປິດສຽງຕະຫຼອດ."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"ສະແດງການແຈ້ງເຕືອນທີ່ຄວາມສຳຄັນຕ່ຳລົງ. ປິດສຽງຕະຫຼອດ."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"ເມື່ອປົດລັອກອຸປະກອນແລ້ວ, ໃຫ້ສະແດງການແຈ້ງເຕືອນເປັນປ້າຍຢູ່ເທິງສຸດຂອງໜ້າຈໍ"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"ການສົນທະນາ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ທັງໝົດ"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"ການແຈ້ງເຕືອນ <xliff:g id="APP_NAME">%1$s</xliff:g> ທັງໝົດ"</string>
diff --git a/res/values-lt/arrays.xml b/res/values-lt/arrays.xml
index d423cd5..e7fff5c 100644
--- a/res/values-lt/arrays.xml
+++ b/res/values-lt/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Vidinė įrenginio saugykla"</item>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 7cd8254..3d490c8 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -3677,6 +3677,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Neskamba ir nevibruoja"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Neskamba, nevibruoja ir rodoma apatinėje pokalbių skilties dalyje"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Gali skambėti arba vibruoti, atsižvelgiant į telefono nustatymus"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Pateikiami po prioritetiniais pranešimais. Visada nutildyti."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Pateikiami po prioritetiniais pranešimais. Visada nutildyti."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Pateikiami po prioritetiniais pranešimais. Visada nutildyti."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Kai įrenginys atrakintas, pranešimai rodomi kaip reklamjuostė ekrano viršuje"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Visi „<xliff:g id="APP_NAME">%1$s</xliff:g>“ pranešimai"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Visi „<xliff:g id="APP_NAME">%1$s</xliff:g>“ pranešimai"</string>
@@ -5128,4 +5131,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Rodyti leistuvę"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Nėra jokių pasiekiamų leistuvių"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"medija"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Praleisti gestą"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Įspėjimų nutildymo gestas"</string>
+    <string name="qtifeedback_settings_title">Atsiliepimas apie aparatinę įrangą</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Ataskaitų teikimas</string>
 </resources>
diff --git a/res/values-lv/arrays.xml b/res/values-lv/arrays.xml
index f3d5006..9959318 100644
--- a/res/values-lv/arrays.xml
+++ b/res/values-lv/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Iekšējā ierīces krātuve"</item>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 344ad97..5f230fa 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -3629,6 +3629,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Nav skaņas signāla vai vibrācijas"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Nav skaņas signāla vai vibrācijas, kā arī atrodas zemāk sarunu sadaļā"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Atkarībā no tālruņa iestatījumiem var zvanīt vai vibrēt"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Tiek rādīts zem prioritārajiem paziņojumiem. Vienmēr bez skaņas."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Tiek rādīts zem prioritārajiem paziņojumiem. Vienmēr bez skaņas."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Tiek rādīts zem prioritārajiem paziņojumiem. Vienmēr bez skaņas."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Rādīt paziņojumus reklāmkarogā ekrāna augšdaļā, ja ierīce ir atbloķēta"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Visi lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> paziņojumi"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Visi lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> paziņojumi"</string>
@@ -5037,4 +5040,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Rādīt atskaņotāju"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Nav pieejams neviens atskaņotājs"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"multivide"</string>
+    <string name="qtifeedback_settings_title"> Atsauksmes par aparatūru</string>
+    <string name="qtifeedback_settings_subtitle">Ziņošana uzņēmumam Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-mk/arrays.xml b/res/values-mk/arrays.xml
index 1517863..ef9eb1f 100644
--- a/res/values-mk/arrays.xml
+++ b/res/values-mk/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Внатрешен капацитет"</item>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index cc80291..1b6c6a8 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Без звук или вибрации и се појавува под делот за разговор"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Може да ѕвони или вибрира во зависност од поставките на телефонот"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Кога уредот е отклучен, прикажувај ги известувањата како рекламен натпис на горниот дел од екранот"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Се прикажува под приоритетните известувања. Секогаш безгласно."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Се прикажува под приоритетните известувања. Секогаш безгласно."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Се прикажува под приоритетните известувања. Секогаш безгласно."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Сите известувања на „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Сите известувања за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Приспособливи известувања"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Прикажи го плеерот"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Нема достапни плеери"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"аудиовизуелни содржини"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Прескокни го движењето"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Движење за стишување предупредувања"</string>
+    <string name="qtifeedback_settings_title">Повратни информации за хардверот</string>
+    <string name="qtifeedback_settings_subtitle">Праќање извештаи на компанијата Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-ml/arrays.xml b/res/values-ml/arrays.xml
index 2edb09e..f9add50 100644
--- a/res/values-ml/arrays.xml
+++ b/res/values-ml/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"ആന്തരിക ഉപകരണ സ്റ്റോറേജ്"</item>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 3fffa3a..406f2dc 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"ശബ്ദമോ വൈബ്രേഷനോ ഇല്ല"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"ശബ്‌ദമോ വൈബ്രേഷനോ ഇല്ല, സംഭാഷണ വിഭാഗത്തിന് താഴെയായി ദൃശ്യമാകും"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ് ചെയ്‌തേക്കാം അല്ലെങ്കിൽ വൈബ്രേറ്റ് ചെയ്‌തേക്കാം"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"കുറഞ്ഞ പ്രാധാന്യമുള്ള മുൻഗണനാ അറിയിപ്പുകൾ പ്രദർശിപ്പിക്കുന്നു. എപ്പോഴും നിശബ്‌ദം."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"കുറഞ്ഞ പ്രാധാന്യമുള്ള മുൻഗണനാ അറിയിപ്പുകൾ പ്രദർശിപ്പിക്കുന്നു. എപ്പോഴും നിശബ്‌ദം."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"കുറഞ്ഞ പ്രാധാന്യമുള്ള മുൻഗണനാ അറിയിപ്പുകൾ പ്രദർശിപ്പിക്കുന്നു. എപ്പോഴും നിശബ്‌ദം."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"ഉപകരണം അൺലോക്ക് ചെയ്‌തിരിക്കുമ്പോൾ അറിയിപ്പുകളെ സ്ക്രീനിന്റെ മുകളിൽ ഒരു ബാനറായി കാണിക്കൂ"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"എല്ലാ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" അറിയിപ്പുകളും"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"എല്ലാ <xliff:g id="APP_NAME">%1$s</xliff:g> അറിയിപ്പുകളും"</string>
@@ -4949,4 +4952,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"പ്ലേയർ കാണിക്കുക"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"പ്ലേയറുകളൊന്നും ലഭ്യമല്ല"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"മീഡിയ"</string>
+    <string name="qtifeedback_settings_title">ഹാർഡ്‌വെയർ ഫീഡ്‌ബാക്ക്</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc റിപ്പോർട്ടുചെയ്യൽ</string>
 </resources>
diff --git a/res/values-mn/arrays.xml b/res/values-mn/arrays.xml
index 33349a5..2f93616 100644
--- a/res/values-mn/arrays.xml
+++ b/res/values-mn/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Дотоод төхөөрөмжийн сан"</item>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 8ee4f8d..1b8097d 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Дуу эсвэл чичиргээ байхгүй"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Дуу эсвэл чичиргээ байхгүй бөгөөд харицан ярианы хэсгийн доод талд харагдана"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Утасны тохиргоонд тулгуурлан хонх дуугаргах эсвэл чичирхийлж болзошгүй"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Доорх ач холбогдолтой мэдэгдлийг харуулдаг. Үргэлж дуугүй байна."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Доорх ач холбогдолтой мэдэгдлийг харуулдаг. Үргэлж дуугүй байна."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Доорх ач холбогдолтой мэдэгдлийг харуулдаг. Үргэлж дуугүй байна."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Төхөөрөмжийн түгжээг тайлсан үед мэдэгдлүүдийг дэлгэцийн дээд хэсэгт баннер болгож харуулах"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"-н бүх мэдэгдэл"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н бүх мэдэгдэл"</string>
diff --git a/res/values-mr/arrays.xml b/res/values-mr/arrays.xml
index 290c61f..72d8a32 100644
--- a/res/values-mr/arrays.xml
+++ b/res/values-mr/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"अंतर्गत डिव्हाइस स्टोरेज"</item>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 43575ad..8f69d31 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"आवाज किंवा व्हायब्रेशन नाही"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"आवाज किंवा व्हायब्रेशन नाही आणि संभाषण विभागात सर्वात तळाशी दिसते"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"फोन सेटिंग्जच्या आधारावर रिंग किंवा व्हायब्रेट होऊ शकतो"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"कमी प्राधान्य असलेल्या सूचना दाखवते. नेहमी सायलंट."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"कमी प्राधान्य असलेल्या सूचना दाखवते. नेहमी सायलंट."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"कमी प्राधान्य असलेल्या सूचना दाखवते. नेहमी सायलंट."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"डिव्हाइस अनलॉक असताना, स्क्रीनच्या सर्वात वरती बॅनर म्हणून सूचना दाखवा"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"सर्व \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" सूचना"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"सर्व <xliff:g id="APP_NAME">%1$s</xliff:g> वरील सूचना"</string>
@@ -4947,4 +4950,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"प्‍लेअर दाखवा"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"कोणताही प्‍लेअर उपलब्ध नाही"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"मीडिया"</string>
+    <string name="qtifeedback_settings_title">हार्डवेअर फीडबॅक</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc  रिपोर्टिंग</string>
 </resources>
diff --git a/res/values-ms/arrays.xml b/res/values-ms/arrays.xml
index 9a9aadc..17d1061 100644
--- a/res/values-ms/arrays.xml
+++ b/res/values-ms/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Storan dalaman peranti"</item>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 2486ebf..d0011a2 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Tiada bunyi atau getaran dan muncul di sebelah bawah dalam bahagian perbualan"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Mungkin berbunyi atau bergetar berdasarkan tetapan telefon"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Apabila kunci peranti dibuka, tunjukkan pemberitahuan sebagai sepanduk di bahagian atas skrin"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Dipaparkan di bawah pemberitahuan keutamaan. Sentiasa senyap."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Dipaparkan di bawah pemberitahuan keutamaan. Sentiasa senyap."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Dipaparkan di bawah pemberitahuan keutamaan. Sentiasa senyap."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Semua pemberitahuan \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Semua pemberitahuan <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Pemberitahuan Boleh Suai"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Tunjukkan pemain"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Tiada pemain tersedia"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"media"</string>
+    <string name="qtifeedback_settings_title">Maklum Balas Perkakasan</string>
+    <string name="qtifeedback_settings_subtitle">Pelaporan Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-my/arrays.xml b/res/values-my/arrays.xml
index 60f8af9..bbd637a 100644
--- a/res/values-my/arrays.xml
+++ b/res/values-my/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"စက်တွင်းသိုလှောင်ကိရိယာ"</item>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 336a597..1d1a636 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"အသံ သို့မဟုတ် တုန်ခါမှုမရှိပါ"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"အသံ သို့မဟုတ် တုန်ခါမှုမရှိပါ၊ စကားဝိုင်းကဏ္ဍ၏ အောက်ပိုင်းတွင် မြင်ရသည်"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ဖုန်းဆက်တင်များပေါ် အခြေခံပြီး အသံမြည်နိုင်သည် သို့မဟုတ် တုန်ခါနိုင်သည်"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"ဦးစားပေးအကြောင်းကြားချက်များ၏ အောက်တွင်ဖော်ပြသည်။ အမြဲအသံတိတ်ရန်။"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"ဦးစားပေးအကြောင်းကြားချက်များ၏ အောက်တွင်ဖော်ပြသည်။ အမြဲအသံတိတ်ရန်။"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"ဦးစားပေးအကြောင်းကြားချက်များ၏ အောက်တွင်ဖော်ပြသည်။ အမြဲအသံတိတ်ရန်။"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"စက်ကို လော့ခ်ဖွင့်ထားပါက အကြောင်းကြားချက်များကို မျက်နှာပြင်၏ထိပ်တွင် နဖူးစည်းအဖြစ် ပြသပါ"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" အကြောင်းကြားချက်အားလုံး"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> အကြောင်းကြားချက် အားလုံး"</string>
diff --git a/res/values-nb/arrays.xml b/res/values-nb/arrays.xml
index 951578c..45b66ff 100644
--- a/res/values-nb/arrays.xml
+++ b/res/values-nb/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Intern lagringsenhet"</item>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 46d3391..2df4e99 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Ingen lyd eller vibrering"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Ingen lyd eller vibrering, og vises lavere i samtaledelen"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Kan ringe eller vibrere basert på telefoninnstillingene"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Vises under prioritetsvarsler. Alltid lydløs."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Vises under prioritetsvarsler. Alltid lydløs."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Vises under prioritetsvarsler. Alltid lydløs."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Når enheten låses opp, vises varsler som et banner over toppen av skjermen"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Alle «<xliff:g id="APP_NAME">%1$s</xliff:g>»-varsler"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Alle <xliff:g id="APP_NAME">%1$s</xliff:g>-varsler"</string>
diff --git a/res/values-ne/arrays.xml b/res/values-ne/arrays.xml
index 5151645..91c290a 100644
--- a/res/values-ne/arrays.xml
+++ b/res/values-ne/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"आन्तरिक उपकरण भण्डारण"</item>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 2854cb8..b927172 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"न घन्टी बज्छ न त कम्पन नै हुन्छ"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"न घन्टी बज्छ न त कम्पन नै हुन्छ र वार्तालाप खण्डको तलतिर देखा पर्छ"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"फोनको सेटिङका आधारमा घन्टी बज्न वा कम्पन हुन सक्छ"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"न्यून प्राथमिकताका सूचनाहरू देखाउँछ। सधैँ मौन।"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"न्यून प्राथमिकताका सूचनाहरू देखाउँछ। सधैँ मौन।"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"न्यून प्राथमिकताका सूचनाहरू देखाउँछ। सधैँ मौन।"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"यन्त्र अनलक गरिएका बेला सूचना देखाउँदा स्क्रिनको सिरानमा ब्यानरका रूपमा देखाउनुहोस्"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" का सबै सूचनाहरू"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> सम्बन्धी सबै सूचनाहरू"</string>
@@ -4949,4 +4952,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"प्लेयर देखाउनुहोस्"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"कुनै पनि प्लेयर उपलब्ध छैन"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"मिडिया"</string>
+    <string name="qtifeedback_settings_title">हार्डवेयर प्रतिक्रिया</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc रिपोर्टिंङ </string>
 </resources>
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
index ab29678..5a22c58 100644
--- a/res/values-nl/arrays.xml
+++ b/res/values-nl/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Interne apparaatopslag"</item>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 00cd617..041c144 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Geen geluid of trilling"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Geen geluid of trilling en wordt op een lagere positie in het gedeelte met gesprekken weergegeven"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Kan overgaan of trillen op basis van de telefooninstellingen"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Wordt weergegeven onder de prioriteitsmeldingen. Altijd stil."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Wordt weergegeven onder de prioriteitsmeldingen. Altijd stil."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Wordt weergegeven onder de prioriteitsmeldingen. Altijd stil."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Wanneer het apparaat is ontgrendeld, worden meldingen als banner bovenaan het scherm weergegeven"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Alle meldingen van \'<xliff:g id="APP_NAME">%1$s</xliff:g>\'"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Alle meldingen van <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Speler weergeven"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Geen spelers beschikbaar"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"media"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Gebaar voor overslaan"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Gebaar voor meldingen dempen"</string>
+    <string name="qtifeedback_settings_title">Feedback over hardware</string>
+    <string name="qtifeedback_settings_subtitle">Rapportage aan Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 25f4e4b..8800f93 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"କୌଣସି ସାଉଣ୍ଡ କିମ୍ବା ଭାଇବ୍ରେସନ୍ ନାହିଁ"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"କୌଣସି ସାଉଣ୍ଡ କିମ୍ବା ଭାଇବ୍ରେସନ୍ ନାହିଁ ଏବଂ ବାର୍ତ୍ତାଳାପ ବିଭାଗର ନିମ୍ନରେ ଦେଖାଯାଏ"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ଫୋନ୍ ସେଟିଂସ୍ ଆଧାରରେ ରିଙ୍ଗ କିମ୍ବା ଭାଇବ୍ରେଟ୍ ହୋଇପାରେ"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"ପ୍ରାଥମିକତା ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ତଳେ ପ୍ରଦର୍ଶନ କରିଥାଏ। ସର୍ବଦା ନୀରବ।"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"ପ୍ରାଥମିକତା ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ତଳେ ପ୍ରଦର୍ଶନ କରିଥାଏ। ସର୍ବଦା ନୀରବ।"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"ପ୍ରାଥମିକତା ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ତଳେ ପ୍ରଦର୍ଶନ କରିଥାଏ। ସର୍ବଦା ନୀରବ।"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"ଡିଭାଇସ୍ ଅନ୍‌ଲକ୍ ଥିବା ବେଳେ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ସ୍କ୍ରିନ୍‌ର ଉପର ପାର୍ଶ୍ୱରେ ବ୍ୟାନର୍ ଭଳି ଦେଖାଯିବ"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"ସମସ୍ତ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ବିଜ୍ଞପ୍ତି"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"ସମସ୍ତ <xliff:g id="APP_NAME">%1$s</xliff:g> ବିଜ୍ଞପ୍ତି"</string>
diff --git a/res/values-pa/arrays.xml b/res/values-pa/arrays.xml
index 8ae37b2..4a3743b 100644
--- a/res/values-pa/arrays.xml
+++ b/res/values-pa/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"ਅੰਦਰੂਨੀ ਡੀਵਾਈਸ ਸਟੋਰੇਜ"</item>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 78a73cd..11afff3 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"ਕੋਈ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਹੀਂ"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"ਕੋਈ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਹੀਂ ਅਤੇ ਸੂਚਨਾਵਾਂ ਗੱਲਬਾਤ ਸੈਕਸ਼ਨ ਵਿੱਚ ਹੇਠਲੇ ਪਾਸੇ ਦਿਸਦੀਆਂ ਹਨ"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ਫ਼ੋਨ ਸੈਟਿੰਗਾਂ ਦੇ ਆਧਾਰ \'ਤੇ ਘੰਟੀ ਵੱਜ ਸਕਦੀ ਹੈ ਜਾਂ ਥਰਥਰਾਹਟ ਹੋ ਸਕਦੀ ਹੈ"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"ਘੱਟ ਤਰਜੀਹ ਵਾਲੀਆਂ ਸੂਚਨਾਵਾਂ ਦਿਖਾਓ। ਹਮੇਸ਼ਾਂ ਖਾਮੋਸ਼।"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"ਘੱਟ ਤਰਜੀਹ ਵਾਲੀਆਂ ਸੂਚਨਾਵਾਂ ਦਿਖਾਓ। ਹਮੇਸ਼ਾਂ ਖਾਮੋਸ਼।"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"ਘੱਟ ਤਰਜੀਹ ਵਾਲੀਆਂ ਸੂਚਨਾਵਾਂ ਦਿਖਾਓ। ਹਮੇਸ਼ਾਂ ਖਾਮੋਸ਼।"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"ਡੀਵਾਈਸ ਅਣਲਾਕ ਕਰਨ \'ਤੇ, ਸਕ੍ਰੀਨ ਦੇ ਸਿਖਰ \'ਤੇ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬੈਨਰ ਵਜੋਂ ਦਿਖਾਓ"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"ਸਾਰੀਆਂ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ਸੂਚਨਾਵਾਂ"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"ਸਾਰੀਆਂ <xliff:g id="APP_NAME">%1$s</xliff:g> ਸੂਚਨਾਵਾਂ"</string>
diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml
index c2c4ed0..a4af06d 100644
--- a/res/values-pl/arrays.xml
+++ b/res/values-pl/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Wewnętrzna pamięć urządzenia"</item>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 2904197..88bb347 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -3677,6 +3677,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Brak dźwięku i wibracji"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Brak dźwięku i wibracji, wyświetla się niżej w sekcji rozmów"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Może włączyć dzwonek lub wibracje w zależności od ustawień telefonu"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Wyświetla się pod powiadomieniami priorytetowymi. Zawsze wyciszone."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Wyświetla się pod powiadomieniami priorytetowymi. Zawsze wyciszone."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Wyświetla się pod powiadomieniami priorytetowymi. Zawsze wyciszone."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Gdy urządzenie jest odblokowane, pokazuj powiadomienia jako pasek u góry ekranu"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Wszystkie powiadomienia z aplikacji „<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Wszystkie powiadomienia z aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -5128,4 +5131,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Pokaż odtwarzacz"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Brak dostępnych graczy"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"multimedia"</string>
+    <string name="qtifeedback_settings_title">Informacje zwrotne o urządzeniu</string>
+    <string name="qtifeedback_settings_subtitle">Raportowanie Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-pt-rBR/arrays.xml b/res/values-pt-rBR/arrays.xml
index 389a7d8..a4a8725 100644
--- a/res/values-pt-rBR/arrays.xml
+++ b/res/values-pt-rBR/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Armazenamento do dispositivo interno"</item>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index e071f80..755fab3 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Som e vibração desativados"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"O som e a vibração estão desativados, e o balão aparece na parte inferior da seção de conversa"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Pode vibrar ou tocar com base nas configurações do smartphone"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Exibida abaixo das notificações prioritárias. Sempre silenciosa."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Exibida abaixo das notificações prioritárias. Sempre silenciosa."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Exibida abaixo das notificações prioritárias. Sempre silenciosa."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Quando o dispositivo estiver desbloqueado, mostrar notificações em um banner no topo da tela"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Todas as notificações de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Todas as notificações do app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml
index 319ef23..975d671 100644
--- a/res/values-pt-rPT/arrays.xml
+++ b/res/values-pt-rPT/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Armazenamento de dispositivo interno"</item>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 5d81cca..c33d49e 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Sem som ou vibração e aparece na parte inferior na secção de conversas."</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Pode tocar ou vibrar com base nas definições do telemóvel."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Com o dispositivo desbloqueado, as notificações são apresentadas como uma faixa no topo do ecrã"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"É apresentada abaixo das notificações prioritárias. Sempre silenciosa."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"É apresentada abaixo das notificações prioritárias. Sempre silenciosa."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"É apresentada abaixo das notificações prioritárias. Sempre silenciosa."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Todas as notificações da app \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Todas as notificações da app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Notificações adaptáveis"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Mostrar leitor"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Nenhum leitor disponível."</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"multimédia"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Gesto para ignorar"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Gesto para silenciar alertas"</string>
+    <string name="qtifeedback_settings_title">Feedback sobre hardware</string>
+    <string name="qtifeedback_settings_subtitle">Relatório da Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-pt/arrays.xml b/res/values-pt/arrays.xml
index 389a7d8..a4a8725 100644
--- a/res/values-pt/arrays.xml
+++ b/res/values-pt/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Armazenamento do dispositivo interno"</item>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index e071f80..5b67d79 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Som e vibração desativados"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"O som e a vibração estão desativados, e o balão aparece na parte inferior da seção de conversa"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Pode vibrar ou tocar com base nas configurações do smartphone"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Exibida abaixo das notificações prioritárias. Sempre silenciosa."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Exibida abaixo das notificações prioritárias. Sempre silenciosa."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Exibida abaixo das notificações prioritárias. Sempre silenciosa."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Quando o dispositivo estiver desbloqueado, mostrar notificações em um banner no topo da tela"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Todas as notificações de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Todas as notificações do app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Mostrar player"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Nenhum player disponível"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"mídia"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Gesto de pular"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Silenciar gesto de alertas"</string>
+    <string name="qtifeedback_settings_title">Feedback sobre hardware</string>
+    <string name="qtifeedback_settings_subtitle">Relatório da Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-ro/arrays.xml b/res/values-ro/arrays.xml
index e069752..3bb4aa3 100644
--- a/res/values-ro/arrays.xml
+++ b/res/values-ro/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Stocare internă pe dispozitiv"</item>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index ab070a1..ab1e5df 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -3630,6 +3630,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Fără sunet sau vibrații și apare în partea de jos a secțiunii de conversație"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Poate să sune sau să vibreze, în funcție de setările telefonului"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Când dispozitivul este deblocat, afișează notificările ca un banner în partea de sus a ecranului"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Se afișează sub notificările prioritare. Întotdeauna silențios."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Se afișează sub notificările prioritare. Întotdeauna silențios."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Se afișează sub notificările prioritare. Întotdeauna silențios."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Toate notificările din „<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Toate notificările din <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Notificări adaptive"</string>
@@ -5037,4 +5040,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Afișează playerul"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Niciun player disponibil"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"media"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Gestul pentru omitere"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Gestul pentru dezactivarea sunetului alertelor"</string>
+    <string name="qtifeedback_settings_title">Feedback hardware</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Raportare</string>
 </resources>
diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml
index c78d052..e243de2 100644
--- a/res/values-ru/arrays.xml
+++ b/res/values-ru/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Внутренний накопитель устройства"</item>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 1619022..38bca44 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -3677,6 +3677,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Без звука или вибрации"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Без звука или вибрации, появляется в нижней части списка разговоров"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Звонок или вибрация в зависимости от настроек телефона"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Показ уведомлений с низким приоритетом. Всегда без звука."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Показ уведомлений с низким приоритетом. Всегда без звука."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Показ уведомлений с низким приоритетом. Всегда без звука."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"При разблокированном устройстве показывать уведомления в виде баннера в верхней части экрана"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Все уведомления приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Показывать все уведомления приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
@@ -5128,4 +5131,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Проигрыватель показан"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Нет доступных проигрывателей"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"Медиа"</string>
+    <string name="qtifeedback_settings_title">Отзывы по оборудованию</string>
+    <string name="qtifeedback_settings_subtitle"> Отчеты Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-si/arrays.xml b/res/values-si/arrays.xml
index e67cd3c..ccbf64e 100644
--- a/res/values-si/arrays.xml
+++ b/res/values-si/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"අභ්‍යන්තර උපාංග ආචයනය"</item>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index e796a26..1052ca2 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"හඬක් හෝ කම්පනයක් නැත"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"හඬක් හෝ කම්පනයක් නැති අතර සංවාද කොටසේ පහළම දිස් වේ"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"දුරකථන සැකසීම් මත පදනම්ව නාද කිරීමට හෝ කම්පනය කිරීමට හැකිය"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"ප්‍රමුඛතා දැනුම්දීම්වලට පහළින් සංදර්ශන වෙයි. සැම විටම නිහඬයි."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"ප්‍රමුඛතා දැනුම්දීම්වලට පහළින් සංදර්ශන වෙයි. සැම විටම නිහඬයි."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"ප්‍රමුඛතා දැනුම්දීම්වලට පහළින් සංදර්ශන වෙයි. සැම විටම නිහඬයි."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"උපාංගය අඟුලු අරිනු ලැබූ විට, තිරයේ මුදුනින් දැනුම්දීම් බැනරයක් ලෙස පෙන්වන්න"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"සියලු \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" දැනුම් දීම්"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"සියලු <xliff:g id="APP_NAME">%1$s</xliff:g> දැනුම් දීම්"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"වාදකය පෙන්වන්න"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"ලබා ගත හැකි වාදක නැත"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"මාධ්‍ය"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"අභිනය මඟ හරින්න"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"ඇඟවීම් අභිනය නිහඬ කරන්න"</string>
+    <string name="qtifeedback_settings_title">දෘඩාංග ප්‍රතිපෝෂණය</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc වාර්තාකරණය</string>
 </resources>
diff --git a/res/values-sk/arrays.xml b/res/values-sk/arrays.xml
index 3c68c33..2ed6f0d 100644
--- a/res/values-sk/arrays.xml
+++ b/res/values-sk/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Interné úložisko zariadenia"</item>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 410c714..373a272 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -3677,6 +3677,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Žiadny zvuk ani vibrácie"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Žiadny zvuk ani vibrácie a zobrazuje sa nižšie v sekcii konverzácií"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Zvoní či vibruje podľa nastavení telefónu"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Zobrazuje sa pod prioritnými upozorneniami. Vždy potichu."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Zobrazuje sa pod prioritnými upozorneniami. Vždy potichu."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Zobrazuje sa pod prioritnými upozorneniami. Vždy potichu."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Keď je zariadenie odomknuté, zobrazovať upozornenia ako banner v hornej časti obrazovky"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Všetky upozornenia aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Všetky upozornenia aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -5128,4 +5131,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Zobraziť prehrávač"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"K dispozícii nie sú žiadne prehrávače"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"médiá"</string>
+    <string name="qtifeedback_settings_title">Spätná väzba k hardvéru</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Nahlasovanie</string>
 </resources>
diff --git a/res/values-sl/arrays.xml b/res/values-sl/arrays.xml
index 635df4d..b19e315 100644
--- a/res/values-sl/arrays.xml
+++ b/res/values-sl/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Notranji pomnilnik naprave"</item>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index a9576be..b6ecae6 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -3677,6 +3677,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Brez zvočnega opozarjanja ali vibriranja"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Brez zvočnega opozarjanja ali vibriranja, prikaz nižje v razdelku s pogovorom"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Zvonjenje ali vibriranje je omogočeno na podlagi nastavitev telefona"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Prikaz pod prednostnimi obvestili. Vedno tiho."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Prikaz pod prednostnimi obvestili. Vedno tiho."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Prikaz pod prednostnimi obvestili. Vedno tiho."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Ko je naprava odklenjena, so obvestila prikazana kot pasica na vrhu zaslona"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Vsa obvestila aplikacije »<xliff:g id="APP_NAME">%1$s</xliff:g>«"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Vsa obvestila aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -5128,4 +5131,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Prikaži predvajalnik"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Na voljo ni noben predvajalnik"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"predstavnost"</string>
+    <string name="qtifeedback_settings_title">Povratne informacije o strojni opremi</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Poročilo</string>
 </resources>
diff --git a/res/values-sq/arrays.xml b/res/values-sq/arrays.xml
index 305b072..044847e 100644
--- a/res/values-sq/arrays.xml
+++ b/res/values-sq/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Hapësira e brendshme ruajtëse e pajisjes"</item>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 3f7c3db..366a95f 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Asnjë tingull ose dridhje"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Asnjë tingull ose dridhje dhe shfaqet më poshtë në seksionin e bisedave"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Mund të bjerë zilja ose të dridhet në bazë të cilësimeve të telefonit"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Shfaqet nën njoftimet me përparësi. Gjithmonë në heshtje."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Shfaqet nën njoftimet me përparësi. Gjithmonë në heshtje."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Shfaqet nën njoftimet me përparësi. Gjithmonë në heshtje."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Kur pajisja është e shkyçur, shfaq njoftimet si një banderolë përgjatë kreut të ekranit"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Të gjitha njoftimet e \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Të gjitha njoftimet e <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-sr/arrays.xml b/res/values-sr/arrays.xml
index 97ed707..248ef5e 100644
--- a/res/values-sr/arrays.xml
+++ b/res/values-sr/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Складиште унутрашњег уређаја"</item>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index f26353a..b186ac7 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -3629,6 +3629,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Без звука и вибрирања"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Без звука и вибрирања и приказује се у наставку одељка за конверзације"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Може да звони или вибрира у зависности од подешавања телефона"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Приказује се испод приоритетних обавештења. Увек нечујно."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Приказује се испод приоритетних обавештења. Увек нечујно."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Приказује се испод приоритетних обавештења. Увек нечујно."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Када је уређај откључан, приказује обавештења као банер у врху екрана"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Сва обавештења апликације <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Сва обавештења апликације <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -5037,4 +5040,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Прикажи плејер"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Није доступан ниједан плејер"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"медији"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Прескочи покрет"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Покрет за утишавање обавештења"</string>
+    <string name="qtifeedback_settings_title">Повратне информације о хардверу</string>
+    <string name="qtifeedback_settings_subtitle">Слање извештаја компанији Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-sv/arrays.xml b/res/values-sv/arrays.xml
index ef7ebca..868b3d5 100644
--- a/res/values-sv/arrays.xml
+++ b/res/values-sv/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Lagring på intern enhet"</item>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 2a0c9f5..072123f 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Inga ljud eller vibrationer"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Inga ljud eller vibrationer och visas längre ned bland konversationerna"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Kan ringa eller vibrera beroende på inställningarna på telefonen"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Aviseringar med låg prioritet visas. Alltid tyst."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Aviseringar med låg prioritet visas. Alltid tyst."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Aviseringar med låg prioritet visas. Alltid tyst."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"När enheten är olåst visas aviseringar i en banner högst upp på skärmen"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Alla aviseringar från <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Alla aviseringar från <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Visa spelare"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Det finns inga tillgängliga spelare"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"media"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Hoppa över rörelse"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Rörelse för att stänga av ljudet för aviseringar"</string>
+    <string name="qtifeedback_settings_title">Maskinvara - Feedback</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Rapportering</string>
 </resources>
diff --git a/res/values-sw/arrays.xml b/res/values-sw/arrays.xml
index 53006c7..852828b 100644
--- a/res/values-sw/arrays.xml
+++ b/res/values-sw/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Kifaa cha hifadhi ya ndani"</item>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 0a3e63c..4950cfd 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Hakuna sauti wala mtetemo na huonekana upande wa chini katika sehemu ya mazungumzo"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Huenda ikalia au kutetema kulingana na mipangilio ya simu"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Wakati kifaa kimefunguliwa, onyesha arifa kama bango katika sehemu ya juu ya skrini"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Huonyeshwa chini ya arifa za kipaumbele. Kimya kila wakati."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Huonyeshwa chini ya arifa za kipaumbele. Kimya kila wakati."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Huonyeshwa chini ya arifa za kipaumbele. Kimya kila wakati."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Arifa zote za \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Arifa zote za <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"Arifa Zinazojirekebisha"</string>
@@ -4947,4 +4950,8 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Onyesha kichezaji"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Hakuna vichezaji vinavyopatikana"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"maudhui"</string>
+    <string name="gesture_skip_title" msgid="2092825906479683162">"Ishara ya kuruka"</string>
+    <string name="gesture_silence_title" msgid="8991427657123202574">"Ishara ya kuzima sauti ya arifa"</string>
+    <string name="qtifeedback_settings_title">Maoni ya Maunzi</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Kuripoti</string>
 </resources>
diff --git a/res/values-ta/arrays.xml b/res/values-ta/arrays.xml
index 737d835..55802e1 100644
--- a/res/values-ta/arrays.xml
+++ b/res/values-ta/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"சாதன அகச் சேமிப்பு"</item>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 51d954c..a1f16d2 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"ஒலி / அதிர்வு இல்லை"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"ஒலி / அதிர்வு இல்லாமல் உரையாடல் பிரிவின் கீழ்ப் பகுதியில் தோன்றும்"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"மொபைல் அமைப்புகளின் அடிப்படையில் ஒலிக்கவோ அதிரவோ செய்யும்"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"முக்கியத்துவம் குறைந்த அறிவிப்புகளைக் காட்டும். எப்போதும் நிசப்தம்."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"முக்கியத்துவம் குறைந்த அறிவிப்புகளைக் காட்டும். எப்போதும் நிசப்தம்."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"முக்கியத்துவம் குறைந்த அறிவிப்புகளைக் காட்டும். எப்போதும் நிசப்தம்."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"மொபைல் அன்லாக் செய்யப்பட்ட நிலையிலிருக்கும்போது அறிவிப்புகளைத் திரையின் மேல் பகுதியில் பேனராகக் காட்டும்"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"அனைத்து \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" அறிவிப்புகளும்"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"அனைத்து <xliff:g id="APP_NAME">%1$s</xliff:g> அறிவிப்புகளும்"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"பிளேயரைக் காட்டு"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"பிளேயர்கள் எதுவுமில்லை"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"மீடியா"</string>
+    <string name="qtifeedback_settings_title">வன்பொருள் பின்னூட்டம்</string>
+    <string name="qtifeedback_settings_subtitle"> Qualcomm Technologies, Inc அறிக்கையிடுதல்</string>
 </resources>
diff --git a/res/values-te/arrays.xml b/res/values-te/arrays.xml
index 68d5427..944a735 100644
--- a/res/values-te/arrays.xml
+++ b/res/values-te/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"అంతర్గత పరికర నిల్వ"</item>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 0f52c8f..abb0ac5 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"శబ్దం లేదా వైబ్రేషన్ లేదు, సంభాషణ విభాగం దిగువన కనిపిస్తుంది"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"ఫోన్ సెట్టింగ్‌ల ఆధారంగా రింగ్ లేదా వైబ్రేట్ కావచ్చు"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"ఫోన్‌ను అన్‌లాక్ చేసినప్పుడు స్క్రీన్ పైభాగంలో ఒక‌ బ్యానర్‌గా నోటిఫికేషన్‌లను చూపించు"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"తక్కువ ప్రాధాన్యత గల నోటిఫికేషన్‌లను ప్రదర్శిస్తుంది. ఎల్లప్పుడూ నిశ్శబ్దంగా ఉంచుతుంది."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"తక్కువ ప్రాధాన్యత గల నోటిఫికేషన్‌లను ప్రదర్శిస్తుంది. ఎల్లప్పుడూ నిశ్శబ్దంగా ఉంచుతుంది."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"తక్కువ ప్రాధాన్యత గల నోటిఫికేషన్‌లను ప్రదర్శిస్తుంది. ఎల్లప్పుడూ నిశ్శబ్దంగా ఉంచుతుంది."</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" నోటిఫికేషన్‌లన్నీ"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"అన్ని <xliff:g id="APP_NAME">%1$s</xliff:g> నోటిఫికేషన్‌లు"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"అనుకూల నోటిఫికేషన్‌లు"</string>
@@ -4948,4 +4951,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"ప్లేయర్‌ను చూపించు"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"ప్లేయర్‌లు ఏవీ అందుబాటులో లేవు"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"మీడియా"</string>
+    <string name="qtifeedback_settings_title">హార్డ్‌వేర్ అభిప్రాయం</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc నివేదించడం</string>
 </resources>
diff --git a/res/values-th/arrays.xml b/res/values-th/arrays.xml
index e7549a6..ed1c0bd 100644
--- a/res/values-th/arrays.xml
+++ b/res/values-th/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"ที่จัดเก็บข้อมูลอุปกรณ์ภายใน"</item>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 6f53148..eb686bd 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"ไม่มีเสียงหรือการสั่น"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"ไม่มีเสียงหรือการสั่น และปรากฏต่ำลงมาในส่วนการสนทนา"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"อาจส่งเสียงหรือสั่นโดยขึ้นอยู่กับการตั้งค่าโทรศัพท์"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"แสดงใต้การแจ้งเตือนเรื่องสำคัญ ปิดเสียงตลอดเวลา"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"แสดงใต้การแจ้งเตือนเรื่องสำคัญ ปิดเสียงตลอดเวลา"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"แสดงใต้การแจ้งเตือนเรื่องสำคัญ ปิดเสียงตลอดเวลา"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"เมื่ออุปกรณ์ปลดล็อกอยู่ ให้แสดงการแจ้งเตือนเป็นแบนเนอร์ที่ด้านบนของหน้าจอ"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"การแจ้งเตือนทั้งหมดของ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"การแจ้งเตือนทั้งหมดของ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"แสดงโปรแกรมเล่น"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"ไม่มีโปรแกรมเล่น"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"สื่อ"</string>
+    <string name="qtifeedback_settings_title">ความคิดเห็นเกี่ยวกับฮาร์ดแวร์</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc การรายงาน</string>
 </resources>
diff --git a/res/values-tl/arrays.xml b/res/values-tl/arrays.xml
index a8cef12..afacc3f 100644
--- a/res/values-tl/arrays.xml
+++ b/res/values-tl/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Storage ng panloob na device"</item>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 04b1219..180b42e 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Walang tunog o pag-vibrate"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Walang tunog o pag-vibrate at lumalabas nang mas mababa sa seksyon ng pag-uusap"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Puwedeng mag-ring o mag-vibrate batay sa mga setting ng telepono"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Ipinapakita sa ibaba ng mga priyoridad na notification. Palaging naka-silent."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Ipinapakita sa ibaba ng mga priyoridad na notification. Palaging naka-silent."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Ipinapakita sa ibaba ng mga priyoridad na notification. Palaging naka-silent."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Kapag naka-unlock ang device, ipakita ang mga notification bilang banner sa itaas ng screen"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Lahat ng notification ng \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Lahat ng notification ng <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-tr/arrays.xml b/res/values-tr/arrays.xml
index e193a59..a8ef4b5 100644
--- a/res/values-tr/arrays.xml
+++ b/res/values-tr/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Dahili cihaz depolaması"</item>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 09f2ec5..f03bbc9 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Sessiz veya titreşim yok"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Sessizdir veya titreşim yoktur ve görüşme bölümünün altında görünür"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Telefon ayarlarına bağlı olarak zili çalabilir veya titreyebilir"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Öncelikli bildirimlerin altında gösterilir. Her zaman sessiz."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Öncelikli bildirimlerin altında gösterilir. Her zaman sessiz."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Öncelikli bildirimlerin altında gösterilir. Her zaman sessiz."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Cihaz kilitli değilken, bildirimleri ekranın üst kısmında banner olarak göster"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Tüm \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" bildirimleri"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Tüm <xliff:g id="APP_NAME">%1$s</xliff:g> bildirimleri"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Oynatıcıyı göster"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Kullanılabilir oynatıcı yok"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"medya"</string>
+    <string name="qtifeedback_settings_title">Donanım Geri Bildirimi</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Raporlama</string>
 </resources>
diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml
index ae6d1cf..e42021d 100644
--- a/res/values-uk/arrays.xml
+++ b/res/values-uk/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Внутрішня пам\'ять пристрою"</item>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index af564bb..28a6b34 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -3677,6 +3677,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Без звуку чи вібрації"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Без звуку чи вібрації, з\'являється нижче в розділі розмов"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Може дзвонити або вібрувати залежно від налаштувань телефона"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Показуються під пріоритетними сповіщеннями. Завжди без звуку."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Показуються під пріоритетними сповіщеннями. Завжди без звуку."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Показуються під пріоритетними сповіщеннями. Завжди без звуку."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Коли пристрій розблоковано, показувати сповіщення як банер угорі екрана"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Усі сповіщення додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Усі сповіщення від додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -5128,4 +5131,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Показати програвач"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Немає доступних програвачів"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"медіа"</string>
+    <string name="qtifeedback_settings_title">Відгук про обладнання</string>
+    <string name="qtifeedback_settings_subtitle">Надсилання звітів Qualcomm Technologies, Inc</string>
 </resources>
diff --git a/res/values-ur/arrays.xml b/res/values-ur/arrays.xml
index cee2d51..7b8af20 100644
--- a/res/values-ur/arrays.xml
+++ b/res/values-ur/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"آلہ کا داخلی اسٹوریج"</item>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 3896180..e11e093 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"کوئی آواز یا وائبریشن نہیں"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"کوئی آواز یا وائبریشن نہیں اور گفتگو کے سیکشن میں نیچے ظاہر ہوتا ہے"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"آپ کے آلہ کی ترتیبات کے مطابق وائبریٹ یا گھنٹی بج سکتی ہے"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"کم ترجیحی اطلاعات ڈسپلے کرتا ہے۔ ہمیشہ خاموش۔"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"کم ترجیحی اطلاعات ڈسپلے کرتا ہے۔ ہمیشہ خاموش۔"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"کم ترجیحی اطلاعات ڈسپلے کرتا ہے۔ ہمیشہ خاموش۔"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"آلہ کے غیر مقفل ہو جانے پر، اطلاعات کو اسکرین کے اوپر بینر کے طور پر دکھائيں"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"سبھی \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" کی اطلاعات"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"سبھی <xliff:g id="APP_NAME">%1$s</xliff:g> اطلاعات"</string>
diff --git a/res/values-uz/arrays.xml b/res/values-uz/arrays.xml
index 7b0af94..b0e5dd5 100644
--- a/res/values-uz/arrays.xml
+++ b/res/values-uz/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Ichki xotira qurilmasi"</item>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 2805bca..c63e8f9 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Tovush yoki tebranishsiz"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Tovush yoki tebranishsiz hamda suhbatlar ruknining pastida chiqadi"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Telefon sozlamalari asosida jiringlashi yoki tebranishi mumkin"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Muhimlik darajasi past bildirishnomalarning chiqishi. Doim tovushsiz."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Muhimlik darajasi past bildirishnomalarning chiqishi. Doim tovushsiz."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Muhimlik darajasi past bildirishnomalarning chiqishi. Doim tovushsiz."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Telefon qulfi yechilsa, bildirishnomalar ekranning yuqori qismida banner sifatida chiqsin"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Barcha “<xliff:g id="APP_NAME">%1$s</xliff:g>” bildirishnomalari"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Barcha <xliff:g id="APP_NAME">%1$s</xliff:g> bildirishnomalari"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Pleyerni chiqarish"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Hech qanday pleyer mavjud emas"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"media"</string>
+    <string name="qtifeedback_settings_title">Apparat vositalari javobi</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Hisobot berish</string>
 </resources>
diff --git a/res/values-vi/arrays.xml b/res/values-vi/arrays.xml
index ced3b5a..7f9c85d 100644
--- a/res/values-vi/arrays.xml
+++ b/res/values-vi/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Bộ nhớ trong của thiết bị"</item>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index b81c3d1..a86bf2b 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Không phát âm thanh hoặc rung"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Không phát âm thanh hoặc rung và xuất hiện phía dưới trong phần cuộc trò chuyện"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Có thể đổ chuông hoặc rung tùy theo chế độ cài đặt trên điện thoại"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Hiển thị bên dưới thông báo mức độ ưu tiên. Luôn im lặng."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Hiển thị bên dưới thông báo mức độ ưu tiên. Luôn im lặng."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Hiển thị bên dưới thông báo mức độ ưu tiên. Luôn im lặng."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Hiển thị thông báo ở đầu màn hình khi thiết bị đang mở khóa"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Tất cả các thông báo của ứng dụng \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Tất cả thông báo của <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"Hiện trình phát"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"Không có trình phát nào"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"nội dung nghe nhìn"</string>
+    <string name="qtifeedback_settings_title"> Phản hồi về phần cứng</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Báo cáo</string>
 </resources>
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
index bb96438..43b6b4f 100644
--- a/res/values-zh-rCN/arrays.xml
+++ b/res/values-zh-rCN/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"内部存储设备"</item>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 2c5d432..ae01a03 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -3104,6 +3104,8 @@
     <string name="contact_discovery_opt_in_dialog_message_no_carrier_defined" msgid="1914894516552445911">"系统会定期将您的联系人电话号码发送给您的运营商。<xliff:g id="EMPTY_LINE">
 
 </xliff:g>此信息可用于识别您的联系人能否使用特定功能,例如视频通话或某些消息传递功能。"</string>
+    <!-- Enabled 5G Mode title.  [CHAR LIMIT=50] -->
+    <string name="enabled_5g_mode_title">启用5G</string>
     <string name="preferred_network_type_title" msgid="812509938714590857">"首选网络类型"</string>
     <string name="preferred_network_type_summary" msgid="8786291927331323061">"LTE(推荐)"</string>
     <string name="mms_message_title" msgid="6624505196063391964">"彩信"</string>
@@ -3312,6 +3314,7 @@
     <string name="other_sound_settings" msgid="5468360269346162072">"其他提示音"</string>
     <string name="dial_pad_tones_title" msgid="3536945335367914892">"拨号键盘提示音"</string>
     <string name="screen_locking_sounds_title" msgid="5695030983872787321">"屏幕锁定提示音"</string>
+    <string name="call_connected_tones_title" msgid="1999293510400911558">"通话接通提示音"</string>
     <string name="charging_sounds_title" msgid="5261683808537783668">"充电提示音和振动"</string>
     <string name="docking_sounds_title" msgid="5341616179210436159">"基座提示音"</string>
     <string name="touch_sounds_title" msgid="2200734041857425078">"触摸提示音"</string>
@@ -3581,6 +3584,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"不发出提示音,也不振动"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"不发出提示音,也不振动;显示在对话部分的靠下位置"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"可能会响铃或振动(取决于手机设置)"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"显示在优先通知下方。一律不发出提示音。"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"显示在优先通知下方。一律不发出提示音。"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"显示在优先通知下方。一律不发出提示音。"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"当设备处于解锁状态时,在屏幕顶端以横幅形式显示通知"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"所有“<xliff:g id="APP_NAME">%1$s</xliff:g>”通知"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>的所有通知"</string>
@@ -4652,6 +4658,18 @@
     <string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"默认停用的应用兼容性变更"</string>
     <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"没有可用的应用"</string>
     <string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"只能修改可调试应用的应用兼容性变更。请安装可调试的应用,然后重试。"</string>
+    <!-- apn names for carriers -->
+    <string name="APN_NAME_CMNET">中国移动NET</string>
+    <string name="APN_NAME_CMWAP">中国移动WAP</string>
+    <string name="APN_NAME_CMMMS">中国移动彩信设置</string>
+    <string name="APN_NAME_CUWAP">沃宽带用户手机上网</string>
+    <string name="APN_NAME_CUNET">沃宽带用户连接互联网</string>
+    <string name="APN_NAME_CUMMS">联通彩信</string>
+    <string name="APN_NAME_CUSUPL">联通AGPS</string>
+    <string name="APN_NAME_CTNET">中国电信互联网设置 CTNET</string>
+    <string name="APN_NAME_CTWAP">中国电信WAP设置 CTWAP</string>
+    <string name="APN_NAME_CTLTE">中国电信互联网设置 ctlte</string>
+    <string name="APN_NAME_CTMMS">中国电信彩信设置 CTWAP</string>
     <string name="unsupported_setting_summary" product="default" msgid="1085229417771470172">"此手机不支持这项设置"</string>
     <string name="unsupported_setting_summary" product="tablet" msgid="7402414129786489664">"此平板电脑不支持这项设置"</string>
     <string name="unsupported_setting_summary" product="device" msgid="3422953459122926833">"此设备不支持这项设置"</string>
@@ -4758,6 +4776,7 @@
     <string name="mobile_data_settings_title" msgid="3927524078598009792">"移动数据"</string>
     <string name="mobile_data_settings_summary" msgid="7323978798199919063">"通过移动网络访问数据"</string>
     <string name="mobile_data_settings_summary_auto_switch" msgid="7851549787645698945">"手机会在进入有效范围时自动切换到此运营商"</string>
+    <string name="data_preference">"数据偏好设置"</string>
     <string name="calls_preference" msgid="2166481296066890129">"通话偏好设置"</string>
     <string name="sms_preference" msgid="7742964962568219351">"短信偏好设置"</string>
     <string name="calls_and_sms_ask_every_time" msgid="3178743088737726677">"每次都询问"</string>
@@ -4946,4 +4965,22 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"显示播放器"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"没有可用的播放器"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"媒体"</string>
+    <string name="qtifeedback_settings_title">硬件反馈</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc 报告</string>
+    <string name="ram_total_size">运行内存</string>
+    <string name="rom_total_size">机身存储</string>
+    <string name="software_version">软件版本</string>
+    <string name="model_hardware_summary">"型号:%1$s; 硬件:%2$s"</string>
+    <!-- UPLMN Preference -->
+    <string name="uplmn_list_setting_title">用户控制PLMN</string>
+    <string name="network_id">网络 ID</string>
+    <string name="dialog_network_priority_title">优先级</string>
+    <string name="uplmn_list_setting_add_plmn">新增 PLMN</string>
+    <string name="gsm_umts_network_preferences_title">网络模式</string>
+    <string name="gsm_umts_network_preferences_dialogtitle">网络模式</string>
+    <string name="voicemail_number_not_set">"&lt;未设置&gt;"</string>
+    <string name="reading_settings">"正在读取设置..."</string>
+    <string name="updating_settings">"正在更新设置..."</string>
+    <string name="uplmn_list_setting_summary">"定义PLMN的偏好顺序"</string>
+    <string name="plmn_failure_radio_off">选网失败,原因天线未打开或不可达</string>
 </resources>
diff --git a/res/values-zh-rHK/arrays.xml b/res/values-zh-rHK/arrays.xml
index c4ed3db..3007d61 100644
--- a/res/values-zh-rHK/arrays.xml
+++ b/res/values-zh-rHK/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"內部裝置儲存空間"</item>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 0c5316f..edcb1e9 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -3583,6 +3583,9 @@
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"無音效或震動,並在對話部分的較低位置顯示"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"可能會根據手機設定發出鈴聲或震動"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"裝置處於解鎖狀態時,系統會在螢幕頂部以橫額形式顯示通知"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"顯示不重要的通知。一律靜音。"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"顯示不重要的通知。一律靜音。"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"顯示不重要的通知。一律靜音。"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"所有「<xliff:g id="APP_NAME">%1$s</xliff:g>」通知"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"所有「<xliff:g id="APP_NAME">%1$s</xliff:g>」通知"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"自動調節通知"</string>
@@ -4947,4 +4950,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"顯示播放器"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"沒有可用的播放器"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"媒體"</string>
+    <string name="qtifeedback_settings_title">硬件反饋</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc 報告</string>
 </resources>
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
index eac14e3..7cb7811 100644
--- a/res/values-zh-rTW/arrays.xml
+++ b/res/values-zh-rTW/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"內部裝置儲存空間"</item>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 51b3da7..056c320 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -3581,6 +3581,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"不震動或發出聲音"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"不震動或發出聲音,並顯示在對話部分的下方"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"根據手機的設定響鈴或震動"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"顯示在優先通知下方,且一律不發出音效。"</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"顯示在優先通知下方,且一律不發出音效。"</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"顯示在優先通知下方,且一律不發出音效。"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"裝置處於解鎖狀態時,在螢幕頂端以橫幅形式顯示通知"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"所有「<xliff:g id="APP_NAME">%1$s</xliff:g>」通知"</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」的所有通知"</string>
@@ -4946,4 +4949,6 @@
     <string name="media_controls_show_player" msgid="8504571042365814021">"顯示播放器"</string>
     <string name="media_controls_no_players" msgid="3493023121892175946">"沒有可用的播放器"</string>
     <string name="keywords_media_controls" msgid="8345490568291778638">"媒體"</string>
+    <string name="qtifeedback_settings_title">硬體使用情況回報</string>
+    <string name="qtifeedback_settings_subtitle"> Qualcomm Technologies, Inc 報告</string>
 </resources>
diff --git a/res/values-zu/arrays.xml b/res/values-zu/arrays.xml
index 81a602b..0b0716b 100644
--- a/res/values-zu/arrays.xml
+++ b/res/values-zu/arrays.xml
@@ -213,6 +213,7 @@
     <item msgid="8568003268185342352">"SPN"</item>
     <item msgid="1804537219968457989">"IMSI"</item>
     <item msgid="3441876902463317017">"GID"</item>
+    <item>ICCID</item>
   </string-array>
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Isitoreji sedivaysi yangaphakathi"</item>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 2561a8c..f562a62 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -3582,6 +3582,9 @@
     <string name="notification_channel_summary_low" msgid="5549662596677692000">"Awukho umsindo noma ukudlidliza"</string>
     <string name="notification_conversation_summary_low" msgid="6352818857388412326">"Awukho umsindo noma ukudlidliza futhi ivela ngezansi esigabeni sengxoxo"</string>
     <string name="notification_channel_summary_default" msgid="3674057458265438896">"Ingase ikhale noma idlidlize kuya ngamasethingi wefoni yakho"</string>
+    <string name="notification_channel_summary_low_status" msgid="7866565328564018007">"Ibonisa izaziso ezibalulekile ezingezansi. Ihlala ithulile."</string>
+    <string name="notification_channel_summary_low_lock" msgid="4009247523075328235">"Ibonisa izaziso ezibalulekile ezingezansi. Ihlala ithulile."</string>
+    <string name="notification_channel_summary_low_status_lock" msgid="3668028634045057230">"Ibonisa izaziso ezibalulekile ezingezansi. Ihlala ithulile."</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"Uma idivayisi ivuliwe, bonisa izaziso njengesibhengezo ngaphezulu kwesikrini"</string>
     <string name="notification_switch_label" msgid="8029371325967501557">"Zonke izaziso ze-\"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="notification_app_switch_label" msgid="4422902423925084193">"Zonke izaziso ze-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 1ad3cc3..40cc153 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -293,6 +293,33 @@
         <item>@string/wifi_ap_choose_2G</item>
     </string-array>
 
+   <!-- Wi-Fi AP Vendor band settings.  Either 2.4GHz, 5GHz or Both. -->
+   <!-- Note that adding/removing/moving the items will need wifi settings code change. -->
+    <string-array translatable="false" name="wifi_ap_band_vendor_config_full">
+        <item>1</item>
+        <item>3</item>
+        <item>8</item>
+    </string-array>
+
+    <string-array translatable="false" name="wifi_ap_band_vendor_summary_full">
+        <item>@string/wifi_ap_choose_2G</item>
+        <item>@string/wifi_ap_prefer_5G</item>
+        <item>@string/wifi_ap_choose_vendor_dual_band</item>
+    </string-array>
+
+   <!-- Wi-Fi AP Vendor band settings for OWE Transition mode.  Either 2.4GHz or 5GHz -->
+   <!-- Note: OWE transition mode SAP doesn't support dual band -->
+   <!-- Note: Adding/removing/moving the items will need wifi settings code change. -->
+    <string-array translatable="false" name="wifi_ap_band_vendor_config_no_dual">
+        <item>1</item>
+        <item>2</item>
+    </string-array>
+
+    <string-array translatable="false" name="wifi_ap_band_vendor_summary_no_dual">
+        <item>@string/wifi_ap_choose_2G</item>
+        <item>@string/wifi_ap_choose_5G</item>
+    </string-array>
+
     <!-- Wi-Fi WPS setup for p2p connections.  -->
     <!-- Note that adding/removing/moving the items will need wifi settings code change. -->
     <string-array name="wifi_p2p_wps_setup">
@@ -520,6 +547,7 @@
         <item translatable="false">SPN</item>
         <item translatable="false">IMSI</item>
         <item translatable="false">GID</item>
+        <item translatable="false">ICCID</item>
     </string-array>
 
     <string-array translatable="false" name="mvno_type_values">
@@ -531,6 +559,8 @@
         <item>imsi</item>
         <!-- Do not translate. -->
         <item>gid</item>
+        <!-- Do not translate. -->
+        <item>iccid</item>
     </string-array>
 
     <!-- Apps on SD installation location options in ApplicationSettings -->
@@ -1428,6 +1458,39 @@
     </string-array>
 
 
+    <!-- String arrays for PrimaryCard LW feature -->
+    <string-array name="preferred_network_mode_gsm_wcdma_choices">
+        <item>GSM only</item>
+        <item>WCDMA only</item>
+        <item>GSM/WCDMA preferred</item>
+    </string-array>
+    <string-array name="preferred_network_mode_gsm_wcdma_values" translatable="false">
+        <item>"1"</item>
+        <item>"2"</item>
+        <item>"0"</item>
+    </string-array>
+
+    <string-array name="enabled_networks_gsm_wcdma_choices">
+        <item>@string/network_2G_only</item>
+        <item>@string/network_3G_only</item>
+        <item>@string/network_2G_3G_preferred</item>
+    </string-array>
+    <string-array name="enabled_networks_gsm_wcdma_values" translatable="false">
+        <item>"1"</item>
+        <item>"2"</item>
+        <item>"0"</item>
+    </string-array>
+
+    <!-- String arrays for Subsidy Lock feature -->
+    <string-array name="enabled_networks_subsidy_locked_choices">
+        <item>LTE Only</item>
+        <item>GSM/WCDMA/LTE</item>
+    </string-array>
+    <string-array name="enabled_networks_subsidy_locked_values" translatable="false">
+        <item>"11"</item>
+        <item>"9"</item>
+    </string-array>
+
     <!-- WiFi calling mode array -->
     <string-array name="wifi_calling_mode_summaries" translatable="false">
         <item>@string/wifi_calling_mode_wifi_preferred_summary</item>
@@ -1435,12 +1498,27 @@
         <item>@string/wifi_calling_mode_wifi_only_summary</item>
     </string-array>
 
+    <!-- WiFi calling mode array with ims preferred -->
+    <string-array name="wifi_calling_mode_summaries_with_ims_preferred" translatable="false">
+         <item>@string/wifi_calling_mode_ims_preferred_summary</item>
+         <item>@string/wifi_calling_mode_wifi_preferred_summary</item>
+         <item>@string/wifi_calling_mode_cellular_preferred_summary</item>
+         <item>@string/wifi_calling_mode_wifi_only_summary</item>
+    </string-array>
+
     <!-- WiFi calling mode array without wifi only mode -->
     <string-array name="wifi_calling_mode_summaries_without_wifi_only" translatable="false">
         <item>@string/wifi_calling_mode_wifi_preferred_summary</item>
         <item>@string/wifi_calling_mode_cellular_preferred_summary</item>
     </string-array>
 
+    <!-- WiFi calling mode array without wifi only mode with ims preferred -->
+    <string-array name="wifi_calling_mode_summaries_without_wifi_only_with_ims_preferred" translatable="false">
+         <item>@string/wifi_calling_mode_ims_preferred_summary</item>
+         <item>@string/wifi_calling_mode_wifi_preferred_summary</item>
+         <item>@string/wifi_calling_mode_cellular_preferred_summary</item>
+    </string-array>
+
     <!-- Carrier variant of Enhaced 4G LTE Mode title.  [CHAR LIMIT=NONE] -->
     <string-array name="enhanced_4g_lte_mode_title_variant">
         <!-- 0: Default -->
@@ -1501,4 +1579,31 @@
         <item>@string/rtt_settings_always_visible</item>
     </string-array>
 
+    <!--String arrays for showing user PLMN list -->
+    <string-array name="uplmn_prefer_network_mode_td_choices">
+        <item>GSM</item>
+        <item>TDSCDMA</item>
+        <item>LTE</item>
+        <item>Triple mode</item>
+    </string-array>
+
+    <string-array name="uplmn_prefer_network_mode_w_choices">
+        <item>GSM</item>
+        <item>WCDMA</item>
+        <item>LTE</item>
+        <item>Triple mode</item>
+    </string-array>
+
+    <string-array name="uplmn_prefer_network_mode_values">
+        <item>"0"</item>
+        <item>"1"</item>
+        <item>"2"</item>
+        <item>"3"</item>
+    </string-array>
+
+    <string-array name="uplmn_cu_mcc_mnc_values">
+        <item>"46001"</item>
+        <item>"46006"</item>
+        <item>"46009"</item>
+    </string-array>
 </resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index 746d3e7..30ca525 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -423,6 +423,12 @@
     <!-- Whether or not extra preview panels should be used for screen zoom setting. -->
     <bool name="config_enable_extra_screen_zoom_preview">true</bool>
 
+    <!-- Whether to add AGPS parameter settings -->
+    <bool name="config_agps_enabled">false</bool>
+
+    <!-- Whether to support CT PA requirement or not -->
+    <bool name="config_support_CT_PA">false</bool>
+
     <!-- Slice Uri to query nearby devices. -->
     <string name="config_nearby_devices_slice_uri" translatable="false">content://com.google.android.gms.nearby.fastpair/device_status_list_item</string>
 
@@ -462,4 +468,8 @@
 
     <!-- Whether to show Smooth Display feature in Settings Options -->
     <bool name="config_show_smooth_display">false</bool>
+
+    <!-- Playing tone setting -->
+    <bool name="config_show_connect_tone_ui">false</bool>
+    <integer name="config_default_tone_after_connected">0</integer>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4acfde3..ebd34c8 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -343,6 +343,8 @@
     <string name="connected_device_other_device_title">Other devices</string>
     <!-- Title for connected device group [CHAR LIMIT=none]-->
     <string name="connected_device_saved_title">Saved devices</string>
+    <!-- Title for connected TWS device group [CHAR LIMIT=none]-->
+    <string name="connected_tws_device_saved_title">Saved Earbuds</string>
     <!-- Summary for preference to add a device [CHAR LIMIT=none]-->
     <string name="connected_device_add_device_summary">Bluetooth will turn on to pair</string>
     <!-- Title for other connection preferences [CHAR LIMIT=none]-->
@@ -1718,6 +1720,8 @@
     <string name="wifi_display_settings_title">Cast</string>
     <!-- Wifi Display settings. The keywords of the setting. [CHAR LIMIT=NONE] -->
     <string name="keywords_wifi_display_settings">mirror</string>
+    <!-- Checkbox title for enabling particual wifi as shared -->
+    <string name="share_this_wifi">Extend Wi-Fi coverage</string>
     <!-- Wifi Display settings. The title of a menu item to enable wireless display [CHAR LIMIT=40] -->
     <string name="wifi_display_enable_menu_item">Enable wireless display</string>
     <!-- Wifi Display settings. Text that appears when scanning for devices is finished and no nearby device was found [CHAR LIMIT=40]-->
@@ -1764,6 +1768,8 @@
     <string name="wifi_band_24ghz">2.4 GHz</string>
     <!-- Wifi Internal 5GHz as an universal itendifier for 5GHz band -->
     <string name="wifi_band_5ghz">5 GHz</string>
+    <!-- Wifi Internal 60GHz as an universal identifier for 60GHz band -->
+    <string name="wifi_band_60ghz">60 GHz</string>
     <!-- Wifi Sign in text for button [CHAR LIMIT = 40]-->
     <string name="wifi_sign_in_button_text">Sign in</string>
     <!-- Text for button to go to Wifi venue information webpage when Wifi is a captive portal [CHAR LIMIT=40]-->
@@ -2028,6 +2034,8 @@
     <string name="wifi_ap_choose_2G">2.4 GHz Band</string>
     <!-- Label for the radio button to only choose wifi ap 5GHz band -->
     <string name="wifi_ap_choose_5G">5.0 GHz Band</string>
+    <!-- Label for the radio button to choose both wifi ap band (2.4GHz + 5GHz) -->
+    <string name="wifi_ap_choose_vendor_dual_band">Dual Band</string>
     <!-- Label for the radio button to prefer 5GHz wifi ap band  [CHAR LIMIT=80]-->
     <string name="wifi_ap_prefer_5G">5.0 GHz Band preferred</string>
     <!-- Label for adding to the list of selected bands when 2.4 GHz is selected -->
@@ -2500,28 +2508,61 @@
         <item>@*android:string/wfc_mode_cellular_preferred_summary</item>
         <item>@*android:string/wfc_mode_wifi_only_summary</item>
     </string-array>
+    <string-array name="wifi_calling_mode_choices_with_ims_preferred" translatable="false">
+        <item>@*android:string/wfc_mode_ims_preferred_summary</item>
+        <item>@*android:string/wfc_mode_wifi_preferred_summary</item>
+        <item>@*android:string/wfc_mode_cellular_preferred_summary</item>
+        <item>@*android:string/wfc_mode_wifi_only_summary</item>
+    </string-array>
     <string-array name="wifi_calling_mode_choices_v2">
         <item>Wi-Fi</item>
         <item>Mobile</item>
         <item>Wi-Fi only</item>
     </string-array>
+    <string-array name="wifi_calling_mode_choices_v2_with_ims_preferred">
+        <item>Ims Preferred</item>
+        <item>Wi-Fi</item>
+        <item>Mobile</item>
+        <item>Wi-Fi only</item>
+    </string-array>
     <string-array name="wifi_calling_mode_values" translatable="false">
         <item>"2"</item>
         <item>"1"</item>
         <item>"0"</item>
     </string-array>
+    <string-array name="wifi_calling_mode_values_with_ims_preferred" translatable="false">
+        <item>"10"</item>
+        <item>"2"</item>
+        <item>"1"</item>
+        <item>"0"</item>
+    </string-array>
     <string-array name="wifi_calling_mode_choices_without_wifi_only" translatable="false">
         <item>@*android:string/wfc_mode_wifi_preferred_summary</item>
         <item>@*android:string/wfc_mode_cellular_preferred_summary</item>
     </string-array>
+    <string-array name="wifi_calling_mode_choices_without_wifi_only_with_ims_preferred" translatable="false">
+        <item>@*android:string/wfc_mode_ims_preferred_summary</item>
+        <item>@*android:string/wfc_mode_wifi_preferred_summary</item>
+        <item>@*android:string/wfc_mode_cellular_preferred_summary</item>
+    </string-array>
     <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
         <item>Wi-Fi</item>
         <item>Mobile</item>
     </string-array>
+    <string-array name="wifi_calling_mode_choices_v2_without_wifi_only_with_ims_preferred">
+        <item>Ims Preferred</item>
+        <item>Wi-Fi</item>
+        <item>Mobile</item>
+    </string-array>
     <string-array name="wifi_calling_mode_values_without_wifi_only" translatable="false">
         <item>"2"</item>
         <item>"1"</item>
     </string-array>
+    <string-array name="wifi_calling_mode_values_without_wifi_only_with_ims_preferred" translatable="false">
+        <item>"10"</item>
+        <item>"2"</item>
+        <item>"1"</item>
+    </string-array>
 
     <!-- Summary of WFC preference item on the WFC preference selection dialog. [CHAR LIMIT=70]-->
     <string name="wifi_calling_mode_wifi_preferred_summary">If Wi\u2011Fi is unavailable, use mobile network</string>
@@ -2529,6 +2570,8 @@
     <string name="wifi_calling_mode_cellular_preferred_summary">If mobile network is unavailable, use Wi\u2011Fi</string>
     <!-- Summary of WFC preference item on the WFC preference selection dialog. [CHAR LIMIT=70]-->
     <string name="wifi_calling_mode_wifi_only_summary">Call over Wi\u2011Fi. If Wi\u2011Fi is lost, call will end.</string>
+    <!-- Summary of WFC preference item on the WFC preference selection dialog. [CHAR LIMIT=70]-->
+    <string name="wifi_calling_mode_ims_preferred_summary">If LTE and Wi\u2011Fi are unavailabe, use 2G/3G</string>
 
     <!-- Wi-Fi Calling settings. Text displayed when Wi-Fi Calling is off -->
     <string name="wifi_calling_off_explanation">When Wi-Fi calling is on, your phone can route calls via Wi-Fi networks or your carrier\u2019s network, depending on your preference and which signal is stronger. Before turning on this feature, check with your carrier regarding fees and other details.<xliff:g id="additional_text" example="Learn More">%1$s</xliff:g></string>
@@ -7326,6 +7369,8 @@
          the carrier to determine if your contacts support enhanced features, such as video calling
          and RCS messaging. [CHAR LIMIT=NONE]-->
     <string name="contact_discovery_opt_in_dialog_message_no_carrier_defined">Your contacts\u2019 phone numbers will be periodically sent to your carrier.<xliff:g id="empty_line" example="  ">\n\n</xliff:g>This info identifies whether your contacts can use certain features, like video calls or some messaging features.</string>
+    <!-- Enabled 5G Mode title.  [CHAR LIMIT=50] -->
+    <string name="enabled_5g_mode_title">Enable 5G</string>
     <!-- Preferred network type title.  [CHAR LIMIT=50] -->
     <string name="preferred_network_type_title">Preferred network type</string>
     <!-- Preferred network type summary.  [CHAR LIMIT=100] -->
@@ -7779,6 +7824,9 @@
     <!-- Sound: Other sounds: Title for the option enabling touch sounds for dial pad tones. [CHAR LIMIT=30] -->
     <string name="dial_pad_tones_title">Dial pad tones</string>
 
+    <!-- Sound: Other sounds: Title for the option enabling tones after call connected. [CHAR LIMIT=30] -->
+    <string name="call_connected_tones_title">Call connected tones</string>
+
     <!-- Sound: Other sounds: Title for the option enabling touch sounds for screen locking sounds. [CHAR LIMIT=30] -->
     <string name="screen_locking_sounds_title">Screen locking sound</string>
 
@@ -11266,6 +11314,19 @@
     <!-- UI debug setting: preference summary - describes the behavior of forcing full raw GNSS satellite measurements [CHAR LIMIT=NONE] -->
     <string name="enable_gnss_raw_meas_full_tracking_summary">Track all GNSS constellations and frequencies with no duty cycling</string>
 
+    <!-- apn names for carriers -->
+    <string name="APN_NAME_CMNET">CMNET</string>
+    <string name="APN_NAME_CMWAP">CMWAP</string>
+    <string name="APN_NAME_CMMMS">CMMMS</string>
+    <string name="APN_NAME_CUWAP">China Unicom WAP</string>
+    <string name="APN_NAME_CUNET">China Unicom NET</string>
+    <string name="APN_NAME_CUMMS">China Unicom MMS</string>
+    <string name="APN_NAME_CUSUPL">China Unicom AGPS</string>
+    <string name="APN_NAME_CTNET">CTNET</string>
+    <string name="APN_NAME_CTWAP">CTWAP</string>
+    <string name="APN_NAME_CTLTE">ctlte</string>
+    <string name="APN_NAME_CTMMS">CTWAP</string>
+
     <!-- UI debug setting: preference title - show all crash dialogs [CHAR LIMIT=60] -->
     <string name="show_first_crash_dialog">Always show crash dialog</string>
     <!-- UI debug setting: preference summary - describes the behavior of showing a dialog every time an app crashes [CHAR LIMIT=NONE] -->
@@ -11584,6 +11645,12 @@
     <string name="network_world_mode_cdma_lte" translatable="false">LTE / CDMA</string>
     <!-- Text for Network world mode GSM LTE [CHAR LIMIT=NONE] -->
     <string name="network_world_mode_gsm_lte" translatable="false">LTE / GSM / UMTS</string>
+    <!-- Text for Network 3g only [CHAR LIMIT=NONE] -->
+    <string name="network_2G_3G_preferred" translatable="false">2G/3G preferred</string>
+    <!-- Text for Network 3g only [CHAR LIMIT=NONE] -->
+    <string name="network_3G_only" translatable="false">3G only</string>
+    <!-- Text for Network 2g only [CHAR LIMIT=NONE] -->
+    <string name="network_2G_only" translatable="false">2G only</string>
 
     <!-- Available networks screen title/heading [CHAR LIMIT=NONE] -->
     <string name="label_available">Available networks</string>
@@ -11617,6 +11684,9 @@
     </string>
 
     <!-- Mobile network settings screen, title of item showing the name of the default subscription
+    that will be used for data. This only appears in multi-SIM mode. [CHAR LIMIT=NONE] -->
+    <string name="data_preference">Data preference</string>
+    <!-- Mobile network settings screen, title of item showing the name of the default subscription
      that will be used for calls. This only appears in multi-SIM mode. [CHAR LIMIT=NONE] -->
     <string name="calls_preference">Calls preference</string>
     <!-- Mobile network settings screen, title of item showing the name of the default subscription
@@ -11807,6 +11877,13 @@
     <!-- Available networks screen, summary when button disallowed due to permanent automatic mode [CHAR LIMIT=NONE] -->
     <string name="manual_mode_disallowed_summary">Unavailable when connected to <xliff:g id="carrier" example="verizon">%1$s</xliff:g></string>
 
+    <string name="select_sim_card">Select SIM card</string>
+    <string name="qtifeedback_settings_title">Hardware Feedback</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Reporting</string>
+    <string name="qtifeedback_intent_action">com.qti.smq.snapdragonSettings</string>
+    <string name="qtifeedback_package">com.qti.smq.Feedback</string>
+    <string name="qtifeedback_activity">com.qti.smq.ui.QtiFeedbackActivity</string>
+
     <!-- See more items in contextual homepage [CHAR LIMIT=30]-->
     <string name="see_more">See more</string>
     <!-- See less items in contextual homepage [CHAR LIMIT=30]-->
@@ -11893,6 +11970,8 @@
     <!-- Summary for low storage slice. [CHAR LIMIT=NONE] -->
     <string name="low_storage_summary">Storage is low. <xliff:g id="percentage" example="54%">%1$s</xliff:g> used - <xliff:g id="free_space" example="32GB">%2$s</xliff:g> free</string>
 
+    <string name="reset_default_apn_failed">Failed to reset default apn</string>
+
     <!-- Label for button in contextual card feedback dialog for users to send feedback [CHAR LIMIT=30] -->
     <string name="contextual_card_feedback_send">Send feedback</string>
     <!-- String for contextual card feedback dialog [CHAR LIMIT=NONE] -->
@@ -11951,6 +12030,11 @@
     <!-- Warn the user that the phone may share its location with the service provider. [CHAR LIMIT=NONE] -->
     <string name="wfc_disclaimer_location_desc_text">Your service provider may collect your location in order to provide this service.\n\nPlease review your service provider\u2019s privacy policy.</string>
 
+    <!-- String for about phone -->
+    <string name="ram_total_size">RAM total size</string>
+    <string name="rom_total_size">ROM total size</string>
+    <string name="software_version">Software version</string>
+    <string name="model_hardware_summary">Model&#58;%1$s; Hardware&#58;%2$s</string>
     <!-- Message for forget passpoint dialog [CHAR LIMIT=none] -->
     <string name="forget_passpoint_dialog_message">You may lose access to any remaining time or data. Check with your provider before removing.</string>
 
@@ -12109,6 +12193,19 @@
     <!-- Subtext for showing the option of RTT setting. [CHAR LIMIT=NONE] -->
     <string name="rtt_settings_always_visible"></string>
 
+    <!-- Strings for user PLMN setting. [CHAR LIMIT=NONE] -->
+    <string name="uplmn_settings_title">User Controlled PLMN</string>
+    <string name="network_id">Network ID</string>
+    <string name="dialog_network_priority_title">Priority</string>
+    <string name="uplmn_list_setting_add_plmn">New PLMN</string>
+    <string name="gsm_umts_network_preferences_title">Network Mode</string>
+    <string name="gsm_umts_network_preferences_dialogtitle">Network Mode</string>
+    <string name="voicemail_number_not_set">&lt;Not set&gt;</string>
+    <string name="reading_settings">Reading settings\u2026</string>
+    <string name="updating_settings">Updating settings\u2026</string>
+    <string name="uplmn_settings_summary">Define the preferred PLMNs in priority order</string>
+    <string name="plmn_failure_radio_off">Selecting network failure due to radio OFF or unavailable</string>
+
     <!-- Button label to stop casting on media device. [CHAR LIMIT=40 -->
     <string name="media_output_panel_stop_casting_button">Stop casting</string>
 
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index e7e3c2c..644ce03 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -36,6 +36,11 @@
         android:title="@string/connected_device_other_device_title"
         settings:controller="com.android.settings.connecteddevice.ConnectedDeviceGroupController"/>
 
+    <PreferenceCategory
+        android:key="saved_tws_device_list"
+        android:title="@string/connected_tws_device_saved_title"
+        settings:controller="com.android.settings.connecteddevice.SavedTwsDeviceGroupController"/>
+
     <com.android.settingslib.RestrictedPreference
         android:key="add_bt_devices"
         android:title="@string/bluetooth_pairing_pref_title"
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index 746a51c..547a1c1 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -278,6 +278,11 @@
             android:summary="@string/wifi_display_certification_summary" />
 
         <SwitchPreference
+            android:key="wifi_coverage_extend"
+            android:title="@string/wifi_coverage_extend"
+            android:summary="@string/wifi_coverage_extend_summary" />
+
+        <SwitchPreference
             android:key="wifi_verbose_logging"
             android:title="@string/wifi_verbose_logging"
             android:summary="@string/wifi_verbose_logging_summary" />
diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml
index fb03f4c..36c72ec 100644
--- a/res/xml/location_settings.xml
+++ b/res/xml/location_settings.xml
@@ -33,6 +33,12 @@
         android:fragment="com.android.settings.location.RecentLocationRequestSeeAllFragment"
         settings:searchable="false"/>
 
+            <CheckBoxPreference
+                android:key="assisted_gps"
+                android:title="@string/assisted_gps"
+                android:summaryOn="@string/assisted_gps_enabled"
+                android:summaryOff="@string/assisted_gps_disabled"
+                settings:controller="com.android.settings.location.AgpsPreferenceController"/>
     <PreferenceCategory
         android:key="location_advanced_settings"
         android:layout="@layout/preference_category_no_label"
diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml
old mode 100644
new mode 100755
index f025f70..556a677
--- a/res/xml/mobile_network_settings.xml
+++ b/res/xml/mobile_network_settings.xml
@@ -37,10 +37,15 @@
             android:selectable="false"/>
 
         <ListPreference
+            android:key="data_preference"
+            android:title="@string/data_preference"
+            settings:controller="com.android.settings.network.telephony.DataDefaultSubscriptionController"
+            settings:allowDividerAbove="true"/>
+
+        <ListPreference
             android:key="calls_preference"
             android:title="@string/calls_preference"
-            settings:controller="com.android.settings.network.telephony.CallsDefaultSubscriptionController"
-            settings:allowDividerAbove="true"/>
+            settings:controller="com.android.settings.network.telephony.CallsDefaultSubscriptionController"/>
 
         <ListPreference
             android:key="sms_preference"
@@ -107,7 +112,6 @@
             android:summary="@string/enhanced_4g_lte_mode_summary_4g_calling"
             settings:keywords="@string/keywords_enhance_4g_lte"
             settings:controller="com.android.settings.network.telephony.Enhanced4gCallingPreferenceController"/>
-
         <SwitchPreference
             android:key="advance_call"
             android:title="@string/enhanced_4g_lte_mode_title_advanced_calling"
@@ -115,6 +119,11 @@
             android:summary="@string/enhanced_4g_lte_mode_summary"
             settings:keywords="@string/keywords_enhance_4g_lte"
             settings:controller="com.android.settings.network.telephony.Enhanced4gAdvancedCallingPreferenceController"/>
+        <SwitchPreference
+            android:key="enabled_5g"
+            android:title="@string/enabled_5g_mode_title"
+            android:persistent="true"
+            settings:controller="com.android.settings.network.telephony.Enabled5GPreferenceController"/>
 
         <SwitchPreference
             android:key="contact_discovery_opt_in"
@@ -172,7 +181,6 @@
                 android:title="@string/video_calling_settings_title"
                 android:persistent="true"
                 settings:controller="com.android.settings.network.telephony.VideoCallingPreferenceController"/>
-
         </PreferenceCategory>
 
         <com.android.settings.network.telephony.cdma.CdmaListPreference
@@ -218,6 +226,15 @@
             settings:allowDividerAbove="true"
             settings:controller="com.android.settings.network.telephony.ApnPreferenceController"/>
 
+        <PreferenceScreen
+            android:key="uplmn_settings_key"
+            android:persistent="false"
+            android:title="@string/uplmn_settings_title"
+            android:summary="@string/uplmn_settings_summary"
+            settings:allowDividerAbove="true"
+            settings:controller="com.android.settings.network.telephony.UserPLMNPreferenceController">
+        </PreferenceScreen>
+
         <Preference
             android:key="carrier_settings_key"
             android:title="@string/carrier_settings_title"
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index 5e5fab3..10613f7 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -203,4 +203,22 @@
         settings:enableCopying="true"
         settings:controller="com.android.settings.deviceinfo.BuildNumberPreferenceController"/>
 
+    <!-- Software version -->
+    <Preference
+        android:key="software_version"
+        android:order="44"
+        android:title="@string/software_version"
+        android:summary="@string/summary_placeholder"
+        android:selectable="false"
+        settings:enableCopying="true"/>
+
+    <!-- Storage size, including two items: ROM and RAM total size -->
+    <Preference
+        android:key="key_storage_total_size"
+        android:order="45"
+        android:title="@string/ram_total_size"
+        android:summary="@string/summary_placeholder"
+        android:selectable="false"
+        settings:allowDividerAbove="true"
+        settings:enableCopying="true"/>
 </PreferenceScreen>
diff --git a/res/xml/other_sound_settings.xml b/res/xml/other_sound_settings.xml
index 7b3f362..d0ddc22 100644
--- a/res/xml/other_sound_settings.xml
+++ b/res/xml/other_sound_settings.xml
@@ -24,6 +24,11 @@
             android:key="dial_pad_tones"
             android:title="@string/dial_pad_tones_title" />
 
+    <!-- Call connected tones -->
+    <SwitchPreference
+            android:key="call_connected_tones"
+            android:title="@string/call_connected_tones_title" />
+
     <!-- Screen locking sounds -->
     <SwitchPreference
             android:key="screen_locking_sounds"
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index fc5c3e2..a1b422c 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -165,6 +165,11 @@
           android:key="dial_pad_tones"
           android:title="@string/dial_pad_tones_title"/>
 
+        <!-- Call connected tones -->
+        <SwitchPreference
+          android:key="call_connected_tones"
+          android:title="@string/call_connected_tones_title" />
+
         <!-- Screen locking sounds -->
         <SwitchPreference
           android:key="screen_locking_sounds"
diff --git a/res/xml/uplmn_editor.xml b/res/xml/uplmn_editor.xml
new file mode 100755
index 0000000..30199d1
--- /dev/null
+++ b/res/xml/uplmn_editor.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2020, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+        android:title="@string/uplmn_settings_title">
+    <Preference
+        android:title="@string/network_id"
+        android:key="network_id_key" />
+    <EditTextPreference
+        android:title="@string/dialog_network_priority_title"
+        android:dialogTitle="@string/dialog_network_priority_title"
+        android:key="priority_key"
+        android:singleLine="true"
+        android:inputType="number" />
+    <ListPreference
+        android:title="@string/gsm_umts_network_preferences_title"
+        android:dialogTitle="@string/gsm_umts_network_preferences_dialogtitle"
+        android:key="network_mode_key"
+        android:entries="@array/uplmn_prefer_network_mode_td_choices"
+        android:entryValues="@array/uplmn_prefer_network_mode_values" />
+</PreferenceScreen>
diff --git a/res/xml/uplmn_settings.xml b/res/xml/uplmn_settings.xml
new file mode 100755
index 0000000..dfca655
--- /dev/null
+++ b/res/xml/uplmn_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (c) 2020, The Linux Foundation. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of The Linux Foundation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:title="@string/uplmn_settings_title"
+    android:key="button_uplmn_list_key"
+    android:persistent="false">
+</PreferenceScreen>
diff --git a/src/com/android/settings/AllInOneTetherSettings.java b/src/com/android/settings/AllInOneTetherSettings.java
index ed3b5b0..a3a3c2a 100644
--- a/src/com/android/settings/AllInOneTetherSettings.java
+++ b/src/com/android/settings/AllInOneTetherSettings.java
@@ -355,7 +355,18 @@
     @Override
     public void onTetherConfigUpdated(AbstractPreferenceController controller) {
         final SoftApConfiguration config = buildNewConfig();
+        boolean bandEntriesChanged = false;
         mPasswordPreferenceController.updateVisibility(config.getSecurityType());
+
+        if (mApBandPreferenceController.isVendorDualApSupported()
+                && mSecurityPreferenceController.isOweSapSupported()) {
+            if ((config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_OWE)
+                    == (mApBandPreferenceController.isBandEntriesHasDualband())) {
+                mApBandPreferenceController.updatePreferenceEntries(config);
+                bandEntriesChanged = true;
+            }
+        }
+
         mWifiManager.setSoftApConfiguration(config);
 
         if (mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED) {
@@ -365,18 +376,24 @@
             mRestartWifiApAfterConfigChange = true;
             mTetherEnabler.stopTethering(TETHERING_WIFI);
         }
+
+        if (bandEntriesChanged)
+            mApBandPreferenceController.updateDisplay();
     }
 
     private SoftApConfiguration buildNewConfig() {
         final SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();
         final int securityType = mSecurityPreferenceController.getSecurityType();
+        final int band = mApBandPreferenceController.getBandIndex();
         configBuilder.setSsid(mSSIDPreferenceController.getSSID());
-        if (securityType == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK) {
-            configBuilder.setPassphrase(
-                    mPasswordPreferenceController.getPasswordValidated(securityType),
-                    SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
+        configBuilder.setPassphrase(mPasswordPreferenceController.getPasswordValidated(securityType),
+                                    securityType);
+        if (securityType == SoftApConfiguration.SECURITY_TYPE_OWE
+                && band == SoftApConfiguration.BAND_DUAL) {
+            configBuilder.setBand(SoftApConfiguration.BAND_2GHZ);
+        } else {
+            configBuilder.setBand(band);
         }
-        configBuilder.setBand(mApBandPreferenceController.getBandIndex());
         return configBuilder.build();
     }
 
diff --git a/src/com/android/settings/DBReadAsyncTask.java b/src/com/android/settings/DBReadAsyncTask.java
new file mode 100644
index 0000000..6cb5429
--- /dev/null
+++ b/src/com/android/settings/DBReadAsyncTask.java
@@ -0,0 +1,108 @@
+/*
+Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.settings;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.AsyncTask;
+
+public class DBReadAsyncTask extends AsyncTask<Void, Void, Boolean> {
+
+    /**
+     * SMQ preferences key.
+     */
+    public static final String SMQ_KEY_VALUE = "app_status";
+
+    /**
+     * The authority of the provider.
+     */
+    public static final String AUTHORITY = "com.qti.smq.Feedback.provider";
+    /**
+     * The content URI.
+     */
+    final  Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
+    /**
+     * The Content URI for this table.
+     */
+    final Uri SNAP_CONTENT_URI = Uri.withAppendedPath(
+            CONTENT_URI, "smq_settings");
+
+    Context mContext;
+
+    public static final String KEY_VALUE = "app_status";
+
+    public DBReadAsyncTask(Context mContext) {
+        super();
+        this.mContext = mContext;
+    }
+
+    @Override
+    protected Boolean doInBackground(final Void... params) {
+        final String whereClause = "key" + "=?";
+        final String[] selectionArgs = { KEY_VALUE };
+
+        final Cursor c = mContext.getContentResolver().query(
+                SNAP_CONTENT_URI, null, whereClause,
+                selectionArgs, null);
+        final SharedPreferences sharedPreferences = mContext
+                    .getSharedPreferences(SmqSettings.SMQ_PREFS_NAME, Context.MODE_PRIVATE);
+
+        if (c!= null && c.getCount() > 0) {
+            c.moveToFirst();
+            final int value = c.getInt(1);
+
+            final int appStatus = sharedPreferences.getInt(KEY_VALUE, 0);
+            if (appStatus == value) {
+                // Do nothing
+            } else {
+                //Save preference and notify.
+                final SharedPreferences.Editor editor = sharedPreferences.edit();
+                editor.putInt(KEY_VALUE, value);
+                editor.commit();
+
+            }
+
+        }
+        else{
+            //No such table. don't show menu.
+            final SharedPreferences.Editor editor = sharedPreferences.edit();
+                editor.putInt(KEY_VALUE, 0);
+                editor.commit();
+        }
+        if(c != null){
+            c.close();
+        }
+
+        return true;
+    }
+
+}
\ No newline at end of file
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index 77cc03e..1a1a87b 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -331,6 +331,11 @@
         final SubscriptionInfo sir = getVisibleSubscriptionInfoForSimSlotIndex(mSlotId);
         final int subId = (sir != null) ? sir.getSubscriptionId()
                 : SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+        mTelephonyManager =  mTelephonyManager.createForSubscriptionId(mSubId);
+
+        int cardState = mTelephonyManager.getSimState();
+        boolean canInteract = cardState == TelephonyManager.SIM_STATE_READY ||
+            cardState == TelephonyManager.SIM_STATE_LOADED;
 
         if (mSubId != subId) {
             mSubId = subId;
@@ -341,10 +346,10 @@
         }
 
         if (mPinDialog != null) {
-            mPinDialog.setEnabled(sir != null);
+            mPinDialog.setEnabled(sir != null && canInteract);
         }
         if (mPinToggle != null) {
-            mPinToggle.setEnabled(sir != null);
+            mPinToggle.setEnabled(sir != null && canInteract);
 
             if (sir != null) {
                 mPinToggle.setChecked(isIccLockEnabled());
diff --git a/src/com/android/settings/ResetNetworkConfirm.java b/src/com/android/settings/ResetNetworkConfirm.java
index 6856a5a..6e2e898 100644
--- a/src/com/android/settings/ResetNetworkConfirm.java
+++ b/src/com/android/settings/ResetNetworkConfirm.java
@@ -19,6 +19,7 @@
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
 import android.app.Activity;
+import android.app.AlertDialog;
 import android.app.ProgressDialog;
 import android.app.settings.SettingsEnums;
 import android.bluetooth.BluetoothAdapter;
@@ -45,12 +46,13 @@
 import android.widget.Toast;
 
 import androidx.annotation.VisibleForTesting;
-import androidx.appcompat.app.AlertDialog;
 
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
 import com.android.settings.network.ApnSettings;
 import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
 /**
  * Confirm and execute a reset of the network settings to a clean "just out of the box"
@@ -121,6 +123,13 @@
                 BluetoothAdapter btAdapter = btManager.getAdapter();
                 if (btAdapter != null) {
                     btAdapter.factoryReset();
+                    LocalBluetoothManager mLocalBtManager =
+                                      LocalBluetoothManager.getInstance(mContext, null);
+                    if (mLocalBtManager != null) {
+                        CachedBluetoothDeviceManager cachedDeviceManager =
+                                            mLocalBtManager.getCachedDeviceManager();
+                        cachedDeviceManager.clearAllDevices();
+                    }
                 }
             }
 
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 2f23c84..7c886df 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -37,6 +37,7 @@
     public static class CreateShortcutActivity extends SettingsActivity { /* empty */ }
     public static class FaceSettingsActivity extends SettingsActivity { /* empty */ }
     public static class FingerprintSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class SimSettingsActivity extends SettingsActivity { /* empty */ }
     public static class TetherSettingsActivity extends SettingsActivity {
         // TODO(b/147675042): Clean the override up when we enable the new Fragment persistently.
         @Override
@@ -234,6 +235,8 @@
     public static class StorageDashboardActivity extends SettingsActivity {}
     public static class AccountDashboardActivity extends SettingsActivity {}
     public static class SystemDashboardActivity extends SettingsActivity {}
+    public static class SupportDashboardActivity extends SettingsActivity {}
+    public static class SMQQtiFeedbackActivity extends SettingsActivity { /* empty */ }
 
     /**
      * Activity for MediaControlsSettings
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 1c2952a..bfec3be 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -33,6 +33,8 @@
 import android.graphics.drawable.Icon;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.text.TextUtils;
@@ -60,6 +62,7 @@
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.homepage.TopLevelSettings;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.Utils;
 import com.android.settings.wfd.WifiDisplaySettings;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.core.instrumentation.Instrumentable;
@@ -72,6 +75,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.codeaurora.internal.IExtTelephony;
+
 
 public class SettingsActivity extends SettingsBaseActivity
         implements PreferenceManager.OnPreferenceTreeClickListener,
@@ -153,6 +158,7 @@
 
     private CharSequence mInitialTitle;
     private int mInitialTitleResId;
+    private SmqSettings mSMQ;
 
     private BroadcastReceiver mDevelopmentSettingsListener;
 
@@ -245,6 +251,8 @@
             getWindow().setUiOptions(intent.getIntExtra(EXTRA_UI_OPTIONS, 0));
         }
 
+        mSMQ = new SmqSettings(getApplicationContext());
+
         // Getting Intent properties can only be done after the super.onCreate(...)
         final String initialFragmentName = intent.getStringExtra(EXTRA_SHOW_FRAGMENT);
 
@@ -569,7 +577,29 @@
      */
     private Fragment switchToFragment(String fragmentName, Bundle args, boolean validate,
             int titleResId, CharSequence title) {
+        if (fragmentName.equals(getString(R.string.qtifeedback_intent_action))){
+             final Intent newIntent = new Intent(getString(R.string.qtifeedback_intent_action));
+             newIntent.addCategory("android.intent.category.DEFAULT");
+             startActivity(newIntent);
+             finish();
+             return null;
+        }
+
         Log.d(LOG_TAG, "Switching to fragment " + fragmentName);
+
+        if (fragmentName.equals("com.android.settings.sim.SimSettings")) {
+            if(Utils.isSimSettingsApkAvailable()) {
+                Log.i(LOG_TAG, "switchToFragment, launch simSettings");
+                Intent provisioningIntent =
+                        new Intent("com.android.settings.sim.SIM_SUB_INFO_SETTINGS");
+                if (!getPackageManager().queryIntentActivities(provisioningIntent, 0).isEmpty()) {
+                    startActivity(provisioningIntent);
+                }
+            }
+            finish();
+            return null;
+        }
+
         if (validate && !isValidFragment(fragmentName)) {
             throw new IllegalArgumentException("Invalid fragment for this activity: "
                     + fragmentName);
@@ -611,6 +641,10 @@
                 pm.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH), isAdmin)
                 || somethingChanged;
 
+        if(mSMQ.isShowSmqSettings()){
+            somethingChanged = setTileEnabled(changedList, new ComponentName(packageName, Settings.SMQQtiFeedbackActivity.class.getName()), mSMQ.isShowSmqSettings(), isAdmin) || somethingChanged;
+        }
+
         // Enable DataUsageSummaryActivity if the data plan feature flag is turned on otherwise
         // enable DataPlanUsageSummaryActivity.
         somethingChanged = setTileEnabled(changedList,
@@ -625,6 +659,11 @@
                 isAdmin) || somethingChanged;
 
         somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
+                        Settings.SimSettingsActivity.class.getName()),
+                Utils.showSimCardTile(this), isAdmin)
+                || somethingChanged;
+
+        somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
                         Settings.PowerUsageSummaryActivity.class.getName()),
                 mBatteryPresent, isAdmin) || somethingChanged;
 
diff --git a/src/com/android/settings/SmqSettings.java b/src/com/android/settings/SmqSettings.java
new file mode 100644
index 0000000..65f8703
--- /dev/null
+++ b/src/com/android/settings/SmqSettings.java
@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2017, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.android.settings;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+public class SmqSettings {
+
+    /**
+     * The application context.
+     */
+    private Context mContext;
+    private SharedPreferences mSmqPreferences;
+
+    /**
+     * SMQ preferences key.
+     */
+    public static final String SMQ_KEY_VALUE = "app_status";
+
+    /**
+     * Shared preferences name.
+     */
+    public static final String SMQ_PREFS_NAME = "smqpreferences";
+
+    public SmqSettings(final Context context) {
+        mContext = context;
+        new DBReadAsyncTask(mContext).execute();
+        mSmqPreferences = mContext.getSharedPreferences(
+                SMQ_PREFS_NAME, Context.MODE_PRIVATE);
+    }
+
+    public boolean isShowSmqSettings() {
+        final int iShowSmq = mSmqPreferences.getInt(SMQ_KEY_VALUE, 0);
+        final boolean showSmq = iShowSmq > 0 ? true : false;
+        return showSmq;
+    }
+
+}
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
old mode 100644
new mode 100755
index 0325842..f389b4b
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -149,7 +149,7 @@
 
         final Activity activity = getActivity();
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        if (adapter != null) {
+        if (adapter != null && adapter.getState() == BluetoothAdapter.STATE_ON) {
             adapter.getProfileProxy(activity.getApplicationContext(), mProfileServiceListener,
                     BluetoothProfile.PAN);
         }
@@ -263,12 +263,20 @@
                 mUsbConnected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false);
                 updateState();
             } else if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
+                int status = intent
+                        .getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
                 if (mBluetoothEnableForTether) {
-                    switch (intent
-                            .getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)) {
+                    switch (status) {
                         case BluetoothAdapter.STATE_ON:
                             startTethering(TETHERING_BLUETOOTH);
                             mBluetoothEnableForTether = false;
+                            if (mBluetoothPan.get() == null) {
+                                BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+                                if (adapter != null) {
+                                    adapter.getProfileProxy(getActivity().getApplicationContext(),
+                                            mProfileServiceListener, BluetoothProfile.PAN);
+                                }
+                            }
                             break;
 
                         case BluetoothAdapter.STATE_OFF:
@@ -279,7 +287,20 @@
                         default:
                             // ignore transition states
                     }
+                } else {
+                    switch (status) {
+                        case BluetoothAdapter.STATE_ON:
+                            if (mBluetoothPan.get() == null) {
+                                BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+                                if (adapter != null) {
+                                    adapter.getProfileProxy(getActivity().getApplicationContext(),
+                                            mProfileServiceListener, BluetoothProfile.PAN);
+                                }
+                            }
+                            break;
+                    }
                 }
+
                 updateState();
             }
         }
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 64919d9..0bb3613 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -45,6 +45,7 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.NotFoundException;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -68,6 +69,7 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.os.storage.StorageManager;
+import android.os.SystemProperties;
 import android.os.storage.VolumeInfo;
 import android.preference.PreferenceFrameLayout;
 import android.provider.ContactsContract.CommonDataKinds;
@@ -75,6 +77,9 @@
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Profile;
 import android.provider.ContactsContract.RawContacts;
+import android.provider.Settings;
+import android.provider.Telephony;
+import android.service.persistentdata.PersistentDataBlockManager;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.text.Spannable;
@@ -115,6 +120,8 @@
 import java.util.List;
 import java.util.Locale;
 
+import org.codeaurora.internal.IExtTelephony;
+
 public final class Utils extends com.android.settingslib.Utils {
 
     private static final String TAG = "Settings";
@@ -130,6 +137,14 @@
 
     public static final String OS_PKG = "os";
 
+    public static final String KEY_SOFTWARE_VERSION = "ext_meta_software_version";
+    public static final String KEY_MODEL = "ext_model_name_from_meta";
+    public static final String KEY_HARDWARE_VERSION = "ext_hardware_version";
+    public static final String KEY_WIFI_MAC_ADDRESS = "ext_wifi_mac_address";
+    public static final String KEY_DEVICE_NAME = "ext_device_name";
+    public static final String KEY_ROM_TOTAL_SIZE = "ext_rom_total_size";
+    public static final String KEY_RAM_TOTAL_SIZE = "ext_ram_total_size";
+
     /**
      * Whether to disable the new device identifier access restrictions.
      */
@@ -860,6 +875,17 @@
     }
 
     /**
+     * Return whether or not the user should have a SIM Cards option in Settings.
+     */
+    public static boolean showSimCardTile(Context context) {
+        boolean isPrimaryCardEnabled = SystemProperties.getBoolean(
+                "persist.vendor.radio.primarycard", false);
+        final TelephonyManager tm =
+                (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+        return isPrimaryCardEnabled && (tm.getSimCount() > 1);
+    }
+
+    /**
      * Tries to initalize a volume with the given bundle. If it is a valid, private, and readable
      * {@link VolumeInfo}, it is returned. If it is not valid, null is returned.
      */
@@ -1030,6 +1056,105 @@
         return false;
     }
 
+    public static String getLocalizedName(Context context, String resName) {
+        if(context == null){
+           return null;
+        }
+        // If can find a localized name, replace the APN name with it
+        String localizedName = null;
+        if (resName != null && !resName.isEmpty()) {
+            int resId = context.getResources().getIdentifier(resName, "string",
+                    context.getPackageName());
+            if(resId > 0){
+                try {
+                    localizedName = context.getResources().getString(resId);
+                    Log.d(TAG, "Replaced apn name with localized name");
+                } catch (NotFoundException e) {
+                    Log.e(TAG, "Got execption while getting the localized apn name.", e);
+                }
+            }
+        }
+        return localizedName;
+    }
+
+    public static boolean carrierTableFieldValidate(String field){
+        if(field == null)
+            return false;
+        if(Telephony.Carriers.AUTH_TYPE.equalsIgnoreCase(field)
+                || Telephony.Carriers.SUBSCRIPTION_ID.equalsIgnoreCase(field))
+            return true;
+        field = field.toUpperCase();
+        Class clazz = Telephony.Carriers.class;
+        try{
+            clazz.getDeclaredField(field);
+        }catch(NoSuchFieldException e){
+            Log.w(TAG, field + "is not a valid field in class Telephony.Carriers");
+            return false;
+        }
+        return true;
+     }
+
+    /**
+     * Checks whether SimSettings apk exists on the device. If yes, returns true, else
+     * returns false.
+     */
+    public static boolean isSimSettingsApkAvailable() {
+        IExtTelephony extTelephony =
+                IExtTelephony.Stub.asInterface(ServiceManager.getService("qti.radio.extphone"));
+        try {
+            if (extTelephony != null &&
+                    extTelephony.isVendorApkAvailable("com.qualcomm.qti.simsettings")) {
+                return true;
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Got exception in isSimSettingsApkAvailable.", e);
+        }
+        return false;
+    }
+
+    /**
+     * check whether NetworkSetting apk exist in system, if yes, return true, else
+     * return false.
+     */
+    public static boolean isNetworkSettingsApkAvailable() {
+        // check whether the target handler exist in system
+        IExtTelephony extTelephony =
+                IExtTelephony.Stub.asInterface(ServiceManager.getService("qti.radio.extphone"));
+        try {
+            if (extTelephony != null &&
+                    extTelephony.isVendorApkAvailable("com.qualcomm.qti.networksetting")) {
+                // Use Vendor NetworkSetting to handle the selection intent
+                return true;
+            }
+        } catch (RemoteException e) {
+            // Use aosp NetworkSetting to handle the selection intent
+            Log.e(TAG, "Got exception in isNetworkSettingsApkAvailable.", e);
+        }
+        return false;
+    }
+
+    public static boolean isAdvancedPlmnScanSupported() {
+        boolean propVal = false;
+        IExtTelephony extTelephony = IExtTelephony.Stub
+                .asInterface(ServiceManager.getService("qti.radio.extphone"));
+        try {
+            propVal = extTelephony
+                    .getPropertyValueBool("persist.vendor.radio.enableadvancedscan", true);
+        } catch (RemoteException | NullPointerException ex) {
+            Log.e(TAG, "isAdvancedPlmnScanSupported Exception: ", ex);
+        }
+        return propVal;
+    }
+
+    public static boolean isSupportCTPA(Context context) {
+        Context appContext = context.getApplicationContext();
+        return appContext.getResources().getBoolean(R.bool.config_support_CT_PA);
+    }
+
+    public static String getString(Context context, String key) {
+        return Settings.Global.getString(context.getContentResolver(), key);
+    }
+
     /** Get {@link Resources} by subscription id if subscription id is valid. */
     public static Resources getResourcesForSubId(Context context, int subId) {
         if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
diff --git a/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java b/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
index 270a5c8..97ee5c9 100644
--- a/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
+++ b/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
@@ -21,6 +21,8 @@
 import android.app.ActivityManager;
 import android.app.AppOpsManager;
 import android.app.INotificationManager;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.pm.ApplicationInfo;
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index 2da9eea..7358d93 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -134,19 +134,19 @@
                 mSwitchController.setEnabled(false);
                 break;
             case BluetoothAdapter.STATE_ON:
-                setChecked(true);
                 mSwitchController.setEnabled(true);
+                setChecked(true);
                 break;
             case BluetoothAdapter.STATE_TURNING_OFF:
                 mSwitchController.setEnabled(false);
                 break;
             case BluetoothAdapter.STATE_OFF:
-                setChecked(false);
                 mSwitchController.setEnabled(true);
+                setChecked(false);
                 break;
             default:
-                setChecked(false);
                 mSwitchController.setEnabled(true);
+                setChecked(false);
         }
     }
 
diff --git a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
index 74c39b6..7848fa4 100644
--- a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
@@ -89,7 +89,7 @@
                 .setTitle(getDialogTitle())
                 .setView(createDialogView(deviceName))
                 .setPositiveButton(R.string.bluetooth_rename_button, (dialog, which) -> {
-                    setDeviceName(mDeviceNameView.getText().toString());
+                    setDeviceName(mDeviceNameView.getText().toString().trim());
                 })
                 .setNegativeButton(android.R.string.cancel, null);
         mAlertDialog = builder.create();
@@ -133,7 +133,11 @@
     @Override
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
         if (actionId == EditorInfo.IME_ACTION_DONE) {
-            setDeviceName(v.getText().toString());
+            // Rejecting Empty String
+            if (v.length() != 0 && !(v.getText().toString().trim().isEmpty()))
+            {
+                setDeviceName(v.getText().toString());
+            }
             if (mAlertDialog != null && mAlertDialog.isShowing()) {
                 mAlertDialog.dismiss();
             }
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java
index a1d86be..27ac742 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingController.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java
@@ -62,7 +62,6 @@
     private int mPasskey;
     private String mDeviceName;
     private LocalBluetoothProfile mPbapClientProfile;
-    private boolean mPbapAllowed;
 
     /**
      * Creates an instance of a BluetoothPairingController.
@@ -92,20 +91,14 @@
     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         if (isChecked) {
-            mPbapAllowed = true;
+            mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
         } else {
-            mPbapAllowed = false;
+            mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED);
         }
     }
 
     @Override
     public void onDialogPositiveClick(BluetoothPairingDialogFragment dialog) {
-        if (mPbapAllowed) {
-            mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
-        } else {
-            mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED);
-        }
-
         if (getDialogType() == USER_ENTRY_DIALOG) {
             onPair(mUserInput);
         } else {
diff --git a/src/com/android/settings/bluetooth/DevicePickerFragment.java b/src/com/android/settings/bluetooth/DevicePickerFragment.java
index 02625bb..328673a 100644
--- a/src/com/android/settings/bluetooth/DevicePickerFragment.java
+++ b/src/com/android/settings/bluetooth/DevicePickerFragment.java
@@ -187,11 +187,13 @@
     }
 
     private void sendDevicePickedIntent(BluetoothDevice device) {
+        android.util.Log.d("Devicepicker", "sendDevicePickedIntent");
         Intent intent = new Intent(BluetoothDevicePicker.ACTION_DEVICE_SELECTED);
         intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
         if (mLaunchPackage != null && mLaunchClass != null) {
             intent.setClassName(mLaunchPackage, mLaunchClass);
         }
+        intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
         getActivity().sendBroadcast(intent);
     }
 }
diff --git a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java
index 466d60e..224f4a9 100644
--- a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java
@@ -1,4 +1,37 @@
 /*
+ *Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted (subject to the limitations in the
+ * disclaimer below) provided that the following conditions are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *    * Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ *    * Neither the name of The Linux Foundation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/*
  * Copyright (C) 2017 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -99,9 +132,10 @@
         if (DBG) {
             Log.d(TAG, "isFilterMatched() device name : " + cachedDevice.getName() +
                     ", is connected : " + device.isConnected() + ", is profile connected : "
-                    + cachedDevice.isConnected());
+                    + cachedDevice.isConnected() +
+                    ", is twsplusdevice : " + device.isTwsPlusDevice());
         }
-        return device.getBondState() == BluetoothDevice.BOND_BONDED && !device.isConnected();
+        return device.getBondState() == BluetoothDevice.BOND_BONDED && !device.isConnected() && !device.isTwsPlusDevice();
     }
 
     @Override
diff --git a/src/com/android/settings/bluetooth/SavedBluetoothTwsDeviceUpdater.java b/src/com/android/settings/bluetooth/SavedBluetoothTwsDeviceUpdater.java
new file mode 100644
index 0000000..f4a5638
--- /dev/null
+++ b/src/com/android/settings/bluetooth/SavedBluetoothTwsDeviceUpdater.java
@@ -0,0 +1,90 @@
+/*
+ *Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted (subject to the limitations in the
+ * disclaimer below) provided that the following conditions are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *    * Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ *    * Neither the name of The Linux Foundation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.bluetooth;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothProfile;
+import android.content.Context;
+
+import com.android.settings.connecteddevice.DevicePreferenceCallback;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+/**
+ * Maintain and update saved TWS+ bluetooth devices(bonded but not connected)
+ */
+public class SavedBluetoothTwsDeviceUpdater extends BluetoothDeviceUpdater {
+
+    private static final String PREF_KEY = "saved_bt_tws";
+
+    public SavedBluetoothTwsDeviceUpdater(Context context, DashboardFragment fragment,
+            DevicePreferenceCallback devicePreferenceCallback) {
+        super(context, fragment, devicePreferenceCallback);
+    }
+
+    SavedBluetoothTwsDeviceUpdater(Context context, DashboardFragment fragment,
+            DevicePreferenceCallback devicePreferenceCallback,
+            LocalBluetoothManager localBluetoothManager) {
+        super(context, fragment, devicePreferenceCallback, localBluetoothManager);
+    }
+
+    @Override
+    public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) {
+        final BluetoothDevice device = cachedDevice.getDevice();
+        return device.getBondState() == BluetoothDevice.BOND_BONDED &&
+            !device.isConnected() && device.isTwsPlusDevice();
+    }
+
+    @Override
+    protected String getPreferenceKey() {
+        return PREF_KEY;
+    }
+}
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index 5dd769d..f857be3 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -1,4 +1,37 @@
 /*
+ *Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted (subject to the limitations in the
+ * disclaimer below) provided that the following conditions are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *    * Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ *    * Neither the name of The Linux Foundation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/*
  * Copyright (C) 2016 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -71,6 +104,7 @@
                 SettingsUIDeviceConfig.BT_NEAR_BY_SUGGESTION_ENABLED, true);
         use(AvailableMediaDeviceGroupController.class).init(this);
         use(ConnectedDeviceGroupController.class).init(this);
+        use(SavedTwsDeviceGroupController.class).init(this);
         use(PreviouslyConnectedDevicePreferenceController.class).init(this);
         use(SlicePreferenceController.class).setSliceUri(nearbyEnabled
                 ? Uri.parse(getString(R.string.config_nearby_devices_slice_uri))
diff --git a/src/com/android/settings/connecteddevice/SavedTwsDeviceGroupController.java b/src/com/android/settings/connecteddevice/SavedTwsDeviceGroupController.java
new file mode 100644
index 0000000..1e1f0ac
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/SavedTwsDeviceGroupController.java
@@ -0,0 +1,157 @@
+/*
+ *Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted (subject to the limitations in the
+ * disclaimer below) provided that the following conditions are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *    * Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ *    * Neither the name of The Linux Foundation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.connecteddevice;
+
+import android.content.pm.PackageManager;
+import android.content.Context;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.bluetooth.BluetoothDeviceUpdater;
+import com.android.settings.bluetooth.SavedBluetoothTwsDeviceUpdater;
+import com.android.settings.connecteddevice.dock.DockUpdater;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.overlay.DockUpdaterFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+/**
+ * Controller to maintain the {@link PreferenceGroup} for all
+ * saved TWS+ devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference}
+ */
+public class SavedTwsDeviceGroupController extends BasePreferenceController
+        implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop,
+        DevicePreferenceCallback {
+
+    private static final String KEY = "saved_tws_device_list";
+
+    PreferenceGroup mPreferenceGroup;
+    private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
+    private DockUpdater mSavedDockUpdater;
+
+    public SavedTwsDeviceGroupController(Context context) {
+        super(context, KEY);
+
+        DockUpdaterFeatureProvider dockUpdaterFeatureProvider =
+                FeatureFactory.getFactory(context).getDockUpdaterFeatureProvider();
+        mSavedDockUpdater =
+                dockUpdaterFeatureProvider.getSavedDockUpdater(context, this);
+    }
+
+    @Override
+    public void onStart() {
+        mBluetoothDeviceUpdater.registerCallback();
+        mSavedDockUpdater.registerCallback();
+    }
+
+    @Override
+    public void onStop() {
+        mBluetoothDeviceUpdater.unregisterCallback();
+        mSavedDockUpdater.unregisterCallback();
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        if (isAvailable()) {
+            mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY);
+            mPreferenceGroup.setVisible(false);
+            mBluetoothDeviceUpdater.setPrefContext(screen.getContext());
+            mBluetoothDeviceUpdater.forceUpdate();
+            mSavedDockUpdater.forceUpdate();
+        }
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
+                ? AVAILABLE
+                : UNSUPPORTED_ON_DEVICE;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY;
+    }
+
+    @Override
+    public void onDeviceAdded(Preference preference) {
+        if (mPreferenceGroup.getPreferenceCount() == 0) {
+            mPreferenceGroup.setVisible(true);
+        }
+        mPreferenceGroup.addPreference(preference);
+    }
+
+    @Override
+    public void onDeviceRemoved(Preference preference) {
+        mPreferenceGroup.removePreference(preference);
+        if (mPreferenceGroup.getPreferenceCount() == 0) {
+            mPreferenceGroup.setVisible(false);
+        }
+    }
+
+    public void init(DashboardFragment fragment) {
+        mBluetoothDeviceUpdater = new SavedBluetoothTwsDeviceUpdater(fragment.getContext(),
+                fragment, SavedTwsDeviceGroupController.this);
+    }
+
+    public void setBluetoothDeviceUpdater(BluetoothDeviceUpdater bluetoothDeviceUpdater) {
+        mBluetoothDeviceUpdater = bluetoothDeviceUpdater;
+    }
+
+    public void setSavedDockUpdater(DockUpdater savedDockUpdater) {
+        mSavedDockUpdater = savedDockUpdater;
+    }
+}
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index ad4da08..a423b39 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -329,6 +329,7 @@
             Settings.WifiSettingsActivity.class.getName(),
             Settings.WifiSettings2Activity.class.getName(),
             Settings.DataUsageSummaryActivity.class.getName(),
+            Settings.SimSettingsActivity.class.getName(),
             // Home page > Connected devices
             Settings.BluetoothSettingsActivity.class.getName(),
             Settings.WifiDisplaySettingsActivity.class.getName(),
diff --git a/src/com/android/settings/datausage/BillingCyclePreference.java b/src/com/android/settings/datausage/BillingCyclePreference.java
index 116ed89..6fc403b 100644
--- a/src/com/android/settings/datausage/BillingCyclePreference.java
+++ b/src/com/android/settings/datausage/BillingCyclePreference.java
@@ -72,6 +72,7 @@
         setSummary(null);
 
         setIntent(getIntent());
+        updateEnabled();
     }
 
     private void updateEnabled() {
diff --git a/src/com/android/settings/datausage/CellDataPreference.java b/src/com/android/settings/datausage/CellDataPreference.java
index 6dc40e8..9a4e7b7 100644
--- a/src/com/android/settings/datausage/CellDataPreference.java
+++ b/src/com/android/settings/datausage/CellDataPreference.java
@@ -64,7 +64,6 @@
         final CellDataState state = (CellDataState) s;
         super.onRestoreInstanceState(state.getSuperState());
         mChecked = state.mChecked;
-        mMultiSimDialog = state.mMultiSimDialog;
         if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
             mSubId = state.mSubId;
             setKey(getKey() + mSubId);
@@ -76,7 +75,6 @@
     protected Parcelable onSaveInstanceState() {
         final CellDataState state = new CellDataState(super.onSaveInstanceState());
         state.mChecked = mChecked;
-        state.mMultiSimDialog = mMultiSimDialog;
         state.mSubId = mSubId;
         return state;
     }
@@ -137,6 +135,7 @@
     @Override
     protected void performClick(View view) {
         final Context context = getContext();
+        // TODO (b/123905421): Clean up dead code path
         FeatureFactory.getFactory(context).getMetricsFeatureProvider()
                 .action(context, SettingsEnums.ACTION_CELL_DATA_TOGGLE, !mChecked);
         final SubscriptionInfo currentSir = getActiveSubscriptionInfo(mSubId);
@@ -177,11 +176,7 @@
     @Override
     protected void onPrepareDialogBuilder(Builder builder,
             DialogInterface.OnClickListener listener) {
-        if (mMultiSimDialog) {
-            showMultiSimDialog(builder, listener);
-        } else {
-            showDisableDialog(builder, listener);
-        }
+        showDisableDialog(builder, listener);
     }
 
     private void showDisableDialog(Builder builder,
@@ -192,6 +187,7 @@
                 .setNegativeButton(android.R.string.cancel, null);
     }
 
+    // TODO (b/123905421): Clean up dead code path
     private void showMultiSimDialog(Builder builder,
             DialogInterface.OnClickListener listener) {
         final SubscriptionInfo currentSir = getActiveSubscriptionInfo(mSubId);
@@ -223,14 +219,8 @@
         if (which != DialogInterface.BUTTON_POSITIVE) {
             return;
         }
-        if (mMultiSimDialog) {
-            getProxySubscriptionManager().get().setDefaultDataSubId(mSubId);
-            setMobileDataEnabled(true);
-            disableDataForOtherSubscriptions(mSubId);
-        } else {
-            // TODO: extend to modify policy enabled flag.
-            setMobileDataEnabled(false);
-        }
+        // TODO: extend to modify policy enabled flag.
+        setMobileDataEnabled(false);
     }
 
     @VisibleForTesting
@@ -256,7 +246,6 @@
     public static class CellDataState extends BaseSavedState {
         public int mSubId;
         public boolean mChecked;
-        public boolean mMultiSimDialog;
 
         public CellDataState(Parcelable base) {
             super(base);
@@ -265,7 +254,6 @@
         public CellDataState(Parcel source) {
             super(source);
             mChecked = source.readByte() != 0;
-            mMultiSimDialog = source.readByte() != 0;
             mSubId = source.readInt();
         }
 
@@ -273,7 +261,6 @@
         public void writeToParcel(Parcel dest, int flags) {
             super.writeToParcel(dest, flags);
             dest.writeByte((byte) (mChecked ? 1 : 0));
-            dest.writeByte((byte) (mMultiSimDialog ? 1 : 0));
             dest.writeInt(mSubId);
         }
 
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index 9d9bf9c..af841b5 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -27,6 +27,7 @@
 import android.text.TextUtils;
 import android.text.format.Formatter;
 import android.text.style.RelativeSizeSpan;
+import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
@@ -95,7 +96,19 @@
         }
         boolean hasWifiRadio = DataUsageUtils.hasWifiRadio(context);
         if (hasMobileData) {
-            addMobileSection(defaultSubId);
+            List<SubscriptionInfo> subscriptions =
+                    services.mSubscriptionManager.getActiveSubscriptionInfoList();
+            if (subscriptions == null || subscriptions.size() == 0) {
+                addMobileSection(defaultSubId);
+            }
+            for (int i = 0; subscriptions != null && i < subscriptions.size(); i++) {
+                SubscriptionInfo subInfo = subscriptions.get(i);
+                if (subscriptions.size() > 1) {
+                    addMobileSection(subInfo.getSubscriptionId(), subInfo);
+                } else {
+                    addMobileSection(subInfo.getSubscriptionId());
+                }
+            }
             if (hasActiveSubscription() && hasWifiRadio) {
                 // If the device has active SIM, the data usage section shows usage for mobile,
                 // and the WiFi section is added if there is a WiFi radio - legacy behavior.
diff --git a/src/com/android/settings/development/BluetoothSnoopLogPreferenceController.java b/src/com/android/settings/development/BluetoothSnoopLogPreferenceController.java
index d698436..58550c9 100644
--- a/src/com/android/settings/development/BluetoothSnoopLogPreferenceController.java
+++ b/src/com/android/settings/development/BluetoothSnoopLogPreferenceController.java
@@ -44,6 +44,11 @@
     @VisibleForTesting
     static final int BTSNOOP_LOG_MODE_FULL_INDEX = 2;
     @VisibleForTesting
+    static final int BTSNOOP_LOG_MODE_SNOOPHEADERSFILTERED_INDEX = 3;
+    @VisibleForTesting
+    static final int BTSNOOP_LOG_MODE_MEDIAPKTSFILTERED_INDEX = 4;
+    @VisibleForTesting
+
     static final String BLUETOOTH_BTSNOOP_LOG_MODE_PROPERTY = "persist.bluetooth.btsnooplogmode";
 
     private final String[] mListValues;
@@ -97,8 +102,13 @@
                 break;
             }
         }
-        listPreference.setValue(mListValues[index]);
-        listPreference.setSummary(mListEntries[index]);
+        if( index < mListValues.length && index < mListEntries.length ) {
+            listPreference.setValue(mListValues[index]);
+            listPreference.setSummary(mListEntries[index]);
+        } else {
+            Log.e(TAG, "missing some entries in xml file"
+             + "\t some options in developer options will not be shown until added in xml file");
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 945970e..43e9b4d 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -467,6 +467,7 @@
         controllers.add(new LogPersistPreferenceController(context, fragment, lifecycle));
         controllers.add(new CameraLaserSensorPreferenceController(context));
         controllers.add(new WifiDisplayCertificationPreferenceController(context));
+        controllers.add(new WifiCoverageExtendPreferenceController(context));
         controllers.add(new WifiVerboseLoggingPreferenceController(context));
         controllers.add(new WifiScanThrottlingPreferenceController(context));
         controllers.add(new WifiEnhancedMacRandomizationPreferenceController(context));
@@ -563,6 +564,7 @@
 
     @Override
     public void onBluetoothHDAudioEnabled(boolean enabled) {
+        Log.d(TAG, "onBluetoothHDAudioEnabled: " + enabled);
         for (AbstractPreferenceController controller : mPreferenceControllers) {
             if (controller instanceof AbstractBluetoothDialogPreferenceController) {
                 ((AbstractBluetoothDialogPreferenceController) controller).onHDAudioEnabled(
diff --git a/src/com/android/settings/development/WifiCoverageExtendPreferenceController.java b/src/com/android/settings/development/WifiCoverageExtendPreferenceController.java
new file mode 100644
index 0000000..9f974ca
--- /dev/null
+++ b/src/com/android/settings/development/WifiCoverageExtendPreferenceController.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.settings.development;
+
+import android.content.Context;
+import android.net.wifi.WifiManager;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.SwitchPreference;
+import androidx.preference.Preference;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class WifiCoverageExtendPreferenceController extends DeveloperOptionsPreferenceController
+        implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+
+    private static final String WIFI_COVERAGE_EXTEND_KEY = "wifi_coverage_extend";
+
+    private final WifiManager mWifiManager;
+
+    public WifiCoverageExtendPreferenceController(Context context) {
+        super(context);
+
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return WIFI_COVERAGE_EXTEND_KEY;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        final boolean isEnabled = (Boolean) newValue;
+        mWifiManager.enableWifiCoverageExtendFeature(isEnabled);
+        return true;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        final boolean enabled = mWifiManager.isWifiCoverageExtendFeatureEnabled();
+        ((SwitchPreference) mPreference).setChecked(enabled);
+
+    }
+
+    @Override
+    protected void onDeveloperOptionsSwitchDisabled() {
+        super.onDeveloperOptionsSwitchDisabled();
+        mWifiManager.enableWifiCoverageExtendFeature(false);
+        ((SwitchPreference) mPreference).setChecked(false);
+    }
+}
diff --git a/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
index 6bc9175..5e6b806 100644
--- a/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
@@ -36,7 +36,9 @@
 
     private static final String TAG = "AbstractBtDlgCtr";
 
-    protected static final int[] CODEC_TYPES = {BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
+    protected static final int[] CODEC_TYPES = {BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_TWSP,
+            BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
+            BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_ADAPTIVE,
             BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
             BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
             BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
@@ -222,6 +224,7 @@
             Log.d(TAG, "Unable to get highest codec. Configs are empty");
             return BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID;
         }
+        Log.d(TAG, "CODEC_TYPES len: " + CODEC_TYPES.length + " codec_config len: " + configs.length);
         for (int i = 0; i < CODEC_TYPES.length; i++) {
             for (int j = 0; j < configs.length; j++) {
                 if ((configs[j].getCodecType() == CODEC_TYPES[i])) {
diff --git a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java
index 6a733f3..6178ed1 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java
@@ -22,12 +22,16 @@
 
 import com.android.settings.R;
 
+import android.util.Log;
+
 /**
  * Dialog preference to set the Bluetooth A2DP config of codec
  */
 public class BluetoothCodecDialogPreference extends BaseBluetoothDialogPreference implements
         RadioGroup.OnCheckedChangeListener {
 
+    private static final String TAG = "BtCodecDlgPref";
+
     public BluetoothCodecDialogPreference(Context context) {
         super(context);
         initialize(context);
@@ -60,13 +64,19 @@
         mRadioButtonIds.add(R.id.bluetooth_audio_codec_aac);
         mRadioButtonIds.add(R.id.bluetooth_audio_codec_aptx);
         mRadioButtonIds.add(R.id.bluetooth_audio_codec_aptx_hd);
+        mRadioButtonIds.add(R.id.bluetooth_audio_codec_aptx_adaptive);
         mRadioButtonIds.add(R.id.bluetooth_audio_codec_ldac);
+        mRadioButtonIds.add(R.id.bluetooth_audio_codec_aptx_twsp);
         String[] stringArray = context.getResources().getStringArray(
                 R.array.bluetooth_a2dp_codec_titles);
+
+        Log.e(TAG, "a2dp_codec_titles array length: " + stringArray.length);
         for (int i = 0; i < stringArray.length; i++) {
             mRadioButtonStrings.add(stringArray[i]);
         }
+
         stringArray = context.getResources().getStringArray(R.array.bluetooth_a2dp_codec_summaries);
+        Log.e(TAG, "a2dp_codec_summaries array length: " + stringArray.length);
         for (int i = 0; i < stringArray.length; i++) {
             mSummaryStrings.add(stringArray[i]);
         }
diff --git a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
index a0af268..dc326fe 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
@@ -62,6 +62,7 @@
 
     @Override
     public void onHDAudioEnabled(boolean enabled) {
+        Log.d(TAG, " onHDAudioEnabled: " + enabled);
         if (!enabled) {
             // If option codec is disabled, SBC is the only only one available codec.
             onIndexUpdated(convertCfgToBtnIndex(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC));
@@ -125,6 +126,14 @@
                 codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
                 codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
                 break;
+            case 6:
+                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_ADAPTIVE;
+                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
+                break;
+            case 7:
+                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_TWSP;
+                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
+                break;
             default:
                 break;
         }
@@ -179,9 +188,15 @@
             case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD:
                 index = 4;
                 break;
+            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_ADAPTIVE:
+                index = 6;
+                break;
             case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
                 index = 5;
                 break;
+            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_TWSP:
+                index = 7;
+                break;
             default:
                 Log.e(TAG, "Unsupported config:" + config);
                 break;
diff --git a/src/com/android/settings/development/bluetooth/BluetoothHDAudioPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothHDAudioPreferenceController.java
index d4ca4e5..6481c75 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothHDAudioPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothHDAudioPreferenceController.java
@@ -81,6 +81,7 @@
             return true;
         }
         final boolean enabled = (Boolean) newValue;
+        Log.e(TAG, "onPreferenceChange: " + enabled);
         final int prefValue = enabled
                 ? BluetoothA2dp.OPTIONAL_CODECS_PREF_ENABLED
                 : BluetoothA2dp.OPTIONAL_CODECS_PREF_DISABLED;
diff --git a/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceController.java
index 4b38e11..f4d6857 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceController.java
@@ -105,7 +105,8 @@
 
     @Override
     public void onHDAudioEnabled(boolean enabled) {
-        mPreference.setEnabled(false);
+        Log.d(TAG, "onHDAudioEnabled: " + enabled);
+        mPreference.setEnabled(enabled);
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
index 6ada11b..42aeede 100644
--- a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
@@ -29,6 +29,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.bluetooth.BluetoothLengthDeviceNameFilter;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.widget.ValidatedEditTextPreference;
@@ -75,6 +76,9 @@
     private void initializeDeviceName() {
         mDeviceName = Settings.Global.getString(mContext.getContentResolver(),
                 Settings.Global.DEVICE_NAME);
+        if (Utils.isSupportCTPA(mContext)) {
+            mDeviceName = Utils.getString(mContext, Utils.KEY_DEVICE_NAME);
+        }
         if (mDeviceName == null) {
             mDeviceName = Build.MODEL;
         }
@@ -135,6 +139,10 @@
     private void setSettingsGlobalDeviceName(String deviceName) {
         Settings.Global.putString(mContext.getContentResolver(), Settings.Global.DEVICE_NAME,
                 deviceName);
+        if (Utils.isSupportCTPA(mContext)) {
+            Settings.Global.putString(mContext.getContentResolver(), Utils.KEY_DEVICE_NAME,
+                    deviceName);
+        }
     }
 
     private void setBluetoothDeviceName(String deviceName) {
diff --git a/src/com/android/settings/deviceinfo/HardwareInfoPreferenceController.java b/src/com/android/settings/deviceinfo/HardwareInfoPreferenceController.java
index 7ee6f89..6913f93 100644
--- a/src/com/android/settings/deviceinfo/HardwareInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/HardwareInfoPreferenceController.java
@@ -22,6 +22,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settingslib.DeviceInfoUtils;
 
@@ -49,6 +50,19 @@
 
     @Override
     public CharSequence getSummary() {
+        if (Utils.isSupportCTPA(mContext)) {
+            String modelName = Utils.getString(mContext, Utils.KEY_MODEL);
+            if (null == modelName || modelName.isEmpty()) {
+                modelName = getDeviceModel();
+            }
+            String hardwareVersion = Utils.getString(mContext, Utils.KEY_HARDWARE_VERSION);
+            if (null == hardwareVersion || hardwareVersion.isEmpty()) {
+                hardwareVersion = mContext.getResources().getString(R.string.device_info_default);
+            }
+            return mContext.getResources().getString(R.string.model_hardware_summary,
+                    modelName, hardwareVersion);
+        }
+
         return mContext.getResources().getString(R.string.model_summary, getDeviceModel());
     }
 
diff --git a/src/com/android/settings/deviceinfo/SoftwareVersionPreferenceController.java b/src/com/android/settings/deviceinfo/SoftwareVersionPreferenceController.java
new file mode 100755
index 0000000..79482c0
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/SoftwareVersionPreferenceController.java
@@ -0,0 +1,73 @@
+/*
+Copyright (c) 2019, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.android.settings.deviceinfo;
+
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.core.BasePreferenceController;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+public class SoftwareVersionPreferenceController extends BasePreferenceController {
+    private static final String PREF_KEY = "software_version";
+
+    public SoftwareVersionPreferenceController(Context context) {
+        super(context, PREF_KEY);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        Preference preference = screen.findPreference(PREF_KEY);
+        final CharSequence version = getSummary();
+        preference.setSummary(version);
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        String summary = mContext.getString(R.string.device_info_default);
+        String softwareVersion = Utils.getString(mContext, Utils.KEY_SOFTWARE_VERSION);
+        if (null != softwareVersion && !softwareVersion.isEmpty()) {
+            summary = softwareVersion;
+        }
+        return summary;
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return Utils.isSupportCTPA(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return PREF_KEY;
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/deviceinfo/StorageSizePreferenceController.java b/src/com/android/settings/deviceinfo/StorageSizePreferenceController.java
new file mode 100755
index 0000000..36f078d
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/StorageSizePreferenceController.java
@@ -0,0 +1,93 @@
+/*
+Copyright (c) 2019, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.android.settings.deviceinfo;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+public class StorageSizePreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
+    private static final String LOG_TAG = "StorageSizePreferenceController";
+    private final static String KEY_STORAGE_TOTAL_SIZE = "key_storage_total_size";
+
+    public StorageSizePreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_STORAGE_TOTAL_SIZE;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return Utils.isSupportCTPA(mContext);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        Preference ramSizePreference = screen.findPreference(getPreferenceKey());
+        if (!isAvailable() ||  null == ramSizePreference || !ramSizePreference.isVisible()) {
+            return;
+        }
+        String ramSize = Utils.getString(mContext, Utils.KEY_RAM_TOTAL_SIZE);
+        Log.d(LOG_TAG, "displayPreference: ramSize = " + ramSize);
+        if (null != ramSize && !ramSize.isEmpty()) {
+            ramSizePreference.setSummary(ramSize);
+        } else {
+            ramSizePreference.setSummary(mContext.getString(R.string.device_info_default));
+        }
+
+        final Preference romSizePreference = createNewPreference(screen.getContext());
+        romSizePreference.setOrder(ramSizePreference.getOrder() + 1);
+        romSizePreference.setKey(KEY_STORAGE_TOTAL_SIZE + 1);
+        screen.addPreference(romSizePreference);
+        romSizePreference.setVisible(true);
+        romSizePreference.setTitle(mContext.getResources().getString(R.string.rom_total_size));
+        String romSize = Utils.getString(mContext, Utils.KEY_ROM_TOTAL_SIZE);
+        Log.d(LOG_TAG, "displayPreference: romSize = " + romSize);
+        if (null != romSize && !romSize.isEmpty()) {
+            romSizePreference.setSummary(romSize);
+        } else {
+            romSizePreference.setSummary(mContext.getString(R.string.device_info_default));
+        }
+    }
+
+    private Preference createNewPreference(Context context) {
+        return new Preference(context);
+    }
+}
diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
old mode 100644
new mode 100755
index 88968b3..b6266b3
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
@@ -93,21 +93,24 @@
                     storage.partitionPrivate(activity.mDisk.getId());
                     publishProgress(40);
 
-                    final VolumeInfo privateVol = activity.findFirstVolume(TYPE_PRIVATE, 25);
+                    final VolumeInfo privateVol = activity.findFirstVolume(TYPE_PRIVATE, 50);
                     final CompletableFuture<PersistableBundle> result = new CompletableFuture<>();
-                    storage.benchmark(privateVol.getId(), new IVoldTaskListener.Stub() {
-                        @Override
-                        public void onStatus(int status, PersistableBundle extras) {
-                            // Map benchmark 0-100% progress onto 40-80%
-                            publishProgress(40 + ((status * 40) / 100));
-                        }
+                    if(null != privateVol) {
+                        storage.benchmark(privateVol.getId(), new IVoldTaskListener.Stub() {
+                            @Override
+                            public void onStatus(int status, PersistableBundle extras) {
+                                // Map benchmark 0-100% progress onto 40-80%
+                                publishProgress(40 + ((status * 40) / 100));
+                            }
 
-                        @Override
-                        public void onFinished(int status, PersistableBundle extras) {
-                            result.complete(extras);
-                        }
-                    });
-                    mPrivateBench = result.get(60, TimeUnit.SECONDS).getLong("run", Long.MAX_VALUE);
+                            @Override
+                            public void onFinished(int status, PersistableBundle extras) {
+                                result.complete(extras);
+                            }
+                        });
+                        mPrivateBench = result.get(60, TimeUnit.SECONDS).getLong("run",
+                                Long.MAX_VALUE);
+                    }
 
                     // If we just adopted the device that had been providing
                     // physical storage, then automatically move storage to the
diff --git a/src/com/android/settings/deviceinfo/WifiMacAddressPreferenceController.java b/src/com/android/settings/deviceinfo/WifiMacAddressPreferenceController.java
index c700596..8b0b4ec 100644
--- a/src/com/android/settings/deviceinfo/WifiMacAddressPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/WifiMacAddressPreferenceController.java
@@ -17,11 +17,16 @@
 package com.android.settings.deviceinfo;
 
 import android.content.Context;
+import android.net.wifi.WifiInfo;
+import android.util.Log;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.deviceinfo.AbstractWifiMacAddressPreferenceController;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 
 /**
  * Concrete subclass of WIFI MAC address preference controller
@@ -37,5 +42,25 @@
         return mContext.getResources().getBoolean(R.bool.config_show_wifi_mac_address);
     }
 
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        if (Utils.isSupportCTPA(mContext)) {
+            Preference macAddressPreference = screen.findPreference(getPreferenceKey());
+            CharSequence oldValue = macAddressPreference.getSummary();
+            String macAddress = Utils.getString(mContext, Utils.KEY_WIFI_MAC_ADDRESS);
+            String unAvailable = mContext.getString(
+                    com.android.settingslib.R.string.status_unavailable);
+            Log.d(TAG, "displayPreference: macAddress = " + macAddress
+                    + " oldValue = " + oldValue + " unAvailable = " + unAvailable);
+            if (null == macAddress || macAddress.isEmpty()) {
+                macAddress = unAvailable;
+            }
+            if (null != oldValue && (WifiInfo.DEFAULT_MAC_ADDRESS.equals(oldValue) ||
+                    unAvailable.equals(oldValue))) {
+                macAddressPreference.setSummary(macAddress);
+            }
+        }
+    }
     // This space intentionally left blank
 }
diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
index 4af5d79..31c4f54 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -37,6 +37,8 @@
 import com.android.settings.deviceinfo.ManualPreferenceController;
 import com.android.settings.deviceinfo.RegulatoryInfoPreferenceController;
 import com.android.settings.deviceinfo.SafetyInfoPreferenceController;
+import com.android.settings.deviceinfo.SoftwareVersionPreferenceController;
+import com.android.settings.deviceinfo.StorageSizePreferenceController;
 import com.android.settings.deviceinfo.UptimePreferenceController;
 import com.android.settings.deviceinfo.WifiMacAddressPreferenceController;
 import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController;
@@ -113,6 +115,8 @@
         controllers.add(new FeedbackPreferenceController(fragment, context));
         controllers.add(new FccEquipmentIdPreferenceController(context));
         controllers.add(new UptimePreferenceController(context, lifecycle));
+        controllers.add(new SoftwareVersionPreferenceController(context));
+        controllers.add(new StorageSizePreferenceController(context));
         return controllers;
     }
 
diff --git a/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceController.java b/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceController.java
index dd3d560..1507ddc 100644
--- a/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceController.java
@@ -29,9 +29,11 @@
 
     @VisibleForTesting
     static final String BASEBAND_PROPERTY = "gsm.version.baseband";
+    private final Context mContext;
 
     public BasebandVersionPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
+        mContext = context;
     }
 
     @Override
@@ -41,6 +43,16 @@
 
     @Override
     public CharSequence getSummary() {
+        if (Utils.isSupportCTPA(mContext.getApplicationContext())) {
+            String baseBands = SystemProperties.get(BASEBAND_PROPERTY,
+                    mContext.getString(R.string.device_info_default));
+            if (null != baseBands) {
+                String[] baseBandArray = baseBands.split(",");
+                if ((baseBandArray != null) && (baseBandArray.length > 0)) {
+                    return baseBandArray[0];
+                }
+            }
+        }
         return SystemProperties.get(BASEBAND_PROPERTY,
                 mContext.getString(R.string.device_info_default));
     }
diff --git a/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceController.java b/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceController.java
index 955c60c..dc02b1d 100644
--- a/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceController.java
@@ -20,6 +20,7 @@
 import android.os.SystemProperties;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.slices.Sliceable;
 
@@ -48,6 +49,12 @@
 
     @Override
     public CharSequence getSummary() {
+        if (Utils.isSupportCTPA(mContext)) {
+            String hardwareVersion = Utils.getString(mContext, Utils.KEY_HARDWARE_VERSION);
+            if (null != hardwareVersion && !hardwareVersion.isEmpty()) {
+                return hardwareVersion;
+            }
+        }
         return SystemProperties.get("ro.boot.hardware.revision");
     }
 }
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
old mode 100644
new mode 100755
index 967eea6..caee987
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
@@ -32,7 +32,7 @@
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.slices.Sliceable;
-import com.android.settingslib.Utils;
+import com.android.settings.Utils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -76,6 +76,53 @@
             mPreferenceList.add(multiSimPreference);
             updatePreference(multiSimPreference, simSlotNumber);
         }
+
+        final int phoneCount = mTelephonyManager.getPhoneCount();
+        if (Utils.isSupportCTPA(mContext) && phoneCount >= 2) {
+            final int slot0PhoneType = mTelephonyManager.getCurrentPhoneTypeForSlot(0);
+            final int slot1PhoneType = mTelephonyManager.getCurrentPhoneTypeForSlot(1);
+            if (PHONE_TYPE_CDMA != slot0PhoneType && PHONE_TYPE_CDMA != slot1PhoneType) {
+                addPreferenceNotInList(screen, 0, imeiPreferenceOrder + phoneCount,
+                        getPreferenceKey() + phoneCount, true);
+            } else if (PHONE_TYPE_CDMA == slot0PhoneType){
+                addPreferenceNotInList(screen, 0, imeiPreferenceOrder + phoneCount,
+                        getPreferenceKey() + phoneCount, false);
+            } else if (PHONE_TYPE_CDMA == slot1PhoneType) {
+                addPreferenceNotInList(screen, 1, imeiPreferenceOrder + phoneCount,
+                        getPreferenceKey() + phoneCount, false);
+            }
+        }
+    }
+
+    private void addPreferenceNotInList(PreferenceScreen screen, int slotNumber, int order,
+                               String key, boolean isCDMAPhone) {
+        final Preference multiSimPreference = createNewPreference(screen.getContext());
+        multiSimPreference.setOrder(order);
+        multiSimPreference.setKey(key);
+        screen.addPreference(multiSimPreference);
+        if (isCDMAPhone) {
+            multiSimPreference.setTitle(getTitleForCdmaPhone(slotNumber));
+            multiSimPreference.setSummary(mTelephonyManager.getMeid(slotNumber));
+        } else {
+            multiSimPreference.setTitle(getTitleForGsmPhone(slotNumber));
+            multiSimPreference.setSummary(mTelephonyManager.getImei(slotNumber));
+        }
+    }
+
+    private void addPreference(PreferenceScreen screen, int slotNumber, int order,
+                               String key, boolean isCDMAPhone) {
+        final Preference multiSimPreference = createNewPreference(screen.getContext());
+        multiSimPreference.setOrder(order);
+        multiSimPreference.setKey(key);
+        screen.addPreference(multiSimPreference);
+        mPreferenceList.add(multiSimPreference);
+        if (isCDMAPhone) {
+            multiSimPreference.setTitle(getTitleForCdmaPhone(slotNumber));
+            multiSimPreference.setSummary(mTelephonyManager.getMeid(slotNumber));
+        } else {
+            multiSimPreference.setTitle(getTitleForGsmPhone(slotNumber));
+            multiSimPreference.setSummary(mTelephonyManager.getImei(slotNumber));
+        }
     }
 
     @Override
@@ -97,6 +144,12 @@
 
     private CharSequence getSummary(int simSlot) {
         final int phoneType = getPhoneType(simSlot);
+        if (Utils.isSupportCTPA(mContext)) {
+            // only can obtain the MEID by slot 0
+            if (PHONE_TYPE_CDMA == phoneType) {
+                simSlot = 0;
+            }
+        }
         return phoneType == PHONE_TYPE_CDMA ? mTelephonyManager.getMeid(simSlot)
                 : mTelephonyManager.getImei(simSlot);
     }
@@ -108,6 +161,10 @@
             return false;
         }
 
+        if (Utils.isSupportCTPA(mContext)) {
+            return true;
+        }
+
         ImeiInfoDialogFragment.show(mFragment, simSlot, preference.getTitle().toString());
         return true;
     }
@@ -150,6 +207,9 @@
     }
 
     private int getPhoneType(int slotIndex) {
+        if (Utils.isSupportCTPA(mContext)) {
+            return mTelephonyManager.getCurrentPhoneTypeForSlot(slotIndex);
+        }
         SubscriptionInfo subInfo = SubscriptionManager.from(mContext)
             .getActiveSubscriptionInfoForSimSlotIndex(slotIndex);
         return mTelephonyManager.getCurrentPhoneType(subInfo != null ? subInfo.getSubscriptionId()
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
index 370bdfb..9858ad2 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
@@ -152,6 +152,7 @@
     private final Context mContext;
 
     private boolean mShowLatestAreaInfo;
+    private boolean mIsRegisteredListener = false;
 
     private final BroadcastReceiver mAreaInfoReceiver = new BroadcastReceiver() {
         @Override
@@ -282,11 +283,22 @@
             mContext.registerReceiver(mAreaInfoReceiver,
                     new IntentFilter(CellBroadcastIntents.ACTION_AREA_INFO_UPDATED));
         }
+
+        mIsRegisteredListener = true;
     }
 
     @Override
     public void onPause() {
         if (mSubscriptionInfo == null) {
+            if (mIsRegisteredListener) {
+                mSubscriptionManager.removeOnSubscriptionsChangedListener(
+                        mOnSubscriptionsChangedListener);
+                mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+                if (mShowLatestAreaInfo) {
+                    mContext.unregisterReceiver(mAreaInfoReceiver);
+                }
+                mIsRegisteredListener = false;
+            }
             return;
         }
 
diff --git a/src/com/android/settings/location/AgpsPreferenceController.java b/src/com/android/settings/location/AgpsPreferenceController.java
new file mode 100755
index 0000000..1504668
--- /dev/null
+++ b/src/com/android/settings/location/AgpsPreferenceController.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2011 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.settings.location;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.preference.CheckBoxPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+
+public class AgpsPreferenceController extends LocationBasePreferenceController {
+    private static final String KEY_ASSISTED_GPS = "assisted_gps";
+
+    private CheckBoxPreference mAgpsPreference;
+
+    public AgpsPreferenceController(Context context, String key) {
+        super(context, key);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_ASSISTED_GPS;
+    }
+
+    @AvailabilityStatus
+    public int getAvailabilityStatus() {
+        return mContext.getResources().getBoolean(R.bool.config_agps_enabled)
+                ? AVAILABLE
+                : UNSUPPORTED_ON_DEVICE;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mAgpsPreference =
+                (CheckBoxPreference) screen.findPreference(KEY_ASSISTED_GPS);
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        if (mAgpsPreference != null) {
+            mAgpsPreference.setChecked(Settings.Global.getInt(
+                    mContext.getContentResolver(), Settings.Global.ASSISTED_GPS_ENABLED, 0) == 1);
+        }
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (KEY_ASSISTED_GPS.equals(preference.getKey())) {
+            final ContentResolver cr = mContext.getContentResolver();
+            final boolean switchState = mAgpsPreference.isChecked();
+            Settings.Global.putInt(cr, Settings.Global.ASSISTED_GPS_ENABLED,
+                    switchState ? 1 : 0);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void onLocationModeChanged(int mode, boolean restricted) {}
+}
diff --git a/src/com/android/settings/location/AppSettingsInjector.java b/src/com/android/settings/location/AppSettingsInjector.java
index bea623e..88a9a2f 100644
--- a/src/com/android/settings/location/AppSettingsInjector.java
+++ b/src/com/android/settings/location/AppSettingsInjector.java
@@ -19,9 +19,19 @@
 import android.content.Context;
 import android.content.Intent;
 import android.text.TextUtils;
+import android.content.pm.ResolveInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import android.os.UserHandle;
+
+import android.location.SettingInjectorService;
 
 import androidx.preference.Preference;
 
+import java.io.IOException;
+
+import org.xmlpull.v1.XmlPullParserException;
+
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.RestrictedAppPreference;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -43,11 +53,30 @@
         mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
+    /**
+     * Returns the settings parsed from the attributes of the
+     * {@link SettingInjectorService#META_DATA_NAME} tag, or null.
+     *
+     * Duplicates some code from {@link android.content.pm.RegisteredServicesCache}.
+     */
+    @Override
+    protected InjectedSetting parseServiceInfo(ResolveInfo service, UserHandle userHandle,
+            PackageManager pm) throws XmlPullParserException, IOException {
+        InjectedSetting res = super.parseServiceInfo(service, userHandle, pm);
+        ServiceInfo si = service.serviceInfo;
+
+    	if ((null != res) && (!DimmableIZatIconPreference.showIzat(mContext, si.packageName))) {
+        	res = null;
+    	}
+
+    	return res;
+    }
+
     @Override
     protected Preference createPreference(Context prefContext, InjectedSetting setting) {
         return TextUtils.isEmpty(setting.userRestriction)
-                ? new AppPreference(prefContext)
-                : new RestrictedAppPreference(prefContext, setting.userRestriction);
+                ? DimmableIZatIconPreference.getAppPreference(prefContext, setting)
+                : DimmableIZatIconPreference.getRestrictedAppPreference(prefContext, setting);
     }
 
     @Override
diff --git a/src/com/android/settings/location/DimmableIZatIconPreference.java b/src/com/android/settings/location/DimmableIZatIconPreference.java
new file mode 100644
index 0000000..be4f91b
--- /dev/null
+++ b/src/com/android/settings/location/DimmableIZatIconPreference.java
@@ -0,0 +1,227 @@
+/* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+
+package com.android.settings.location;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import androidx.preference.PreferenceViewHolder;
+import com.android.settingslib.location.InjectedSetting;
+import android.util.Log;
+import com.android.settingslib.widget.apppreference.AppPreference;
+import com.android.settings.widget.RestrictedAppPreference;
+import dalvik.system.DexClassLoader;
+import java.lang.ClassNotFoundException;
+import java.lang.ExceptionInInitializerError;
+import java.lang.IllegalAccessException;
+import java.lang.IllegalArgumentException;
+import java.lang.LinkageError;
+import java.lang.NoSuchFieldException;
+import java.lang.NoSuchMethodException;
+import java.lang.NullPointerException;
+import java.lang.SecurityException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import com.android.settings.R;
+
+public class DimmableIZatIconPreference {
+    private static final String TAG = "DimmableIZatIconPreference";
+    private static Class mXtProxyClz;
+    private static Class mNotifierClz;
+    private static Method mGetXtProxyMethod;
+    private static Method mGetConsentMethod;
+    private static Method mShowIzatMethod;
+    private static String mIzatPackage;
+    private static DexClassLoader mLoader;
+
+    private static void load(Context context) {
+        if (mLoader == null) {
+            try {
+                if (mXtProxyClz == null || mNotifierClz == null) {
+                    mLoader = new DexClassLoader("/system_ext/framework/izat.xt.srv.jar",
+                                                 context.getFilesDir().getAbsolutePath(),
+                                                 null,
+                                                 ClassLoader.getSystemClassLoader());
+                    mXtProxyClz = Class.forName("com.qti.izat.XTProxy",
+                                                true,
+                                                mLoader);
+                    mNotifierClz = Class.forName("com.qti.izat.XTProxy$Notifier",
+                                                 true,
+                                                 mLoader);
+                    mIzatPackage = (String)mXtProxyClz.getField("IZAT_XT_PACKAGE").get(null);
+                    mGetXtProxyMethod = mXtProxyClz.getMethod("getXTProxy",
+                                                              Context.class,
+                                                              mNotifierClz);
+                    mGetConsentMethod = mXtProxyClz.getMethod("getUserConsent");
+                    mShowIzatMethod = mXtProxyClz.getMethod("showIzat",
+                                                            Context.class,
+                                                            String.class);
+                }
+            } catch (NoSuchMethodException | NullPointerException | SecurityException |
+                     NoSuchFieldException | LinkageError | IllegalAccessException |
+                     ClassNotFoundException e) {
+                mXtProxyClz = null;
+                mNotifierClz = null;
+                mIzatPackage = null;
+                mGetXtProxyMethod = null;
+                mGetConsentMethod = null;
+                mShowIzatMethod = null;
+                e.printStackTrace();
+            }
+        }
+    }
+
+    static boolean showIzat(Context context, String packageName) {
+        load(context);
+        boolean show = true;
+        try {
+            if (mShowIzatMethod != null) {
+                show = (Boolean)mShowIzatMethod.invoke(null, context, packageName);
+            }
+        } catch (IllegalAccessException | IllegalArgumentException |
+                 InvocationTargetException | ExceptionInInitializerError e) {
+            e.printStackTrace();
+        }
+        return show;
+    }
+
+    private static boolean isIzatPackage(Context context, InjectedSetting info) {
+        return (mIzatPackage != null && mIzatPackage.equals(info.packageName));
+    }
+
+    private static final int ICON_ALPHA_ENABLED = 255;
+    private static final int ICON_ALPHA_DISABLED = 102;
+
+    private static void dimIcon(AppPreference pref, boolean dimmed) {
+        Drawable icon = pref.getIcon();
+        if (icon != null) {
+            icon.mutate().setAlpha(dimmed ? ICON_ALPHA_DISABLED : ICON_ALPHA_ENABLED);
+            pref.setIcon(icon);
+        }
+    }
+
+    private static class IZatAppPreference extends AppPreference {
+        private boolean mChecked;
+        private Context mContext;
+        private IZatAppPreference(Context context) {
+            super(context);
+            mContext = context;
+            Object notifier = Proxy.newProxyInstance(mLoader,
+                                                     new Class[] { mNotifierClz },
+                                                     new InvocationHandler() {
+                @Override   
+                public Object invoke(Object proxy, Method method, Object[] args)
+                    throws Throwable {
+                    if (method.getName().equals("userConsentNotify") &&
+                        args[0] != null && args[0] instanceof Boolean) {
+                        boolean consent = (Boolean)args[0];
+                        if (mChecked != consent) {
+                            mChecked = consent;
+                            dimIcon(IZatAppPreference.this, !isEnabled() || !mChecked);
+                        }
+                    }
+                    return null;
+                }});
+
+            try {
+                Object xt = mGetXtProxyMethod.invoke(null, context, notifier);
+                mChecked = (Boolean)mGetConsentMethod.invoke(xt);
+            } catch (IllegalAccessException | IllegalArgumentException |
+                     InvocationTargetException | ExceptionInInitializerError e) {
+                e.printStackTrace();
+            }
+        }
+
+        @Override
+        public CharSequence getSummary() {
+            int resId;
+            if (!isEnabled() || !mChecked) {
+                resId = R.string.notification_toggle_off;
+            } else {
+                resId = R.string.notification_toggle_on;
+            }
+            return mContext.getString(resId);
+        }
+
+        @Override
+        public void onBindViewHolder(PreferenceViewHolder view) {
+            super.onBindViewHolder(view);
+            DimmableIZatIconPreference.dimIcon(this, !isEnabled() || !mChecked);
+        }
+    }
+
+    private static class IZatRestrictedAppPreference extends RestrictedAppPreference {
+        private boolean mChecked;
+        private IZatRestrictedAppPreference(Context context, String userRestriction) {
+            super(context, userRestriction);
+            Object notifier = Proxy.newProxyInstance(mLoader,
+                                                     new Class[] { mNotifierClz },
+                                                     new InvocationHandler() {
+                @Override   
+                public Object invoke(Object proxy, Method method, Object[] args)
+                    throws Throwable {
+                    if (method.getName().equals("userConsentNotify") &&
+                        args[0] != null && args[0] instanceof Boolean) {
+                        boolean consent = (Boolean)args[0];
+                        if (mChecked != consent) {
+                            mChecked = consent;
+                            dimIcon(IZatRestrictedAppPreference.this, !isEnabled() || !mChecked);
+                        }
+                    }
+                    return null;
+                }});
+
+            try {
+                Object xt = mGetXtProxyMethod.invoke(null, context, notifier);
+                mChecked = (Boolean)mGetConsentMethod.invoke(xt);
+            } catch (IllegalAccessException | IllegalArgumentException |
+                     InvocationTargetException | ExceptionInInitializerError e) {
+                e.printStackTrace();
+            }
+        }
+
+        @Override
+        public void onBindViewHolder(PreferenceViewHolder view) {
+            super.onBindViewHolder(view);
+            DimmableIZatIconPreference.dimIcon(this, !isEnabled() || !mChecked);
+        }
+    }
+
+    static AppPreference getAppPreference(Context context, InjectedSetting info) {
+        return isIzatPackage(context, info) ?
+                new IZatAppPreference(context) :
+                new AppPreference(context);
+    }
+
+    static RestrictedAppPreference getRestrictedAppPreference(Context context, InjectedSetting info) {
+        return isIzatPackage(context, info) ?
+                new IZatRestrictedAppPreference(context, info.userRestriction) :
+                new RestrictedAppPreference(context, info.userRestriction);
+    }
+}
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 26a4afd..f5de174 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -88,6 +88,7 @@
         use(LocationFooterPreferenceController.class).init(this);
         use(LocationForWorkPreferenceController.class).init(this);
         use(LocationServiceForWorkPreferenceController.class).init(this);
+        use(AgpsPreferenceController.class).init(this);
     }
 
     @Override
diff --git a/src/com/android/settings/network/ApnEditor.java b/src/com/android/settings/network/ApnEditor.java
index f9eccfa..9ab30cc 100644
--- a/src/com/android/settings/network/ApnEditor.java
+++ b/src/com/android/settings/network/ApnEditor.java
@@ -54,6 +54,7 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.utils.ThreadUtils;
+import com.android.settings.Utils;
 
 import java.util.Arrays;
 import java.util.HashSet;
@@ -148,6 +149,8 @@
     private boolean mReadOnlyApn;
     private Uri mCarrierUri;
 
+    private static final String APN_DEFALUT_VALUES_STRING_ARRAY = "apn_default_values_strings_array";
+
     /**
      * APN types for data connections.  These are usage categories for an APN
      * entry.  One APN entry may support multiple APN types, eg, a single APN
@@ -228,6 +231,26 @@
             Telephony.Carriers.USER_EDITABLE    //24
     };
 
+    private static final String[] sUIConfigurableItems = new String[] {
+        Telephony.Carriers.NAME,
+        Telephony.Carriers.APN,
+        Telephony.Carriers.PROXY,
+        Telephony.Carriers.PORT,
+        Telephony.Carriers.USER,
+        Telephony.Carriers.SERVER,
+        Telephony.Carriers.PASSWORD,
+        Telephony.Carriers.MMSC,
+        Telephony.Carriers.MMSPROXY,
+        Telephony.Carriers.MMSPORT,
+        Telephony.Carriers.AUTH_TYPE,
+        Telephony.Carriers.TYPE,
+        Telephony.Carriers.PROTOCOL,
+        Telephony.Carriers.CARRIER_ENABLED,
+        Telephony.Carriers.BEARER,
+        Telephony.Carriers.BEARER_BITMASK,
+        Telephony.Carriers.ROAMING_PROTOCOL,
+    };
+
     private static final int ID_INDEX = 0;
     @VisibleForTesting
     static final int NAME_INDEX = 1;
@@ -309,6 +332,9 @@
             mApnData = getApnDataFromUri(uri);
         } else {
             mApnData = new ApnData(sProjection.length);
+            if (action.equals(Intent.ACTION_INSERT)) {
+                setDefaultData();
+            }
         }
 
         final boolean isUserEdited = mApnData.getInteger(EDITED_INDEX,
@@ -596,6 +622,10 @@
                 mMvnoType.setValue(mMvnoTypeStr);
                 mMvnoMatchData.setText(mMvnoMatchDataStr);
             }
+            String localizedName = Utils.getLocalizedName(getActivity(), mApnData.getString(NAME_INDEX));
+            if (!TextUtils.isEmpty(localizedName)) {
+                mName.setText(localizedName);
+            }
         }
 
         mName.setSummary(checkNull(mName.getText()));
@@ -726,6 +756,11 @@
                         telephonyManager = telephonyManagerForSubId;
                     }
                     mMvnoMatchData.setText(telephonyManager.getGroupIdLevel1());
+                } else if (values[mvnoIndex].equals("ICCID")) {
+                    if (mMvnoMatchDataStr != null) {
+                        Log.d(TAG, "mMvnoMatchDataStr: " + mMvnoMatchDataStr);
+                        mMvnoMatchData.setText(mMvnoMatchDataStr);
+                    }
                 }
             }
 
@@ -1214,6 +1249,51 @@
         return sNotSet.equals(value) ? null : value;
     }
 
+    private void setDefaultData() {
+        CarrierConfigManager configManager = (CarrierConfigManager)
+                getSystemService(Context.CARRIER_CONFIG_SERVICE);
+        if (configManager != null) {
+            PersistableBundle b = configManager.getConfigForSubId(mSubId);
+            if (b != null) {
+                PersistableBundle defaultValues = b.getPersistableBundle(
+                        APN_DEFALUT_VALUES_STRING_ARRAY);
+                if (defaultValues != null && !defaultValues.isEmpty()) {
+                    Set<String> keys = defaultValues.keySet();
+                    for (String key : keys) {
+                        if (fieldValidate(key)) {
+                            setAppData(key, defaultValues.get(key));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private void setAppData(String key, Object object) {
+        int index = findIndexOfKey(key);
+        if (index >= 0) {
+            mApnData.setObject(index, object);
+        }
+    }
+
+    private int findIndexOfKey(String key) {
+        for(int i = 0; i < sProjection.length; i++) {
+            if (sProjection[i].equals(key)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    private boolean fieldValidate(String field){
+        for(String tableField : sUIConfigurableItems){
+            if(tableField.equalsIgnoreCase(field))
+                return true;
+        }
+        Log.w(TAG, field + " is not configurable");
+        return false;
+    }
+
     @VisibleForTesting
     String getUserEnteredApnType() {
         // if user has not specified a type, map it to "ALL APN TYPES THAT ARE NOT READ-ONLY"
@@ -1443,6 +1523,10 @@
         String getString(int index) {
             return (String) mData[index];
         }
+
+        void setObject(int index, Object value) {
+            mData[index] = value;
+        }
     }
 
     private static int getBitmaskForTech(int radioTech) {
diff --git a/src/com/android/settings/network/ApnPreference.java b/src/com/android/settings/network/ApnPreference.java
index 63e2838..898a507 100755
--- a/src/com/android/settings/network/ApnPreference.java
+++ b/src/com/android/settings/network/ApnPreference.java
@@ -108,6 +108,13 @@
         mSelectedKey = getKey();
     }
 
+
+    // ApnPreference.mSelectedKey static variable is shared for MSim case,
+    // need be initialized according to preferred apn id per sub
+    public static void setSelectedKey(String preferredApnKey) {
+        mSelectedKey = preferredApnKey;
+    }
+
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         Log.i(TAG, "ID: " + getKey() + " :" + isChecked);
         if (mProtectFromCheckedChange) {
diff --git a/src/com/android/settings/network/ApnSettings.java b/src/com/android/settings/network/ApnSettings.java
index f7617fc..f5786b3 100755
--- a/src/com/android/settings/network/ApnSettings.java
+++ b/src/com/android/settings/network/ApnSettings.java
@@ -26,6 +26,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.res.Resources.NotFoundException;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
@@ -40,6 +41,7 @@
 import android.telephony.CarrierConfigManager;
 import android.telephony.PhoneStateListener;
 import android.telephony.PreciseDataConnectionState;
+import android.telephony.ServiceState;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -53,12 +55,18 @@
 
 import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
+import com.android.ims.ImsManager;
 
 import com.android.settings.R;
 import com.android.settings.RestrictedSettingsFragment;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+import com.android.settings.Utils;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 public class ApnSettings extends RestrictedSettingsFragment
         implements Preference.OnPreferenceChangeListener {
@@ -83,6 +91,8 @@
             Telephony.Carriers.MVNO_TYPE,
             Telephony.Carriers.MVNO_MATCH_DATA,
             Telephony.Carriers.EDITED_STATUS,
+            Telephony.Carriers.BEARER,
+            Telephony.Carriers.BEARER_BITMASK,
     };
 
     private static final int ID_INDEX = 0;
@@ -92,6 +102,8 @@
     private static final int MVNO_TYPE_INDEX = 4;
     private static final int MVNO_MATCH_DATA_INDEX = 5;
     private static final int EDITED_INDEX = 6;
+    private static final int BEARER_INDEX = 7;
+    private static final int BEARER_BITMASK_INDEX = 8;
 
     private static final int MENU_NEW = Menu.FIRST;
     private static final int MENU_RESTORE = Menu.FIRST + 1;
@@ -127,6 +139,16 @@
     private boolean mAllowAddingApns;
     private boolean mHidePresetApnDetails;
 
+    private String[] mHideApnsWithRule;
+    private String[] mHideApnsWithIccidRule;
+    private PersistableBundle mHideApnsGroupByIccid;
+    private final static String INCLUDE_COMMON_RULES = "include_common_rules";
+    private final static String APN_HIDE_RULE_STRINGS_ARRAY= "apn_hide_rule_strings_array";
+    private final static String APN_HIDE_RULE_STRINGS_WITH_ICCIDS_ARRAY = "apn_hide_rule_strings_with_iccids_array";
+
+    private final static String ACTION_VOLTE_ENABLED_STATE_CHANGED
+            = "org.codeaurora.intent.action.ACTION_ENHANCE_4G_SWITCH";
+
     public ApnSettings() {
         super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
     }
@@ -164,6 +186,12 @@
                     restartPhoneStateListener(mSubId);
                 }
                 fillList();
+            } else if (intent.getAction().equals(ACTION_VOLTE_ENABLED_STATE_CHANGED)) {
+                if (!mRestoreDefaultApnMode) {
+                    fillList();
+                } else {
+                    showDialog(DIALOG_RESTORE_DEFAULTAPN);
+                }
             }
         }
     };
@@ -200,6 +228,9 @@
         mPhoneId = SubscriptionUtil.getPhoneId(activity, mSubId);
         mIntentFilter = new IntentFilter(
                 TelephonyManager.ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED);
+        if (Utils.isSupportCTPA(getActivity().getApplicationContext())) {
+            mIntentFilter.addAction(ACTION_VOLTE_ENABLED_STATE_CHANGED);
+        }
 
         setIfOnlyAvailableForAdmins(true);
 
@@ -211,6 +242,14 @@
         final PersistableBundle b = configManager.getConfigForSubId(mSubId);
         mHideImsApn = b.getBoolean(CarrierConfigManager.KEY_HIDE_IMS_APN_BOOL);
         mAllowAddingApns = b.getBoolean(CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL);
+
+        mHideApnsWithRule = b.getStringArray(APN_HIDE_RULE_STRINGS_ARRAY);
+        mHideApnsWithIccidRule = b.getStringArray(APN_HIDE_RULE_STRINGS_WITH_ICCIDS_ARRAY);
+        if(mSubscriptionInfo != null){
+           String iccid = mSubscriptionInfo.getIccId();
+           Log.d(TAG, "iccid: " + iccid);
+           mHideApnsGroupByIccid = b.getPersistableBundle(iccid);
+        }
         if (mAllowAddingApns) {
             final String[] readOnlyApnTypes = b.getStringArray(
                     CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY);
@@ -303,10 +342,18 @@
                 new StringBuilder("NOT (type='ia' AND (apn=\"\" OR apn IS NULL)) AND "
                 + "user_visible!=0");
 
-        if (mHideImsApn) {
+        int phoneId = SubscriptionManager.getPhoneId(subId);
+        Context appContext = getActivity().getApplicationContext();
+        boolean isVoLTEEnabled = ImsManager.getInstance(appContext, phoneId)
+                .isEnhanced4gLteModeSettingEnabledByUser();
+        if (mHideImsApn || (Utils.isSupportCTPA(appContext) && !isVoLTEEnabled)) {
             where.append(" AND NOT (type='ims')");
         }
 
+        appendFilter(where);
+
+        Log.d(TAG, "where = " + where.toString());
+
         final Cursor cursor = getContentResolver().query(simApnUri,
                 CARRIERS_PROJECTION, where.toString(), null,
                 Telephony.Carriers.DEFAULT_SORT_ORDER);
@@ -319,9 +366,13 @@
             final ArrayList<ApnPreference> mmsApnList = new ArrayList<ApnPreference>();
 
             mSelectedKey = getSelectedApnKey();
+
+            // ApnPreference.mSelectedKey static variable is shared for MSim case,
+            // need be initialized according to preferred apn id per sub
+            ApnPreference.setSelectedKey(mSelectedKey);
             cursor.moveToFirst();
             while (!cursor.isAfterLast()) {
-                final String name = cursor.getString(NAME_INDEX);
+                String name = cursor.getString(NAME_INDEX);
                 final String apn = cursor.getString(APN_INDEX);
                 final String key = cursor.getString(ID_INDEX);
                 final String type = cursor.getString(TYPES_INDEX);
@@ -329,6 +380,26 @@
                 mMvnoType = cursor.getString(MVNO_TYPE_INDEX);
                 mMvnoMatchData = cursor.getString(MVNO_MATCH_DATA_INDEX);
 
+                //Special requirement of some operators, need change APN name follow language.
+                String localizedName = Utils.getLocalizedName(getActivity(), cursor.getString(NAME_INDEX));
+
+                if (!TextUtils.isEmpty(localizedName)) {
+                    name = localizedName;
+                }
+                int bearer = cursor.getInt(BEARER_INDEX);
+                int bearerBitMask = cursor.getInt(BEARER_BITMASK_INDEX);
+                int fullBearer = ServiceState.getBitmaskForTech(bearer) | bearerBitMask;
+                int radioTech = networkTypeToRilRidioTechnology(TelephonyManager.getDefault()
+                        .getDataNetworkType(subId));
+                if (!ServiceState.bitmaskHasTech(fullBearer, radioTech)
+                        && (bearer != 0 || bearerBitMask != 0)) {
+                    // In OOS, show APN with bearer as default
+                    if ((radioTech != ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN) || (bearer == 0
+                            && radioTech == ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN)) {
+                        cursor.moveToNext();
+                        continue;
+                    }
+                }
                 final ApnPreference pref = new ApnPreference(getPrefContext());
 
                 pref.setKey(key);
@@ -342,7 +413,10 @@
                     pref.setSummary(apn);
                 }
 
-                final boolean selectable = ((type == null) || !type.equals("mms"));
+                boolean selectable = ((type == null) || !type.equals("mms"));
+                if (isVoLTEEnabled && selectable && Utils.isSupportCTPA(appContext)) {
+                    selectable = ((type == null) || !type.equals("ims"));
+                }
                 pref.setSelectable(selectable);
                 if (selectable) {
                     if ((mSelectedKey != null) && mSelectedKey.equals(key)) {
@@ -365,6 +439,150 @@
         }
     }
 
+    private void appendFilter(StringBuilder where){
+        boolean includeCommon = true;
+        if(mHideApnsGroupByIccid != null && !mHideApnsGroupByIccid.isEmpty()){
+           // APN hidden rules according to the specified iccid,
+           // it should be configured in CarrierConfig as below.
+           // <map name="12345">
+           //    <string name="type">fota</string>
+           //    <boolean name="include_common_rules" value="true"/>
+           // </map>
+           includeCommon = mHideApnsGroupByIccid.getBoolean(INCLUDE_COMMON_RULES, true);
+           Log.d(TAG, "apn hidden rules specified iccid, include common rule: " + includeCommon);
+           Set<String> keys = mHideApnsGroupByIccid.keySet();
+           for(String key : keys){
+              if(Utils.carrierTableFieldValidate(key)){
+                 String value = mHideApnsGroupByIccid.getString(key);
+                 if(value != null){
+                    where.append(" AND " + key + " <> \"" + value + "\"");
+                 }
+              }
+           }
+        }
+
+        // Some operator have special APN hidden rules group by iccids,
+        // it should be configured in CarrierConfig as below,
+        // it maybe overwrite some rules defined in common rules.
+        // <string-array name="apn_hide_rule_strings_with_iccids_array" num="6">
+        //    <item value="iccid"/>
+        //    <item value="1111,2222"/>
+        //    <item value="type"/>
+        //    <item value="ims,emergency"/>
+        //    <item value="include_common_rules"/>
+        //    <item value="true"/>
+        // </string-array>
+        if(mHideApnsWithIccidRule != null){
+            HashMap<String, String> ruleWithIccid = getApnRuleMap(mHideApnsWithIccidRule);
+            final String iccid = mSubscriptionInfo == null ? "" : mSubscriptionInfo.getIccId();
+            if(isOperatorIccid(ruleWithIccid, iccid)){
+                String s = ruleWithIccid.get(INCLUDE_COMMON_RULES);
+                includeCommon = !(s != null && s.equalsIgnoreCase(String.valueOf(false)));
+                Log.d(TAG, "apn hidden rules in iccids, include common rule: " + includeCommon);
+                filterWithKey(ruleWithIccid, where);
+            }
+        }
+
+        if(includeCommon){
+            // Common APN hidden rules,
+            // it should be configured in CarrierConfig as below.
+            // <string-array name="apn_default_values_strings_array" num="2">
+            //    <item value="type"/>
+            //    <item value="fota"/>
+            // </string-array>
+            if(mHideApnsWithRule != null){
+               HashMap<String, String> rule = getApnRuleMap(mHideApnsWithRule);
+               filterWithKey(rule, where);
+            }
+        }
+    }
+
+    private void filterWithKey(Map<String, String> rules, StringBuilder where) {
+        Set<String> fields = rules.keySet();
+        for(String field : fields){
+            if(Utils.carrierTableFieldValidate(field)){
+                String value = rules.get(field);
+                if(!TextUtils.isEmpty(value)){
+                    String[] subValues = value.split(",");
+                    for(String subValue : subValues){
+                        where.append(" AND " + field + " <> \"" + subValue + "\"");
+                    }
+                }
+            }
+        }
+    }
+
+    private HashMap<String, String> getApnRuleMap(String[] ruleArray) {
+        HashMap<String, String> rules = new HashMap<String, String>();
+        if (ruleArray != null) {
+            int length = ruleArray.length;
+            Log.d(TAG, "ruleArray size = " + length);
+            if (length > 0 && (length % 2 == 0)) {
+                for (int i = 0; i < length;) {
+                    rules.put(ruleArray[i].toLowerCase(), ruleArray[i + 1]);
+                    i += 2;
+                }
+            }
+        }
+        return rules;
+    }
+
+    private boolean isOperatorIccid(HashMap<String, String> ruleMap, String iccid) {
+        String valuesOfIccid = ruleMap.get("iccid");
+        if (!TextUtils.isEmpty(valuesOfIccid)) {
+            String[] iccids = valuesOfIccid.split(",");
+            for (String subIccid : iccids) {
+                if (iccid.startsWith(subIccid.trim())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private int networkTypeToRilRidioTechnology(int nt) {
+        switch(nt) {
+            case TelephonyManager.NETWORK_TYPE_GPRS:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_GPRS;
+            case TelephonyManager.NETWORK_TYPE_EDGE:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_EDGE;
+            case TelephonyManager.NETWORK_TYPE_UMTS:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_UMTS;
+            case TelephonyManager.NETWORK_TYPE_HSDPA:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_HSDPA;
+            case TelephonyManager.NETWORK_TYPE_HSUPA:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_HSUPA;
+            case TelephonyManager.NETWORK_TYPE_HSPA:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_HSPA;
+            case TelephonyManager.NETWORK_TYPE_CDMA:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_IS95B;
+            case TelephonyManager.NETWORK_TYPE_1xRTT:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT;
+            case TelephonyManager.NETWORK_TYPE_EVDO_0:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0;
+            case TelephonyManager.NETWORK_TYPE_EVDO_A:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A;
+            case TelephonyManager.NETWORK_TYPE_EVDO_B:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_B;
+            case TelephonyManager.NETWORK_TYPE_EHRPD:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD;
+            case TelephonyManager.NETWORK_TYPE_LTE:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_LTE;
+            case TelephonyManager.NETWORK_TYPE_HSPAP:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP;
+            case TelephonyManager.NETWORK_TYPE_GSM:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_GSM;
+            case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA;
+            case TelephonyManager.NETWORK_TYPE_IWLAN:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN;
+            case TelephonyManager.NETWORK_TYPE_LTE_CA:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA;
+            default:
+                return ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN;
+        }
+    }
+
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         if (!mUnavailable) {
diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java
index 5612d2e..b479b02 100644
--- a/src/com/android/settings/network/MobileNetworkPreferenceController.java
+++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java
@@ -19,6 +19,7 @@
 import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
 
 import android.content.BroadcastReceiver;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -26,6 +27,8 @@
 import android.provider.Settings;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
 import androidx.annotation.VisibleForTesting;
@@ -37,12 +40,14 @@
 import com.android.settings.network.telephony.MobileNetworkUtils;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.RestrictedPreference;
-import com.android.settingslib.Utils;
+import com.android.settings.Utils;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
 
+import java.util.List;
+
 public class MobileNetworkPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop {
 
@@ -55,9 +60,12 @@
     private Preference mPreference;
     @VisibleForTesting
     PhoneStateListener mPhoneStateListener;
+    private SubscriptionManager mSubscriptionManager;
 
     private BroadcastReceiver mAirplanModeChangedReceiver;
 
+    private String mSummary;
+
     public MobileNetworkPreferenceController(Context context) {
         super(context);
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
@@ -67,9 +75,11 @@
         mAirplanModeChangedReceiver = new BroadcastReceiver() {
             @Override
             public void onReceive(Context context, Intent intent) {
+                updateDisplayName();
                 updateState(mPreference);
             }
         };
+        mSubscriptionManager = SubscriptionManager.from(context);
     }
 
     @Override
@@ -98,11 +108,14 @@
 
     @Override
     public void onStart() {
+        if (mSubscriptionManager != null)
+            mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
         if (isAvailable()) {
             if (mPhoneStateListener == null) {
                 mPhoneStateListener = new PhoneStateListener() {
                     @Override
                     public void onServiceStateChanged(ServiceState serviceState) {
+                        updateDisplayName();
                         updateState(mPreference);
                     }
                 };
@@ -115,11 +128,53 @@
         }
     }
 
+    private void updateDisplayName() {
+        if (mPreference != null) {
+            List<SubscriptionInfo> list = mSubscriptionManager.getActiveSubscriptionInfoList();
+            if (list != null && !list.isEmpty()) {
+                boolean useSeparator = false;
+                StringBuilder builder = new StringBuilder();
+                for (SubscriptionInfo subInfo : list) {
+                    if (isSubscriptionInService(subInfo.getSubscriptionId())) {
+                        if (useSeparator) builder.append(", ");
+                        builder.append(mTelephonyManager.getNetworkOperatorName
+                                (subInfo.getSubscriptionId()));
+                        useSeparator = true;
+                    }
+                }
+                mSummary = builder.toString();
+            } else {
+                mSummary = mTelephonyManager.getNetworkOperatorName();
+            }
+        }
+    }
+
+    private boolean isSubscriptionInService(int subId) {
+        if (mTelephonyManager != null) {
+            if (mTelephonyManager.getServiceStateForSubscriber(subId).getState()
+                    == ServiceState.STATE_IN_SERVICE) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener
+            = new SubscriptionManager.OnSubscriptionsChangedListener() {
+        @Override
+        public void onSubscriptionsChanged() {
+             updateDisplayName();
+             updateState(mPreference);
+        }
+    };
+
     @Override
     public void onStop() {
         if (mPhoneStateListener != null) {
             mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
         }
+        mSubscriptionManager
+                .removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
         if (mAirplanModeChangedReceiver != null) {
             mContext.unregisterReceiver(mAirplanModeChangedReceiver);
         }
@@ -149,6 +204,6 @@
 
     @Override
     public CharSequence getSummary() {
-        return MobileNetworkUtils.getCurrentCarrierNameForDisplay(mContext);
+        return mSummary;
     }
 }
diff --git a/src/com/android/settings/network/TetherPreferenceController.java b/src/com/android/settings/network/TetherPreferenceController.java
index 2409544..cf7a719 100644
--- a/src/com/android/settings/network/TetherPreferenceController.java
+++ b/src/com/android/settings/network/TetherPreferenceController.java
@@ -71,7 +71,11 @@
                 }
 
                 public void onServiceDisconnected(int profile) {
-                    mBluetoothPan.set(null);
+                    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+                    BluetoothProfile currentProfile = mBluetoothPan.getAndSet(null);
+                    if (currentProfile != null && adapter != null) {
+                        adapter.closeProfileProxy(BluetoothProfile.PAN, currentProfile);
+                    }
                 }
             };
 
@@ -128,15 +132,20 @@
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
-        if (mBluetoothAdapter != null &&
-            mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
-            mBluetoothAdapter.getProfileProxy(mContext, mBtProfileServiceListener,
-                    BluetoothProfile.PAN);
-        }
     }
 
     @Override
     public void onResume() {
+        if (mBluetoothAdapter != null &&
+            mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
+            final BluetoothProfile profile = mBluetoothPan.get();
+
+            if (profile == null) {
+                mBluetoothAdapter.getProfileProxy(mContext, mBtProfileServiceListener,
+                        BluetoothProfile.PAN);
+            }
+        }
+
         if (mAirplaneModeObserver == null) {
             mAirplaneModeObserver = new SettingObserver();
         }
@@ -151,6 +160,10 @@
 
     @Override
     public void onPause() {
+        final BluetoothProfile profile = mBluetoothPan.getAndSet(null);
+        if (profile != null && mBluetoothAdapter != null) {
+            mBluetoothAdapter.closeProfileProxy(BluetoothProfile.PAN, profile);
+        }
         if (mAirplaneModeObserver != null) {
             mContext.getContentResolver().unregisterContentObserver(mAirplaneModeObserver);
         }
@@ -161,10 +174,6 @@
 
     @Override
     public void onDestroy() {
-        final BluetoothProfile profile = mBluetoothPan.getAndSet(null);
-        if (profile != null && mBluetoothAdapter != null) {
-            mBluetoothAdapter.closeProfileProxy(BluetoothProfile.PAN, profile);
-        }
     }
 
     public static boolean isTetherConfigDisallowed(Context context) {
diff --git a/src/com/android/settings/network/telephony/CellInfoUtil.java b/src/com/android/settings/network/telephony/CellInfoUtil.java
index d7d2b18..396a35d 100644
--- a/src/com/android/settings/network/telephony/CellInfoUtil.java
+++ b/src/com/android/settings/network/telephony/CellInfoUtil.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.network.telephony;
 
+import android.telephony.AccessNetworkConstants.AccessNetworkType;
 import android.telephony.CellIdentity;
 import android.telephony.CellIdentityGsm;
 import android.telephony.CellIdentityLte;
@@ -29,6 +30,7 @@
 import android.telephony.CellInfoNr;
 import android.telephony.CellInfoTdscdma;
 import android.telephony.CellInfoWcdma;
+import android.telephony.ServiceState;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
@@ -132,6 +134,139 @@
         return ci;
     }
 
+    /**
+     * Creates a CellInfo object from OperatorInfo for Legacy Incremental Scan results.
+     */
+    public static CellInfo convertLegacyIncrScanOperatorInfoToCellInfo(OperatorInfo operatorInfo) {
+        final String operatorNumeric = operatorInfo.getOperatorNumeric();
+        String mcc = null;
+        String mnc = null;
+        String ran = String.valueOf(AccessNetworkType.UNKNOWN);
+
+        if (operatorNumeric != null) {
+            if (operatorNumeric.matches("^[0-9]{5,6}$")) {
+                mcc = operatorNumeric.substring(0, 3);
+                mnc = operatorNumeric.substring(3);
+            } else if (operatorNumeric.matches("^[0-9]{5,6}[+][0-9]{1,2}$")) {
+                // If the operator numeric contains the RAN, then parse the MCC-MNC accordingly
+                String values[] = operatorNumeric.split("\\+");
+                mcc = values[0].substring(0, 3);
+                mnc = values[0].substring(3);
+                ran = values[1];
+            }
+        }
+
+        CellInfoNr cellInfoNr = null;
+        CellInfoLte cellInfoLte = null;
+        CellInfoWcdma cellInfoWcdma = null;
+        CellInfoGsm cellInfoGsm = null;
+        CellInfoGsm cellInfoDefault = null;
+
+        // Convert RadioAccessNetwork(ran) to AccessNetworkType
+        int accessNetworkType = AccessNetworkType.convertRanToAnt(Integer.parseInt(ran));
+
+        switch(accessNetworkType) {
+            case AccessNetworkType.NGRAN:
+                // 5G
+                CellIdentityNr cellIdentityNr = new CellIdentityNr(
+                    Integer.MAX_VALUE /* pci */,
+                    Integer.MAX_VALUE /* tac */,
+                    Integer.MAX_VALUE /* nrArfcn */,
+                    null /* bands */,
+                    mcc,
+                    mnc,
+                    Integer.MAX_VALUE /* nci */,
+                    operatorInfo.getOperatorAlphaLong() + " 5G",
+                    operatorInfo.getOperatorAlphaShort() + " 5G",
+                    Collections.emptyList());
+                cellInfoNr = new CellInfoNr();
+                cellInfoNr.setCellIdentity(cellIdentityNr);
+                break;
+
+            case AccessNetworkType.EUTRAN:
+                // 4G
+                CellIdentityLte cellIdentityLte = new CellIdentityLte(
+                    Integer.MAX_VALUE /* ci */,
+                    Integer.MAX_VALUE /* pci */,
+                    Integer.MAX_VALUE /* tac */,
+                    Integer.MAX_VALUE /* earfcn */,
+                    null /* bands */,
+                    Integer.MAX_VALUE /* bandwidth */,
+                    mcc,
+                    mnc,
+                    operatorInfo.getOperatorAlphaLong() + " 4G",
+                    operatorInfo.getOperatorAlphaShort() + " 4G",
+                    Collections.emptyList(),
+                    null /* csgInfo */);
+                cellInfoLte = new CellInfoLte();
+                cellInfoLte.setCellIdentity(cellIdentityLte);
+                break;
+
+            case AccessNetworkType.UTRAN:
+                CellIdentityWcdma cellIdentityWcdma = new CellIdentityWcdma(
+                    Integer.MAX_VALUE /* lac */,
+                    Integer.MAX_VALUE /* cid */,
+                    Integer.MAX_VALUE /* psc */,
+                    Integer.MAX_VALUE /* uarfcn */,
+                    mcc,
+                    mnc,
+                    operatorInfo.getOperatorAlphaLong() + " 3G",
+                    operatorInfo.getOperatorAlphaShort() + " 3G",
+                    Collections.emptyList(),
+                    null /* csgInfo */);
+                cellInfoWcdma = new CellInfoWcdma();
+                cellInfoWcdma.setCellIdentity(cellIdentityWcdma);
+                break;
+
+            case AccessNetworkType.GERAN:
+                // 2G
+                CellIdentityGsm cellIdentityGsm = new CellIdentityGsm(
+                    Integer.MAX_VALUE /* lac */,
+                    Integer.MAX_VALUE /* cid */,
+                    Integer.MAX_VALUE /* arfcn */,
+                    Integer.MAX_VALUE /* bsic */,
+                    mcc,
+                    mnc,
+                    operatorInfo.getOperatorAlphaLong() + " 2G",
+                    operatorInfo.getOperatorAlphaShort() + " 2G",
+                    Collections.emptyList());
+                cellInfoGsm = new CellInfoGsm();
+                cellInfoGsm.setCellIdentity(cellIdentityGsm);
+                break;
+
+            default:
+                // This is when RAT info is not present with the PLMN.
+                // Do not add any network class to the operator name.
+                CellIdentityGsm cellIdentityDefault = new CellIdentityGsm(
+                    Integer.MAX_VALUE /* lac */,
+                    Integer.MAX_VALUE /* cid */,
+                    Integer.MAX_VALUE /* arfcn */,
+                    Integer.MAX_VALUE /* bsic */,
+                    mcc,
+                    mnc,
+                    operatorInfo.getOperatorAlphaLong(),
+                    operatorInfo.getOperatorAlphaShort(),
+                    Collections.emptyList());
+                cellInfoDefault = new CellInfoGsm();
+                cellInfoDefault.setCellIdentity(cellIdentityDefault);
+                break;
+        }
+
+        CellInfo cellInfo = null;
+        if (cellInfoNr != null) cellInfo = cellInfoNr;
+        else if (cellInfoLte != null) cellInfo = cellInfoLte;
+        else if (cellInfoWcdma != null) cellInfo = cellInfoWcdma;
+        else if (cellInfoGsm != null) cellInfo = cellInfoGsm;
+        else cellInfo = cellInfoDefault;
+
+        if (operatorInfo.getState() == OperatorInfo.State.CURRENT) {
+            // Unlike the legacy full scan, legacy incremental scanning using qcril hooks
+            // sends the results containing the info about the currently registered operator.
+            cellInfo.setRegistered(true);
+        }
+        return cellInfo;
+    }
+
     /** Convert a list of cellInfos to readable string without sensitive info. */
     public static String cellInfoListToString(List<CellInfo> cellInfos) {
         return cellInfos.stream()
diff --git a/src/com/android/settings/network/telephony/DataDefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DataDefaultSubscriptionController.java
new file mode 100644
index 0000000..f4dfbc6
--- /dev/null
+++ b/src/com/android/settings/network/telephony/DataDefaultSubscriptionController.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved
+ * Not a contribution
+ *
+ * Copyright (C) 2019 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.settings.network.telephony;
+
+ import android.content.Context;
+ import android.telephony.SubscriptionInfo;
+ import android.telephony.SubscriptionManager;
+
+public class DataDefaultSubscriptionController extends DefaultSubscriptionController {
+
+    private static final String SETTING_USER_PREF_DATA_SUB = "user_preferred_data_sub";
+
+    public DataDefaultSubscriptionController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    @Override
+    protected SubscriptionInfo getDefaultSubscriptionInfo() {
+        return mManager.getActiveSubscriptionInfo(getDefaultSubscriptionId());
+    }
+
+    @Override
+    protected int getDefaultSubscriptionId() {
+        return SubscriptionManager.getDefaultDataSubscriptionId();
+    }
+
+    @Override
+    protected void setDefaultSubscription(int subscriptionId) {
+        mManager.setDefaultDataSubId(subscriptionId);
+        setUserPrefDataSubIdInDb(subscriptionId);
+    }
+
+    private void setUserPrefDataSubIdInDb(int subId) {
+        android.provider.Settings.Global.putInt(mContext.getContentResolver(),
+                SETTING_USER_PREF_DATA_SUB, subId);
+    }
+}
diff --git a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
old mode 100644
new mode 100755
index 1d82f65..0ee844c
--- a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
+++ b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
@@ -24,8 +24,12 @@
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
+import android.telephony.PhoneStateListener;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
 
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleObserver;
@@ -36,12 +40,15 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.network.SubscriptionUtil;
 import com.android.settings.network.SubscriptionsChangeListener;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import org.codeaurora.internal.IExtTelephony;
+
 /**
  * This implements common controller functionality for a Preference letting the user see/change
  * what mobile network subscription is used by default for some service controlled by the
@@ -62,10 +69,27 @@
             new ComponentName("com.android.phone",
                     "com.android.services.telephony.TelephonyConnectionService");
 
+    protected TelephonyManager mTelephonyManager;
+
+    //String keys for data preference lookup
+    private static final String LIST_DATA_PREFERENCE_KEY = "data_preference";
+
+    private int mPhoneCount;
+    private PhoneStateListener[] mPhoneStateListener;
+    private int[] mCallState;
+    private ArrayList<SubscriptionInfo> mSelectableSubs;
+
     public DefaultSubscriptionController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mManager = context.getSystemService(SubscriptionManager.class);
         mChangeListener = new SubscriptionsChangeListener(context, this);
+
+        mTelephonyManager = (TelephonyManager) mContext
+                .getSystemService(Context.TELEPHONY_SERVICE);
+        mPhoneCount = mTelephonyManager.getPhoneCount();
+        mPhoneStateListener = new PhoneStateListener[mPhoneCount];
+        mCallState = new int[mPhoneCount];
+        mSelectableSubs = new ArrayList<SubscriptionInfo>();
     }
 
     public void init(Lifecycle lifecycle) {
@@ -85,23 +109,27 @@
 
     @Override
     public int getAvailabilityStatus(int subId) {
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
-        if (subs.size() > 1) {
-            return AVAILABLE;
+        boolean visible = false;
+        if (mSelectableSubs != null && mSelectableSubs.size() > 1) {
+            visible = true;
         } else {
-            return CONDITIONALLY_UNAVAILABLE;
+            visible = false;
         }
+
+        return visible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
     @OnLifecycleEvent(ON_RESUME)
     public void onResume() {
         mChangeListener.start();
+        registerPhoneStateListener();
         updateEntries();
     }
 
     @OnLifecycleEvent(ON_PAUSE)
     public void onPause() {
         mChangeListener.stop();
+        unRegisterPhoneStateListener();
     }
 
     @Override
@@ -131,6 +159,13 @@
         if (mPreference == null) {
             return;
         }
+
+        updateSubStatus();
+        if (mSelectableSubs.isEmpty()) {
+            Log.d(TAG, "updateEntries: mSelectable subs is empty");
+            return;
+        }
+
         if (!isAvailable()) {
             mPreference.setVisible(false);
             return;
@@ -142,8 +177,6 @@
         // getAvailabilityStatus returned CONDITIONALLY_UNAVAILABLE at the time.
         mPreference.setOnPreferenceChangeListener(this);
 
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
-
         // We'll have one entry for each available subscription, plus one for a "ask me every
         // time" entry at the end.
         final ArrayList<CharSequence> displayNames = new ArrayList<>();
@@ -152,7 +185,7 @@
         final int serviceDefaultSubId = getDefaultSubscriptionId();
         boolean subIsAvailable = false;
 
-        for (SubscriptionInfo sub : subs) {
+        for (SubscriptionInfo sub : mSelectableSubs) {
             if (sub.isOpportunistic()) {
                 continue;
             }
@@ -163,9 +196,13 @@
                 subIsAvailable = true;
             }
         }
-        // Add the extra "Ask every time" value at the end.
-        displayNames.add(mContext.getString(R.string.calls_and_sms_ask_every_time));
-        subscriptionIds.add(Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
+        if (TextUtils.equals(getPreferenceKey(), LIST_DATA_PREFERENCE_KEY)) {
+            mPreference.setEnabled(isCallStateIdle());
+        } else {
+            // Add the extra "Ask every time" value at the end.
+            displayNames.add(mContext.getString(R.string.calls_and_sms_ask_every_time));
+            subscriptionIds.add(Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
+        }
 
         mPreference.setEntries(displayNames.toArray(new CharSequence[0]));
         mPreference.setEntryValues(subscriptionIds.toArray(new CharSequence[0]));
@@ -247,6 +284,16 @@
         return (label != null) ? label : "";
     }
 
+    private boolean isCallStateIdle() {
+        boolean callStateIdle = true;
+        for (int i = 0; i < mPhoneCount; i++) {
+            if (TelephonyManager.CALL_STATE_IDLE != mCallState[i]) {
+                callStateIdle = false;
+            }
+        }
+        return callStateIdle;
+    }
+
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         final int subscriptionId = Integer.parseInt((String) newValue);
@@ -261,9 +308,64 @@
 
     @Override
     public void onSubscriptionsChanged() {
+        if (mSelectableSubs != null) mSelectableSubs.clear();
+        updateSubStatus();
+
         if (mPreference != null) {
             updateEntries();
             refreshSummary(mPreference);
         }
     }
+
+    private void registerPhoneStateListener() {
+        //To make sure subinfo is added, before registering for call state change
+        updateSubStatus();
+
+        for (int i = 0; i < mSelectableSubs.size(); i++) {
+             int subId = mSelectableSubs.get(i).getSubscriptionId();
+             TelephonyManager tm = mTelephonyManager.createForSubscriptionId(subId);
+             tm.listen(getPhoneStateListener(i),
+                     PhoneStateListener.LISTEN_CALL_STATE);
+        }
+    }
+
+    private void unRegisterPhoneStateListener() {
+        for (int i = 0; i < mPhoneCount; i++) {
+            if (mPhoneStateListener[i] != null) {
+                mTelephonyManager.listen(mPhoneStateListener[i], PhoneStateListener.LISTEN_NONE);
+                mPhoneStateListener[i] = null;
+            }
+        }
+    }
+
+    private PhoneStateListener getPhoneStateListener(int phoneId) {
+        // Disable Sim selection for Data when voice call is going on as changing the default data
+        // sim causes a modem reset currently and call gets disconnected
+        final int i = phoneId;
+        mPhoneStateListener[phoneId]  = new PhoneStateListener() {
+            @Override
+            public void onCallStateChanged(int state, String incomingNumber) {
+                mCallState[i] = state;
+                updateEntries();
+            }
+        };
+        return mPhoneStateListener[phoneId];
+    }
+
+    private void updateSubStatus() {
+        if (!mSelectableSubs.isEmpty()) {
+            return;
+        }
+
+        for (int i = 0; i < mPhoneCount; ++i) {
+            final SubscriptionInfo sir = mManager
+                    .getActiveSubscriptionInfoForSimSlotIndex(i);
+            if (sir != null) {
+                int subStatus = PrimaryCardAndSubsidyLockUtils.getUiccCardProvisioningStatus(i);
+                if (subStatus == PrimaryCardAndSubsidyLockUtils.CARD_PROVISIONED) {
+                    mSelectableSubs.add(sir);
+                }
+            }
+        }
+    }
 }
diff --git a/src/com/android/settings/network/telephony/Enabled5GPreferenceController.java b/src/com/android/settings/network/telephony/Enabled5GPreferenceController.java
new file mode 100755
index 0000000..08b3c18
--- /dev/null
+++ b/src/com/android/settings/network/telephony/Enabled5GPreferenceController.java
@@ -0,0 +1,212 @@
+/**
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+package com.android.settings.network.telephony;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.ContentObserver;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.PersistableBundle;
+import android.provider.Settings;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
+
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+import com.android.settings.R;
+import com.android.settings.network.telephony.MobileNetworkUtils;
+
+
+/**
+ * Preference controller for "Enabled 5G Switch"
+*/
+
+public class Enabled5GPreferenceController extends TelephonyTogglePreferenceController
+         implements LifecycleObserver, OnStart, OnStop {
+    private static final String TAG = "Enable5g";
+
+    Preference mPreference;
+    private CarrierConfigManager mCarrierConfigManager;
+    private PersistableBundle mCarrierConfig;
+    private TelephonyManager mTelephonyManager;
+
+    private ContentObserver mPreferredNetworkModeObserver;
+    private ContentObserver mSubsidySettingsObserver;
+
+    private final BroadcastReceiver mDefaultDataChangedReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (mPreference != null) {
+                Log.d(TAG,"DDS is changed");
+                updateState(mPreference);
+            }
+        }
+    };
+    public Enabled5GPreferenceController(Context context, String key) {
+        super(context, key);
+        mPreferredNetworkModeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
+            @Override
+            public void onChange(boolean selfChange) {
+                if (mPreference != null) {
+                    Log.d(TAG, "mPreferredNetworkModeObserver#onChange");
+                    updateState(mPreference);
+                }
+            }
+        };
+        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
+    }
+
+    public Enabled5GPreferenceController init(int subId) {
+        if (SubscriptionManager.isValidSubscriptionId(mSubId) && mSubId == subId) {
+            return this;
+        }
+        mSubId = subId;
+        mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
+        mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+            .createForSubscriptionId(mSubId);
+        return this;
+    }
+
+    @Override
+    public int getAvailabilityStatus(int subId) {
+        init(subId);
+        final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
+        if (carrierConfig == null || mTelephonyManager == null) {
+            return CONDITIONALLY_UNAVAILABLE;
+        }
+        int defaultDdsSubId = SubscriptionManager.getDefaultDataSubscriptionId();
+        final boolean isDds = defaultDdsSubId == subId;
+        final boolean is5gEnabledByCarrier = (mTelephonyManager.getAllowedNetworkTypes()
+                & TelephonyManager.NETWORK_TYPE_BITMASK_NR) > 0;
+        final boolean isVisible = SubscriptionManager.isValidSubscriptionId(subId)
+            && !carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENABLED_5G_BOOL)
+            && is5gEnabledByCarrier
+            && isDds;
+        return isVisible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mPreference = screen.findPreference(getPreferenceKey());
+    }
+
+    @Override
+    public void onStart() {
+        mContext.getContentResolver().registerContentObserver(
+                Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId), true,
+                mPreferredNetworkModeObserver);
+        mContext.registerReceiver(mDefaultDataChangedReceiver,
+                new IntentFilter(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED));
+    }
+
+    @Override
+    public void onStop() {
+        if (mPreferredNetworkModeObserver != null) {
+            mContext.getContentResolver().unregisterContentObserver(mPreferredNetworkModeObserver);
+        }
+        if (mDefaultDataChangedReceiver != null) {
+            mContext.unregisterReceiver(mDefaultDataChangedReceiver);
+        }
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        super.updateState(preference);
+        final SwitchPreference switchPreference = (SwitchPreference) preference;
+        switchPreference.setVisible(isAvailable());
+        long preferredNetworkBitMask = MobileNetworkUtils.getRafFromNetworkType(
+                Settings.Global.getInt(mContext.getContentResolver(),
+                    Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
+                    TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE));
+        switchPreference.setChecked(isNrNetworkModeType(preferredNetworkBitMask));
+    }
+
+    @Override
+    public boolean setChecked(boolean isChecked) {
+        if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
+            return false;
+        }
+        int preNetworkMode = Settings.Global.getInt(mContext.getContentResolver(),
+                Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
+                TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
+        long newNetworkBitMask;
+        if (TelephonyManager.NETWORK_MODE_NR_ONLY != preNetworkMode) {
+            long preNetworkBitMask = MobileNetworkUtils.getRafFromNetworkType(preNetworkMode);
+            newNetworkBitMask = isChecked ?
+                (preNetworkBitMask | TelephonyManager.NETWORK_TYPE_BITMASK_NR)
+                : (preNetworkBitMask & ~TelephonyManager.NETWORK_TYPE_BITMASK_NR);
+        } else {
+            newNetworkBitMask = MobileNetworkUtils
+                .getRafFromNetworkType(TelephonyManager.NETWORK_MODE_LTE_ONLY);
+        }
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
+                MobileNetworkUtils.getNetworkTypeFromRaf((int)newNetworkBitMask));
+        if (mTelephonyManager.setPreferredNetworkTypeBitmask(newNetworkBitMask)) {
+            Log.d(TAG, "setPreferredNetworkTypeBitmask");
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isChecked(){
+        long preNetworkBitMask = MobileNetworkUtils.getRafFromNetworkType(
+                Settings.Global.getInt(mContext.getContentResolver(),
+                    Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
+                    TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE));
+        return isNrNetworkModeType(preNetworkBitMask);
+    }
+
+    private boolean isNrNetworkModeType(long currentRadioBitmask) {
+        return checkSupportedRadioBitmask(currentRadioBitmask,
+                TelephonyManager.NETWORK_TYPE_BITMASK_NR);
+    }
+
+    boolean checkSupportedRadioBitmask(long supportedRadioBitmask, long targetBitmask) {
+        Log.d(TAG, "supportedRadioBitmask: " + supportedRadioBitmask);
+        if ((targetBitmask & supportedRadioBitmask) > 0) {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index 6327375..1504fe5 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -20,6 +20,7 @@
 import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
 
 import android.content.Context;
+import android.database.ContentObserver;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.PersistableBundle;
@@ -54,12 +55,20 @@
 
     private static final String LOG_TAG = "EnabledNetworkMode";
     private PreferredNetworkModeContentObserver mPreferredNetworkModeObserver;
+    private ContentObserver mSubsidySettingsObserver;
     private Preference mPreference;
     private PreferenceScreen mPreferenceScreen;
     private TelephonyManager mTelephonyManager;
     private CarrierConfigManager mCarrierConfigManager;
     private PreferenceEntriesBuilder mBuilder;
 
+    // Local cache for Primary Card and Subsidy Lock related vendor properties. Reading these
+    // properties are a costly affair since they involve two IPC calls, an AIDL and another HIDL.
+    // So we cache these and reuse them as and when applicable.
+    boolean mIsPrimaryCardEnabled = false;
+    boolean mIsPrimaryCardLWEnabled = false;
+    boolean mIsSubsidyLockFeatureEnabled = false;
+
     public EnabledNetworkModePreferenceController(Context context, String key) {
         super(context, key);
     }
@@ -88,10 +97,16 @@
 
     @OnLifecycleEvent(ON_START)
     public void onStart() {
-        if (mPreferredNetworkModeObserver == null) {
+        if (mPreferredNetworkModeObserver == null || mSubsidySettingsObserver == null) {
             return;
         }
+        loadPrimaryCardAndSubsidyLockValues();
         mPreferredNetworkModeObserver.register(mContext, mSubId);
+        if (mIsSubsidyLockFeatureEnabled) {
+            mContext.getContentResolver().registerContentObserver(
+                    Settings.Secure.getUriFor(PrimaryCardAndSubsidyLockUtils.SUBSIDY_STATUS), false,
+                    mSubsidySettingsObserver);
+        }
     }
 
     @OnLifecycleEvent(ON_STOP)
@@ -100,6 +115,9 @@
             return;
         }
         mPreferredNetworkModeObserver.unregister(mContext);
+        if (mSubsidySettingsObserver != null) {
+            mContext.getContentResolver().unregisterContentObserver(mSubsidySettingsObserver);
+        }
     }
 
     @Override
@@ -151,6 +169,19 @@
             mPreferredNetworkModeObserver.setPreferredNetworkModeChangedListener(
                     () -> updatePreference());
         }
+        if (mSubsidySettingsObserver == null) {
+            mSubsidySettingsObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
+                @Override
+                public void onChange(boolean selfChange) {
+                    if (mPreference != null) {
+                        if (PrimaryCardAndSubsidyLockUtils.DBG) {
+                            Log.d(LOG_TAG, "mSubsidySettingsObserver#onChange");
+                        }
+                        updateState(mPreference);
+                    }
+                }
+            };
+        }
 
         lifecycle.addObserver(this);
     }
@@ -362,6 +393,69 @@
                 default:
                     throw new IllegalArgumentException("Not supported enabled network types.");
             }
+
+            /* TODO(b/151744192) - Update Primary Card and Subsidy Lock for 75867d8f634ce62f4787dbf2aef71312308dd415
+            // Primary Card Feature
+            // If the current SIM is not the primary card
+            //     1. If PrimaryCardL_W is enabled, restrict mode selection to GSM and WCDMA options.
+            //     2. If the current mode is GSM_only, disable the network mode preference on the UI.
+            final int currentPrimarySlot = Settings.Global.getInt(mContext.getContentResolver(),
+                    PrimaryCardAndSubsidyLockUtils.CONFIG_CURRENT_PRIMARY_SUB,
+                    SubscriptionManager.INVALID_SIM_SLOT_INDEX);
+
+            boolean isCurrentPrimarySlotValid = currentPrimarySlot >= 0
+                    && currentPrimarySlot < mTelephonyManager.getActiveModemCount();
+
+            int currentPhoneId = SubscriptionManager.getPhoneId(mSubId);
+
+            Log.d(LOG_TAG, "currentPrimarySlot: " + currentPrimarySlot
+                    + ", isCurrentPrimarySlotValid: " + isCurrentPrimarySlotValid
+                    + ", currentPhoneId: " + currentPhoneId);
+
+            if (mIsPrimaryCardEnabled) {
+                if (PrimaryCardAndSubsidyLockUtils.DBG) {
+                    Log.d(LOG_TAG, "isPrimaryCardEnabled: true");
+                }
+                if (isCurrentPrimarySlotValid
+                        && currentPhoneId != currentPrimarySlot) {
+                    if (mIsPrimaryCardLWEnabled) {
+                        Log.d(LOG_TAG, "Primary card LW is enabled");
+                        preference.setEntries(R.array.enabled_networks_gsm_wcdma_choices);
+                        preference.setEntryValues(R.array.enabled_networks_gsm_wcdma_values);
+                    } else if (getPreferredNetworkMode() == TelephonyManager.NETWORK_MODE_GSM_ONLY) {
+                        Log.d(LOG_TAG, "Network mode is GSM only, disabling the preference");
+                        preference.setEnabled(false);
+                    }
+                }
+            }
+
+            // Subsidy Lock Feature
+            // If subsidy is unlocked,
+            //     1. Change the entries in the network mode choices for the primary sub.
+            //     2. Disable the network mode preference on the UI for the non-primary sub.
+            if (PrimaryCardAndSubsidyLockUtils.DBG) {
+                Log.d(LOG_TAG, "isSubsidyLockFeatureEnabled: " + mIsSubsidyLockFeatureEnabled);
+                Log.d(LOG_TAG, "isSubsidyUnlocked: "
+                        + PrimaryCardAndSubsidyLockUtils.isSubsidyUnlocked(mContext));
+            }
+
+            if (mIsSubsidyLockFeatureEnabled
+                    && PrimaryCardAndSubsidyLockUtils.isSubsidyUnlocked(mContext)) {
+                if (PrimaryCardAndSubsidyLockUtils.DBG) {
+                    Log.d(LOG_TAG, "Subsidy is unlocked");
+                }
+                if (isCurrentPrimarySlotValid) {
+                    if (currentPhoneId == currentPrimarySlot) {
+                        Log.d(LOG_TAG, "Primary sub, change to subsidy choices");
+                        preference.setEntries(R.array.enabled_networks_subsidy_locked_choices);
+                        preference.setEntryValues(R.array.enabled_networks_subsidy_locked_values);
+                    } else {
+                        Log.d(LOG_TAG, "Non-primary sub, disable the preference");
+                        preference.setEnabled(false);
+                    }
+                }
+            }
+            */
         }
 
         private int getPreferredNetworkMode() {
@@ -772,4 +866,17 @@
         }
 
     }
+
+    private void loadPrimaryCardAndSubsidyLockValues() {
+        Log.d(LOG_TAG, "loadPrimaryCardAndSubsidyLockValues");
+        mIsPrimaryCardEnabled = PrimaryCardAndSubsidyLockUtils.isPrimaryCardEnabled();
+        mIsPrimaryCardLWEnabled = PrimaryCardAndSubsidyLockUtils.isPrimaryCardLWEnabled();
+        mIsSubsidyLockFeatureEnabled = PrimaryCardAndSubsidyLockUtils.isSubsidyLockFeatureEnabled();
+
+        if (PrimaryCardAndSubsidyLockUtils.DBG) {
+            Log.d(LOG_TAG, "mIsPrimaryCardEnabled: " + mIsPrimaryCardEnabled);
+            Log.d(LOG_TAG, "mIsPrimaryCardLWEnabled: " + mIsPrimaryCardLWEnabled);
+            Log.d(LOG_TAG, "mIsSubsidyLockFeatureEnabled: " + mIsSubsidyLockFeatureEnabled);
+        }
+    }
 }
diff --git a/src/com/android/settings/network/telephony/LegacyIncrementalScanBroadcastReceiver.java b/src/com/android/settings/network/telephony/LegacyIncrementalScanBroadcastReceiver.java
new file mode 100644
index 0000000..a72f691
--- /dev/null
+++ b/src/com/android/settings/network/telephony/LegacyIncrementalScanBroadcastReceiver.java
@@ -0,0 +1,220 @@
+/**
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+package com.android.settings.network.telephony;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.telephony.CellInfo;
+import android.telephony.CellInfoGsm;
+import android.telephony.NetworkScan;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.telephony.TelephonyScanManager;
+import android.util.Log;
+
+import com.android.internal.telephony.OperatorInfo;
+import com.android.settings.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class receives the incremental scan results intent from QCRIL Message Tunnel, processes it
+ * and sends them to the network search results activity {@link NetworkSelectSettings.java}.
+ */
+
+public class LegacyIncrementalScanBroadcastReceiver extends BroadcastReceiver {
+    private static final String TAG = "LegacyIncrementalScanBroadcastReceiver";
+    private static final String ACTION_INCREMENTAL_NW_SCAN_IND
+            = "qualcomm.intent.action.ACTION_INCREMENTAL_NW_SCAN_IND";
+
+    private static final String EXTRA_SCAN_RESULT           = "scan_result";
+    private static final String EXTRA_INCREMENTAL_SCAN_DATA = "incr_nw_scan_data";
+    private static final String EXTRA_INSTANCE_ID           = "sub_id";
+
+    private static final int QUERY_EXCEPTION                = -1;
+
+    // Network scan was successful and complete
+    private static final int NAS_QUERY_COMPLETE             = 0;
+    // Network scan was partial
+    private static final int NAS_QUERY_PARTIAL              = 1;
+    // Network scan was aborted
+    private static final int NAS_QUERY_ABORT                = 2;
+    // Network scan did not complete due to a radio link failure recovery in progress
+    private static final int NAS_QUERY_REJ_IN_RLF           = 3;
+    // Sending incremental network scan errors
+    private static final int NAS_QUERY_INCREMENT_ERROR      = 4;
+    // Periodic network scan gave partial results
+    private static final int NAS_QUERY_PARTIAL_PERIODIC     = 5;
+
+    private static int sPhoneCount;
+    private Context mContext;
+
+    // QueryDetails for each phoneId
+    private QueryDetails[] mQueryDetails;
+
+    private final TelephonyScanManager.NetworkScanCallback mNetworkScanCallback;
+
+    // TODO: This class may not be required since handling of incremental results is already
+    // being taken care of in {@link NetworkSelectSettings} class.
+    class QueryDetails {
+        String[] storedScanInfo;
+
+        QueryDetails() {
+            storedScanInfo = null;
+        }
+
+        void concatScanInfo(String[] scanInfo) {
+            String[] concatScanInfo = new String[storedScanInfo.length + scanInfo.length];
+            System.arraycopy(storedScanInfo, 0, concatScanInfo, 0, storedScanInfo.length);
+            System.arraycopy(scanInfo, 0, concatScanInfo, storedScanInfo.length,
+                    scanInfo.length);
+            storedScanInfo = concatScanInfo;
+        }
+
+        void reset() {
+            storedScanInfo = null;
+        }
+    }
+
+    public LegacyIncrementalScanBroadcastReceiver(Context context,
+                TelephonyScanManager.NetworkScanCallback mInternalNetworkScanCallback) {
+        mContext = context;
+        TelephonyManager tm =
+                (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        sPhoneCount = tm.getActiveModemCount();
+        mQueryDetails = new QueryDetails[sPhoneCount];
+        for (int i = 0; i < sPhoneCount; i++) {
+            mQueryDetails[i] = new QueryDetails();
+        }
+        mNetworkScanCallback = mInternalNetworkScanCallback;
+    }
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        Log.d(TAG, "onReceive " + intent);
+        if (ACTION_INCREMENTAL_NW_SCAN_IND.equals(intent.getAction())) {
+            broadcastIncrementalQueryResults(intent);
+        }
+    }
+
+    private void onResults(List<CellInfo> results) {
+        mNetworkScanCallback.onResults(results);
+    }
+
+    private void onComplete() {
+        mNetworkScanCallback.onComplete();
+    }
+
+    private void onError(int error) {
+        mNetworkScanCallback.onError(error);
+    }
+
+    private void broadcastIncrementalQueryResults(Intent intent) {
+        int result = intent.getIntExtra(EXTRA_SCAN_RESULT, QUERY_EXCEPTION);
+        int phoneId = intent.getIntExtra(EXTRA_INSTANCE_ID,
+                SubscriptionManager.INVALID_SIM_SLOT_INDEX);
+
+        Log.d(TAG, "broadcastIncrementalQueryResults: phoneid: " + phoneId + ", result: " + result);
+
+        if (phoneId < 0 || phoneId >= sPhoneCount) {
+            // Invalid phoneId
+            onError(NetworkScan.ERROR_INVALID_SCAN);
+            return;
+        }
+
+        if (result == NAS_QUERY_REJ_IN_RLF) {
+            onError(NetworkScan.ERROR_RADIO_INTERFACE_ERROR);
+            return;
+        }
+
+        if (result == NAS_QUERY_ABORT) {
+            onError(NetworkScan.ERROR_MODEM_ERROR);
+            return;
+        }
+
+        if (result == NAS_QUERY_COMPLETE || result == NAS_QUERY_PARTIAL) {
+            String[] scanInfo = intent.getStringArrayExtra(EXTRA_INCREMENTAL_SCAN_DATA);
+            QueryDetails queryDetails = mQueryDetails[phoneId];
+
+            Log.d(TAG, "broadcastIncrementalQueryResults"
+                    + ", scanInfo.length: " + (scanInfo == null ? 0 : scanInfo.length));
+
+            if (queryDetails.storedScanInfo != null && scanInfo != null) {
+                queryDetails.concatScanInfo(scanInfo);
+            } else {
+                queryDetails.storedScanInfo = scanInfo;
+            }
+
+            if (queryDetails.storedScanInfo != null) {
+                List<CellInfo> cellInfos = getCellInfosFromScanResult(queryDetails.storedScanInfo);
+                onResults(cellInfos);
+            }
+
+            if (result == NAS_QUERY_COMPLETE) {
+                // Clear the cache, otherwise the results for the next scan will be combined with
+                // the current one.
+                queryDetails.reset();
+                onComplete();
+            }
+        }
+    }
+
+    private List<CellInfo> getCellInfosFromScanResult(String[] scanInfos) {
+        Log.d(TAG, "Number of operators: " + (scanInfos.length)/4);
+        List<CellInfo> cellInfoList = new ArrayList<CellInfo>();
+        if (scanInfos.length >= 4 && (scanInfos.length % 4 == 0)) {
+            // The scan results are grouped into four elements per operator.
+            for (int i = 0; i < scanInfos.length / 4; i++) {
+                int j = 4 * i;
+                String operatorAlphaLong   = scanInfos[0 + j];
+                String operatorAlphaShort  = scanInfos[1 + j];
+                String operatorNumeric     = scanInfos[2 + j];
+                String operatorStateString = scanInfos[3 + j];
+
+                OperatorInfo operatorInfo = new OperatorInfo(operatorAlphaLong,
+                        operatorAlphaShort,
+                        operatorNumeric,
+                        operatorStateString);
+
+                CellInfo cellinfo =
+                        CellInfoUtil.convertLegacyIncrScanOperatorInfoToCellInfo(operatorInfo);
+
+                Log.d(TAG, "OperatorInfo: " + operatorInfo.toString()
+                        + " CellInfo: " + CellInfoUtil.cellInfoToString(cellinfo));
+
+                cellInfoList.add(cellinfo);
+            }
+        }
+        return cellInfoList;
+    }
+}
diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
index c35eef6..be61a9b 100644
--- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
+++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
@@ -31,6 +31,7 @@
 import androidx.preference.SwitchPreference;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.network.MobileDataContentObserver;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -147,8 +148,13 @@
         final boolean enableData = !isChecked();
         final boolean isMultiSim = (mTelephonyManager.getActiveModemCount() > 1);
         final int defaultSubId = mSubscriptionManager.getDefaultDataSubscriptionId();
-        final boolean needToDisableOthers = mSubscriptionManager
+        boolean needToDisableOthers = mSubscriptionManager
                 .isActiveSubscriptionId(defaultSubId) && defaultSubId != mSubId;
+        if (Utils.isSimSettingsApkAvailable()) {
+            // If vendor SimSettings app is present on the device, then DDS will be controlled
+            // by that app, and there is no need to disable mobile data for other subscriptions.
+            needToDisableOthers = false;
+        }
         if (enableData && isMultiSim && needToDisableOthers) {
             mDialogType = MobileDataDialogFragment.TYPE_MULTI_SIM_DIALOG;
             return true;
diff --git a/src/com/android/settings/network/telephony/MobileNetworkActivity.java b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
index 7f7dc3a..94adf14 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkActivity.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
@@ -170,8 +170,8 @@
     protected void onStart() {
         getProxySubscriptionManager().setLifecycle(getLifecycle());
         super.onStart();
-        // updateSubscriptions doesn't need to be called, onChanged will always be called after we
-        // register a listener.
+        // call updateSubscriptions when start MobileNetworkActivity
+        updateSubscriptions(getSubscription());
     }
 
     @Override
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index 528e5c7..7f17fe4 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -18,10 +18,15 @@
 
 import android.app.Activity;
 import android.app.settings.SettingsEnums;
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.UserManager;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -34,6 +39,8 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 
+import com.android.internal.telephony.IccCardConstants;
+import com.android.internal.telephony.TelephonyIntents;
 import com.android.settings.R;
 import com.android.settings.datausage.BillingCyclePreferenceController;
 import com.android.settings.datausage.DataUsageSummaryPreferenceController;
@@ -47,6 +54,8 @@
 import com.android.settingslib.search.SearchIndexable;
 import com.android.settingslib.utils.ThreadUtils;
 
+import org.codeaurora.internal.IExtTelephony;
+
 import java.util.Arrays;
 import java.util.List;
 
@@ -59,12 +68,17 @@
     @VisibleForTesting
     static final String KEY_CLICKED_PREF = "key_clicked_pref";
 
+    // UICC provisioning status
+    public static final int CARD_NOT_PROVISIONED = 0;
+    public static final int CARD_PROVISIONED = 1;
+
     //String keys for preference lookup
     private static final String BUTTON_CDMA_SYSTEM_SELECT_KEY = "cdma_system_select_key";
     private static final String BUTTON_CDMA_SUBSCRIPTION_KEY = "cdma_subscription_key";
 
     private TelephonyManager mTelephonyManager;
     private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+    private int mPhoneId = SubscriptionManager.INVALID_PHONE_INDEX;
 
     private CdmaSystemSelectPreferenceController mCdmaSystemSelectPreferenceController;
     private CdmaSubscriptionPreferenceController mCdmaSubscriptionPreferenceController;
@@ -76,6 +90,36 @@
     private boolean mDropFirstSubscriptionChangeNotify;
     private int mActiveSubsciptionsListenerCount;
 
+    private final BroadcastReceiver mSimStateReceiver = new BroadcastReceiver() {
+        public void onReceive(Context context, Intent intent) {
+            final String action = intent.getAction();
+            if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) {
+                String state =  intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);
+                Log.d(LOG_TAG, "Received ACTION_SIM_STATE_CHANGED: " + state);
+                setScreenState();
+            }
+        }
+    };
+
+    private void setScreenState() {
+        int simState = mTelephonyManager.getSimState();
+        boolean screenState = simState != TelephonyManager.SIM_STATE_ABSENT;
+        if (screenState) {
+            int provStatus = CARD_NOT_PROVISIONED;
+            IExtTelephony extTelephony = IExtTelephony.Stub
+                    .asInterface(ServiceManager.getService("qti.radio.extphone"));
+            try {
+                provStatus = extTelephony.getCurrentUiccCardProvisioningStatus(mPhoneId);
+            } catch (RemoteException | NullPointerException ex) {
+                Log.e(LOG_TAG, "getUiccCardProvisioningStatus: " + mPhoneId + ", Exception: ", ex);
+            }
+            screenState = provStatus != CARD_NOT_PROVISIONED;
+            Log.d(LOG_TAG, "Provisioning Status: " + provStatus + ", screenState: " + screenState);
+        }
+        Log.d(LOG_TAG, "Setting screen state to: " + screenState);
+        getPreferenceScreen().setEnabled(screenState);
+    }
+
     public MobileNetworkSettings() {
         super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
     }
@@ -115,7 +159,8 @@
     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
                 MobileNetworkUtils.getSearchableSubscriptionId(context));
-        Log.i(LOG_TAG, "display subId: " + mSubId);
+        mPhoneId = SubscriptionManager.getPhoneId(mSubId);
+        Log.i(LOG_TAG, "display subId: " + mSubId + ", phoneId: " + mPhoneId);
 
         if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
             return Arrays.asList();
@@ -134,6 +179,7 @@
         if (dataUsageSummaryPreferenceController != null) {
             dataUsageSummaryPreferenceController.init(mSubId);
         }
+        use(DataDefaultSubscriptionController.class).init(getLifecycle());
         use(CallsDefaultSubscriptionController.class).init(getLifecycle());
         use(SmsDefaultSubscriptionController.class).init(getLifecycle());
         use(MobileNetworkSwitchController.class).init(getLifecycle(), mSubId);
@@ -149,9 +195,10 @@
         use(MobileDataPreferenceController.class).init(getFragmentManager(), mSubId);
         use(RoamingPreferenceController.class).init(getFragmentManager(), mSubId);
         use(ApnPreferenceController.class).init(mSubId);
+        use(UserPLMNPreferenceController.class).init(mSubId);
         use(CarrierPreferenceController.class).init(mSubId);
         use(DataUsagePreferenceController.class).init(mSubId);
-        use(PreferredNetworkModePreferenceController.class).init(mSubId);
+        use(PreferredNetworkModePreferenceController.class).init(getLifecycle(), mSubId);
         use(EnabledNetworkModePreferenceController.class).init(getLifecycle(), mSubId);
         use(DataServiceSetupPreferenceController.class).init(mSubId);
 
@@ -173,6 +220,7 @@
 
         final VideoCallingPreferenceController videoCallingPreferenceController =
                 use(VideoCallingPreferenceController.class).init(mSubId);
+        use(Enabled5GPreferenceController.class).init(mSubId);
         use(CallingPreferenceCategoryController.class).setChildren(
                 Arrays.asList(wifiCallingPreferenceController, videoCallingPreferenceController));
         use(Enhanced4gLtePreferenceController.class).init(mSubId)
@@ -205,6 +253,7 @@
 
     @Override
     public void onResume() {
+        Log.i(LOG_TAG, "onResume:+");
         super.onResume();
         if (mActiveSubsciptionsListener == null) {
             mActiveSubsciptionsListener = new ActiveSubsciptionsListener(
@@ -216,6 +265,14 @@
             mDropFirstSubscriptionChangeNotify = true;
         }
         mActiveSubsciptionsListener.start();
+
+        Context context = getContext();
+        if (context != null) {
+            context.registerReceiver(mSimStateReceiver,
+                    new IntentFilter(TelephonyIntents.ACTION_SIM_STATE_CHANGED));
+        } else {
+            Log.i(LOG_TAG, "context is null, not registering SimStateReceiver");
+        }
     }
 
     private void onSubscriptionDetailChanged() {
@@ -243,6 +300,18 @@
         super.onDestroy();
     }
 
+    @Override
+    public void onPause() {
+        Log.i(LOG_TAG, "onPause:+");
+        super.onPause();
+        Context context = getContext();
+        if (context != null) {
+            context.unregisterReceiver(mSimStateReceiver);
+        } else {
+            Log.i(LOG_TAG, "context already null, not unregistering SimStateReceiver");
+        }
+    }
+
     @VisibleForTesting
     void onRestoreInstance(Bundle icicle) {
         if (icicle != null) {
@@ -319,6 +388,11 @@
 
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.mobile_network_settings) {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+                        boolean enabled) {
+                    return super.getXmlResourcesToIndex(context, enabled);
+                }
 
                 /** suppress full page if user is not admin */
                 @Override
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
index 46c5234..f573ec7 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
@@ -20,8 +20,12 @@
 import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
 
 import android.content.Context;
+import android.sysprop.TelephonyProperties;
+import android.telephony.PhoneStateListener;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.util.Log;
 
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleObserver;
@@ -43,28 +47,38 @@
     private int mSubId;
     private SubscriptionsChangeListener mChangeListener;
     private SubscriptionManager mSubscriptionManager;
+    private TelephonyManager mTelephonyManager;
+    private PhoneStateListener mPhoneStateListener;
+    private SubscriptionInfo mSubInfo = null;
+    private int mPhoneId;
+    private int mCallState;
 
     public MobileNetworkSwitchController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
         mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
         mChangeListener = new SubscriptionsChangeListener(context, this);
+        mTelephonyManager = (TelephonyManager) mContext
+                .getSystemService(Context.TELEPHONY_SERVICE);
     }
 
     public void init(Lifecycle lifecycle, int subId) {
         lifecycle.addObserver(this);
         mSubId = subId;
+        mPhoneId = mSubscriptionManager.getSlotIndex(mSubId);
     }
 
     @OnLifecycleEvent(ON_RESUME)
     public void onResume() {
         mChangeListener.start();
+        registerPhoneStateListener();
         update();
     }
 
     @OnLifecycleEvent(ON_PAUSE)
     public void onPause() {
         mChangeListener.stop();
+        unRegisterPhoneStateListener();
     }
 
     @Override
@@ -78,8 +92,12 @@
         mSwitchBar.getSwitch().setOnBeforeCheckedChangeListener((toggleSwitch, isChecked) -> {
             // TODO b/135222940: re-evaluate whether to use
             // mSubscriptionManager#isSubscriptionEnabled
-            if (mSubscriptionManager.isActiveSubscriptionId(mSubId) != isChecked
-                    && (!mSubscriptionManager.setSubscriptionEnabled(mSubId, isChecked))) {
+        int uiccStatus = PrimaryCardAndSubsidyLockUtils.getUiccCardProvisioningStatus(mPhoneId);
+        Log.d(TAG, "displayPreference: mSubId=" + mSubId + ", mSubInfo=" + mSubInfo +
+                 ", uiccStatus=" + uiccStatus);
+            if ((mSubInfo != null &&
+                    (uiccStatus == PrimaryCardAndSubsidyLockUtils.CARD_PROVISIONED) != isChecked) &&
+                    (!mSubscriptionManager.setSubscriptionEnabled(mSubId, isChecked))) {
                 return true;
             }
             return false;
@@ -92,22 +110,31 @@
             return;
         }
 
-        SubscriptionInfo subInfo = null;
         for (SubscriptionInfo info : SubscriptionUtil.getAvailableSubscriptions(mContext)) {
             if (info.getSubscriptionId() == mSubId) {
-                subInfo = info;
+                mSubInfo = info;
                 break;
             }
         }
 
+        boolean isEcbmEnabled = TelephonyProperties.in_ecm_mode().orElse(false);
+        if ((TelephonyManager.CALL_STATE_IDLE != mCallState) || isEcbmEnabled) {
+            Log.d(TAG, "update: disable switchbar, isEcbmEnabled=" + isEcbmEnabled +
+                    ", callstate=" + mCallState);
+            mSwitchBar.setEnabled(false);
+            return;
+        } else {
+            mSwitchBar.setEnabled(true);
+        }
+
         // For eSIM, we always want the toggle. If telephony stack support disabling a pSIM
         // directly, we show the toggle.
-        if (subInfo == null || (!subInfo.isEmbedded() && !SubscriptionUtil.showToggleForPhysicalSim(
-                mSubscriptionManager))) {
+        if (mSubInfo == null) {
             mSwitchBar.hide();
         } else {
             mSwitchBar.show();
-            mSwitchBar.setCheckedInternal(mSubscriptionManager.isActiveSubscriptionId(mSubId));
+            int uiccStatus = PrimaryCardAndSubsidyLockUtils.getUiccCardProvisioningStatus(mPhoneId);
+            mSwitchBar.setCheckedInternal(uiccStatus == PrimaryCardAndSubsidyLockUtils.CARD_PROVISIONED);
         }
     }
 
@@ -124,4 +151,32 @@
     public void onSubscriptionsChanged() {
         update();
     }
+
+    private void registerPhoneStateListener() {
+        TelephonyManager tm = mTelephonyManager.createForSubscriptionId(mSubId);
+        tm.listen(getPhoneStateListener(),
+                    PhoneStateListener.LISTEN_CALL_STATE);
+    }
+
+    private void unRegisterPhoneStateListener() {
+        if (mPhoneStateListener != null) {
+            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+            mPhoneStateListener = null;
+        }
+    }
+
+    private PhoneStateListener getPhoneStateListener() {
+        // Disable Sim selection for Data when voice call is going on as changing the default data
+        // sim causes a modem reset currently and call gets disconnected
+        // ToDo : Add subtext on disabled preference to let user know that default data sim cannot
+        // be changed while call is going on
+        mPhoneStateListener  = new PhoneStateListener() {
+            @Override
+            public void onCallStateChanged(int state, String incomingNumber) {
+                mCallState = state;
+                update();
+            }
+        };
+        return mPhoneStateListener;
+    }
 }
diff --git a/src/com/android/settings/network/telephony/NetworkOperatorPreference.java b/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
index 97894b1..3e1e0dc 100644
--- a/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
+++ b/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
@@ -19,6 +19,7 @@
 import static android.telephony.SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
 
 import android.content.Context;
+import android.telephony.AccessNetworkConstants.AccessNetworkType;
 import android.telephony.CellIdentity;
 import android.telephony.CellIdentityGsm;
 import android.telephony.CellIdentityLte;
@@ -38,6 +39,7 @@
 import androidx.preference.Preference;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 
 import java.util.List;
 import java.util.Objects;
@@ -57,7 +59,7 @@
     private List<String> mForbiddenPlmns;
     private int mLevel = LEVEL_NONE;
     private boolean mShow4GForLTE;
-    private boolean mUseNewApi;
+    private boolean mIsAdvancedScanSupported;
 
     public NetworkOperatorPreference(Context context, CellInfo cellinfo,
             List<String> forbiddenPlmns, boolean show4GForLTE) {
@@ -76,8 +78,7 @@
         super(context);
         mForbiddenPlmns = forbiddenPlmns;
         mShow4GForLTE = show4GForLTE;
-        mUseNewApi = context.getResources().getBoolean(
-                com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
+        mIsAdvancedScanSupported = Utils.isAdvancedPlmnScanSupported();
     }
 
     /**
@@ -125,10 +126,8 @@
         final CellSignalStrength signalStrength = getCellSignalStrength(mCellInfo);
         final int level = signalStrength != null ? signalStrength.getLevel() : LEVEL_NONE;
         if (DBG) Log.d(TAG, "refresh level: " + String.valueOf(level));
-        if (mLevel != level) {
-            mLevel = level;
-            updateIcon(mLevel);
-        }
+        mLevel = level;
+        updateIcon(mLevel);
     }
 
     /**
@@ -218,11 +217,33 @@
     }
 
     private void updateIcon(int level) {
-        if (!mUseNewApi || level < 0 || level >= NUM_SIGNAL_STRENGTH_BINS) {
+        if (!mIsAdvancedScanSupported || level < 0 || level >= NUM_SIGNAL_STRENGTH_BINS) {
             return;
         }
         final Context context = getContext();
         setIcon(MobileNetworkUtils.getSignalStrengthIcon(context, level, NUM_SIGNAL_STRENGTH_BINS,
                 getIconIdForCell(mCellInfo), false));
     }
+
+    public int getAccessNetworkType() {
+        int cellInfoType = mCellId == null ? CellInfo.TYPE_UNKNOWN : mCellId.getType();
+        int ant;
+        switch (cellInfoType) {
+            case CellInfo.TYPE_GSM:     ant = AccessNetworkType.GERAN;
+                                        break;
+            case CellInfo.TYPE_LTE:     ant = AccessNetworkType.EUTRAN;
+                                        break;
+            case CellInfo.TYPE_WCDMA:   // fallthrough
+            case CellInfo.TYPE_TDSCDMA: ant = AccessNetworkType.UTRAN;
+                                        break;
+            case CellInfo.TYPE_NR:      ant = AccessNetworkType.NGRAN;
+                                        break;
+            default:                    ant = AccessNetworkType.UNKNOWN;
+        }
+
+        Log.d(TAG, "AccessNetworkType: " + AccessNetworkType.toString(ant)
+                + " (" + ant + ")"
+                + ", mCellId: " + mCellId.toString());
+        return ant;
+    }
 }
diff --git a/src/com/android/settings/network/telephony/NetworkScanHelper.java b/src/com/android/settings/network/telephony/NetworkScanHelper.java
index 524a737..2cddb40 100644
--- a/src/com/android/settings/network/telephony/NetworkScanHelper.java
+++ b/src/com/android/settings/network/telephony/NetworkScanHelper.java
@@ -17,6 +17,10 @@
 package com.android.settings.network.telephony;
 
 import android.annotation.IntDef;
+import android.content.Context;
+import android.content.IntentFilter;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.telephony.AccessNetworkConstants.AccessNetworkType;
 import android.telephony.CellInfo;
 import android.telephony.NetworkScan;
@@ -26,13 +30,7 @@
 import android.telephony.TelephonyScanManager;
 import android.util.Log;
 
-import com.android.internal.telephony.CellNetworkScanResult;
-
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.MoreExecutors;
-import com.google.common.util.concurrent.SettableFuture;
+import org.codeaurora.internal.IExtTelephony;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -84,20 +82,10 @@
     }
 
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef({NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS, NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS})
+    @IntDef({NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS, NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS_LEGACY})
     public @interface NetworkQueryType {}
 
     /**
-     * Performs the network scan using {@link TelephonyManager#getAvailableNetworks()}. The network
-     * scan results won't be returned to the caller until the network scan is completed.
-     *
-     * <p> This is typically used when the modem doesn't support the new network scan api
-     * {@link TelephonyManager#requestNetworkScan(
-     * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)}.
-     */
-    public static final int NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS = 1;
-
-    /**
      * Performs the network scan using {@link TelephonyManager#requestNetworkScan(
      * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)} The network scan
      * results will be returned to the caller periodically in a small time window until the network
@@ -108,29 +96,45 @@
      * {@link TelephonyManager#requestNetworkScan(
      * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)}
      */
-    public static final int NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS = 2;
+    public static final int NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS = 1;
+
+    /**
+     * Performs the network scan using {@link IExtTelephony#performIncrementalScan(int)}
+     * The network scan is triggered using QcRil hooks, and the results will be returned to the
+     * caller periodically in a small time window until the network scan is completed.
+     *
+     * <p> This is recommended to be used if modem does not support the new network scan api
+     * {@link TelephonyManager#requestNetworkScan(
+     * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)}.
+     */
+    public static final int NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS_LEGACY = 2;
 
     /** The constants below are used in the async network scan. */
     private static final boolean INCREMENTAL_RESULTS = true;
     private static final int SEARCH_PERIODICITY_SEC = 5;
-    private static final int MAX_SEARCH_TIME_SEC = 300;
+    private static final int MAX_SEARCH_TIME_SEC = 254;
     private static final int INCREMENTAL_RESULTS_PERIODICITY_SEC = 3;
 
     private final NetworkScanCallback mNetworkScanCallback;
     private final TelephonyManager mTelephonyManager;
     private final TelephonyScanManager.NetworkScanCallback mInternalNetworkScanCallback;
     private final Executor mExecutor;
-
+    private final LegacyIncrementalScanBroadcastReceiver mLegacyIncrScanReceiver;
+    private Context mContext;
     private NetworkScan mNetworkScanRequester;
+    private IExtTelephony mExtTelephony;
+    private IntentFilter filter =
+            new IntentFilter("qualcomm.intent.action.ACTION_INCREMENTAL_NW_SCAN_IND");
 
-    /** Callbacks for sync network scan */
-    private ListenableFuture<List<CellInfo>> mNetworkScanFuture;
-
-    public NetworkScanHelper(TelephonyManager tm, NetworkScanCallback callback, Executor executor) {
+    public NetworkScanHelper(Context context, TelephonyManager tm, NetworkScanCallback callback,
+                             Executor executor) {
+        mContext = context;
         mTelephonyManager = tm;
         mNetworkScanCallback = callback;
         mInternalNetworkScanCallback = new NetworkScanCallbackImpl();
         mExecutor = executor;
+        mLegacyIncrScanReceiver =
+                new LegacyIncrementalScanBroadcastReceiver(mContext, mInternalNetworkScanCallback);
     }
 
     private NetworkScanRequest createNetworkScanForPreferredAccessNetworks() {
@@ -156,19 +160,11 @@
             radioAccessSpecifiers.add(
                     new RadioAccessSpecifier(AccessNetworkType.EUTRAN, null, null));
         }
-        // If a device supports 5G stand-alone then the code below should be re-enabled; however
-        // a device supporting only non-standalone mode cannot perform PLMN selection and camp on
-        // a 5G network, which means that it shouldn't scan for 5G at the expense of battery as
-        // part of the manual network selection process.
-        //
-        // FIXME(b/151119451): re-enable this code once there is a way to distinguish SA from NSA
-        // support in the modem.
-        //
-        // if (networkTypeBitmap3gpp == 0
-        //        || (networkTypeBitmap3gpp & TelephonyManager.NETWORK_CLASS_BITMASK_5G) != 0) {
-        //    radioAccessSpecifiers.add(
-        //            new RadioAccessSpecifier(AccessNetworkType.NGRAN, null, null));
-        // }
+        if (networkTypeBitmap3gpp == 0
+               || (networkTypeBitmap3gpp & TelephonyManager.NETWORK_CLASS_BITMASK_5G) != 0) {
+            radioAccessSpecifiers.add(
+                    new RadioAccessSpecifier(AccessNetworkType.NGRAN, null, null));
+        }
 
         return new NetworkScanRequest(
                 NetworkScanRequest.SCAN_TYPE_ONE_SHOT,
@@ -190,27 +186,8 @@
      * @param type used to tell which network scan API should be used.
      */
     public void startNetworkScan(@NetworkQueryType int type) {
-        if (type == NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS) {
-            mNetworkScanFuture = SettableFuture.create();
-            Futures.addCallback(mNetworkScanFuture, new FutureCallback<List<CellInfo>>() {
-                @Override
-                public void onSuccess(List<CellInfo> result) {
-                    onResults(result);
-                    onComplete();
-                }
-
-                @Override
-                public void onFailure(Throwable t) {
-                    if (t instanceof CancellationException) {
-                        return;
-                    }
-                    int errCode = Integer.parseInt(t.getMessage());
-                    onError(errCode);
-                }
-            }, MoreExecutors.directExecutor());
-            mExecutor.execute(new NetworkScanSyncTask(
-                    mTelephonyManager, (SettableFuture) mNetworkScanFuture));
-        } else if (type == NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS) {
+        Log.d(TAG, "startNetworkScan: " + type);
+        if (type == NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS) {
             if (mNetworkScanRequester != null) {
                 return;
             }
@@ -221,6 +198,21 @@
             if (mNetworkScanRequester == null) {
                 onError(NetworkScan.ERROR_RADIO_INTERFACE_ERROR);
             }
+        } else if (type == NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS_LEGACY) {
+            mContext.registerReceiver(mLegacyIncrScanReceiver, filter);
+            boolean success = false;
+            mExtTelephony = IExtTelephony.Stub
+                    .asInterface(ServiceManager.getService("qti.radio.extphone"));
+            try {
+                success = mExtTelephony.performIncrementalScan(mTelephonyManager.getSlotIndex());
+            } catch (RemoteException | NullPointerException ex) {
+                Log.e(TAG, "performIncrementalScan Exception: ", ex);
+            }
+
+            Log.d(TAG, "success: " + success);
+            if (!success) {
+                onError(NetworkScan.ERROR_RADIO_INTERFACE_ERROR);
+            }
         }
     }
 
@@ -235,9 +227,21 @@
             mNetworkScanRequester = null;
         }
 
-        if (mNetworkScanFuture != null) {
-            mNetworkScanFuture.cancel(true /* mayInterruptIfRunning */);
-            mNetworkScanFuture = null;
+        try {
+            if (mExtTelephony != null) {
+                int slotIndex = mTelephonyManager.getSlotIndex();
+                if (slotIndex >= 0 && slotIndex < mTelephonyManager.getActiveModemCount()) {
+                    mExtTelephony.abortIncrementalScan(slotIndex);
+                } else {
+                    Log.d(TAG, "slotIndex is invalid, skipping abort");
+                }
+                mExtTelephony = null;
+                mContext.unregisterReceiver(mLegacyIncrScanReceiver);
+            }
+        } catch (RemoteException | NullPointerException ex) {
+            Log.e(TAG, "abortIncrementalScan Exception: ", ex);
+        } catch (IllegalArgumentException ex) {
+            Log.e(TAG, "IllegalArgumentException");
         }
     }
 
@@ -253,23 +257,6 @@
         mNetworkScanCallback.onError(errCode);
     }
 
-    /**
-     * Converts the status code of {@link CellNetworkScanResult} to one of the
-     * {@link NetworkScan.ScanErrorCode}.
-     * @param errCode status code from {@link CellNetworkScanResult}.
-     *
-     * @return one of the scan error code from {@link NetworkScan.ScanErrorCode}.
-     */
-    private static int convertToScanErrorCode(int errCode) {
-        switch (errCode) {
-            case CellNetworkScanResult.STATUS_RADIO_NOT_AVAILABLE:
-                return NetworkScan.ERROR_RADIO_INTERFACE_ERROR;
-            case CellNetworkScanResult.STATUS_RADIO_GENERIC_FAILURE:
-            default:
-                return NetworkScan.ERROR_MODEM_ERROR;
-        }
-    }
-
     private final class NetworkScanCallbackImpl extends TelephonyScanManager.NetworkScanCallback {
         public void onResults(List<CellInfo> results) {
             Log.d(TAG, "Async scan onResults() results = "
@@ -287,35 +274,4 @@
             NetworkScanHelper.this.onError(errCode);
         }
     }
-
-    private static final class NetworkScanSyncTask implements Runnable {
-        private final SettableFuture<List<CellInfo>> mCallback;
-        private final TelephonyManager mTelephonyManager;
-
-        NetworkScanSyncTask(
-                TelephonyManager telephonyManager, SettableFuture<List<CellInfo>> callback) {
-            mTelephonyManager = telephonyManager;
-            mCallback = callback;
-        }
-
-        @Override
-        public void run() {
-            final CellNetworkScanResult result = mTelephonyManager.getAvailableNetworks();
-            if (result.getStatus() == CellNetworkScanResult.STATUS_SUCCESS) {
-                final List<CellInfo> cellInfos = result.getOperators()
-                        .stream()
-                        .map(operatorInfo
-                                -> CellInfoUtil.convertOperatorInfoToCellInfo(operatorInfo))
-                        .collect(Collectors.toList());
-                Log.d(TAG, "Sync network scan completed, cellInfos = "
-                        + CellInfoUtil.cellInfoListToString(cellInfos));
-                mCallback.set(cellInfos);
-            } else {
-                final Throwable error = new Throwable(
-                        Integer.toString(convertToScanErrorCode(result.getStatus())));
-                mCallback.setException(error);
-                Log.d(TAG, "Sync network scan error, ex = " + error);
-            }
-        }
-    }
 }
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index 3f18928..f409285 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -28,6 +28,10 @@
 import android.telephony.CarrierConfigManager;
 import android.telephony.CellIdentity;
 import android.telephony.CellInfo;
+import android.telephony.CellInfoCdma;
+import android.telephony.CellInfoGsm;
+import android.telephony.CellInfoLte;
+import android.telephony.CellInfoWcdma;
 import android.telephony.NetworkRegistrationInfo;
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
@@ -41,6 +45,7 @@
 import androidx.preference.PreferenceCategory;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -49,6 +54,8 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
+import java.util.HashSet;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -83,6 +90,7 @@
     private final ExecutorService mNetworkScanExecutor = Executors.newFixedThreadPool(1);
     private MetricsFeatureProvider mMetricsFeatureProvider;
     private boolean mUseNewApi;
+    private boolean mIsAdvancedScanSupported;
     private long mRequestIdManualNetworkSelect;
     private long mRequestIdManualNetworkScan;
     private long mWaitingForNumberOfScanResults;
@@ -93,8 +101,8 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
-        mUseNewApi = getContext().getResources().getBoolean(
-                com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
+        mIsAdvancedScanSupported = Utils.isAdvancedPlmnScanSupported();
+        Log.d(TAG, "mIsAdvancedScanSupported: " + mIsAdvancedScanSupported);
         mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);
 
         mPreferenceCategory = findPreference(PREF_KEY_NETWORK_OPERATORS);
@@ -104,7 +112,7 @@
         mTelephonyManager = getContext().getSystemService(TelephonyManager.class)
                 .createForSubscriptionId(mSubId);
         mNetworkScanHelper = new NetworkScanHelper(
-                mTelephonyManager, mCallback, mNetworkScanExecutor);
+                getContext(), mTelephonyManager, mCallback, mNetworkScanExecutor);
         PersistableBundle bundle = ((CarrierConfigManager) getContext().getSystemService(
                 Context.CARRIER_CONFIG_SERVICE)).getConfigForSubId(mSubId);
         if (bundle != null) {
@@ -131,6 +139,7 @@
 
     @Override
     public void onStart() {
+        Log.d(TAG, "onStart()");
         super.onStart();
 
         updateForbiddenPlmns();
@@ -138,6 +147,8 @@
             return;
         }
         if (mWaitingForNumberOfScanResults <= 0) {
+            // Clear the selected preference whenever the scan starts
+            mSelectedPreference = null;
             startNetworkQuery();
         }
     }
@@ -155,6 +166,7 @@
 
     @Override
     public void onStop() {
+        Log.d(TAG, "onStop() mWaitingForNumberOfScanResults: " + mWaitingForNumberOfScanResults);
         super.onStop();
         if (mWaitingForNumberOfScanResults <= 0) {
             stopNetworkQuery();
@@ -186,11 +198,14 @@
             mRequestIdManualNetworkSelect = getNewRequestId();
             mWaitingForNumberOfScanResults = MIN_NUMBER_OF_SCAN_REQUIRED;
             final String operatorNumeric = mSelectedPreference.getOperatorNumeric();
+            final int accessNetworkType = mSelectedPreference.getAccessNetworkType();
             ThreadUtils.postOnBackgroundThread(() -> {
                 final Message msg = mHandler.obtainMessage(
                         EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE);
+                // Send accessNetworkType as a parameter.
+                // This is converted to RadioAccessNetwork in the Telephony Framework.
                 msg.obj = mTelephonyManager.setNetworkSelectionModeManual(
-                        operatorNumeric, true /* persistSelection */);
+                        operatorNumeric, true /* persistSelection */, accessNetworkType);
                 msg.sendToTarget();
             });
         }
@@ -216,10 +231,10 @@
     private final Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
+            Log.d(TAG, "handleMessage, msg.what: " + msg.what);
             switch (msg.what) {
                 case EVENT_SET_NETWORK_SELECTION_MANUALLY_DONE:
                     final boolean isSucceed = (boolean) msg.obj;
-                    stopNetworkQuery();
                     setProgressBarVisible(false);
                     getPreferenceScreen().setEnabled(true);
 
@@ -240,6 +255,7 @@
                     }
 
                     mCellInfoList = new ArrayList<>(results);
+                    Log.d(TAG, "CellInfoList size: " +  mCellInfoList.size());
                     Log.d(TAG, "CellInfoList: " + CellInfoUtil.cellInfoListToString(mCellInfoList));
                     if (mCellInfoList != null && mCellInfoList.size() != 0) {
                         final NetworkOperatorPreference connectedPref =
@@ -406,20 +422,31 @@
             if (networkList == null || networkList.size() == 0) {
                 return;
             }
+
+            Set<CellIdentity> cellIdentitySet = new HashSet<CellIdentity>();
             for (NetworkRegistrationInfo regInfo : networkList) {
+                Log.d(TAG, "regInfo: " + regInfo.toString());
+                // There can be multiple NetworkRegistrationInfos for the same CellIdentity,
+                // e.g., one each for CS and PS. In such cases, show show only one entry,
+                // otherwise it would be quite confusing to the user to see multiple entries for
+                // the same CellIdentity instance.
                 final CellIdentity cellIdentity = regInfo.getCellIdentity();
                 if (cellIdentity != null) {
-                    final NetworkOperatorPreference pref = new NetworkOperatorPreference(
-                            getPrefContext(), cellIdentity, mForbiddenPlmns, mShow4GForLTE);
-                    pref.setSummary(R.string.network_connected);
-                    // Update the signal strength icon, since the default signalStrength value
-                    // would be zero
-                    // (it would be quite confusing why the connected network has no signal)
-                    pref.setIcon(SignalStrength.NUM_SIGNAL_STRENGTH_BINS - 1);
-                    mPreferenceCategory.addPreference(pref);
-                    break;
+                    // Add each valid CellIdentity to a HashSet so that only unique values remain.
+                    cellIdentitySet.add(cellIdentity);
                 }
             }
+
+            for (CellIdentity cellIdentity : cellIdentitySet) {
+                final NetworkOperatorPreference pref = new NetworkOperatorPreference(
+                        getPrefContext(), cellIdentity, mForbiddenPlmns, mShow4GForLTE);
+                pref.setSummary(R.string.network_connected);
+                // Update the signal strength icon, since the default signalStrength value
+                // would be zero
+                // (it would be quite confusing why the connected network has no signal)
+                pref.setIcon(SignalStrength.NUM_SIGNAL_STRENGTH_BINS - 1);
+                mPreferenceCategory.addPreference(pref);
+            }
         }
     }
 
@@ -466,10 +493,11 @@
         if (mNetworkScanHelper != null) {
             mRequestIdManualNetworkScan = getNewRequestId();
             mWaitingForNumberOfScanResults = MIN_NUMBER_OF_SCAN_REQUIRED;
+
             mNetworkScanHelper.startNetworkScan(
-                    mUseNewApi
+                    mIsAdvancedScanSupported
                             ? NetworkScanHelper.NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS
-                            : NetworkScanHelper.NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS);
+                            : NetworkScanHelper.NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS_LEGACY);
         }
     }
 
@@ -483,6 +511,7 @@
 
     @Override
     public void onDestroy() {
+        Log.d(TAG, "onDestroy()");
         stopNetworkQuery();
         mNetworkScanExecutor.shutdown();
         super.onDestroy();
diff --git a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
index 83fa208..7a4b05e 100644
--- a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
@@ -16,15 +16,26 @@
 
 package com.android.settings.network.telephony;
 
+import static androidx.lifecycle.Lifecycle.Event.ON_START;
+import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
+
 import android.content.Context;
+import android.database.ContentObserver;
+import android.os.Handler;
+import android.os.Looper;
 import android.os.PersistableBundle;
 import android.provider.Settings;
 import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.util.Log;
 
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
 import androidx.preference.ListPreference;
 import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
 import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
@@ -33,16 +44,47 @@
  * Preference controller for "Preferred network mode"
  */
 public class PreferredNetworkModePreferenceController extends TelephonyBasePreferenceController
-        implements ListPreference.OnPreferenceChangeListener {
+        implements ListPreference.OnPreferenceChangeListener, LifecycleObserver {
 
+    private static final String LOG_TAG = "PreferredNetworkMode";
     private CarrierConfigManager mCarrierConfigManager;
+    private ContentObserver mPreferredNetworkModeObserver;
+    private ContentObserver mSubsidySettingsObserver;
     private TelephonyManager mTelephonyManager;
     private PersistableBundle mPersistableBundle;
     private boolean mIsGlobalCdma;
+    private Preference mPreference;
+
+    // Local cache for Primary Card and Subsidy Lock related vendor properties. Reading these
+    // properties are a costly affair since they involve two IPC calls, an AIDL and another HIDL.
+    // So we cache these and reuse them as and when applicable.
+    boolean mIsPrimaryCardEnabled = false;
+    boolean mIsPrimaryCardLWEnabled = false;
+    boolean mIsSubsidyLockFeatureEnabled = false;
 
     public PreferredNetworkModePreferenceController(Context context, String key) {
         super(context, key);
         mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
+        mSubsidySettingsObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
+            @Override
+            public void onChange(boolean selfChange) {
+                if (mPreference != null) {
+                    if (PrimaryCardAndSubsidyLockUtils.DBG) {
+                        Log.d(LOG_TAG, "mSubsidySettingsObserver#onChange");
+                    }
+                    updateState(mPreference);
+                }
+            }
+        };
+        mPreferredNetworkModeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
+            @Override
+            public void onChange(boolean selfChange) {
+                if (mPreference != null) {
+                    Log.d(LOG_TAG, "mPreferredNetworkModeObserver#onChange");
+                    updateState(mPreference);
+                }
+            }
+        };
     }
 
     @Override
@@ -67,11 +109,41 @@
         return visible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
+    @OnLifecycleEvent(ON_START)
+    public void onStart() {
+        loadPrimaryCardAndSubsidyLockValues();
+        if (mIsSubsidyLockFeatureEnabled) {
+            mContext.getContentResolver().registerContentObserver(
+                    Settings.Secure.getUriFor(PrimaryCardAndSubsidyLockUtils.SUBSIDY_STATUS), false,
+                    mSubsidySettingsObserver);
+        }
+        mContext.getContentResolver().registerContentObserver(
+                Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId), true,
+                mPreferredNetworkModeObserver);
+    }
+
+    @OnLifecycleEvent(ON_STOP)
+    public void onStop() {
+        if (mSubsidySettingsObserver != null) {
+            mContext.getContentResolver().unregisterContentObserver(mSubsidySettingsObserver);
+        }
+        if (mPreferredNetworkModeObserver != null) {
+            mContext.getContentResolver().unregisterContentObserver(mPreferredNetworkModeObserver);
+        }
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mPreference = screen.findPreference(getPreferenceKey());
+    }
+
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
         final ListPreference listPreference = (ListPreference) preference;
         final int networkMode = getPreferredNetworkMode();
+        updatePreferenceEntries(listPreference);
         listPreference.setValue(Integer.toString(networkMode));
         listPreference.setSummary(getPreferredNetworkModeSummaryResId(networkMode));
     }
@@ -93,7 +165,7 @@
         return false;
     }
 
-    public void init(int subId) {
+    public void init(Lifecycle lifecycle, int subId) {
         mSubId = subId;
         final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
         mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
@@ -101,6 +173,8 @@
 
         mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()
                 && carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
+
+        lifecycle.addObserver(this);
     }
 
     private int getPreferredNetworkMode() {
@@ -191,4 +265,84 @@
                 return R.string.preferred_network_mode_global_summary;
         }
     }
+
+    private void updatePreferenceEntries(ListPreference preference) {
+        // Default values
+        preference.setEntries(R.array.preferred_network_mode_choices);
+        preference.setEntryValues(R.array.preferred_network_mode_values);
+
+        // Primary Card Feature
+        // If the current SIM is not the primary card
+        //     1. If PrimaryCardL_W is enabled, restrict mode selection to GSM and WCDMA options.
+        //     2. If the current mode is GSM_only, disable the network mode preference on the UI.
+        final int currentPrimarySlot = Settings.Global.getInt(mContext.getContentResolver(),
+                PrimaryCardAndSubsidyLockUtils.CONFIG_CURRENT_PRIMARY_SUB,
+                SubscriptionManager.INVALID_SIM_SLOT_INDEX);
+
+        boolean isCurrentPrimarySlotValid = currentPrimarySlot >= 0
+                && currentPrimarySlot < mTelephonyManager.getActiveModemCount();
+
+        int currentPhoneId = SubscriptionManager.getPhoneId(mSubId);
+
+        Log.d(LOG_TAG, "currentPrimarySlot: " + currentPrimarySlot
+                + ", isCurrentPrimarySlotValid: " + isCurrentPrimarySlotValid
+                + ", currentPhoneId: " + currentPhoneId);
+
+        if (mIsPrimaryCardEnabled) {
+            if (PrimaryCardAndSubsidyLockUtils.DBG) {
+                Log.d(LOG_TAG, "isPrimaryCardEnabled: true");
+            }
+            if (isCurrentPrimarySlotValid
+                    && currentPhoneId != currentPrimarySlot) {
+                if (mIsPrimaryCardLWEnabled) {
+                    Log.d(LOG_TAG, "Primary card LW is enabled");
+                    preference.setEntries(R.array.preferred_network_mode_gsm_wcdma_choices);
+                    preference.setEntryValues(R.array.preferred_network_mode_gsm_wcdma_values);
+                } else if (getPreferredNetworkMode() == TelephonyManager.NETWORK_MODE_GSM_ONLY) {
+                    Log.d(LOG_TAG, "Network mode is GSM only, disabling the preference");
+                    preference.setEnabled(false);
+                }
+            }
+        }
+
+        // Subsidy Lock Feature
+        // If subsidy is unlocked,
+        //     1. Change the entries in the network mode choices for the primary sub.
+        //     2. Disable the network mode preference on the UI for the non-primary sub.
+        if (PrimaryCardAndSubsidyLockUtils.DBG) {
+            Log.d(LOG_TAG, "isSubsidyLockFeatureEnabled: " + mIsSubsidyLockFeatureEnabled);
+            Log.d(LOG_TAG, "isSubsidyUnlocked: "
+                    + PrimaryCardAndSubsidyLockUtils.isSubsidyUnlocked(mContext));
+        }
+
+        if (mIsSubsidyLockFeatureEnabled
+                && PrimaryCardAndSubsidyLockUtils.isSubsidyUnlocked(mContext)) {
+            if (PrimaryCardAndSubsidyLockUtils.DBG) {
+                Log.d(LOG_TAG, "Subsidy is unlocked");
+            }
+            if (isCurrentPrimarySlotValid) {
+                if (currentPhoneId == currentPrimarySlot) {
+                    Log.d(LOG_TAG, "Primary sub, change to subsidy choices");
+                    preference.setEntries(R.array.enabled_networks_subsidy_locked_choices);
+                    preference.setEntryValues(R.array.enabled_networks_subsidy_locked_values);
+                } else {
+                    Log.d(LOG_TAG, "Non-primary sub, disable the preference");
+                    preference.setEnabled(false);
+                }
+            }
+        }
+    }
+
+    private void loadPrimaryCardAndSubsidyLockValues() {
+        Log.d(LOG_TAG, "loadPrimaryCardAndSubsidyLockValues");
+        mIsPrimaryCardEnabled = PrimaryCardAndSubsidyLockUtils.isPrimaryCardEnabled();
+        mIsPrimaryCardLWEnabled = PrimaryCardAndSubsidyLockUtils.isPrimaryCardLWEnabled();
+        mIsSubsidyLockFeatureEnabled = PrimaryCardAndSubsidyLockUtils.isSubsidyLockFeatureEnabled();
+
+        if (PrimaryCardAndSubsidyLockUtils.DBG) {
+            Log.d(LOG_TAG, "mIsPrimaryCardEnabled: " + mIsPrimaryCardEnabled);
+            Log.d(LOG_TAG, "mIsPrimaryCardLWEnabled: " + mIsPrimaryCardLWEnabled);
+            Log.d(LOG_TAG, "mIsSubsidyLockFeatureEnabled: " + mIsSubsidyLockFeatureEnabled);
+        }
+    }
 }
diff --git a/src/com/android/settings/network/telephony/PrimaryCardAndSubsidyLockUtils.java b/src/com/android/settings/network/telephony/PrimaryCardAndSubsidyLockUtils.java
new file mode 100644
index 0000000..1d184b5
--- /dev/null
+++ b/src/com/android/settings/network/telephony/PrimaryCardAndSubsidyLockUtils.java
@@ -0,0 +1,136 @@
+/**
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+package com.android.settings.network.telephony;
+
+import android.content.Context;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+import android.util.Log;
+
+import org.codeaurora.internal.IExtTelephony;
+
+/**
+ * Add static utility functions to get information about Primary Card and Subsidy Lock features.
+ */
+public final class PrimaryCardAndSubsidyLockUtils {
+
+    private static final String TAG = "PrimaryCardAndSubsidyLockUtils";
+
+    // Flag to control debug logging for primary card and subsidy lock features
+    public static boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
+
+    // Primary card and subsidy lock related system properties
+    private static final String PROPERTY_PRIMARY_CARD   = "persist.vendor.radio.primarycard";
+    private static final String PROPERTY_DETECT_4G_CARD = "persist.vendor.radio.detect4gcard";
+    private static final String PROPERTY_L_W_ENABLED    = "persist.vendor.radio.lw_enabled";
+    private static final String PROPERTY_SUBSIDY_LOCK   = "ro.vendor.radio.subsidylock";
+
+    // Settings database configurations
+    public static final String CONFIG_CURRENT_PRIMARY_SUB = "config_current_primary_sub";
+    public static final String SUBSIDY_STATUS = "subsidy_status";
+
+    // Subsidy lock resticted states
+    private static final int SUBSIDYLOCK_UNLOCKED = 103;
+    private static final int PERMANENTLY_UNLOCKED = 100;
+
+    // UICC provisioning status
+    public static final int CARD_NOT_PROVISIONED = 0;
+    public static final int CARD_PROVISIONED = 1;
+    public static final int CARD_INVALID_STATE = -1;
+
+    private PrimaryCardAndSubsidyLockUtils() {
+    }
+
+    public static boolean isPrimaryCardEnabled() {
+        return isVendorPropertyEnabled(PROPERTY_PRIMARY_CARD);
+    }
+
+    public static boolean isDetect4gCardEnabled() {
+        return isVendorPropertyEnabled(PROPERTY_DETECT_4G_CARD);
+    }
+
+    public static boolean isPrimaryCardLWEnabled() {
+        return isVendorPropertyEnabled(PROPERTY_L_W_ENABLED);
+    }
+
+    public static boolean isSubsidyLockFeatureEnabled() {
+        return (getVendorPropertyInt(PROPERTY_SUBSIDY_LOCK) == 1);
+    }
+
+    public static boolean isSubsidyUnlocked(Context context) {
+        return getSubsidyStatus(context) == SUBSIDYLOCK_UNLOCKED;
+    }
+
+    public static boolean isSubsidyPermanentlyUnlocked(Context context) {
+        return getSubsidyStatus(context) == SUBSIDYLOCK_UNLOCKED;
+    }
+
+    private static int getSubsidyStatus(Context context) {
+        return Settings.Secure.getInt(context.getContentResolver(), SUBSIDY_STATUS, -1);
+    }
+
+    private static boolean isVendorPropertyEnabled(String propertyName) {
+        boolean propVal = false;
+        IExtTelephony extTelephony = IExtTelephony.Stub
+                .asInterface(ServiceManager.getService("qti.radio.extphone"));
+        try {
+            propVal = extTelephony.getPropertyValueBool(propertyName, false);
+        } catch (RemoteException | NullPointerException ex) {
+            Log.e(TAG, "isVendorPropertyEnabled: " + propertyName + ", Exception: ", ex);
+        }
+        return propVal;
+    }
+
+    private static int getVendorPropertyInt(String propertyName) {
+        int propVal = -1;
+        IExtTelephony extTelephony = IExtTelephony.Stub
+                .asInterface(ServiceManager.getService("qti.radio.extphone"));
+        try {
+            propVal = extTelephony.getPropertyValueInt(propertyName, -1);
+        } catch (RemoteException | NullPointerException ex) {
+            Log.e(TAG, "getVendorPropertyInt: " + propertyName + ", Exception: ", ex);
+        }
+        return propVal;
+    }
+
+    public static int getUiccCardProvisioningStatus(int phoneId) {
+        int provStatus = CARD_NOT_PROVISIONED;
+        IExtTelephony extTelephony = IExtTelephony.Stub
+                .asInterface(ServiceManager.getService("qti.radio.extphone"));
+        try {
+            provStatus = extTelephony.getCurrentUiccCardProvisioningStatus(phoneId);
+        } catch (RemoteException | NullPointerException ex) {
+            Log.e(TAG, "getUiccCardProvisioningStatus: " + phoneId + ", Exception: ", ex);
+        }
+        return provStatus;
+    }
+}
diff --git a/src/com/android/settings/network/telephony/UserPLMNEditorActivity.java b/src/com/android/settings/network/telephony/UserPLMNEditorActivity.java
new file mode 100755
index 0000000..47e0836
--- /dev/null
+++ b/src/com/android/settings/network/telephony/UserPLMNEditorActivity.java
@@ -0,0 +1,403 @@
+/**
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+package com.android.settings.network.telephony;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.text.InputType;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.widget.EditText;
+import android.preference.EditTextPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.os.Bundle;
+import android.util.Log;
+
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.settings.R;
+
+import java.util.List;
+
+/**
+ * Editor activity for "User Controlled PLMN"
+ */
+public class UserPLMNEditorActivity extends PreferenceActivity implements
+        Preference.OnPreferenceChangeListener, TextWatcher {
+    private static final String LOG_TAG = "UserPLMNEditorActivity";
+    private static final int MENU_DELETE_OPTION = Menu.FIRST;
+    private static final int MENU_SAVE_OPTION = Menu.FIRST + 1;
+    private static final int MENU_CANCEL_OPTION = Menu.FIRST + 2;
+    private static final int NWID_DIALOG_ID = 0;
+
+    private static final String BUTTON_NETWORK_ID_KEY = "network_id_key";
+    private static final String BUTTON_PRIORITY_KEY = "priority_key";
+    private static final String BUTTON_NEWWORK_MODE_KEY = "network_mode_key";
+
+    public static final String UPLMN_CODE = "uplmn_code";
+    public static final String UPLMN_PRIORITY = "uplmn_priority";
+    public static final String UPLMN_SERVICE = "uplmn_service";
+    public static final String UPLMN_SIZE = "uplmn_size";
+    public static final String UPLMN_ADD = "uplmn_add";
+
+    public static final int RESULT_CODE_EDIT = 101;
+    public static final int RESULT_CODE_DELETE = 102;
+
+    private static final int GSM = 0;
+    private static final int WCDMA_TDSCDMA = 1;
+    private static final int LTE = 2;
+    private static final int TRIPLE_MODE = 3;
+    private static final int MODE_2G = 0x1;
+    private static final int MODE_3G = 0x4;
+    private static final int MODE_LTE = 0x8;
+    private static final int MODE_TRIPLE = 0xd;
+
+    private String mNoSet = null;
+    private boolean mAirplaneModeOn = false;
+    private IntentFilter mIntentFilter;
+    private Preference mNWIDPref = null;
+    private EditTextPreference mPRIpref = null;
+    private ListPreference mNWMPref = null;
+    private EditText mNWIDText;
+    private AlertDialog mNWIDDialog = null;
+
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
+                mAirplaneModeOn = intent.getBooleanExtra("state", false);
+                setScreenEnabled();
+            }
+        }
+    };
+
+    private OnClickListener mNWIDPrefListener = new OnClickListener() {
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            if (which == DialogInterface.BUTTON_POSITIVE) {
+                String summary = genText(mNWIDText.getText().toString());
+                Log.d(LOG_TAG, "input network id is " + summary);
+                mNWIDPref.setSummary(summary);
+                mNWMPref.setEntries(getResources().getTextArray(
+                        selectNetworkChoices(summary)));
+            }
+        }
+    };
+
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        addPreferencesFromResource(R.xml.uplmn_editor);
+        mNoSet = getResources().getString(R.string.voicemail_number_not_set);
+
+        mNWIDPref = (Preference) findPreference(BUTTON_NETWORK_ID_KEY);
+        mPRIpref = (EditTextPreference) findPreference(BUTTON_PRIORITY_KEY);
+        mNWMPref = (ListPreference) findPreference(BUTTON_NEWWORK_MODE_KEY);
+
+        mPRIpref.setOnPreferenceChangeListener(this);
+        mNWMPref.setOnPreferenceChangeListener(this);
+
+        mIntentFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+        registerReceiver(mReceiver, mIntentFilter);
+    }
+
+    protected void onResume() {
+        super.onResume();
+        displayNetworkInfo(getIntent());
+        mAirplaneModeOn =
+                Settings.System.getInt(
+                        getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
+        setScreenEnabled();
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        unregisterReceiver(mReceiver);
+    }
+
+    public boolean onPreferenceChange(Preference preference, Object object) {
+        String value = object.toString();
+        if (preference == mPRIpref) {
+            mPRIpref.setSummary(genText(value));
+        } else if (preference == mNWMPref) {
+            mNWMPref.setValue(value);
+            String summary = "";
+            int index = Integer.parseInt(value);
+            summary = getResources().getStringArray(
+                    selectNetworkChoices(mNWIDPref.getSummary().toString()))[index];
+            mNWMPref.setSummary(summary);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        if (!getIntent().getBooleanExtra(UPLMN_ADD, false)) {
+            menu.add(0, MENU_DELETE_OPTION, 0,
+                    com.android.internal.R.string.delete);
+        }
+        menu.add(0, MENU_SAVE_OPTION, 0, R.string.save);
+        menu.add(0, MENU_CANCEL_OPTION, 0, com.android.internal.R.string.cancel);
+        return true;
+    }
+
+    @Override
+    public boolean onMenuOpened(int featureId, Menu menu) {
+        super.onMenuOpened(featureId, menu);
+        boolean isEmpty = mNoSet.equals(mNWIDPref.getSummary())
+                || mNoSet.equals(mPRIpref.getSummary());
+        if (menu != null) {
+            menu.setGroupEnabled(0, !mAirplaneModeOn);
+            //only show the save and delete option menu when radio on
+            //and edit text is not empty.
+            if (getIntent().getBooleanExtra(UPLMN_ADD, true)) {
+                menu.getItem(0).setEnabled((!mAirplaneModeOn) && !isEmpty);
+            } else {
+                menu.getItem(1).setEnabled((!mAirplaneModeOn) && !isEmpty);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case MENU_SAVE_OPTION:
+                setSavedNWInfo();
+                break;
+            case MENU_DELETE_OPTION:
+                setRemovedNWInfo();
+                break;
+            case MENU_CANCEL_OPTION:
+                break;
+            case android.R.id.home:
+                finish();
+                return true;
+            default:
+                break;
+        }
+        finish();
+        return super.onOptionsItemSelected(item);
+    }
+
+    private void setSavedNWInfo() {
+        Intent intent = new Intent(this, UserPLMNListActivity.class);
+        genNWInfoToIntent(intent);
+        setResult(RESULT_CODE_EDIT, intent);
+    }
+
+    private void genNWInfoToIntent(Intent intent) {
+        int priority = 0;
+        int plmnListSize = getIntent().getIntExtra(UPLMN_SIZE, 0);
+        try {
+            priority = Integer.parseInt(String.valueOf(mPRIpref.getSummary()));
+        } catch (NumberFormatException e) {
+            Log.d(LOG_TAG, "parse value of basband error");
+        }
+        if (getIntent().getBooleanExtra(UPLMN_ADD, false)) {
+            if (priority > plmnListSize) {
+                priority = plmnListSize;
+            }
+        } else {
+            if (priority >= plmnListSize) {
+                priority = plmnListSize - 1;
+            }
+        }
+        intent.putExtra(UPLMN_PRIORITY, priority);
+
+        try {
+            intent.putExtra(UPLMN_SERVICE, convertApMode2EF(Integer
+                    .parseInt(String.valueOf(mNWMPref.getValue()))));
+        } catch (NumberFormatException e) {
+            intent.putExtra(UPLMN_SERVICE, convertApMode2EF(0));
+        }
+
+        intent.putExtra(UPLMN_CODE, mNWIDPref.getSummary());
+    }
+
+    private void setRemovedNWInfo() {
+        Intent intent = new Intent(this, UserPLMNListActivity.class);
+        genNWInfoToIntent(intent);
+        setResult(RESULT_CODE_DELETE, intent);
+    }
+
+    public static int convertEFMode2Ap(int mode) {
+        int result = 0;
+        if (mode == MODE_TRIPLE) {
+            result = TRIPLE_MODE;
+        } else if (mode == MODE_3G) {
+            result = WCDMA_TDSCDMA;
+        } else if (mode == MODE_LTE) {
+            result = LTE;
+        } else {
+            result = GSM;
+        }
+        return result;
+    }
+
+    public static int convertApMode2EF(int mode) {
+        int result = 0;
+        if (mode == TRIPLE_MODE) {
+            result = MODE_TRIPLE;
+        } else if (mode == LTE) {
+            result = MODE_LTE;
+        } else if (mode == WCDMA_TDSCDMA) {
+            result = MODE_3G;
+        } else {
+            result = MODE_2G;
+        }
+        return result;
+    }
+
+    private void displayNetworkInfo(Intent intent) {
+        String number = intent.getStringExtra(UPLMN_CODE);
+        mNWIDPref.setSummary(genText(number));
+        int priority = intent.getIntExtra(UPLMN_PRIORITY, 0);
+        mPRIpref.setSummary(String.valueOf(priority));
+        mPRIpref.setText(String.valueOf(priority));
+        int act = intent.getIntExtra(UPLMN_SERVICE, 0);
+
+        Log.d(LOG_TAG, "act = " + act);
+
+        act = convertEFMode2Ap(act);
+        if (act < GSM || act > TRIPLE_MODE) {
+            act = GSM;
+        }
+        String summary = "";
+        mNWMPref.setEntries(getResources().getTextArray(
+                selectNetworkChoices(number)));
+        summary = getResources().getStringArray(
+                selectNetworkChoices(number))[act];
+        mNWMPref.setSummary(summary);
+        mNWMPref.setValue(String.valueOf(act));
+    }
+
+    public int selectNetworkChoices(String plmn) {
+        Log.d(LOG_TAG, "plmn = " + plmn);
+        String[] CuPlmnArray = getResources().getStringArray(R.array.uplmn_cu_mcc_mnc_values);
+        for (String CuPlmn : CuPlmnArray) {
+            if (plmn.equals(CuPlmn)) return R.array.uplmn_prefer_network_mode_w_choices;
+        }
+        return R.array.uplmn_prefer_network_mode_td_choices;
+    }
+
+    private String genText(String value) {
+        if (value == null || value.length() == 0) {
+            return mNoSet;
+        } else {
+            return value;
+        }
+    }
+
+    public void buttonEnabled() {
+        int len = mNWIDText.getText().toString().length();
+        boolean state = true;
+        if (len <5 || len > 6) {
+            state = false;
+        }
+        if (mNWIDDialog != null) {
+            mNWIDDialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(
+                    state);
+        }
+    }
+
+    private void setScreenEnabled() {
+        getPreferenceScreen().setEnabled(!mAirplaneModeOn);
+        invalidateOptionsMenu();
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen screen,
+            Preference preference) {
+        if (preference == mNWIDPref) {
+            removeDialog(NWID_DIALOG_ID);
+            showDialog(NWID_DIALOG_ID);
+            buttonEnabled();
+        }
+        return super.onPreferenceTreeClick(screen, preference);
+    }
+
+    @Override
+    public Dialog onCreateDialog(int id) {
+        if (id == NWID_DIALOG_ID) {
+            mNWIDText = new EditText(this);
+            if (!mNoSet.equals(mNWIDPref.getSummary())) {
+                mNWIDText.setText(mNWIDPref.getSummary());
+            }
+            mNWIDText.addTextChangedListener(this);
+            mNWIDText.setInputType(InputType.TYPE_CLASS_NUMBER);
+            mNWIDDialog = new AlertDialog.Builder(this)
+                    .setTitle(getResources().getString(R.string.network_id))
+                    .setView(mNWIDText)
+                    .setPositiveButton(
+                            getResources().getString(
+                                    com.android.internal.R.string.ok),
+                            mNWIDPrefListener)
+                    .setNegativeButton(
+                            getResources().getString(
+                                    com.android.internal.R.string.cancel), null)
+                    .create();
+            mNWIDDialog.getWindow().setSoftInputMode(
+                    WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+            return mNWIDDialog;
+        }
+        return null;
+    }
+
+    @Override
+    public void beforeTextChanged(CharSequence s, int start, int count,
+            int after) {
+    }
+
+    @Override
+    public void afterTextChanged(Editable s) {
+        buttonEnabled();
+    }
+
+    @Override
+    public void onTextChanged(CharSequence s, int start, int before, int count) {
+    }
+
+}
diff --git a/src/com/android/settings/network/telephony/UserPLMNListActivity.java b/src/com/android/settings/network/telephony/UserPLMNListActivity.java
new file mode 100755
index 0000000..283b1b4
--- /dev/null
+++ b/src/com/android/settings/network/telephony/UserPLMNListActivity.java
@@ -0,0 +1,746 @@
+/**
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+package com.android.settings.network.telephony;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.ProgressDialog;
+import android.content.DialogInterface;
+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.Message;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.telephony.PhoneStateListener;
+import android.telephony.TelephonyManager;
+import android.telephony.SubscriptionManager;
+import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.util.Log;
+
+import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.telephony.uicc.IccConstants;
+import com.android.internal.telephony.uicc.IccUtils;
+import com.android.internal.telephony.uicc.PlmnActRecord;
+import com.android.internal.telephony.uicc.UiccController;
+import com.android.settings.R;
+
+import org.codeaurora.internal.IExtTelephony;
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * List the MCCMNC and the priority for "User Controlled PLMN"
+ */
+public class UserPLMNListActivity extends PreferenceActivity
+        implements DialogInterface.OnCancelListener {
+    private static final String LOG_TAG = "UserPLMNListActivity";
+    private static final boolean DBG = true;
+
+    private static final int BUSY_READING_DIALOG = 99;
+    private static final int BUSY_SAVING_DIALOG = 100;
+    private static final int UPLMNLIST_ADD = 101;
+    private static final int UPLMNLIST_EDIT = 102;
+    private static final int MENU_ADD_OPTIION = Menu.FIRST;
+
+   /* 5n bytes:
+    1 to 3  nth PLMN (highest priority)
+    4 to 5  nth PLMN Access Technology Identifier */
+    private static final int UPLMN_SEL_DATA_LEN = 5;
+    private static final int GSM_MASK = 1;
+    /**
+     * GSM compact access technology.
+     */
+    private static final int GSM_COMPACT_MASK = 2;
+    /**
+     * UMTS radio access technology.
+     */
+    private static final int UMTS_MASK = 4;
+    /**
+     * LTE radio access technology.
+     */
+    private static final int LTE_MASK = 8;
+
+    private List<UPLMNInfoWithEf> mUPLMNList;
+    private PreferenceScreen mUPLMNListContainer;
+    private static final String BUTTON_UPLMN_LIST_KEY = "button_uplmn_list_key";
+    private Map<Preference, UPLMNInfoWithEf> mPreferenceMap
+            = new LinkedHashMap<Preference, UPLMNInfoWithEf>();
+    private UPLMNInfoWithEf mOldInfo;
+    private int mNumRec = 0;
+    private boolean mAirplaneModeOn = false;
+    private int mPhoneId = 0;
+    protected boolean mIsForeground = false;
+
+    private MyHandler mHandler = new MyHandler();
+    private IExtTelephony mExtTelephony;
+    private static final String ACTION_READ_EF_BROADCAST =
+            "com.qualcomm.qti.intent.action.ACTION_READ_EF_RESULT";
+    private static final String ACTION_WRITE_EF_BROADCAST =
+            "com.qualcomm.qti.intent.action.ACTION_WRITE_EF_RESULT";
+
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
+                mAirplaneModeOn = intent.getBooleanExtra("state", false);
+                setScreenEnabled();
+            } else if (ACTION_READ_EF_BROADCAST.equals(action)) {
+                if (intent.getBooleanExtra("exception", false)) {
+                    log("ACTION_READ_EF_BROADCAST with exception");
+                    Message message = mHandler.obtainMessage();
+                    message.what = mHandler.MESSAGE_GET_UPLMN_LIST;
+                    message.obj = new AsyncResult(null, null, new Exception());
+                    // trigger tone stop after timeout duration
+                    mHandler.sendMessage(message);
+                } else {
+                    handleGetEFDone(intent.getByteArrayExtra("payload"));
+                }
+            } else if (ACTION_WRITE_EF_BROADCAST.equals(action)) {
+                if (intent.getBooleanExtra("exception", false)) {
+                    log("ACTION_WRITE_EF_BROADCAST with exception");
+                } else {
+                    log("handleSetEFDone: with OK result!");
+                }
+                getUPLMNInfoFromEf();
+            }
+        }
+    };
+
+    @Override
+    protected Dialog onCreateDialog(int id) {
+        ProgressDialog dialog = new ProgressDialog(this);
+        dialog.setTitle(getText(R.string.uplmn_settings_title));
+        dialog.setIndeterminate(true);
+        switch(id) {
+            case BUSY_READING_DIALOG:
+                dialog.setCancelable(true);
+                dialog.setOnCancelListener(this);
+                dialog.setMessage(getText(R.string.reading_settings));
+                return dialog;
+            case BUSY_SAVING_DIALOG:
+                dialog.setCancelable(false);
+                dialog.setMessage(getText(R.string.updating_settings));
+                return dialog;
+        }
+        return null;
+    }
+
+    @Override
+    public void onCancel(DialogInterface dialog) {
+        finish();
+    }
+
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        addPreferencesFromResource(R.xml.uplmn_settings);
+        mUPLMNListContainer = (PreferenceScreen) findPreference(BUTTON_UPLMN_LIST_KEY);
+        int subId = getIntent().getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
+                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        mPhoneId = SubscriptionManager.getPhoneId(subId);
+
+        mExtTelephony
+            = IExtTelephony.Stub
+                    .asInterface(ServiceManager.getService("qti.radio.extphone"));
+
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+        intentFilter.addAction(ACTION_WRITE_EF_BROADCAST);
+        intentFilter.addAction(ACTION_READ_EF_BROADCAST);
+        registerReceiver(mReceiver, intentFilter);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        unregisterReceiver(mReceiver);
+    }
+
+    public void onResume() {
+        super.onResume();
+        mIsForeground = true;
+        getUPLMNInfoFromEf();
+        showReadingDialog();
+        mAirplaneModeOn = Settings.System.getInt(getContentResolver(),
+                Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        mIsForeground = false;
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        menu.add(0, MENU_ADD_OPTIION, 0, R.string.uplmn_list_setting_add_plmn)
+                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+        return true;
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        if (menu != null) {
+            menu.setGroupEnabled(0, !mAirplaneModeOn);
+        }
+        return super.onPrepareOptionsMenu(menu);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+        case MENU_ADD_OPTIION:
+            if (!hasGetIccFileHandler()) return true;
+            Intent intent = new Intent(this, UserPLMNEditorActivity.class);
+            intent.putExtra(UserPLMNEditorActivity.UPLMN_CODE, "");
+            intent.putExtra(UserPLMNEditorActivity.UPLMN_PRIORITY, 0);
+            intent.putExtra(UserPLMNEditorActivity.UPLMN_SERVICE, 0);
+            intent.putExtra(UserPLMNEditorActivity.UPLMN_ADD, true);
+            intent.putExtra(UserPLMNEditorActivity.UPLMN_SIZE, mUPLMNList.size());
+            startActivityForResult(intent, UPLMNLIST_ADD);
+            break;
+        case android.R.id.home:
+            finish();
+            return true;
+        default:
+            break;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    private void showReadingDialog() {
+        if (mIsForeground && hasGetIccFileHandler()) {
+            showDialog(BUSY_READING_DIALOG);
+        }
+    }
+
+    private void showSavingDialog() {
+        if (mIsForeground) {
+            showDialog(BUSY_SAVING_DIALOG);
+        }
+    }
+
+    private void dismissDialogSafely(int id) {
+        try {
+            dismissDialog(id);
+        } catch (IllegalArgumentException e) {
+            // This is expected in the case where we were in the background
+            // at the time we would normally have shown the dialog, so we didn't
+            // show it.
+        }
+    }
+
+    public void onFinished(Preference preference, boolean reading) {
+        log("onFinished reading: " + reading);
+        if (reading) {
+            dismissDialogSafely(BUSY_READING_DIALOG);
+        } else {
+            dismissDialogSafely(BUSY_SAVING_DIALOG);
+        }
+        preference.setEnabled(true);
+        setScreenEnabled();
+    }
+
+    private void getUPLMNInfoFromEf() {
+        log("UPLMNInfoFromEf Start read...");
+        if (!readEfFromIcc(IccConstants.EF_PLMN_W_ACT)) {
+            Log.w(LOG_TAG, "mIccFileHandler is null");
+        }
+    }
+
+    private boolean hasGetIccFileHandler() {
+        boolean success = false;
+        try {
+            if (mExtTelephony != null) {
+                success = mExtTelephony.hasGetIccFileHandler(mPhoneId, UiccController.APP_FAM_3GPP);
+            }
+        } catch (RemoteException | NullPointerException ex) {
+             Log.e(LOG_TAG, "hasGetIccFileHandler Exception: ", ex);
+
+        }
+        return success;
+    }
+
+    private boolean readEfFromIcc(int efid) {
+        boolean success = false;
+        try {
+            if (mExtTelephony != null) {
+                success = mExtTelephony.readEfFromIcc(mPhoneId, UiccController.APP_FAM_3GPP, efid);
+            }
+        } catch (RemoteException | NullPointerException ex) {
+             Log.e(LOG_TAG, "readEfFromIcc Exception: ", ex);
+
+        }
+        return success;
+    }
+
+    private boolean writeEfToIcc(byte[] efdata, int efid) {
+        boolean success = false;
+        try {
+            if (mExtTelephony != null) {
+                success = mExtTelephony.writeEfToIcc(mPhoneId, UiccController.APP_FAM_3GPP,
+                        efid, efdata);
+            }
+        } catch (RemoteException | NullPointerException ex) {
+             Log.e(LOG_TAG, "writeEfToIcc Exception: ", ex);
+
+        }
+        return success;
+    }
+
+    private void refreshUPLMNListPreference(ArrayList<UPLMNInfoWithEf> list) {
+        if (mUPLMNListContainer.getPreferenceCount() != 0) {
+            mUPLMNListContainer.removeAll();
+        }
+
+        if (this.mPreferenceMap != null) {
+            mPreferenceMap.clear();
+        }
+
+        if (mUPLMNList != null) {
+            mUPLMNList.clear();
+        }
+        mUPLMNList = list;
+        if (list == null) {
+            log("refreshUPLMNListPreference : NULL UPLMN list!");
+        } else {
+            log("refreshUPLMNListPreference : list.size()" + list.size());
+        }
+
+        if (list == null || list.size() == 0) {
+            if (DBG) {
+                log("refreshUPLMNListPreference : NULL UPLMN list!");
+            }
+            if (list == null) {
+                mUPLMNList = new ArrayList<UPLMNInfoWithEf>();
+            }
+            return;
+        }
+
+        for (UPLMNInfoWithEf network : list) {
+            addUPLMNPreference(network);
+            if (DBG) {
+                log(network.toString());
+            }
+        }
+    }
+
+    class UPLMNInfoWithEf {
+
+        private String mOperatorNumeric;
+
+        private int mNetworkMode;
+        private int mPriority; // priority is the index of the plmn in the list.
+
+        public String getOperatorNumeric() {
+            return mOperatorNumeric;
+        }
+
+        public int getNetworMode() {
+            return mNetworkMode;
+        }
+
+        public int getPriority() {
+            return mPriority;
+        }
+
+        public void setOperatorNumeric(String operatorNumeric) {
+            this.mOperatorNumeric = operatorNumeric;
+        }
+
+        public void setPriority(int index) {
+            this.mPriority = index;
+        }
+
+        public UPLMNInfoWithEf(String operatorNumeric, int mNetworkMode,
+                int mPriority) {
+            this.mOperatorNumeric = operatorNumeric;
+            this.mNetworkMode = mNetworkMode;
+            this.mPriority = mPriority;
+        }
+
+        public String toString() {
+            return "UPLMNInfoWithEf " + mOperatorNumeric + "/" + mNetworkMode
+                    + "/" + mPriority;
+        }
+    }
+
+    class PriorityCompare implements Comparator<UPLMNInfoWithEf> {
+
+        public int compare(UPLMNInfoWithEf object1, UPLMNInfoWithEf object2) {
+            return (object1.getPriority() - object2.getPriority());
+        }
+    }
+
+    private void addUPLMNPreference(UPLMNInfoWithEf network) {
+        Preference pref = new Preference(this);
+        String plmnName = network.getOperatorNumeric();
+        String extendName = getNetworkModeString(network.getNetworMode(), plmnName);
+        pref.setTitle(plmnName + "(" + extendName + ")");
+        mUPLMNListContainer.addPreference(pref);
+        mPreferenceMap.put(pref, network);
+    }
+
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
+            Preference preference) {
+        Intent intent = new Intent(this, UserPLMNEditorActivity.class);
+        UPLMNInfoWithEf info = this.mPreferenceMap.get(preference);
+        mOldInfo = info;
+
+        intent.putExtra(UserPLMNEditorActivity.UPLMN_CODE, info.getOperatorNumeric());
+        intent.putExtra(UserPLMNEditorActivity.UPLMN_PRIORITY, info.getPriority());
+        intent.putExtra(UserPLMNEditorActivity.UPLMN_SERVICE, info.getNetworMode());
+        intent.putExtra(UserPLMNEditorActivity.UPLMN_ADD, false);
+        intent.putExtra(UserPLMNEditorActivity.UPLMN_SIZE, mUPLMNList.size());
+        startActivityForResult(intent, UPLMNLIST_EDIT);
+        return true;
+    }
+
+    protected void onActivityResult(final int requestCode,
+            final int resultCode, final Intent intent) {
+        log("resultCode = " + resultCode + ", requestCode = " + requestCode);
+
+        if (intent != null) {
+            UPLMNInfoWithEf newInfo = createNetworkInfofromIntent(intent);
+            if (resultCode == UserPLMNEditorActivity.RESULT_CODE_DELETE) {
+                handleSetUPLMN(handleDeleteList(mOldInfo));
+            } else if (resultCode == UserPLMNEditorActivity.RESULT_CODE_EDIT) {
+                if (requestCode == UPLMNLIST_ADD) {
+                    handleAddList(newInfo);
+                } else if (requestCode == UPLMNLIST_EDIT) {
+                    handleSetUPLMN(handleModifiedList(newInfo, mOldInfo));
+                }
+            }
+        }
+    }
+
+    private UPLMNInfoWithEf createNetworkInfofromIntent(Intent intent) {
+        String numberName = intent.getStringExtra(UserPLMNEditorActivity.UPLMN_CODE);
+        int priority = intent.getIntExtra(UserPLMNEditorActivity.UPLMN_PRIORITY, 0);
+        int act = intent.getIntExtra(UserPLMNEditorActivity.UPLMN_SERVICE, 0);
+        return new UPLMNInfoWithEf(numberName, act, priority);
+    }
+
+    public static byte[] stringToBcdPlmn(String str) {
+        if (str.length() == 5) {
+                str = str + "f";
+        }
+
+        byte[] trans = IccUtils.hexStringToBytes(str);
+
+        byte[] data = new byte[3];;
+        data[0] = (byte) ((trans[0] >> 4) | ((trans[0] << 4) & 0xF0));
+        data[1] = (byte) ((trans[1] >> 4) | ((trans[2] << 4) & 0xF0));
+        data[2] = (byte) ((trans[2] & 0xF0) | (trans[1] & 0xF));
+
+        return data;
+    }
+
+    private void handleSetUPLMN(ArrayList<UPLMNInfoWithEf> list) {
+        showSavingDialog();
+        byte[] data = new byte[mNumRec * UPLMN_SEL_DATA_LEN];
+        byte[] mccmnc = new byte[6];
+        for (int i = 0; i < mNumRec; i++) {
+            data[i * UPLMN_SEL_DATA_LEN] = (byte) 0xFF;
+            data[i * UPLMN_SEL_DATA_LEN + 1] = (byte) 0xFF;
+            data[i * UPLMN_SEL_DATA_LEN + 2] = (byte) 0xFF;
+
+            data[i * UPLMN_SEL_DATA_LEN + 3] = 0;
+            data[i * UPLMN_SEL_DATA_LEN + 4] = 0;
+        }
+        for (int i = 0; ((i < list.size()) && (i < mNumRec)); i++) {
+            UPLMNInfoWithEf ni = list.get(i);
+            String strOperNumeric = ni.getOperatorNumeric();
+            if (TextUtils.isEmpty(strOperNumeric)) {
+                break;
+            }
+            log("strOperNumeric = " + strOperNumeric);
+
+            System.arraycopy(stringToBcdPlmn(strOperNumeric),
+                        0, data, i * UPLMN_SEL_DATA_LEN, 3);
+            log("data[0] = " + data[i * UPLMN_SEL_DATA_LEN]);
+            log("data[1] = " + data[i * UPLMN_SEL_DATA_LEN +1]);
+            log("data[2] = " + data[i * UPLMN_SEL_DATA_LEN +2]);
+
+            int accessTech = convertNetworkMode2AccessTech(ni.getNetworMode());
+            data[i * UPLMN_SEL_DATA_LEN + 3] = (byte) (accessTech >> 8);
+            data[i * UPLMN_SEL_DATA_LEN + 4] = (byte) (accessTech & 0xFF);
+            log("accessTech = " + accessTech);
+            log("data[3] = " + data[i * UPLMN_SEL_DATA_LEN +3]);
+            log("data[4] = " + data[i * UPLMN_SEL_DATA_LEN +4]);
+        }
+
+        log("update EFuplmn Start.");
+        writeEfToIcc(data, IccConstants.EF_PLMN_W_ACT);
+    }
+
+    private void handleAddList(UPLMNInfoWithEf newInfo) {
+        log("handleAddList: add new network: " + newInfo);
+        dumpUPLMNInfo(mUPLMNList);
+        ArrayList<UPLMNInfoWithEf> list = new ArrayList<UPLMNInfoWithEf>();
+        for (int i = 0; i < mUPLMNList.size(); i++) {
+            list.add(mUPLMNList.get(i));
+        }
+        PriorityCompare pc = new PriorityCompare();
+        int position = Collections.binarySearch(mUPLMNList, newInfo, pc);
+        if (position >= 0)
+            list.add(position, newInfo);
+        else
+            list.add(newInfo);
+        updateListPriority(list);
+        dumpUPLMNInfo(list);
+        handleSetUPLMN(list);
+    }
+
+    private void dumpUPLMNInfo(List<UPLMNInfoWithEf> list) {
+        if (!DBG) {
+            return;
+        }
+        for (int i = 0; i < list.size(); i++) {
+            log("dumpUPLMNInfo : " + list.get(i).toString());
+        }
+    }
+
+    private ArrayList<UPLMNInfoWithEf> handleModifiedList(
+            UPLMNInfoWithEf newInfo, UPLMNInfoWithEf oldInfo) {
+        log("handleModifiedList: change old info: " + oldInfo.toString()
+            + " new info: " + newInfo.toString());
+        dumpUPLMNInfo(mUPLMNList);
+
+        PriorityCompare pc = new PriorityCompare();
+        int oldposition = Collections.binarySearch(mUPLMNList, oldInfo, pc);
+        int newposition = Collections.binarySearch(mUPLMNList, newInfo, pc);
+
+        ArrayList<UPLMNInfoWithEf> list = new ArrayList<UPLMNInfoWithEf>();
+        for (int i = 0; i < mUPLMNList.size(); i++) {
+            list.add(mUPLMNList.get(i));
+        }
+
+        if (oldposition > newposition) {
+            list.remove(oldposition);
+            list.add(newposition, newInfo);
+        } else if (oldposition < newposition) {
+            list.add(newposition + 1, newInfo);
+            list.remove(oldposition);
+        } else {
+            list.remove(oldposition);
+            list.add(oldposition, newInfo);
+        }
+
+        updateListPriority(list);
+        dumpUPLMNInfo(list);
+        return list;
+    }
+
+    private void updateListPriority(ArrayList<UPLMNInfoWithEf> list) {
+        int priority = 0;
+        for (UPLMNInfoWithEf info : list) {
+            info.setPriority(priority++);
+        }
+    }
+
+    private ArrayList<UPLMNInfoWithEf> handleDeleteList(UPLMNInfoWithEf network) {
+        log("handleDeleteList : " + network.toString());
+        dumpUPLMNInfo(mUPLMNList);
+
+        ArrayList<UPLMNInfoWithEf> list = new ArrayList<UPLMNInfoWithEf>();
+        PriorityCompare pc = new PriorityCompare();
+        int position = Collections.binarySearch(mUPLMNList, network, pc);
+
+        for (int i = 0; i < mUPLMNList.size(); i++) {
+            list.add(mUPLMNList.get(i));
+        }
+
+        list.remove(position);
+        network.setOperatorNumeric(null);
+        list.add(network);
+
+        updateListPriority(list);
+        dumpUPLMNInfo(list);
+
+        return list;
+    }
+
+    private class MyHandler extends Handler {
+        private static final int MESSAGE_GET_UPLMN_LIST = 0;
+
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+            case MESSAGE_GET_UPLMN_LIST:
+                handleGetUPLMNList(msg);
+                break;
+            default:
+                break;
+            }
+        }
+
+        public void handleGetUPLMNList(Message msg) {
+            if (DBG) {
+                log("handleGetUPLMNList: done");
+            }
+
+            if (msg.arg2 == MyHandler.MESSAGE_GET_UPLMN_LIST) {
+                onFinished(mUPLMNListContainer, true);
+            } else {
+                onFinished(mUPLMNListContainer, false);
+            }
+
+            AsyncResult ar = (AsyncResult) msg.obj;
+            if (ar.exception != null) {
+                log("handleGetUPLMNList with exception = "
+                        + ar.exception);
+                if (mUPLMNList == null) {
+                    mUPLMNList = new ArrayList<UPLMNInfoWithEf>();
+                }
+            } else {
+                refreshUPLMNListPreference((ArrayList<UPLMNInfoWithEf>) ar.result);
+            }
+        }
+    }
+
+    public void handleGetEFDone(byte[] data) {
+        if (DBG) {
+            log("handleGetEFDone: done");
+        }
+
+        mNumRec = data.length / UPLMN_SEL_DATA_LEN;
+        log("Received a PlmnActRecord, raw=" + IccUtils.bytesToHexString(data));
+
+        PlmnActRecord[] plmnActRecords = PlmnActRecord.getRecords(data);
+        log("PlmnActRecords=" + Arrays.toString(plmnActRecords));
+
+        ArrayList<UPLMNInfoWithEf> ret = new ArrayList<UPLMNInfoWithEf>();
+        int i = 0;
+        String INVALID_PLMN_PREFIX = "FFFFF";
+        for (PlmnActRecord record : plmnActRecords) {
+            if(!record.plmn.regionMatches(
+                true, 0, INVALID_PLMN_PREFIX, 0, INVALID_PLMN_PREFIX.length())
+                && record.accessTechs != -1 && !TextUtils.isEmpty(record.plmn)
+                && record.plmn.length() >= 5){
+                ret.add(new UPLMNInfoWithEf(
+                                    record.plmn,
+                                    convertAccessTech2NetworkMode(record.accessTechs),
+                                    i));
+            }
+            i++;
+        }
+
+        Message message = mHandler.obtainMessage();
+        message.what = MyHandler.MESSAGE_GET_UPLMN_LIST;
+        if (ret == null) {
+            log("handleGetEFDone : NULL ret list!");
+        } else {
+            log("handleGetEFDone : ret.size()" + ret.size());
+        }
+
+        message.obj = new AsyncResult(message.obj, (Object) ret, null);
+        mHandler.sendMessage(message);
+    }
+
+    private int convertAccessTech2NetworkMode(int accessTechs) {
+        int networkMode = 0;
+
+        if ((accessTechs & PlmnActRecord.ACCESS_TECH_EUTRAN) != 0) {
+            networkMode = networkMode | LTE_MASK;
+        }
+        if ((accessTechs & PlmnActRecord.ACCESS_TECH_UTRAN) != 0) {
+            networkMode = networkMode | UMTS_MASK;
+        }
+        if ((accessTechs & PlmnActRecord.ACCESS_TECH_GSM) != 0) {
+            networkMode = networkMode | GSM_MASK;
+        }
+        if ((accessTechs & PlmnActRecord.ACCESS_TECH_GSM_COMPACT) != 0) {
+            networkMode = networkMode | GSM_COMPACT_MASK;
+        }
+
+        return networkMode;
+    }
+
+    private int convertNetworkMode2AccessTech(int networkMode) {
+        int accessTechs = 0;
+
+        if ((networkMode & LTE_MASK) != 0) {
+            accessTechs = accessTechs | PlmnActRecord.ACCESS_TECH_EUTRAN;
+        }
+        if ((networkMode & UMTS_MASK) != 0) {
+            accessTechs = accessTechs | PlmnActRecord.ACCESS_TECH_UTRAN;
+        }
+        if ((networkMode & GSM_MASK) != 0) {
+            accessTechs = accessTechs | PlmnActRecord.ACCESS_TECH_GSM;
+        }
+        if ((networkMode & GSM_COMPACT_MASK) != 0) {
+            accessTechs = accessTechs | PlmnActRecord.ACCESS_TECH_GSM_COMPACT;
+        }
+
+        return accessTechs;
+    }
+
+    private String getNetworkModeString(int EFNWMode, String plmn) {
+        Log.d(LOG_TAG, "plmn = " + plmn);
+        int index = UserPLMNEditorActivity.convertEFMode2Ap(EFNWMode);
+        String[] CuPlmnArray = getResources().getStringArray(R.array.uplmn_cu_mcc_mnc_values);
+        for (String CuPlmn : CuPlmnArray) {
+            if (plmn.equals(CuPlmn)) {
+                return getResources().getStringArray
+                        (R.array.uplmn_prefer_network_mode_w_choices)[index];
+            }
+        }
+        return getResources().getStringArray(R.array.uplmn_prefer_network_mode_td_choices)[index];
+    }
+
+    private void setScreenEnabled() {
+        getPreferenceScreen().setEnabled(!mAirplaneModeOn);
+        invalidateOptionsMenu();
+    }
+
+    private static void log(String msg) {
+        Log.d(LOG_TAG, msg);
+    }
+}
diff --git a/src/com/android/settings/network/telephony/UserPLMNPreferenceController.java b/src/com/android/settings/network/telephony/UserPLMNPreferenceController.java
new file mode 100755
index 0000000..76008cd
--- /dev/null
+++ b/src/com/android/settings/network/telephony/UserPLMNPreferenceController.java
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+package com.android.settings.network.telephony;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+
+import com.android.settings.network.telephony.UserPLMNListActivity;
+
+/**
+ * Preference controller for "User PLMN Settings"
+ */
+public class UserPLMNPreferenceController extends TelephonyBasePreferenceController {
+
+    @VisibleForTesting
+    CarrierConfigManager mCarrierConfigManager;
+
+    public UserPLMNPreferenceController(Context context, String key) {
+        super(context, key);
+        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
+    }
+
+    public void init(int subId) {
+        mSubId = subId;
+    }
+
+    @Override
+    public int getAvailabilityStatus(int subId) {
+        return  SubscriptionManager.isValidSubscriptionId(subId)
+                ? AVAILABLE
+                : CONDITIONALLY_UNAVAILABLE;
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (getPreferenceKey().equals(preference.getKey())) {
+            final Intent intent = new Intent(mContext, UserPLMNListActivity.class);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, mSubId);
+            mContext.startActivity(intent);
+            return true;
+        }
+
+        return false;
+    }
+}
diff --git a/src/com/android/settings/notification/CallConnectedTonePreferenceController.java b/src/com/android/settings/notification/CallConnectedTonePreferenceController.java
new file mode 100644
index 0000000..9498485
--- /dev/null
+++ b/src/com/android/settings/notification/CallConnectedTonePreferenceController.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2020 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.settings.notification;
+
+import static com.android.settings.notification.SettingPref.TYPE_SYSTEM;
+
+import android.content.Context;
+import android.provider.Settings.System;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+public class CallConnectedTonePreferenceController extends SettingPrefController {
+
+    private static final String KEY_CALL_CONNECTED_TONES = "call_connected_tones";
+
+    public CallConnectedTonePreferenceController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context, parent, lifecycle);
+
+        int defaultOn =  mContext.getResources().getInteger(R.integer.
+                config_default_tone_after_connected);
+        mPreference = new SettingPref(
+            TYPE_SYSTEM, KEY_CALL_CONNECTED_TONES, System.CALL_CONNECTED_TONE_ENABLED,
+            defaultOn) {
+            @Override
+            public boolean isApplicable(Context context) {
+                return context.getResources().getBoolean(R.bool.config_show_connect_tone_ui);
+            }
+        };
+    }
+
+}
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 9e7f3ed..040948b 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -241,6 +241,8 @@
         // === Other Sound Settings ===
         final DialPadTonePreferenceController dialPadTonePreferenceController =
                 new DialPadTonePreferenceController(context, fragment, lifecycle);
+        final CallConnectedTonePreferenceController callConnectedTonePreferenceController =
+                new CallConnectedTonePreferenceController(context, fragment, lifecycle);
         final ScreenLockSoundPreferenceController screenLockSoundPreferenceController =
                 new ScreenLockSoundPreferenceController(context, fragment, lifecycle);
         final ChargingSoundPreferenceController chargingSoundPreferenceController =
@@ -259,6 +261,7 @@
                 new EmergencyTonePreferenceController(context, fragment, lifecycle);
 
         controllers.add(dialPadTonePreferenceController);
+        controllers.add(callConnectedTonePreferenceController);
         controllers.add(screenLockSoundPreferenceController);
         controllers.add(chargingSoundPreferenceController);
         controllers.add(dockingSoundPreferenceController);
@@ -270,6 +273,7 @@
         controllers.add(new PreferenceCategoryController(context,
                 "other_sounds_and_vibrations_category").setChildren(
                 Arrays.asList(dialPadTonePreferenceController,
+                        callConnectedTonePreferenceController,
                         screenLockSoundPreferenceController,
                         chargingSoundPreferenceController,
                         dockingSoundPreferenceController,
@@ -310,4 +314,4 @@
             mDialogFragment.onListPreferenceUpdated(preference);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 04ee1b8..d27f46c 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -203,6 +203,7 @@
             mLockPatternUtils = new LockPatternUtils(activity);
             mIsSetNewPassword = ACTION_SET_NEW_PARENT_PROFILE_PASSWORD.equals(chooseLockAction)
                     || ACTION_SET_NEW_PASSWORD.equals(chooseLockAction);
+            mLockPatternUtils.sanitizePassword();
 
             // Defaults to needing to confirm credentials
             final boolean confirmCredentials = intent
@@ -821,6 +822,7 @@
         @Override
         public void onDestroy() {
             super.onDestroy();
+            mLockPatternUtils.sanitizePassword();
             if (mUserPassword != null) {
                 mUserPassword.zeroize();
             }
diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java
index ae36f35..a36fa33 100644
--- a/src/com/android/settings/sim/SimSelectNotification.java
+++ b/src/com/android/settings/sim/SimSelectNotification.java
@@ -52,6 +52,8 @@
 import com.android.settings.network.telephony.MobileNetworkActivity;
 import com.android.settingslib.HelpUtils;
 
+import org.codeaurora.internal.IExtTelephony;
+
 public class SimSelectNotification extends BroadcastReceiver {
     private static final String TAG = "SimSelectNotification";
     @VisibleForTesting
diff --git a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
index f179df0..e11a845 100644
--- a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
+++ b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
@@ -270,9 +270,12 @@
 
             final PreferenceImageView imageView = view.findViewById(android.R.id.icon);
             final int level = accessPoint.getLevel();
+            final int standard = accessPoint.getWifiStandard();
+            final boolean isReady = accessPoint.isHe8ssCapableAp()
+                                    && accessPoint.isVhtMax8SpatialStreamsSupported();
             if (imageView != null) {
                 final Drawable drawable = getContext().getDrawable(
-                        Utils.getWifiIconResource(level));
+                        Utils.getWifiIconResource(level, standard, isReady));
                 drawable.setTintList(
                         Utils.getColorAttr(getContext(), android.R.attr.colorControlNormal));
                 imageView.setImageDrawable(drawable);
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 1579188..9553804 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -28,6 +28,7 @@
 import android.net.StaticIpConfiguration;
 import android.net.Uri;
 import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiConfiguration.KeyMgmt;
 import android.net.wifi.WifiEnterpriseConfig;
 import android.net.wifi.WifiEnterpriseConfig.Eap;
 import android.net.wifi.WifiEnterpriseConfig.Phase2;
@@ -35,8 +36,10 @@
 import android.net.wifi.WifiManager;
 import android.os.IBinder;
 import android.os.UserManager;
+import android.provider.Settings;
 import android.security.Credentials;
 import android.security.KeyStore;
+import android.telephony.TelephonyManager;
 import android.text.Editable;
 import android.text.InputType;
 import android.text.SpannableString;
@@ -65,6 +68,8 @@
 import android.widget.Spinner;
 import android.widget.TextView;
 
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
 import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.ProxySelector;
@@ -76,6 +81,9 @@
 import com.android.settingslib.utils.ThreadUtils;
 import com.android.settingslib.wifi.AccessPoint;
 
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.net.Inet4Address;
 import java.net.InetAddress;
 import java.util.ArrayList;
@@ -174,6 +182,9 @@
     private TextView mEapIdentityView;
     private TextView mEapAnonymousView;
 
+    private Spinner mSimCardSpinner;
+    private ArrayList<String> mSimDisplayNames;
+
     private Spinner mIpSettingsSpinner;
     private TextView mIpAddressView;
     private TextView mGatewayView;
@@ -191,6 +202,7 @@
     private TextView mProxyExclusionListView;
     private TextView mProxyPacView;
     private CheckBox mSharedCheckBox;
+    private CheckBox mShareThisWifiCheckBox;
 
     private IpAssignment mIpAssignment = IpAssignment.UNASSIGNED;
     private ProxySettings mProxySettings = ProxySettings.UNASSIGNED;
@@ -208,6 +220,9 @@
     Integer mSecurityInPosition[];
 
     private final WifiManager mWifiManager;
+    private TelephonyManager mTelephonyManager;
+    private SubscriptionManager mSubscriptionManager = null;
+    private int selectedSimCardNumber;
 
     public WifiConfigController(WifiConfigUiBase parent, View view, AccessPoint accessPoint,
             int mode) {
@@ -248,6 +263,8 @@
 
         final Resources res = mContext.getResources();
 
+        mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        mSimDisplayNames = new ArrayList<String>();
         mLevels = res.getStringArray(R.array.wifi_signal);
         if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_eap_sim_based_auth_supported)) {
@@ -287,12 +304,21 @@
                 mHiddenSettingsSpinner.getSelectedItemPosition() == NOT_HIDDEN_NETWORK
                         ? View.GONE
                         : View.VISIBLE);
+        mShareThisWifiCheckBox = (CheckBox) mView.findViewById(R.id.share_this_wifi);
         mSecurityInPosition = new Integer[AccessPoint.SECURITY_MAX_VAL];
 
         if (mAccessPoint == null) { // new network
             configureSecuritySpinner();
             mConfigUi.setSubmitButton(res.getString(R.string.wifi_save));
         } else {
+
+            if (!mWifiManager.isWifiCoverageExtendFeatureEnabled()
+                 || (mAccessPoint.getSecurity() != AccessPoint.SECURITY_NONE
+                      && mAccessPoint.getSecurity() != AccessPoint.SECURITY_PSK)) {
+                mShareThisWifiCheckBox.setChecked(false);
+                mShareThisWifiCheckBox.setVisibility(View.GONE);
+            }
+
             mConfigUi.setTitle(mAccessPoint.getTitle());
 
             ViewGroup group = (ViewGroup) mView.findViewById(R.id.info);
@@ -328,7 +354,7 @@
                 } else {
                     mIpSettingsSpinner.setSelection(DHCP);
                 }
-
+                mShareThisWifiCheckBox.setChecked(config.shareThisAp);
                 mSharedCheckBox.setEnabled(config.shared);
                 if (!config.shared) {
                     showAdvancedFields = true;
@@ -425,6 +451,9 @@
                         } else if (frequency >= AccessPoint.LOWER_FREQ_5GHZ
                                 && frequency < AccessPoint.HIGHER_FREQ_5GHZ) {
                             band = res.getString(R.string.wifi_band_5ghz);
+                        } else if (frequency >= AccessPoint.LOWER_FREQ_60GHZ
+                                && frequency < AccessPoint.HIGHER_FREQ_60GHZ) {
+                            band = res.getString(R.string.wifi_band_60ghz);
                         } else {
                             Log.e(TAG, "Unexpected frequency " + frequency);
                         }
@@ -637,6 +666,7 @@
         }
 
         config.shared = mSharedCheckBox.isChecked();
+        config.shareThisAp = mShareThisWifiCheckBox.isChecked();
 
         switch (mAccessPointSecurity) {
             case AccessPoint.SECURITY_NONE:
@@ -728,6 +758,12 @@
                                 break;
                         }
                         break;
+                    case Eap.SIM:
+                    case Eap.AKA:
+                    case Eap.AKA_PRIME:
+                        selectedSimCardNumber = mSimCardSpinner.getSelectedItemPosition() + 1;
+                        config.enterpriseConfig.setSimNum(selectedSimCardNumber);
+                        break;
                     default:
                         break;
                 }
@@ -809,6 +845,11 @@
                     config.enterpriseConfig.setPassword(mPasswordView.getText().toString());
                 }
                 break;
+
+            case AccessPoint.SECURITY_DPP:
+                config.allowedKeyManagement.set(KeyMgmt.DPP);
+                config.requirePmf = true;
+                break;
             case AccessPoint.SECURITY_SAE:
                 config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
                 if (mPasswordView.length() != 0) {
@@ -981,7 +1022,8 @@
 
     private void showSecurityFields(boolean refreshEapMethods, boolean refreshCertificates) {
         if (mAccessPointSecurity == AccessPoint.SECURITY_NONE ||
-                mAccessPointSecurity == AccessPoint.SECURITY_OWE) {
+                mAccessPointSecurity == AccessPoint.SECURITY_OWE ||
+                mAccessPointSecurity == AccessPoint.SECURITY_DPP) {
             mView.findViewById(R.id.security_fields).setVisibility(View.GONE);
             return;
         }
@@ -1003,6 +1045,11 @@
         if (mAccessPointSecurity != AccessPoint.SECURITY_EAP &&
                 mAccessPointSecurity != AccessPoint.SECURITY_EAP_SUITE_B) {
             mView.findViewById(R.id.eap).setVisibility(View.GONE);
+            // Make sure password fields are visible when PSK security is selected.
+            // Password fields are not re-enabled in some cases like when security
+            // type is changed from EAP TLS to PSK
+            mView.findViewById(R.id.password_layout).setVisibility(View.VISIBLE);
+            mView.findViewById(R.id.show_password_layout).setVisibility(View.VISIBLE);
             return;
         }
         mView.findViewById(R.id.eap).setVisibility(View.VISIBLE);
@@ -1010,9 +1057,16 @@
         // TODO (b/140541213): Maybe we can remove initiateEnterpriseNetworkUi by moving code block
         boolean initiateEnterpriseNetworkUi = false;
         if (mEapMethodSpinner == null) {
+            getSIMInfo();
             initiateEnterpriseNetworkUi = true;
             mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method);
             mEapMethodSpinner.setOnItemSelectedListener(this);
+
+            if (mAccessPointSecurity == AccessPoint.SECURITY_EAP_SUITE_B) {
+                mEapMethodSpinner.setSelection(WIFI_EAP_METHOD_TLS);
+                mEapMethodSpinner.setEnabled(false);
+            }
+
             mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
             mPhase2Spinner.setOnItemSelectedListener(this);
             mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert);
@@ -1022,6 +1076,7 @@
             mEapDomainView.addTextChangedListener(this);
             mEapUserCertSpinner = (Spinner) mView.findViewById(R.id.user_cert);
             mEapUserCertSpinner.setOnItemSelectedListener(this);
+            mSimCardSpinner = (Spinner) mView.findViewById(R.id.sim_card);
             mEapIdentityView = (TextView) mView.findViewById(R.id.identity);
             mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous);
 
@@ -1117,6 +1172,17 @@
                             break;
                     }
                     break;
+                case Eap.SIM:
+                case Eap.AKA:
+                case Eap.AKA_PRIME:
+                    if (enterpriseConfig.getSimNum() != null
+                            && !enterpriseConfig.getSimNum().isEmpty()) {
+                        int mSimNum = Integer.parseInt(enterpriseConfig.getSimNum());
+                        mSimCardSpinner.setSelection(mSimNum - 1);
+                    } else {
+                        mSimCardSpinner.setSelection(0);
+                    }
+                    break;
                 default:
                     break;
             }
@@ -1150,6 +1216,12 @@
             mEapIdentityView.setText(enterpriseConfig.getIdentity());
             mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity());
         } else {
+            if (mAccessPointSecurity == AccessPoint.SECURITY_EAP_SUITE_B) {
+                mEapMethodSpinner.setSelection(WIFI_EAP_METHOD_TLS);
+                mEapMethodSpinner.setEnabled(false);
+            } else {
+                mEapMethodSpinner.setEnabled(true);
+            }
             showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition());
         }
     }
@@ -1218,12 +1290,14 @@
                 setDomainInvisible();
                 setAnonymousIdentInvisible();
                 setUserCertInvisible();
+                setSimCardInvisible();
                 break;
             case WIFI_EAP_METHOD_TLS:
                 mView.findViewById(R.id.l_user_cert).setVisibility(View.VISIBLE);
                 setPhase2Invisible();
                 setAnonymousIdentInvisible();
                 setPasswordInvisible();
+                setSimCardInvisible();
                 break;
             case WIFI_EAP_METHOD_PEAP:
                 // Reset adapter if needed
@@ -1235,6 +1309,7 @@
                 mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE);
                 showPeapFields();
                 setUserCertInvisible();
+                setSimCardInvisible();
                 break;
             case WIFI_EAP_METHOD_TTLS:
                 // Reset adapter if needed
@@ -1245,10 +1320,32 @@
                 mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE);
                 mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE);
                 setUserCertInvisible();
+                setSimCardInvisible();
                 break;
             case WIFI_EAP_METHOD_SIM:
             case WIFI_EAP_METHOD_AKA:
             case WIFI_EAP_METHOD_AKA_PRIME:
+                WifiConfiguration config = null;
+                if (mAccessPoint != null) {
+                    config = mAccessPoint.getConfig();
+                }
+                ArrayAdapter<String> eapSimAdapter = new ArrayAdapter<String>(
+                         mContext, android.R.layout.simple_spinner_item,
+                         mSimDisplayNames.toArray(new String[mSimDisplayNames.size()])
+                );
+                eapSimAdapter.setDropDownViewResource(
+                              android.R.layout.simple_spinner_dropdown_item);
+                mSimCardSpinner.setAdapter(eapSimAdapter);
+                mView.findViewById(R.id.l_sim_card).setVisibility(View.VISIBLE);
+                if (config != null) {
+                    if (config.enterpriseConfig.getSimNum() != null
+                            && !config.enterpriseConfig.getSimNum().isEmpty()) {
+                         int mSimNum = Integer.parseInt(config.enterpriseConfig.getSimNum());
+                         mSimCardSpinner.setSelection(mSimNum - 1);
+                    } else {
+                         mSimCardSpinner.setSelection(0);
+                    }
+                }
                 setPhase2Invisible();
                 setAnonymousIdentInvisible();
                 setCaCertInvisible();
@@ -1290,6 +1387,10 @@
         }
     }
 
+    private void setSimCardInvisible() {
+        mView.findViewById(R.id.l_sim_card).setVisibility(View.GONE);
+    }
+
     private void setIdentityInvisible() {
         mView.findViewById(R.id.l_identity).setVisibility(View.GONE);
     }
@@ -1582,6 +1683,16 @@
         if (parent == mSecuritySpinner) {
             // Convert menu position to actual Wi-Fi security type
             mAccessPointSecurity = mSecurityInPosition[position];
+
+            if (!mWifiManager.isWifiCoverageExtendFeatureEnabled()
+                 || (mAccessPointSecurity != AccessPoint.SECURITY_NONE
+                      && mAccessPointSecurity != AccessPoint.SECURITY_PSK)) {
+                mShareThisWifiCheckBox.setChecked(false);
+                mShareThisWifiCheckBox.setVisibility(View.GONE);
+            } else {
+                mShareThisWifiCheckBox.setVisibility(View.VISIBLE);
+            }
+
             showSecurityFields(/* refreshEapMethods */ true, /* refreshCertificates */ true);
 
             if (WifiDppUtils.isSupportEnrolleeQrCodeScanner(mContext, mAccessPointSecurity)) {
@@ -1628,6 +1739,22 @@
         return mAccessPoint;
     }
 
+    private void getSIMInfo() {
+        int numOfSims;
+        String displayname;
+        mSubscriptionManager = SubscriptionManager.from(mContext);
+        for(int i = 0; i < mTelephonyManager.getSimCount(); i++) {
+            final SubscriptionInfo sir = mSubscriptionManager.
+                  getActiveSubscriptionInfoForSimSlotIndex(i);
+            if (sir != null) {
+                displayname = String.valueOf(sir.getDisplayName());
+            } else {
+                displayname = mContext.getString(R.string.sim_editor_title, i + 1);
+            }
+            mSimDisplayNames.add(displayname);
+        }
+    }
+
     private void configureSecuritySpinner() {
         mConfigUi.setTitle(R.string.wifi_add_network);
 
diff --git a/src/com/android/settings/wifi/WifiConfigController2.java b/src/com/android/settings/wifi/WifiConfigController2.java
index 99907f3..8d90517 100644
--- a/src/com/android/settings/wifi/WifiConfigController2.java
+++ b/src/com/android/settings/wifi/WifiConfigController2.java
@@ -188,6 +188,7 @@
     private TextView mProxyExclusionListView;
     private TextView mProxyPacView;
     private CheckBox mSharedCheckBox;
+    private CheckBox mShareThisWifiCheckBox;
 
     private IpAssignment mIpAssignment = IpAssignment.UNASSIGNED;
     private ProxySettings mProxySettings = ProxySettings.UNASSIGNED;
@@ -277,11 +278,19 @@
                         ? View.GONE
                         : View.VISIBLE);
         mSecurityInPosition = new Integer[WifiEntry.NUM_SECURITY_TYPES];
+        mShareThisWifiCheckBox = (CheckBox) mView.findViewById(R.id.share_this_wifi);
 
         if (mWifiEntry == null) { // new network
             configureSecuritySpinner();
             mConfigUi.setSubmitButton(res.getString(R.string.wifi_save));
         } else {
+            if (!mWifiManager.isWifiCoverageExtendFeatureEnabled()
+                 || (mWifiEntry.getSecurity() != WifiEntry.SECURITY_NONE
+                      && mWifiEntry.getSecurity() != WifiEntry.SECURITY_PSK)) {
+                mShareThisWifiCheckBox.setChecked(false);
+                mShareThisWifiCheckBox.setVisibility(View.GONE);
+            }
+
             mConfigUi.setTitle(mWifiEntry.getTitle());
 
             ViewGroup group = (ViewGroup) mView.findViewById(R.id.info);
@@ -289,6 +298,7 @@
             boolean showAdvancedFields = false;
             if (mWifiEntry.isSaved()) {
                 WifiConfiguration config = mWifiEntry.getWifiConfiguration();
+                mShareThisWifiCheckBox.setChecked(config.shareThisAp);
                 mMeteredSettingsSpinner.setSelection(config.meteredOverride);
                 mHiddenSettingsSpinner.setSelection(config.hiddenSSID
                         ? HIDDEN_NETWORK
@@ -619,6 +629,7 @@
         }
 
         config.shared = mSharedCheckBox.isChecked();
+        config.shareThisAp = mShareThisWifiCheckBox.isChecked();
 
         switch (mWifiEntrySecurity) {
             case WifiEntry.SECURITY_NONE:
@@ -1565,6 +1576,16 @@
         if (parent == mSecuritySpinner) {
             // Convert menu position to actual Wi-Fi security type
             mWifiEntrySecurity = mSecurityInPosition[position];
+
+            if (!mWifiManager.isWifiCoverageExtendFeatureEnabled()
+                 || (mWifiEntrySecurity != WifiEntry.SECURITY_NONE
+                      && mWifiEntrySecurity != WifiEntry.SECURITY_PSK)) {
+                mShareThisWifiCheckBox.setChecked(false);
+                mShareThisWifiCheckBox.setVisibility(View.GONE);
+            } else {
+                mShareThisWifiCheckBox.setVisibility(View.VISIBLE);
+            }
+
             showSecurityFields(/* refreshEapMethods */ true, /* refreshCertificates */ true);
 
             if (WifiDppUtils.isSupportEnrolleeQrCodeScanner(mContext, mWifiEntrySecurity)) {
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index 735fecc..7f6ecb6 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -343,6 +343,7 @@
         final CarrierConfigManager configManager = (CarrierConfigManager)
                 getSystemService(Context.CARRIER_CONFIG_SERVICE);
         boolean isWifiOnlySupported = true;
+        boolean isImsPreferredSupported = false;
 
         if (configManager != null) {
             final PersistableBundle b = configManager.getConfigForSubId(mSubId);
@@ -356,6 +357,8 @@
                         false);
                 isWifiOnlySupported = b.getBoolean(
                         CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, true);
+                isImsPreferredSupported = b.getBoolean(
+                        CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_IMS_PREFERRED_BOOL, false);
             }
         }
 
@@ -366,37 +369,72 @@
         mButtonWfcRoamingMode.setDialogTitle(
                 res.getString(R.string.wifi_calling_roaming_mode_dialog_title));
 
+        Log.d(TAG, "isWifiOnlySupported = " + isWifiOnlySupported + " isImsPreferredSupported = "
+                + isImsPreferredSupported);
+
         if (isWifiOnlySupported) {
-            // Set string resources WITH option wifi only in mButtonWfcMode.
-            mButtonWfcMode.setEntries(
-                    res.getStringArray(R.array.wifi_calling_mode_choices));
-            mButtonWfcMode.setEntryValues(res.getStringArray(R.array.wifi_calling_mode_values));
-            mButtonWfcMode.setEntrySummaries(
-                    res.getStringArray(R.array.wifi_calling_mode_summaries));
+            if (isImsPreferredSupported) {
+                mButtonWfcMode.setEntries(res.getStringArray(
+                        R.array.wifi_calling_mode_choices_with_ims_preferred));
+                mButtonWfcMode.setEntryValues(res.getStringArray(
+                        R.array.wifi_calling_mode_values_with_ims_preferred));
+                mButtonWfcMode.setEntrySummaries(res.getStringArray(
+                        R.array.wifi_calling_mode_summaries_with_ims_preferred));
 
-            // Set string resources WITH option wifi only in mButtonWfcRoamingMode.
-            mButtonWfcRoamingMode.setEntries(
-                    res.getStringArray(R.array.wifi_calling_mode_choices_v2));
-            mButtonWfcRoamingMode.setEntryValues(
-                    res.getStringArray(R.array.wifi_calling_mode_values));
-            mButtonWfcRoamingMode.setEntrySummaries(
-                    res.getStringArray(R.array.wifi_calling_mode_summaries));
+                mButtonWfcRoamingMode.setEntries(res.getStringArray(
+                        R.array.wifi_calling_mode_choices_v2_with_ims_preferred));
+                mButtonWfcRoamingMode.setEntryValues(res.getStringArray(
+                        R.array.wifi_calling_mode_values_with_ims_preferred));
+                mButtonWfcRoamingMode.setEntrySummaries(res.getStringArray(
+                        R.array.wifi_calling_mode_summaries_with_ims_preferred));
+            } else {
+                // Set string resources WITH option wifi only in mButtonWfcMode.
+                mButtonWfcMode.setEntries(
+                        res.getStringArray(R.array.wifi_calling_mode_choices));
+                mButtonWfcMode.setEntryValues(res.getStringArray(R.array.wifi_calling_mode_values));
+                mButtonWfcMode.setEntrySummaries(
+                        res.getStringArray(R.array.wifi_calling_mode_summaries));
+
+                // Set string resources WITH option wifi only in mButtonWfcRoamingMode.
+                mButtonWfcRoamingMode.setEntries(
+                        res.getStringArray(R.array.wifi_calling_mode_choices_v2));
+                mButtonWfcRoamingMode.setEntryValues(
+                        res.getStringArray(R.array.wifi_calling_mode_values));
+                mButtonWfcRoamingMode.setEntrySummaries(
+                        res.getStringArray(R.array.wifi_calling_mode_summaries));
+            }
         } else {
-            // Set string resources WITHOUT option wifi only in mButtonWfcMode.
-            mButtonWfcMode.setEntries(
-                    res.getStringArray(R.array.wifi_calling_mode_choices_without_wifi_only));
-            mButtonWfcMode.setEntryValues(
-                    res.getStringArray(R.array.wifi_calling_mode_values_without_wifi_only));
-            mButtonWfcMode.setEntrySummaries(
-                    res.getStringArray(R.array.wifi_calling_mode_summaries_without_wifi_only));
+            if (isImsPreferredSupported) {
+                mButtonWfcMode.setEntries(res.getStringArray(
+                        R.array.wifi_calling_mode_choices_without_wifi_only_with_ims_preferred));
+                mButtonWfcMode.setEntryValues(res.getStringArray(
+                        R.array.wifi_calling_mode_values_without_wifi_only_with_ims_preferred));
+                mButtonWfcMode.setEntrySummaries(res.getStringArray(
+                        R.array.wifi_calling_mode_summaries_without_wifi_only_with_ims_preferred));
 
-            // Set string resources WITHOUT option wifi only in mButtonWfcRoamingMode.
-            mButtonWfcRoamingMode.setEntries(
-                    res.getStringArray(R.array.wifi_calling_mode_choices_v2_without_wifi_only));
-            mButtonWfcRoamingMode.setEntryValues(
-                    res.getStringArray(R.array.wifi_calling_mode_values_without_wifi_only));
-            mButtonWfcRoamingMode.setEntrySummaries(
-                    res.getStringArray(R.array.wifi_calling_mode_summaries_without_wifi_only));
+                mButtonWfcRoamingMode.setEntries(res.getStringArray(
+                        R.array.wifi_calling_mode_choices_v2_without_wifi_only_with_ims_preferred));
+                mButtonWfcRoamingMode.setEntryValues(res.getStringArray(
+                        R.array.wifi_calling_mode_values_without_wifi_only_with_ims_preferred));
+                mButtonWfcRoamingMode.setEntrySummaries(res.getStringArray(
+                        R.array.wifi_calling_mode_summaries_without_wifi_only_with_ims_preferred));
+            } else {
+                // Set string resources WITHOUT option wifi only in mButtonWfcMode.
+                mButtonWfcMode.setEntries(
+                        res.getStringArray(R.array.wifi_calling_mode_choices_without_wifi_only));
+                mButtonWfcMode.setEntryValues(
+                        res.getStringArray(R.array.wifi_calling_mode_values_without_wifi_only));
+                mButtonWfcMode.setEntrySummaries(
+                        res.getStringArray(R.array.wifi_calling_mode_summaries_without_wifi_only));
+
+                // Set string resources WITHOUT option wifi only in mButtonWfcRoamingMode.
+                mButtonWfcRoamingMode.setEntries(
+                        res.getStringArray(R.array.wifi_calling_mode_choices_v2_without_wifi_only));
+                mButtonWfcRoamingMode.setEntryValues(
+                        res.getStringArray(R.array.wifi_calling_mode_values_without_wifi_only));
+                mButtonWfcRoamingMode.setEntrySummaries(
+                        res.getStringArray(R.array.wifi_calling_mode_summaries_without_wifi_only));
+            }
         }
 
         // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
@@ -636,6 +674,9 @@
                 case ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED:
                     resId = com.android.internal.R.string.wfc_mode_wifi_preferred_summary;
                     break;
+                case ImsConfig.WfcModeFeatureValueConstants.IMS_PREFERRED:
+                    resId = com.android.internal.R.string.wfc_mode_ims_preferred_summary;
+                    break;
                 default:
                     Log.e(TAG, "Unexpected WFC mode value: " + wfcMode);
             }
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index 8dd8d7a..7669147 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -44,6 +44,7 @@
 import android.net.RouteInfo;
 import android.net.Uri;
 import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiConfiguration.KeyMgmt;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.os.CountDownTimer;
@@ -167,6 +168,8 @@
     private NetworkInfo mNetworkInfo;
     private NetworkCapabilities mNetworkCapabilities;
     private int mRssiSignalLevel = -1;
+    private int mWifiStandard;
+    private boolean mIsReady;
     private String[] mSignalStr;
     private WifiConfiguration mWifiConfig;
     private WifiInfo mWifiInfo;
@@ -453,6 +456,13 @@
         mIpv6Category = screen.findPreference(KEY_IPV6_CATEGORY);
         mIpv6AddressPref = screen.findPreference(KEY_IPV6_ADDRESSES_PREF);
 
+        if (mAccessPoint.getSecurityString(false).equals("SAE")
+             && mAccessPoint.getConfig().allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {
+             mSecurityPref.setSummary(mContext.getString(R.string.wifi_security_wpa_wpa2));
+         }
+         else
+             mSecurityPref.setSummary(mAccessPoint.getSecurityString(false /* concise */));
+
         mSecurityPref.setSummary(mAccessPoint.getSecurityString(/* concise */ false));
     }
 
@@ -683,6 +693,9 @@
 
     private void refreshRssiViews() {
         int signalLevel = mAccessPoint.getLevel();
+        int wifiStandard = mAccessPoint.getWifiStandard();
+        boolean isReady = (mAccessPoint.isVhtMax8SpatialStreamsSupported()
+                          && mAccessPoint.isHe8ssCapableAp());
 
         // Disappears signal view if not in range. e.g. for saved networks.
         if (mIsOutOfRange) {
@@ -691,11 +704,15 @@
             return;
         }
 
-        if (mRssiSignalLevel == signalLevel) {
+        if (mRssiSignalLevel == signalLevel
+            && mWifiStandard == wifiStandard
+            && mIsReady == isReady) {
             return;
         }
         mRssiSignalLevel = signalLevel;
-        Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel);
+        mWifiStandard = wifiStandard;
+        mIsReady = isReady;
+        Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel, mWifiStandard, mIsReady);
 
         if (mEntityHeaderController != null) {
             mEntityHeaderController
@@ -751,6 +768,9 @@
         } else if (frequency >= AccessPoint.LOWER_FREQ_5GHZ
                 && frequency < AccessPoint.HIGHER_FREQ_5GHZ) {
             band = mContext.getResources().getString(R.string.wifi_band_5ghz);
+        } else if (frequency >= AccessPoint.LOWER_FREQ_60GHZ
+                && frequency < AccessPoint.HIGHER_FREQ_60GHZ) {
+            band = mContext.getResources().getString(R.string.wifi_band_60ghz);
         } else {
             Log.e(TAG, "Unexpected frequency " + frequency);
             // Connecting state is unstable, make it disappeared if unexpected
@@ -1079,6 +1099,10 @@
         public Drawable getIcon(int level) {
             return mContext.getDrawable(Utils.getWifiIconResource(level)).mutate();
         }
+
+        public Drawable getIcon(int level, int standard, boolean isReady) {
+            return mContext.getDrawable(Utils.getWifiIconResource(level, standard, isReady)).mutate();
+        }
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index 5c48dfd..c7701c0 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -156,6 +156,8 @@
     private NetworkInfo mNetworkInfo;
     private NetworkCapabilities mNetworkCapabilities;
     private int mRssiSignalLevel = -1;
+    private int mWifiStandard;
+    private boolean mIsReady;
     private String[] mSignalStr;
     private WifiInfo mWifiInfo;
     private final WifiManager mWifiManager;
@@ -513,6 +515,9 @@
 
     private void refreshRssiViews() {
         int signalLevel = mWifiEntry.getLevel();
+        int wifiStandard = mWifiEntry.getWifiStandard();
+        boolean isReady = mWifiEntry.isVhtMax8SpatialStreamsSupported() &&
+                              mWifiEntry.isHe8ssCapableAp();
 
         // Disappears signal view if not in range. e.g. for saved networks.
         if (signalLevel == WifiEntry.WIFI_LEVEL_UNREACHABLE) {
@@ -521,11 +526,15 @@
             return;
         }
 
-        if (mRssiSignalLevel == signalLevel) {
+        if (mRssiSignalLevel == signalLevel &&
+            mWifiStandard == wifiStandard &&
+            mIsReady == isReady) {
             return;
         }
         mRssiSignalLevel = signalLevel;
-        Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel);
+        mWifiStandard = wifiStandard;
+        mIsReady = isReady;
+        Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel, mWifiStandard, mIsReady);
 
         if (mEntityHeaderController != null) {
             mEntityHeaderController
@@ -910,6 +919,10 @@
         public Drawable getIcon(int level) {
             return mContext.getDrawable(Utils.getWifiIconResource(level)).mutate();
         }
+
+        public Drawable getIcon(int level, int standard, boolean isReady) {
+            return mContext.getDrawable(Utils.getWifiIconResource(level, standard, isReady)).mutate();
+        }
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
index b3bd9c6..688e135 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
@@ -221,6 +221,10 @@
     private boolean isReachableWifiNetwork(WifiConfiguration wifiConfiguration) {
         final List<AccessPoint> scannedAccessPoints = mWifiTracker.getAccessPoints();
 
+        // hidden network visibility is known at later stage (next scan)
+        if (wifiConfiguration.hiddenSSID)
+            return true;
+
         for (AccessPoint scannedAccessPoint : scannedAccessPoints) {
             if (scannedAccessPoint.matches(wifiConfiguration) &&
                     scannedAccessPoint.isReachable()) {
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index 9578c80..7001ca7 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -69,7 +69,7 @@
         implements PersistentGroupInfoListener, PeerListListener, DeviceInfoListener {
 
     private static final String TAG = "WifiP2pSettings";
-    private static final boolean DBG = false;
+    private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
     @VisibleForTesting static final int MENU_ID_SEARCH = Menu.FIRST;
     @VisibleForTesting static final int MENU_ID_RENAME = Menu.FIRST + 1;
 
diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index a489b05..8189944 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -211,7 +211,11 @@
         }
 
         final Drawable drawable = mContext.getDrawable(
-                com.android.settingslib.Utils.getWifiIconResource(accessPoint.getLevel()));
+                com.android.settingslib.Utils.getWifiIconResource(
+                                                  accessPoint.getLevel(),
+                                                  accessPoint.getWifiStandard(),
+                                                  accessPoint.isHe8ssCapableAp()
+                                                  && accessPoint.isVhtMax8SpatialStreamsSupported()));
         drawable.setTint(tint);
         return Utils.createIconWithDrawable(drawable);
     }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
index 8a4be10..3a13525 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
@@ -39,11 +39,18 @@
     private String[] mBandEntries;
     private String[] mBandSummaries;
     private int mBandIndex;
+    private int mSecurityType;
+    private boolean isVendorDualApSupported;
 
     public WifiTetherApBandPreferenceController(Context context,
             OnTetherConfigUpdateListener listener) {
         super(context, listener);
-        updatePreferenceEntries();
+        final SoftApConfiguration config = mWifiManager.getSoftApConfiguration();
+
+        isVendorDualApSupported = context.getResources().getBoolean(
+            com.android.internal.R.bool.config_wifi_dual_sap_mode_enabled);
+
+        updatePreferenceEntries(config);
     }
 
     @Override
@@ -53,7 +60,7 @@
             mBandIndex = SoftApConfiguration.BAND_2GHZ;
             Log.d(TAG, "Updating band index to BAND_2GHZ because no config");
         } else if (is5GhzBandSupported()) {
-            mBandIndex = validateSelection(config.getBand());
+            mBandIndex = validateSelection(config);
             Log.d(TAG, "Updating band index to " + mBandIndex);
         } else {
             mWifiManager.setSoftApConfiguration(
@@ -71,6 +78,7 @@
             preference.setEnabled(false);
             preference.setSummary(R.string.wifi_ap_choose_2G);
         } else {
+            preference.setEnabled(true);
             preference.setValue(Integer.toString(config.getBand()));
             preference.setSummary(getConfigSummary());
         }
@@ -82,6 +90,8 @@
                 return mBandSummaries[0];
             case SoftApConfiguration.BAND_5GHZ:
                 return mBandSummaries[1];
+            case SoftApConfiguration.BAND_DUAL:
+                return mBandSummaries[2];
             default:
                 return mContext.getString(R.string.wifi_ap_prefer_5G);
         }
@@ -102,6 +112,18 @@
         return true;
     }
 
+    private int validateSelection(SoftApConfiguration config) {
+        if (config.getBand() == SoftApConfiguration.BAND_DUAL
+                && config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_OWE) {
+            config = new SoftApConfiguration.Builder(config).setBand(
+                SoftApConfiguration.BAND_2GHZ).build();
+            mWifiManager.setSoftApConfiguration(config);
+            Log.d(TAG, "Dual band not supported for OWE security, updating band index to " + mBandIndex);
+        }
+
+        return validateSelection(config.getBand());
+    }
+
     private int validateSelection(int band) {
         // unsupported states:
         // 1: BAND_5GHZ only - include 2GHZ since some of countries doesn't support 5G hotspot
@@ -116,11 +138,25 @@
         return band;
     }
 
+    public void updatePreferenceEntries(SoftApConfiguration config) {
+        mSecurityType = (config == null ? SoftApConfiguration.SECURITY_TYPE_OPEN : config.getSecurityType());
+        Log.d(TAG, "updating band preferences.");
+        updatePreferenceEntries();
+     }
+
     @VisibleForTesting
     void updatePreferenceEntries() {
         Resources res = mContext.getResources();
         int entriesRes = R.array.wifi_ap_band;
         int summariesRes = R.array.wifi_ap_band_summary;
+        if (isVendorDualApSupported && mSecurityType != SoftApConfiguration.SECURITY_TYPE_OWE) {
+            // change the list option if AP+AP is supproted and selected security type is not OWE
+            entriesRes = R.array.wifi_ap_band_vendor_config_full;
+            summariesRes = R.array.wifi_ap_band_vendor_summary_full;
+        } else if (mSecurityType == SoftApConfiguration.SECURITY_TYPE_OWE) {
+            entriesRes = R.array.wifi_ap_band_vendor_config_no_dual;
+            summariesRes = R.array.wifi_ap_band_vendor_summary_no_dual;
+        }
         mBandEntries = res.getStringArray(entriesRes);
         mBandSummaries = res.getStringArray(summariesRes);
     }
@@ -136,4 +172,20 @@
     public int getBandIndex() {
         return mBandIndex;
     }
+
+    public boolean isVendorDualApSupported() {
+        return isVendorDualApSupported;
+    }
+
+    public boolean isBandEntriesHasDualband() {
+        if (mBandEntries == null)
+            return false;
+
+        for (int i = 0 ; i < mBandEntries.length; i++) {
+            if (Integer.parseInt(mBandEntries[i]) == SoftApConfiguration.BAND_DUAL)
+                return true;
+        }
+
+        return false;
+    }
 }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
index a4a51dc..c40a90a 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
@@ -69,7 +69,8 @@
     public void updateDisplay() {
         final SoftApConfiguration config = mWifiManager.getSoftApConfiguration();
         if (config == null
-                || (config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK
+                || ((config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK
+                     || config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION)
                 && TextUtils.isEmpty(config.getPassphrase()))) {
             mPassword = generateRandomPassword();
         } else {
@@ -103,7 +104,8 @@
      */
     public String getPasswordValidated(int securityType) {
         // don't actually overwrite unless we get a new config in case it was accidentally toggled.
-        if (securityType == SoftApConfiguration.SECURITY_TYPE_OPEN) {
+        if (securityType == SoftApConfiguration.SECURITY_TYPE_OPEN
+                || securityType == SoftApConfiguration.SECURITY_TYPE_OWE) {
             return "";
         } else if (!isTextValid(mPassword)) {
             mPassword = generateRandomPassword();
@@ -113,7 +115,8 @@
     }
 
     public void updateVisibility(int securityType) {
-        mPreference.setVisible(securityType != SoftApConfiguration.SECURITY_TYPE_OPEN);
+        mPreference.setVisible(securityType != SoftApConfiguration.SECURITY_TYPE_OPEN
+                                   && securityType != SoftApConfiguration.SECURITY_TYPE_OWE);
     }
 
     @Override
diff --git a/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java
index 5049002..106522a 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java
@@ -131,8 +131,15 @@
                     public void onConnectedClientsChanged(List<WifiClient> clients) {
                         if (mPreference != null
                                 && mSoftApState == WifiManager.WIFI_AP_STATE_ENABLED) {
+                            String extendWifiSummary;
+                            if (mWifiManager.isExtendingWifi()) {
+                                extendWifiSummary = "Extending Wifi-Coverage: ";
+                            } else {
+                                extendWifiSummary = "";
+                            }
+
                             // Only show the number of clients when state is on
-                            mPreference.setSummary(mContext.getResources().getQuantityString(
+                            mPreference.setSummary(extendWifiSummary + mContext.getResources().getQuantityString(
                                     R.plurals.wifi_tether_connected_summary, clients.size(),
                                     clients.size()));
                         }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java
index 56b5031..f376fbd 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java
@@ -3,26 +3,90 @@
 import static com.android.settings.AllInOneTetherSettings.DEDUP_POSTFIX;
 
 import android.content.Context;
+import android.net.wifi.SoftApCapability;
 import android.net.wifi.SoftApConfiguration;
+import android.net.wifi.WifiManager;
+import android.os.Handler;
+import android.os.HandlerExecutor;
 import android.util.FeatureFlagUtils;
+import android.util.Log;
 
 import androidx.preference.ListPreference;
 import androidx.preference.Preference;
 
 import com.android.settings.R;
 import com.android.settings.core.FeatureFlags;
+import java.util.ArrayList;
 
 public class WifiTetherSecurityPreferenceController extends WifiTetherBasePreferenceController {
 
     private static final String PREF_KEY = "wifi_tether_security";
+    private static final String TAG = "WifiTetherSecurityPreferenceController";
 
-    private final String[] mSecurityEntries;
+    private String[] mSecurityEntries;
+    private String[] mSecurityValues;
     private int mSecurityValue;
+    private boolean mSecurityCapaFetched;
+    private boolean mDualSoftApSupported;
+    private boolean mSaeSapSupprted;
+    private boolean mOweSapSupprted;
+    final Context mContext;
+
+    private WifiManager.SoftApCallback mSoftApCallback = new WifiManager.SoftApCallback() {
+        @Override
+        public void onCapabilityChanged(SoftApCapability capability) {
+            if (mSecurityCapaFetched)
+                return;
+
+            ArrayList<String> securityEntries =  new ArrayList<String>();
+            ArrayList<String> securityValues =  new ArrayList<String>();
+
+            mSecurityCapaFetched = true;
+
+            if (capability.areFeaturesSupported(SoftApCapability.SOFTAP_FEATURE_WPA3_SAE))
+                mSaeSapSupprted = true;
+
+            if (capability.areFeaturesSupported(SoftApCapability.SOFTAP_FEATURE_WPA3_OWE))
+                mOweSapSupprted = true;
+
+
+            if (mSaeSapSupprted) {
+                // Add SAE security type
+                securityValues.add(String.valueOf(SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION));
+                securityEntries.add(mContext.getString(R.string.wifi_security_sae));
+            }
+            if (mOweSapSupprted && mDualSoftApSupported) {
+                // Add OWE security type
+                securityValues.add(String.valueOf(SoftApConfiguration.SECURITY_TYPE_OWE));
+                securityEntries.add(mContext.getString(R.string.wifi_security_owe));
+            }
+            // Add WPA2-PSK security type
+            securityValues.add(String.valueOf(SoftApConfiguration.SECURITY_TYPE_WPA2_PSK));
+            securityEntries.add(mContext.getString(R.string.wifi_security_wpa2));
+            // Add open security type
+            securityValues.add(String.valueOf(SoftApConfiguration.SECURITY_TYPE_OPEN));
+            securityEntries.add(mContext.getString(R.string.wifi_security_none));
+
+            mSecurityEntries = securityEntries.toArray(new String[securityEntries.size()]);
+            mSecurityValues = securityValues.toArray(new String[securityValues.size()]);
+
+            updateDisplay();
+            Log.i(TAG, "Updated supported SoftAp AKMs");
+        }
+
+    };
 
     public WifiTetherSecurityPreferenceController(Context context,
             OnTetherConfigUpdateListener listener) {
         super(context, listener);
-        mSecurityEntries = mContext.getResources().getStringArray(R.array.wifi_tether_security);
+        mContext = context;
+        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+
+        mDualSoftApSupported = context.getResources().getBoolean(
+            com.android.internal.R.bool.config_wifi_dual_sap_mode_enabled);
+
+        Log.i(TAG, "Register SoftAp callback");
+        wifiManager.registerSoftApCallback(new HandlerExecutor(new Handler()), mSoftApCallback);
     }
 
     @Override
@@ -34,13 +98,23 @@
     @Override
     public void updateDisplay() {
         final SoftApConfiguration config = mWifiManager.getSoftApConfiguration();
-        if (config != null && config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_OPEN) {
+        if (config == null) {
+            mSecurityValue = SoftApConfiguration.SECURITY_TYPE_WPA2_PSK;
+        } else if (config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_OPEN) {
             mSecurityValue = SoftApConfiguration.SECURITY_TYPE_OPEN;
+        } else if (mOweSapSupprted && mDualSoftApSupported
+                   && config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_OWE) {
+            mSecurityValue = SoftApConfiguration.SECURITY_TYPE_OWE;
+        } else if (mSaeSapSupprted
+                   && config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION) {
+            mSecurityValue = SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION;
         } else {
             mSecurityValue = SoftApConfiguration.SECURITY_TYPE_WPA2_PSK;
         }
 
         final ListPreference preference = (ListPreference) mPreference;
+        preference.setEntries(mSecurityEntries);
+        preference.setEntryValues(mSecurityValues);
         preference.setSummary(getSummaryForSecurityType(mSecurityValue));
         preference.setValue(String.valueOf(mSecurityValue));
     }
@@ -58,10 +132,13 @@
     }
 
     private String getSummaryForSecurityType(int securityType) {
-        if (securityType == SoftApConfiguration.SECURITY_TYPE_OPEN) {
-            return mSecurityEntries[1];
-        }
-        // WPA2 PSK
-        return mSecurityEntries[0];
+        final ListPreference preference = (ListPreference) mPreference;
+        int securityEntryIndex = preference.findIndexOfValue(String.valueOf(securityType));
+
+        return securityEntryIndex < 0 ? "" : mSecurityEntries[securityEntryIndex];
+    }
+
+    public boolean isOweSapSupported() {
+        return mOweSapSupprted;
     }
 }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index 9e68202..eca5639 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -18,6 +18,7 @@
 
 import static android.net.ConnectivityManager.ACTION_TETHER_STATE_CHANGED;
 import static android.net.wifi.WifiManager.WIFI_AP_STATE_CHANGED_ACTION;
+import static android.net.wifi.WifiManager.WIFI_COUNTRY_CODE_CHANGED_ACTION;
 
 import android.app.settings.SettingsEnums;
 import android.content.BroadcastReceiver;
@@ -30,6 +31,7 @@
 import android.os.UserManager;
 import android.util.FeatureFlagUtils;
 import android.util.Log;
+import android.widget.Toast;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.PreferenceGroup;
@@ -82,6 +84,7 @@
     static {
         TETHER_STATE_CHANGE_FILTER = new IntentFilter(ACTION_TETHER_STATE_CHANGED);
         TETHER_STATE_CHANGE_FILTER.addAction(WIFI_AP_STATE_CHANGED_ACTION);
+        TETHER_STATE_CHANGE_FILTER.addAction(WIFI_COUNTRY_CODE_CHANGED_ACTION);
     }
 
     public WifiTetherSettings() {
@@ -189,8 +192,19 @@
     @Override
     public void onTetherConfigUpdated(AbstractPreferenceController context) {
         final SoftApConfiguration config = buildNewConfig();
+        boolean bandEntriesChanged = false;
+
         mPasswordPreferenceController.updateVisibility(config.getSecurityType());
 
+        if (mApBandPreferenceController.isVendorDualApSupported()
+                && mSecurityPreferenceController.isOweSapSupported()) {
+            if ((config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_OWE)
+                    == (mApBandPreferenceController.isBandEntriesHasDualband())) {
+                mApBandPreferenceController.updatePreferenceEntries(config);
+                bandEntriesChanged = true;
+            }
+        }
+
         /**
          * if soft AP is stopped, bring up
          * else restart with new config
@@ -204,6 +218,8 @@
         }
         mWifiManager.setSoftApConfiguration(config);
 
+        if (bandEntriesChanged)
+            mApBandPreferenceController.updateDisplay();
         if (context instanceof WifiTetherSecurityPreferenceController) {
             reConfigInitialExpandedChildCount();
         }
@@ -212,13 +228,16 @@
     private SoftApConfiguration buildNewConfig() {
         final SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();
         final int securityType = mSecurityPreferenceController.getSecurityType();
+        final int band = mApBandPreferenceController.getBandIndex();
         configBuilder.setSsid(mSSIDPreferenceController.getSSID());
-        if (securityType == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK) {
-            configBuilder.setPassphrase(
-                    mPasswordPreferenceController.getPasswordValidated(securityType),
-                    SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
+        configBuilder.setPassphrase(mPasswordPreferenceController.getPasswordValidated(securityType),
+                                    securityType);
+        if (securityType == SoftApConfiguration.SECURITY_TYPE_OWE
+                && band == SoftApConfiguration.BAND_DUAL) {
+            configBuilder.setBand(SoftApConfiguration.BAND_2GHZ);
+        } else {
+            configBuilder.setBand(band);
         }
-        configBuilder.setBand(mApBandPreferenceController.getBandIndex());
         return configBuilder.build();
     }
 
@@ -286,6 +305,13 @@
                 if (state == WifiManager.WIFI_AP_STATE_DISABLED
                         && mRestartWifiApAfterConfigChange) {
                     startTether();
+                } else if (state == WifiManager.WIFI_AP_STATE_FAILED) {
+                    int failureCode = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_FAILURE_REASON, 0);
+                    String failureDesc = intent.getStringExtra(WifiManager.EXTRA_WIFI_AP_FAILURE_DESCRIPTION);
+                    if (failureCode == WifiManager.SAP_START_FAILURE_NO_CHANNEL
+                         && failureDesc != null && failureDesc.equals(WifiManager.WIFI_AP_FAILURE_DESC_NO_5GHZ_SUPPORT)) {
+                        Toast.makeText(content, "5Ghz band not supported. band selection disabled", Toast.LENGTH_LONG).show();
+                    }
                 }
             }
         }