From 44dd17876e8110f0872f8f018549deba42a88d4a Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Thu, 20 Aug 2026 18:21:40 +0200 Subject: [PATCH] fix(sample): repair toolbar theming and do an edge-to-edge pass - toolbar used a white-on-?colorPrimary style, which is invisible under Theme.Material3.DayNight in dark mode; use Widget.Material3.Toolbar.Surface and let M3 resolve the content colors - menu icons hardcoded Color.WHITE, same problem in light mode - drop values-v21/themes.xml: windowTranslucentStatus, statusBarColor and navigationBarColor are no-ops under Android 15 edge-to-edge, and the window transitions it declared were never used - enable edge-to-edge in both activities and apply the insets explicitly --- .../mikepenz/iconics/sample/MainActivity.kt | 9 +++-- .../iconics/sample/PlaygroundActivity.kt | 4 ++ .../mikepenz/iconics/sample/utils/Insets.kt | 38 +++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 2 + .../main/res/layout/activity_playground.xml | 4 +- app/src/main/res/values-v21/themes.xml | 32 ---------------- app/src/main/res/values/themes.xml | 18 +-------- 7 files changed, 52 insertions(+), 55 deletions(-) create mode 100644 app/src/main/java/com/mikepenz/iconics/sample/utils/Insets.kt delete mode 100644 app/src/main/res/values-v21/themes.xml diff --git a/app/src/main/java/com/mikepenz/iconics/sample/MainActivity.kt b/app/src/main/java/com/mikepenz/iconics/sample/MainActivity.kt index 67c27d86..7ff0d70a 100644 --- a/app/src/main/java/com/mikepenz/iconics/sample/MainActivity.kt +++ b/app/src/main/java/com/mikepenz/iconics/sample/MainActivity.kt @@ -20,7 +20,6 @@ import android.app.Activity import android.content.Intent import android.content.res.ColorStateList import android.content.res.Configuration -import android.graphics.Color import android.os.Bundle import android.view.Menu import android.view.MenuItem @@ -34,6 +33,8 @@ import com.mikepenz.aboutlibraries.LibsBuilder import com.mikepenz.iconics.Iconics import com.mikepenz.iconics.IconicsDrawable import com.mikepenz.iconics.sample.databinding.ActivityMainBinding +import androidx.activity.enableEdgeToEdge +import com.mikepenz.iconics.sample.utils.applyEdgeToEdgeInsets import com.mikepenz.iconics.sample.utils.getThemeColor import com.mikepenz.iconics.typeface.IIcon import com.mikepenz.iconics.typeface.ITypeface @@ -64,10 +65,12 @@ class MainActivity : AppCompatActivity() { private var currentSearch: String? = null override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater).also { setContentView(it.root) } + applyEdgeToEdgeInsets(binding.insetsRoot, binding.toolbar, binding.content) // Handle Toolbar setSupportActionBar(binding.toolbar) @@ -142,7 +145,7 @@ class MainActivity : AppCompatActivity() { // menu.findItem(R.id.search).icon = IconicsDrawable(this, MaterialDesignIconic.Icon.gmi_search).apply { - colorInt = Color.WHITE + colorInt = getThemeColor(android.R.attr.textColorPrimary) sizeDp = 24 respectFontBounds = true } @@ -176,7 +179,7 @@ class MainActivity : AppCompatActivity() { val menuItem = menu.findItem(R.id.action_opensource) menuItem.icon = IconicsDrawable(this, FontAwesomeBrand.Icon.fab_github).apply { actionBar() - colorInt = Color.WHITE + colorInt = getThemeColor(android.R.attr.textColorPrimary) } menu.findItem(R.id.action_respect_bounds).isChecked = Iconics.respectFontBoundsDefault diff --git a/app/src/main/java/com/mikepenz/iconics/sample/PlaygroundActivity.kt b/app/src/main/java/com/mikepenz/iconics/sample/PlaygroundActivity.kt index cd4c731c..daf275a9 100644 --- a/app/src/main/java/com/mikepenz/iconics/sample/PlaygroundActivity.kt +++ b/app/src/main/java/com/mikepenz/iconics/sample/PlaygroundActivity.kt @@ -46,6 +46,8 @@ import com.mikepenz.iconics.IconicsArrayBuilder import com.mikepenz.iconics.IconicsDrawable import com.mikepenz.iconics.IconicsSize import com.mikepenz.iconics.sample.databinding.ActivityPlaygroundBinding +import androidx.activity.enableEdgeToEdge +import com.mikepenz.iconics.sample.utils.applyEdgeToEdgeInsets import com.mikepenz.iconics.sample.utils.getThemeColor import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial import com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome @@ -66,10 +68,12 @@ import com.mikepenz.iconics.utils.sizeY class PlaygroundActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) val binding: ActivityPlaygroundBinding = DataBindingUtil.setContentView(this, R.layout.activity_playground) + applyEdgeToEdgeInsets(binding.root, binding.toolbar, binding.list) // Handle Toolbar setSupportActionBar(binding.toolbar) diff --git a/app/src/main/java/com/mikepenz/iconics/sample/utils/Insets.kt b/app/src/main/java/com/mikepenz/iconics/sample/utils/Insets.kt new file mode 100644 index 00000000..105119e2 --- /dev/null +++ b/app/src/main/java/com/mikepenz/iconics/sample/utils/Insets.kt @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2026 Mike Penz + * + * 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.mikepenz.iconics.sample.utils + +import android.view.View +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding + +/** + * Applies edge-to-edge insets: [topView] takes the status bar, [bottomView] the navigation bar, + * both take the horizontal cutout/bar insets. Listener is installed on [root] so it also survives + * `DrawerLayout` consuming the insets for its slider. + */ +fun applyEdgeToEdgeInsets(root: View, topView: View, bottomView: View) { + ViewCompat.setOnApplyWindowInsetsListener(root) { _, windowInsets -> + val insets = windowInsets.getInsets( + WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout() + ) + topView.updatePadding(left = insets.left, top = insets.top, right = insets.right) + bottomView.updatePadding(left = insets.left, right = insets.right, bottom = insets.bottom) + windowInsets + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 84cde29f..5795da69 100755 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -22,8 +22,10 @@ android:fitsSystemWindows="true"> @@ -612,6 +609,7 @@ android:id="@+id/list" android:layout_width="0dp" android:layout_height="112dp" + android:clipToPadding="false" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/content" diff --git a/app/src/main/res/values-v21/themes.xml b/app/src/main/res/values-v21/themes.xml deleted file mode 100644 index 3a485752..00000000 --- a/app/src/main/res/values-v21/themes.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 03035423..d33cba80 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -22,22 +22,6 @@ true - @style/CustomToolbarStyle - @android:color/white - - - - - - -