Merge spl-2020-08-05

Change-Id: Ia7cf8b053673069985f34df2328bc4d528f9405c
diff --git a/Android.mk b/Android.mk
index 906cfc7..7aa774f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -38,7 +38,8 @@
 
 LOCAL_JAVA_LIBRARIES := \
     telephony-common \
-    ims-common
+    ims-common \
+    telephony-ext
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     androidx-constraintlayout_constraintlayout-solver \
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 86cb3f2..40563e2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -185,7 +185,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>
@@ -916,6 +915,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"
@@ -2692,6 +2721,27 @@
             android:grantUriPermissions="true"
             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=".sim.SimPreferenceDialog"
             android:theme="@style/Theme.AlertDialog"
             android:excludeFromRecents="true" />
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/wifi_dialog.xml b/res/layout/wifi_dialog.xml
index 50c22a2..cf4d3af 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"
@@ -352,6 +370,13 @@
                     android:orientation="vertical"
                     android:visibility="gone">
 
+            <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 c8b0d47..5722d02 100644
--- a/res/values-af/arrays.xml
+++ b/res/values-af/arrays.xml
@@ -205,6 +205,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-am/arrays.xml b/res/values-am/arrays.xml
index 722b48c..eb63fbd 100644
--- a/res/values-am/arrays.xml
+++ b/res/values-am/arrays.xml
@@ -205,6 +205,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 f99cdfb..ed212e9 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-ar/arrays.xml b/res/values-ar/arrays.xml
index f6e693f..413e993 100644
--- a/res/values-ar/arrays.xml
+++ b/res/values-ar/arrays.xml
@@ -205,6 +205,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 5d80837..be1664e 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -1875,9 +1875,9 @@
     <string name="lockpassword_strong_auth_required_work_pattern" msgid="6803652050512161140">"استخدام نقش للملف الشخصي للعمل لزيادة الأمان"</string>
     <string name="lockpassword_strong_auth_required_work_pin" msgid="4208510396448713500">"إدخال رقم تعريف شخصي للملف الشخصي للعمل لزيادة الأمان"</string>
     <string name="lockpassword_strong_auth_required_work_password" msgid="6119482061429323090">"إدخال كلمة مرور للملف الشخصي للعمل لزيادة الأمان"</string>
-    <string name="lockpassword_confirm_your_pattern_details_frp" msgid="6351784282865851482">"تم إعادة ضبط هاتفك على الإعدادات الأصلية. لاستخدام هذا الهاتف، أدخل النقش السابق."</string>
-    <string name="lockpassword_confirm_your_pin_details_frp" msgid="2128795640346033349">"تم إعادة ضبط هاتفك على الإعدادات الأصلية. لاستخدام هذا الهاتف، أدخل رقم التعريف الشخصي السابق."</string>
-    <string name="lockpassword_confirm_your_password_details_frp" msgid="4031863562975125016">"تم إعادة ضبط هاتفك على الإعدادات الأصلية. لاستخدام هذا الهاتف، أدخل كلمة المرور السابقة."</string>
+    <string name="lockpassword_confirm_your_pattern_details_frp" msgid="6351784282865851482">"تم إعادة تعيين هاتفك على إعدادات المصنع. لاستخدام هذا الهاتف، أدخل النقش السابق."</string>
+    <string name="lockpassword_confirm_your_pin_details_frp" msgid="2128795640346033349">"تم إعادة تعيين هاتفك على إعدادات المصنع. لاستخدام هذا الهاتف، أدخل رقم التعريف الشخصي السابق."</string>
+    <string name="lockpassword_confirm_your_password_details_frp" msgid="4031863562975125016">"تم إعادة تعيين هاتفك على إعدادات المصنع. لاستخدام هذا الهاتف، أدخل كلمة المرور السابقة."</string>
     <string name="lockpassword_confirm_your_pattern_header_frp" msgid="5641858015891896427">"التحقق من النقش"</string>
     <string name="lockpassword_confirm_your_pin_header_frp" msgid="8285647793164729982">"التحقق من رقم التعريف الشخصي"</string>
     <string name="lockpassword_confirm_your_password_header_frp" msgid="7932240547542564033">"التحقق من كلمة المرور"</string>
