• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.launcher3.taskbar.customization
18 
19 import android.annotation.SuppressLint
20 import android.content.Context
21 import android.content.res.ColorStateList
22 import android.graphics.Color.TRANSPARENT
23 import android.graphics.drawable.Drawable
24 import android.util.AttributeSet
25 import androidx.core.view.setPadding
26 import com.android.launcher3.R
27 import com.android.launcher3.Utilities.dpToPx
28 import com.android.launcher3.taskbar.TaskbarActivityContext
29 import com.android.launcher3.taskbar.TaskbarViewCallbacks
30 import com.android.launcher3.views.ActivityContext
31 import com.android.launcher3.views.IconButtonView
32 import com.android.wm.shell.Flags
33 
34 /** Taskbar divider view container for customizable taskbar. */
35 class TaskbarDividerContainer
36 @JvmOverloads
37 constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
38     IconButtonView(context, attrs), TaskbarContainer {
39     private val activityContext: TaskbarActivityContext = ActivityContext.lookupContext(context)
40 
41     override val spaceNeeded: Int
42         get() {
43             return dpToPx(activityContext.taskbarSpecsEvaluator.taskbarIconSize.size.toFloat())
44         }
45 
46     init {
47         contentDescription = context.getString(R.string.taskbar_divider_a11y_title)
48         setUpIcon()
49     }
50 
setUpIconnull51     fun setUpIcon() {
52         backgroundTintList = ColorStateList.valueOf(TRANSPARENT)
53         val drawable = getTaskbarDividerIcon()
54         setIconDrawable(drawable)
55         if (!activityContext.isTransientTaskbar) {
56             setPadding(dpToPx(activityContext.taskbarSpecsEvaluator.taskbarIconPadding.toFloat()))
57         }
58     }
59 
60     @SuppressLint("UseCompatLoadingForDrawables")
getTaskbarDividerIconnull61     fun getTaskbarDividerIcon(): Drawable {
62         return if (Flags.enableGsf()) {
63             resources.getDrawable(R.drawable.taskbar_divider_button_expressive_theme)
64         } else {
65             resources.getDrawable(R.drawable.taskbar_divider_button)
66         }
67     }
68 
69     @SuppressLint("ClickableViewAccessibility")
setUpCallbacksnull70     fun setUpCallbacks(callbacks: TaskbarViewCallbacks) {
71         setOnLongClickListener(callbacks.taskbarDividerLongClickListener)
72         setOnTouchListener(callbacks.taskbarDividerRightClickListener)
73     }
74 }
75