diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0ed126f..58ac9b7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3319,6 +3319,22 @@
                        android:value="@string/menu_key_notifications"/>
         </activity>
 
+        <!-- Application-level notification settings page, same as above but only accessible
+             internally from system server -->
+        <activity android:name="Settings$NotificationReviewPermissionsActivity"
+                  android:label="@string/app_notifications_title"
+                  android:icon="@drawable/ic_notifications"
+                  android:exported="false">
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.ALL_APPS_NOTIFICATION_SETTINGS_FOR_REVIEW" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                       android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
+        </activity>
+
         <!-- Show application-level notification settings (app passed in as extras) -->
         <activity android:name="Settings$AppNotificationSettingsActivity"
                 android:exported="true">
diff --git a/res/layout/manage_apps_filter_spinner.xml b/res/layout/manage_apps_filter_spinner.xml
index a2d0e12..bf55503 100644
--- a/res/layout/manage_apps_filter_spinner.xml
+++ b/res/layout/manage_apps_filter_spinner.xml
@@ -26,5 +26,6 @@
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
         android:layout_marginStart="24dp"
+        android:layout_marginTop="8dp"
         android:theme="@style/Widget.PopupWindow.Settings"/>
 </FrameLayout>
diff --git a/res/values-b+sr+Latn/arrays.xml b/res/values-b+sr+Latn/arrays.xml
index 3c93011..b2c2c95 100644
--- a/res/values-b+sr+Latn/arrays.xml
+++ b/res/values-b+sr+Latn/arrays.xml
@@ -409,8 +409,8 @@
   </string-array>
   <string-array name="captioning_preset_selector_titles">
     <item msgid="3880932435325583041">"Podešava aplikacija:"</item>
-    <item msgid="8719204526359229387">"Belo na crno"</item>
-    <item msgid="5410164687403735103">"Crno na belo"</item>
+    <item msgid="8719204526359229387">"Belo na crnom"</item>
+    <item msgid="5410164687403735103">"Crno na belom"</item>
     <item msgid="1119043472912497241">"Žuto na crno"</item>
     <item msgid="2836895041823327816">"Žuto na plavo"</item>
     <item msgid="747238414788976867">"Prilagođeno"</item>
diff --git a/res/values-eu/arrays.xml b/res/values-eu/arrays.xml
index 42f092f..2951b00 100644
--- a/res/values-eu/arrays.xml
+++ b/res/values-eu/arrays.xml
@@ -509,7 +509,7 @@
     <item msgid="2047166446768045816">"Tratatu neurtu gabeko sare gisa"</item>
   </string-array>
   <string-array name="wifi_privacy_entries">
-    <item msgid="3485945604919292489">"Erabili ausaz aukeratutako MAC helbidea (lehenetsia)"</item>
+    <item msgid="3485945604919292489">"Erabili ausaz aukeratutako MAC helbide bat (lehenetsia)"</item>
     <item msgid="741680937828608749">"Erabili gailuaren MAC helbidea"</item>
   </string-array>
   <string-array name="wifi_hidden_entries">
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
index 0526b55..ad5ed0a 100644
--- a/res/values-fr/arrays.xml
+++ b/res/values-fr/arrays.xml
@@ -409,8 +409,8 @@
   </string-array>
   <string-array name="captioning_preset_selector_titles">
     <item msgid="3880932435325583041">"Définir par application"</item>
-    <item msgid="8719204526359229387">"Texte blanc sur fond noir"</item>
-    <item msgid="5410164687403735103">"Texte noir sur fond blanc"</item>
+    <item msgid="8719204526359229387">"Blanc sur noir"</item>
+    <item msgid="5410164687403735103">"Noir sur blanc"</item>
     <item msgid="1119043472912497241">"Texte jaune sur fond noir"</item>
     <item msgid="2836895041823327816">"Texte jaune sur fond bleu"</item>
     <item msgid="747238414788976867">"Personnalisé"</item>
@@ -424,8 +424,8 @@
     <item msgid="6922258575853746220">"Geste"</item>
   </string-array>
   <string-array name="accessibility_button_size_selector_titles">
-    <item msgid="7482952318152486459">"Petit"</item>
-    <item msgid="1666628329913333563">"Grand"</item>
+    <item msgid="7482952318152486459">"Petite"</item>
+    <item msgid="1666628329913333563">"Grande"</item>
   </string-array>
   <string-array name="vpn_types_long">
     <item msgid="6621806338070912611">"VPN PPTP"</item>
diff --git a/res/values-hy/arrays.xml b/res/values-hy/arrays.xml
index a3ff33b..9681888 100644
--- a/res/values-hy/arrays.xml
+++ b/res/values-hy/arrays.xml
@@ -421,7 +421,7 @@
   </string-array>
   <string-array name="accessibility_button_gesture_selector_titles">
     <item msgid="2370918472773154939">"Կոճակ"</item>
-    <item msgid="6922258575853746220">"Ժեստեր"</item>
+    <item msgid="6922258575853746220">"Ժեստ"</item>
   </string-array>
   <string-array name="accessibility_button_size_selector_titles">
     <item msgid="7482952318152486459">"Փոքր"</item>
diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml
index 1578157..d825324 100644
--- a/res/values-ja/arrays.xml
+++ b/res/values-ja/arrays.xml
@@ -421,7 +421,7 @@
   </string-array>
   <string-array name="accessibility_button_gesture_selector_titles">
     <item msgid="2370918472773154939">"ボタン"</item>