@@ -5010,4 +5010,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-az/arrays.xml b/res/values-az/arrays.xml
index 1e8758f..e763d12 100644
--- a/res/values-az/arrays.xml
+++ b/res/values-az/arrays.xml
@@ -205,6 +205,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 782dde2..32e9ce3 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-b+sr+Latn/arrays.xml b/res/values-b+sr+Latn/arrays.xml
index b355390..7f2b390 100644
--- a/res/values-b+sr+Latn/arrays.xml
+++ b/res/values-b+sr+Latn/arrays.xml
@@ -205,6 +205,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-be/arrays.xml b/res/values-be/arrays.xml
index e1038b9..69bd042 100644
--- a/res/values-be/arrays.xml
+++ b/res/values-be/arrays.xml
@@ -205,6 +205,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/arrays.xml b/res/values-bg/arrays.xml
index f37ecea..4c7334d 100644
--- a/res/values-bg/arrays.xml
+++ b/res/values-bg/arrays.xml
@@ -205,6 +205,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 252862e..89d530f 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -4204,6 +4204,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 f14398a..434c4de 100644
--- a/res/values-bn/arrays.xml
+++ b/res/values-bn/arrays.xml
@@ -205,6 +205,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 7a04f73..6db0418 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">হার্ডওয়্যার ফিডব্যাক</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc প্রতিবেদন</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-bs/arrays.xml b/res/values-bs/arrays.xml
index 365473e..f6c5b24 100644
--- a/res/values-bs/arrays.xml
+++ b/res/values-bs/arrays.xml
@@ -205,6 +205,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-ca/arrays.xml b/res/values-ca/arrays.xml
index 81e9f83..825c7f3 100644
--- a/res/values-ca/arrays.xml
+++ b/res/values-ca/arrays.xml
@@ -205,6 +205,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 6cfc756..de11b40 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml
index f44b947..a99b9e9 100644
--- a/res/values-cs/arrays.xml
+++ b/res/values-cs/arrays.xml
@@ -205,6 +205,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 a73d51f..7358c85 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -4840,4 +4840,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-da/arrays.xml b/res/values-da/arrays.xml
index fd4e58d..cd4bf2d 100644
--- a/res/values-da/arrays.xml
+++ b/res/values-da/arrays.xml
@@ -205,6 +205,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 9ce3e62..0acf827 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Hardware-feedback</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Rapportering</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-de/arrays.xml b/res/values-de/arrays.xml
index 886c9f6..a06a6cf 100644
--- a/res/values-de/arrays.xml
+++ b/res/values-de/arrays.xml
@@ -205,6 +205,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 0893b5c..fbd837c 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -4671,4 +4671,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-el/arrays.xml b/res/values-el/arrays.xml
index 6b4a697..e1f7f44 100644
--- a/res/values-el/arrays.xml
+++ b/res/values-el/arrays.xml
@@ -205,6 +205,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 b58ddf8..0ddb713 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-en-rAU/arrays.xml b/res/values-en-rAU/arrays.xml
index 62498e8..3e0bc81 100644
--- a/res/values-en-rAU/arrays.xml
+++ b/res/values-en-rAU/arrays.xml
@@ -205,6 +205,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/arrays.xml b/res/values-en-rGB/arrays.xml
index 62498e8..3e0bc81 100644
--- a/res/values-en-rGB/arrays.xml
+++ b/res/values-en-rGB/arrays.xml
@@ -205,6 +205,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/arrays.xml b/res/values-en-rIN/arrays.xml
index 62498e8..3e0bc81 100644
--- a/res/values-en-rIN/arrays.xml
+++ b/res/values-en-rIN/arrays.xml
@@ -205,6 +205,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-es-rUS/arrays.xml b/res/values-es-rUS/arrays.xml
index b5cee26..7916576 100644
--- a/res/values-es-rUS/arrays.xml
+++ b/res/values-es-rUS/arrays.xml
@@ -205,6 +205,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 a3963f6..33f6cb5 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -4668,4 +4668,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
index d60f164..5ffecf1 100644
--- a/res/values-es/arrays.xml
+++ b/res/values-es/arrays.xml
@@ -205,6 +205,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 c9ebccc..f9a2bb9 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -4205,6 +4205,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 0836f3a..d2320ab 100644
--- a/res/values-et/arrays.xml
+++ b/res/values-et/arrays.xml
@@ -205,6 +205,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 d7cdf83..f528bed 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-eu/arrays.xml b/res/values-eu/arrays.xml
index 5924a7c..ce251d6 100644
--- a/res/values-eu/arrays.xml
+++ b/res/values-eu/arrays.xml
@@ -205,6 +205,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 d5cd37a..e25278b 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-fa/arrays.xml b/res/values-fa/arrays.xml
index a44cefd..562cc8d 100644
--- a/res/values-fa/arrays.xml
+++ b/res/values-fa/arrays.xml
@@ -205,6 +205,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 a64087e..e1dce44 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-fi/arrays.xml b/res/values-fi/arrays.xml
index 98f0d4d..42db12a 100644
--- a/res/values-fi/arrays.xml
+++ b/res/values-fi/arrays.xml
@@ -205,6 +205,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 c6d57b3..dace689 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Palaute laitteesta</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc -raportointi</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-fr-rCA/arrays.xml b/res/values-fr-rCA/arrays.xml
index ea4cb2d..9c1767a 100644
--- a/res/values-fr-rCA/arrays.xml
+++ b/res/values-fr-rCA/arrays.xml
@@ -205,6 +205,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 a920d22..3ba1529f 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Avis sur le matériel</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Transmission de rapports</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
index 2673a8f..876a12a 100644
--- a/res/values-fr/arrays.xml
+++ b/res/values-fr/arrays.xml
@@ -205,6 +205,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 a1461ea..f916254 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-gl/arrays.xml b/res/values-gl/arrays.xml
index eab6c49..79bd2ad 100644
--- a/res/values-gl/arrays.xml
+++ b/res/values-gl/arrays.xml
@@ -205,6 +205,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 e02faff..71e0fa2 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Comentarios sobre o hardware</string>
+    <string name="qtifeedback_settings_subtitle">Informe de Qualcomm Technologies, Inc</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-gu/arrays.xml b/res/values-gu/arrays.xml
index ece9976..3e381a3 100644
--- a/res/values-gu/arrays.xml
+++ b/res/values-gu/arrays.xml
@@ -205,6 +205,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/arrays.xml b/res/values-hi/arrays.xml
index b0b1aed..ae04aec 100644
--- a/res/values-hi/arrays.xml
+++ b/res/values-hi/arrays.xml
@@ -205,6 +205,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 a577037..ae19897 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -4670,4 +4670,7 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="no_connected_devices" msgid="6657176404588389594">"कोई डिवाइस नहीं जुड़ा है"</string>
+    <string name="qtifeedback_settings_title"> हार्डवेयर प्रतिसाद</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc रिपोर्टिंग</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-hr/arrays.xml b/res/values-hr/arrays.xml
index 2a865b6..882f09f 100644
--- a/res/values-hr/arrays.xml
+++ b/res/values-hr/arrays.xml
@@ -205,6 +205,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 5ca6766..6abafd9 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -4755,4 +4755,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Povratne informacije o hardveru</string>
+    <string name="qtifeedback_settings_subtitle"> Slanje izvještaja tvrtki Qualcomm Technologies, Inc</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-hu/arrays.xml b/res/values-hu/arrays.xml
index 1cee4db..066d2eb 100644
--- a/res/values-hu/arrays.xml
+++ b/res/values-hu/arrays.xml
@@ -205,6 +205,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 dc496e5..1b75228 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Hardverrel kapcsolatos visszajelzés</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Jelentésküldés</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-hy/arrays.xml b/res/values-hy/arrays.xml
index a31975c..546ca2c 100644
--- a/res/values-hy/arrays.xml
+++ b/res/values-hy/arrays.xml
@@ -205,6 +205,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 ce4c4b0..eece569 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Հետադարձ կապ սարքակազմի մասին</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Զեկուցում</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-in/arrays.xml b/res/values-in/arrays.xml
index 5cad411..1d08c48 100644
--- a/res/values-in/arrays.xml
+++ b/res/values-in/arrays.xml
@@ -205,6 +205,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 55aa81c..16c89b9 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-is/arrays.xml b/res/values-is/arrays.xml
index 135aee5..6892507 100644
--- a/res/values-is/arrays.xml
+++ b/res/values-is/arrays.xml
@@ -205,6 +205,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 434fbb9..a4c54bb 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml
index fa9f8a5..6e6ece6 100644
--- a/res/values-it/arrays.xml
+++ b/res/values-it/arrays.xml
@@ -205,6 +205,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 c996d1b..0f75ebb 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-iw/arrays.xml b/res/values-iw/arrays.xml
index 6e699a5..15695e7 100644
--- a/res/values-iw/arrays.xml
+++ b/res/values-iw/arrays.xml
@@ -205,6 +205,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/arrays.xml b/res/values-ja/arrays.xml
index ec6032a..a78ef66 100644
--- a/res/values-ja/arrays.xml
+++ b/res/values-ja/arrays.xml
@@ -205,6 +205,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 5ba128b..4648b58 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title"> ハードウェアに関するフィードバック</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Incレポート</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-ka/arrays.xml b/res/values-ka/arrays.xml
index 5a5ddf4..65f364d 100644
--- a/res/values-ka/arrays.xml
+++ b/res/values-ka/arrays.xml
@@ -205,6 +205,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 2e38301..30023dc 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">აპარატურის შესახებ უკუკავშირი</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc რეპორტინგი</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-kk/arrays.xml b/res/values-kk/arrays.xml
index 296f53f..2ed2edf 100644
--- a/res/values-kk/arrays.xml
+++ b/res/values-kk/arrays.xml
@@ -205,6 +205,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 aa3355b..07d1792 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title"> Жабдыққа байланысты пікір</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc хабарламасы</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-km/arrays.xml b/res/values-km/arrays.xml
index c8ccd75..8484dac 100644
--- a/res/values-km/arrays.xml
+++ b/res/values-km/arrays.xml
@@ -205,6 +205,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 b3e8e5f..b32320e 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">មតិតប​នៃ​ហាដវែរ</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc ការរាយការណ៍</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-kn/arrays.xml b/res/values-kn/arrays.xml
index 4cf184b..fda9f29 100644
--- a/res/values-kn/arrays.xml
+++ b/res/values-kn/arrays.xml
@@ -205,6 +205,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 6a73034..9e360fe 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">ಹಾರ್ಡ್‌ವೇರ್ ಪ್ರತಿಕ್ರಿಯೆ</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc ವರದಿ</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
index ebaf3c0..8e27502 100644
--- a/res/values-ko/arrays.xml
+++ b/res/values-ko/arrays.xml
@@ -205,6 +205,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 a91d41a..9716b6a 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">하드웨어 피드백</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc 보고</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-ky/arrays.xml b/res/values-ky/arrays.xml
index 165f2c6..0934a32 100644
--- a/res/values-ky/arrays.xml
+++ b/res/values-ky/arrays.xml
@@ -205,6 +205,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/arrays.xml b/res/values-lo/arrays.xml
index 48d3bd9..9e8b136 100644
--- a/res/values-lo/arrays.xml
+++ b/res/values-lo/arrays.xml
@@ -205,6 +205,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-lt/arrays.xml b/res/values-lt/arrays.xml
index bf9dbe1..65360db 100644
--- a/res/values-lt/arrays.xml
+++ b/res/values-lt/arrays.xml
@@ -205,6 +205,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 099db56..d17ba42 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -4840,4 +4840,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-lv/arrays.xml b/res/values-lv/arrays.xml
index 0463c08..829b3d5 100644
--- a/res/values-lv/arrays.xml
+++ b/res/values-lv/arrays.xml
@@ -205,6 +205,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 3846a40..58a66ff 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -4755,4 +4755,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-mk/arrays.xml b/res/values-mk/arrays.xml
index f4fb3d3..c683eb1 100644
--- a/res/values-mk/arrays.xml
+++ b/res/values-mk/arrays.xml
@@ -205,6 +205,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 16fc02a..bee9339 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-ml/arrays.xml b/res/values-ml/arrays.xml
index 90f5e2d..f37a1ff 100644
--- a/res/values-ml/arrays.xml
+++ b/res/values-ml/arrays.xml
@@ -205,6 +205,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 e076601..c00684f 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">ഹാർഡ്‌വെയർ ഫീഡ്‌ബാക്ക്</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc റിപ്പോർട്ടുചെയ്യൽ</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-mn/arrays.xml b/res/values-mn/arrays.xml
index 0fc94fe..1bcd1a0 100644
--- a/res/values-mn/arrays.xml
+++ b/res/values-mn/arrays.xml
@@ -205,6 +205,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/arrays.xml b/res/values-mr/arrays.xml
index 19eed5b..5f51a3d 100644
--- a/res/values-mr/arrays.xml
+++ b/res/values-mr/arrays.xml
@@ -205,6 +205,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 1561ada..ab7d9a2 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -4671,4 +4671,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">हार्डवेअर फीडबॅक</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc  रिपोर्टिंग</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-ms/arrays.xml b/res/values-ms/arrays.xml
index 7a61cb0..e2d8895 100644
--- a/res/values-ms/arrays.xml
+++ b/res/values-ms/arrays.xml
@@ -205,6 +205,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 28a4e95..a8f412c 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Maklum Balas Perkakasan</string>
+    <string name="qtifeedback_settings_subtitle">Pelaporan Qualcomm Technologies, Inc</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-my/arrays.xml b/res/values-my/arrays.xml
index 60eb09d..dbd699a 100644
--- a/res/values-my/arrays.xml
+++ b/res/values-my/arrays.xml
@@ -205,6 +205,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-nb/arrays.xml b/res/values-nb/arrays.xml
index 73f2b60..4cdf126 100644
--- a/res/values-nb/arrays.xml
+++ b/res/values-nb/arrays.xml
@@ -205,6 +205,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-ne/arrays.xml b/res/values-ne/arrays.xml
index 3f48106..36dd33f 100644
--- a/res/values-ne/arrays.xml
+++ b/res/values-ne/arrays.xml
@@ -205,6 +205,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 1f8070d..c8741bd 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">हार्डवेयर प्रतिक्रिया</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc रिपोर्टिंङ </string>
+</resources>
\ No newline at end of file
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
index ae3fbb3..61142f1 100644
--- a/res/values-nl/arrays.xml
+++ b/res/values-nl/arrays.xml
@@ -205,6 +205,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 e6d4e53..e267f3b 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-pa/arrays.xml b/res/values-pa/arrays.xml
index 9ab1d80..2ab46c4 100644
--- a/res/values-pa/arrays.xml
+++ b/res/values-pa/arrays.xml
@@ -205,6 +205,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-pl/arrays.xml b/res/values-pl/arrays.xml
index 1b0f899..fb66897 100644
--- a/res/values-pl/arrays.xml
+++ b/res/values-pl/arrays.xml
@@ -205,6 +205,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 c1804d9..62ee34f 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -4840,4 +4840,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Informacje zwrotne o urządzeniu</string>
+    <string name="qtifeedback_settings_subtitle">Raportowanie Qualcomm Technologies, Inc</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-pt-rBR/arrays.xml b/res/values-pt-rBR/arrays.xml
index 0cb0d0c..e4e6c5e 100644
--- a/res/values-pt-rBR/arrays.xml
+++ b/res/values-pt-rBR/arrays.xml
@@ -205,6 +205,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-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml
index aec6985..22b8eb9 100644
--- a/res/values-pt-rPT/arrays.xml
+++ b/res/values-pt-rPT/arrays.xml
@@ -205,6 +205,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 75a8ec1..d40ce58 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-pt/arrays.xml b/res/values-pt/arrays.xml
index 0cb0d0c..e4e6c5e 100644
--- a/res/values-pt/arrays.xml
+++ b/res/values-pt/arrays.xml
@@ -205,6 +205,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 a9da1d2..352ce2f 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-ro/arrays.xml b/res/values-ro/arrays.xml
index f12e145..f59a721 100644
--- a/res/values-ro/arrays.xml
+++ b/res/values-ro/arrays.xml
@@ -205,6 +205,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 fb349c2..c1a55e8 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -4755,4 +4755,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml
index ac5e085..c8cecdf 100644
--- a/res/values-ru/arrays.xml
+++ b/res/values-ru/arrays.xml
@@ -205,6 +205,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 6bdd49a..a28ebda 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -4840,4 +4840,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Отзывы по оборудованию</string>
+    <string name="qtifeedback_settings_subtitle"> Отчеты Qualcomm Technologies, Inc</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-si/arrays.xml b/res/values-si/arrays.xml
index 67c9a97..19c4fc9 100644
--- a/res/values-si/arrays.xml
+++ b/res/values-si/arrays.xml
@@ -205,6 +205,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 7bf66d8..b421882 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-sk/arrays.xml b/res/values-sk/arrays.xml
index 639e8fa..7d5ab1e 100644
--- a/res/values-sk/arrays.xml
+++ b/res/values-sk/arrays.xml
@@ -205,6 +205,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 1fc91c9..8bbf3cf 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -4840,4 +4840,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Spätná väzba k hardvéru</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Nahlasovanie</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-sl/arrays.xml b/res/values-sl/arrays.xml
index 31ff81f..63dc3fb 100644
--- a/res/values-sl/arrays.xml
+++ b/res/values-sl/arrays.xml
@@ -205,6 +205,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 edaf7db..c995d4c 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -4840,4 +4840,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Povratne informacije o strojni opremi</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Poročilo</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-sq/arrays.xml b/res/values-sq/arrays.xml
index 5a9fde5..0187eb7 100644
--- a/res/values-sq/arrays.xml
+++ b/res/values-sq/arrays.xml
@@ -205,6 +205,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-sr/arrays.xml b/res/values-sr/arrays.xml
index 1c975e0..2ce0712 100644
--- a/res/values-sr/arrays.xml
+++ b/res/values-sr/arrays.xml
@@ -205,6 +205,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 c48f039..338955d 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -4755,4 +4755,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-sv/arrays.xml b/res/values-sv/arrays.xml
index 00c54a0..fe87e7e 100644
--- a/res/values-sv/arrays.xml
+++ b/res/values-sv/arrays.xml
@@ -205,6 +205,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 8176671..24d2ce9 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -4670,4 +4670,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-sw/arrays.xml b/res/values-sw/arrays.xml
index 6eed660..0a8ba78 100644
--- a/res/values-sw/arrays.xml
+++ b/res/values-sw/arrays.xml
@@ -205,6 +205,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 1d99b33..146c99a 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -4671,4 +4671,8 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-ta/arrays.xml b/res/values-ta/arrays.xml
index 9135fff..d960c13 100644
--- a/res/values-ta/arrays.xml
+++ b/res/values-ta/arrays.xml
@@ -205,6 +205,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 f8b86ac..a94202d 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">வன்பொருள் பின்னூட்டம்</string>
+    <string name="qtifeedback_settings_subtitle"> Qualcomm Technologies, Inc அறிக்கையிடுதல்</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-te/arrays.xml b/res/values-te/arrays.xml
index 7c92706..43444cc 100644
--- a/res/values-te/arrays.xml
+++ b/res/values-te/arrays.xml
@@ -205,6 +205,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 70f33c9..d2a4cfe 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -4672,4 +4672,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">హార్డ్‌వేర్ అభిప్రాయం</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc నివేదించడం</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-th/arrays.xml b/res/values-th/arrays.xml
index 33fbe3b..51c69d8 100644
--- a/res/values-th/arrays.xml
+++ b/res/values-th/arrays.xml
@@ -205,6 +205,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 f90244d..b161daa 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">ความคิดเห็นเกี่ยวกับฮาร์ดแวร์</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc การรายงาน</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-tl/arrays.xml b/res/values-tl/arrays.xml
index 3d439a6..e31482b 100644
--- a/res/values-tl/arrays.xml
+++ b/res/values-tl/arrays.xml
@@ -205,6 +205,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-tr/arrays.xml b/res/values-tr/arrays.xml
index 080847c..a8e05a4 100644
--- a/res/values-tr/arrays.xml
+++ b/res/values-tr/arrays.xml
@@ -205,6 +205,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 fe163eb..74e7ab4 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Donanım Geri Bildirimi</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Raporlama</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml
index 850a400..02f209e 100644
--- a/res/values-uk/arrays.xml
+++ b/res/values-uk/arrays.xml
@@ -205,6 +205,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 d63d9cb..7b67b66 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -4840,4 +4840,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Відгук про обладнання</string>
+    <string name="qtifeedback_settings_subtitle">Надсилання звітів Qualcomm Technologies, Inc</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-ur/arrays.xml b/res/values-ur/arrays.xml
index 8b13cf9..2e24d85 100644
--- a/res/values-ur/arrays.xml
+++ b/res/values-ur/arrays.xml
@@ -205,6 +205,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-uz/arrays.xml b/res/values-uz/arrays.xml
index abe944c..c25bdc2 100644
--- a/res/values-uz/arrays.xml
+++ b/res/values-uz/arrays.xml
@@ -205,6 +205,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 f7638e1..55e462d 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -4684,4 +4684,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">Apparat vositalari javobi</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc Hisobot berish</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-vi/arrays.xml b/res/values-vi/arrays.xml
index e54b3bc..9f78e8a 100644
--- a/res/values-vi/arrays.xml
+++ b/res/values-vi/arrays.xml
@@ -205,6 +205,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 f6b574c..0e04589 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <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>
\ No newline at end of file
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
index fffcf47..4fdf8d7 100644
--- a/res/values-zh-rCN/arrays.xml
+++ b/res/values-zh-rCN/arrays.xml
@@ -205,6 +205,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 53a1f7a..fa9d33c 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -3226,6 +3226,7 @@
     <string name="vibrate_when_ringing_title" msgid="3436203665622843196">"有来电时振动"</string>
     <string name="other_sound_settings" msgid="5468360269346162072">"其他提示音"</string>
     <string name="dial_pad_tones_title" msgid="3536945335367914892">"拨号键盘提示音"</string>
