diff --git a/res/xml/storage_dashboard_fragment.xml b/res/xml/storage_dashboard_fragment.xml
index f14f4ad..6c2b8d4 100644
--- a/res/xml/storage_dashboard_fragment.xml
+++ b/res/xml/storage_dashboard_fragment.xml
@@ -101,7 +101,8 @@
             android:key="pref_system"
             android:title="@string/storage_os_name"
             android:icon="@drawable/ic_android_vd_theme_24"
-            android:order="202"/>
+            android:order="202"
+            settings:searchable="false"/>
         <com.android.settings.deviceinfo.StorageItemPreference
             android:key="temporary_files"
             android:title="@string/storage_temporary_files"
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdater.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdater.java
index 60a8a13..6fd6f18 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdater.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdater.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.connecteddevice.audiosharing;
 
-import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.util.Log;
 
@@ -30,6 +29,7 @@
 import com.android.settingslib.bluetooth.BluetoothUtils;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.utils.ThreadUtils;
 
 public class AudioSharingBluetoothDeviceUpdater extends BluetoothDeviceUpdater
         implements Preference.OnPreferenceClickListener {
@@ -73,7 +73,9 @@
     @Override
     public boolean onPreferenceClick(Preference preference) {
         mMetricsFeatureProvider.logClickedPreference(preference, mMetricsCategory);
-        mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_AUDIO_SHARING_DEVICE_CLICK);
+        var unused =
+                ThreadUtils.postOnBackgroundThread(
+                        () -> mDevicePreferenceCallback.onDeviceClick(preference));
         return true;
     }
 
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDevicePreferenceController.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDevicePreferenceController.java
index 8b4c7f2..db2c7b2 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDevicePreferenceController.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDevicePreferenceController.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.connecteddevice.audiosharing;
 
+import static com.android.settingslib.Utils.isAudioModeOngoingCall;
 import static com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast.EXTRA_BLUETOOTH_DEVICE;
 
 import android.app.settings.SettingsEnums;
@@ -39,7 +40,9 @@
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.SettingsActivity;
+import com.android.settings.bluetooth.BluetoothDevicePreference;
 import com.android.settings.bluetooth.BluetoothDeviceUpdater;
 import com.android.settings.bluetooth.Utils;
 import com.android.settings.connecteddevice.DevicePreferenceCallback;
@@ -91,6 +94,7 @@
     @Nullable private DashboardFragment mFragment;
     @Nullable private AudioSharingDialogHandler mDialogHandler;
     private AtomicBoolean mIntentHandled = new AtomicBoolean(false);
+    private AtomicBoolean mIsAudioModeOngoingCall = new AtomicBoolean(false);
 
     @VisibleForTesting
     BluetoothLeBroadcastAssistant.Callback mBroadcastAssistantCallback =
