diff --git a/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFeatureProvider.java b/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFeatureProvider.java
new file mode 100644
index 0000000..1c8fd12
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFeatureProvider.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.deviceinfo.batteryinfo;
+
+/**
+ * Feature Provider used for getting battery information.
+ */
+public interface BatteryInfoFeatureProvider {
+
+    /** Returns true if Manufacture date should be shown */
+    boolean isManufactureDateAvailable();
+
+    /** Returns true if First use date should be shown */
+    boolean isFirstUseDateAvailable();
+
+    /** Returns the summary of battery manufacture date */
+    CharSequence getManufactureDateSummary();
+
+    /** Returns the summary of battery first use date */
+    CharSequence getFirstUseDateSummary();
+}
diff --git a/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFeatureProviderImpl.java b/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFeatureProviderImpl.java
new file mode 100644
index 0000000..36ddad7
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFeatureProviderImpl.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.deviceinfo.batteryinfo;
+
+import android.content.Context;
+import android.os.BatteryManager;
+
+import java.text.DateFormat;
+import java.util.Date;
+
+/** Implementation of {@code BatteryInfoFeatureProvider} */
+public class BatteryInfoFeatureProviderImpl implements BatteryInfoFeatureProvider {
+
+    private BatteryManager mBatteryManager;
+    private Context mContext;
+    private long mManufactureDateInSec;
+    private long mFirstUseDateInSec;
+
+    public BatteryInfoFeatureProviderImpl(Context context) {
+        mContext = context;
+        mBatteryManager = mContext.getSystemService(BatteryManager.class);
+    }
+
+    @Override
+    public boolean isManufactureDateAvailable() {
+        return false;
+    }
+
+    @Override
+    public boolean isFirstUseDateAvailable() {
+        return false;
+    }
+
+    @Override
+    public CharSequence getManufactureDateSummary() {
+        if (!isManufactureDateAvailable()) {
+            return null;
+        }
+        final long manufactureDateInSec = getManufactureDate();
+
+        return getFormattedDate(manufactureDateInSec * 1000L);
+    }
+
+    @Override
+    public CharSequence getFirstUseDateSummary() {
+        if (!isFirstUseDateAvailable()) {
+            return null;
+        }
+        final long firstUseDateInSec = getFirstUseDate();
+
+        return getFormattedDate(firstUseDateInSec * 1000L);
+    }
+
+    protected long getManufactureDate() {
+        if (mManufactureDateInSec == 0L) {
+            mManufactureDateInSec = mBatteryManager.getLongProperty(
+                    BatteryManager.BATTERY_PROPERTY_MANUFACTURING_DATE);
+        }
+        return mManufactureDateInSec;
+    }
+
+    protected long getFirstUseDate() {
+        if (mFirstUseDateInSec == 0L) {
+            mFirstUseDateInSec = mBatteryManager.getLongProperty(
+                    BatteryManager.BATTERY_PROPERTY_FIRST_USAGE_DATE);
+        }
+        return mFirstUseDateInSec;
+    }
+
+    private CharSequence getFormattedDate(long dateInMs) {
+        final Date date = new Date(dateInMs);
+        final CharSequence formattedDate =
+                DateFormat.getDateInstance(DateFormat.LONG).format(date.getTime());
+
+        return formattedDate;
+    }
+}
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index 9d81baa..d7c2c34 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -33,6 +33,7 @@
 import com.android.settings.bluetooth.BluetoothFeatureProvider;
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
+import com.android.settings.deviceinfo.batteryinfo.BatteryInfoFeatureProvider;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
 import com.android.settings.fuelgauge.BatterySettingsFeatureProvider;
 import com.android.settings.fuelgauge.BatteryStatusFeatureProvider;
@@ -204,6 +205,11 @@
      */
     public abstract KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider();
 
