Always use setMD3Content

This commit is contained in:
tarsin committed 2023-05-04 22:12:12 +08:00
1 parent a57e91cd0a
commit aa2073194d
6 files changed
+162 -171

No files matched your search

@@ -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()
}
}
}
@@ -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)
@@ -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()
}
}
}
@@ -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)
@@ -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<GalleryPreview, GalleryPreviewsAdapter.ComposeHolder>(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())
}
}
}
@@ -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) }