diff --git a/res/layout/search_bar_two_pane_version.xml b/res/layout/search_bar_two_pane_version.xml
index 9ce220c..f98985c 100644
--- a/res/layout/search_bar_two_pane_version.xml
+++ b/res/layout/search_bar_two_pane_version.xml
@@ -38,6 +38,6 @@
             android:layout_height="wrap_content"
             android:paddingStart="@dimen/search_bar_title_padding_start_regular_two_pane"
             android:layout_gravity="start"
-            android:text="@string/search_menu"/>
+            android:text="@string/search_settings"/>
     </Toolbar>
 </com.google.android.material.card.MaterialCardView>
\ No newline at end of file
diff --git a/res/layout/sfps_enroll_finish_base.xml b/res/layout/sfps_enroll_finish_base.xml
index 1773337..f442e90 100644
--- a/res/layout/sfps_enroll_finish_base.xml
+++ b/res/layout/sfps_enroll_finish_base.xml
@@ -30,22 +30,13 @@
         android:clipToPadding="false"
         android:clipChildren="false">
 
-            <com.android.settings.biometrics.fingerprint.FingerprintRequireScreenOnToAuthToggle
-                style="@style/SudSwitchStyle"
-                android:id="@+id/require_screen_on_to_auth_toggle"
-                android:layout_gravity="start"
-                android:paddingLeft="0dp"
-                android:paddingStart="0dp"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content" />
-
             <com.google.android.setupdesign.view.FillContentLayout
                 android:layout_width="@dimen/sfps_enrollment_finished_icon_max_size"
                 android:layout_height="@dimen/sfps_enrollment_finished_icon_max_size"
                 android:layout_marginTop="24dp"
                 android:paddingTop="0dp"
                 android:paddingBottom="0dp"
-                android:gravity="center">
+                android:layout_gravity="center">
 
                 <ImageView
                     android:id="@+id/fingerprint_in_app_indicator"
diff --git a/res/layout/sfps_require_screen_on_to_auth_toggle.xml b/res/layout/sfps_require_screen_on_to_auth_toggle.xml
deleted file mode 100644
index 02bb979..0000000
--- a/res/layout/sfps_require_screen_on_to_auth_toggle.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-  ~ Copyright (C) 2022 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.
-  -->
-
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_gravity="start"
-    style="?attr/fingerprint_layout_theme">
-
-    <!-- Title -->
-    <com.google.android.setupdesign.view.RichTextView
-        android:id="@+id/title"
-        android:paddingTop="8dp"
-        android:paddingBottom="4dp"
-        android:layout_alignParentStart="true"
-        android:textAlignment="viewStart"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/security_settings_require_screen_on_to_auth_title"
-        android:textColor="?android:attr/textColorPrimary"
-        android:textSize="@dimen/sud_description_text_size"
-    />
-
-    <!-- Subtitle -->
-    <TextView
-        android:id="@+id/subtitle"
-        android:paddingBottom="8dp"
-        android:layout_alignParentStart="true"
-        android:textAlignment="viewStart"
-        android:layout_toStartOf="@+id/toggle"
-        android:layout_below="@+id/title"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/security_settings_require_screen_on_to_auth_description"
-        android:textColor="?android:attr/textColorSecondary"/>
-
-    <!-- Toggle -->
-    <Switch
-        android:layout_alignParentEnd="true"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:id="@+id/toggle"
-        android:layout_centerVertical="true"
-        android:checked="false"
-        style="@style/SudSwitchStyle"/>
-
-</RelativeLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 96ffb8d..5fafdbf 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1287,14 +1287,12 @@
     <string name="security_settings_udfps_enroll_progress_a11y_message">Enrolling fingerprint <xliff:g id="percentage" example="10">%d</xliff:g> percent</string>
     <!-- Title shown in fingerprint enrollment dialog once enrollment is completed [CHAR LIMIT=29] -->
     <string name="security_settings_fingerprint_enroll_finish_title">Fingerprint added</string>
-    <!-- Message shown in SFPS enrollment dialog once enrollment is completed [CHAR LIMIT=NONE] -->
-    <string name="security_settings_sfps_enroll_finish">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
     <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (tablet) [CHAR LIMIT=NONE] -->
-    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps</string>
+    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
     <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (device) [CHAR LIMIT=NONE] -->
-    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps</string>
+    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
     <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (default) [CHAR LIMIT=NONE] -->
-    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps</string>
+    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps or approve a purchase</string>
     <!-- Title for require screen on to auth toggle shown in fingerprint enrollment dialog once enrollment is completed. [CHAR LIMIT=NONE] -->
     <string name="security_settings_require_screen_on_to_auth_title">Unlock only when screen is on</string>
     <!-- Description for require screen on to auth toggle shown in fingerprint enrollment dialog once enrollment is completed. [CHAR LIMIT=NONE] -->
@@ -6372,8 +6370,8 @@
     <string name="advanced_battery_preference_title">Battery usage</string>
     <!-- Preference summary for advanced battery usage, for past 24 hours [CHAR LIMIT=40] -->
     <string name="advanced_battery_preference_summary_with_hours">View usage for past 24 hours</string>
-    <!-- Preference summary for advanced battery usage, from last full charge [CHAR LIMIT=40] -->
-    <string name="advanced_battery_preference_summary">View usage from last full charge</string>
+    <!-- Preference summary for advanced battery usage, since last full charge [CHAR LIMIT=40] -->
+    <string name="advanced_battery_preference_summary">View usage since last full charge</string>
 
     <!-- Activity title for battery usage details for an app. or power consumer -->
     <string name="battery_details_title">App battery usage</string>
@@ -6748,50 +6746,50 @@
     <!-- Title for the battery management group [CHAR LIMIT=40] -->
     <string name ="battery_detail_manage_title">Manage battery usage</string>
 
