From 32a770b9b5948a32ed3894e69b4b22b72291e637 Mon Sep 17 00:00:00 2001 From: tarsin Date: Sun, 26 Mar 2023 18:34:59 +0800 Subject: [PATCH] Convert to use window size class --- .../java/com/hippo/ehviewer/ui/EhActivity.kt | 21 ------------------- .../ehviewer/ui/login/CookieSignInScreen.kt | 12 ++++++----- .../hippo/ehviewer/ui/login/LoginActivity.kt | 7 ++++--- .../hippo/ehviewer/ui/login/SignInScreen.kt | 11 +++++----- .../com/hippo/ehviewer/ui/scene/BaseScene.kt | 20 ------------------ .../ehviewer/ui/scene/GalleryDetailScene.kt | 10 +++++---- 6 files changed, 23 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.kt index 7183290e4..a9d7576b3 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.kt @@ -34,11 +34,6 @@ import eu.kanade.tachiyomi.util.view.setSecureScreen import rikka.insets.WindowInsetsHelper import rikka.layoutinflater.view.LayoutInflaterFactory -enum class ScreenDimension(val screenDimensionType: Int) { - ScreenRotationLandscape(1), - ScreenRotationPortrait(2) -} - abstract class EhActivity : AppCompatActivity() { @StyleRes fun getThemeStyleRes(): Int { @@ -91,20 +86,4 @@ abstract class EhActivity : AppCompatActivity() { if (Settings.notificationRequired) return requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) } - - fun getScreenDimension(): ScreenDimension { - var dm = applicationContext?.resources?.displayMetrics - var screenWidth = dm?.widthPixels - var screenHeight = dm?.heightPixels - var screenDimensionStatus = ScreenDimension.ScreenRotationLandscape - - if (screenWidth != null) { - screenDimensionStatus = if (screenWidth > screenHeight!!) - ScreenDimension.ScreenRotationLandscape - else { - ScreenDimension.ScreenRotationPortrait - } - } - return screenDimensionStatus - } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt index 17a665d87..a66a703ad 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt @@ -29,6 +29,8 @@ import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.windowsizeclass.WindowSizeClass +import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -55,7 +57,6 @@ import com.hippo.ehviewer.client.EhCookieStore import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.ui.ScreenDimension import com.hippo.util.ExceptionUtils import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.withNonCancellableContext @@ -66,7 +67,7 @@ import okhttp3.Cookie import java.util.Locale @Composable -fun CookieSignInScene(currentScreenDimension: ScreenDimension) { +fun CookieSignInScene(windowSizeClass: WindowSizeClass) { val navController = LocalNavController.current val clipboardManager = LocalClipboardManager.current val focusManager = LocalFocusManager.current @@ -184,8 +185,8 @@ fun CookieSignInScene(currentScreenDimension: ScreenDimension) { } } - when (currentScreenDimension) { - ScreenDimension.ScreenRotationPortrait -> Box( + when (windowSizeClass.widthSizeClass) { + WindowWidthSizeClass.Compact, WindowWidthSizeClass.Medium -> Box( contentAlignment = Alignment.Center ) { Scaffold( @@ -316,7 +317,7 @@ fun CookieSignInScene(currentScreenDimension: ScreenDimension) { } } - ScreenDimension.ScreenRotationLandscape -> Box( + WindowWidthSizeClass.Expanded -> Box( contentAlignment = Alignment.Center ) { Scaffold( @@ -327,6 +328,7 @@ fun CookieSignInScene(currentScreenDimension: ScreenDimension) { Row( Modifier .padding(dimensionResource(id = R.dimen.keyline_margin)) + .padding(padding) .fillMaxSize() .verticalScroll(rememberScrollState()), verticalAlignment = Alignment.CenterVertically 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 6752d91bc..63bacc05b 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 @@ -2,6 +2,7 @@ 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 import androidx.compose.runtime.compositionLocalOf @@ -25,15 +26,15 @@ import kotlinx.coroutines.launch class LoginActivity : EhActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - var currentScreenDimension = getScreenDimension() setContent { + val windowSizeClass = calculateWindowSizeClass(this) Mdc3Theme { val navController = rememberNavController() CompositionLocalProvider(LocalNavController provides navController) { NavHost(navController = navController, startDestination = SIGN_IN_ROUTE_NAME) { composable(SIGN_IN_ROUTE_NAME) { - SignInScreen(currentScreenDimension) + SignInScreen(windowSizeClass) } composable(WEBVIEW_SIGN_IN_ROUTE_NAME) { @@ -41,7 +42,7 @@ class LoginActivity : EhActivity() { } composable(COOKIE_SIGN_IN_ROUTE_NAME) { - CookieSignInScene(currentScreenDimension) + CookieSignInScene(windowSizeClass) } composable(SELECT_SITE_ROUTE_NAME) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt index 0b7481a24..de48a1124 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt @@ -31,6 +31,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.windowsizeclass.WindowSizeClass +import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -60,7 +62,6 @@ import com.hippo.ehviewer.UrlOpener import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.ui.ScreenDimension import com.hippo.util.ExceptionUtils import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.withNonCancellableContext @@ -69,7 +70,7 @@ import kotlinx.coroutines.Job import rikka.core.util.ContextUtils.requireActivity @Composable -fun SignInScreen(currentScreenDimension: ScreenDimension) { +fun SignInScreen(windowSizeClass: WindowSizeClass) { val navController = LocalNavController.current val coroutineScope = rememberCoroutineScope() val focusManager = LocalFocusManager.current @@ -131,8 +132,8 @@ fun SignInScreen(currentScreenDimension: ScreenDimension) { - when (currentScreenDimension) { - ScreenDimension.ScreenRotationPortrait -> Box( + when (windowSizeClass.widthSizeClass) { + WindowWidthSizeClass.Compact, WindowWidthSizeClass.Medium -> Box( contentAlignment = Alignment.Center ) { Column( @@ -311,7 +312,7 @@ fun SignInScreen(currentScreenDimension: ScreenDimension) { } } - ScreenDimension.ScreenRotationLandscape -> Box( + WindowWidthSizeClass.Expanded -> Box( contentAlignment = Alignment.Center ) { Row( diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.kt index b6533cdf2..1a949cdc9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.kt @@ -35,7 +35,6 @@ import androidx.navigation.NavOptions import androidx.navigation.fragment.NavHostFragment import com.hippo.ehviewer.R import com.hippo.ehviewer.ui.MainActivity -import com.hippo.ehviewer.ui.ScreenDimension import rikka.core.res.resolveDrawable abstract class BaseScene : Fragment() { @@ -237,28 +236,9 @@ abstract class BaseScene : Fragment() { NavHostFragment.findNavController(this).navigate(id, args, options) } - fun getScreenDimension(): ScreenDimension { - - var dm = context?.resources?.displayMetrics - var screenWidth = dm?.widthPixels - var screenHeight = dm?.heightPixels - var screenDimensionStatus = ScreenDimension.ScreenRotationLandscape - - if (screenWidth != null) { - screenDimensionStatus = if (screenWidth > screenHeight!!) - ScreenDimension.ScreenRotationLandscape - else { - ScreenDimension.ScreenRotationPortrait - } - } - return screenDimensionStatus - } - companion object { const val LENGTH_SHORT = 0 const val LENGTH_LONG = 1 const val KEY_DRAWER_VIEW_STATE = "com.hippo.ehviewer.ui.scene.BaseScene:DRAWER_VIEW_STATE" } - - } \ No newline at end of file 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 2d87a411c..1aecd23fc 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 @@ -86,6 +86,8 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton 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.getValue import androidx.compose.runtime.mutableStateOf @@ -153,7 +155,6 @@ 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.MainActivity -import com.hippo.ehviewer.ui.ScreenDimension import com.hippo.ehviewer.ui.scene.GalleryListScene.Companion.toStartArgs import com.hippo.ehviewer.ui.widget.CrystalCard import com.hippo.ehviewer.ui.widget.EhAsyncPreview @@ -508,8 +509,9 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener { contentPadding: PaddingValues, modifier: Modifier ) { - when (getScreenDimension()) { - ScreenDimension.ScreenRotationPortrait -> LazyVerticalGrid( + val windowSizeClass = calculateWindowSizeClass(requireActivity()) + when (windowSizeClass.widthSizeClass) { + WindowWidthSizeClass.Medium, WindowWidthSizeClass.Compact -> LazyVerticalGrid( columns = GridCells.Adaptive(Settings.thumbSizeDp), contentPadding = contentPadding, modifier = modifier.padding(horizontal = dimensionResource(id = R.dimen.keyline_margin)) @@ -562,7 +564,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener { } } - ScreenDimension.ScreenRotationLandscape -> LazyVerticalGrid( + WindowWidthSizeClass.Expanded -> LazyVerticalGrid( columns = GridCells.Adaptive(Settings.thumbSizeDp), contentPadding = contentPadding, modifier = modifier.padding(horizontal = dimensionResource(id = R.dimen.keyline_margin))