• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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