1 package com.android.wm.shell.windowdecor.viewholder 2 3 import android.app.ActivityManager.RunningTaskInfo 4 import android.content.res.ColorStateList 5 import android.graphics.drawable.Drawable 6 import android.graphics.drawable.GradientDrawable 7 import android.view.View 8 import android.widget.ImageButton 9 import android.widget.ImageView 10 import android.widget.TextView 11 import com.android.wm.shell.R 12 13 /** 14 * A desktop mode window decoration used when the window is floating (i.e. freeform). It hosts 15 * finer controls such as a close window button and an "app info" section to pull up additional 16 * controls. 17 */ 18 internal class DesktopModeAppControlsWindowDecorationViewHolder( 19 rootView: View, 20 onCaptionTouchListener: View.OnTouchListener, 21 onCaptionButtonClickListener: View.OnClickListener, 22 appName: CharSequence, 23 appIcon: Drawable 24 ) : DesktopModeWindowDecorationViewHolder(rootView) { 25 26 private val captionView: View = rootView.requireViewById(R.id.desktop_mode_caption) 27 private val captionHandle: View = rootView.requireViewById(R.id.caption_handle) 28 private val openMenuButton: View = rootView.requireViewById(R.id.open_menu_button) 29 private val closeWindowButton: ImageButton = rootView.requireViewById(R.id.close_window) 30 private val expandMenuButton: ImageButton = rootView.requireViewById(R.id.expand_menu_button) 31 private val maximizeWindowButton: ImageButton = rootView.requireViewById(R.id.maximize_window) 32 private val appNameTextView: TextView = rootView.requireViewById(R.id.application_name) 33 private val appIconImageView: ImageView = rootView.requireViewById(R.id.application_icon) 34 35 init { 36 captionView.setOnTouchListener(onCaptionTouchListener) 37 captionHandle.setOnTouchListener(onCaptionTouchListener) 38 openMenuButton.setOnClickListener(onCaptionButtonClickListener) 39 openMenuButton.setOnTouchListener(onCaptionTouchListener) 40 closeWindowButton.setOnClickListener(onCaptionButtonClickListener) 41 maximizeWindowButton.setOnClickListener(onCaptionButtonClickListener) 42 closeWindowButton.setOnTouchListener(onCaptionTouchListener) 43 appNameTextView.text = appName 44 appIconImageView.setImageDrawable(appIcon) 45 } 46 bindDatanull47 override fun bindData(taskInfo: RunningTaskInfo) { 48 49 val captionDrawable = captionView.background as GradientDrawable 50 taskInfo.taskDescription?.statusBarColor?.let { 51 captionDrawable.setColor(it) 52 } 53 54 closeWindowButton.imageTintList = ColorStateList.valueOf( 55 getCaptionCloseButtonColor(taskInfo)) 56 maximizeWindowButton.imageTintList = ColorStateList.valueOf( 57 getCaptionMaximizeButtonColor(taskInfo)) 58 expandMenuButton.imageTintList = ColorStateList.valueOf( 59 getCaptionExpandButtonColor(taskInfo)) 60 appNameTextView.setTextColor(getCaptionAppNameTextColor(taskInfo)) 61 } 62 getCaptionAppNameTextColornull63 private fun getCaptionAppNameTextColor(taskInfo: RunningTaskInfo): Int { 64 return if (shouldUseLightCaptionColors(taskInfo)) { 65 context.getColor(R.color.desktop_mode_caption_app_name_light) 66 } else { 67 context.getColor(R.color.desktop_mode_caption_app_name_dark) 68 } 69 } 70 getCaptionCloseButtonColornull71 private fun getCaptionCloseButtonColor(taskInfo: RunningTaskInfo): Int { 72 return if (shouldUseLightCaptionColors(taskInfo)) { 73 context.getColor(R.color.desktop_mode_caption_close_button_light) 74 } else { 75 context.getColor(R.color.desktop_mode_caption_close_button_dark) 76 } 77 } 78 getCaptionMaximizeButtonColornull79 private fun getCaptionMaximizeButtonColor(taskInfo: RunningTaskInfo): Int { 80 return if (shouldUseLightCaptionColors(taskInfo)) { 81 context.getColor(R.color.desktop_mode_caption_maximize_button_light) 82 } else { 83 context.getColor(R.color.desktop_mode_caption_maximize_button_dark) 84 } 85 } 86 getCaptionExpandButtonColornull87 private fun getCaptionExpandButtonColor(taskInfo: RunningTaskInfo): Int { 88 return if (shouldUseLightCaptionColors(taskInfo)) { 89 context.getColor(R.color.desktop_mode_caption_expand_button_light) 90 } else { 91 context.getColor(R.color.desktop_mode_caption_expand_button_dark) 92 } 93 } 94 95 companion object { 96 private const val TAG = "DesktopModeAppControlsWindowDecorationViewHolder" 97 } 98 } 99