From f01fd187116883c08d3848591b52ec5e2a1002b8 Mon Sep 17 00:00:00 2001 From: Zakhar Timoshenko Date: Fri, 30 Jun 2023 21:27:20 +0300 Subject: [PATCH] Main activity theming --- .../core/ui/widgets/SegmentedBarView.kt | 5 +- .../kotatsu/explore/ui/ExploreFragment.kt | 10 +- .../ui/adapter/ExploreAdapterDelegates.kt | 10 +- .../koitharu/kotatsu/main/ui/MainActivity.kt | 2 +- .../settings/tools/views/MemoryUsageView.kt | 34 ++++-- app/src/main/res/color-v23/colored_button.xml | 2 +- app/src/main/res/color/colored_button.xml | 2 +- .../main/res/color/navigation_bar_scrim.xml | 2 +- .../res/drawable-v23/toolbar_background.xml | 18 +++ .../res/drawable/search_bar_background.xml | 7 ++ .../main/res/drawable/toolbar_background.xml | 23 +++- .../res/layout-w600dp-land/activity_main.xml | 2 +- app/src/main/res/layout/activity_details.xml | 2 +- app/src/main/res/layout/activity_main.xml | 2 +- .../main/res/layout/activity_manga_list.xml | 3 +- app/src/main/res/layout/fragment_tools.xml | 105 +++++++++++------- app/src/main/res/layout/item_empty_state.xml | 1 - .../main/res/layout/item_explore_buttons.xml | 20 +--- app/src/main/res/layout/item_manga_grid.xml | 2 +- app/src/main/res/layout/layout_app_update.xml | 3 +- .../main/res/layout/layout_details_info.xml | 2 +- .../main/res/layout/layout_memory_usage.xml | 4 +- .../main/res/values-night/colors_kotatsu.xml | 60 ++++++---- app/src/main/res/values/colors_kotatsu.xml | 52 +++++---- app/src/main/res/values/styles.xml | 27 +++-- app/src/main/res/values/themes.xml | 33 +++--- 26 files changed, 267 insertions(+), 166 deletions(-) create mode 100644 app/src/main/res/drawable-v23/toolbar_background.xml create mode 100644 app/src/main/res/drawable/search_bar_background.xml diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/SegmentedBarView.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/SegmentedBarView.kt index 39591490a..12920d740 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/SegmentedBarView.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/SegmentedBarView.kt @@ -28,13 +28,12 @@ class SegmentedBarView @JvmOverloads constructor( private val paint = Paint(Paint.ANTI_ALIAS_FLAG) private val segmentsData = ArrayList() private val segmentsSizes = ArrayList() - private val outlineColor = context.getThemeColor(materialR.attr.colorOutline) private var cornerSize = 0f private var scaleFactor = 1f private var scaleAnimator: ValueAnimator? = null init { - paint.strokeWidth = context.resources.resolveDp(1f) + paint.strokeWidth = context.resources.resolveDp(0f) outlineProvider = OutlineProvider() clipToOutline = true } @@ -57,12 +56,10 @@ class SegmentedBarView @JvmOverloads constructor( paint.style = Paint.Style.FILL val segmentWidth = segmentsSizes[i] canvas.drawRoundRect(0f, 0f, x + cornerSize, height.toFloat(), cornerSize, cornerSize, paint) - paint.color = outlineColor paint.style = Paint.Style.STROKE canvas.drawRoundRect(0f, 0f, x + cornerSize, height.toFloat(), cornerSize, cornerSize, paint) x -= segmentWidth } - paint.color = outlineColor paint.style = Paint.Style.STROKE canvas.drawRoundRect(0f, 0f, w, height.toFloat(), cornerSize, cornerSize, paint) } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/explore/ui/ExploreFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/explore/ui/ExploreFragment.kt index bf58733d5..21522301c 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/explore/ui/ExploreFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/explore/ui/ExploreFragment.kt @@ -105,12 +105,12 @@ class ExploreFragment : R.id.button_history -> HistoryActivity.newIntent(v.context) R.id.button_local -> MangaListActivity.newIntent(v.context, MangaSource.LOCAL) R.id.button_bookmarks -> BookmarksActivity.newIntent(v.context) - R.id.button_suggestions -> SuggestionsActivity.newIntent(v.context) + //R.id.button_suggestions -> SuggestionsActivity.newIntent(v.context) R.id.button_favourites -> FavouriteCategoriesActivity.newIntent(v.context) - R.id.button_random -> { - viewModel.openRandom() - return - } + //R.id.button_random -> { + // viewModel.openRandom() + // return + //} else -> return } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/explore/ui/adapter/ExploreAdapterDelegates.kt b/app/src/main/kotlin/org/koitharu/kotatsu/explore/ui/adapter/ExploreAdapterDelegates.kt index bccedb039..614b5ef78 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/explore/ui/adapter/ExploreAdapterDelegates.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/explore/ui/adapter/ExploreAdapterDelegates.kt @@ -33,13 +33,13 @@ fun exploreButtonsAD( binding.buttonBookmarks.setOnClickListener(clickListener) binding.buttonHistory.setOnClickListener(clickListener) binding.buttonLocal.setOnClickListener(clickListener) - binding.buttonSuggestions.setOnClickListener(clickListener) + //binding.buttonSuggestions.setOnClickListener(clickListener) binding.buttonFavourites.setOnClickListener(clickListener) - binding.buttonRandom.setOnClickListener(clickListener) + //binding.buttonRandom.setOnClickListener(clickListener) - bind { - binding.buttonSuggestions.isVisible = item.isSuggestionsEnabled - } + //bind { + // binding.buttonSuggestions.isVisible = item.isSuggestionsEnabled + //} } fun exploreSourcesHeaderAD( diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt index e2edc3295..37e03e512 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt @@ -364,7 +364,7 @@ class MainActivity : viewBinding.toolbarCard.background = if (isOpened) { null } else { - ContextCompat.getDrawable(this, R.drawable.toolbar_background) + ContextCompat.getDrawable(this, R.drawable.search_bar_background) } val padding = if (isOpened) 0 else resources.getDimensionPixelOffset(R.dimen.margin_normal) viewBinding.appbar.updatePadding(left = padding, right = padding) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/settings/tools/views/MemoryUsageView.kt b/app/src/main/kotlin/org/koitharu/kotatsu/settings/tools/views/MemoryUsageView.kt index 0328e5534..544105f35 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/settings/tools/views/MemoryUsageView.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/settings/tools/views/MemoryUsageView.kt @@ -2,14 +2,18 @@ package org.koitharu.kotatsu.settings.tools.views import android.content.Context import android.content.res.ColorStateList +import android.graphics.Color import android.util.AttributeSet import android.view.LayoutInflater import android.widget.LinearLayout +import androidx.annotation.AttrRes import androidx.annotation.ColorInt import androidx.annotation.StringRes +import androidx.core.content.ContextCompat import androidx.core.graphics.ColorUtils import androidx.core.widget.TextViewCompat import com.google.android.material.color.MaterialColors +import okio.ByteString.Companion.decodeHex import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.ui.widgets.SegmentedBarView import org.koitharu.kotatsu.core.util.FileSize @@ -17,6 +21,7 @@ import org.koitharu.kotatsu.core.util.ext.getThemeColor import org.koitharu.kotatsu.databinding.LayoutMemoryUsageBinding import org.koitharu.kotatsu.settings.tools.model.StorageUsage + class MemoryUsageView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null @@ -35,9 +40,9 @@ class MemoryUsageView @JvmOverloads constructor( } fun bind(usage: StorageUsage?) { - val storageSegment = SegmentedBarView.Segment(usage?.savedManga?.percent ?: 0f, segmentColor(1)) - val pagesSegment = SegmentedBarView.Segment(usage?.pagesCache?.percent ?: 0f, segmentColor(2)) - val otherSegment = SegmentedBarView.Segment(usage?.otherCache?.percent ?: 0f, segmentColor(3)) + val storageSegment = SegmentedBarView.Segment(usage?.savedManga?.percent ?: 0f, segmentColor(com.google.android.material.R.attr.colorPrimary)) + val pagesSegment = SegmentedBarView.Segment(usage?.pagesCache?.percent ?: 0f, segmentColor(com.google.android.material.R.attr.colorSecondary)) + val otherSegment = SegmentedBarView.Segment(usage?.otherCache?.percent ?: 0f, segmentColor(com.google.android.material.R.attr.colorTertiary)) with(binding) { bar.animateSegments(listOf(storageSegment, pagesSegment, otherSegment).filter { it.percent > 0f }) @@ -67,11 +72,26 @@ class MemoryUsageView @JvmOverloads constructor( } } + private fun getHue(hex: String): Float { + val r = (hex.substring(0, 2).toInt(16)).toFloat() + val g = (hex.substring(2, 4).toInt(16)).toFloat() + val b = (hex.substring(4, 6).toInt(16)).toFloat() + + var hue = 0F + if ((r >= g) && (g >= b)) { + hue = 60 * (g - b) / (r - b) + } else if ((g > r) && (r >= b)) { + hue = 60 * (2 - (r - b) / (g - b)) + } + return hue + } + @ColorInt - private fun segmentColor(i: Int): Int { - val hue = (93.6f * i) % 360 - val color = ColorUtils.HSLToColor(floatArrayOf(hue, 0.4f, 0.6f)) - val backgroundColor = context.getThemeColor(com.google.android.material.R.attr.colorSecondaryContainer) + private fun segmentColor(@AttrRes resId: Int): Int { + val colorHex = String.format("%06x", context.getThemeColor(resId)) + val hue = getHue(colorHex) + val color = ColorUtils.HSLToColor(floatArrayOf(hue, 0.5f, 0.5f)) + val backgroundColor = context.getThemeColor(com.google.android.material.R.attr.colorSurfaceContainerHigh) return MaterialColors.harmonize(color, backgroundColor) } } diff --git a/app/src/main/res/color-v23/colored_button.xml b/app/src/main/res/color-v23/colored_button.xml index fce774b1a..ad0dd1b69 100644 --- a/app/src/main/res/color-v23/colored_button.xml +++ b/app/src/main/res/color-v23/colored_button.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/color/colored_button.xml b/app/src/main/res/color/colored_button.xml index a585251c3..15a69be0a 100644 --- a/app/src/main/res/color/colored_button.xml +++ b/app/src/main/res/color/colored_button.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/color/navigation_bar_scrim.xml b/app/src/main/res/color/navigation_bar_scrim.xml index 6d9fe48af..379700c44 100644 --- a/app/src/main/res/color/navigation_bar_scrim.xml +++ b/app/src/main/res/color/navigation_bar_scrim.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/drawable-v23/toolbar_background.xml b/app/src/main/res/drawable-v23/toolbar_background.xml new file mode 100644 index 000000000..774e73986 --- /dev/null +++ b/app/src/main/res/drawable-v23/toolbar_background.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/search_bar_background.xml b/app/src/main/res/drawable/search_bar_background.xml new file mode 100644 index 000000000..32b28bd70 --- /dev/null +++ b/app/src/main/res/drawable/search_bar_background.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/drawable/toolbar_background.xml b/app/src/main/res/drawable/toolbar_background.xml index 32b28bd70..e032e2149 100644 --- a/app/src/main/res/drawable/toolbar_background.xml +++ b/app/src/main/res/drawable/toolbar_background.xml @@ -1,7 +1,18 @@ - - - - + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout-w600dp-land/activity_main.xml b/app/src/main/res/layout-w600dp-land/activity_main.xml index 320e64005..e566cad6f 100644 --- a/app/src/main/res/layout-w600dp-land/activity_main.xml +++ b/app/src/main/res/layout-w600dp-land/activity_main.xml @@ -52,7 +52,7 @@ android:layout_width="match_parent" android:layout_height="56dp" android:layout_marginVertical="8dp" - android:background="@drawable/toolbar_background" + android:background="@drawable/search_bar_background" android:theme="@style/ThemeOverlay.Kotatsu.MainToolbar" app:layout_scrollFlags="scroll|enterAlways|snap"> diff --git a/app/src/main/res/layout/activity_details.xml b/app/src/main/res/layout/activity_details.xml index 579adf35d..f401b2a27 100644 --- a/app/src/main/res/layout/activity_details.xml +++ b/app/src/main/res/layout/activity_details.xml @@ -21,7 +21,7 @@ android:id="@id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" - android:background="@drawable/m3_tabs_background" + android:background="@drawable/toolbar_background" android:theme="?attr/actionBarTheme" app:layout_scrollFlags="noScroll" tools:ignore="PrivateResource" /> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d3d46a580..a19fc1163 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -36,7 +36,7 @@ android:layout_width="match_parent" android:layout_height="48dp" android:layout_marginVertical="8dp" - android:background="@drawable/toolbar_background" + android:background="@drawable/search_bar_background" android:theme="@style/ThemeOverlay.Kotatsu.MainToolbar" app:layout_scrollFlags="scroll|enterAlways|snap"> diff --git a/app/src/main/res/layout/activity_manga_list.xml b/app/src/main/res/layout/activity_manga_list.xml index d2fe1e037..b2b2967df 100644 --- a/app/src/main/res/layout/activity_manga_list.xml +++ b/app/src/main/res/layout/activity_manga_list.xml @@ -30,11 +30,12 @@ tools:ignore="RtlSymmetry"> @@ -15,61 +16,79 @@ layout="@layout/layout_app_update" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="@dimen/margin_normal" + android:layout_marginHorizontal="@dimen/margin_normal" + android:layout_marginTop="@dimen/margin_normal" android:visibility="gone" tools:visibility="visible" /> - + android:layout_marginTop="@dimen/margin_normal" + android:layout_marginHorizontal="@dimen/margin_normal" + app:cardBackgroundColor="?attr/colorSurfaceContainerLow" + app:cardCornerRadius="21dp"> - + - + + + android:layout_marginHorizontal="@dimen/margin_normal" + android:layout_marginTop="@dimen/margin_normal" + app:cardBackgroundColor="?attr/colorSurfaceContainerLow" + app:cardCornerRadius="21dp" + app:contentPaddingBottom="8dp" + app:contentPaddingTop="8dp"> - + - + - + + + + + + + diff --git a/app/src/main/res/layout/item_empty_state.xml b/app/src/main/res/layout/item_empty_state.xml index ff9a86494..94198432e 100644 --- a/app/src/main/res/layout/item_empty_state.xml +++ b/app/src/main/res/layout/item_empty_state.xml @@ -37,7 +37,6 @@