11/*
22 * Copyright (c) 2026 Auxio Project
3- * ButtonGroupToolbar .kt is part of Auxio.
3+ * AuxioToolbar .kt is part of Auxio.
44 *
55 * This program is free software: you can redistribute it and/or modify
66 * it under the terms of the GNU General Public License as published by
1515 * You should have received a copy of the GNU General Public License
1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18-
18+
1919package org.oxycblt.auxio.ui
2020
2121import android.annotation.SuppressLint
@@ -45,7 +45,6 @@ import androidx.appcompat.widget.TooltipCompat
4545import androidx.core.view.MenuCompat
4646import androidx.core.view.children
4747import androidx.core.view.isVisible
48- import androidx.core.view.updateLayoutParams
4948import androidx.core.widget.TextViewCompat
5049import com.google.android.material.R as MR
5150import org.oxycblt.auxio.R
@@ -54,7 +53,8 @@ import org.oxycblt.auxio.databinding.ViewToolbarBinding
5453/* *
5554 * A compound toolbar view that owns its entire layout instead of piggybacking on AppCompat's
5655 * internal Toolbar structure. It preserves the small API surface Auxio actually uses while
57- * rendering action items as an M3 Expressive [com.google.android.material.button.MaterialButtonGroup].
56+ * rendering action items as an M3 Expressive
57+ * [com.google.android.material.button.MaterialButtonGroup].
5858 */
5959class AuxioToolbar
6060@JvmOverloads
@@ -76,6 +76,7 @@ constructor(
7676 private var _binding : ViewToolbarBinding ? = null
7777 private val binding: ViewToolbarBinding
7878 get() = checkNotNull(_binding ) { " Toolbar binding was not initialized" }
79+
7980 private val actionButtons = mutableMapOf<Int , RippleFixMaterialButton >()
8081 @SuppressLint(" RestrictedApi" ) private var menuBuilder = MenuBuilder (context)
8182
@@ -113,7 +114,10 @@ constructor(
113114 binding.toolbarSubtitle.isVisible = ! subtitleText.isNullOrEmpty()
114115
115116 val titleTextAppearance =
116- toolbarAttrs.getResourceId(androidx.appcompat.R .styleable.Toolbar_titleTextAppearance , 0 )
117+ toolbarAttrs.getResourceId(
118+ androidx.appcompat.R .styleable.Toolbar_titleTextAppearance ,
119+ 0 ,
120+ )
117121 if (titleTextAppearance != 0 ) {
118122 setTitleTextAppearance(titleTextAppearance)
119123 }
@@ -134,9 +138,7 @@ constructor(
134138 }
135139
136140 val subtitleTextColor =
137- toolbarAttrs.getColorStateList(
138- androidx.appcompat.R .styleable.Toolbar_subtitleTextColor
139- )
141+ toolbarAttrs.getColorStateList(androidx.appcompat.R .styleable.Toolbar_subtitleTextColor )
140142 if (subtitleTextColor != null ) {
141143 setSubtitleTextColor(subtitleTextColor)
142144 }
@@ -147,9 +149,13 @@ constructor(
147149 materialToolbarAttrs.getBoolean(MR .styleable.MaterialToolbar_subtitleCentered , false )
148150 updateTextGravity()
149151
150- setNavigationIcon(toolbarAttrs.getDrawable(androidx.appcompat.R .styleable.Toolbar_navigationIcon ))
152+ setNavigationIcon(
153+ toolbarAttrs.getDrawable(androidx.appcompat.R .styleable.Toolbar_navigationIcon )
154+ )
151155 setNavigationContentDescription(
152- toolbarAttrs.getText(androidx.appcompat.R .styleable.Toolbar_navigationContentDescription )
156+ toolbarAttrs.getText(
157+ androidx.appcompat.R .styleable.Toolbar_navigationContentDescription
158+ )
153159 )
154160
155161 val menuResId = toolbarAttrs.getResourceId(androidx.appcompat.R .styleable.Toolbar_menu , 0 )
@@ -233,9 +239,7 @@ constructor(
233239 }
234240
235241 fun setNavigationIcon (@DrawableRes resId : Int ) {
236- setNavigationIcon(
237- if (resId != 0 ) AppCompatResources .getDrawable(context, resId) else null
238- )
242+ setNavigationIcon(if (resId != 0 ) AppCompatResources .getDrawable(context, resId) else null )
239243 }
240244
241245 fun setNavigationIcon (icon : Drawable ? ) {
@@ -310,7 +314,9 @@ constructor(
310314
311315 private fun updateTextGravity () {
312316 binding.toolbarTitle.apply {
313- gravity = if (titleCentered) android.view.Gravity .CENTER_HORIZONTAL else android.view.Gravity .START
317+ gravity =
318+ if (titleCentered) android.view.Gravity .CENTER_HORIZONTAL
319+ else android.view.Gravity .START
314320 textAlignment =
315321 if (titleCentered) {
316322 View .TEXT_ALIGNMENT_CENTER
@@ -320,7 +326,8 @@ constructor(
320326 }
321327 binding.toolbarSubtitle.apply {
322328 gravity =
323- if (subtitleCentered) android.view.Gravity .CENTER_HORIZONTAL else android.view.Gravity .START
329+ if (subtitleCentered) android.view.Gravity .CENTER_HORIZONTAL
330+ else android.view.Gravity .START
324331 textAlignment =
325332 if (subtitleCentered) {
326333 View .TEXT_ALIGNMENT_CENTER
@@ -333,7 +340,8 @@ constructor(
333340 private fun updateCenterContentVisibility () {
334341 val hasCustomContent =
335342 binding.toolbarContentFrame.children.any { it != = binding.toolbarTitleContainer }
336- val showBuiltInTitle = ! hasCustomContent && (! titleText.isNullOrEmpty() || ! subtitleText.isNullOrEmpty())
343+ val showBuiltInTitle =
344+ ! hasCustomContent && (! titleText.isNullOrEmpty() || ! subtitleText.isNullOrEmpty())
337345 binding.toolbarTitleContainer.isVisible = showBuiltInTitle
338346 }
339347
@@ -372,24 +380,25 @@ constructor(
372380 private fun createActionButton (item : MenuItemImpl ): RippleFixMaterialButton ? {
373381 val button =
374382 RippleFixMaterialButton (
375- createActionButtonContext(item.itemId),
376- null ,
377- MR .attr.materialIconButtonStyle,
378- ).apply {
379- configureIconButton(this )
380- id = item.itemId
381- icon = item.icon
382- contentDescription = item.title
383- isEnabled = item.isEnabled
384- TooltipCompat .setTooltipText(this , item.title)
385- setOnClickListener { view ->
386- if (item.hasSubMenu()) {
387- showPopupMenu(view, item.subMenu)
388- } else {
389- menuItemClickListener?.onMenuItemClick(item)
383+ createActionButtonContext(item.itemId),
384+ null ,
385+ MR .attr.materialIconButtonStyle,
386+ )
387+ .apply {
388+ configureIconButton(this )
389+ id = item.itemId
390+ icon = item.icon
391+ contentDescription = item.title
392+ isEnabled = item.isEnabled
393+ TooltipCompat .setTooltipText(this , item.title)
394+ setOnClickListener { view ->
395+ if (item.hasSubMenu()) {
396+ showPopupMenu(view, item.subMenu)
397+ } else {
398+ menuItemClickListener?.onMenuItemClick(item)
399+ }
390400 }
391401 }
392- }
393402
394403 return button
395404 }
@@ -438,7 +447,8 @@ constructor(
438447 }
439448
440449 popup.setOnMenuItemClickListener { clickedItem ->
441- val originalItem = originalItems[clickedItem.itemId] ? : return @setOnMenuItemClickListener false
450+ val originalItem =
451+ originalItems[clickedItem.itemId] ? : return @setOnMenuItemClickListener false
442452 if (originalItem.hasSubMenu()) {
443453 showPopupMenu(anchor, originalItem.subMenu)
444454 true
0 commit comments