+    /**
+     * Retrieves implementation for Battery information feature.
+     */
+    public abstract BatteryInfoFeatureProvider getBatteryInfoFeatureProvider();
+
     public static final class FactoryNotFoundException extends RuntimeException {
         public FactoryNotFoundException(Throwable throwable) {
             super("Unable to create factory. Did you misconfigure Proguard?", throwable);
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index d4f1878..10135f2 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -47,6 +47,8 @@
 import com.android.settings.dashboard.DashboardFeatureProviderImpl;
 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
 import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
+import com.android.settings.deviceinfo.batteryinfo.BatteryInfoFeatureProvider;
+import com.android.settings.deviceinfo.batteryinfo.BatteryInfoFeatureProviderImpl;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl;
 import com.android.settings.fuelgauge.BatterySettingsFeatureProvider;
@@ -117,6 +119,7 @@
     private AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider;
     private WifiFeatureProvider mWifiFeatureProvider;
     private KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider;
+    private BatteryInfoFeatureProvider mBatteryInfoFeatureProvider;
 
     @Override
     public SupportFeatureProvider getSupportFeatureProvider(Context context) {
@@ -376,4 +379,12 @@
         }
         return mKeyboardSettingsFeatureProvider;
     }
+
+    @Override
+    public BatteryInfoFeatureProvider getBatteryInfoFeatureProvider() {
+        if (mBatteryInfoFeatureProvider == null) {
+            mBatteryInfoFeatureProvider = new BatteryInfoFeatureProviderImpl(getAppContext());
+        }
+        return mBatteryInfoFeatureProvider;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFeatureProviderImplTest.java
new file mode 100644
index 0000000..6c14977
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFeatureProviderImplTest.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.deviceinfo.batteryinfo;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.BatteryManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+
+
+@RunWith(RobolectricTestRunner.class)
+public class BatteryInfoFeatureProviderImplTest {
+    @Mock
+    private BatteryManager mBatteryManager;
+
+    private Context mContext;
+    private BatteryInfoFeatureProviderImpl mImpl;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(org.robolectric.RuntimeEnvironment.application);
+        doReturn(mBatteryManager).when(mContext).getSystemService(BatteryManager.class);
+        mImpl = spy(new BatteryInfoFeatureProviderImpl(mContext));
+    }
+
+    @Test
+    public void isManufactureDateAvailable_returnFalse() {
+        assertThat(mImpl.isManufactureDateAvailable()).isFalse();
+    }
+
+    @Test
+    public void isFirstUseDateAvailable_returnFalse() {
+        assertThat(mImpl.isFirstUseDateAvailable()).isFalse();
+    }
+
+    @Test
+    public void getManufactureDateSummary_available_returnExpectedDate() {
+        doReturn(true).when(mImpl).isManufactureDateAvailable();
+        when(mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_MANUFACTURING_DATE))
+                .thenReturn(1669680000L);
+
+        final CharSequence result = mImpl.getManufactureDateSummary();
+
+        assertThat(result).isEqualTo("November 29, 2022");
+    }
+
+    @Test
+    public void getManufactureDateSummary_unavailable_returnNull() {
+        doReturn(false).when(mImpl).isManufactureDateAvailable();
+
+        assertThat(mImpl.getManufactureDateSummary()).isNull();
+    }
+
+    @Test
+    public void getFirstUseDateSummary_available_returnExpectedDate() {
+        doReturn(true).when(mImpl).isFirstUseDateAvailable();
+        when(mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_FIRST_USAGE_DATE))
+                .thenReturn(1669680000L);
+
+        final CharSequence result = mImpl.getFirstUseDateSummary();
+
+        assertThat(result).isEqualTo("November 29, 2022");
+    }
+
+    @Test
+    public void getFirstUseDateSummary_unavailable_returnNull() {
+        doReturn(false).when(mImpl).isFirstUseDateAvailable();
+
+        assertThat(mImpl.getFirstUseDateSummary()).isNull();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index 4705380..e77229f 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -31,6 +31,7 @@
 import com.android.settings.bluetooth.BluetoothFeatureProvider;
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
+import com.android.settings.deviceinfo.batteryinfo.BatteryInfoFeatureProvider;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
 import com.android.settings.fuelgauge.BatterySettingsFeatureProvider;
 import com.android.settings.fuelgauge.BatteryStatusFeatureProvider;
@@ -82,6 +83,7 @@
     public final AwareFeatureProvider mAwareFeatureProvider;
     public final FaceFeatureProvider mFaceFeatureProvider;
     public final BiometricsRepositoryProvider mBiometricsRepositoryProvider;
+    public final BatteryInfoFeatureProvider mBatteryInfoFeatureProvider;
 
     public PanelFeatureProvider panelFeatureProvider;
     public SlicesFeatureProvider slicesFeatureProvider;
@@ -148,6 +150,7 @@
         mAdvancedVpnFeatureProvider = mock(AdvancedVpnFeatureProvider.class);
         mWifiFeatureProvider = mock(WifiFeatureProvider.class);
         mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class);