-    <item msgid="6922258575853746220">"操作"</item>
+    <item msgid="6922258575853746220">"ジェスチャー"</item>
   </string-array>
   <string-array name="accessibility_button_size_selector_titles">
     <item msgid="7482952318152486459">"小"</item>
diff --git a/res/values-kk/arrays.xml b/res/values-kk/arrays.xml
index a0546b9..2d03d67 100644
--- a/res/values-kk/arrays.xml
+++ b/res/values-kk/arrays.xml
@@ -485,7 +485,7 @@
     <item msgid="8186970968968646288">"Кэштелген (бос)"</item>
   </string-array>
   <string-array name="color_picker">
-    <item msgid="7216413848731287689">"Көк"</item>
+    <item msgid="7216413848731287689">"Көгілдір"</item>
     <item msgid="5661027589207588703">"Көк"</item>
     <item msgid="1219738214736244749">"Жасыл"</item>
     <item msgid="6331809026622602308">"Күлгін"</item>
diff --git a/res/values-ms/arrays.xml b/res/values-ms/arrays.xml
index c628657..09c6cf5 100644
--- a/res/values-ms/arrays.xml
+++ b/res/values-ms/arrays.xml
@@ -490,7 +490,7 @@
     <item msgid="1219738214736244749">"Hijau"</item>
     <item msgid="6331809026622602308">"Ungu"</item>
     <item msgid="6390546163902724700">"Merah jambu"</item>
-    <item msgid="6500473130620545980">"Orange"</item>
+    <item msgid="6500473130620545980">"Jingga"</item>
   </string-array>
   <string-array name="automatic_storage_management_days">
     <item msgid="8896644025110620477">"Lebih 30 hari"</item>
diff --git a/res/values-sr/arrays.xml b/res/values-sr/arrays.xml
index 39de759..843c5b0 100644
--- a/res/values-sr/arrays.xml
+++ b/res/values-sr/arrays.xml
@@ -409,8 +409,8 @@
   </string-array>
   <string-array name="captioning_preset_selector_titles">
     <item msgid="3880932435325583041">"Подешава апликација:"</item>
-    <item msgid="8719204526359229387">"Бело на црно"</item>
-    <item msgid="5410164687403735103">"Црно на бело"</item>
+    <item msgid="8719204526359229387">"Бело на црном"</item>
+    <item msgid="5410164687403735103">"Црно на белом"</item>
     <item msgid="1119043472912497241">"Жуто на црно"</item>
     <item msgid="2836895041823327816">"Жуто на плаво"</item>
     <item msgid="747238414788976867">"Прилагођено"</item>
diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml
index 7dfda32..41772aa 100644
--- a/res/values-uk/arrays.xml
+++ b/res/values-uk/arrays.xml
@@ -510,7 +510,7 @@
   </string-array>
   <string-array name="wifi_privacy_entries">
     <item msgid="3485945604919292489">"Довільна MAC-адреса (за умовчанням)"</item>
-    <item msgid="741680937828608749">"Використовувати MAC-адресу пристрою"</item>
+    <item msgid="741680937828608749">"MAC-адреса пристрою"</item>
   </string-array>
   <string-array name="wifi_hidden_entries">
     <item msgid="342232116597649254">"Ні"</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 99652ce..cfcb62e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13770,12 +13770,6 @@
     <!-- Title for if toggle access is disabled by carrier [CHAR LIMIT=NONE] -->
     <string name="enable_2g_summary_disabled_carrier"><xliff:g id="carrier_name_2g" example="Google Fi">%1$s</xliff:g> requires 2G to be available</string>
 
-
-    <!-- Label for extra app info settings for a specific app [CHAR LIMIT=40] -->
-    <string name="extra_app_info_label" translatable="false"></string>
-    <!-- Summary for extra app info settings for a specific app [CHAR LIMIT=40] -->
-    <string name="extra_app_info_summary" translatable="false"></string>
-
     <!-- Label for All Services preference in App info settings [CHAR LIMIT=40] -->
     <string name="app_info_all_services_label">All Services</string>
 
diff --git a/res/xml/app_info_settings.xml b/res/xml/app_info_settings.xml
index 0726c20..a310af5 100644
--- a/res/xml/app_info_settings.xml
+++ b/res/xml/app_info_settings.xml
@@ -78,12 +78,6 @@
         settings:controller="com.android.settings.applications.appinfo.AppDataUsagePreferenceController" />
 
     <Preference
-        android:key="extra_app_info_settings"
-        android:title="@string/extra_app_info_label"
-        android:summary="@string/extra_app_info_summary"
-        settings:controller="com.android.settings.applications.appinfo.ExtraAppInfoPreferenceController" />
-
-    <Preference
         android:key="time_spent_in_app"
         android:title="@string/time_spent_in_app_pref_title"
         android:summary="@string/summary_placeholder"
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index 8e60648..a0e0a1f 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -49,7 +49,7 @@
 
     <PreferenceCategory
         android:key="previously_connected_devices"
-        android:title="@string/connected_device_previously_connected_title"
+        android:title="@string/connected_device_saved_title"
         settings:controller="com.android.settings.connecteddevice.PreviouslyConnectedDevicePreferenceController">
 
         <Preference