@@ -201,51 +205,57 @@
 
     @Override
     public void onStart(@NonNull LifecycleOwner owner) {
-        if (!isAvailable()) {
-            Log.d(TAG, "Skip onStart(), feature is not supported.");
-            return;
-        }
-        if (!AudioSharingUtils.isAudioSharingProfileReady(mProfileManager)
-                && mProfileManager != null) {
-            Log.d(TAG, "Register profile service listener");
-            mProfileManager.addServiceListener(this);
-        }
-        if (mEventManager == null
-                || mAssistant == null
-                || mDialogHandler == null
-                || mBluetoothDeviceUpdater == null) {
-            Log.d(TAG, "Skip onStart(), profile is not ready.");
-            return;
-        }
-        Log.d(TAG, "onStart() Register callbacks.");
-        mEventManager.registerCallback(this);
-        mAssistant.registerServiceCallBack(mExecutor, mBroadcastAssistantCallback);
-        mDialogHandler.registerCallbacks(mExecutor);
-        mBluetoothDeviceUpdater.registerCallback();
-        mBluetoothDeviceUpdater.refreshPreference();
+        var unused = ThreadUtils.postOnBackgroundThread(() -> {
+            if (!isAvailable()) {
+                Log.d(TAG, "Skip onStart(), feature is not supported.");
+                return;
+            }
+            if (!AudioSharingUtils.isAudioSharingProfileReady(mProfileManager)
+                    && mProfileManager != null) {
+                Log.d(TAG, "Register profile service listener");
+                mProfileManager.addServiceListener(this);
+            }
+            if (mEventManager == null
+                    || mAssistant == null
+                    || mDialogHandler == null
+                    || mBluetoothDeviceUpdater == null) {
+                Log.d(TAG, "Skip onStart(), profile is not ready.");
+                return;
+            }
+            Log.d(TAG, "onStart() Register callbacks.");
+            mEventManager.registerCallback(this);
+            mAssistant.registerServiceCallBack(mExecutor, mBroadcastAssistantCallback);
+            mDialogHandler.registerCallbacks(mExecutor);
+            mBluetoothDeviceUpdater.registerCallback();
+            mBluetoothDeviceUpdater.refreshPreference();
+            mIsAudioModeOngoingCall.set(isAudioModeOngoingCall(mContext));
+            updateTitle();
+        });
     }
 
     @Override
     public void onStop(@NonNull LifecycleOwner owner) {
-        if (!isAvailable()) {
-            Log.d(TAG, "Skip onStop(), feature is not supported.");
-            return;
-        }
-        if (mProfileManager != null) {
-            mProfileManager.removeServiceListener(this);
-        }
-        if (mEventManager == null
-                || mAssistant == null
-                || mDialogHandler == null
-                || mBluetoothDeviceUpdater == null) {
-            Log.d(TAG, "Skip onStop(), profile is not ready.");
-            return;
-        }
-        Log.d(TAG, "onStop() Unregister callbacks.");
-        mEventManager.unregisterCallback(this);
-        mAssistant.unregisterServiceCallBack(mBroadcastAssistantCallback);
-        mDialogHandler.unregisterCallbacks();
-        mBluetoothDeviceUpdater.unregisterCallback();
+        var unused = ThreadUtils.postOnBackgroundThread(() -> {
+            if (!isAvailable()) {
+                Log.d(TAG, "Skip onStop(), feature is not supported.");
+                return;
+            }
+            if (mProfileManager != null) {
+                mProfileManager.removeServiceListener(this);
+            }
+            if (mEventManager == null
+                    || mAssistant == null
+                    || mDialogHandler == null
+                    || mBluetoothDeviceUpdater == null) {
+                Log.d(TAG, "Skip onStop(), profile is not ready.");
+                return;
+            }
+            Log.d(TAG, "onStop() Unregister callbacks.");
+            mEventManager.unregisterCallback(this);
+            mAssistant.unregisterServiceCallBack(mBroadcastAssistantCallback);
+            mDialogHandler.unregisterCallbacks();
+            mBluetoothDeviceUpdater.unregisterCallback();
+        });
     }
 
     @Override
@@ -367,6 +377,25 @@
         handleOnProfileStateChanged(cachedDevice, bluetoothProfile);
     }
 
+    @Override
+    public void onAudioModeChanged() {
+        mIsAudioModeOngoingCall.set(isAudioModeOngoingCall(mContext));
+        updateTitle();
+    }
+
+    @Override
+    public void onDeviceClick(@NonNull Preference preference) {
+        boolean isCallMode = mIsAudioModeOngoingCall.get();
+        if (isCallMode) {
+            Log.d(TAG, "onDeviceClick, set active in call mode");
+            CachedBluetoothDevice cachedDevice =
+                    ((BluetoothDevicePreference) preference).getBluetoothDevice();
+            cachedDevice.setActive();
+        }
+        mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_AUDIO_SHARING_DEVICE_CLICK,
+                isCallMode);
+    }
+
     /**
      * Initialize the controller.
      *
@@ -499,4 +528,22 @@
             mDialogHandler.handleDeviceConnected(cachedDevice, /* userTriggered= */ true);
         }
     }
+
+    private void updateTitle() {
+        if (mPreferenceGroup == null) return;
+        int titleResId;
+        if (mIsAudioModeOngoingCall.get()) {
+            // in phone call
+            titleResId = R.string.connected_device_call_device_title;
+        } else {
+            // without phone call
+            titleResId = R.string.audio_sharing_device_group_title;
+        }
+        AudioSharingUtils.postOnMainThread(mContext,
+                () -> {
+                    if (mPreferenceGroup != null) {
+                        mPreferenceGroup.setTitle(titleResId);
+                    }
+                });
+    }
 }
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
index b5d5099..fb5a9f3 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
@@ -169,6 +169,7 @@
             }
             if (packageName != null && hideBackgroundUsageTimeSet.contains(packageName)) {
                 entry.mBackgroundUsageTimeInMs = 0;
+                entry.mForegroundServiceUsageTimeInMs = 0;
             }
         }
     }
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
index faea3d8..d9054a8 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
@@ -115,7 +115,8 @@
                 /* pending */ false,
                 /* timeApprovedMs */ System.currentTimeMillis(),
                 /* lastTimeConnected */ Long.MAX_VALUE,
