Include new "dex2oat64" process to map into App Optimization name

Bug: 191991503
Test: make SettingsRoboTests
Change-Id: Ib392ed3adf7fe37fdaf73076dd1c3cd8361468eb
(cherry picked from commit d76c12f69ca440575d476123f0ae142792ef1320)
diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/BatteryEntry.java
index 0478c8b..5c9d071 100644
--- a/src/com/android/settings/fuelgauge/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryEntry.java
@@ -572,7 +572,8 @@
             name = context.getResources().getString(R.string.process_kernel_label);
         } else if ("mediaserver".equals(name)) {
             name = context.getResources().getString(R.string.process_mediaserver_label);
-        } else if ("dex2oat".equals(name)) {
+        } else if ("dex2oat".equals(name) || "dex2oat32".equals(name) ||
+                "dex2oat64".equals(name)) {
             name = context.getResources().getString(R.string.process_dex2oat_label);
         }
         return new NameAndIcon(name, icon, 0 /* iconId */);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
index 96f0ec7..c1b1761 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
@@ -22,6 +22,7 @@
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
@@ -36,6 +37,7 @@
 import android.os.UserManager;
 
 import com.android.settings.R;
+import com.android.settings.fuelgauge.BatteryEntry.NameAndIcon;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -64,6 +66,7 @@
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mMockContext;
+    private Context mContext;
     @Mock private Handler mockHandler;
     @Mock private PackageManager mockPackageManager;
     @Mock private UserManager mockUserManager;
@@ -71,6 +74,7 @@
 
     @Before
     public void stubContextToReturnMockPackageManager() {
+        mContext = spy(RuntimeEnvironment.application);
         when(mMockContext.getPackageManager()).thenReturn(mockPackageManager);
     }
 
@@ -248,4 +252,77 @@
         final String key = entry.getKey();
         assertThat(key).isEqualTo("U|2");
     }
+
+    @Test
+    public void getNameAndIconFromUserId_nullUserInfo_returnDefaultNameAndIcon() {
+        final int userId = 1001;
+        doReturn(mockUserManager).when(mContext).getSystemService(UserManager.class);
+        doReturn(null).when(mockUserManager).getUserInfo(userId);
+
+        final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUserId(
+                mContext, userId);
+        assertThat(nameAndIcon.name).isEqualTo(getString(
+                R.string.running_process_item_removed_user_label));
+        assertThat(nameAndIcon.icon).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));
+
+        assertNameAndIcon("mediaserver", R.string.process_mediaserver_label);
+        assertNameAndIcon("dex2oat32", R.string.process_dex2oat_label);
+        assertNameAndIcon("dex2oat64", R.string.process_dex2oat_label);
+        assertNameAndIcon("dex2oat", R.string.process_dex2oat_label);
+    }
+
+    @Test
+    public void getNameAndIconFromPowerComponent_rerturnExpectedNameAndIcon() {
+        assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
+                R.string.ambient_display_screen_title,
+                R.drawable.ic_settings_aod);
+        assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
+                R.string.power_bluetooth,
+                com.android.internal.R.drawable.ic_settings_bluetooth);
+        assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_CAMERA,
+                R.string.power_camera,
+                R.drawable.ic_settings_camera);
+        assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
+                R.string.power_cell,
+                R.drawable.ic_cellular_1_bar);
+        assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT,
+                R.string.power_flashlight,
+                R.drawable.ic_settings_display);
+        assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_PHONE,
+                R.string.power_phone,
+                R.drawable.ic_settings_voice_calls);
+        assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_SCREEN,
+                R.string.power_screen,
+                R.drawable.ic_settings_display);
+        assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_WIFI,
+                R.string.power_wifi,
+                R.drawable.ic_settings_wireless);
+        assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_IDLE,
+                R.string.power_idle,
+                R.drawable.ic_settings_phone_idle);
+    }
+
+    private void assertNameAndIcon(String name, int stringId) {
+        final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
+                mContext, name, /* uid */ 1000);
+        assertThat(nameAndIcon.name).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);
+    }
+
+    private String getString(int stringId) {
+        return mContext.getResources().getString(stringId);
+    }
 }