-    <!-- Description for battery total and background usage time for an app, i.e. 1 hr 15 min total • 39 min background from last full charge. Note: ^1 and ^2 should be used in all translations [CHAR LIMIT=120] -->
-    <string name="battery_total_and_bg_usage"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total • <xliff:g id="time" example="39 min">^2</xliff:g> background\nfrom last full charge</string>
+    <!-- Description for battery total and background usage time for an app, i.e. 1 hr 15 min total • 39 min background since last full charge. Note: ^1 and ^2 should be used in all translations [CHAR LIMIT=120] -->
+    <string name="battery_total_and_bg_usage"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total • <xliff:g id="time" example="39 min">^2</xliff:g> background\nsince last full charge</string>
     <!-- Description for battery total and background usage time for an app, i.e. 1 hr 15 min total • 39 min background for past 24 hr. Note: ^1 and ^2 should be used in all translations [CHAR LIMIT=120] -->
     <string name="battery_total_and_bg_usage_24hr"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total • <xliff:g id="time" example="39 min">^2</xliff:g> background\nfor past 24 hr</string>
     <!-- Description for battery total and background usage time in a time period for an app, i.e. 1 hr 15 min total • 39 min background for 12 am-2 am. Note: ^1, ^2 and ^3 should be used in all translations [CHAR LIMIT=120] -->
     <string name="battery_total_and_bg_usage_with_period"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total • <xliff:g id="time" example="39 min">^2</xliff:g> background\nfor <xliff:g id="time_period" example="12 am-2 am">^3</xliff:g></string>
 
-    <!-- Description for battery total usage time is less than a minute for an app from last full charge [CHAR LIMIT=120] -->
-    <string name="battery_total_usage_less_minute">Total less than a minute from last full charge</string>
+    <!-- Description for battery total usage time is less than a minute for an app since last full charge [CHAR LIMIT=120] -->
+    <string name="battery_total_usage_less_minute">Total less than a minute since last full charge</string>
     <!-- Description for battery total usage time is less than a minute for an app for past 24 hr [CHAR LIMIT=120] -->
     <string name="battery_total_usage_less_minute_24hr">Total less than a minute for past 24 hr</string>
     <!-- Description for battery total usage time is less than a minute in a time period for an app, i.e. Total less than a minute for 12 am-2 am. Note: ^1 should be used in all translations[CHAR LIMIT=120] -->
     <string name="battery_total_usage_less_minute_with_period">Total less than a minute for <xliff:g id="time_period" example="12 am-2 am">^1</xliff:g></string>
 
-    <!-- Description for battery background usage time is less than a minute for an app from last full charge [CHAR LIMIT=120] -->
-    <string name="battery_bg_usage_less_minute">Background less than a minute from last full charge</string>
+    <!-- Description for battery background usage time is less than a minute for an app since last full charge [CHAR LIMIT=120] -->
+    <string name="battery_bg_usage_less_minute">Background less than a minute since last full charge</string>
     <!-- Description for battery background usage time is less than a minute for an app for past 24 hr [CHAR LIMIT=120] -->
     <string name="battery_bg_usage_less_minute_24hr">Background less than a minute for past 24 hr</string>
     <!-- Description for battery background usage time is less than a minute in a time period for an app, i.e. Background less than a minute for 12 am-2 am. Note: ^1 should be used in all translations[CHAR LIMIT=120] -->
     <string name="battery_bg_usage_less_minute_with_period">Background less than a minute for <xliff:g id="time_period" example="12 am-2 am">^1</xliff:g></string>
 
-    <!-- Description for battery total usage time for an app, i.e. 1 hr 15 min total from last full charge. Note: ^1 should be used in all translations [CHAR LIMIT=120] -->
-    <string name="battery_total_usage"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total from last full charge</string>
+    <!-- Description for battery total usage time for an app, i.e. 1 hr 15 min total since last full charge. Note: ^1 should be used in all translations [CHAR LIMIT=120] -->
+    <string name="battery_total_usage"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total since last full charge</string>
     <!-- Description for battery total usage time for an app, i.e. 1 hr 15 min total for past 24 hr. Note: ^1 should be used in all translations [CHAR LIMIT=120] -->
     <string name="battery_total_usage_24hr"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total for past 24 hr</string>
     <!-- Description for battery total usage time in a time period for an app, i.e. 1 hr 15 min total for 12 am-2 am. Note: ^1 and ^2 should be used in all translations [CHAR LIMIT=120] -->
     <string name="battery_total_usage_with_period"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total for <xliff:g id="time_period" example="12 am-2 am">^2</xliff:g></string>
 
-    <!-- Description for battery background usage time for an app, i.e. 1 hr 15 min background from last full charge. Note: ^1 should be used in all translations [CHAR LIMIT=120] -->
-    <string name="battery_bg_usage"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> background from last full charge</string>
+    <!-- Description for battery background usage time for an app, i.e. 1 hr 15 min background since last full charge. Note: ^1 should be used in all translations [CHAR LIMIT=120] -->
+    <string name="battery_bg_usage"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> background since last full charge</string>
     <!-- Description for battery background usage time for an app, i.e. 1 hr 15 min background for past 24 hr. Note: ^1 should be used in all translations [CHAR LIMIT=120] -->
     <string name="battery_bg_usage_24hr"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> background for past 24 hr</string>
     <!-- Description for battery background usage time in a time period for an app, i.e. 1 hr 15 min background for 12 am-2 am. Note: ^1 and ^2 should be used in all translations [CHAR LIMIT=120] -->
     <string name="battery_bg_usage_with_period"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> background for <xliff:g id="time_period" example="12 am-2 am">^2</xliff:g></string>
 
-    <!-- Description for battery total usage with background usage time less than a minute for an app, i.e. 1 hr 15 min total • background less than a minute from last full charge. Note: ^1 should be used in all translations [CHAR LIMIT=120] -->
-    <string name="battery_total_usage_and_bg_less_minute_usage"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total • background less than a minute\nfrom last full charge</string>
+    <!-- Description for battery total usage with background usage time less than a minute for an app, i.e. 1 hr 15 min total • background less than a minute since last full charge. Note: ^1 should be used in all translations [CHAR LIMIT=120] -->
+    <string name="battery_total_usage_and_bg_less_minute_usage"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total • background less than a minute\nsince last full charge</string>
     <!-- Description for battery total usage with background usage time less than a minute for an app, i.e. 1 hr 15 min total • background less than a minute for past 24 hr. Note: ^1 should be used in all translations [CHAR LIMIT=120] -->
     <string name="battery_total_usage_and_bg_less_minute_usage_24hr"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total • background less than a minute\nfor past 24 hr</string>
     <!-- Description for battery total usage with background usage time less than a minute in a time period for an app, i.e. 1 hr 15 min total • background less than a minute for 12 am-2 am. Note: ^1 and ^2 should be used in all translations [CHAR LIMIT=120] -->
     <string name="battery_total_usage_and_bg_less_minute_usage_with_period"><xliff:g id="time" example="1 hr 15 min">^1</xliff:g> total • background less than a minute\nfor <xliff:g id="time_period" example="12 am-2 am">^2</xliff:g></string>
 