+    <string name="call_connected_tones_title" msgid="1999293510400911558">"通话接通提示音"</string>
     <string name="screen_locking_sounds_title" msgid="1502654020775767536">"屏幕锁定提示音"</string>
     <string name="charging_sounds_title" msgid="5261683808537783668">"充电提示音和振动"</string>
     <string name="docking_sounds_title" msgid="5341616179210436159">"基座提示音"</string>
@@ -4417,6 +4418,29 @@
     <!-- no translation found for game_driver_app_preference_values:0 (2432393448266016546) -->
     <!-- no translation found for game_driver_app_preference_values:1 (398843973192851256) -->
     <!-- no translation found for game_driver_app_preference_values:2 (8840726898745627072) -->
+    <string name="gup_dashboard_title" msgid="6365053025908111197">"游戏更新软件包偏好设置"</string>
+    <string name="gup_dashboard_summary" msgid="7454221684538769577">"修改游戏更新软件包的设置"</string>
+    <string name="gup_all_apps_switch_title" msgid="8071650410524064369">"针对所有应用启用"</string>
+    <string name="gup_app_preference_title" msgid="7176388161899486800">"选择图形驱动程序"</string>
+    <string name="gup_app_preference_default" msgid="7995039180348956109">"默认"</string>
+    <string name="gup_app_preference_gup" msgid="5605778469372613985">"游戏更新软件包"</string>
+    <string name="gup_app_preference_system" msgid="5701853677984004799">"系统图形驱动程序"</string>
+    <!-- no translation found for gup_app_preference_values:0 (8465947040872291983) -->
+    <!-- no translation found for gup_app_preference_values:1 (2528348813076808406) -->
+    <!-- no translation found for gup_app_preference_values:2 (1224045073126150618) -->
+    <!-- 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="directory_on_volume" msgid="1246959267814974387">"<xliff:g id="VOLUME">%1$s</xliff:g>(<xliff:g id="DIRECTORY">%2$s</xliff:g>)"</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>
@@ -4670,4 +4694,10 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></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>
 </resources>
diff --git a/res/values-zh-rHK/arrays.xml b/res/values-zh-rHK/arrays.xml
index 7055620..44d2fbe 100644
--- a/res/values-zh-rHK/arrays.xml
+++ b/res/values-zh-rHK/arrays.xml
@@ -205,6 +205,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 66748c7..d28d003 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -4671,4 +4671,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">硬件反饋</string>
+    <string name="qtifeedback_settings_subtitle">Qualcomm Technologies, Inc 報告</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
index 2dd50e6..5a253fc 100644
--- a/res/values-zh-rTW/arrays.xml
+++ b/res/values-zh-rTW/arrays.xml
@@ -205,6 +205,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 d8f76de..16623d7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -4670,4 +4670,6 @@
     <string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
     <string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
     <string name="rtt_settings_always_visible" msgid="2364173070088756238"></string>
-</resources>
+    <string name="qtifeedback_settings_title">硬體使用情況回報</string>
+    <string name="qtifeedback_settings_subtitle"> Qualcomm Technologies, Inc 報告</string>
+</resources>
\ No newline at end of file
diff --git a/res/values-zu/arrays.xml b/res/values-zu/arrays.xml
index 9a31ab4..2b52120 100644
--- a/res/values-zu/arrays.xml
+++ b/res/values-zu/arrays.xml
@@ -205,6 +205,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/arrays.xml b/res/values/arrays.xml
index 09447b9..e93babb 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -266,6 +266,20 @@
         <item>@string/wifi_ap_choose_5G</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>0</item>
+        <item>1</item>
+        <item>2</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_choose_5G</item>
+        <item>@string/wifi_ap_choose_vendor_both</item>
+    </string-array>
+
     <string-array translatable="false" name="wifi_ap_band_dual_mode">
         <item>0</item>
         <item>-1</item>
@@ -505,6 +519,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">
@@ -516,6 +531,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 -->
@@ -1390,12 +1407,29 @@
          <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 -->
diff --git a/res/values/config.xml b/res/values/config.xml
index 0f03c23..2ea14a6 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -406,6 +406,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>
 
@@ -416,7 +422,7 @@
     <string-array name="config_suppress_injected_tile_keys" translatable="false"/>
 
     <!-- "Show work policy info" intent action. TODO(b/134391103): Replace with final SystemAPI intent when it's available. -->
-    <string name="config_work_policy_info_intent_action" translatable="false"/>
+    <string name="config_work_policy_info_intent_action" translatable="false">com.google.android.settings.privacy.ACTION_SHOW_WORK_POLICY_INFO</string>
 
     <!-- RTT setting intent action -->
     <string name="config_rtt_setting_intent_action" translatable="false"></string>
@@ -431,4 +437,8 @@
         <item>com.android.systemui</item>
         <item>com.android.vending</item>
     </string-array>
+    
+        <!-- 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 deea388..4857a85 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -418,6 +418,8 @@
     <string name="connected_device_connected_title">Currently connected</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]-->
@@ -1884,6 +1886,8 @@
 
     <!-- Wifi Display settings. The title of the screen. [CHAR LIMIT=40] -->
     <string name="wifi_display_settings_title">Cast</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]-->
@@ -1930,6 +1934,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>
     <!-- Wifi Sign in CTA for wifi settings when captive portal auth is required [CHAR LIMIT = 50] -->
@@ -2178,6 +2184,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_both">Both</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 -->
@@ -2607,28 +2615,62 @@
         <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>
@@ -2636,6 +2678,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>
@@ -7567,6 +7611,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 sounds</string>
 
@@ -10707,6 +10754,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] -->
@@ -11223,6 +11283,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>
+
     <!-- Used for EmergencyInfoSlice slice helper class [CHAR LIMIT=NONE]-->
     <string name="emergency_info_contextual_card_summary">Medical info, emergency contacts</string>
 
@@ -11300,6 +11367,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] -->
@@ -11368,6 +11437,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>
 
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index 7acdc79..da55fe3 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -36,6 +36,11 @@
         android:title="@string/connected_device_connected_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 7cf52fa..2a6433a 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -243,6 +243,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" />
@@ -253,6 +258,16 @@
             android:summary="@string/wifi_scan_throttling_summary" />
 
         <SwitchPreference
+            android:key="wifi_whitelist_roaming"
+            android:title="@string/wifi_whitelist_roaming"
+            android:summary="@string/wifi_whitelist_roaming_summary" />
+
+        <SwitchPreference
+            android:key="wifi_unsaved_network_linking"
+            android:title="@string/wifi_unsaved_network_linking"
+            android:summary="@string/wifi_unsaved_network_linking_summary" />
+
+        <SwitchPreference
             android:key="mobile_data_always_on"
             android:title="@string/mobile_data_always_on"
             android:summary="@string/mobile_data_always_on_summary" />
diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml
index 136e6ab..0f31cb8 100644
--- a/res/xml/location_settings.xml
+++ b/res/xml/location_settings.xml
@@ -31,6 +31,11 @@
             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"/>
         <PreferenceCategory
             android:key="location_advanced_settings"
             android:layout="@layout/preference_category_no_label"
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index 9a6047c..ce7dacb 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -192,4 +192,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/network_and_internet.xml b/res/xml/network_and_internet.xml
index 32b51d4..2ea279b 100644
--- a/res/xml/network_and_internet.xml
+++ b/res/xml/network_and_internet.xml
@@ -44,6 +44,13 @@
         settings:useAdminDisabledSummary="true">
     </com.android.settingslib.RestrictedPreference>
 
+    <com.android.settings.datausage.DataSaverPreference
+        android:key="restrict_background_parent_entry"
+        android:title="@string/data_saver_title"
+        android:icon="@drawable/ic_settings_data_usage"
+        android:order="-10"
+        android:fragment="com.android.settings.datausage.DataSaverSummary"/>
+
     <com.android.settingslib.RestrictedPreference
         android:fragment="com.android.settings.TetherSettings"
         android:key="tether_settings"
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 d99cc00..8a58706 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -152,6 +152,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/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 605f483..da32c44 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -52,6 +52,7 @@
 import androidx.preference.SwitchPreference;
 
 import com.android.internal.telephony.CommandException;
+import com.android.internal.telephony.IccCardConstants.State;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.TelephonyIntents;
@@ -265,12 +266,24 @@
     }
 
     private void updatePreferences() {
+        boolean pinToggleState = false;
+        boolean pinDialogState = false;
+
+        if (mPhone != null) {
+            State cardState = mPhone.getIccCard().getState();
+            if (cardState == State.READY || cardState == State.LOADED) {
+                // if SIM State is NOT READY, it is not possible to interact with UICC app
+                // for enabling/disabling PIN so greyout PIN options.
+                pinToggleState = true;
+                pinDialogState = true;
+            }
+        }
+
         if (mPinDialog != null) {
-            mPinDialog.setEnabled(mPhone != null);
+            mPinDialog.setEnabled(pinDialogState);
         }
         if (mPinToggle != null) {
-            mPinToggle.setEnabled(mPhone != null);
-
+            mPinToggle.setEnabled(pinToggleState);
             if (mPhone != null) {
                 mPinToggle.setChecked(mPhone.getIccCard().getIccLockEnabled());
             }
diff --git a/src/com/android/settings/ResetNetworkConfirm.java b/src/com/android/settings/ResetNetworkConfirm.java
index beb0528..9b5f972 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,7 +46,6 @@
 import android.widget.Toast;
 
 import androidx.annotation.VisibleForTesting;
-import androidx.appcompat.app.AlertDialog;
 
 import com.android.ims.ImsManager;
 import com.android.internal.telephony.PhoneConstants;
@@ -53,6 +53,8 @@
 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"
@@ -122,6 +124,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 e63edd7..f31783f 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -177,5 +177,7 @@
     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 */ }
 
 }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 3b01b32..11214ab 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -30,6 +30,8 @@
 import android.content.res.Resources.Theme;
 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;
