blob: 5c5493a0c20040250912724e56b1b8ca3d311b4c [file] [log] [blame]
/*
* Copyright (C) 2019 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.keyguard.clock
import android.graphics.Color
import android.util.MathUtils
private const val PRIMARY_INDEX = 5
private const val SECONDARY_DARK_INDEX = 8
private const val SECONDARY_LIGHT_INDEX = 2
/**
* A helper class to extract colors from a clock face.
*/
class ClockPalette {
private var darkAmount: Float = 0f
private var accentPrimary: Int = Color.WHITE
private var accentSecondaryLight: Int = Color.WHITE
private var accentSecondaryDark: Int = Color.BLACK
private val lightHSV: FloatArray = FloatArray(3)
private val darkHSV: FloatArray = FloatArray(3)
private val hsv: FloatArray = FloatArray(3)
/** Returns a color from the palette as an RGB packed int. */
fun getPrimaryColor(): Int {
return accentPrimary
}
/** Returns either a light or dark color from the palette as an RGB packed int. */
fun getSecondaryColor(): Int {
Color.colorToHSV(accentSecondaryLight, lightHSV)
Color.colorToHSV(accentSecondaryDark, darkHSV)
for (i in 0..2) {
hsv[i] = MathUtils.lerp(darkHSV[i], lightHSV[i], darkAmount)
}
return Color.HSVToColor(hsv)
}
/** See {@link ClockPlugin#setColorPalette}. */
fun setColorPalette(supportsDarkText: Boolean, colorPalette: IntArray?) {
if (colorPalette == null || colorPalette.isEmpty()) {
accentPrimary = Color.WHITE
accentSecondaryLight = Color.WHITE
accentSecondaryDark = if (supportsDarkText) Color.BLACK else Color.WHITE
return
}
val length = colorPalette.size
accentPrimary = colorPalette[Math.max(0, length - PRIMARY_INDEX)]
accentSecondaryLight = colorPalette[Math.max(0, length - SECONDARY_LIGHT_INDEX)]
accentSecondaryDark = colorPalette[Math.max(0,
length - if (supportsDarkText) SECONDARY_DARK_INDEX else SECONDARY_LIGHT_INDEX)]
}
/** See {@link ClockPlugin#setDarkAmount}. */
fun setDarkAmount(darkAmount: Float) {
this.darkAmount = darkAmount
}
}