Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51e87caf authored by Hawkwood Glazier's avatar Hawkwood Glazier
Browse files

Persist changes to Clock Font Axis Settings

Bug: 364673977
Test: Manual
Flag: com.android.systemui.shared.new_customization_picker_ui
Change-Id: I4267c3c8056f2a25419ea8db590939241b06b58d
parent 7585841b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import androidx.annotation.ColorInt
import androidx.annotation.IntRange
import com.android.customization.picker.clock.shared.ClockSize
import com.android.customization.picker.clock.shared.model.ClockMetadataModel
import com.android.systemui.plugins.clocks.ClockFontAxisSetting
import kotlinx.coroutines.flow.Flow

/**
@@ -49,4 +50,6 @@ interface ClockPickerRepository {
    )

    suspend fun setClockSize(size: ClockSize)

    suspend fun setClockFontAxes(axisSettings: List<ClockFontAxisSetting>)
}
+13 −4
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import androidx.annotation.IntRange
import com.android.customization.picker.clock.shared.ClockSize
import com.android.customization.picker.clock.shared.model.ClockMetadataModel
import com.android.systemui.plugins.clocks.ClockFontAxis
import com.android.systemui.plugins.clocks.ClockFontAxisSetting
import com.android.systemui.plugins.clocks.ClockMetadata
import com.android.systemui.shared.clocks.ClockRegistry
import com.android.systemui.shared.settings.data.repository.SecureSettingsRepository
@@ -71,7 +72,7 @@ constructor(
                                    description = clockConfig.description,
                                    thumbnail = clockConfig.thumbnail,
                                    isReactiveToTone = clockConfig.isReactiveToTone,
                                    axes = clockConfig.axes,
                                    fontAxes = clockConfig.axes,
                                )
                            } else {
                                null
@@ -117,7 +118,7 @@ constructor(
                                    description = it.description,
                                    thumbnail = it.thumbnail,
                                    isReactiveToTone = it.isReactiveToTone,
                                    axes = it.axes,
                                    fontAxes = it.axes,
                                    selectedColorId = metadata?.getSelectedColorId(),
                                    colorTone =
                                        metadata?.getColorTone()
@@ -186,6 +187,14 @@ constructor(
        )
    }

    override suspend fun setClockFontAxes(axisSettings: List<ClockFontAxisSetting>) {
        registry.mutateSetting { oldSettings ->
            val newSettings = oldSettings.copy(axes = axisSettings)
            newSettings.metadata = oldSettings.metadata
            newSettings
        }
    }

    private fun JSONObject.getSelectedColorId(): String? {
        return if (this.isNull(KEY_METADATA_SELECTED_COLOR_ID)) {
            null
@@ -207,7 +216,7 @@ constructor(
        description: String,
        thumbnail: Drawable,
        isReactiveToTone: Boolean,
        axes: List<ClockFontAxis>,
        fontAxes: List<ClockFontAxis>,
        selectedColorId: String? = null,
        @IntRange(from = 0, to = 100) colorTone: Int = 0,
        @ColorInt seedColor: Int? = null,
@@ -218,7 +227,7 @@ constructor(
            description = description,
            thumbnail = thumbnail,
            isReactiveToTone = isReactiveToTone,
            axes = axes,
            fontAxes = fontAxes,
            selectedColorId = selectedColorId,
            colorToneProgress = colorTone,
            seedColor = seedColor,
+12 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import com.android.customization.picker.clock.data.repository.ClockPickerReposit
import com.android.customization.picker.clock.shared.ClockSize
import com.android.customization.picker.clock.shared.model.ClockMetadataModel
import com.android.customization.picker.clock.shared.model.ClockSnapshotModel
import com.android.systemui.plugins.clocks.ClockFontAxisSetting
import javax.inject.Inject
import javax.inject.Singleton
import kotlinx.coroutines.flow.Flow
@@ -57,6 +58,9 @@ constructor(

    val seedColor: Flow<Int?> = repository.selectedClock.map { clock -> clock.seedColor }

    val axisSettings: Flow<List<ClockFontAxisSetting>?> =
        repository.selectedClock.map { clock -> clock.fontAxes.map { it.toSetting() } }

    val selectedClockSize: Flow<ClockSize> = repository.selectedClockSize

    suspend fun setSelectedClock(clockId: String) {
@@ -84,12 +88,17 @@ constructor(
        setClockOption(ClockSnapshotModel(clockSize = size))
    }

    suspend fun setClockFontAxes(axisSettings: List<ClockFontAxisSetting>) {
        setClockOption(ClockSnapshotModel(axisSettings = axisSettings))
    }

    suspend fun applyClock(
        clockId: String?,
        size: ClockSize?,
        selectedColorId: String?,
        @IntRange(from = 0, to = 100) colorToneProgress: Int?,
        @ColorInt seedColor: Int?,
        axisSettings: List<ClockFontAxisSetting>,
    ) {
        setClockOption(
            ClockSnapshotModel(
@@ -98,6 +107,7 @@ constructor(
                selectedColorId = selectedColorId,
                colorToneProgress = colorToneProgress,
                seedColor = seedColor,
                axisSettings = axisSettings,
            )
        )
    }
@@ -116,6 +126,7 @@ constructor(
            )
        }
        clockSnapshotModel.clockId?.let { repository.setSelectedClock(it) }
        clockSnapshotModel.axisSettings?.let { repository.setClockFontAxes(it) }
    }

    private suspend fun storeCurrentClockOption(clockSnapshotModel: ClockSnapshotModel) {
@@ -143,5 +154,6 @@ constructor(
            seedColor =
                latestOption.colorToneProgress?.let { latestOption.seedColor }
                    ?: seedColor.firstOrNull(),
            axisSettings = latestOption.axisSettings ?: axisSettings.firstOrNull(),
        )
}
+18 −6
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.text.TextUtils
import android.util.Log
import com.android.customization.picker.clock.data.repository.ClockPickerRepository
import com.android.customization.picker.clock.shared.model.ClockSnapshotModel
import com.android.systemui.plugins.clocks.ClockFontAxisSetting
import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer
import com.android.wallpaper.picker.undo.domain.interactor.SnapshotStore
import com.android.wallpaper.picker.undo.shared.model.RestorableSnapshot
@@ -29,6 +30,7 @@ import javax.inject.Singleton
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map
import org.json.JSONArray

/** Handles state restoration for clocks. */
@Singleton
@@ -38,9 +40,7 @@ constructor(private val repository: ClockPickerRepository) : SnapshotRestorer {
    private var snapshotStore: SnapshotStore = SnapshotStore.NOOP
    private var originalOption: ClockSnapshotModel? = null

    override suspend fun setUpSnapshotRestorer(
        store: SnapshotStore,
    ): RestorableSnapshot {
    override suspend fun setUpSnapshotRestorer(store: SnapshotStore): RestorableSnapshot {
        snapshotStore = store
        originalOption =
            ClockSnapshotModel(
@@ -58,6 +58,10 @@ constructor(private val repository: ClockPickerRepository) : SnapshotRestorer {
                        .distinctUntilChanged()
                        .firstOrNull(),
                seedColor = repository.selectedClock.map { clock -> clock.seedColor }.firstOrNull(),
                axisSettings =
                    repository.selectedClock
                        .map { clock -> clock.fontAxes.map { it.toSetting() } }
                        .firstOrNull(),
            )
        return snapshot(originalOption)
    }
@@ -71,7 +75,9 @@ constructor(private val repository: ClockPickerRepository) : SnapshotRestorer {
                    optionToRestore.colorToneProgress?.toString() !=
                        snapshot.args[KEY_COLOR_TONE_PROGRESS] ||
                    optionToRestore.seedColor?.toString() != snapshot.args[KEY_SEED_COLOR] ||
                    optionToRestore.selectedColorId != snapshot.args[KEY_COLOR_ID]
                    optionToRestore.selectedColorId != snapshot.args[KEY_COLOR_ID] ||
                    (optionToRestore.axisSettings ?: listOf()) !=
                        ClockFontAxisSetting.fromJson(JSONArray(snapshot.args[KEY_FONT_AXES]))
            ) {
                Log.wtf(
                    TAG,
@@ -87,10 +93,11 @@ constructor(private val repository: ClockPickerRepository) : SnapshotRestorer {
                repository.setClockColor(
                    selectedColorId = optionToRestore.selectedColorId,
                    colorToneProgress = optionToRestore.colorToneProgress,
                    seedColor = optionToRestore.seedColor
                    seedColor = optionToRestore.seedColor,
                )
            }
            optionToRestore.clockId?.let { repository.setSelectedClock(it) }
            optionToRestore.axisSettings?.let { repository.setClockFontAxes(it) }
        }
    }

@@ -101,7 +108,7 @@ constructor(private val repository: ClockPickerRepository) : SnapshotRestorer {
    private fun snapshot(clockSnapshotModel: ClockSnapshotModel? = null): RestorableSnapshot {
        val options =
            if (clockSnapshotModel == null) emptyMap()
            else
            else {
                buildMap {
                    clockSnapshotModel.clockId?.let { put(KEY_CLOCK_ID, it) }
                    clockSnapshotModel.clockSize?.let { put(KEY_CLOCK_SIZE, it.toString()) }
@@ -110,6 +117,10 @@ constructor(private val repository: ClockPickerRepository) : SnapshotRestorer {
                        put(KEY_COLOR_TONE_PROGRESS, it.toString())
                    }
                    clockSnapshotModel.seedColor?.let { put(KEY_SEED_COLOR, it.toString()) }
                    clockSnapshotModel.axisSettings?.let {
                        put(KEY_FONT_AXES, ClockFontAxisSetting.toJson(it).toString())
                    }
                }
            }

        return RestorableSnapshot(options)
@@ -122,5 +133,6 @@ constructor(private val repository: ClockPickerRepository) : SnapshotRestorer {
        private const val KEY_COLOR_ID = "color_id"
        private const val KEY_COLOR_TONE_PROGRESS = "color_tone_progress"
        private const val KEY_SEED_COLOR = "seed_color"
        private const val KEY_FONT_AXES = "font_axes"
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ data class ClockMetadataModel(
    val description: String,
    val thumbnail: Drawable,
    val isReactiveToTone: Boolean,
    val axes: List<ClockFontAxis>,
    val fontAxes: List<ClockFontAxis>,
    val selectedColorId: String?,
    @IntRange(from = 0, to = 100) val colorToneProgress: Int,
    @ColorInt val seedColor: Int?,
Loading