From 28131ac1357e1134d75c02e2a3bb5e3161a3ecfe Mon Sep 17 00:00:00 2001 From: arkon Date: Sat, 15 Jul 2023 11:10:01 -0400 Subject: [PATCH] Remove legacy settings sheet The per-series settings aren't quite functional yet, but they're also accessible outside of the sheet. --- .../reader/settings/ReadingModePage.kt | 32 ++++- .../tachiyomi/ui/reader/ReaderActivity.kt | 23 ++-- .../tachiyomi/ui/reader/ReaderViewModel.kt | 8 +- .../setting/ReaderSettingsScreenModel.kt | 15 +++ .../ui/reader/setting/ReaderSettingsSheet.kt | 38 ------ .../util/preference/PreferenceExtensions.kt | 9 -- .../view/BottomSheetBehaviorExtensions.kt | 12 -- .../tachiyomi/util/view/WindowExtensions.kt | 23 ---- .../tachiyomi/widget/MaterialSpinnerView.kt | 117 ------------------ .../main/res/anim/bottom_sheet_slide_in.xml | 10 -- .../main/res/anim/bottom_sheet_slide_out.xml | 10 -- .../main/res/drawable/ic_expand_more_24dp.xml | 9 -- app/src/main/res/layout/pref_spinner.xml | 58 --------- app/src/main/res/layout/reader_activity.xml | 15 +-- .../layout/reader_reading_mode_settings.xml | 29 ----- app/src/main/res/values/attrs.xml | 10 -- app/src/main/res/values/dimens.xml | 2 - app/src/main/res/values/styles.xml | 49 -------- app/src/main/res/values/themes.xml | 4 - 19 files changed, 55 insertions(+), 418 deletions(-) delete mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsSheet.kt delete mode 100644 app/src/main/java/eu/kanade/tachiyomi/util/view/BottomSheetBehaviorExtensions.kt delete mode 100644 app/src/main/java/eu/kanade/tachiyomi/widget/MaterialSpinnerView.kt delete mode 100644 app/src/main/res/anim/bottom_sheet_slide_in.xml delete mode 100644 app/src/main/res/anim/bottom_sheet_slide_out.xml delete mode 100644 app/src/main/res/drawable/ic_expand_more_24dp.xml delete mode 100644 app/src/main/res/layout/pref_spinner.xml delete mode 100644 app/src/main/res/layout/reader_reading_mode_settings.xml delete mode 100644 app/src/main/res/values/attrs.xml diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt index 48d002a1b2..425d7bbff1 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt @@ -2,13 +2,17 @@ package eu.kanade.presentation.reader.settings import androidx.compose.foundation.layout.ColumnScope import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.res.stringResource import eu.kanade.presentation.util.collectAsState import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel +import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType +import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer import eu.kanade.tachiyomi.util.system.isReleaseBuildType import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.HeadingItem @@ -22,16 +26,32 @@ internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) HeadingItem(R.string.pref_category_for_this_series) - // TODO: Reading mode HeadingItem(R.string.pref_category_reading_mode) + ReadingModeType.values().map { + RadioItem( + label = stringResource(it.stringRes), + // TODO: Reading mode + selected = false, + onClick = { screenModel.onChangeReadingMode(it) }, + ) + } - // TODO: Rotation type HeadingItem(R.string.rotation_type) + OrientationType.values().map { + RadioItem( + label = stringResource(it.stringRes), + // TODO: Rotation type + selected = false, + onClick = { screenModel.onChangeOrientation(it) }, + ) + } - // TODO: if (pager) - PagerViewerSettings(screenModel) - - WebtoonViewerSettings(screenModel) + val viewer by screenModel.viewerFlow.collectAsState() + if (viewer is WebtoonViewer) { + WebtoonViewerSettings(screenModel) + } else { + PagerViewerSettings(screenModel) + } } @Composable diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index a8acff6159..f7afede9e5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -69,7 +69,6 @@ import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel -import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsSheet import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer @@ -391,7 +390,13 @@ class ReaderActivity : BaseActivity() { binding.dialogRoot.setComposeContent { val state by viewModel.state.collectAsState() - val settingsScreenModel = remember { ReaderSettingsScreenModel() } + val settingsScreenModel = remember { + ReaderSettingsScreenModel( + readerState = viewModel.state, + onChangeReadingMode = viewModel::setMangaReadingMode, + onChangeOrientation = viewModel::setMangaOrientationType, + ) + } val onDismissRequest = viewModel::closeDialog when (state.dialog) { @@ -485,7 +490,7 @@ class ReaderActivity : BaseActivity() { ) { val newReadingMode = ReadingModeType.fromPreference(itemId) - viewModel.setMangaReadingMode(newReadingMode.flagValue) + viewModel.setMangaReadingMode(newReadingMode) menuToggleToast?.cancel() if (!readerPreferences.showReadingMode().get()) { @@ -539,7 +544,7 @@ class ReaderActivity : BaseActivity() { ) { val newOrientation = OrientationType.fromPreference(itemId) - viewModel.setMangaOrientationType(newOrientation.flagValue) + viewModel.setMangaOrientationType(newOrientation) menuToggleToast?.cancel() menuToggleToast = toast(newOrientation.stringRes) @@ -548,16 +553,6 @@ class ReaderActivity : BaseActivity() { } // Settings sheet - with(binding.actionSettingsLegacy) { - setTooltip(R.string.action_settings) - - var readerSettingSheet: ReaderSettingsSheet? = null - - setOnClickListener { - if (readerSettingSheet?.isShowing == true) return@setOnClickListener - readerSettingSheet = ReaderSettingsSheet(this@ReaderActivity).apply { show() } - } - } with(binding.actionSettings) { setTooltip(R.string.action_settings) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt index 0fa5423c35..7970967383 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt @@ -602,10 +602,10 @@ class ReaderViewModel( /** * Updates the viewer position for the open manga. */ - fun setMangaReadingMode(readingModeType: Int) { + fun setMangaReadingMode(readingModeType: ReadingModeType) { val manga = manga ?: return runBlocking(Dispatchers.IO) { - setMangaViewerFlags.awaitSetMangaReadingMode(manga.id, readingModeType.toLong()) + setMangaViewerFlags.awaitSetMangaReadingMode(manga.id, readingModeType.flagValue.toLong()) val currChapters = state.value.viewerChapters if (currChapters != null) { // Save current page @@ -638,10 +638,10 @@ class ReaderViewModel( /** * Updates the orientation type for the open manga. */ - fun setMangaOrientationType(rotationType: Int) { + fun setMangaOrientationType(rotationType: OrientationType) { val manga = manga ?: return viewModelScope.launchIO { - setMangaViewerFlags.awaitSetOrientationType(manga.id, rotationType.toLong()) + setMangaViewerFlags.awaitSetOrientationType(manga.id, rotationType.flagValue.toLong()) val currChapters = state.value.viewerChapters if (currChapters != null) { // Save current page diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsScreenModel.kt index 6a9ad29361..87068fa61d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsScreenModel.kt @@ -1,15 +1,30 @@ package eu.kanade.tachiyomi.ui.reader.setting import cafe.adriel.voyager.core.model.ScreenModel +import eu.kanade.presentation.util.ioCoroutineScope +import eu.kanade.tachiyomi.ui.reader.ReaderViewModel import eu.kanade.tachiyomi.util.preference.toggle +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn import tachiyomi.core.preference.Preference import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ReaderSettingsScreenModel( + readerState: StateFlow, + val onChangeReadingMode: (ReadingModeType) -> Unit, + val onChangeOrientation: (OrientationType) -> Unit, val preferences: ReaderPreferences = Injekt.get(), ) : ScreenModel { + val viewerFlow = readerState + .map { it.viewer } + .distinctUntilChanged() + .stateIn(ioCoroutineScope, SharingStarted.Lazily, null) + fun togglePreference(preference: (ReaderPreferences) -> Preference) { preference(preferences).toggle() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsSheet.kt deleted file mode 100644 index a54aa233b7..0000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsSheet.kt +++ /dev/null @@ -1,38 +0,0 @@ -package eu.kanade.tachiyomi.ui.reader.setting - -import android.os.Bundle -import com.google.android.material.bottomsheet.BottomSheetDialog -import eu.kanade.domain.manga.model.orientationType -import eu.kanade.domain.manga.model.readingModeType -import eu.kanade.tachiyomi.databinding.ReaderReadingModeSettingsBinding -import eu.kanade.tachiyomi.ui.reader.ReaderActivity - -class ReaderSettingsSheet( - private val activity: ReaderActivity, -) : BottomSheetDialog(activity) { - - private lateinit var binding: ReaderReadingModeSettingsBinding - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - binding = ReaderReadingModeSettingsBinding.inflate(activity.layoutInflater) - setContentView(binding.root) - - initGeneralPreferences() - } - - private fun initGeneralPreferences() { - binding.viewer.onItemSelectedListener = { position -> - val readingModeType = ReadingModeType.fromSpinner(position) - activity.viewModel.setMangaReadingMode(readingModeType.flagValue) - } - binding.viewer.setSelection(activity.viewModel.manga?.readingModeType?.let { ReadingModeType.fromPreference(it.toInt()).prefValue } ?: ReadingModeType.DEFAULT.prefValue) - - binding.rotationMode.onItemSelectedListener = { position -> - val rotationType = OrientationType.fromSpinner(position) - activity.viewModel.setMangaOrientationType(rotationType.flagValue) - } - binding.rotationMode.setSelection(activity.viewModel.manga?.orientationType?.let { OrientationType.fromPreference(it.toInt()).prefValue } ?: OrientationType.DEFAULT.prefValue) - } -} diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/preference/PreferenceExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/preference/PreferenceExtensions.kt index 7009635c6a..887fc7e2e6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/preference/PreferenceExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/preference/PreferenceExtensions.kt @@ -1,16 +1,7 @@ package eu.kanade.tachiyomi.util.preference -import android.widget.CompoundButton import tachiyomi.core.preference.Preference -/** - * Binds a checkbox or switch view with a boolean preference. - */ -fun CompoundButton.bindToPreference(pref: Preference) { - isChecked = pref.get() - setOnCheckedChangeListener { _, isChecked -> pref.set(isChecked) } -} - operator fun Preference>.plusAssign(item: T) { set(get() + item) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/view/BottomSheetBehaviorExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/view/BottomSheetBehaviorExtensions.kt deleted file mode 100644 index a5da1a432e..0000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/util/view/BottomSheetBehaviorExtensions.kt +++ /dev/null @@ -1,12 +0,0 @@ -@file:Suppress("PackageDirectoryMismatch") - -package com.google.android.material.bottomsheet - -import android.view.View - -/** - * Returns package-private elevation value - */ -fun BottomSheetBehavior.getElevation(): Float { - return elevation.takeIf { it >= 0F } ?: 0F -} diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/view/WindowExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/view/WindowExtensions.kt index fc5a2fc1f9..1a60b8e1ee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/view/WindowExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/view/WindowExtensions.kt @@ -1,30 +1,7 @@ package eu.kanade.tachiyomi.util.view -import android.content.Context -import android.graphics.Color import android.view.Window import android.view.WindowManager -import com.google.android.material.elevation.ElevationOverlayProvider -import eu.kanade.tachiyomi.util.system.getResourceColor -import eu.kanade.tachiyomi.util.system.isNavigationBarNeedsScrim - -/** - * Sets navigation bar color to transparent if system's config_navBarNeedsScrim is false, - * otherwise it will use the theme navigationBarColor with 70% opacity. - * - * @see isNavigationBarNeedsScrim - */ -fun Window.setNavigationBarTransparentCompat(context: Context, elevation: Float = 0F) { - navigationBarColor = if (context.isNavigationBarNeedsScrim()) { - // Set navbar scrim 70% of navigationBarColor - ElevationOverlayProvider(context).compositeOverlayIfNeeded( - context.getResourceColor(android.R.attr.navigationBarColor, 0.7F), - elevation, - ) - } else { - Color.TRANSPARENT - } -} fun Window.setSecureScreen(enabled: Boolean) { if (enabled) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/MaterialSpinnerView.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/MaterialSpinnerView.kt deleted file mode 100644 index 54160cf714..0000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/MaterialSpinnerView.kt +++ /dev/null @@ -1,117 +0,0 @@ -package eu.kanade.tachiyomi.widget - -import android.annotation.SuppressLint -import android.content.Context -import android.util.AttributeSet -import android.view.Gravity -import android.view.LayoutInflater -import android.view.MenuItem -import android.widget.FrameLayout -import androidx.appcompat.content.res.AppCompatResources -import androidx.appcompat.view.menu.MenuBuilder -import androidx.appcompat.widget.PopupMenu -import androidx.core.content.withStyledAttributes -import androidx.core.view.forEach -import androidx.core.view.get -import androidx.core.view.size -import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.databinding.PrefSpinnerBinding -import eu.kanade.tachiyomi.util.system.getResourceColor -import tachiyomi.core.preference.Preference - -class MaterialSpinnerView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : - FrameLayout(context, attrs) { - - private var entries = emptyList() - private var selectedPosition = 0 - private var popup: PopupMenu? = null - - var onItemSelectedListener: ((Int) -> Unit)? = null - set(value) { - field = value - if (value != null) { - popup = makeSettingsPopup() - setOnTouchListener(popup?.dragToOpenListener) - setOnClickListener { - popup?.show() - } - } - } - - private val emptyIcon by lazy { - AppCompatResources.getDrawable(context, R.drawable.ic_blank_24dp) - } - private val checkmarkIcon by lazy { - AppCompatResources.getDrawable(context, R.drawable.ic_check_24dp)?.mutate()?.apply { - setTint(context.getResourceColor(android.R.attr.textColorPrimary)) - } - } - - private val binding = PrefSpinnerBinding.inflate(LayoutInflater.from(context), this, false) - - init { - addView(binding.root) - - context.withStyledAttributes(set = attrs, attrs = R.styleable.MaterialSpinnerView) { - val title = getString(R.styleable.MaterialSpinnerView_title).orEmpty() - binding.title.text = title - - val viewEntries = getTextArray(R.styleable.MaterialSpinnerView_android_entries) - .orEmpty() - .map { it.toString() } - entries = viewEntries - binding.details.text = viewEntries.firstOrNull().orEmpty() - } - } - - fun setSelection(selection: Int) { - if (selectedPosition < (popup?.menu?.size ?: 0)) { - popup?.menu?.getItem(selectedPosition)?.let { - it.icon = emptyIcon - } - } - selectedPosition = selection - popup?.menu?.getItem(selectedPosition)?.let { - it.icon = checkmarkIcon - } - binding.details.text = entries.getOrNull(selection).orEmpty() - } - - private fun makeSettingsPopup(preference: Preference, offset: Int = 0, block: ((Int) -> Unit)? = null): PopupMenu { - return createPopupMenu { pos -> - preference.set(pos + offset) - block?.invoke(pos) - } - } - - private fun makeSettingsPopup(): PopupMenu { - return createPopupMenu { pos -> - onItemSelectedListener?.invoke(pos) - } - } - - private fun menuClicked(menuItem: MenuItem): Int { - val pos = menuItem.itemId - setSelection(pos) - return pos - } - - @SuppressLint("RestrictedApi") - fun createPopupMenu(onItemClick: (Int) -> Unit): PopupMenu { - val popup = PopupMenu(context, this, Gravity.END, R.attr.actionOverflowMenuStyle, 0) - entries.forEachIndexed { index, entry -> - popup.menu.add(0, index, 0, entry) - } - (popup.menu as? MenuBuilder)?.setOptionalIconsVisible(true) - popup.menu.forEach { - it.icon = emptyIcon - } - popup.menu[selectedPosition].icon = checkmarkIcon - popup.setOnMenuItemClickListener { menuItem -> - val pos = menuClicked(menuItem) - onItemClick(pos) - true - } - return popup - } -} diff --git a/app/src/main/res/anim/bottom_sheet_slide_in.xml b/app/src/main/res/anim/bottom_sheet_slide_in.xml deleted file mode 100644 index 74f052a3fb..0000000000 --- a/app/src/main/res/anim/bottom_sheet_slide_in.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/app/src/main/res/anim/bottom_sheet_slide_out.xml b/app/src/main/res/anim/bottom_sheet_slide_out.xml deleted file mode 100644 index 553c827a50..0000000000 --- a/app/src/main/res/anim/bottom_sheet_slide_out.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_expand_more_24dp.xml b/app/src/main/res/drawable/ic_expand_more_24dp.xml deleted file mode 100644 index 5f5ba4e448..0000000000 --- a/app/src/main/res/drawable/ic_expand_more_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/layout/pref_spinner.xml b/app/src/main/res/layout/pref_spinner.xml deleted file mode 100644 index c7335fa1f4..0000000000 --- a/app/src/main/res/layout/pref_spinner.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/layout/reader_activity.xml b/app/src/main/res/layout/reader_activity.xml index afd40f4c9c..b5dd2778ba 100644 --- a/app/src/main/res/layout/reader_activity.xml +++ b/app/src/main/res/layout/reader_activity.xml @@ -118,19 +118,6 @@ app:srcCompat="@drawable/ic_screen_rotation_24dp" app:tint="?attr/colorOnSurface" /> - - diff --git a/app/src/main/res/layout/reader_reading_mode_settings.xml b/app/src/main/res/layout/reader_reading_mode_settings.xml deleted file mode 100644 index 39b824939d..0000000000 --- a/app/src/main/res/layout/reader_reading_mode_settings.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml deleted file mode 100644 index d644cdf854..0000000000 --- a/app/src/main/res/values/attrs.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index f6f722017c..e822887675 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,6 +1,4 @@ - 8dp - 16dp 16dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index fdcafe4c42..14dc1a13ab 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -20,33 +20,6 @@ - - - - - - - - - - - - - @@ -71,18 +44,6 @@ - - - - - - @@ -94,16 +55,6 @@ @bool/elevationOverlayEnabled - - - - - diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 50aa51d0ee..b61c34eb97 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -64,17 +64,13 @@ 0.32 true @style/Theme.Tachiyomi.ActionButton.Overflow - @drawable/ic_close_24dp @style/PreferenceThemeOverlay.Tachiyomi - @style/ThemeOverlay.Tachiyomi.BottomSheetDialog @style/Widget.Material3.TextInputLayout.OutlinedBox @style/Widget.Material3.AppBarLayout @style/Widget.Material3.Toolbar.Surface - @style/Widget.Tachiyomi.TabLayout @style/Widget.Tachiyomi.Switch @style/Widget.Material3.CompoundButton.MaterialSwitch @style/Widget.Tachiyomi.Switch - @style/Widget.Tachiyomi.Slider @style/Widget.Material3.CardView.Elevated