@@ -58,6 +60,7 @@
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.homepage.TopLevelSettings;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.sim.SimSettings;
 import com.android.settings.wfd.WifiDisplaySettings;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.core.instrumentation.Instrumentable;
@@ -70,6 +73,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.codeaurora.internal.IExtTelephony;
+
 
 public class SettingsActivity extends SettingsBaseActivity
         implements PreferenceManager.OnPreferenceTreeClickListener,
@@ -143,6 +148,7 @@
 
     private CharSequence mInitialTitle;
     private int mInitialTitleResId;
+    private SmqSettings mSMQ;
 
     private BroadcastReceiver mDevelopmentSettingsListener;
 
@@ -231,6 +237,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);
 
@@ -550,7 +558,35 @@
      */
     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);
+        IExtTelephony extTelephony =
+                IExtTelephony.Stub.asInterface(ServiceManager.getService("extphone"));
+        try {
+            if (fragmentName.equals(SimSettings.class.getName()) && extTelephony != null &&
+                    extTelephony.isVendorApkAvailable("com.qualcomm.qti.simsettings")) {
+                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;
+            }
+        } catch (RemoteException e) {
+            // could not connect to extphone service, launch the default activity
+            Log.i(LOG_TAG,
+                    "couldn't connect to extphone service, launch the default sim cards activity");
+        }
+
         if (validate && !isValidFragment(fragmentName)) {
             throw new IllegalArgumentException("Invalid fragment for this activity: "
                     + fragmentName);
@@ -597,6 +633,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,
@@ -611,6 +651,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 20b6e2f..c3a18d8
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -136,7 +136,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);
         }
@@ -228,12 +228,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:
@@ -244,7 +252,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
old mode 100644
new mode 100755
index c4b1400..947a74a
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -44,6 +44,7 @@
 import android.content.pm.UserInfo;
 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;
@@ -74,6 +75,8 @@
 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;
@@ -111,6 +114,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";
@@ -124,6 +129,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.
      */
@@ -131,6 +144,11 @@
             "device_identifier_access_restrictions_disabled";
 
     /**
+     * An int extra specifying a slot ID.
+     */
+    public static final String EXTRA_SLOT_ID = "slot_id";
+
+    /**
      * Finds a matching activity for a preference's intent. If a matching
      * activity is not found, it will remove the preference.
      *
@@ -1018,6 +1036,74 @@
         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;
+     }
+
+    /**
+     * 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("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 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/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 971c6f5..2f6296e 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -508,7 +508,9 @@
         outState.putBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
         outState.putBoolean(EXTRA_HAS_ENTRIES, mApplications.mHasReceivedLoadEntries);
         outState.putBoolean(EXTRA_HAS_BRIDGE, mApplications.mHasReceivedBridgeCallback);
-        outState.putBoolean(EXTRA_EXPAND_SEARCH_VIEW, !mSearchView.isIconified());
+        if (null != mSearchView) {
+            outState.putBoolean(EXTRA_EXPAND_SEARCH_VIEW, !mSearchView.isIconified());
+        }
         outState.putInt(EXTRA_FILTER_TYPE, mFilter.getFilterType());
         if (mApplications != null) {
             mApplications.onSaveInstanceState(outState);
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 94bdfe8..95d59fc 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 6381b84..827155c 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");
@@ -44,9 +77,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..d1773a9
--- /dev/null
+++ b/src/com/android/settings/bluetooth/SavedBluetoothTwsDeviceUpdater.java
@@ -0,0 +1,83 @@
+/*
+ *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 {
+
+    public SavedBluetoothTwsDeviceUpdater(Context context, DashboardFragment fragment,
+            DevicePreferenceCallback devicePreferenceCallback) {
+        super(context, fragment, devicePreferenceCallback);
+    }
+
+    SavedBluetoothTwsDeviceUpdater(DashboardFragment fragment,
+            DevicePreferenceCallback devicePreferenceCallback,
+            LocalBluetoothManager localBluetoothManager) {
+        super(fragment, devicePreferenceCallback, localBluetoothManager);
+    }
+
+    @Override
+    public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) {
+        final BluetoothDevice device = cachedDevice.getDevice();
+        return device.getBondState() == BluetoothDevice.BOND_BONDED &&
+            !device.isConnected() && device.isTwsPlusDevice();
+    }
+}
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index cbabb06..db9eb02 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");
@@ -92,6 +125,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(DiscoverableFooterPreferenceController.class).init(this);
         use(SlicePreferenceController.class).setSliceUri(nearbyEnabled
diff --git a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
index 5b23d69..b74c79d 100644
--- a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
+++ b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
@@ -22,7 +22,13 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
+import android.bluetooth.BluetoothAdapter;
 
+import com.android.settingslib.bluetooth.BluetoothCallback;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settings.bluetooth.Utils;
 import com.android.settings.bluetooth.BluetoothDeviceUpdater;
 import com.android.settings.bluetooth.SavedBluetoothDeviceUpdater;
 import com.android.settings.connecteddevice.dock.DockUpdater;
@@ -34,11 +40,13 @@
 import com.android.settingslib.core.lifecycle.events.OnStop;
 
 public class PreviouslyConnectedDevicePreferenceController extends BasePreferenceController
-        implements LifecycleObserver, OnStart, OnStop, DevicePreferenceCallback {
+        implements LifecycleObserver, OnStart, OnStop, DevicePreferenceCallback, BluetoothCallback {
 
     private static final int MAX_DEVICE_NUM = 3;
 
     private PreferenceGroup mPreferenceGroup;
+    private LocalBluetoothAdapter mLocalAdapter;
+    private LocalBluetoothManager manager;
     private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
     private DockUpdater mSavedDockUpdater;
     private int mPreferenceSize;
@@ -48,6 +56,10 @@
 
         mSavedDockUpdater = FeatureFactory.getFactory(
                 context).getDockUpdaterFeatureProvider().getSavedDockUpdater(context, this);
+        manager = Utils.getLocalBtManager(context);
+         if ( manager != null) {
+           mLocalAdapter = manager.getBluetoothAdapter();
+         }
     }
 
     @Override
@@ -75,12 +87,15 @@
     public void onStart() {
         mBluetoothDeviceUpdater.registerCallback();
         mSavedDockUpdater.registerCallback();
+        manager.getEventManager().registerCallback(this);
     }
 
     @Override
     public void onStop() {
         mBluetoothDeviceUpdater.unregisterCallback();
         mSavedDockUpdater.unregisterCallback();
+        manager.getEventManager().unregisterCallback(this);
+
     }
 
     public void init(DashboardFragment fragment) {
@@ -104,6 +119,46 @@
         updatePreferenceVisiblity();
     }
 
+    @Override
+    public void onBluetoothStateChanged(int bluetoothState) {
+        updatePreferenceVisiblity();
+    }
+
+    @Override
+    public void onScanningStateChanged(boolean started) {
+        // do nothing
+    }
+
+    @Override
+    public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
+       // do nothing
+    }
+
+    @Override
+    public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {
+        // do nothing
+    }
+
+    @Override
+    public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
+        // do nothing
+    }
+
+    @Override
+    public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
+        // do nothing
+    }
+
+    @Override
+    public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {
+        // do nothing
+    }
+
+    @Override
+    public void onAudioModeChanged() {
+       // do nothing
+    }
+
     @VisibleForTesting
     void setBluetoothDeviceUpdater(BluetoothDeviceUpdater bluetoothDeviceUpdater) {
         mBluetoothDeviceUpdater = bluetoothDeviceUpdater;
@@ -121,6 +176,12 @@
 
     @VisibleForTesting
     void updatePreferenceVisiblity() {
-        mPreferenceGroup.setVisible(mPreferenceSize > 0);
+        if ((mLocalAdapter != null) &&
+          (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_ON)) {
+            mPreferenceGroup.setVisible(mPreferenceSize > 0);
+        } else {
+            mPreferenceGroup.setVisible(false);
+        }
     }
+
 }
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 fd03697..16bca66 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -304,6 +304,7 @@
             // Home page > Network & Internet
             Settings.WifiSettingsActivity.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/CellDataPreference.java b/src/com/android/settings/datausage/CellDataPreference.java
index af7e16e..b0cd87e 100644
--- a/src/com/android/settings/datausage/CellDataPreference.java
+++ b/src/com/android/settings/datausage/CellDataPreference.java
@@ -51,7 +51,6 @@
 
     public int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     public boolean mChecked;
-    public boolean mMultiSimDialog;
     private TelephonyManager mTelephonyManager;
     @VisibleForTesting
     SubscriptionManager mSubscriptionManager;
@@ -68,7 +67,6 @@
         super.onRestoreInstanceState(state.getSuperState());
         mTelephonyManager = TelephonyManager.from(getContext());
         mChecked = state.mChecked;
-        mMultiSimDialog = state.mMultiSimDialog;
         if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
             mSubId = state.mSubId;
             setKey(getKey() + mSubId);
@@ -80,7 +78,6 @@
     protected Parcelable onSaveInstanceState() {
         CellDataState state = new CellDataState(super.onSaveInstanceState());
         state.mChecked = mChecked;
-        state.mMultiSimDialog = mMultiSimDialog;
         state.mSubId = mSubId;
         return state;
     }
@@ -135,42 +132,16 @@
     @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 = mSubscriptionManager.getActiveSubscriptionInfo(
                 mSubId);
         final SubscriptionInfo nextSir = mSubscriptionManager.getDefaultDataSubscriptionInfo();
         if (mChecked) {
-            // If the device is single SIM or is enabling data on the active data SIM then forgo
-            // the pop-up.
-            if (!Utils.showSimCardTile(getContext()) ||
-                    (nextSir != null && currentSir != null &&
-                            currentSir.getSubscriptionId() == nextSir.getSubscriptionId())) {
-                setMobileDataEnabled(false);
-                if (nextSir != null && currentSir != null &&
-                        currentSir.getSubscriptionId() == nextSir.getSubscriptionId()) {
-                    disableDataForOtherSubscriptions(mSubId);
-                }
-                return;
-            }
-            // disabling data; show confirmation dialog which eventually
-            // calls setMobileDataEnabled() once user confirms.
-            mMultiSimDialog = false;
             super.performClick(view);
         } else {
-            // If we are showing the Sim Card tile then we are a Multi-Sim device.
-            if (Utils.showSimCardTile(getContext())) {
-                mMultiSimDialog = true;
-                if (nextSir != null && currentSir != null &&
-                        currentSir.getSubscriptionId() == nextSir.getSubscriptionId()) {
-                    setMobileDataEnabled(true);
-                    disableDataForOtherSubscriptions(mSubId);
-                    return;
-                }
-                super.performClick(view);
-            } else {
-                setMobileDataEnabled(true);
-            }
+            setMobileDataEnabled(true);
         }
     }
 
@@ -198,11 +169,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,
@@ -213,6 +180,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 = mSubscriptionManager.getActiveSubscriptionInfo(mSubId);
@@ -248,14 +216,8 @@
         if (which != DialogInterface.BUTTON_POSITIVE) {
             return;
         }
-        if (mMultiSimDialog) {
-            mSubscriptionManager.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
@@ -298,7 +260,6 @@
     public static class CellDataState extends BaseSavedState {
         public int mSubId;
         public boolean mChecked;
-        public boolean mMultiSimDialog;
 
         public CellDataState(Parcelable base) {
             super(base);
@@ -307,7 +268,6 @@
         public CellDataState(Parcel source) {
             super(source);
             mChecked = source.readByte() != 0;
-            mMultiSimDialog = source.readByte() != 0;
             mSubId = source.readInt();
         }
 
@@ -315,7 +275,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 6597ecb..911ed55 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -28,6 +28,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;
@@ -94,7 +95,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 (DataUsageUtils.hasSim(context) && hasWifiRadio) {
                 // If the device has a SIM installed, 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/BluetoothAudioCodecPreferenceController.java b/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java
index b5c40a3..a7fb255 100644
--- a/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java
+++ b/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java
@@ -82,6 +82,12 @@
                     case 5:
                         codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
                         break;
+                    case 6:
+                        codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_ADAPTIVE;
+                        break;
+                    case 7:
+                        codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_TWSP;
+                        break;
                     default:
                         break;
                 }
@@ -107,13 +113,21 @@
                 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;
+            case 8:
                 synchronized (mBluetoothA2dpConfigStore) {
                     if (mBluetoothA2dp != null) {
                         mBluetoothA2dp.enableOptionalCodecs(null); // Use current active device
                     }
                 }
                 return;
-            case 7:
+            case 9:
                 synchronized (mBluetoothA2dpConfigStore) {
                     if (mBluetoothA2dp != null) {
                         mBluetoothA2dp.disableOptionalCodecs(null); // Use current active device
@@ -147,6 +161,12 @@
             case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
                 index = 5;
                 break;
+            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_ADAPTIVE:
+                index = 6;
+                break;
+            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_TWSP:
+                index = 7;
+                break;
             case BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID:
             default:
                 break;
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 f384d85..8e1c37a 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -431,8 +431,11 @@
         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 WifiWhitelistRoamingPreferenceController(context));
+        controllers.add(new WifiUnsavedNetworkLinkingPreferenceController(context));
         controllers.add(new MobileDataAlwaysOnPreferenceController(context));
         controllers.add(new TetheringHardwareAccelPreferenceController(context));
         controllers.add(new BluetoothDeviceNoNamePreferenceController(context));
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/WifiUnsavedNetworkLinkingPreferenceController.java b/src/com/android/settings/development/WifiUnsavedNetworkLinkingPreferenceController.java
new file mode 100644
index 0000000..2e33e2b
--- /dev/null
+++ b/src/com/android/settings/development/WifiUnsavedNetworkLinkingPreferenceController.java
@@ -0,0 +1,79 @@
+/*
+ * 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.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 WifiUnsavedNetworkLinkingPreferenceController extends DeveloperOptionsPreferenceController
+        implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+
+    private static final String WIFI_UNSAVED_NETWORK_LINKING_KEY = "wifi_unsaved_network_linking";
+
+    private final WifiManager mWifiManager;
+
+    public WifiUnsavedNetworkLinkingPreferenceController(Context context) {
+        super(context);
+
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return WIFI_UNSAVED_NETWORK_LINKING_KEY;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        final boolean isEnabled = (Boolean) newValue;
+        mWifiManager.enableUnsavedNetworkLinkingFeature(isEnabled);
+        return true;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        final boolean enabled = mWifiManager.isUnsavedNetworkLinkingFeatureEnabled();
+        ((SwitchPreference) mPreference).setChecked(enabled);
+
+    }
+
+    @Override
+    protected void onDeveloperOptionsSwitchDisabled() {
+        super.onDeveloperOptionsSwitchDisabled();
+        mWifiManager.enableUnsavedNetworkLinkingFeature(false);
+        ((SwitchPreference) mPreference).setChecked(false);
+    }
+}
diff --git a/src/com/android/settings/development/WifiWhitelistRoamingPreferenceController.java b/src/com/android/settings/development/WifiWhitelistRoamingPreferenceController.java
new file mode 100644
index 0000000..6867ec1
--- /dev/null
+++ b/src/com/android/settings/development/WifiWhitelistRoamingPreferenceController.java
@@ -0,0 +1,79 @@
+/*
+ * 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.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 WifiWhitelistRoamingPreferenceController extends DeveloperOptionsPreferenceController
+        implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+
+    private static final String WIFI_WHITELIST_ROAMING_KEY = "wifi_whitelist_roaming";
+
+    private final WifiManager mWifiManager;
+
+    public WifiWhitelistRoamingPreferenceController(Context context) {
+        super(context);
+
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return WIFI_WHITELIST_ROAMING_KEY;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        final boolean isEnabled = (Boolean) newValue;
+        mWifiManager.enableWhitelistNetworkRoamingFeature(isEnabled);
+        return true;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        final boolean enabled = mWifiManager.isWhitelistNetworkRoamingFeatureEnabled();
+        ((SwitchPreference) mPreference).setChecked(enabled);
+
+    }
+
+    @Override
+    protected void onDeveloperOptionsSwitchDisabled() {
+        super.onDeveloperOptionsSwitchDisabled();
+        mWifiManager.enableWhitelistNetworkRoamingFeature(false);
+        ((SwitchPreference) mPreference).setChecked(false);
+    }
+}
diff --git a/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java b/src/com/android/settings/deviceinfo/DeviceNamePreferenceController.java
index fb20a2e..96682cb 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 29f1391..a01669b 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 e6afb7b..10cc300 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -38,6 +38,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;
@@ -115,6 +117,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 e7f6423..8560951 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;
 
@@ -58,6 +59,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/ImeiInfoDialogController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
index 9ab21de..80b2a05 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
@@ -106,7 +106,8 @@
 
     private void updateDialogForCdmaPhone() {
         final Resources res = mDialog.getContext().getResources();
-        mDialog.setText(ID_MEID_NUMBER_VALUE, getMeid());
+        mDialog.setText(ID_MEID_NUMBER_VALUE,
+                mSubscriptionInfo != null ? getMeid() : "");
         // MIN needs to read from SIM. So if no SIM, we should not show MIN on UI
         mDialog.setText(ID_MIN_NUMBER_VALUE, mSubscriptionInfo != null
                 ? mTelephonyManager.getCdmaMin(mSubscriptionInfo.getSubscriptionId())
@@ -133,9 +134,13 @@
     }
 
     private void updateDialogForGsmPhone() {
-        mDialog.setText(ID_IMEI_VALUE, getTextAsDigits(mTelephonyManager.getImei(mSlotId)));
+        mDialog.setText(ID_IMEI_VALUE,
+                mSubscriptionInfo != null ?
+                getTextAsDigits(mTelephonyManager.getImei(mSlotId)) : "");
         mDialog.setText(ID_IMEI_SV_VALUE,
-                getTextAsDigits(mTelephonyManager.getDeviceSoftwareVersion(mSlotId)));
+                mSubscriptionInfo != null ?
+                getTextAsDigits(mTelephonyManager.
+                        getDeviceSoftwareVersion(mSlotId)) : "");
         // device is not CDMA, do not display CDMA features
         mDialog.removeViewFromScreen(ID_CDMA_SETTINGS);
     }
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 3459b5c..292c27f
--- 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;
     }
@@ -160,6 +217,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/location/AgpsPreferenceController.java b/src/com/android/settings/location/AgpsPreferenceController.java
new file mode 100755
index 0000000..0ef073f
--- /dev/null
+++ b/src/com/android/settings/location/AgpsPreferenceController.java
@@ -0,0 +1,77 @@
+/*
+ * 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 BasePreferenceController {
+    private static final String KEY_ASSISTED_GPS = "assisted_gps";
+
+    private CheckBoxPreference mAgpsPreference;
+
+    public AgpsPreferenceController(Context context) {
+        super(context, KEY_ASSISTED_GPS);
+    }
+
+    @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;
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/location/AppSettingsInjector.java b/src/com/android/settings/location/AppSettingsInjector.java
index 8120821..2265e7f 100644
--- a/src/com/android/settings/location/AppSettingsInjector.java
+++ b/src/com/android/settings/location/AppSettingsInjector.java
@@ -18,9 +18,19 @@
 
 import android.content.Context;
 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.widget.RestrictedAppPreference;
 import com.android.settingslib.location.InjectedSetting;
 import com.android.settingslib.location.SettingsInjector;
@@ -35,10 +45,29 @@
         super(context);
     }
 
+    /**
+     * 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);
     }
 }
diff --git a/src/com/android/settings/location/DimmableIZatIconPreference.java b/src/com/android/settings/location/DimmableIZatIconPreference.java
new file mode 100644
index 0000000..8166ec0
--- /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/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 7142486..ba05cb4 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -122,6 +122,7 @@
         controllers.add(new LocationScanningPreferenceController(context));
         controllers.add(new LocationServicePreferenceController(context, fragment, lifecycle));
         controllers.add(new LocationFooterPreferenceController(context, lifecycle));
+        controllers.add(new AgpsPreferenceController(context));
         return controllers;
     }
 
diff --git a/src/com/android/settings/network/ApnEditor.java b/src/com/android/settings/network/ApnEditor.java
index 1451a40..fae43c0 100644
--- a/src/com/android/settings/network/ApnEditor.java
+++ b/src/com/android/settings/network/ApnEditor.java
@@ -56,6 +56,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;
@@ -143,6 +144,8 @@
     private boolean mReadOnlyApn;
     private Uri mCarrierUri;
 
+    private static final String APN_DEFALUT_VALUES_STRING_ARRAY = "apn_default_values_strings_array";
+
     /**
      * Standard projection for the interesting columns of a normal note.
      */
