Merge "Import translations. DO NOT MERGE ANYWHERE" into main
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c5d61fa..ba4ff3c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -886,7 +886,7 @@
 
     <!-- Biometric settings --><skip />
     <!-- Title shown for menu item that launches biometric settings. [CHAR LIMIT=66] -->
-    <string name="security_settings_biometric_preference_title">Face &amp; Fingerprint Unlock</string>
+    <string name="security_settings_biometric_preference_title">Fingerprint &amp; Face Unlock</string>
     <!-- Title shown for work menu item that launches biometric settings. [CHAR LIMIT=66] -->
     <string name="security_settings_work_biometric_preference_title">Face &amp; Fingerprint Unlock for work</string>
     <!-- Message shown in summary field of biometric settings. [CHAR LIMIT=66] -->
@@ -1238,14 +1238,8 @@
     <!-- Title for preference that guides the user to skip Face Unlock setup [CHAR LIMIT=60]-->
     <string name="face_unlock_skip_face">Continue without Face Unlock</string>
 
-    <!-- Title for preference that guides the user through creating a backup unlock pattern for biometrics unlock [CHAR LIMIT=45]-->
-    <string name="biometrics_unlock_set_unlock_pattern">Pattern \u2022 Face \u2022 Fingerprint</string>
-    <!-- Title for preference that guides the user through creating a backup unlock PIN for biometrics unlock [CHAR LIMIT=45]-->
-    <string name="biometrics_unlock_set_unlock_pin">PIN \u2022 Face \u2022 Fingerprint</string>
-    <!-- Title for preference that guides the user through creating a backup unlock password for biometrics unlock [CHAR LIMIT=45]-->
-    <string name="biometrics_unlock_set_unlock_password">Password \u2022 Face \u2022 Fingerprint</string>
     <!-- Title for preference that guides the user to skip face unlock setup [CHAR LIMIT=60]-->
-    <string name="biometrics_unlock_skip_biometrics">Continue without face or fingerprint</string>
+    <string name="biometrics_unlock_skip_biometrics">Continue without fingerprint or face</string>
 
     <!-- Summary for "Configure lockscreen" when lock screen is off [CHAR LIMIT=45] -->
     <string name="unlock_set_unlock_mode_off">None</string>
@@ -10565,7 +10559,7 @@
     <!-- Debugging developer settings: enable angle as system driver? [CHAR LIMIT=50] -->
     <string name="enable_angle_as_system_driver">Enable ANGLE</string>
     <!-- Debugging developer settings: enable angle as system driver summary [CHAR LIMIT=NONE] -->
-    <string name="enable_angle_as_system_driver_summary">Enable ANGLE as system OpenGL ES driver</string>
+    <string name="enable_angle_as_system_driver_summary">Enable ANGLE as default OpenGL ES driver. Enabling it on incompatible devices may break some applications.</string>
     <!--Dialog body text used to explain a reboot is required after changing ANGLE as system GLES driver setting-->
     <string name="reboot_dialog_enable_angle_as_system_driver">A reboot is required to change the system OpenGL ES driver</string>
 
diff --git a/src/com/android/settings/biometrics/BiometricUtils.java b/src/com/android/settings/biometrics/BiometricUtils.java
index 5cd7405..6b6d952 100644
--- a/src/com/android/settings/biometrics/BiometricUtils.java
+++ b/src/com/android/settings/biometrics/BiometricUtils.java
@@ -533,17 +533,18 @@
         // Assume the flow is "Screen Lock" + "Face" + "Fingerprint"
         ssb.append(bidi.unicodeWrap(screenLock));
 
+        if (hasFingerprint) {
+            ssb.append(bidi.unicodeWrap(SEPARATOR));
+            ssb.append(bidi.unicodeWrap(
+                    capitalize(context.getString(R.string.security_settings_fingerprint))));
+        }
+
         if (isFaceSupported) {
             ssb.append(bidi.unicodeWrap(SEPARATOR));
             ssb.append(bidi.unicodeWrap(
                     capitalize(context.getString(R.string.keywords_face_settings))));
         }
 