-                /* systemDataSyncFlags */ -1);
+                /* systemDataSyncFlags */ -1,
+                /* deviceIcon */ null);
 
         mAssociations.add(association);
         showScreen(mController);
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdaterTest.java
index 879c6a4..11e31b6 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdaterTest.java
@@ -28,7 +28,6 @@
 import static org.mockito.Mockito.when;
 import static org.robolectric.Shadows.shadowOf;
 
-import android.app.settings.SettingsEnums;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothLeBroadcastReceiveState;
@@ -271,8 +270,9 @@
     public void onPreferenceClick_logClick() {
         Preference preference = new Preference(mContext);
         mDeviceUpdater.onPreferenceClick(preference);
-        verify(mFeatureFactory.metricsFeatureProvider)
-                .action(mContext, SettingsEnums.ACTION_AUDIO_SHARING_DEVICE_CLICK);
+        shadowOf(Looper.getMainLooper()).idle();
+
+        verify(mDevicePreferenceCallback).onDeviceClick(preference);
     }
 
     private void setupPreferenceMapWithDevice() {
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDevicePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDevicePreferenceControllerTest.java
index 03f1303..61bc8aa 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDevicePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDevicePreferenceControllerTest.java
@@ -25,6 +25,7 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
@@ -44,10 +45,14 @@
 import android.bluetooth.BluetoothStatusCodes;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.media.AudioManager;
 import android.os.Bundle;
 import android.os.Looper;
 import android.platform.test.flag.junit.SetFlagsRule;
+import android.util.Pair;
 
+import androidx.annotation.NonNull;
 import androidx.fragment.app.FragmentActivity;
 import androidx.lifecycle.LifecycleOwner;
 import androidx.preference.Preference;
@@ -56,10 +61,13 @@
 import androidx.preference.PreferenceScreen;
 import androidx.test.core.app.ApplicationProvider;
 
+import com.android.settings.R;
 import com.android.settings.SettingsActivity;
+import com.android.settings.bluetooth.BluetoothDevicePreference;
 import com.android.settings.bluetooth.Utils;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.shadow.ShadowAudioManager;
 import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
 import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
 import com.android.settings.testutils.shadow.ShadowFragment;
@@ -99,14 +107,16 @@
 @RunWith(RobolectricTestRunner.class)
 @Config(
         shadows = {
-            ShadowBluetoothAdapter.class,
-            ShadowBluetoothUtils.class,
-            ShadowFragment.class,
+                ShadowBluetoothAdapter.class,
+                ShadowBluetoothUtils.class,
+                ShadowFragment.class,
+                ShadowAudioManager.class,
         })
 public class AudioSharingDevicePreferenceControllerTest {
     private static final String KEY = "audio_sharing_device_list";
     private static final String KEY_AUDIO_SHARING_SETTINGS =
             "connected_device_audio_sharing_settings";
+    private static final String TEST_DEVICE_NAME = "test";
 
     @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@@ -140,6 +150,7 @@
     private PreferenceCategory mPreferenceGroup;
     private Preference mAudioSharingPreference;
     private FakeFeatureFactory mFeatureFactory;
+    private AudioManager mAudioManager;
 
     @Before
     public void setUp() {
@@ -153,6 +164,7 @@
         mLifecycleOwner = () -> mLifecycle;
         mLifecycle = new Lifecycle(mLifecycleOwner);
         mFeatureFactory = FakeFeatureFactory.setupForTest();
+        mAudioManager = mContext.getSystemService(AudioManager.class);
         ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBtManager;
         mLocalBtManager = Utils.getLocalBtManager(mContext);
         when(mLocalBtManager.getEventManager()).thenReturn(mEventManager);
@@ -571,4 +583,51 @@
         verify(mBluetoothDeviceUpdater, never()).forceUpdate();
         verifyNoMoreInteractions(mFeatureFactory.metricsFeatureProvider);
     }
+
+    @Test
+    public void testInCallState_showCallStateTitleAndSetActiveOnDeviceClick() {
+        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+        mController.displayPreference(mScreen);
+
+        mAudioManager.setMode(AudioManager.MODE_IN_CALL);
+        mController.onAudioModeChanged();
+        shadowOf(Looper.getMainLooper()).idle();
+
+        assertThat(mPreferenceGroup.getTitle().toString())
+                .isEqualTo(mContext.getString(R.string.connected_device_call_device_title));
+
+        BluetoothDevicePreference preference = createBluetoothDevicePreference();
+        mController.onDeviceClick(preference);
+        verify(mCachedDevice).setActive();
+    }
+
+    @Test
+    public void testInNormalState_showNormalStateTitleAndDoNothingOnDeviceClick() {
+        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+        mController.displayPreference(mScreen);
+
+        mAudioManager.setMode(AudioManager.MODE_NORMAL);
+        mController.onAudioModeChanged();
+        shadowOf(Looper.getMainLooper()).idle();
+
+        assertThat(mPreferenceGroup.getTitle().toString())
+                .isEqualTo(mContext.getString(R.string.audio_sharing_device_group_title));
+
+        BluetoothDevicePreference preference = createBluetoothDevicePreference();
+        mController.onDeviceClick(preference);
+
+        verify(mCachedDevice, never()).setActive();
+    }
+
+    @NonNull
+    private BluetoothDevicePreference createBluetoothDevicePreference() {
+        Drawable drawable = mock(Drawable.class);
+        Pair<Drawable, String> pairs = new Pair<>(drawable, TEST_DEVICE_NAME);
+        when(mCachedDevice.getDrawableWithDescription()).thenReturn(pairs);
+        return new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice,
+                        /* showDeviceWithoutNames= */ false,
+                        BluetoothDevicePreference.SortType.TYPE_DEFAULT);
+    }
 }
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 ae4c56d..1f3067e 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
@@ -903,6 +903,7 @@
                                                 ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                                                 0L,
                                                 0L,
