/* * 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 } }