Remove the external config method and use the built-in Compose API.

Add some documentation.
This commit is contained in:
KotlinGeekDev
2024-08-17 17:03:07 +01:00
parent 23da02f932
commit 26a12f2dbe
2 changed files with 14 additions and 15 deletions
@@ -45,12 +45,10 @@ import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@@ -129,8 +127,7 @@ fun ZoomableContentView(
val activity = LocalView.current.context.getActivity() val activity = LocalView.current.context.getActivity()
val orientation by snapshotFlow { DeviceUtils.getDeviceOrientation() } val orientation = LocalConfiguration.current.orientation
.collectAsState(initial = LocalConfiguration.current.orientation)
val currentWindowSize = currentWindowAdaptiveInfo().windowSizeClass val currentWindowSize = currentWindowAdaptiveInfo().windowSizeClass
val detectedWindowSize = val detectedWindowSize =
@@ -23,7 +23,6 @@ package com.vitorpamplona.amethyst.ui.components.util
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.content.res.Resources
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.window.core.layout.WindowHeightSizeClass import androidx.window.core.layout.WindowHeightSizeClass
@@ -31,18 +30,11 @@ import androidx.window.core.layout.WindowSizeClass
import androidx.window.core.layout.WindowWidthSizeClass import androidx.window.core.layout.WindowWidthSizeClass
object DeviceUtils { object DeviceUtils {
fun getDeviceOrientation(): Int {
val config = Resources.getSystem().configuration
return config.orientation
}
/** /**
* Alternative for determining if the device is * Tries to determine if the device is
* in landscape mode. * in landscape mode, by using the [android.util.DisplayMetrics] API.
* The [getDeviceOrientation] method could be used as well
* to achieve the same purpose.
* Credits: Newpipe devs
* *
* Credits: NewPipe devs
*/ */
fun isLandscapeMetric(context: Context): Boolean = context.resources.displayMetrics.heightPixels < context.resources.displayMetrics.widthPixels fun isLandscapeMetric(context: Context): Boolean = context.resources.displayMetrics.heightPixels < context.resources.displayMetrics.widthPixels
@@ -59,6 +51,16 @@ object DeviceUtils {
currentActivity.requestedOrientation = newOrientation currentActivity.requestedOrientation = newOrientation
} }
/**
* This method looks at the window in which the app resides,
* and determines if it is large, while making sure not to be affected
* by configuration changes(such as screen rotation),
* as the device display metrics can be affected as well.
*
* It could be used as an approximation of the type of device(as is the case here),
* though one ought to be careful about multi-window situations.
*/
@Composable @Composable
fun windowIsLarge( fun windowIsLarge(
isInLandscapeMode: Boolean, isInLandscapeMode: Boolean,