Merge cherrypicks of ['googleplex-android-review.googlesource.com/31154470', 'googleplex-android-review.googlesource.com/31569659'] into sparse-13010343-L69700030009374823.
SPARSE_CHANGE: I9a5a75420a76ff0aefab2e2f9b14770fd7b2ad7a
SPARSE_CHANGE: Ie732cbab915573f8693ca3ddc83a25e044a96cbf
Change-Id: I4f85ab429ca9e56561c932e7a9e6c7a9b68c80ec
diff --git a/packages/SystemUI/src/com/android/systemui/education/data/repository/UserContextualEducationRepository.kt b/packages/SystemUI/src/com/android/systemui/education/data/repository/UserContextualEducationRepository.kt
index 2978595..9596a54 100644
--- a/packages/SystemUI/src/com/android/systemui/education/data/repository/UserContextualEducationRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/education/data/repository/UserContextualEducationRepository.kt
@@ -20,10 +20,12 @@
import android.hardware.input.InputManager
import android.hardware.input.KeyGestureEvent
import androidx.datastore.core.DataStore
+import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
import androidx.datastore.preferences.core.MutablePreferences
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
+import androidx.datastore.preferences.core.emptyPreferences
import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.core.longPreferencesKey
import androidx.datastore.preferences.preferencesDataStoreFile
@@ -68,7 +70,7 @@
suspend fun updateGestureEduModel(
gestureType: GestureType,
- transform: (GestureEduModel) -> GestureEduModel
+ transform: (GestureEduModel) -> GestureEduModel,
)
suspend fun updateEduDeviceConnectionTime(
@@ -149,6 +151,8 @@
String.format(DATASTORE_DIR, userId)
)
},
+ corruptionHandler =
+ ReplaceFileCorruptionHandler(produceNewData = { emptyPreferences() }),
scope = newDsScope,
)
dataStoreScope = newDsScope
@@ -159,7 +163,7 @@
private fun getGestureEduModel(
gestureType: GestureType,
- preferences: Preferences
+ preferences: Preferences,
): GestureEduModel {
return GestureEduModel(
signalCount = preferences[getSignalCountKey(gestureType)] ?: 0,
@@ -183,7 +187,7 @@
override suspend fun updateGestureEduModel(
gestureType: GestureType,
- transform: (GestureEduModel) -> GestureEduModel
+ transform: (GestureEduModel) -> GestureEduModel,
) {
datastore.filterNotNull().first().edit { preferences ->
val currentModel = getGestureEduModel(gestureType, preferences)
@@ -193,17 +197,17 @@
setInstant(
preferences,
updatedModel.lastShortcutTriggeredTime,
- getLastShortcutTriggeredTimeKey(gestureType)
+ getLastShortcutTriggeredTimeKey(gestureType),
)
setInstant(
preferences,
updatedModel.usageSessionStartTime,
- getUsageSessionStartTimeKey(gestureType)
+ getUsageSessionStartTimeKey(gestureType),
)
setInstant(
preferences,
updatedModel.lastEducationTime,
- getLastEducationTimeKey(gestureType)
+ getLastEducationTimeKey(gestureType),
)
}
}
@@ -220,12 +224,12 @@
setInstant(
preferences,
updatedModel.keyboardFirstConnectionTime,
- getKeyboardFirstConnectionTimeKey()
+ getKeyboardFirstConnectionTimeKey(),
)
setInstant(
preferences,
updatedModel.touchpadFirstConnectionTime,
- getTouchpadFirstConnectionTimeKey()
+ getTouchpadFirstConnectionTimeKey(),
)
}
}
@@ -235,7 +239,7 @@
keyboardFirstConnectionTime =
preferences[getKeyboardFirstConnectionTimeKey()]?.let { Instant.ofEpochSecond(it) },
touchpadFirstConnectionTime =
- preferences[getTouchpadFirstConnectionTimeKey()]?.let { Instant.ofEpochSecond(it) }
+ preferences[getTouchpadFirstConnectionTimeKey()]?.let { Instant.ofEpochSecond(it) },
)
}
@@ -263,7 +267,7 @@
private fun setInstant(
preferences: MutablePreferences,
instant: Instant?,
- key: Preferences.Key<Long>
+ key: Preferences.Key<Long>,
) {
if (instant != null) {
// Use epochSecond because an instant is defined as a signed long (64bit number) of
diff --git a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/data/repository/TutorialSchedulerRepository.kt b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/data/repository/TutorialSchedulerRepository.kt
index a89ec70..315d3b1 100644
--- a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/data/repository/TutorialSchedulerRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/data/repository/TutorialSchedulerRepository.kt
@@ -18,8 +18,10 @@
import android.content.Context
import androidx.datastore.core.DataStore
+import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
+import androidx.datastore.preferences.core.emptyPreferences
import androidx.datastore.preferences.core.longPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import com.android.systemui.dagger.SysUISingleton
@@ -45,7 +47,12 @@
) : this(applicationContext, backgroundScope, dataStoreName = DATASTORE_NAME)
private val Context.dataStore: DataStore<Preferences> by
- preferencesDataStore(name = dataStoreName, scope = backgroundScope)
+ preferencesDataStore(
+ name = dataStoreName,
+ corruptionHandler =
+ ReplaceFileCorruptionHandler(produceNewData = { emptyPreferences() }),
+ scope = backgroundScope,
+ )
suspend fun isLaunched(deviceType: DeviceType): Boolean = loadData()[deviceType]!!.isLaunched