diff --git a/res/xml/previously_connected_devices.xml b/res/xml/previously_connected_devices.xml
index 435ced7..e87e88e 100644
--- a/res/xml/previously_connected_devices.xml
+++ b/res/xml/previously_connected_devices.xml
@@ -17,7 +17,7 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:title="@string/connected_device_previously_connected_screen_title">
+    android:title="@string/connected_device_saved_title">
 
     <PreferenceCategory
         android:key="saved_device_list"
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 553ed19..c7375a3 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -295,6 +295,7 @@
     public static class AppBubbleNotificationSettingsActivity extends SettingsActivity { /* empty */ }
     public static class NotificationAssistantSettingsActivity extends SettingsActivity{ /* empty */ }
     public static class NotificationAppListActivity extends SettingsActivity { /* empty */ }
+    public static class NotificationReviewPermissionsActivity extends SettingsActivity { /* empty */ }
     public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ChannelNotificationSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ChannelGroupNotificationSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index f11aafd..3eae885 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -315,16 +315,25 @@
             mListType = LIST_TYPE_WIFI_ACCESS;
         } else if (className.equals(Settings.ManageExternalStorageActivity.class.getName())) {
             mListType = LIST_MANAGE_EXTERNAL_STORAGE;
-        }  else if (className.equals(Settings.MediaManagementAppsActivity.class.getName())) {
+        } else if (className.equals(Settings.MediaManagementAppsActivity.class.getName())) {
             mListType = LIST_TYPE_MEDIA_MANAGEMENT_APPS;
         } else if (className.equals(Settings.AlarmsAndRemindersActivity.class.getName())) {
             mListType = LIST_TYPE_ALARMS_AND_REMINDERS;
-        } else if (className.equals(Settings.NotificationAppListActivity.class.getName())) {
+        } else if (className.equals(Settings.NotificationAppListActivity.class.getName())
+                || className.equals(
+                        Settings.NotificationReviewPermissionsActivity.class.getName())) {
             mListType = LIST_TYPE_NOTIFICATION;
             mUsageStatsManager = IUsageStatsManager.Stub.asInterface(
                     ServiceManager.getService(Context.USAGE_STATS_SERVICE));
             mNotificationBackend = new NotificationBackend();
             mSortOrder = R.id.sort_order_recent_notification;
+            if (className.equals(Settings.NotificationReviewPermissionsActivity.class.getName())) {
+                // Special-case for a case where a user is directed to the all apps notification
+                // preferences page via a notification prompt to review permissions settings.
+                android.provider.Settings.Secure.putInt(getContext().getContentResolver(),
+                        android.provider.Settings.Secure.REVIEW_PERMISSIONS_NOTIFICATION_STATE,
+                        1);  // USER_INTERACTED
+            }
         } else if (className.equals(AppLocaleDetails.class.getName())) {
             mListType = LIST_TYPE_APPS_LOCALE;
         } else {
@@ -915,7 +924,9 @@
             screenTitle = R.string.media_management_apps_title;
         } else if (className.equals(Settings.AlarmsAndRemindersActivity.class.getName())) {
             screenTitle = R.string.alarms_and_reminders_title;
-        } else if (className.equals(Settings.NotificationAppListActivity.class.getName())) {
+        } else if (className.equals(Settings.NotificationAppListActivity.class.getName())
+                || className.equals(
+                        Settings.NotificationReviewPermissionsActivity.class.getName())) {
             screenTitle = R.string.app_notifications_title;
         } else if (className.equals(AppLocaleDetails.class.getName())) {
             screenTitle = R.string.app_locales_picker_menu_title;
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index b397e18..34edf98 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -172,7 +172,7 @@
         launchArgs.mPackageName = entry.getDefaultPackageName();
         launchArgs.mAppLabel = entry.getLabel();
         launchArgs.mUid = entry.getUid();
-        launchArgs.mIconId = entry.iconId;
+        launchArgs.mIconId = entry.mIconId;
         launchArgs.mConsumedPower = (int) entry.getConsumedPower();
         launchArgs.mForegroundTimeMs = isValidToShowSummary ? entry.getTimeInForegroundMs() : 0;
         launchArgs.mBackgroundTimeMs = isValidToShowSummary ? entry.getTimeInBackgroundMs() : 0;
diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
index 8dbce79..8fb0d1e 100644
--- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
@@ -127,9 +127,9 @@
                         final int userId = UserHandle.getUserId(entry.getUid());
                         final UserHandle userHandle = new UserHandle(userId);
                         pgp.setIcon(mUserManager.getBadgedIconForUser(entry.getIcon(), userHandle));
-                        pgp.setTitle(entry.name);
+                        pgp.setTitle(entry.mName);
                         if (entry.isAppEntry()) {
-                            pgp.setContentDescription(entry.name);
+                            pgp.setContentDescription(entry.mName);
                         }
                     }
                     break;
@@ -249,7 +249,7 @@
                             contentDescription, entry);
                     pref.setKey(key);
                 }
-                entry.percent = percentOfTotal;
+                entry.mPercent = percentOfTotal;
                 pref.setTitle(entry.getLabel());
                 pref.setOrder(i + 1);
                 pref.setPercent(percentOfTotal);
@@ -288,7 +288,7 @@
             final BatteryEntry entry = usageList.get(i);
             final double percentOfTotal = mBatteryUtils.calculateBatteryPercent(
                     entry.getConsumedPower(), totalPower, dischargePercentage);
-            entry.percent = percentOfTotal;
+            entry.mPercent = percentOfTotal;
         }
         return usageList;
     }
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
index 249ee49..02248c9 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -508,7 +508,9 @@
             mBatteryHistoryKeys[mTrapezoidIndex * 2], mIs24HourFormat);
         final String toHour = ConvertUtils.utcToLocalTimeHour(mPrefContext,
             mBatteryHistoryKeys[(mTrapezoidIndex + 1) * 2], mIs24HourFormat);