+                                                0L,
                                                 false)),
                         batteryHistoryKeys[1],
                                 Map.of(
@@ -920,6 +921,7 @@
                                                 ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                                                 0L,
                                                 0L,
+                                                0L,
                                                 false)),
                         batteryHistoryKeys[2],
                                 Map.of(
@@ -937,6 +939,7 @@
                                                 ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                                                 0L,
                                                 0L,
+                                                0L,
                                                 false)));
         final BatteryLevelData batteryLevelData = generateBatteryLevelData(batteryHistoryKeys);
         final Map<Integer, Map<Integer, Map<Long, Map<String, List<AppUsagePeriod>>>>>
@@ -993,6 +996,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         // Adds the index = 0 data.
@@ -1010,6 +1014,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 10L,
+                        /* foregroundServiceUsageTimeInMs= */ 15L,
                         /* backgroundUsageTimeInMs= */ 20L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1034,6 +1039,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 15L,
+                        /* foregroundServiceUsageTimeInMs= */ 20L,
                         /* backgroundUsageTimeInMs= */ 25L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1054,6 +1060,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 25L,
+                        /* foregroundServiceUsageTimeInMs= */ 30L,
                         /* backgroundUsageTimeInMs= */ 35L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1070,6 +1077,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY,
                         /* foregroundUsageTimeInMs= */ 40L,
+                        /* foregroundServiceUsageTimeInMs= */ 45L,
                         /* backgroundUsageTimeInMs= */ 50L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1086,6 +1094,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 5L,
+                        /* foregroundServiceUsageTimeInMs= */ 5L,
                         /* backgroundUsageTimeInMs= */ 5L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1106,6 +1115,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 30L,
+                        /* foregroundServiceUsageTimeInMs= */ 35L,
                         /* backgroundUsageTimeInMs= */ 40L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1122,6 +1132,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY,
                         /* foregroundUsageTimeInMs= */ 50L,
+                        /* foregroundServiceUsageTimeInMs= */ 55L,
                         /* backgroundUsageTimeInMs= */ 60L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1138,6 +1149,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 5L,
+                        /* foregroundServiceUsageTimeInMs= */ 5L,
                         /* backgroundUsageTimeInMs= */ 5L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1195,6 +1207,7 @@
                 /* backgroundUsageConsumePower= */ 9,
                 /* cachedUsageConsumePower= */ 8,
                 /* foregroundUsageTimeInMs= */ 30,
