blob: 73240b54a27a5d0528bc40befde3dec3f588bef4 [file] [log] [blame]
/*
* Copyright (C) 2022 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.systemui.media
import android.content.res.ColorStateList
import android.util.Log
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.TextView
import com.android.systemui.R
import com.android.systemui.monet.ColorScheme
/**
* A view holder for the guts menu of a media player. The guts are shown when the user long-presses
* on the media player.
*
* Both [MediaViewHolder] and [RecommendationViewHolder] use the same guts menu layout, so this
* class helps share logic between the two.
*/
class GutsViewHolder constructor(itemView: View) {
val gutsText: TextView = itemView.requireViewById(R.id.remove_text)
val cancel: View = itemView.requireViewById(R.id.cancel)
val cancelText: TextView = itemView.requireViewById(R.id.cancel_text)
val dismiss: ViewGroup = itemView.requireViewById(R.id.dismiss)
val dismissText: TextView = itemView.requireViewById(R.id.dismiss_text)
val settings: ImageButton = itemView.requireViewById(R.id.settings)
private var isDismissible: Boolean = true
var colorScheme: ColorScheme? = null
/** Marquees the main text of the guts menu. */
fun marquee(start: Boolean, delay: Long, tag: String) {
val gutsTextHandler = gutsText.handler
if (gutsTextHandler == null) {
Log.d(tag, "marquee while longPressText.getHandler() is null", Exception())
return
}
gutsTextHandler.postDelayed({ gutsText.isSelected = start }, delay)
}
/** Set whether this control can be dismissed, and update appearance to match */
fun setDismissible(dismissible: Boolean) {
if (isDismissible == dismissible) return
isDismissible = dismissible
colorScheme?.let { setColors(it) }
}
/** Sets the right colors on all the guts views based on the given [ColorScheme]. */
fun setColors(scheme: ColorScheme) {
colorScheme = scheme
setSurfaceColor(surfaceFromScheme(scheme))
setTextPrimaryColor(textPrimaryFromScheme(scheme))
setAccentPrimaryColor(accentPrimaryFromScheme(scheme))
}
/** Sets the surface color on all guts views that use it. */
fun setSurfaceColor(surfaceColor: Int) {
dismissText.setTextColor(surfaceColor)
if (!isDismissible) {
cancelText.setTextColor(surfaceColor)
}
}
/** Sets the primary accent color on all guts views that use it. */
fun setAccentPrimaryColor(accentPrimary: Int) {
val accentColorList = ColorStateList.valueOf(accentPrimary)
settings.imageTintList = accentColorList
cancelText.backgroundTintList = accentColorList
dismissText.backgroundTintList = accentColorList
}
/** Sets the primary text color on all guts views that use it. */
fun setTextPrimaryColor(textPrimary: Int) {
val textColorList = ColorStateList.valueOf(textPrimary)
gutsText.setTextColor(textColorList)
if (isDismissible) {
cancelText.setTextColor(textColorList)
}
}
companion object {
val ids = setOf(
R.id.remove_text,
R.id.cancel,
R.id.dismiss,
R.id.settings
)
}
}