-        return String.format("%s - %s", fromHour, toHour);
+        return mIs24HourFormat
+            ? String.format("%s–%s", fromHour, toHour)
+            : String.format("%s – %s", fromHour, toHour);
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
index ca29cfe..5ef1110 100644
--- a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
@@ -171,9 +171,9 @@
         // Checks whether we have cached data or not first before fetching.
         final BatteryEntry.NameAndIcon nameAndIcon = getCache();
         if (nameAndIcon != null) {
-            mAppLabel = nameAndIcon.name;
-            mAppIcon = nameAndIcon.icon;
-            mAppIconId = nameAndIcon.iconId;
+            mAppLabel = nameAndIcon.mName;
+            mAppIcon = nameAndIcon.mIcon;
+            mAppIconId = nameAndIcon.mIconId;
         }
         final Boolean validForRestriction = sValidForRestriction.get(getKey());
         if (validForRestriction != null) {
@@ -196,8 +196,8 @@
                     BatteryEntry.getNameAndIconFromUserId(
                         mContext, (int) mBatteryHistEntry.mUserId);
                 if (nameAndIconForUser != null) {
-                    mAppIcon = nameAndIconForUser.icon;
-                    mAppLabel = nameAndIconForUser.name;
+                    mAppIcon = nameAndIconForUser.mIcon;
+                    mAppLabel = nameAndIconForUser.mName;
                     sResourceCache.put(
                         getKey(),
                         new BatteryEntry.NameAndIcon(mAppLabel, mAppIcon, /*iconId=*/ 0));
@@ -208,10 +208,10 @@
                     BatteryEntry.getNameAndIconFromPowerComponent(
                         mContext, mBatteryHistEntry.mDrainType);
                 if (nameAndIconForSystem != null) {
-                    mAppLabel = nameAndIconForSystem.name;
-                    if (nameAndIconForSystem.iconId != 0) {
-                        mAppIconId = nameAndIconForSystem.iconId;
-                        mAppIcon = mContext.getDrawable(nameAndIconForSystem.iconId);
+                    mAppLabel = nameAndIconForSystem.mName;
+                    if (nameAndIconForSystem.mIconId != 0) {
+                        mAppIconId = nameAndIconForSystem.mIconId;
+                        mAppIcon = mContext.getDrawable(nameAndIconForSystem.mIconId);
                     }
                     sResourceCache.put(
                         getKey(),
@@ -308,8 +308,8 @@
         if (packages == null || packages.length == 0) {
             final BatteryEntry.NameAndIcon nameAndIcon =
                 BatteryEntry.getNameAndIconFromUid(mContext, mAppLabel, uid);
-            mAppLabel = nameAndIcon.name;
-            mAppIcon = nameAndIcon.icon;
+            mAppLabel = nameAndIcon.mName;
+            mAppIcon = nameAndIcon.mIcon;
         }
 
         final BatteryEntry.NameAndIcon nameAndIcon =
@@ -319,13 +319,13 @@
         // Clears BatteryEntry internal cache since we will have another one.
         BatteryEntry.clearUidCache();
         if (nameAndIcon != null) {
-            mAppLabel = nameAndIcon.name;
-            mAppIcon = nameAndIcon.icon;
-            mDefaultPackageName = nameAndIcon.packageName;
+            mAppLabel = nameAndIcon.mName;
+            mAppIcon = nameAndIcon.mIcon;
+            mDefaultPackageName = nameAndIcon.mPackageName;
             if (mDefaultPackageName != null
-                    && !mDefaultPackageName.equals(nameAndIcon.packageName)) {
+                    && !mDefaultPackageName.equals(nameAndIcon.mPackageName)) {
                 Log.w(TAG, String.format("found different package: %s | %s",
-                    mDefaultPackageName, nameAndIcon.packageName));
+                    mDefaultPackageName, nameAndIcon.mPackageName));
             }
         }
     }
diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/BatteryEntry.java
index 7bb5a4e..c9acc4c 100644
--- a/src/com/android/settings/fuelgauge/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryEntry.java
@@ -53,10 +53,10 @@
 public class BatteryEntry {
 
     public static final class NameAndIcon {
-        public final String name;
-        public final String packageName;
-        public final Drawable icon;
-        public final int iconId;
+        public final String mName;
+        public final String mPackageName;
+        public final Drawable mIcon;
+        public final int mIconId;
 
         public NameAndIcon(String name, Drawable icon, int iconId) {
             this(name, /*packageName=*/ null, icon, iconId);
@@ -64,10 +64,10 @@
 
         public NameAndIcon(
                 String name, String packageName, Drawable icon, int iconId) {
-            this.name = name;
-            this.icon = icon;
-            this.iconId = iconId;
-            this.packageName = packageName;
+            this.mName = name;
+            this.mIcon = icon;
+            this.mIconId = iconId;
+            this.mPackageName = packageName;
         }
     }
 
@@ -111,11 +111,11 @@
                 final NameAndIcon nameAndIcon =
                     BatteryEntry.loadNameAndIcon(
                         be.mContext, be.getUid(), sHandler, be,
-                        be.mDefaultPackageName, be.name, be.icon);
+                        be.mDefaultPackageName, be.mName, be.mIcon);
                 if (nameAndIcon != null) {
-                    be.icon = nameAndIcon.icon;
-                    be.name = nameAndIcon.name;
-                    be.mDefaultPackageName = nameAndIcon.packageName;
+                    be.mIcon = nameAndIcon.mIcon;
+                    be.mName = nameAndIcon.mName;
+                    be.mDefaultPackageName = nameAndIcon.mPackageName;
                 }
             }
         }
@@ -169,27 +169,27 @@
     private long mTimeInForegroundMs;
     private long mTimeInBackgroundMs;
 
-    public String name;
-    public Drawable icon;
-    public int iconId; // For passing to the detail screen.
-    public double percent;
+    public String mName;
+    public Drawable mIcon;
+    public int mIconId;
+    public double mPercent;
     private String mDefaultPackageName;
     private double mConsumedPower;
 
     static class UidToDetail {
-        String name;
-        String packageName;
-        Drawable icon;
+        String mName;
+        String mPackageName;
+        Drawable mIcon;
     }
 
     public BatteryEntry(Context context, Handler handler, UserManager um,
-            @NonNull BatteryConsumer batteryConsumer, boolean isHidden, int uid, String[] packages,
+            BatteryConsumer batteryConsumer, boolean isHidden, int uid, String[] packages,
             String packageName) {
         this(context, handler, um, batteryConsumer, isHidden, uid, packages, packageName, true);
     }
 
     public BatteryEntry(Context context, Handler handler, UserManager um,
-            @NonNull BatteryConsumer batteryConsumer, boolean isHidden, int uid, String[] packages,
+            BatteryConsumer batteryConsumer, boolean isHidden, int uid, String[] packages,
             String packageName, boolean loadDataInBackground) {
         sHandler = handler;
         mContext = context;
@@ -217,11 +217,11 @@
                 try {
                     ApplicationInfo appInfo =
                             pm.getApplicationInfo(mDefaultPackageName, 0 /* no flags */);
-                    name = pm.getApplicationLabel(appInfo).toString();
+                    mName = pm.getApplicationLabel(appInfo).toString();
                 } catch (NameNotFoundException e) {
                     Log.d(TAG, "PackageManager failed to retrieve ApplicationInfo for: "
                             + mDefaultPackageName);
-                    name = mDefaultPackageName;
+                    mName = mDefaultPackageName;
                 }
             }
             getQuickNameIconForUid(uid, packages, loadDataInBackground);
@@ -235,10 +235,10 @@
             mConsumedPower = batteryConsumer.getConsumedPower();
             final NameAndIcon nameAndIcon = getNameAndIconFromUserId(
                     context, ((UserBatteryConsumer) batteryConsumer).getUserId());
-            icon = nameAndIcon.icon;
-            name = nameAndIcon.name;
+            mIcon = nameAndIcon.mIcon;
+            mName = nameAndIcon.mName;
         } else {
-            throw new IllegalArgumentException("Unsupported battery consumer: " + batteryConsumer);
+            throw new IllegalArgumentException("Unsupported: " + batteryConsumer);
         }
     }
 