+                /* foregroundServiceUsageTimeInMs= */ 35,
                 /* backgroundUsageTimeInMs= */ 40,
                 /* screenOnTimeInMs= */ 12);
         assertBatteryDiffEntry(
@@ -1208,6 +1221,7 @@
                 /* backgroundUsageConsumePower= */ 8,
                 /* cachedUsageConsumePower= */ 8,
                 /* foregroundUsageTimeInMs= */ 5,
+                /* foregroundServiceUsageTimeInMs= */ 5,
                 /* backgroundUsageTimeInMs= */ 5,
                 /* screenOnTimeInMs= */ 0);
         assertBatteryDiffEntry(
@@ -1221,6 +1235,7 @@
                 /* backgroundUsageConsumePower= */ 5,
                 /* cachedUsageConsumePower= */ 5,
                 /* foregroundUsageTimeInMs= */ 16,
+                /* foregroundServiceUsageTimeInMs= */ 55,
                 /* backgroundUsageTimeInMs= */ 60,
                 /* screenOnTimeInMs= */ 9);
         resultDiffData = resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL);
@@ -1235,6 +1250,7 @@
                 /* backgroundUsageConsumePower= */ 5,
                 /* cachedUsageConsumePower= */ 5,
                 /* foregroundUsageTimeInMs= */ 15,
+                /* foregroundServiceUsageTimeInMs= */ 20,
                 /* backgroundUsageTimeInMs= */ 25,
                 /* screenOnTimeInMs= */ 5);
         resultDiffData = resultMap.get(1).get(DataProcessor.SELECTED_INDEX_ALL);
@@ -1249,6 +1265,7 @@
                 /* backgroundUsageConsumePower= */ 8,
                 /* cachedUsageConsumePower= */ 8,
                 /* foregroundUsageTimeInMs= */ 5,
+                /* foregroundServiceUsageTimeInMs= */ 5,
                 /* backgroundUsageTimeInMs= */ 5,
                 /* screenOnTimeInMs= */ 0);
         assertBatteryDiffEntry(
@@ -1262,6 +1279,7 @@
                 /* backgroundUsageConsumePower= */ 4,
                 /* cachedUsageConsumePower= */ 3,
                 /* foregroundUsageTimeInMs= */ 15,
+                /* foregroundServiceUsageTimeInMs= */ 15,
                 /* backgroundUsageTimeInMs= */ 15,
                 /* screenOnTimeInMs= */ 7);
         assertBatteryDiffEntry(
@@ -1275,6 +1293,7 @@
                 /* backgroundUsageConsumePower= */ 5,
                 /* cachedUsageConsumePower= */ 5,
                 /* foregroundUsageTimeInMs= */ 16,
+                /* foregroundServiceUsageTimeInMs= */ 55,
                 /* backgroundUsageTimeInMs= */ 60,
                 /* screenOnTimeInMs= */ 9);
     }
@@ -1308,6 +1327,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 10L,
+                        /* foregroundServiceUsageTimeInMs= */ 15L,
                         /* backgroundUsageTimeInMs= */ 20L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1324,6 +1344,7 @@
                         currentUserId + 1,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 10L,
+                        /* foregroundServiceUsageTimeInMs= */ 15L,
                         /* backgroundUsageTimeInMs= */ 20L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1340,6 +1361,7 @@
                         currentUserId + 2,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 20L,
+                        /* foregroundServiceUsageTimeInMs= */ 25L,
                         /* backgroundUsageTimeInMs= */ 30L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1359,6 +1381,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 20L,
+                        /* foregroundServiceUsageTimeInMs= */ 25L,
                         /* backgroundUsageTimeInMs= */ 30L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1375,6 +1398,7 @@
                         currentUserId + 1,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 10L,
+                        /* foregroundServiceUsageTimeInMs= */ 15L,
                         /* backgroundUsageTimeInMs= */ 20L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1391,6 +1415,7 @@
                         currentUserId + 2,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 30L,
+                        /* foregroundServiceUsageTimeInMs= */ 30L,
                         /* backgroundUsageTimeInMs= */ 30L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1410,6 +1435,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 20L,
+                        /* foregroundServiceUsageTimeInMs= */ 25L,
                         /* backgroundUsageTimeInMs= */ 30L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1426,6 +1452,7 @@
                         currentUserId + 1,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 20L,
+                        /* foregroundServiceUsageTimeInMs= */ 20L,
                         /* backgroundUsageTimeInMs= */ 20L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1442,6 +1469,7 @@
                         currentUserId + 2,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 30L,