@@ -174,6 +177,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;
@@ -298,6 +321,9 @@
             mApnData = getApnDataFromUri(uri);
         } else {
             mApnData = new ApnData(sProjection.length);
+            if (action.equals(Intent.ACTION_INSERT)) {
+                setDefaultData();
+            }
         }
 
         mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
@@ -569,6 +595,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()));
@@ -677,6 +707,11 @@
                     mMvnoMatchData.setText(numeric + "x");
                 } else if (values[mvnoIndex].equals("GID")) {
                     mMvnoMatchData.setText(mTelephonyManager.getGroupIdLevel1());
+                } else if (values[mvnoIndex].equals("ICCID")) {
+                    if (mMvnoMatchDataStr != null) {
+                        Log.d(TAG, "mMvnoMatchDataStr: " + mMvnoMatchDataStr);
+                        mMvnoMatchData.setText(mMvnoMatchDataStr);
+                    }
                 }
             }
 
@@ -1159,6 +1194,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"
@@ -1303,5 +1383,9 @@
         String getString(int index) {
             return (String) mData[index];
         }
+
+        void setObject(int index, Object value) {
+            mData[index] = value;
+        }
     }
 }
diff --git a/src/com/android/settings/network/ApnPreference.java b/src/com/android/settings/network/ApnPreference.java
index f039539..1d45efa 100755
--- a/src/com/android/settings/network/ApnPreference.java
+++ b/src/com/android/settings/network/ApnPreference.java
@@ -91,6 +91,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 f0603bb..b8261a1 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;
@@ -38,6 +39,7 @@
 import android.os.UserManager;
 import android.provider.Telephony;
 import android.telephony.CarrierConfigManager;
+import android.telephony.ServiceState;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -51,15 +53,20 @@
 
 import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
-
+import com.android.ims.ImsManager;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.uicc.UiccController;
 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 {
@@ -84,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;
@@ -93,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 +138,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);
     }
@@ -158,6 +179,12 @@
                     }
                     fillList();
                 }
+            } else if (intent.getAction().equals(ACTION_VOLTE_ENABLED_STATE_CHANGED)) {
+                if (!mRestoreDefaultApnMode) {
+                    fillList();
+                } else {
+                    showDialog(DIALOG_RESTORE_DEFAULTAPN);
+                }
             }
         }
     };