@@ -257,11 +257,12 @@
         mUsageDurationMs = usageDurationMs;
         mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
 
-        final NameAndIcon nameAndIcon = getNameAndIconFromPowerComponent(context, powerComponentId);
-        iconId = nameAndIcon.iconId;
-        name = nameAndIcon.name;
-        if (iconId != 0) {
-            icon = context.getDrawable(iconId);
+        final NameAndIcon nameAndIcon =
+            getNameAndIconFromPowerComponent(context, powerComponentId);
+        mIconId = nameAndIcon.mIconId;
+        mName = nameAndIcon.mName;
+        if (mIconId != 0) {
+            mIcon = context.getDrawable(mIconId);
         }
     }
 
@@ -274,9 +275,9 @@
         mIsHidden = false;
         mPowerComponentId = powerComponentId;
 
-        iconId = R.drawable.ic_power_system;
-        icon = context.getDrawable(iconId);
-        name = powerComponentName;
+        mIconId = R.drawable.ic_power_system;
+        mIcon = context.getDrawable(mIconId);
+        mName = powerComponentName;
         mConsumedPower =
             powerComponentId == BatteryConsumer.POWER_COMPONENT_SCREEN
                 ? devicePowerMah
@@ -285,14 +286,11 @@
     }
 
     public Drawable getIcon() {
-        return icon;
+        return mIcon;
     }
 
-    /**
-     * Gets the application name
-     */
     public String getLabel() {
-        return name;
+        return mName;
     }
 
     @ConvertUtils.ConsumerType
@@ -317,18 +315,18 @@
         final String uidString = Integer.toString(uid);
         if (sUidCache.containsKey(uidString)) {
             UidToDetail utd = sUidCache.get(uidString);
-            mDefaultPackageName = utd.packageName;
-            name = utd.name;
-            icon = utd.icon;
+            mDefaultPackageName = utd.mPackageName;
+            mName = utd.mName;
+            mIcon = utd.mIcon;
             return;
         }
 
         if (packages == null || packages.length == 0) {
-            final NameAndIcon nameAndIcon = getNameAndIconFromUid(mContext, name, uid);
-            icon = nameAndIcon.icon;
-            name = nameAndIcon.name;
+            final NameAndIcon nameAndIcon = getNameAndIconFromUid(mContext, mName, uid);
+            mIcon = nameAndIcon.mIcon;
+            mName = nameAndIcon.mName;
         } else {
-            icon = mContext.getPackageManager().getDefaultActivityIcon();
+            mIcon = mContext.getPackageManager().getDefaultActivityIcon();
         }
 
         // Avoids post the loading icon and label in the background request.