+                        /* foregroundServiceUsageTimeInMs= */ 30L,
                         /* backgroundUsageTimeInMs= */ 30L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1477,6 +1505,7 @@
                 /* backgroundUsageConsumePower= */ 5,
                 /* cachedUsageConsumePower= */ 5,
                 /* foregroundUsageTimeInMs= */ 10,
+                /* foregroundServiceUsageTimeInMs= */ 10,
                 /* backgroundUsageTimeInMs= */ 10,
                 /* screenOnTimeInMs= */ 0);
         assertThat(resultDiffData.getSystemDiffEntryList()).isEmpty();
@@ -1509,6 +1538,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1528,6 +1558,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1547,6 +1578,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 3600000L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 7200000L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1587,6 +1619,7 @@
         final BatteryDiffEntry resultEntry = resultDiffData.getAppDiffEntryList().get(0);
         assertThat(resultEntry.mForegroundUsageTimeInMs)
                 .isEqualTo(Math.round(entry.mForegroundUsageTimeInMs * ratio));
+        assertThat(resultEntry.mForegroundServiceUsageTimeInMs).isEqualTo(0);
         assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(0);
         assertThat(resultEntry.mConsumePower).isEqualTo(entry.mConsumePower * ratio);
         assertThat(resultEntry.mForegroundUsageConsumePower)
@@ -1627,6 +1660,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1643,6 +1677,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1662,6 +1697,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1678,6 +1714,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1697,6 +1734,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 10L,
+                        /* foregroundServiceUsageTimeInMs= */ 15L,
                         /* backgroundUsageTimeInMs= */ 20L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1713,6 +1751,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 10L,
+                        /* foregroundServiceUsageTimeInMs= */ 15L,
                         /* backgroundUsageTimeInMs= */ 20L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1748,6 +1787,7 @@
                 /* backgroundUsageConsumePower= */ 5,
                 /* cachedUsageConsumePower= */ 5,
                 /* foregroundUsageTimeInMs= */ 10,
+                /* foregroundServiceUsageTimeInMs= */ 15,
                 /* backgroundUsageTimeInMs= */ 20,
                 /* screenOnTimeInMs= */ 0);
     }
@@ -1777,6 +1817,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1793,6 +1834,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1812,6 +1854,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1828,6 +1871,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 0L,
+                        /* foregroundServiceUsageTimeInMs= */ 0L,
                         /* backgroundUsageTimeInMs= */ 0L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1847,6 +1891,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 10L,
+                        /* foregroundServiceUsageTimeInMs= */ 15L,
                         /* backgroundUsageTimeInMs= */ 20L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1863,6 +1908,7 @@
                         currentUserId,
                         ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
                         /* foregroundUsageTimeInMs= */ 10L,
+                        /* foregroundServiceUsageTimeInMs= */ 15L,
                         /* backgroundUsageTimeInMs= */ 20L,
                         /* isHidden= */ false);
         entryMap.put(entry.getKey(), entry);
@@ -1892,6 +1938,7 @@
         assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(20);
         resultEntry = resultDiffData.getAppDiffEntryList().get(1);
         assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(0);
+        assertThat(resultEntry.mForegroundServiceUsageTimeInMs).isEqualTo(0);
     }
 
     @Test
@@ -1921,6 +1968,7 @@
         doReturn(0.0).when(mMockBatteryEntry1).getConsumedPowerInBackground();
         doReturn(0.0).when(mMockBatteryEntry1).getConsumedPowerInCached();
         doReturn(30L).when(mMockBatteryEntry1).getTimeInForegroundMs();
+        doReturn(35L).when(mMockBatteryEntry1).getTimeInForegroundServiceMs();
         doReturn(40L).when(mMockBatteryEntry1).getTimeInBackgroundMs();
         doReturn(1).when(mMockBatteryEntry1).getUid();
         doReturn(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).when(mMockBatteryEntry1).getConsumerType();
@@ -1930,6 +1978,7 @@
         doReturn(0.0).when(mMockBatteryEntry2).getConsumedPowerInBackground();
         doReturn(0.0).when(mMockBatteryEntry2).getConsumedPowerInCached();
         doReturn(20L).when(mMockBatteryEntry2).getTimeInForegroundMs();
+        doReturn(20L).when(mMockBatteryEntry2).getTimeInForegroundServiceMs();
         doReturn(20L).when(mMockBatteryEntry2).getTimeInBackgroundMs();
         doReturn(2).when(mMockBatteryEntry2).getUid();
         doReturn(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).when(mMockBatteryEntry2).getConsumerType();
