diff --git a/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt index 2722d29bf..4f5c84aec 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt @@ -1,7 +1,6 @@ package com.hippo.ehviewer.ui.login import android.os.Bundle -import androidx.activity.compose.setContent import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.SideEffect @@ -14,45 +13,43 @@ import androidx.navigation.NavController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import com.google.accompanist.themeadapter.material3.Mdc3Theme import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhCookieStore import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.ui.EhActivity +import com.hippo.ehviewer.ui.widget.setMD3Content import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch class LoginActivity : EhActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContent { + setMD3Content { val windowSizeClass = calculateWindowSizeClass(this) - Mdc3Theme { - val navController = rememberNavController() + val navController = rememberNavController() - CompositionLocalProvider(LocalNavController provides navController) { - NavHost(navController = navController, startDestination = SIGN_IN_ROUTE_NAME) { - composable(SIGN_IN_ROUTE_NAME) { - SignInScreen(windowSizeClass) - } + CompositionLocalProvider(LocalNavController provides navController) { + NavHost(navController = navController, startDestination = SIGN_IN_ROUTE_NAME) { + composable(SIGN_IN_ROUTE_NAME) { + SignInScreen(windowSizeClass) + } - composable(WEBVIEW_SIGN_IN_ROUTE_NAME) { - WebviewSignInScreen() - } + composable(WEBVIEW_SIGN_IN_ROUTE_NAME) { + WebviewSignInScreen() + } - composable(COOKIE_SIGN_IN_ROUTE_NAME) { - CookieSignInScene(windowSizeClass) - } + composable(COOKIE_SIGN_IN_ROUTE_NAME) { + CookieSignInScene(windowSizeClass) + } - composable(SELECT_SITE_ROUTE_NAME) { - val selectSite by remember { mutableStateOf(Settings.selectSite) } - if (selectSite) { - SelectSiteScreen() - } else { - SideEffect { - finish() - } + composable(SELECT_SITE_ROUTE_NAME) { + val selectSite by remember { mutableStateOf(Settings.selectSite) } + if (selectSite) { + SelectSiteScreen() + } else { + SideEffect { + finish() } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt index 8dd51ca9e..31ef2b7d4 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt @@ -44,7 +44,6 @@ import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.SimpleItemAnimator import androidx.recyclerview.widget.StaggeredGridLayoutManager import arrow.core.partially1 -import com.google.accompanist.themeadapter.material3.Mdc3Theme import com.google.android.material.floatingactionbutton.FloatingActionButton import com.hippo.app.BaseDialogBuilder import com.hippo.app.CheckBoxDialogBuilder @@ -69,6 +68,7 @@ import com.hippo.ehviewer.download.DownloadService import com.hippo.ehviewer.download.DownloadService.Companion.clear import com.hippo.ehviewer.spider.SpiderDen import com.hippo.ehviewer.ui.widget.EhAsyncThumb +import com.hippo.ehviewer.ui.widget.setMD3Content import com.hippo.unifile.UniFile import com.hippo.view.ViewTransition import com.hippo.widget.FabLayout @@ -861,19 +861,17 @@ class DownloadsScene : private val height = (Settings.listThumbSize * 3).pxToDp.dp fun bind(info: DownloadInfo) { - binding.thumb.setContent { - Mdc3Theme { - Card( - onClick = ::onClick.partially1(binding.thumb), - ) { - EhAsyncThumb( - model = info.thumb, - contentScale = ContentScale.Crop, - modifier = Modifier - .height(height) - .aspectRatio(0.6666667F), - ) - } + binding.thumb.setMD3Content { + Card( + onClick = ::onClick.partially1(binding.thumb), + ) { + EhAsyncThumb( + model = info.thumb, + contentScale = ContentScale.Crop, + modifier = Modifier + .height(height) + .aspectRatio(0.6666667F), + ) } } binding.title.text = EhUtils.getSuitableTitle(info) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt index 1e7477300..4fdab9e1e 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt @@ -115,7 +115,6 @@ import arrow.core.partially1 import coil.Coil.imageLoader import coil.annotation.ExperimentalCoilApi import coil.imageLoader -import com.google.accompanist.themeadapter.material3.Mdc3Theme import com.google.android.material.progressindicator.CircularProgressIndicator import com.google.android.material.snackbar.Snackbar import com.hippo.app.BaseDialogBuilder @@ -163,6 +162,7 @@ import com.hippo.ehviewer.ui.widget.CrystalCard import com.hippo.ehviewer.ui.widget.EhAsyncPreview import com.hippo.ehviewer.ui.widget.GalleryDetailHeaderCard import com.hippo.ehviewer.ui.widget.GalleryDetailRating +import com.hippo.ehviewer.ui.widget.setMD3Content import com.hippo.ehviewer.widget.GalleryRatingBar import com.hippo.ehviewer.widget.GalleryRatingBar.OnUserRateListener import com.hippo.text.URLImageGetter @@ -407,103 +407,101 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener { downloadManager.addDownloadInfoListener(this) (requireActivity() as MainActivity).mShareUrl = galleryDetailUrl return ComposeView(requireContext()).apply { - setContent { - Mdc3Theme { - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() - Scaffold( - topBar = { - LargeTopAppBar( - title = { - composeBindingGI?.let { - Text( - text = EhUtils.getSuitableTitle(it), - maxLines = 2, - ) - } - }, - navigationIcon = { - IconButton(onClick = { - findNavController().popBackStack() - }) { - Icon( - imageVector = Icons.Default.ArrowBack, - contentDescription = null, - ) - } - }, - scrollBehavior = scrollBehavior, - actions = { - var dropdown by remember { mutableStateOf(false) } - IconButton(onClick = { dropdown = !dropdown }) { - Icon( - imageVector = Icons.Default.MoreVert, - contentDescription = null, - ) - } - DropdownMenu( - expanded = dropdown, - onDismissRequest = { dropdown = false }, - ) { - DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_add_tag)) }, - onClick = { - dropdown = false - actionAddTag() - }, - ) - DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.refresh)) }, - onClick = { - dropdown = false - actionRefresh() - }, - ) - DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.open_in_other_app)) }, - onClick = { - dropdown = false - actionOpenInOtherApp() - }, - ) - } - }, - ) - }, - ) { - Surface { - if (getDetailError.isNotBlank()) { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - ) { - Icon( - painter = painterResource(id = R.drawable.big_sad_pandroid), - contentDescription = null, - modifier = Modifier.clickable(onClick = ::actionRefresh), - ) - Spacer(modifier = Modifier.size(8.dp)) + setMD3Content { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + Scaffold( + topBar = { + LargeTopAppBar( + title = { + composeBindingGI?.let { Text( - text = getDetailError, - modifier = Modifier.widthIn(max = 228.dp), + text = EhUtils.getSuitableTitle(it), + maxLines = 2, ) } - } else { - val gi = composeBindingGI - if (gi != null) { - GalleryDetailContent( - galleryInfo = gi, - galleryDetail = composeBindingGD, - contentPadding = it, - modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), + }, + navigationIcon = { + IconButton(onClick = { + findNavController().popBackStack() + }) { + Icon( + imageVector = Icons.Default.ArrowBack, + contentDescription = null, ) - } else { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center, - ) { - CircularProgressIndicator() - } + } + }, + scrollBehavior = scrollBehavior, + actions = { + var dropdown by remember { mutableStateOf(false) } + IconButton(onClick = { dropdown = !dropdown }) { + Icon( + imageVector = Icons.Default.MoreVert, + contentDescription = null, + ) + } + DropdownMenu( + expanded = dropdown, + onDismissRequest = { dropdown = false }, + ) { + DropdownMenuItem( + text = { Text(text = stringResource(id = R.string.action_add_tag)) }, + onClick = { + dropdown = false + actionAddTag() + }, + ) + DropdownMenuItem( + text = { Text(text = stringResource(id = R.string.refresh)) }, + onClick = { + dropdown = false + actionRefresh() + }, + ) + DropdownMenuItem( + text = { Text(text = stringResource(id = R.string.open_in_other_app)) }, + onClick = { + dropdown = false + actionOpenInOtherApp() + }, + ) + } + }, + ) + }, + ) { + Surface { + if (getDetailError.isNotBlank()) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + ) { + Icon( + painter = painterResource(id = R.drawable.big_sad_pandroid), + contentDescription = null, + modifier = Modifier.clickable(onClick = ::actionRefresh), + ) + Spacer(modifier = Modifier.size(8.dp)) + Text( + text = getDetailError, + modifier = Modifier.widthIn(max = 228.dp), + ) + } + } else { + val gi = composeBindingGI + if (gi != null) { + GalleryDetailContent( + galleryInfo = gi, + galleryDetail = composeBindingGD, + contentPadding = it, + modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), + ) + } else { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center, + ) { + CircularProgressIndicator() } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.kt index f7b09e5c4..f17c84623 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding -import com.google.accompanist.themeadapter.material3.Mdc3Theme import com.hippo.drawable.TriangleDrawable import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUtils @@ -35,6 +34,7 @@ import com.hippo.ehviewer.databinding.ItemGalleryGridBinding import com.hippo.ehviewer.databinding.ItemGalleryListBinding import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.ui.widget.EhAsyncThumb +import com.hippo.ehviewer.ui.widget.setMD3Content import eu.kanade.tachiyomi.util.system.pxToDp internal abstract class GalleryHolder(binding: ViewBinding) : @@ -52,17 +52,15 @@ internal class ListGalleryHolder( @SuppressLint("SetTextI18n") override fun bind(galleryInfo: GalleryInfo) { binding.run { - thumb.setContent { - Mdc3Theme { - Card { - EhAsyncThumb( - model = galleryInfo.thumb, - contentScale = ContentScale.Crop, - modifier = Modifier - .height(height) - .aspectRatio(0.6666667F), - ) - } + thumb.setMD3Content { + Card { + EhAsyncThumb( + model = galleryInfo.thumb, + contentScale = ContentScale.Crop, + modifier = Modifier + .height(height) + .aspectRatio(0.6666667F), + ) } } title.text = EhUtils.getSuitableTitle(galleryInfo) @@ -102,14 +100,12 @@ internal class GridGalleryHolder(private val binding: ItemGalleryGridBinding) : override fun bind(galleryInfo: GalleryInfo) { binding.run { val aspect = (galleryInfo.thumbWidth.toFloat() / galleryInfo.thumbHeight).coerceIn(0.33F, 1.5F) - thumb.setContent { - Mdc3Theme { - EhAsyncThumb( - model = galleryInfo.thumb, - modifier = Modifier.aspectRatio(aspect), - contentScale = ContentScale.Crop, - ) - } + thumb.setMD3Content { + EhAsyncThumb( + model = galleryInfo.thumb, + modifier = Modifier.aspectRatio(aspect), + contentScale = ContentScale.Crop, + ) } var drawable = category.background val color = EhUtils.getCategoryColor(galleryInfo.category) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsAdapter.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsAdapter.kt index b384d111b..b92ca6919 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsAdapter.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsAdapter.kt @@ -14,10 +14,10 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import arrow.core.partially1 -import com.google.accompanist.themeadapter.material3.Mdc3Theme import com.hippo.ehviewer.client.data.GalleryPreview import com.hippo.ehviewer.ui.widget.CrystalCard import com.hippo.ehviewer.ui.widget.EhAsyncPreview +import com.hippo.ehviewer.ui.widget.setMD3Content class GalleryPreviewsAdapter(private val onClick: (GalleryPreview) -> Unit) : ListAdapter(PreviewDiffCallback) { class ComposeHolder(val composeView: ComposeView) : RecyclerView.ViewHolder(composeView) @@ -31,26 +31,24 @@ class GalleryPreviewsAdapter(private val onClick: (GalleryPreview) -> Unit) : Li override fun onBindViewHolder(holder: ComposeHolder, position: Int) { val it = getItem(position) - holder.composeView.setContent { - Mdc3Theme { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - ) { - Box(contentAlignment = Alignment.Center) { - CrystalCard( - onClick = onClick.partially1(it), - modifier = Modifier - .fillMaxWidth() - .aspectRatio(0.6666667F), - ) { - EhAsyncPreview( - model = it, - modifier = Modifier.fillMaxSize(), - ) - } + holder.composeView.setMD3Content { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Box(contentAlignment = Alignment.Center) { + CrystalCard( + onClick = onClick.partially1(it), + modifier = Modifier + .fillMaxWidth() + .aspectRatio(0.6666667F), + ) { + EhAsyncPreview( + model = it, + modifier = Modifier.fillMaxSize(), + ) } - Text((it.position + 1).toString()) } + Text((it.position + 1).toString()) } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/widget/Theme.kt b/app/src/main/java/com/hippo/ehviewer/ui/widget/Theme.kt index 930fcf545..e206f68bd 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/widget/Theme.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/widget/Theme.kt @@ -1,7 +1,11 @@ package com.hippo.ehviewer.ui.widget +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent import androidx.compose.runtime.Composable import androidx.compose.ui.platform.ComposeView import com.google.accompanist.themeadapter.material3.Mdc3Theme +// To make sure compose theme and legacy view theme are in sync, we only use Mdc3Theme fun ComposeView.setMD3Content(content: @Composable () -> Unit) = setContent { Mdc3Theme(content = content) } +fun ComponentActivity.setMD3Content(content: @Composable () -> Unit) = setContent { Mdc3Theme(content = content) }