@@ -339,9 +337,7 @@
         }
     }
 
-    /**
-     * Loads the app label and icon image and stores into the cache.
-     */
+    /** Loads the app label and icon image and stores into the cache. */
     public static NameAndIcon loadNameAndIcon(
             Context context,
             int uid,
@@ -400,7 +396,7 @@
                 // Look for an official name for this UID.
                 for (String pkgName : packages) {
                     try {
-                        final PackageInfo pi = ipm.getPackageInfo(pkgName, 0 /* no flags */, userId);
+                        final PackageInfo pi = ipm.getPackageInfo(pkgName, 0, userId);
                         if (pi == null) {
                             Log.d(TAG, "Retrieving null package info for package "
                                     + pkgName + ", user " + userId);
@@ -432,9 +428,9 @@
         }
 
         UidToDetail utd = new UidToDetail();
-        utd.name = name;
-        utd.icon = icon;
-        utd.packageName = defaultPackageName;
+        utd.mName = name;
+        utd.mIcon = icon;
+        utd.mPackageName = defaultPackageName;
 
         sUidCache.put(uidString, utd);
         if (handler != null) {
@@ -443,9 +439,7 @@
         return new NameAndIcon(name, defaultPackageName, icon, /*iconId=*/ 0);
     }
 
-    /**
-     * Returns a string that uniquely identifies this battery consumer.
-     */
+    /** Returns a string that uniquely identifies this battery consumer. */
     public String getKey() {
         if (mBatteryConsumer instanceof UidBatteryConsumer) {
             return Integer.toString(mUid);
@@ -456,23 +450,17 @@
         }
     }
 
-    /**
-     * Returns true if the entry is hidden from the battery usage summary list.
-     */
+    /** Returns true if the entry is hidden from the battery usage summary list. */
     public boolean isHidden() {
         return mIsHidden;
     }
 
-    /**
-     * Returns true if this entry describes an app (UID)
-     */
+    /** Returns true if this entry describes an app (UID). */
     public boolean isAppEntry() {
         return mBatteryConsumer instanceof UidBatteryConsumer;
     }
 
-    /**
-     * Returns true if this entry describes a User.
-     */
+    /** Returns true if this entry describes a User. */
     public boolean isUserEntry() {
         if (mBatteryConsumer instanceof UserBatteryConsumer) {
             return true;
@@ -495,9 +483,7 @@
         return mUid;
     }
 
-    /**
-     * Returns foreground foreground time (in milliseconds) that is attributed to this entry.
-     */
+    /** Returns foreground foreground time/ms that is attributed to this entry. */
     public long getTimeInForegroundMs() {
         if (mBatteryConsumer instanceof UidBatteryConsumer) {
             return mTimeInForegroundMs;
@@ -506,9 +492,7 @@
         }
     }
 
-    /**
-     * Returns background activity time (in milliseconds) that is attributed to this entry.
-     */
+    /** Returns background activity time/ms that is attributed to this entry. */
     public long getTimeInBackgroundMs() {
         if (mBatteryConsumer instanceof UidBatteryConsumer) {
             return mTimeInBackgroundMs;
@@ -542,9 +526,7 @@
         }
     }
 
-    /**
-     * Gets name and icon resource from UserBatteryConsumer userId.
-     */
+    /** Gets name and icon resource from UserBatteryConsumer userId. */
     public static NameAndIcon getNameAndIconFromUserId(
             Context context, final int userId) {
         UserManager um = context.getSystemService(UserManager.class);
@@ -562,9 +544,7 @@
         return new NameAndIcon(name, icon, 0 /* iconId */);
     }
 
-    /**
-     * Gets name and icon resource from UidBatteryConsumer uid.
-     */
+    /** Gets name and icon resource from UidBatteryConsumer uid. */
     public static NameAndIcon getNameAndIconFromUid(
             Context context, String name, final int uid) {
         Drawable icon = context.getDrawable(R.drawable.ic_power_system);
@@ -579,9 +559,7 @@
         return new NameAndIcon(name, icon, 0 /* iconId */);
     }
 
-    /**
-     * Gets name and icon resource from BatteryConsumer power component ID.
-     */
+    /** Gets name and icon resource from BatteryConsumer power component ID. */
     public static NameAndIcon getNameAndIconFromPowerComponent(
             Context context, @BatteryConsumer.PowerComponent int powerComponentId) {
         String name;
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
index 6439222..f6efb24 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
@@ -18,14 +18,7 @@
 
 import android.content.ComponentName;
 
-/**
- * Feature provider for battery settings usage.
- */
+/** Feature provider for battery settings usage. */
 public interface BatterySettingsFeatureProvider {
 
-    /**
-     * Get replacement activity for a given activity or fragment path.
-     */
-    ComponentName getReplacingActivity(ComponentName originalActivity);
-
 }
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
index fda29b8..39fe118 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
@@ -16,12 +16,9 @@
 
 package com.android.settings.fuelgauge;
 
-import android.content.ComponentName;
 import android.content.Context;
 
-/**
- * Feature provider implementation for battery settings usage.
- */
+/** Feature provider implementation for battery settings usage. */
 public class BatterySettingsFeatureProviderImpl implements BatterySettingsFeatureProvider {
 
     protected Context mContext;
@@ -29,9 +26,4 @@
     public BatterySettingsFeatureProviderImpl(Context context) {
         mContext = context.getApplicationContext();
     }
-
-    @Override
-    public ComponentName getReplacingActivity(ComponentName originalActivity) {
-        return originalActivity;
-    }
 }
diff --git a/src/com/android/settings/fuelgauge/ConvertUtils.java b/src/com/android/settings/fuelgauge/ConvertUtils.java
index 946c910..696147b 100644
--- a/src/com/android/settings/fuelgauge/ConvertUtils.java
+++ b/src/com/android/settings/fuelgauge/ConvertUtils.java
@@ -101,7 +101,7 @@
             values.put(BatteryHistEntry.KEY_CONSUME_POWER,
                 Double.valueOf(entry.getConsumedPower()));
             values.put(BatteryHistEntry.KEY_PERCENT_OF_TOTAL,
-                Double.valueOf(entry.percent));
+                Double.valueOf(entry.mPercent));
             values.put(BatteryHistEntry.KEY_FOREGROUND_USAGE_TIME,
                 Long.valueOf(entry.getTimeInForegroundMs()));
             values.put(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME,
diff --git a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
index f4044ed..35f6257 100644
--- a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
+++ b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
@@ -28,7 +28,6 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
 import com.android.settingslib.applications.RecentAppOpsAccess;
@@ -41,8 +40,7 @@
 /**
  * Preference controller that handles the display of apps that access locations.
  */
-public class RecentLocationAccessPreferenceController extends LocationBasePreferenceController
-        implements BasePreferenceController.UiBlocker {
+public class RecentLocationAccessPreferenceController extends LocationBasePreferenceController {
     public static final int MAX_APPS = 3;
     @VisibleForTesting
     RecentAppOpsAccess mRecentLocationApps;
@@ -131,16 +129,12 @@
             banner.setSelectable(false);
             mCategoryRecentLocationRequests.addPreference(banner);
         }
-
-        if (mUiBlockListener != null) {
-            mUiBlockListener.onBlockerWorkFinished(this);
-        }
     }
 
     @Override
     public void onLocationModeChanged(int mode, boolean restricted) {
         boolean enabled = mLocationEnabler.isEnabled(mode);
-        updatePreferenceVisibilityDelegate(mCategoryRecentLocationRequests, enabled);
+        mCategoryRecentLocationRequests.setVisible(enabled);
     }
 
     /**
diff --git a/src/com/android/settings/location/RecentLocationAccessSeeAllButtonPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessSeeAllButtonPreferenceController.java
index b0dfae4..68cde63 100644
--- a/src/com/android/settings/location/RecentLocationAccessSeeAllButtonPreferenceController.java
+++ b/src/com/android/settings/location/RecentLocationAccessSeeAllButtonPreferenceController.java
@@ -20,13 +20,11 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
-import com.android.settings.core.BasePreferenceController;
-
 /**
  * Preference controller that handles the "See All" button for recent location access.
  */
 public class RecentLocationAccessSeeAllButtonPreferenceController extends
-        LocationBasePreferenceController implements BasePreferenceController.UiBlocker {
+        LocationBasePreferenceController {
 
     private Preference mPreference;
 
@@ -46,6 +44,6 @@
     @Override
     public void onLocationModeChanged(int mode, boolean restricted) {
         boolean enabled = mLocationEnabler.isEnabled(mode);
-        updatePreferenceVisibilityDelegate(mPreference, enabled);
+        mPreference.setVisible(enabled);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index a10d323..aaa1487 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -181,7 +181,7 @@
         when(mBatteryEntry.getLabel()).thenReturn(APP_LABEL);
         when(mBatteryEntry.getTimeInBackgroundMs()).thenReturn(BACKGROUND_TIME_MS);
         when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(FOREGROUND_TIME_MS);
-        mBatteryEntry.iconId = ICON_ID;
+        mBatteryEntry.mIconId = ICON_ID;
 
         mFragment.mHeaderPreference = mHeaderPreference;
         mFragment.mState = mState;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
index 13ce29e..710d065 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
@@ -140,8 +140,8 @@
         // Verifies the app label in the cache.
         final BatteryEntry.NameAndIcon nameAndIcon =
             BatteryDiffEntry.sResourceCache.get(entry.getKey());
-        assertThat(nameAndIcon.name).isEqualTo(expectedName);
-        assertThat(nameAndIcon.iconId).isEqualTo(R.drawable.ic_settings_aod);
+        assertThat(nameAndIcon.mName).isEqualTo(expectedName);
+        assertThat(nameAndIcon.mIconId).isEqualTo(R.drawable.ic_settings_aod);
         // Verifies the restrictable flag in the cache.
         assertThat(entry.mValidForRestriction).isTrue();
         assertThat(BatteryDiffEntry.sValidForRestriction.get(entry.getKey())).isTrue();
@@ -166,8 +166,8 @@
         // Verifies the app label in the cache.
         final BatteryEntry.NameAndIcon nameAndIcon =
             BatteryDiffEntry.sResourceCache.get(entry.getKey());
-        assertThat(nameAndIcon.name).isEqualTo(expectedName);
-        assertThat(nameAndIcon.iconId).isEqualTo(0);
+        assertThat(nameAndIcon.mName).isEqualTo(expectedName);
+        assertThat(nameAndIcon.mIconId).isEqualTo(0);
         // Verifies the restrictable flag in the cache.
         assertThat(entry.mValidForRestriction).isTrue();
         assertThat(BatteryDiffEntry.sValidForRestriction.get(entry.getKey())).isTrue();
@@ -195,7 +195,7 @@
         // Verifies the app label in the cache.
         final BatteryEntry.NameAndIcon nameAndIcon =
             BatteryDiffEntry.sResourceCache.get(entry.getKey());
-        assertThat(nameAndIcon.name).isEqualTo(expectedAppLabel);
+        assertThat(nameAndIcon.mName).isEqualTo(expectedAppLabel);
         // Verifies the restrictable flag in the cache.
         assertThat(entry.mValidForRestriction).isFalse();
         assertThat(BatteryDiffEntry.sValidForRestriction.get(entry.getKey())).isFalse();
@@ -215,7 +215,7 @@
         // Verifies the app label in the cache.
         final BatteryEntry.NameAndIcon nameAndIcon =
             BatteryDiffEntry.sResourceCache.get(entry.getKey());
-        assertThat(nameAndIcon.name).isEqualTo(expectedAppLabel);
+        assertThat(nameAndIcon.mName).isEqualTo(expectedAppLabel);
     }
 
     @Test
@@ -274,7 +274,7 @@
         // Verifies the app label in the cache.
         final BatteryEntry.NameAndIcon nameAndIcon =
             BatteryDiffEntry.sResourceCache.get(entry.getKey());
-        assertThat(nameAndIcon.icon).isEqualTo(mockDrawable);
+        assertThat(nameAndIcon.mIcon).isEqualTo(mockDrawable);
     }
 
     @Test
@@ -309,7 +309,7 @@
         // Verifies the cache is updated into the new drawable.
         final BatteryEntry.NameAndIcon nameAndIcon =
             BatteryDiffEntry.sResourceCache.get(entry2.getKey());
-        assertThat(nameAndIcon.icon).isEqualTo(mockDrawable2);
+        assertThat(nameAndIcon.mIcon).isEqualTo(mockDrawable2);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
index c1b1761..966bc70 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
@@ -158,8 +158,8 @@
         final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
                 BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY, 200, 100, 1000);
 
-        assertThat(entry.iconId).isEqualTo(R.drawable.ic_settings_aod);
-        assertThat(entry.name).isEqualTo("Ambient display");
+        assertThat(entry.mIconId).isEqualTo(R.drawable.ic_settings_aod);
+        assertThat(entry.mName).isEqualTo("Ambient display");
     }
 
     @Test
@@ -167,8 +167,8 @@
         final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
                 BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42, "ABC", 200, 100);
 
-        assertThat(entry.iconId).isEqualTo(R.drawable.ic_power_system);
-        assertThat(entry.name).isEqualTo("ABC");
+        assertThat(entry.mIconId).isEqualTo(R.drawable.ic_power_system);
+        assertThat(entry.mName).isEqualTo("ABC");
     }
 
     @Test
@@ -261,16 +261,16 @@
 
         final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUserId(
                 mContext, userId);
-        assertThat(nameAndIcon.name).isEqualTo(getString(
+        assertThat(nameAndIcon.mName).isEqualTo(getString(
                 R.string.running_process_item_removed_user_label));
-        assertThat(nameAndIcon.icon).isNull();
+        assertThat(nameAndIcon.mIcon).isNull();
     }
 
     @Test
     public void getNameAndIconFromUid_rerturnExpectedName() {
         final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
                 mContext, /* name */ null, /* uid */ 0);
-        assertThat(nameAndIcon.name).isEqualTo(getString(R.string.process_kernel_label));
+        assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_kernel_label));
 
         assertNameAndIcon("mediaserver", R.string.process_mediaserver_label);
         assertNameAndIcon("dex2oat32", R.string.process_dex2oat_label);
@@ -312,14 +312,14 @@
     private void assertNameAndIcon(String name, int stringId) {
         final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
                 mContext, name, /* uid */ 1000);
-        assertThat(nameAndIcon.name).isEqualTo(getString(stringId));
+        assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
     }
 
     private void assertNameAndIcon(int powerComponentId, int stringId, int iconId) {
         final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromPowerComponent(
                 mContext, powerComponentId);
-        assertThat(nameAndIcon.name).isEqualTo(getString(stringId));
-        assertThat(nameAndIcon.iconId).isEqualTo(iconId);
+        assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
+        assertThat(nameAndIcon.mIconId).isEqualTo(iconId);
     }
 
     private String getString(int stringId) {
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java
index ca3109c..3acb8f3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java
@@ -57,7 +57,7 @@
         when(mockBatteryEntry.isHidden()).thenReturn(true);
         when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
         when(mockBatteryEntry.getConsumedPower()).thenReturn(1.1);
-        mockBatteryEntry.percent = 0.3;
+        mockBatteryEntry.mPercent = 0.3;
         when(mockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
         when(mockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
         when(mockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
@@ -76,7 +76,7 @@
         assertBatteryHistEntry(
             new BatteryHistEntry(values),
             /*drainType=*/ expectedType,
-            /*percentOfTotal=*/ mockBatteryEntry.percent);
+            /*percentOfTotal=*/ mockBatteryEntry.mPercent);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java
index ff0f25c..42483d0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java
@@ -77,7 +77,7 @@
         when(mockBatteryEntry.isHidden()).thenReturn(true);
         when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
         when(mockBatteryEntry.getConsumedPower()).thenReturn(1.1);
-        mockBatteryEntry.percent = 0.3;
+        mockBatteryEntry.mPercent = 0.3;
         when(mockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
         when(mockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
         when(mockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