-    <!-- Description for no any battery usage from last full charge [CHAR LIMIT=120] -->
-    <string name="battery_not_usage">No usage from last full charge</string>
+    <!-- Description for no any battery usage since last full charge [CHAR LIMIT=120] -->
+    <string name="battery_not_usage">No usage since last full charge</string>
     <!-- Description for no any battery usage for past 24 hr [CHAR LIMIT=120] -->
     <string name="battery_not_usage_24hr">No usage for past 24 hr</string>
     <!-- Description for no usage time but have battery usage [CHAR LIMIT=120] -->
diff --git a/res/xml/app_data_usage.xml b/res/xml/app_data_usage.xml
index e94c4ff..aacc1f6 100644
--- a/res/xml/app_data_usage.xml
+++ b/res/xml/app_data_usage.xml
@@ -51,6 +51,7 @@
 
     <PreferenceCategory
         android:key="app_data_usage_settings_category"
+        settings:isPreferenceVisible="@bool/config_show_sim_info"
         android:layout="@layout/preference_category_no_label">
 
         <Preference
diff --git a/res/xml/network_provider_internet.xml b/res/xml/network_provider_internet.xml
index c9c576e..981afb3 100644
--- a/res/xml/network_provider_internet.xml
+++ b/res/xml/network_provider_internet.xml
@@ -99,6 +99,7 @@
         android:title="@string/data_saver_title"
         android:icon="@drawable/ic_settings_data_usage"
         android:order="10"
+        settings:isPreferenceVisible="@bool/config_show_data_saver"
         android:fragment="com.android.settings.datausage.DataSaverSummary"/>
 
     <com.android.settings.vpn2.VpnInfoPreference
diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml
index 5b37f6a..3dd6e18 100644
--- a/res/xml/special_access.xml
+++ b/res/xml/special_access.xml
@@ -97,12 +97,14 @@
         android:key="premium_sms"
         android:title="@string/premium_sms_access"
         android:fragment="com.android.settings.applications.specialaccess.premiumsms.PremiumSmsAccess"
+        settings:isPreferenceVisible="@bool/config_show_premium_sms"
         settings:controller="com.android.settings.applications.specialaccess.premiumsms.PremiumSmsController" />
 
     <Preference
         android:key="data_saver"
         android:title="@string/unrestricted_data_saver"
         android:fragment="com.android.settings.datausage.UnrestrictedDataAccess"
+        settings:isPreferenceVisible="@bool/config_show_data_saver"
         settings:controller="com.android.settings.applications.specialaccess.DataSaverController" />
 
     <Preference
diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
index 732163b..747bd78 100644
--- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
@@ -153,7 +153,7 @@
         } else {
             Log.i(TAG, "Launch : " + mPackageName + " with package name");
             AdvancedPowerUsageDetail.startBatteryDetailPage(mParent.getActivity(), mParent,
-                    mPackageName);
+                    mPackageName, UserHandle.CURRENT);
         }
         return true;
     }
diff --git a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
index e827325..32662a2 100644
--- a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
@@ -35,6 +35,7 @@
 import com.android.settings.Utils;
 import com.android.settings.datausage.AppDataUsage;
 import com.android.settings.datausage.DataUsageUtils;
+import com.android.settings.network.SubscriptionUtil;
 import com.android.settingslib.AppItem;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -147,7 +148,8 @@
     }
 
     private static NetworkTemplate getTemplate(Context context) {
-        if (DataUsageUtils.hasReadyMobileRadio(context)) {
+        if (SubscriptionUtil.isSimHardwareVisible(context)
+                && DataUsageUtils.hasReadyMobileRadio(context)) {
             return new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE).setMeteredness(
                     NetworkStats.METERED_YES).build();
         }
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 6b032fb..d335324 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -659,7 +659,8 @@
                 break;
             case LIST_TYPE_BATTERY_OPTIMIZATION:
                 AdvancedPowerUsageDetail.startBatteryDetailPage(
-                        getActivity(), this, mCurrentPkgName);
+                        getActivity(), this, mCurrentPkgName,
+                        UserHandle.getUserHandleForUid(mCurrentUid));
                 break;
             // TODO: Figure out if there is a way where we can spin up the profile's settings
             // process ahead of time, to avoid a long load of data when user clicks on a managed
diff --git a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java
index 94fbb76..5d0b63c 100644
--- a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java
+++ b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java
@@ -96,15 +96,17 @@
                 // FLAG_UPDATE_CURRENT ensures it is launched with the most recent values.
                 final Intent faceIntent = BiometricUtils.getFaceIntroIntent(mActivity,
                         mActivity.getIntent());
-                faceIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, mGkPwHandle);
+                faceIntent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+                faceIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE,
+                        mGkPwHandle);
                 final PendingIntent faceAfterFp = PendingIntent.getActivity(mActivity,
                         0 /* requestCode */, faceIntent,
                         PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
                 intent.putExtra(EXTRA_ENROLL_AFTER_FINGERPRINT, faceAfterFp);
-            }
 
-            BiometricUtils.launchEnrollForResult(mActivity, intent, REQUEST_FINGERPRINT_ENROLL,
-                    hardwareAuthToken, mGkPwHandle, mUserId);
+                BiometricUtils.launchEnrollForResult(mActivity, intent, REQUEST_FINGERPRINT_ENROLL,
+                        hardwareAuthToken, mGkPwHandle, mUserId);
+            }
         }));
     }
 }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
index 4506310..b8ec5e6 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
@@ -25,7 +25,6 @@
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
-import android.widget.CompoundButton;
 
 import androidx.annotation.VisibleForTesting;
 