@@ -186,6 +213,9 @@
         mIntentFilter = new IntentFilter(
                 TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
         mIntentFilter.addAction(TelephonyManager.ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED);
+        if (Utils.isSupportCTPA(getActivity().getApplicationContext())) {
+            mIntentFilter.addAction(ACTION_VOLTE_ENABLED_STATE_CHANGED);
+        }
 
         setIfOnlyAvailableForAdmins(true);
 
@@ -197,6 +227,14 @@
         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) {
             String[] readOnlyApnTypes = b.getStringArray(
                     CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY);
@@ -283,10 +321,18 @@
         StringBuilder where = 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());
+
         Cursor cursor = getContentResolver().query(simApnUri,
                 CARRIERS_PROJECTION, where.toString(), null,
                 Telephony.Carriers.DEFAULT_SORT_ORDER);
@@ -299,6 +345,10 @@
             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()) {
                 String name = cursor.getString(NAME_INDEX);
@@ -309,6 +359,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;
+                    }
+                }
                 ApnPreference pref = new ApnPreference(getPrefContext());
 
                 pref.setKey(key);
@@ -323,6 +393,9 @@
                 }
 
                 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)) {
@@ -345,6 +418,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/MobileNetworkListController.java b/src/com/android/settings/network/MobileNetworkListController.java
index ab41fad..67dec82 100644
--- a/src/com/android/settings/network/MobileNetworkListController.java
+++ b/src/com/android/settings/network/MobileNetworkListController.java
@@ -19,15 +19,18 @@
 import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
 import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
 
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.util.ArrayMap;
+import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.network.telephony.MobileNetworkActivity;
 import com.android.settings.network.telephony.MobileNetworkUtils;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -127,8 +130,19 @@
                 if (!info.isEmbedded() && !mSubscriptionManager.isActiveSubscriptionId(subId)) {
                     mSubscriptionManager.setSubscriptionEnabled(subId, true);
                 } else {
-                    final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
-                    intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
+                    Intent intent;
+                    if (Utils.isNetworkSettingsApkAvailable()) {
+                        intent = new Intent(Intent.ACTION_MAIN);
+                        intent.setComponent(
+                                new ComponentName("com.qualcomm.qti.networksetting",
+                                "com.qualcomm.qti.networksetting.MobileNetworkSettings"));
+                        intent.putExtra(Utils.EXTRA_SLOT_ID, info.getSimSlotIndex());
+                        Log.d(TAG, "slot extra: " + info.getSimSlotIndex()
+                                + "name: " + info.getDisplayName());
+                    } else {
+                        intent = new Intent(mContext, MobileNetworkActivity.class);
+                        intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
+                    }
                     mContext.startActivity(intent);
                 }
                 return true;
diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java
index 646f10c..74a5247 100644
--- a/src/com/android/settings/network/MobileNetworkPreferenceController.java
+++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java
@@ -27,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 android.util.FeatureFlagUtils;
 
@@ -40,12 +42,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 {
 
@@ -62,9 +66,12 @@
     private Preference mPreference;
     @VisibleForTesting
     PhoneStateListener mPhoneStateListener;
+    private SubscriptionManager mSubscriptionManager;
 
     private BroadcastReceiver mAirplanModeChangedReceiver;
 
+    private CharSequence mSummary;
+
     public MobileNetworkPreferenceController(Context context) {
         super(context);
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
@@ -74,9 +81,11 @@
         mAirplanModeChangedReceiver = new BroadcastReceiver() {
             @Override
             public void onReceive(Context context, Intent intent) {
+                updateDisplayName();
                 updateState(mPreference);
             }
         };
+        mSubscriptionManager = SubscriptionManager.from(context);
     }
 
     @Override
@@ -105,11 +114,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);
                     }
                 };
@@ -122,11 +134,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 = MobileNetworkUtils.getCurrentCarrierNameForDisplay(mContext);
+            }
+        }
+    }
+
+    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);
         }
@@ -147,7 +201,13 @@
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
         if (KEY_MOBILE_NETWORK_SETTINGS.equals(preference.getKey())) {
-            if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.MOBILE_NETWORK_V2)) {
+            if (Utils.isNetworkSettingsApkAvailable()) {
+                final Intent intent = new Intent(Intent.ACTION_MAIN);
+                intent.setComponent(
+                        new ComponentName("com.qualcomm.qti.networksetting",
+                        "com.qualcomm.qti.networksetting.MobileNetworkSettings"));
+                mContext.startActivity(intent);
+            } else if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.MOBILE_NETWORK_V2)) {
                 final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
                 mContext.startActivity(intent);
             } else {
@@ -163,6 +223,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 0d4a6a6..64d1dc3 100644
--- a/src/com/android/settings/network/TetherPreferenceController.java
+++ b/src/com/android/settings/network/TetherPreferenceController.java
@@ -70,7 +70,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);
+                    }
                 }
             };
 
@@ -129,15 +133,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();
         }
@@ -152,6 +161,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);
         }
@@ -162,10 +175,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/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index 8d83ef2..9b5a89f 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -34,6 +34,7 @@
 
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.dashboard.RestrictedDashboardFragment;
 import com.android.settings.datausage.BillingCyclePreferenceController;
@@ -272,6 +273,11 @@
                 @Override
                 public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
                         boolean enabled) {
+                    if (Utils.isNetworkSettingsApkAvailable()) {
+                        Log.i(LOG_TAG, "Vendor network setting app is available, not indexing"
+                                + " MobileNetworkSettings from Settings app.");
+                        return null;
+                    }
                     final ArrayList<SearchIndexableResource> result = new ArrayList<>();
 
                     final SearchIndexableResource sir = new SearchIndexableResource(context);
diff --git a/src/com/android/settings/notification/CallConnectedTonePreferenceController.java b/src/com/android/settings/notification/CallConnectedTonePreferenceController.java
new file mode 100644
index 0000000..8070d6c
--- /dev/null
+++ b/src/com/android/settings/notification/CallConnectedTonePreferenceController.java
@@ -0,0 +1,49 @@
+/*
+ * 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.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 eec0fb8..c65c75d 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -242,6 +242,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 =
@@ -260,6 +262,7 @@
                 new EmergencyTonePreferenceController(context, fragment, lifecycle);
 
         controllers.add(dialPadTonePreferenceController);
+        controllers.add(callConnectedTonePreferenceController);
         controllers.add(screenLockSoundPreferenceController);
         controllers.add(chargingSoundPreferenceController);
         controllers.add(dockingSoundPreferenceController);
@@ -271,6 +274,7 @@
         controllers.add(new PreferenceCategoryController(context,
                 "other_sounds_and_vibrations_category").setChildren(
                 Arrays.asList(dialPadTonePreferenceController,
+                        callConnectedTonePreferenceController,
                         screenLockSoundPreferenceController,
                         chargingSoundPreferenceController,
                         dockingSoundPreferenceController,
@@ -318,4 +322,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 2a7de05..7c67fed 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -202,6 +202,7 @@
             mLockPatternUtils = new LockPatternUtils(getActivity());
             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 = getActivity().getIntent()
@@ -933,6 +934,7 @@
         @Override
         public void onDestroy() {
             super.onDestroy();
+            mLockPatternUtils.sanitizePassword();
         }
 
         @Override
diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java
index fbf766c..82aae65 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 ceda8a7..d557b78 100644
--- a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
+++ b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
@@ -396,9 +396,12 @@
 
             final PreferenceImageView imageView = view.findViewById(android.R.id.icon);
             final int level = accessPoint.getLevel();
+            final int generation = accessPoint.getWifiGeneration();
+            final boolean isReady = accessPoint.isHe8ssCapableAp()
+                                    && accessPoint.isVhtMax8SpatialStreamsSupported();
             if (imageView != null) {
                 final Drawable drawable = getContext().getDrawable(
-                        Utils.getWifiIconResource(level));
+                        Utils.getWifiIconResource(level, generation, 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 8521a75..eead184 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -36,8 +36,10 @@
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 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.TextUtils;
@@ -59,6 +61,9 @@
 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;
@@ -69,6 +74,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;
@@ -164,6 +172,9 @@
     private TextView mEapIdentityView;
     private TextView mEapAnonymousView;
 
+    private Spinner mSimCardSpinner;
+    private ArrayList<String> mSimDisplayNames;
+
     private Spinner mIpSettingsSpinner;
     private TextView mIpAddressView;
     private TextView mGatewayView;
@@ -181,6 +192,7 @@
     private TextView mProxyExclusionListView;
     private TextView mProxyPacView;
     private CheckBox mSharedCheckBox;
+    private CheckBox mShareThisWifiCheckBox;
 
     private IpAssignment mIpAssignment = IpAssignment.UNASSIGNED;
     private ProxySettings mProxySettings = ProxySettings.UNASSIGNED;
@@ -197,6 +209,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) {
@@ -231,6 +246,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)) {
@@ -279,6 +296,7 @@
                 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
@@ -286,6 +304,14 @@
             mConfigUi.setSubmitButton(res.getString(R.string.wifi_save));
             mPasswordScanButton.setVisibility(View.GONE);
         } 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);
@@ -315,7 +341,7 @@
                 } else {
                     mIpSettingsSpinner.setSelection(DHCP);
                 }
-
+                mShareThisWifiCheckBox.setChecked(config.shareThisAp);
                 mSharedCheckBox.setEnabled(config.shared);
                 if (!config.shared) {
                     showAdvancedFields = true;
@@ -413,6 +439,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);
                         }
@@ -617,6 +646,7 @@
         }
 
         config.shared = mSharedCheckBox.isChecked();
+        config.shareThisAp = mShareThisWifiCheckBox.isChecked();
 
         switch (mAccessPointSecurity) {
             case AccessPoint.SECURITY_NONE:
@@ -656,6 +686,12 @@
             case AccessPoint.SECURITY_EAP_SUITE_B:
                 config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
                 config.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
+                if (mAccessPoint != null && mAccessPoint.isFils256Supported()) {
+                    config.allowedKeyManagement.set(KeyMgmt.FILS_SHA256);
+                }
+                if (mAccessPoint != null && mAccessPoint.isFils384Supported()) {
+                    config.allowedKeyManagement.set(KeyMgmt.FILS_SHA384);
+                }
                 if (mAccessPointSecurity == AccessPoint.SECURITY_EAP_SUITE_B) {
                     config.allowedKeyManagement.set(KeyMgmt.SUITE_B_192);
                     config.requirePMF = true;
@@ -695,6 +731,12 @@
                                 break;
                         }
                         break;
+                    case Eap.SIM:
+                    case Eap.AKA:
+                    case Eap.AKA_PRIME:
+                        selectedSimCardNumber = mSimCardSpinner.getSelectedItemPosition() + 1;
+                        config.enterpriseConfig.setSimNum(selectedSimCardNumber);
+                        break;
                     case Eap.TTLS:
                         // The default index from mPhase2TtlsAdapter maps to the API
                         switch(phase2Method) {
@@ -787,6 +829,15 @@
                     // clear password
                     config.enterpriseConfig.setPassword(mPasswordView.getText().toString());
                 }
+                if (mAccessPoint != null && (mAccessPoint.isFils256Supported()
+                            || mAccessPoint.isFils384Supported())) {
+                    config.enterpriseConfig.setFieldValue(WifiEnterpriseConfig.EAP_ERP, "1");
+                }
+                break;
+
+            case AccessPoint.SECURITY_DPP:
+                config.allowedKeyManagement.set(KeyMgmt.DPP);
+                config.requirePMF = true;
                 break;
             case AccessPoint.SECURITY_SAE:
                 config.allowedKeyManagement.set(KeyMgmt.SAE);
@@ -957,7 +1008,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;
         }
@@ -973,12 +1025,19 @@
 
             if (mAccessPoint != null && mAccessPoint.isSaved()) {
                 mPasswordView.setHint(R.string.wifi_unchanged);
+                // Disable Password Scanner for "Modify Network"
+                mPasswordScanButton.setVisibility(View.GONE);
             }
         }
 
         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);
@@ -986,8 +1045,15 @@
         boolean initiateEnterpriseNetworkUi = false;
         if (mEapMethodSpinner == null) {
             initiateEnterpriseNetworkUi = true;
+            getSIMInfo();
             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);
@@ -996,6 +1062,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);
         }
@@ -1091,6 +1158,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;
             }
@@ -1123,6 +1201,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());
         }
     }
@@ -1169,12 +1253,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
@@ -1186,6 +1272,7 @@
                 mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE);
                 showPeapFields();
                 setUserCertInvisible();
+                setSimCardInvisible();
                 break;
             case WIFI_EAP_METHOD_TTLS:
                 // Reset adapter if needed
@@ -1196,10 +1283,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();
@@ -1239,6 +1348,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);
     }
@@ -1535,6 +1648,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(true /* refreshEapMethods */, true /* refreshCertificates */);
 
             if (WifiDppUtils.isSupportEnrolleeQrCodeScanner(mContext, mAccessPointSecurity)) {
@@ -1588,6 +1711,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/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index 252193d..20ad94d 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -113,8 +113,9 @@
             boolean isNonTtyOrTtyOnVolteEnabled = mImsManager.isNonTtyOrTtyOnVolteEnabled();
             boolean isWfcEnabled = mSwitchBar.isChecked()
                     && isNonTtyOrTtyOnVolteEnabled;
-
-            mSwitchBar.setEnabled((state == TelephonyManager.CALL_STATE_IDLE)
+            boolean isCallStateIdle =
+                    mTelephonyManager.getCallState() == TelephonyManager.CALL_STATE_IDLE;
+            mSwitchBar.setEnabled(isCallStateIdle
                     && isNonTtyOrTtyOnVolteEnabled);
 
             boolean isWfcModeEditable = true;
@@ -135,13 +136,13 @@
             Preference pref = getPreferenceScreen().findPreference(BUTTON_WFC_MODE);
             if (pref != null) {
                 pref.setEnabled(isWfcEnabled && isWfcModeEditable
-                        && (state == TelephonyManager.CALL_STATE_IDLE));
+                        && isCallStateIdle);
             }
             Preference pref_roam =
                     getPreferenceScreen().findPreference(BUTTON_WFC_ROAMING_MODE);
             if (pref_roam != null) {
                 pref_roam.setEnabled(isWfcEnabled && isWfcRoamingModeEditable
-                        && (state == TelephonyManager.CALL_STATE_IDLE));
+                        && isCallStateIdle);
             }
         }
     };