-        if (hasFingerprint) {
-            ssb.append(bidi.unicodeWrap(SEPARATOR));
-            ssb.append(bidi.unicodeWrap(
-                    capitalize(context.getString(R.string.security_settings_fingerprint))));
-        }
         return ssb.toString();
     }
 
diff --git a/src/com/android/settings/fuelgauge/AutoRestrictionPreferenceController.java b/src/com/android/settings/fuelgauge/AutoRestrictionPreferenceController.java
index 26fd398..25415f3 100644
--- a/src/com/android/settings/fuelgauge/AutoRestrictionPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/AutoRestrictionPreferenceController.java
@@ -32,12 +32,12 @@
     private static final String KEY_SMART_BATTERY = "auto_restriction";
     private static final int ON = 1;
     private static final int OFF = 0;
-    private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
+    private final PowerUsageFeatureProvider mPowerUsageFeatureProvider;
 
     public AutoRestrictionPreferenceController(Context context) {
         super(context, KEY_SMART_BATTERY);
-        mPowerUsageFeatureProvider = FeatureFactory.getFactory(
-                context).getPowerUsageFeatureProvider(context);
+        mPowerUsageFeatureProvider =
+                FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
index 50f1b90..4dabe12 100644
--- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
+++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
@@ -111,8 +111,8 @@
         writeBackupData(data, KEY_BUILD_MANUFACTURER, Build.MANUFACTURER);
         writeBackupData(data, KEY_BUILD_FINGERPRINT, Build.FINGERPRINT);
         // Add customized device build metadata fields.
-        final PowerUsageFeatureProvider provider = FeatureFactory.getFactory(mContext)
-                .getPowerUsageFeatureProvider(mContext);
+        final PowerUsageFeatureProvider provider =
+                FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
         writeBackupData(data, KEY_BUILD_METADATA_1, provider.getBuildMetadata1(mContext));
         writeBackupData(data, KEY_BUILD_METADATA_2, provider.getBuildMetadata2(mContext));
 
@@ -260,8 +260,8 @@
         if (mOptimizationModeBytes == null || mOptimizationModeBytes.length == 0) {
             return;
         }
-        final PowerUsageFeatureProvider provider = FeatureFactory.getFactory(mContext)
-                .getPowerUsageFeatureProvider(mContext);
+        final PowerUsageFeatureProvider provider =
+                FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
         if (!provider.isValidToRestoreOptimizationMode(mDeviceBuildInfoMap)) {
             return;
         }
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index 27d7154..9f8c2d0 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -104,8 +104,8 @@
 
                 // Add projection if we have an estimate.
                 if (remainingTimeUs != 0) {
-                    PowerUsageFeatureProvider provider = FeatureFactory.getFactory(context)
-                            .getPowerUsageFeatureProvider(context);
+                    PowerUsageFeatureProvider provider =
+                            FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
                     if (!mCharging && provider.isEnhancedBatteryPredictionEnabled(context)) {
                         points = provider.getEnhancedBatteryPredictionCurve(context, startTime);
                     } else {
@@ -201,7 +201,7 @@
 
         final long startTime = System.currentTimeMillis();
         PowerUsageFeatureProvider provider =
-                FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
+                FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
         final long elapsedRealtimeUs =
                 PowerUtil.convertMsToUs(SystemClock.elapsedRealtime());
 
@@ -211,8 +211,7 @@
         final boolean discharging =
                 batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0;
 
-        if (discharging && provider != null
-                && provider.isEnhancedBatteryPredictionEnabled(context)) {
+        if (discharging && provider.isEnhancedBatteryPredictionEnabled(context)) {
             Estimate estimate = provider.getEnhancedBatteryPrediction(context);
             if (estimate != null) {
                 Estimate.storeCachedEstimate(context, estimate);
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 1f7e3ec..171c76b 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -135,8 +135,8 @@
         mContext = context;
         mPackageManager = context.getPackageManager();
         mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
-        mPowerUsageFeatureProvider = FeatureFactory.getFactory(context)
-                .getPowerUsageFeatureProvider(context);
+        mPowerUsageFeatureProvider =
+                FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
     }
 
     public long getProcessTimeMs(@StatusType int type, @Nullable BatteryStats.Uid uid,
@@ -626,8 +626,8 @@
             if (Settings.Global.getInt(context.getContentResolver(),
                     SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0) == 1) {
                 return DockDefenderMode.TEMPORARILY_BYPASSED;
-            } else if (batteryInfo.isBatteryDefender && FeatureFactory.getFactory(context)
-                    .getPowerUsageFeatureProvider(context)
+            } else if (batteryInfo.isBatteryDefender && FeatureFactory.getFeatureFactory()
+                    .getPowerUsageFeatureProvider()
                     .isExtraDefend()) {
                 return DockDefenderMode.ACTIVE;
             } else if (!batteryInfo.isBatteryDefender) {
diff --git a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java
index 62f2780..dda83a8 100644
--- a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java
+++ b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java
@@ -48,7 +48,7 @@
     public List<BatteryInfo> loadInBackground() {
         Context context = getContext();
         PowerUsageFeatureProvider powerUsageFeatureProvider =
-                FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
+                FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
 
         // get stuff we'll need for both BatteryInfo
         final long elapsedRealtimeUs = PowerUtil.convertMsToUs(
diff --git a/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java
index 26c0ab9..630cf82 100644
--- a/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java
@@ -37,12 +37,12 @@
     private static final String KEY_SMART_BATTERY = "smart_battery";
     private static final int ON = 1;
     private static final int OFF = 0;
-    private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
+    private final PowerUsageFeatureProvider mPowerUsageFeatureProvider;
 
     public SmartBatteryPreferenceController(Context context) {
         super(context, KEY_SMART_BATTERY);
-        mPowerUsageFeatureProvider = FeatureFactory.getFactory(context)
-                .getPowerUsageFeatureProvider(context);
+        mPowerUsageFeatureProvider =
+                FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
index 93a95f3..34fd72d 100644
--- a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
+++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
@@ -98,10 +98,10 @@
             final UserManager userManager = getSystemService(UserManager.class);
             final PowerAllowlistBackend powerAllowlistBackend =
                     PowerAllowlistBackend.getInstance(context);
-            final PowerUsageFeatureProvider powerUsageFeatureProvider = FeatureFactory
-                    .getFactory(this).getPowerUsageFeatureProvider(this);
-            final MetricsFeatureProvider metricsFeatureProvider = FeatureFactory
-                    .getFactory(this).getMetricsFeatureProvider();
+            final PowerUsageFeatureProvider powerUsageFeatureProvider =
+                    FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
+            final MetricsFeatureProvider metricsFeatureProvider =
+                    FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
 
             for (JobWorkItem item = dequeueWork(params); item != null; item = dequeueWork(params)) {
                 saveAnomalyToDatabase(context, userManager,
diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java
index 8b7d4c1..55d2ee4 100644
--- a/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java
+++ b/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java
@@ -38,7 +38,7 @@
     @Override
     public BatteryTip detect() {
         final boolean isBasicBatteryDefend = mBatteryInfo.isBatteryDefender
-                && !FeatureFactory.getFactory(mContext).getPowerUsageFeatureProvider(mContext)
+                && !FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider()
                 .isExtraDefend();
         final int state = isBasicBatteryDefend
                 ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE;
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTip.java
index 4a8f98b..536e5f8 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTip.java
@@ -109,8 +109,8 @@
 
     private void resumeCharging(Context context) {
         final Intent intent =
-                FeatureFactory.getFactory(context)
-                        .getPowerUsageFeatureProvider(context)
+                FeatureFactory.getFeatureFactory()
+                        .getPowerUsageFeatureProvider()
                         .getResumeChargeIntent(false);
         if (intent != null) {
             context.sendBroadcast(intent);
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java
index 327f974..c8cb8f2 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java
@@ -153,8 +153,8 @@
 
     private void resumeCharging(Context context) {
         final Intent intent =
-                FeatureFactory.getFactory(context)
-                        .getPowerUsageFeatureProvider(context)
+                FeatureFactory.getFeatureFactory()
+                        .getPowerUsageFeatureProvider()
                         .getResumeChargeIntent(true);
         if (intent != null) {
             context.sendBroadcast(intent);
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
index 445a5d1..0fae92d 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
@@ -61,6 +61,7 @@
     private static final String TAG = "BatteryChartView";
 
     private static final int DIVIDER_COLOR = Color.parseColor("#CDCCC5");
+    private static final int HORIZONTAL_DIVIDER_COUNT = 5;
 
     /** A callback listener for selected group index is updated. */
     public interface OnSelectListener {
@@ -335,23 +336,24 @@
     private void drawHorizontalDividers(Canvas canvas) {
         final int width = getWidth() - mIndent.right;
         final int height = getHeight() - mIndent.top - mIndent.bottom;
-        // Draws the top divider line for 100% curve.
-        float offsetY = mIndent.top + mDividerWidth * .5f;
+        final float topOffsetY = mIndent.top + mDividerWidth * .5f;
+        final float bottomOffsetY = mIndent.top + (height - mDividerHeight - mDividerWidth * .5f);
+        final float availableSpace = bottomOffsetY - topOffsetY;
+
         mDividerPaint.setColor(DIVIDER_COLOR);
-        canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
-        drawPercentage(canvas, /*index=*/ 0, offsetY);
+        final float dividerOffsetUnit =
+                availableSpace / (float) (HORIZONTAL_DIVIDER_COUNT - 1);
 
-        // Draws the center divider line for 50% curve.
-        final float availableSpace =
-                height - mDividerWidth * 2 - mTrapezoidVOffset - mDividerHeight;
-        offsetY = mIndent.top + mDividerWidth + availableSpace * .5f;
-        canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
-        drawPercentage(canvas, /*index=*/ 1, offsetY);
+        // Draws 5 divider lines.
+        for (int index = 0; index < HORIZONTAL_DIVIDER_COUNT; index++) {
+            float offsetY = topOffsetY + dividerOffsetUnit * index;
+            canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
 
-        // Draws the bottom divider line for 0% curve.
-        offsetY = mIndent.top + (height - mDividerHeight - mDividerWidth * .5f);
-        canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
-        drawPercentage(canvas, /*index=*/ 2, offsetY);
+            //  Draws percentage text only for 100% / 50% / 0%
+            if (index % 2 == 0) {
+                drawPercentage(canvas, /*index=*/ (index + 1) / 2, offsetY);
+            }
+        }
     }
 
     private void drawPercentage(Canvas canvas, int index, float offsetY) {
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
index 47ae568..90a5f19 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
@@ -53,7 +53,7 @@
 
         if (!isAccumulated) {
             final PowerUsageFeatureProvider featureProvider =
-                    FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
+                    FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
             purgeBatteryDiffData(featureProvider);
             combineBatteryDiffEntry(
                     context, featureProvider, systemAppsPackageNames, systemAppsUids);
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java
index 7f86b7c..86538ee 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java
@@ -252,33 +252,6 @@
         return mPowerComponentId;
     }
 
-    void getQuickNameIconForUid(
-            final int uid, final String[] packages, final boolean loadDataInBackground) {
-        // Locale sync to system config in Settings
-        final Locale locale = Locale.getDefault();
-        if (sCurrentLocale != locale) {
-            clearUidCache();
-            sCurrentLocale = locale;
-        }
-
-        final String uidString = Integer.toString(uid);
-        if (sUidCache.containsKey(uidString)) {
-            UidToDetail utd = sUidCache.get(uidString);
-            mDefaultPackageName = utd.mPackageName;
-            mName = utd.mName;
-            mIcon = utd.mIcon;
-            return;
-        }
-
-        if (packages == null || packages.length == 0) {
-            final NameAndIcon nameAndIcon = getNameAndIconFromUid(mContext, mName, uid);
-            mIcon = nameAndIcon.mIcon;
-            mName = nameAndIcon.mName;
-        } else {
-            mIcon = mContext.getPackageManager().getDefaultActivityIcon();
-        }
-    }
-
     /** Loads the app label and icon image and stores into the cache. */
     public static NameAndIcon loadNameAndIcon(
             Context context,
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBroadcastReceiver.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBroadcastReceiver.java
index ed5f182..ab5ab8a 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBroadcastReceiver.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBroadcastReceiver.java
@@ -64,8 +64,8 @@
         final String action = intent.getAction();
         Log.d(TAG, "onReceive:" + action);
         DatabaseUtils.recordDateTime(context, action);
-        final String fullChargeIntentAction = FeatureFactory.getFactory(context)
-                .getPowerUsageFeatureProvider(context)
+        final String fullChargeIntentAction = FeatureFactory.getFeatureFactory()
+                .getPowerUsageFeatureProvider()
                 .getFullChargeIntentAction();
         switch (action) {
             case Intent.ACTION_BATTERY_LEVEL_CHANGED:
@@ -107,8 +107,8 @@
         }
 
         final boolean delayHourlyJobWhenBooting =
-                FeatureFactory.getFactory(context)
-                        .getPowerUsageFeatureProvider(context)
+                FeatureFactory.getFeatureFactory()
+                        .getPowerUsageFeatureProvider()
                         .delayHourlyJobWhenBooting();
         final long broadcastDelay = sBroadcastDelayFromBoot - SystemClock.elapsedRealtime();
         // If current boot time is smaller than expected delay, cancel sending the broadcast.
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiver.java b/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiver.java
index 920670f..67462b3 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiver.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiver.java
@@ -91,8 +91,8 @@
 
     private long getRescheduleTimeForBootAction(Context context) {
         final boolean delayHourlyJobWhenBooting =
-                FeatureFactory.getFactory(context)
-                        .getPowerUsageFeatureProvider(context)
+                FeatureFactory.getFeatureFactory()
+                        .getPowerUsageFeatureProvider()
                         .delayHourlyJobWhenBooting();
         return delayHourlyJobWhenBooting
                 ? RESCHEDULE_FOR_BOOT_ACTION_WITH_DELAY
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
index 6914c30..6de3f59 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
@@ -321,8 +321,8 @@
         long numEventsFetched = 0;
         long numAllEventsFetched = 0;
         final Set<String> ignoreScreenOnTimeTaskRootSet =
-                FeatureFactory.getFactory(context)
-                        .getPowerUsageFeatureProvider(context)
+                FeatureFactory.getFeatureFactory()
+                        .getPowerUsageFeatureProvider()
                         .getIgnoreScreenOnTimeTaskRootSet();
         for (final long userId : usageEventsMap.keySet()) {
             final UsageEvents usageEvents = usageEventsMap.get(userId);
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobManager.java b/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobManager.java
index 8c0e66c..0e15093 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobManager.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobManager.java
@@ -97,8 +97,8 @@
     static long getTriggerAtMillis(Context context, Clock clock, final boolean fromBoot) {
         long currentTimeMillis = clock.millis();
         final boolean delayHourlyJobWhenBooting =
-                FeatureFactory.getFactory(context)
-                        .getPowerUsageFeatureProvider(context)
+                FeatureFactory.getFeatureFactory()
+                        .getPowerUsageFeatureProvider()
                         .delayHourlyJobWhenBooting();
         // Rounds to the previous nearest time slot and shifts to the next one.
         long timeSlotUnit = Duration.ofMinutes(DATA_FETCH_INTERVAL_MINUTE).toMillis();
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java
index 0bec490..a0c5843 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java
@@ -246,9 +246,7 @@
 
     @VisibleForTesting
     void initFeatureProvider() {
-        final Context context = getContext();
-        mPowerFeatureProvider = FeatureFactory.getFactory(context)
-                .getPowerUsageFeatureProvider(context);
+        mPowerFeatureProvider = FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/overlay/FeatureFactory.kt b/src/com/android/settings/overlay/FeatureFactory.kt
index 3e0d088..9b1f0f4 100644
--- a/src/com/android/settings/overlay/FeatureFactory.kt
+++ b/src/com/android/settings/overlay/FeatureFactory.kt
@@ -68,7 +68,7 @@
 
     abstract val metricsFeatureProvider: MetricsFeatureProvider
 
-    abstract fun getPowerUsageFeatureProvider(context: Context): PowerUsageFeatureProvider
+    abstract val powerUsageFeatureProvider: PowerUsageFeatureProvider
 
     /**
      * Retrieves implementation for Battery Status feature.
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.kt b/src/com/android/settings/overlay/FeatureFactoryImpl.kt
index 9955e63..f627c4f 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.kt
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.kt
@@ -79,8 +79,6 @@
         )
     }
 
-    private val powerUsageFeatureProvider by lazy { PowerUsageFeatureProviderImpl(appContext) }
-
     private val userFeatureProvider by lazy { UserFeatureProviderImpl(appContext) }
 
     private val contextualCardFeatureProvider by lazy {
@@ -92,7 +90,7 @@
 
     override val metricsFeatureProvider by lazy { SettingsMetricsFeatureProvider() }
 
-    override fun getPowerUsageFeatureProvider(context: Context) = powerUsageFeatureProvider
+    override val powerUsageFeatureProvider by lazy { PowerUsageFeatureProviderImpl(appContext) }
 
     override val batteryStatusFeatureProvider by lazy {
         BatteryStatusFeatureProviderImpl(appContext)
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java
index 0dfabb9..b787239 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java
@@ -57,7 +57,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
-        FakeFeatureFactory.setupForTest().getPowerUsageFeatureProvider(mContext);
+        FakeFeatureFactory.setupForTest().getPowerUsageFeatureProvider();
 
         doReturn(mContext).when(mContext).getApplicationContext();
         when(mContext.getSystemService(eq(Context.BATTERY_STATS_SERVICE)))
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java
index 07b3b34..108d6e2 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java
@@ -51,8 +51,6 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
-import java.util.Locale;
-
 @RunWith(RobolectricTestRunner.class)
 public class BatteryEntryTest {
 
@@ -235,17 +233,6 @@
 
     @Ignore
     @Test
-    public void testUidCache_switchLocale_shouldCleanCache() {
-        Locale.setDefault(new Locale("en_US"));
-        BatteryEntry.sUidCache.put(Integer.toString(APP_UID), null);
-        assertThat(BatteryEntry.sUidCache).isNotEmpty();
-
-        Locale.setDefault(new Locale("zh_TW"));
-        createBatteryEntryForApp(null, null, HIGH_DRAIN_PACKAGE);
-        assertThat(BatteryEntry.sUidCache).isEmpty(); // check if cache is clear
-    }
-
-    @Test
     public void getKey_UidBatteryConsumer() {
         final BatteryEntry entry = createBatteryEntryForApp(null, null, null);
         final String key = entry.getKey();
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
index f598e1c..5db998a 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
@@ -60,6 +60,7 @@
 import com.android.internal.widget.LockscreenCredential;
 import com.android.settings.R;
 import com.android.settings.biometrics.BiometricEnrollBase;
+import com.android.settings.biometrics.BiometricUtils;
 import com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment;
 import com.android.settings.search.SearchFeatureProvider;
 import com.android.settings.testutils.FakeFeatureFactory;
@@ -543,7 +544,7 @@
     }
 
     @Test
-    public void updatePreferenceText_supportBiometrics_showFaceAndFingerprint() {
+    public void updatePreferenceText_supportBiometrics_setScreenLockFingerprintFace_inOrder() {
         ShadowStorageManager.setIsFileEncrypted(false);
         final Intent intent = new Intent().putExtra(EXTRA_KEY_FOR_BIOMETRICS, true);
         initActivity(intent);
@@ -552,19 +553,29 @@
                 R.string.security_settings_fingerprint));
         final String supportFace = capitalize(mActivity.getResources().getString(
                 R.string.keywords_face_settings));
-        String pinTitle =
+
+        // The strings of golden copy
+        final String pinFingerprintFace = mActivity.getText(R.string.unlock_set_unlock_pin_title)
+                + BiometricUtils.SEPARATOR + supportFingerprint + BiometricUtils.SEPARATOR
+                + supportFace;
+        final String patternFingerprintFace = mActivity.getText(
+                R.string.unlock_set_unlock_pattern_title) + BiometricUtils.SEPARATOR
+                + supportFingerprint + BiometricUtils.SEPARATOR + supportFace;
+        final String passwordFingerprintFace = mActivity.getText(
+                R.string.unlock_set_unlock_password_title) + BiometricUtils.SEPARATOR
+                + supportFingerprint + BiometricUtils.SEPARATOR + supportFace;
+
+        // The strings obtain from preferences
+        final String pinTitle =
                 (String) mFragment.findPreference(ScreenLockType.PIN.preferenceKey).getTitle();
-        String patternTitle =
+        final String patternTitle =
                 (String) mFragment.findPreference(ScreenLockType.PATTERN.preferenceKey).getTitle();
-        String passwordTitle =
+        final String passwordTitle =
                 (String) mFragment.findPreference(ScreenLockType.PASSWORD.preferenceKey).getTitle();
 
-        assertThat(pinTitle).contains(supportFingerprint);
-        assertThat(pinTitle).contains(supportFace);
-        assertThat(patternTitle).contains(supportFingerprint);
-        assertThat(patternTitle).contains(supportFace);
-        assertThat(passwordTitle).contains(supportFingerprint);
-        assertThat(passwordTitle).contains(supportFace);
+        assertThat(pinTitle).isEqualTo(pinFingerprintFace);
+        assertThat(patternTitle).isEqualTo(patternFingerprintFace);
+        assertThat(passwordTitle).isEqualTo(passwordFingerprintFace);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
index d3c09d0..7cfd6b1 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
@@ -74,7 +74,6 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowDrawable;
 
-@Ignore
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {
         SettingsShadowResources.class,
@@ -414,6 +413,7 @@
                 "Must be at least 6 characters");
     }
 
+    @Ignore
     @Test
     public void processAndValidatePasswordRequirements_autoPinDisabled_defaultPinMinimumLength() {
         DeviceConfig.setProperty(NAMESPACE_AUTO_PIN_CONFIRMATION, FLAG_ENABLE_AUTO_PIN_CONFIRMATION,
@@ -543,6 +543,7 @@
         assertThat(pinAutoConfirmOption.isChecked()).isFalse();
     }
 
+    @Ignore
     @Test
     public void autoPinConfirmOption_featureDisabled_shouldRemainInvisibleAndUnchecked() {
         DeviceConfig.setProperty(NAMESPACE_AUTO_PIN_CONFIRMATION, FLAG_ENABLE_AUTO_PIN_CONFIRMATION,
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index 5bac5226..0f4c255 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -162,8 +162,9 @@
         return batterySettingsFeatureProvider;
     }
 
+    @NotNull
     @Override
-    public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) {
+    public PowerUsageFeatureProvider getPowerUsageFeatureProvider() {
         return powerUsageFeatureProvider;
     }
 
diff --git a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
index 2f3885b..f732bce 100644
--- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
+++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
@@ -67,9 +67,8 @@
 
     override val metricsFeatureProvider = mockMetricsFeatureProvider
 
-    override fun getPowerUsageFeatureProvider(context: Context): PowerUsageFeatureProvider {
-        TODO("Not yet implemented")
-    }
+    override val powerUsageFeatureProvider: PowerUsageFeatureProvider
+        get() = TODO("Not yet implemented")
 
     override val batteryStatusFeatureProvider: BatteryStatusFeatureProvider
         get() = TODO("Not yet implemented")
diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
index ad62cd7..e0d3eca 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -161,8 +161,9 @@
         return batterySettingsFeatureProvider;
     }
 
+    @NotNull
     @Override
-    public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) {
+    public PowerUsageFeatureProvider getPowerUsageFeatureProvider() {
         return powerUsageFeatureProvider;
     }