@@ -45,7 +44,6 @@
 public class FingerprintEnrollFinish extends BiometricEnrollBase {
 
     private static final String TAG = "FingerprintEnrollFinish";
-    private static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH = "require_screen_on_to_auth_toggle";
     private static final String ACTION_FINGERPRINT_SETTINGS =
             "android.settings.FINGERPRINT_SETTINGS";
     @VisibleForTesting
@@ -54,15 +52,10 @@
 
     private FingerprintManager mFingerprintManager;
 
-    private FingerprintSettingsRequireScreenOnToAuthPreferenceController
-            mRequireScreenOnToAuthPreferenceController;
-    private FingerprintRequireScreenOnToAuthToggle mRequireScreenOnToAuthToggle;
     private boolean mCanAssumeSfps;
 
     private boolean mIsAddAnotherOrFinish;
 
-    private CompoundButton.OnCheckedChangeListener mRequireScreenOnToAuthToggleListener;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -72,20 +65,11 @@
         mCanAssumeSfps = props != null && props.size() == 1 && props.get(0).isAnySidefpsType();
         if (mCanAssumeSfps) {
             setContentView(R.layout.sfps_enroll_finish);
-            mRequireScreenOnToAuthPreferenceController =
-                    new FingerprintSettingsRequireScreenOnToAuthPreferenceController(
-                            getApplicationContext(),
-                            KEY_REQUIRE_SCREEN_ON_TO_AUTH
-                    );
         } else {
             setContentView(R.layout.fingerprint_enroll_finish);
         }
         setHeaderText(R.string.security_settings_fingerprint_enroll_finish_title);
-        if (mCanAssumeSfps) {
-            setDescriptionText(R.string.security_settings_sfps_enroll_finish);
-        } else {
-            setDescriptionText(R.string.security_settings_fingerprint_enroll_finish_v2_message);
-        }
+        setDescriptionText(R.string.security_settings_fingerprint_enroll_finish_v2_message);
 
         mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
         mFooterBarMixin.setSecondaryButton(
@@ -104,20 +88,6 @@
                         .setTheme(R.style.SudGlifButton_Primary)
                         .build()
         );
-
-        if (mCanAssumeSfps) {
-            mRequireScreenOnToAuthToggleListener =
-                (buttonView, isChecked) -> {
-                    mRequireScreenOnToAuthPreferenceController.setChecked(isChecked);
-                };
-            mRequireScreenOnToAuthToggle = findViewById(R.id.require_screen_on_to_auth_toggle);
-            mRequireScreenOnToAuthToggle.setChecked(
-                    mRequireScreenOnToAuthPreferenceController.isChecked());
-            mRequireScreenOnToAuthToggle.setListener(mRequireScreenOnToAuthToggleListener);
-            mRequireScreenOnToAuthToggle.setOnClickListener(v -> {
-                mRequireScreenOnToAuthToggle.getSwitch().toggle();
-            });
-        }
     }
 
     @Override
