Revert GalleryInfoBottomSheet to BottomSheetDialogFragment impl for predictive back
This commit is contained in:
1 parent
5b03e67108
commit
d5a16f50c5
3 files changed
+88
-121
No files matched your search
@@ -1,24 +1,12 @@
|
||||
/*
|
||||
* Copyright 2016 Hippo Seven
|
||||
*
|
||||
* 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.hippo.ehviewer.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
@@ -26,9 +14,7 @@ import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.material3.LocalTextStyle
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.ModalBottomSheet
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -37,6 +23,8 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.dimensionResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import com.hippo.ehviewer.R
|
||||
import com.hippo.ehviewer.Settings
|
||||
import com.hippo.ehviewer.client.EhUrl
|
||||
@@ -44,104 +32,75 @@ import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.client.data.GalleryDetail
|
||||
import com.hippo.ehviewer.client.data.GalleryInfo.Companion.LOCAL_FAVORITED
|
||||
import com.hippo.ehviewer.client.thumbUrl
|
||||
import com.hippo.ehviewer.databinding.InfoSheetBinding
|
||||
import com.hippo.ehviewer.ui.scene.navWithUrl
|
||||
import com.hippo.ehviewer.util.tellClipboardWithToast
|
||||
|
||||
private const val INDEX_URL = 2
|
||||
private const val INDEX_PARENT = 9
|
||||
|
||||
private val keys = arrayOf(
|
||||
R.string.key_gid,
|
||||
R.string.key_token,
|
||||
R.string.key_url,
|
||||
R.string.key_title,
|
||||
R.string.key_title_jpn,
|
||||
R.string.key_thumb,
|
||||
R.string.key_category,
|
||||
R.string.key_uploader,
|
||||
R.string.key_posted,
|
||||
R.string.key_parent,
|
||||
R.string.key_visible,
|
||||
R.string.key_language,
|
||||
R.string.key_pages,
|
||||
R.string.key_size,
|
||||
R.string.key_favorite_count,
|
||||
R.string.key_favorited,
|
||||
R.string.key_rating_count,
|
||||
R.string.key_rating,
|
||||
R.string.key_torrents,
|
||||
R.string.key_torrent_url,
|
||||
R.string.favorite_name,
|
||||
private fun GalleryDetail.generateContent() = arrayOf(
|
||||
R.string.key_gid to gid.toString(),
|
||||
R.string.key_token to token,
|
||||
R.string.key_url to EhUrl.getGalleryDetailUrl(gid, token),
|
||||
R.string.key_title to title,
|
||||
R.string.key_title_jpn to titleJpn,
|
||||
R.string.key_thumb to thumbUrl,
|
||||
R.string.key_category to EhUtils.getCategory(category),
|
||||
R.string.key_uploader to uploader,
|
||||
R.string.key_posted to posted,
|
||||
R.string.key_parent to parent,
|
||||
R.string.key_visible to visible,
|
||||
R.string.key_language to language,
|
||||
R.string.key_pages to pages.toString(),
|
||||
R.string.key_size to size,
|
||||
R.string.key_favorite_count to favoriteCount.toString(),
|
||||
R.string.key_favorited to (favoriteSlot > LOCAL_FAVORITED).toString(),
|
||||
R.string.key_rating_count to ratingCount.toString(),
|
||||
R.string.key_rating to rating.toString(),
|
||||
R.string.key_torrents to torrentCount.toString(),
|
||||
R.string.key_torrent_url to torrentUrl,
|
||||
R.string.favorite_name to favoriteName,
|
||||
)
|
||||
|
||||
@Composable
|
||||
fun GalleryInfoBottomSheet(
|
||||
galleryDetail: GalleryDetail,
|
||||
onDismissRequest: () -> Unit,
|
||||
) {
|
||||
val data = remember(galleryDetail) {
|
||||
galleryDetail.run {
|
||||
arrayOf(
|
||||
gid.toString(),
|
||||
token,
|
||||
EhUrl.getGalleryDetailUrl(gid, token),
|
||||
title,
|
||||
titleJpn,
|
||||
thumbUrl,
|
||||
EhUtils.getCategory(category),
|
||||
uploader,
|
||||
posted,
|
||||
parent,
|
||||
visible,
|
||||
language,
|
||||
pages.toString(),
|
||||
size,
|
||||
favoriteCount.toString(),
|
||||
(favoriteSlot > LOCAL_FAVORITED).toString(),
|
||||
ratingCount.toString(),
|
||||
rating.toString(),
|
||||
torrentCount.toString(),
|
||||
torrentUrl,
|
||||
favoriteName,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
ModalBottomSheet(
|
||||
onDismissRequest = onDismissRequest,
|
||||
windowInsets = WindowInsets(0),
|
||||
) {
|
||||
check(data.size == keys.size)
|
||||
val context = LocalContext.current
|
||||
val navController = LocalNavController.current
|
||||
Box(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
Text(text = stringResource(id = R.string.gallery_info), style = MaterialTheme.typography.titleLarge)
|
||||
}
|
||||
CompositionLocalProvider(LocalTextStyle provides MaterialTheme.typography.labelLarge) {
|
||||
LazyColumn {
|
||||
itemsIndexed(keys) { index, i ->
|
||||
val key = stringResource(i)
|
||||
Row(
|
||||
modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.keyline_margin)).clickable {
|
||||
if (index == INDEX_PARENT) {
|
||||
data[index]?.let { navController.navWithUrl(it) }
|
||||
} else {
|
||||
context tellClipboardWithToast data[index]
|
||||
if (index == INDEX_URL) {
|
||||
// Save it to avoid detect the gallery
|
||||
Settings.clipboardTextHashCode = data[index].hashCode()
|
||||
}
|
||||
class GalleryInfoBottomSheet(private val detail: GalleryDetail) : BottomSheetDialogFragment() {
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) = InfoSheetBinding.inflate(layoutInflater, container, false).apply {
|
||||
content.setMD3Content {
|
||||
Column(modifier = Modifier.fillMaxWidth()) {
|
||||
val context = LocalContext.current
|
||||
val navController = remember { findNavController() }
|
||||
Box(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
Text(text = stringResource(id = R.string.gallery_info), style = MaterialTheme.typography.titleLarge)
|
||||
}
|
||||
val data = remember(detail) { detail.generateContent() }
|
||||
CompositionLocalProvider(LocalTextStyle provides MaterialTheme.typography.labelLarge) {
|
||||
LazyColumn {
|
||||
itemsIndexed(data) { index, (key, content) ->
|
||||
Row(
|
||||
modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.keyline_margin)).clickable {
|
||||
if (index == INDEX_PARENT) {
|
||||
if (content != null) {
|
||||
navController.navWithUrl(content)
|
||||
}
|
||||
} else {
|
||||
context tellClipboardWithToast content
|
||||
if (index == INDEX_URL) {
|
||||
// Save it to avoid detect the gallery
|
||||
Settings.clipboardTextHashCode = data[index].hashCode()
|
||||
}
|
||||
}
|
||||
}.fillMaxWidth(),
|
||||
) {
|
||||
Text(stringResource(id = key), modifier = Modifier.width(90.dp).padding(8.dp))
|
||||
Text(content.orEmpty(), modifier = Modifier.padding(8.dp))
|
||||
}
|
||||
}.fillMaxWidth(),
|
||||
) {
|
||||
Text(key, modifier = Modifier.width(90.dp).padding(8.dp))
|
||||
Text(data[index].orEmpty(), modifier = Modifier.padding(8.dp))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}.root
|
||||
}
|
||||
@@ -78,13 +78,11 @@ import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
|
||||
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.produceState
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
@@ -138,7 +136,6 @@ import com.hippo.ehviewer.spider.SpiderQueen
|
||||
import com.hippo.ehviewer.spider.SpiderQueen.Companion.MODE_READ
|
||||
import com.hippo.ehviewer.ui.CommonOperations
|
||||
import com.hippo.ehviewer.ui.GalleryInfoBottomSheet
|
||||
import com.hippo.ehviewer.ui.LocalNavController
|
||||
import com.hippo.ehviewer.ui.MainActivity
|
||||
import com.hippo.ehviewer.ui.addToFavorites
|
||||
import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder
|
||||
@@ -491,6 +488,12 @@ class GalleryDetailScene : BaseScene() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun onGalleryInfoCardClick() {
|
||||
composeBindingGD?.let {
|
||||
GalleryInfoBottomSheet(it).show(requireActivity().supportFragmentManager, "GalleryInfoBottomSheet")
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun GalleryDetailContent(
|
||||
galleryInfo: GalleryInfo,
|
||||
@@ -498,19 +501,6 @@ class GalleryDetailScene : BaseScene() {
|
||||
contentPadding: PaddingValues,
|
||||
modifier: Modifier,
|
||||
) {
|
||||
var showSheet by rememberSaveable { mutableStateOf(false) }
|
||||
fun onGalleryInfoCardClick() {
|
||||
showSheet = true
|
||||
}
|
||||
|
||||
val navController = remember { findNavController() }
|
||||
CompositionLocalProvider(LocalNavController provides navController) {
|
||||
composeBindingGD?.let {
|
||||
if (showSheet) {
|
||||
GalleryInfoBottomSheet(galleryDetail = it) { showSheet = false }
|
||||
}
|
||||
}
|
||||
}
|
||||
val windowSizeClass = calculateWindowSizeClass(requireActivity())
|
||||
val columnCount = calculateSuitableSpanCount()
|
||||
when (windowSizeClass.widthSizeClass) {
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/standard_bottom_sheet"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.bottomsheet.BottomSheetDragHandleView
|
||||
android:id="@+id/drag_handle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<androidx.compose.ui.platform.ComposeView
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
||||
Reference in new issue
Block a user