@@ -262,8 +263,7 @@
 
         mImsManager = getImsManager();
 
-        mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE))
-                .createForSubscriptionId(mSubId);
+        mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE));
 
         mButtonWfcMode = findPreference(BUTTON_WFC_MODE);
         mButtonWfcMode.setOnPreferenceChangeListener(this);
@@ -310,6 +310,7 @@
         CarrierConfigManager configManager = (CarrierConfigManager)
                 getSystemService(Context.CARRIER_CONFIG_SERVICE);
         boolean isWifiOnlySupported = true;
+        boolean isImsPreferredSupported = false;
 
         if (configManager != null) {
             PersistableBundle b = configManager.getConfigForSubId(mSubId);
@@ -323,23 +324,67 @@
                         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);
             }
         }
 
-        if (!isWifiOnlySupported) {
-            mButtonWfcMode.setEntries(R.array.wifi_calling_mode_choices_without_wifi_only);
-            mButtonWfcMode.setEntryValues(R.array.wifi_calling_mode_values_without_wifi_only);
-            mButtonWfcMode.setEntrySummaries(R.array.wifi_calling_mode_summaries_without_wifi_only);
+        Log.d(TAG, "isWifiOnlySupported = " + isWifiOnlySupported + " isImsPreferredSupported = "
+                + isImsPreferredSupported);
+        if (isWifiOnlySupported) {
+            if (isImsPreferredSupported) {
+                mButtonWfcMode.setEntries(
+                        R.array.wifi_calling_mode_choices_with_ims_preferred);
+                mButtonWfcMode.setEntryValues(
+                        R.array.wifi_calling_mode_values_with_ims_preferred);
+                mButtonWfcMode.setEntrySummaries(
+                        R.array.wifi_calling_mode_summaries_with_ims_preferred);
 
-            mButtonWfcRoamingMode.setEntries(
-                    R.array.wifi_calling_mode_choices_v2_without_wifi_only);
-            mButtonWfcRoamingMode.setEntryValues(
-                    R.array.wifi_calling_mode_values_without_wifi_only);
-            mButtonWfcRoamingMode.setEntrySummaries(
-                    R.array.wifi_calling_mode_summaries_without_wifi_only);
+                mButtonWfcRoamingMode.setEntries(
+                        R.array.wifi_calling_mode_choices_v2_with_ims_preferred);
+                mButtonWfcRoamingMode.setEntryValues(
+                        R.array.wifi_calling_mode_values_with_ims_preferred);
+                mButtonWfcRoamingMode.setEntrySummaries(
+                        R.array.wifi_calling_mode_summaries_with_ims_preferred);
+            } else {
+                mButtonWfcMode.setEntries(R.array.wifi_calling_mode_choices);
+                mButtonWfcMode.setEntryValues(R.array.wifi_calling_mode_values);
+                mButtonWfcMode.setEntrySummaries(R.array.wifi_calling_mode_summaries);
+
+                mButtonWfcRoamingMode.setEntries(R.array.wifi_calling_mode_choices_v2);
+                mButtonWfcRoamingMode.setEntryValues(R.array.wifi_calling_mode_values);
+                mButtonWfcRoamingMode.setEntrySummaries(R.array.wifi_calling_mode_summaries);
+            }
+        } else {
+            if (isImsPreferredSupported) {
+                mButtonWfcMode.setEntries(
+                        R.array.wifi_calling_mode_choices_without_wifi_only_with_ims_preferred);
+                mButtonWfcMode.setEntryValues(
+                        R.array.wifi_calling_mode_values_without_wifi_only_with_ims_preferred);
+                mButtonWfcMode.setEntrySummaries(
+                        R.array.wifi_calling_mode_summaries_without_wifi_only_with_ims_preferred);
+
+                mButtonWfcRoamingMode.setEntries(
+                        R.array.wifi_calling_mode_choices_v2_without_wifi_only_with_ims_preferred);
+                mButtonWfcRoamingMode.setEntryValues(
+                        R.array.wifi_calling_mode_values_without_wifi_only_with_ims_preferred);
+                mButtonWfcRoamingMode.setEntrySummaries(
+                        R.array.wifi_calling_mode_summaries_without_wifi_only_with_ims_preferred);
+            } else {
+                mButtonWfcMode.setEntries(R.array.wifi_calling_mode_choices_without_wifi_only);
+                mButtonWfcMode.setEntryValues(R.array.wifi_calling_mode_values_without_wifi_only);
+                mButtonWfcMode.setEntrySummaries(
+                        R.array.wifi_calling_mode_summaries_without_wifi_only);
+
+                mButtonWfcRoamingMode.setEntries(
+                        R.array.wifi_calling_mode_choices_v2_without_wifi_only);
+                mButtonWfcRoamingMode.setEntryValues(
+                        R.array.wifi_calling_mode_values_without_wifi_only);
+                mButtonWfcRoamingMode.setEntrySummaries(
+                        R.array.wifi_calling_mode_summaries_without_wifi_only);
+            }
         }
 
-
         // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
         boolean wfcEnabled = mImsManager.isWfcEnabledByUser()
                 && mImsManager.isNonTtyOrTtyOnVolteEnabled();
@@ -392,8 +437,7 @@
         if (mValidListener) {
             mValidListener = false;
 
-            TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
-            tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
 
             mSwitchBar.removeOnSwitchChangeListener(this);
         }
@@ -589,6 +633,9 @@
                 case ImsConfig.WfcModeFeatureValueConstants.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 a915766..ed8c429 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -42,6 +42,7 @@
 import android.net.NetworkUtils;
 import android.net.RouteInfo;
 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;
@@ -157,6 +158,8 @@
     private NetworkInfo mNetworkInfo;
     private NetworkCapabilities mNetworkCapabilities;
     private int mRssiSignalLevel = -1;
+    private int mWifiGeneration;
+    private boolean mIsReady;
     private String[] mSignalStr;
     private WifiConfiguration mWifiConfig;
     private WifiInfo mWifiInfo;
@@ -408,6 +411,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));
     }
 
@@ -561,6 +571,9 @@
 
     private void refreshRssiViews() {
         int signalLevel = mAccessPoint.getLevel();
+        int wifiGeneration = mAccessPoint.getWifiGeneration();
+        boolean isReady = (mAccessPoint.isVhtMax8SpatialStreamsSupported()
+                          && mAccessPoint.isHe8ssCapableAp());
 
         // Disappears signal view if not in range. e.g. for saved networks.
         if (mIsOutOfRange) {
@@ -569,11 +582,15 @@
             return;
         }
 
-        if (mRssiSignalLevel == signalLevel) {
+        if (mRssiSignalLevel == signalLevel
+            && mWifiGeneration == wifiGeneration
+            && mIsReady == isReady) {
             return;
         }
         mRssiSignalLevel = signalLevel;
-        Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel);
+        mWifiGeneration = wifiGeneration;
+        mIsReady = isReady;
+        Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel, mWifiGeneration, mIsReady);
 
         if (mEntityHeaderController != null) {
             mEntityHeaderController
@@ -629,6 +646,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
@@ -956,8 +976,8 @@
             mContext = context;
         }
 
-        public Drawable getIcon(int level) {
-            return mContext.getDrawable(Utils.getWifiIconResource(level)).mutate();
+        public Drawable getIcon(int level, int generation, boolean isReady) {
+            return mContext.getDrawable(Utils.getWifiIconResource(level, generation, isReady)).mutate();
         }
     }
 
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
index c37bdc0a..681c1ac 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
@@ -227,6 +227,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/dpp/WifiDppUtils.java b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
index fc1bc25..3af7b23 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppUtils.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
@@ -389,6 +389,8 @@
         // it supports PSK and WEP and non security
         // KeyMgmt.NONE is for WEP or non security
         return wifiConfiguration.allowedKeyManagement.get(KeyMgmt.WPA2_PSK) ||