@@ -1939,6 +1988,7 @@
         doReturn(0.0).when(mMockBatteryEntry3).getConsumedPowerInBackground();
         doReturn(0.0).when(mMockBatteryEntry3).getConsumedPowerInCached();
         doReturn(0L).when(mMockBatteryEntry3).getTimeInForegroundMs();
+        doReturn(0L).when(mMockBatteryEntry3).getTimeInForegroundServiceMs();
         doReturn(0L).when(mMockBatteryEntry3).getTimeInBackgroundMs();
         doReturn(3).when(mMockBatteryEntry3).getUid();
         doReturn(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).when(mMockBatteryEntry3).getConsumerType();
@@ -1948,6 +1998,7 @@
         doReturn(0.3).when(mMockBatteryEntry4).getConsumedPowerInBackground();
         doReturn(0.1).when(mMockBatteryEntry4).getConsumedPowerInCached();
         doReturn(10L).when(mMockBatteryEntry4).getTimeInForegroundMs();
+        doReturn(10L).when(mMockBatteryEntry4).getTimeInForegroundServiceMs();
         doReturn(10L).when(mMockBatteryEntry4).getTimeInBackgroundMs();
         doReturn(4).when(mMockBatteryEntry4).getUid();
         doReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
@@ -1978,6 +2029,7 @@
                 /* backgroundUsageConsumePower= */ 0,
                 /* cachedUsageConsumePower= */ 0,
                 /* foregroundUsageTimeInMs= */ 20,
+                /* foregroundServiceUsageTimeInMs= */ 20,
                 /* backgroundUsageTimeInMs= */ 20,
                 /* screenOnTimeInMs= */ 0);
         assertBatteryDiffEntry(
@@ -1991,6 +2043,7 @@
                 /* backgroundUsageConsumePower= */ 0,
                 /* cachedUsageConsumePower= */ 0,
                 /* foregroundUsageTimeInMs= */ 30,
+                /* foregroundServiceUsageTimeInMs= */ 35,
                 /* backgroundUsageTimeInMs= */ 40,
                 /* screenOnTimeInMs= */ 0);
         assertBatteryDiffEntry(
@@ -2004,6 +2057,7 @@
                 /* backgroundUsageConsumePower= */ 0.3,
                 /* cachedUsageConsumePower= */ 0.1,
                 /* foregroundUsageTimeInMs= */ 10,
+                /* foregroundServiceUsageTimeInMs= */ 10,
                 /* backgroundUsageTimeInMs= */ 10,
                 /* screenOnTimeInMs= */ 0);
     }
@@ -2390,6 +2444,7 @@
             final long userId,
             final int consumerType,
             final long foregroundUsageTimeInMs,
+            final long foregroundServiceUsageTimeInMs,
             final long backgroundUsageTimeInMs,
             final boolean isHidden) {
         // Only insert required fields.
@@ -2402,6 +2457,7 @@
                         .setBackgroundUsageConsumePower(backgroundUsageConsumePower)
                         .setCachedUsageConsumePower(cachedUsageConsumePower)
                         .setForegroundUsageTimeInMs(foregroundUsageTimeInMs)
+                        .setForegroundServiceUsageTimeInMs(foregroundServiceUsageTimeInMs)
                         .setBackgroundUsageTimeInMs(backgroundUsageTimeInMs)
                         .setIsHidden(isHidden)
                         .build();
@@ -2531,6 +2587,7 @@
             final double backgroundUsageConsumePower,
             final double cachedUsageConsumePower,
             final long foregroundUsageTimeInMs,
+            final long foregroundServiceUsageTimeInMs,
             final long backgroundUsageTimeInMs,
             final long screenOnTimeInMs) {
         assertThat(entry.mUserId).isEqualTo(userId);
@@ -2543,6 +2600,8 @@
         assertThat(entry.mBackgroundUsageConsumePower).isEqualTo(backgroundUsageConsumePower);
         assertThat(entry.mCachedUsageConsumePower).isEqualTo(cachedUsageConsumePower);
         assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs);
+        assertThat(entry.mForegroundServiceUsageTimeInMs)
+                .isEqualTo(foregroundServiceUsageTimeInMs);
         assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
         assertThat(entry.mScreenOnTimeInMs).isEqualTo(screenOnTimeInMs);
     }