+        mBatteryInfoFeatureProvider = mock(BatteryInfoFeatureProvider.class);
     }
 
     @Override
@@ -304,4 +307,9 @@
     public KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider() {
         return mKeyboardSettingsFeatureProvider;
     }
+
+    @Override
+    public BatteryInfoFeatureProvider getBatteryInfoFeatureProvider() {
+        return mBatteryInfoFeatureProvider;
+    }
 }
diff --git a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
index 50589ac..801b52e 100644
--- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
+++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
@@ -27,6 +27,7 @@
 import com.android.settings.bluetooth.BluetoothFeatureProvider
 import com.android.settings.dashboard.DashboardFeatureProvider
 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider
+import com.android.settings.deviceinfo.batteryinfo.BatteryInfoFeatureProvider
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider
 import com.android.settings.fuelgauge.BatterySettingsFeatureProvider
 import com.android.settings.fuelgauge.BatteryStatusFeatureProvider
@@ -187,4 +188,8 @@
     override fun getKeyboardSettingsFeatureProvider(): KeyboardSettingsFeatureProvider {
         TODO("Not yet implemented")
     }
+
+    override fun getBatteryInfoFeatureProvider(): BatteryInfoFeatureProvider {
+        TODO("Not yet implemented")
+    }
 }
diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
index d749010..ae5f5f5 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -29,6 +29,7 @@
 import com.android.settings.bluetooth.BluetoothFeatureProvider;
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
+import com.android.settings.deviceinfo.batteryinfo.BatteryInfoFeatureProvider;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
 import com.android.settings.fuelgauge.BatterySettingsFeatureProvider;
 import com.android.settings.fuelgauge.BatteryStatusFeatureProvider;
@@ -77,6 +78,7 @@
     public final AwareFeatureProvider mAwareFeatureProvider;
     public final FaceFeatureProvider mFaceFeatureProvider;
     public final BiometricsRepositoryProvider mBiometricsRepositoryProvider;
+    public final BatteryInfoFeatureProvider mBatteryInfoFeatureProvider;
 
     public PanelFeatureProvider panelFeatureProvider;
     public SlicesFeatureProvider slicesFeatureProvider;
@@ -134,6 +136,7 @@
         mAdvancedVpnFeatureProvider = mock(AdvancedVpnFeatureProvider.class);
         mWifiFeatureProvider = mock(WifiFeatureProvider.class);
         mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class);
+        mBatteryInfoFeatureProvider = mock(BatteryInfoFeatureProvider.class);
     }
 
     @Override
@@ -290,4 +293,9 @@
     public KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider() {
         return mKeyboardSettingsFeatureProvider;
     }
+
+    @Override
+    public BatteryInfoFeatureProvider getBatteryInfoFeatureProvider() {
+        return mBatteryInfoFeatureProvider;
+    }
 }