@@ -131,13 +101,6 @@
     @Override
     protected void onResume() {
         super.onResume();
-        if (mCanAssumeSfps) {
-            mRequireScreenOnToAuthToggleListener.onCheckedChanged(
-                    mRequireScreenOnToAuthToggle.getSwitch(),
-                    mRequireScreenOnToAuthToggle.isChecked()
-            );
-        }
-
         FooterButton addButton = mFooterBarMixin.getSecondaryButton();
 
         final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintRequireScreenOnToAuthToggle.java b/src/com/android/settings/biometrics/fingerprint/FingerprintRequireScreenOnToAuthToggle.java
deleted file mode 100644
index f88c9aa..0000000
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintRequireScreenOnToAuthToggle.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2022 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.biometrics.fingerprint;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.widget.CompoundButton;
-import android.widget.LinearLayout;
-import android.widget.Switch;
-
-import com.android.settings.R;
-
-/**
- * A layout that contains a start-justified title, and an end-justified switch.
- */
-public class FingerprintRequireScreenOnToAuthToggle extends LinearLayout {
-    private Switch mSwitch;
-
-    public FingerprintRequireScreenOnToAuthToggle(Context context) {
-        this(context, null /* attrs */);
-    }
-
-    public FingerprintRequireScreenOnToAuthToggle(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public FingerprintRequireScreenOnToAuthToggle(
-            Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        LayoutInflater.from(context).inflate(R.layout.sfps_require_screen_on_to_auth_toggle,
-                this, true /* attachToRoot */);
-
-        mSwitch = findViewById(R.id.toggle);
-        mSwitch.setClickable(true);
-        mSwitch.setFocusable(false);
-    }
-
-    public boolean isChecked() {
-        return mSwitch.isChecked();
-    }
-
-    /**
-     *
-     * @param checked
-     */
-    public void setChecked(boolean checked) {
-        mSwitch.setChecked(checked);
-    }
-
-    /**
-     *
-     * @param listener
-     */
-    public void setListener(CompoundButton.OnCheckedChangeListener listener) {
-        mSwitch.setOnCheckedChangeListener(listener);
-    }
-
-    public Switch getSwitch() {
-        return mSwitch;
-    }
-}
diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java
index d57a2a1..e15cead 100644
--- a/src/com/android/settings/datausage/AppDataUsage.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -45,6 +45,7 @@
 
 import com.android.settings.R;
 import com.android.settings.applications.AppInfoBase;
+import com.android.settings.network.SubscriptionUtil;
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settingslib.AppItem;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -109,6 +110,10 @@
     private long mSelectedCycle;
     private boolean mIsLoading;
 
+    public boolean isSimHardwareVisible(Context context) {
+        return SubscriptionUtil.isSimHardwareVisible(context);
+    }
+
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -161,7 +166,7 @@
         final UidDetailProvider uidDetailProvider = getUidDetailProvider();
 
         if (mAppItem.key > 0) {
-            if (!UserHandle.isApp(mAppItem.key)) {
+            if ((!isSimHardwareVisible(mContext)) || !UserHandle.isApp(mAppItem.key)) {
                 final UidDetail uidDetail = uidDetailProvider.getUidDetail(mAppItem.key, true);
                 mIcon = uidDetail.icon;
                 mLabel = uidDetail.label;
@@ -328,6 +333,9 @@
     }
 
     private void updatePrefs(boolean restrictBackground, boolean unrestrictData) {
+        if (!isSimHardwareVisible(mContext)) {
+            return;
+        }
         setBackPreferenceListAnimatorIfLoaded();
         final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMeteredDataRestricted(
                 mContext, mPackageName, UserHandle.getUserId(mAppItem.key));
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 57931c1..baf8e7e 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -42,6 +42,7 @@
 
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.network.SubscriptionUtil;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.NetworkPolicyEditor;
 import com.android.settingslib.net.DataUsageController;
@@ -102,6 +103,10 @@
         super.onCreate(icicle);
 
         final Context context = getContext();
+        if (!SubscriptionUtil.isSimHardwareVisible(context)) {
+            finish();
+            return;
+        }
         mDataUsageController = new DataUsageController(context);
 
         Bundle args = getArguments();
@@ -498,7 +503,8 @@
 
                 @Override
                 protected boolean isPageSearchEnabled(Context context) {
-                    return DataUsageUtils.hasMobileData(context);
+                    return SubscriptionUtil.isSimHardwareVisible(context)
+                            && DataUsageUtils.hasMobileData(context);
                 }
             };
 
diff --git a/src/com/android/settings/datausage/DataSaverSummary.java b/src/com/android/settings/datausage/DataSaverSummary.java
index 744f692..4712e6f 100644
--- a/src/com/android/settings/datausage/DataSaverSummary.java
+++ b/src/com/android/settings/datausage/DataSaverSummary.java
@@ -59,6 +59,11 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
+        if (!isDataSaverVisible(getContext())) {
+            finishFragment();
+            return;
+        }
+
         addPreferencesFromResource(R.xml.data_saver);
         mUnrestrictedAccess = findPreference(KEY_UNRESTRICTED_ACCESS);
         mApplicationsState = ApplicationsState.getInstance(
@@ -192,12 +197,18 @@
 
     }
 
+    public static boolean isDataSaverVisible(Context context) {
+        return context.getResources()
+            .getBoolean(R.bool.config_show_data_saver);
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.data_saver) {
 
                 @Override
                 protected boolean isPageSearchEnabled(Context context) {
-                    return DataUsageUtils.hasMobileData(context)
+                    return isDataSaverVisible(context)
+                            && DataUsageUtils.hasMobileData(context)
                             && DataUsageUtils.getDefaultSubscriptionId(context)
                             != SubscriptionManager.INVALID_SUBSCRIPTION_ID;
                 }
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index abcc45f..fabf059 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -75,11 +75,19 @@
         return R.string.help_url_data_usage;
     }
 
+    public boolean isSimHardwareVisible(Context context) {
+        return SubscriptionUtil.isSimHardwareVisible(context);
+    }
+
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         Context context = getContext();
 
+        if (!isSimHardwareVisible(context)) {
+            finish();
+            return;
+        }
         enableProxySubscriptionManager(context);
 
         boolean hasMobileData = DataUsageUtils.hasMobileData(context);
@@ -137,6 +145,9 @@
     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final Activity activity = getActivity();
         final ArrayList<AbstractPreferenceController> controllers = new ArrayList<>();
+        if (!isSimHardwareVisible(context)) {
+            return controllers;
+        }
         mSummaryController =
                 new DataUsageSummaryPreferenceController(activity, getSettingsLifecycle(), this,
                         DataUsageUtils.getDefaultSubscriptionId(activity));
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index f6ed2a1..3705dfc 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -227,7 +227,8 @@
      * Start packageName's battery detail page.
      */
     public static void startBatteryDetailPage(
-            Activity caller, Instrumentable instrumentable, String packageName) {
+            Activity caller, Instrumentable instrumentable, String packageName,
+            UserHandle userHandle) {
         final Bundle args = new Bundle(3);
         final PackageManager packageManager = caller.getPackageManager();
         args.putString(EXTRA_PACKAGE_NAME, packageName);
@@ -243,6 +244,7 @@
                 .setTitleRes(R.string.battery_details_title)
                 .setArguments(args)
                 .setSourceMetricsCategory(instrumentable.getMetricsCategory())
+                .setUserHandle(userHandle)
                 .launch();
     }
 
@@ -531,7 +533,6 @@
     private CharSequence getAppActiveTime(Bundle bundle) {
         final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
         final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);
-        final int consumedPower = bundle.getInt(EXTRA_POWER_USAGE_AMOUNT);
         final int uid = bundle.getInt(EXTRA_UID, 0);
         final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null);
         final long totalTimeMs = foregroundTimeMs + backgroundTimeMs;
@@ -543,9 +544,7 @@
             return null;
         }
         if (totalTimeMs == 0) {
-            usageTimeSummary = getText(
-                    isChartGraphEnabled && consumedPower > 0 ? R.string.battery_usage_without_time
-                            : R.string.battery_not_usage);
+            usageTimeSummary = getText(R.string.battery_usage_without_time);
         } else if (slotTime == null) {
             // Shows summary text with last full charge if slot time is null.
             usageTimeSummary = getAppFullChargeActiveSummary(
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
index b9c3a6f..86533ba 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
@@ -67,6 +67,7 @@
     private static final int MAX_DIFF_SECONDS_OF_UPPER_TIMESTAMP = 5;
     // Maximum total time value for each hourly slot cumulative data at most 2 hours.
     private static final float TOTAL_HOURLY_TIME_THRESHOLD = DateUtils.HOUR_IN_MILLIS * 2;
+    private static final long MIN_TIME_SLOT = DateUtils.HOUR_IN_MILLIS * 2;
     private static final Map<String, BatteryHistEntry> EMPTY_BATTERY_MAP = new HashMap<>();
     private static final BatteryHistEntry EMPTY_BATTERY_HIST_ENTRY =
             new BatteryHistEntry(new ContentValues());
@@ -270,13 +271,31 @@
         }
         final long startTime = timestampList.get(0);
         final long endTime = timestampList.get(timestampList.size() - 1);
+        // If the timestamp diff is smaller than MIN_TIME_SLOT, returns the empty list directly.
+        if (endTime - startTime < MIN_TIME_SLOT) {
+            return dailyTimestampList;
+        }
         long nextDay = getTimestampOfNextDay(startTime);
-        dailyTimestampList.add(startTime);
+        // Only if the timestamp diff in the first day is bigger than MIN_TIME_SLOT, start from the
+        // first day. Otherwise, start from the second day.
+        if (nextDay - startTime >= MIN_TIME_SLOT) {
+            dailyTimestampList.add(startTime);
+        }
         while (nextDay < endTime) {
             dailyTimestampList.add(nextDay);
             nextDay += DateUtils.DAY_IN_MILLIS;
         }
-        dailyTimestampList.add(endTime);
+        final long lastDailyTimestamp = dailyTimestampList.get(dailyTimestampList.size() - 1);
+        // Only if the timestamp diff in the last day is bigger than MIN_TIME_SLOT, add the
+        // last day.
+        if (endTime - lastDailyTimestamp >= MIN_TIME_SLOT) {
+            dailyTimestampList.add(endTime);
+        }
+        // The dailyTimestampList must have the start and end timestamp, otherwise, return an empty
+        // list.
+        if (dailyTimestampList.size() < MIN_TIMESTAMP_DATA_SIZE) {
+            return new ArrayList<>();
+        }
         return dailyTimestampList;
     }
 
@@ -721,7 +740,7 @@
             final List<Long> hourlyTimestampsPerDay = new ArrayList<>();
             while (currentTimestamp <= dailyEndTimestamp) {
                 hourlyTimestampsPerDay.add(currentTimestamp);
-                currentTimestamp += 2 * DateUtils.HOUR_IN_MILLIS;
+                currentTimestamp += MIN_TIME_SLOT;
             }
             hourlyTimestamps.add(hourlyTimestampsPerDay);
         }
diff --git a/src/com/android/settings/notification/history/NotificationHistoryActivity.java b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
index 4fecfc9..1f83cc7 100644
--- a/src/com/android/settings/notification/history/NotificationHistoryActivity.java
+++ b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
@@ -73,6 +73,10 @@
 public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
 
     private static String TAG = "NotifHistory";
+    // MAX_RECENT_DISMISS_ITEM_COUNT needs to be less or equals than
+    // R.integer.config_notificationServiceArchiveSize, which is the Number of notifications kept
+    // in the notification service historical archive
+    private static final int MAX_RECENT_DISMISS_ITEM_COUNT = 50;
 
     private ViewGroup mHistoryOn;
     private ViewGroup mHistoryOff;
@@ -388,7 +392,8 @@
                 snoozed = getSnoozedNotifications();
                 dismissed = mNm.getHistoricalNotificationsWithAttribution(
                         NotificationHistoryActivity.this.getPackageName(),
-                        NotificationHistoryActivity.this.getAttributionTag(), 6, false);
+                        NotificationHistoryActivity.this.getAttributionTag(),
+                        MAX_RECENT_DISMISS_ITEM_COUNT, false);
             } catch (SecurityException | RemoteException e) {
                 Log.d(TAG, "OnPaused called while trying to retrieve notifications");
             }
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
index 39d51fa..ed04910 100644
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
@@ -18,9 +18,13 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.spy;
 
 import android.content.Context;