+                wifiConfiguration.allowedKeyManagement.get(KeyMgmt.SAE) ||
+                wifiConfiguration.allowedKeyManagement.get(KeyMgmt.OWE) ||
                 wifiConfiguration.allowedKeyManagement.get(KeyMgmt.NONE);
     }
 
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index f1ac6cd..e5f624d 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -66,7 +66,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);
     private static final int MENU_ID_SEARCH = Menu.FIRST;
     private 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 e5c8de5..f80a35d 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -199,7 +199,11 @@
 
     private IconCompat getAccessPointLevelIcon(AccessPoint accessPoint) {
         final Drawable d = mContext.getDrawable(
-                com.android.settingslib.Utils.getWifiIconResource(accessPoint.getLevel()));
+                com.android.settingslib.Utils.getWifiIconResource(
+                                                  accessPoint.getLevel(),
+                                                  accessPoint.getWifiGeneration(),
+                                                  accessPoint.isHe8ssCapableAp()
+                                                  && accessPoint.isVhtMax8SpatialStreamsSupported()));
 
         final @ColorInt int color;
         if (accessPoint.isActive()) {
diff --git a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
index 3a85f7b..6eba796 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
@@ -35,23 +35,31 @@
     private String[] mBandEntries;
     private String[] mBandSummaries;
     private int mBandIndex;
+    private int mSecurityType;
     private boolean isDualMode;
+    private boolean isVendorDualApSupported;
 
     public WifiTetherApBandPreferenceController(Context context,
             OnTetherConfigUpdateListener listener) {
         super(context, listener);
+        final WifiConfiguration config = mWifiManager.getWifiApConfiguration();
         isDualMode = mWifiManager.isDualModeSupported();
-        updatePreferenceEntries();
+
+        isVendorDualApSupported = context.getResources().getBoolean(
+            com.android.internal.R.bool.config_wifi_dual_sap_mode_enabled);
+
+        updatePreferenceEntries(config);
     }
 
     @Override
     public void updateDisplay() {
         final WifiConfiguration config = mWifiManager.getWifiApConfiguration();
+        int tempBandIndex = mBandIndex;
         if (config == null) {
             mBandIndex = 0;
             Log.d(TAG, "Updating band index to 0 because no config");
         } else if (is5GhzBandSupported()) {
-            mBandIndex = validateSelection(config.apBand);
+            mBandIndex = validateSelection(config);
             Log.d(TAG, "Updating band index to " + mBandIndex);
         } else {
             config.apBand = 0;
@@ -64,10 +72,15 @@
         preference.setEntries(mBandSummaries);
         preference.setEntryValues(mBandEntries);
 
+        if (mBandIndex >= mBandEntries.length) {
+            mBandIndex = tempBandIndex < mBandEntries.length ? tempBandIndex : 0;
+        }
+
         if (!is5GhzBandSupported()) {
             preference.setEnabled(false);
             preference.setSummary(R.string.wifi_ap_choose_2G);
         } else {
+            preference.setEnabled(true);
             preference.setValue(Integer.toString(config.apBand));
             preference.setSummary(getConfigSummary());
         }
@@ -94,6 +107,17 @@
         return true;
     }
 
+    private int validateSelection(WifiConfiguration config) {
+        if (config.apBand ==  WifiConfiguration.AP_BAND_DUAL
+                && config.getAuthType() == WifiConfiguration.KeyMgmt.OWE) {
+            config.apBand = 0;
+            mWifiManager.setWifiApConfiguration(config);
+            Log.d(TAG, "Dual band not supported for OWE security, updating band index to " + mBandIndex);
+        }
+
+        return validateSelection(config.apBand);
+    }
+
     private int validateSelection(int band) {
         // Reset the band to 2.4 GHz if we get a weird config back to avoid a crash.
         final boolean isDualMode = mWifiManager.isDualModeSupported();
@@ -113,6 +137,12 @@
         return band;
     }
 
+    public void updatePreferenceEntries(WifiConfiguration config) {
+        mSecurityType = (config == null ? WifiConfiguration.KeyMgmt.NONE : config.getAuthType());
+        Log.d(TAG, "updating band preferences.");
+        updatePreferenceEntries();
+     }
+
     @VisibleForTesting
     void updatePreferenceEntries() {
         Resources res = mContext.getResources();
@@ -122,6 +152,10 @@
         if (isDualMode) {
             entriesRes = R.array.wifi_ap_band_dual_mode;
             summariesRes = R.array.wifi_ap_band_dual_mode_summary;
+        } else if (isVendorDualApSupported && mSecurityType != WifiConfiguration.KeyMgmt.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;
         }
         mBandEntries = res.getStringArray(entriesRes);
         mBandSummaries = res.getStringArray(summariesRes);
@@ -138,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]) == WifiConfiguration.AP_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 8d9e858..6655e6a 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
@@ -49,8 +49,9 @@
     @Override
     public void updateDisplay() {
         final WifiConfiguration config = mWifiManager.getWifiApConfiguration();
-        if (config == null || (config.getAuthType() == WifiConfiguration.KeyMgmt.WPA2_PSK
-                && TextUtils.isEmpty(config.preSharedKey))) {
+        if (config == null || (TextUtils.isEmpty(config.preSharedKey) &&
+                (config.getAuthType() == WifiConfiguration.KeyMgmt.WPA2_PSK
+                     || config.getAuthType() == WifiConfiguration.KeyMgmt.SAE))) {
             mPassword = generateRandomPassword();
         } else {
             mPassword = config.preSharedKey;
@@ -79,7 +80,8 @@
      */
     public String getPasswordValidated(int securityType) {
         // don't actually overwrite unless we get a new config in case it was accidentally toggled.
-        if (securityType == WifiConfiguration.KeyMgmt.NONE) {
+        if (securityType == WifiConfiguration.KeyMgmt.NONE
+                || securityType == WifiConfiguration.KeyMgmt.OWE) {
             return "";
         } else if (!isTextValid(mPassword)) {
             mPassword = generateRandomPassword();
@@ -89,7 +91,8 @@
     }
 
     public void updateVisibility(int securityType) {
-        mPreference.setVisible(securityType != WifiConfiguration.KeyMgmt.NONE);
+        mPreference.setVisible(securityType != WifiConfiguration.KeyMgmt.NONE
+                                   && securityType != WifiConfiguration.KeyMgmt.OWE);
     }
 
     @Override
diff --git a/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java
index 8f6d489..10322db 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 onNumClientsChanged(int numClients) {
                         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, numClients,
                                     numClients));
                         }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java
index f97a209..c21554c 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSecurityPreferenceController.java
@@ -7,18 +7,51 @@
 import androidx.preference.Preference;
 
 import com.android.settings.R;
+import java.util.ArrayList;
 
 public class WifiTetherSecurityPreferenceController extends WifiTetherBasePreferenceController {
 
     private static final String PREF_KEY = "wifi_tether_security";
 
     private final String[] mSecurityEntries;
+    private final String[] mSecurityValues;
     private int mSecurityValue;
+    private boolean mWpa3SoftApSupported;
+    private boolean mDualSoftApSupported;
+    private boolean mWpa3SoftApOweAkmSupported;
 
     public WifiTetherSecurityPreferenceController(Context context,
             OnTetherConfigUpdateListener listener) {
         super(context, listener);
-        mSecurityEntries = mContext.getResources().getStringArray(R.array.wifi_tether_security);
+        ArrayList<String> securityEntries =  new ArrayList<String>();
+        ArrayList<String> securityValues =  new ArrayList<String>();
+
+        mDualSoftApSupported = context.getResources().getBoolean(
+            com.android.internal.R.bool.config_wifi_dual_sap_mode_enabled);
+        mWpa3SoftApSupported = context.getResources().getBoolean(
+            com.android.internal.R.bool.config_wifi_wap3_sap_mode_enabled);
+        mWpa3SoftApOweAkmSupported = context.getResources().getBoolean(
+            com.android.internal.R.bool.config_wifi_wap3_sap_owe_akm_enabled);
+
+        // Add SAE security type
+        if (mWpa3SoftApSupported) {
+            securityValues.add(String.valueOf(WifiConfiguration.KeyMgmt.SAE));
+            securityEntries.add(context.getString(R.string.wifi_security_sae));
+        }
+        // Add WPA2-PSK security type
+        securityValues.add(String.valueOf(WifiConfiguration.KeyMgmt.WPA2_PSK));
+        securityEntries.add(context.getString(R.string.wifi_security_wpa2));
+        // Add OWE security type
+        if (mWpa3SoftApOweAkmSupported && mDualSoftApSupported) {
+            securityValues.add(String.valueOf(WifiConfiguration.KeyMgmt.OWE));
+            securityEntries.add(context.getString(R.string.wifi_security_owe));
+        }
+        // Add open security type
+        securityValues.add(String.valueOf(WifiConfiguration.KeyMgmt.NONE));
+        securityEntries.add(context.getString(R.string.wifi_security_none));
+
+        mSecurityEntries = securityEntries.toArray(new String[securityEntries.size()]);
+        mSecurityValues = securityValues.toArray(new String[securityValues.size()]);
     }
 
     @Override
@@ -29,14 +62,22 @@
     @Override
     public void updateDisplay() {
         final WifiConfiguration config = mWifiManager.getWifiApConfiguration();
-        if (config != null && config.getAuthType() == WifiConfiguration.KeyMgmt.NONE) {
+        if (config == null) {
+            mSecurityValue = WifiConfiguration.KeyMgmt.WPA2_PSK;
+        } else if (config.getAuthType() == WifiConfiguration.KeyMgmt.NONE) {
             mSecurityValue = WifiConfiguration.KeyMgmt.NONE;
-
+        } else if (mWpa3SoftApOweAkmSupported && mDualSoftApSupported
+                       && config.getAuthType() == WifiConfiguration.KeyMgmt.OWE) {
+            mSecurityValue = WifiConfiguration.KeyMgmt.OWE;
+        } else if (mWpa3SoftApSupported && config.getAuthType() == WifiConfiguration.KeyMgmt.SAE) {
+            mSecurityValue = WifiConfiguration.KeyMgmt.SAE;
         } else {
             mSecurityValue = WifiConfiguration.KeyMgmt.WPA2_PSK;
         }
 
         final ListPreference preference = (ListPreference) mPreference;
+        preference.setEntries(mSecurityEntries);
+        preference.setEntryValues(mSecurityValues);
         preference.setSummary(getSummaryForSecurityType(mSecurityValue));
         preference.setValue(String.valueOf(mSecurityValue));
     }
@@ -54,10 +95,13 @@
     }
 
     private String getSummaryForSecurityType(int securityType) {
-        if (securityType == WifiConfiguration.KeyMgmt.NONE) {
-            return mSecurityEntries[1];
-        }
-        // WPA2 PSK
-        return mSecurityEntries[0];
+        final ListPreference preference = (ListPreference) mPreference;
+        int securityEntryIndex = preference.findIndexOfValue(String.valueOf(securityType));
+
+        return mSecurityEntries[securityEntryIndex];
+    }
+
+    public boolean isWpa3OweSupported() {
+        return mWpa3SoftApOweAkmSupported;
     }
 }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index aecc053..760bf46 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.provider.SearchIndexableResource;
 import android.util.Log;
+import android.widget.Toast;
 
 import androidx.annotation.VisibleForTesting;
 
@@ -79,6 +81,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() {
@@ -187,8 +190,19 @@
     @Override
     public void onTetherConfigUpdated() {
         final WifiConfiguration config = buildNewConfig();
+        boolean bandEntriesChanged = false;
+
         mPasswordPreferenceController.updateVisibility(config.getAuthType());
 
+        if (mApBandPreferenceController.isVendorDualApSupported()
+                && mSecurityPreferenceController.isWpa3OweSupported()) {
+            if ((config.getAuthType() == WifiConfiguration.KeyMgmt.OWE)
+                    == (mApBandPreferenceController.isBandEntriesHasDualband())) {
+                mApBandPreferenceController.updatePreferenceEntries(config);
+                bandEntriesChanged = true;
+            }
+        }
+
         /**
          * if soft AP is stopped, bring up
          * else restart with new config
@@ -201,6 +215,9 @@
             mSwitchBarController.stopTether();
         }
         mWifiManager.setWifiApConfiguration(config);
+
+        if (bandEntriesChanged)
+            mApBandPreferenceController.updateDisplay();
     }
 
     private WifiConfiguration buildNewConfig() {
@@ -212,6 +229,12 @@
         config.preSharedKey = mPasswordPreferenceController.getPasswordValidated(securityType);
         config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
         config.apBand = mApBandPreferenceController.getBandIndex();
+
+	if (config.getAuthType() == WifiConfiguration.KeyMgmt.OWE
+                && config.apBand == WifiConfiguration.AP_BAND_DUAL) {
+            config.apBand = WifiConfiguration.AP_BAND_2GHZ;
+        }
+
         return config;
     }
 
@@ -281,6 +304,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();
+                    }
                 }
             }
         }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSoftApManager.java b/src/com/android/settings/wifi/tether/WifiTetherSoftApManager.java
index 77a44b0..b7d7168 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSoftApManager.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSoftApManager.java
@@ -19,6 +19,16 @@
 
         @Override
         public void onNumClientsChanged(int numClients) {
+            // Do nothing - we don't care about changing anything here.
+        }
+
+        @Override
+        public void onStaConnected(String Macaddr, int numClients) {
+            mWifiTetherSoftApCallback.onNumClientsChanged(numClients);
+        }
+
+        @Override
+        public void onStaDisconnected(String Macaddr, int numClients) {
             mWifiTetherSoftApCallback.onNumClientsChanged(numClients);
         }
     };