diff --git a/src/com/android/settings/datausage/AppDataUsageCycleController.kt b/src/com/android/settings/datausage/AppDataUsageCycleController.kt
index b1a0e76..a3b7499 100644
--- a/src/com/android/settings/datausage/AppDataUsageCycleController.kt
+++ b/src/com/android/settings/datausage/AppDataUsageCycleController.kt
@@ -25,7 +25,6 @@
 import androidx.lifecycle.repeatOnLifecycle
 import androidx.preference.PreferenceScreen
 import com.android.settings.core.BasePreferenceController
-import com.android.settings.datausage.lib.AppDataUsageDetailsRepository
 import com.android.settings.datausage.lib.IAppDataUsageDetailsRepository
 import com.android.settings.datausage.lib.NetworkUsageDetailsData
 import kotlinx.coroutines.Dispatchers
@@ -40,11 +39,18 @@
     private lateinit var preference: SpinnerPreference
     private var cycleAdapter: CycleAdapter? = null
 
-    private var initialCycles: List<Long> = emptyList()
-    private var initialSelectedEndTime: Long = -1
-
     private var usageDetailsDataList: List<NetworkUsageDetailsData> = emptyList()
 
+    override fun getAvailabilityStatus() = AVAILABLE
+
+    override fun displayPreference(screen: PreferenceScreen) {
+        super.displayPreference(screen)
+        preference = screen.findPreference(preferenceKey)!!
+        if (cycleAdapter == null) {
+            cycleAdapter = CycleAdapter(mContext, preference)
+        }
+    }
+
     fun init(
         repository: IAppDataUsageDetailsRepository,
         onUsageDataUpdated: (NetworkUsageDetailsData) -> Unit,
@@ -60,22 +66,9 @@
      * before loading to reduce flicker.
      */
     fun setInitialCycles(initialCycles: List<Long>, initialSelectedEndTime: Long) {
-        this.initialCycles = initialCycles
-        this.initialSelectedEndTime = initialSelectedEndTime
-    }
-
-    override fun getAvailabilityStatus() = AVAILABLE
-
-    override fun displayPreference(screen: PreferenceScreen) {
-        super.displayPreference(screen)
-        preference = screen.findPreference(preferenceKey)!!
-        if (cycleAdapter == null) {
-            cycleAdapter = CycleAdapter(mContext, preference).apply {
-                if (initialCycles.isNotEmpty()) {
-                    setInitialCycleList(initialCycles, initialSelectedEndTime)
-                    preference.setHasCycles(true)
-                }
-            }
+        if (initialCycles.isNotEmpty()) {
+            cycleAdapter?.setInitialCycleList(initialCycles, initialSelectedEndTime)
+            preference.setHasCycles(true)
         }
     }
 
diff --git a/src/com/android/settings/datausage/ChartDataUsagePreferenceController.kt b/src/com/android/settings/datausage/ChartDataUsagePreferenceController.kt
index 5149af0..780978f 100644
--- a/src/com/android/settings/datausage/ChartDataUsagePreferenceController.kt
+++ b/src/com/android/settings/datausage/ChartDataUsagePreferenceController.kt
@@ -39,6 +39,8 @@
     private lateinit var repository: INetworkCycleDataRepository
     private lateinit var preference: ChartDataUsagePreference
     private lateinit var lifecycleScope: LifecycleCoroutineScope
+    private var lastStartTime: Long? = null
+    private var lastEndTime: Long? = null
 
     open fun init(template: NetworkTemplate) {
         this.repository = NetworkCycleDataRepository(mContext, template)
@@ -72,6 +74,10 @@
     }
 
     fun update(startTime: Long, endTime: Long) {
+        if (lastStartTime == startTime && lastEndTime == endTime) return
+        lastStartTime = startTime
+        lastEndTime = endTime
+
         preference.setTime(startTime, endTime)
         preference.setNetworkCycleData(NetworkCycleChartData.AllZero)
         lifecycleScope.launch {
diff --git a/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageCycleControllerTest.kt b/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageCycleControllerTest.kt
index ea51f01..fe35259 100644
--- a/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageCycleControllerTest.kt
+++ b/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageCycleControllerTest.kt
@@ -22,7 +22,6 @@
 import androidx.preference.PreferenceManager
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.android.settings.datausage.lib.AppDataUsageDetailsRepository
 import com.android.settings.datausage.lib.IAppDataUsageDetailsRepository
 import com.android.settings.datausage.lib.NetworkUsageDetailsData
 import com.google.common.truth.Truth.assertThat
@@ -31,23 +30,18 @@
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.mockito.kotlin.doReturn
-import org.mockito.kotlin.mock
 import org.mockito.kotlin.spy
-import org.mockito.kotlin.stub
 import org.mockito.kotlin.verify
 
 @RunWith(AndroidJUnit4::class)
 class AppDataUsageCycleControllerTest {
     private val context: Context = ApplicationProvider.getApplicationContext()
 
-    private val controller = AppDataUsageCycleController(context, KEY)
-
     private val preference = spy(SpinnerPreference(context, null).apply { key = KEY })
 
     private val preferenceScreen = PreferenceManager(context).createPreferenceScreen(context)
 
-    private val onUsageDataUpdated: (NetworkUsageDetailsData) -> Unit = {}
+    private val controller = AppDataUsageCycleController(context, KEY)
 
     @Before
     fun setUp() {
@@ -59,8 +53,8 @@
         val repository = object : IAppDataUsageDetailsRepository {
             override suspend fun queryDetailsForCycles() = emptyList<NetworkUsageDetailsData>()
         }
-        controller.init(repository, onUsageDataUpdated)
         controller.displayPreference(preferenceScreen)
+        controller.init(repository) {}
 
         controller.onViewCreated(TestLifecycleOwner())
         delay(100)
@@ -79,8 +73,8 @@
         val repository = object : IAppDataUsageDetailsRepository {
             override suspend fun queryDetailsForCycles() = listOf(detailsData)
         }
-        controller.init(repository, onUsageDataUpdated)
         controller.displayPreference(preferenceScreen)
+        controller.init(repository) {}
 
         controller.onViewCreated(TestLifecycleOwner())
         delay(100)
@@ -93,14 +87,14 @@
         val repository = object : IAppDataUsageDetailsRepository {
             override suspend fun queryDetailsForCycles() = emptyList<NetworkUsageDetailsData>()
         }
-        controller.init(repository, onUsageDataUpdated)
+        controller.displayPreference(preferenceScreen)
+        controller.init(repository) {}
+
         controller.setInitialCycles(
             initialCycles = listOf(CYCLE2_END_TIME, CYCLE1_END_TIME, CYCLE1_START_TIME),
             initialSelectedEndTime = CYCLE1_END_TIME,
         )
 
-        controller.displayPreference(preferenceScreen)
-
         verify(preference).setSelection(1)
     }
 