+import android.content.res.Resources;
+
+import com.android.settings.R;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -34,23 +38,35 @@
 public class DataSaverControllerTest {
 
     private Context mContext;
+    private Resources mResources;
     private DataSaverController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
+
+        mResources = spy(mContext.getResources());
+        when(mContext.getResources()).thenReturn(mResources);
+
         mController = new DataSaverController(mContext, "key");
     }
 
     @Test
     public void testDataSaver_byDefault_shouldBeShown() {
+        when(mResources.getBoolean(R.bool.config_show_data_saver)).thenReturn(true);
         assertThat(mController.isAvailable()).isTrue();
     }
 
     @Test
     @Config(qualifiers = "mcc999")
+    public void testDataSaver_ifDisabledByCarrier_shouldNotBeShown() {
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
     public void testDataSaver_ifDisabled_shouldNotBeShown() {
+        when(mResources.getBoolean(R.bool.config_show_data_saver)).thenReturn(false);
         assertThat(mController.isAvailable()).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java
index 4c4acc7..ed4cbd1 100644
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java
@@ -21,8 +21,12 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.content.res.Resources;
+
+import com.android.settings.R;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -36,23 +40,35 @@
 public class PremiumSmsControllerTest {
 
     private Context mContext;
+    private Resources mResources;
     private PremiumSmsController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
+
+        mResources = spy(mContext.getResources());
+        when(mContext.getResources()).thenReturn(mResources);
+
         mController = new PremiumSmsController(mContext, "key");
     }
 
     @Test
     public void getAvailability_byDefault_shouldBeShown() {
+        when(mResources.getBoolean(R.bool.config_show_premium_sms)).thenReturn(true);
         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
     }
 
     @Test
     @Config(qualifiers = "mcc999")
+    public void getAvailability_disabledByCarrier_returnUnavailable() {
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
     public void getAvailability_disabled_returnUnavailable() {
+        when(mResources.getBoolean(R.bool.config_show_premium_sms)).thenReturn(false);
         assertThat(mController.isAvailable()).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java
index 53d46ca..5982413 100644
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java
@@ -21,8 +21,12 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.content.res.Resources;
+
+import com.android.settings.R;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -36,23 +40,35 @@
 public class PremiumSmsScreenPreferenceControllerTest {
 
     private Context mContext;
+    private Resources mResources;
     private PremiumSmsScreenPreferenceController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
+
+        mResources = spy(mContext.getResources());
+        when(mContext.getResources()).thenReturn(mResources);
+
         mController = new PremiumSmsScreenPreferenceController(mContext, "key");
     }
 
     @Test
     public void getAvailability_byDefault_shouldBeShown() {
+        when(mResources.getBoolean(R.bool.config_show_premium_sms)).thenReturn(true);
         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
     }
 
     @Test
     @Config(qualifiers = "mcc999")
+    public void getAvailability_disabledByCarrier_returnUnavailable() {
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
     public void getAvailability_disabled_returnUnavailable() {
+        when(mResources.getBoolean(R.bool.config_show_premium_sms)).thenReturn(false);
         assertThat(mController.isAvailable()).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
index 483d746..bccec3e 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
@@ -110,7 +110,10 @@
     @Test
     @Config(shadows = ShadowFragment.class)
     public void onCreate_appUid_shouldGetAppLabelFromAppInfo() throws NameNotFoundException {
-        mFragment = spy(new AppDataUsage());
+        mFragment = spy(new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        });
         final FragmentActivity activity = spy(Robolectric.setupActivity(FragmentActivity.class));
         doReturn(mPackageManager).when(activity).getPackageManager();
         doReturn(activity).when(mFragment).getActivity();
@@ -140,7 +143,10 @@
     @Test
     @Config(shadows = ShadowFragment.class)
     public void onCreate_notAppUid_shouldGetAppLabelFromUidDetailProvider() {
-        mFragment = spy(new AppDataUsage());
+        mFragment = spy(new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        });
         ReflectionHelpers.setField(mFragment, "mDashboardFeatureProvider",
                 FakeFeatureFactory.setupForTest().dashboardFeatureProvider);
         doReturn(Robolectric.setupActivity(FragmentActivity.class)).when(mFragment).getActivity();
@@ -167,7 +173,10 @@
 
     @Test
     public void bindAppHeader_allWorkApps_shouldNotShowAppInfoLink() {
-        mFragment = spy(new AppDataUsage());
+        mFragment = spy(new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        });
 
         when(mFragment.getPreferenceManager())
                 .thenReturn(mock(PreferenceManager.class, RETURNS_DEEP_STUBS));
@@ -184,7 +193,10 @@
             throws PackageManager.NameNotFoundException {
         final int fakeUserId = 100;
 
-        mFragment = spy(new AppDataUsage());
+        mFragment = spy(new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        });
         final ArraySet<String> packages = new ArraySet<>();
         packages.add("pkg");
         final AppItem appItem = new AppItem(123456789);
@@ -210,7 +222,10 @@
 
     @Test
     public void changePreference_backgroundData_shouldUpdateUI() {
-        mFragment = spy(new AppDataUsage());
+        mFragment = spy(new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        });
         final AppItem appItem = new AppItem(123456789);
         final RestrictedSwitchPreference pref = mock(RestrictedSwitchPreference.class);
         final DataSaverBackend dataSaverBackend = mock(DataSaverBackend.class);
@@ -227,7 +242,10 @@
 
     @Test
     public void updatePrefs_restrictedByAdmin_shouldDisablePreference() {
-        mFragment = spy(new AppDataUsage());
+        mFragment = spy(new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        });
         final int testUid = 123123;
         final AppItem appItem = new AppItem(testUid);
         final RestrictedSwitchPreference restrictBackgroundPref
@@ -255,7 +273,10 @@
 
     @Test
     public void bindData_noAppUsageData_shouldHideCycleSpinner() {
-        mFragment = spy(new AppDataUsage());
+        mFragment = spy(new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        });
         final SpinnerPreference cycle = mock(SpinnerPreference.class);
         ReflectionHelpers.setField(mFragment, "mCycle", cycle);
         final Preference preference = mock(Preference.class);
@@ -271,7 +292,10 @@
 
     @Test
     public void bindData_hasAppUsageData_shouldShowCycleSpinnerAndUpdateUsageSummary() {
-        mFragment = spy(new AppDataUsage());
+        mFragment = spy(new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        });
         final Context context = RuntimeEnvironment.application;
         ReflectionHelpers.setField(mFragment, "mContext", context);
         final long backgroundBytes = 1234L;
@@ -300,7 +324,10 @@
 
     @Test
     public void onCreateLoader_categoryApp_shouldQueryDataUsageUsingAppKey() {
-        mFragment = new AppDataUsage();
+        mFragment = new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        };
         final Context context = RuntimeEnvironment.application;
         final int testUid = 123123;
         final AppItem appItem = new AppItem(testUid);
@@ -323,7 +350,10 @@
 
     @Test
     public void onCreateLoader_categoryUser_shouldQueryDataUsageUsingAssociatedUids() {
-        mFragment = new AppDataUsage();
+        mFragment = new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        };
         final Context context = RuntimeEnvironment.application;
         final int testUserId = 11;
         final AppItem appItem = new AppItem(testUserId);
@@ -360,7 +390,10 @@
         appItem.category = AppItem.CATEGORY_APP;
         appItem.addUid(uid);
 
-        mFragment = new AppDataUsage();
+        mFragment = new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        };
         ReflectionHelpers.setField(mFragment, "mContext", RuntimeEnvironment.application);
         ReflectionHelpers.setField(mFragment, "mCycles", testCycles);
         ReflectionHelpers.setField(mFragment, "mAppItem", appItem);
@@ -393,7 +426,10 @@
         builder.setStartTime(tenDaysAgo).setEndTime(now).setTotalUsage(1234L);
         data.add(builder.build());
 
-        mFragment = new AppDataUsage();
+        mFragment = new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        };
         ReflectionHelpers.setField(mFragment, "mContext", RuntimeEnvironment.application);
         ReflectionHelpers.setField(mFragment, "mCycleAdapter", mock(CycleAdapter.class));
         ReflectionHelpers.setField(mFragment, "mSelectedCycle", tenDaysAgo);
@@ -420,7 +456,10 @@
         ShadowDataUsageUtils.HAS_SIM = false;
         ShadowSubscriptionManager.setDefaultDataSubscriptionId(
                 SubscriptionManager.INVALID_SUBSCRIPTION_ID);
-        mFragment = spy(new AppDataUsage());
+        mFragment = spy(new AppDataUsage() {
+            @Override
+            public boolean isSimHardwareVisible(Context context) { return true; }
+        });
         doReturn(Robolectric.setupActivity(FragmentActivity.class)).when(mFragment).getActivity();
         doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
         final UidDetailProvider uidDetailProvider = mock(UidDetailProvider.class);
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
index 6d10814..68d49fc 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
@@ -29,12 +29,15 @@
 
 import android.app.usage.NetworkStatsManager;
 import android.content.Context;
+import android.content.res.Resources;
 import android.net.NetworkPolicyManager;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
 import androidx.fragment.app.FragmentActivity;
 
+import com.android.settings.R;
+
 import com.android.settings.testutils.shadow.ShadowDashboardFragment;
 import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
 import com.android.settings.testutils.shadow.ShadowUserManager;
@@ -70,6 +73,7 @@
     private NetworkStatsManager mNetworkStatsManager;
     private TelephonyManager mTelephonyManager;
     private Context mContext;
+    private Resources mResources;
     private FragmentActivity mActivity;
 
     /**
@@ -84,13 +88,18 @@
         ShadowUserManager.getShadow().setIsAdminUser(true);
         shadowContext.setSystemService(Context.NETWORK_POLICY_SERVICE, mNetworkPolicyManager);
 
-        mContext = RuntimeEnvironment.application;
+        mContext = spy(RuntimeEnvironment.application);
         mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
         final ShadowTelephonyManager shadowTelephonyManager = Shadows.shadowOf(mTelephonyManager);
         shadowTelephonyManager.setTelephonyManagerForSubscriptionId(
                 SubscriptionManager.INVALID_SUBSCRIPTION_ID, mTelephonyManager);
         shadowTelephonyManager.setTelephonyManagerForSubscriptionId(1, mTelephonyManager);
         mActivity = spy(Robolectric.buildActivity(FragmentActivity.class).get());
+
+        mResources = spy(mContext.getResources());
+        doReturn(mResources).when(mContext).getResources();
+        doReturn(true).when(mResources).getBoolean(R.bool.config_show_sim_info);
+
         doReturn(mNetworkStatsManager).when(mActivity).getSystemService(NetworkStatsManager.class);
     }
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 7c56ab3..90e8caf 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -434,8 +434,7 @@
 
         ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
         verify(mEntityHeaderController).setSummary(captor.capture());
-        assertThat(captor.getValue().toString())
-                .isEqualTo("No usage from last full charge");
+        assertThat(captor.getValue().toString()).isEmpty();
     }
 
     @Test
@@ -467,7 +466,7 @@
         ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
         verify(mEntityHeaderController).setSummary(captor.capture());
         assertThat(captor.getValue().toString())
-                .isEqualTo("2 min background from last full charge");
+                .isEqualTo("2 min background since last full charge");
     }
 
     @Test
@@ -485,7 +484,7 @@
         ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
         verify(mEntityHeaderController).setSummary(captor.capture());
         assertThat(captor.getValue().toString())
-                .isEqualTo("Background less than a minute from last full charge");
+                .isEqualTo("Background less than a minute since last full charge");
     }
 
     @Test
@@ -504,7 +503,7 @@
         ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
         verify(mEntityHeaderController).setSummary(captor.capture());
         assertThat(captor.getValue().toString())
-                .isEqualTo("Total less than a minute from last full charge");
+                .isEqualTo("Total less than a minute since last full charge");
     }
 
     @Test
@@ -520,8 +519,8 @@
 
         ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
         verify(mEntityHeaderController).setSummary(captor.capture());
-        assertThat(captor.getValue().toString())
-                .isEqualTo("1 min total • background less than a minute\nfrom last full charge");
+        assertThat(captor.getValue().toString()).isEqualTo(
+                "1 min total • background less than a minute\nsince last full charge");
     }
 
     @Test
@@ -538,7 +537,7 @@
         ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
         verify(mEntityHeaderController).setSummary(captor.capture());
         assertThat(captor.getValue().toString())
-                .isEqualTo("1 min total from last full charge");
+                .isEqualTo("1 min total since last full charge");
     }
 
     @Test
@@ -555,7 +554,7 @@
         ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
         verify(mEntityHeaderController).setSummary(captor.capture());
         assertThat(captor.getValue().toString())
-                .isEqualTo("6 min total • 4 min background\nfrom last full charge");
+                .isEqualTo("6 min total • 4 min background\nsince last full charge");
     }
 
     @Test
@@ -742,7 +741,8 @@
     public void startBatteryDetailPage_noBatteryUsage_hasBasicData() {
         final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
 
-        AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment, PACKAGE_NAME[0]);
+        AdvancedPowerUsageDetail.startBatteryDetailPage(
+                mActivity, mFragment, PACKAGE_NAME[0], UserHandle.OWNER);
 
         verify(mActivity).startActivity(captor.capture());
 
@@ -760,7 +760,8 @@
             PackageManager.NameNotFoundException {
         doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */);
 
-        AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment, PACKAGE_NAME[0]);
+        AdvancedPowerUsageDetail.startBatteryDetailPage(
+                mActivity, mFragment, PACKAGE_NAME[0], UserHandle.OWNER);
 
         assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
     }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
index df9d865..7ac8fde 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
@@ -329,6 +329,18 @@
     public void getDailyTimestamps_notEnoughData_returnEmptyList() {
         assertThat(DataProcessor.getDailyTimestamps(new ArrayList<>())).isEmpty();
         assertThat(DataProcessor.getDailyTimestamps(List.of(100L))).isEmpty();
+        assertThat(DataProcessor.getDailyTimestamps(List.of(100L, 5400000L))).isEmpty();
+    }
+
+    @Test
+    public void getDailyTimestamps_OneHourDataPerDay_returnEmptyList() {
+        // Timezone GMT+8
+        final List<Long> timestamps = List.of(
+                1641049200000L, // 2022-01-01 23:00:00
+                1641052800000L, // 2022-01-02 00:00:00
+                1641056400000L  // 2022-01-02 01:00:00
+        );
+        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEmpty();
     }
 
     @Test
@@ -353,14 +365,33 @@
     public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
         // Timezone GMT+8
         final List<Long> timestamps = List.of(
-                1640988000000L, // 2022-01-01 06:00:00
+                1641045600000L, // 2022-01-01 22:00:00
+                1641060000000L, // 2022-01-02 02:00:00
+                1641160800000L, // 2022-01-03 06:00:00
+                1641232800000L  // 2022-01-04 02:00:00
+        );
+
+        final List<Long> expectedTimestamps = List.of(
+                1641045600000L, // 2022-01-01 22:00:00
+                1641052800000L, // 2022-01-02 00:00:00
+                1641139200000L, // 2022-01-03 00:00:00
+                1641225600000L, // 2022-01-04 00:00:00
+                1641232800000L  // 2022-01-04 02:00:00
+        );
+        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
+    }
+
+    @Test
+    public void getDailyTimestamps_FirstDayOneHourData_returnExpectedList() {
+        // Timezone GMT+8
+        final List<Long> timestamps = List.of(
+                1641049200000L, // 2022-01-01 23:00:00
                 1641060000000L, // 2022-01-02 02:00:00
                 1641160800000L, // 2022-01-03 06:00:00
                 1641254400000L  // 2022-01-04 08:00:00
         );
 
         final List<Long> expectedTimestamps = List.of(
-                1640988000000L, // 2022-01-01 06:00:00
                 1641052800000L, // 2022-01-02 00:00:00
                 1641139200000L, // 2022-01-03 00:00:00
                 1641225600000L, // 2022-01-04 00:00:00
@@ -370,6 +401,44 @@
     }
 
     @Test
+    public void getDailyTimestamps_LastDayNoData_returnExpectedList() {
+        // Timezone GMT+8
+        final List<Long> timestamps = List.of(
+                1640988000000L, // 2022-01-01 06:00:00
+                1641060000000L, // 2022-01-02 02:00:00
+                1641160800000L, // 2022-01-03 06:00:00
+                1641225600000L  // 2022-01-04 00:00:00
+        );
+
+        final List<Long> expectedTimestamps = List.of(
+                1640988000000L, // 2022-01-01 06:00:00
+                1641052800000L, // 2022-01-02 00:00:00
+                1641139200000L, // 2022-01-03 00:00:00
+                1641225600000L  // 2022-01-04 00:00:00
+        );
+        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
+    }
+
+    @Test
+    public void getDailyTimestamps_LastDayOneHourData_returnExpectedList() {
+        // Timezone GMT+8
+        final List<Long> timestamps = List.of(
+                1640988000000L, // 2022-01-01 06:00:00
+                1641060000000L, // 2022-01-02 02:00:00
+                1641160800000L, // 2022-01-03 06:00:00
+                1641229200000L  // 2022-01-04 01:00:00
+        );
+
+        final List<Long> expectedTimestamps = List.of(
+                1640988000000L, // 2022-01-01 06:00:00
+                1641052800000L, // 2022-01-02 00:00:00
+                1641139200000L, // 2022-01-03 00:00:00
+                1641225600000L  // 2022-01-04 00:00:00
+        );
+        assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
+    }
+
+    @Test
     public void isFromFullCharge_emptyData_returnFalse() {
         assertThat(DataProcessor.isFromFullCharge(null)).isFalse();
         assertThat(DataProcessor.isFromFullCharge(new HashMap<>())).isFalse();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
index c049497..fa049f8 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
@@ -142,7 +142,7 @@
     public void initPreference_hasCorrectSummary() {
         mFragment.initPreference();
 
-        verify(mBatteryUsagePreference).setSummary("View usage from last full charge");
+        verify(mBatteryUsagePreference).setSummary("View usage since last full charge");
     }
 
     @Test
