compose: Move compact window checks to extension

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-09-11 20:55:39 +08:00
parent fc7ef5e345
commit 566cc8dfbd
9 changed files with 36 additions and 51 deletions

View File

@@ -12,15 +12,19 @@ import androidx.compose.ui.res.painterResource
import androidx.window.core.layout.WindowSizeClass
import com.aurora.store.R
/**
* Whether the device width is compact or not
*
*/
val WindowAdaptiveInfo.isWindowCompact: Boolean
get() = !windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND)
/**
* Returns navigation icon for adaptive screens such as extra pane
*/
val WindowAdaptiveInfo.adaptiveNavigationIcon: Painter
@Composable
get() = when {
windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
painterResource(R.drawable.ic_cancel)
}
else -> painterResource(R.drawable.ic_arrow_back)
isWindowCompact -> painterResource(R.drawable.ic_arrow_back)
else -> painterResource(R.drawable.ic_cancel)
}

View File

@@ -22,10 +22,10 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.window.core.layout.WindowSizeClass
import com.aurora.Constants.EXODUS_REPORT_URL
import com.aurora.extensions.adaptiveNavigationIcon
import com.aurora.extensions.browse
import com.aurora.extensions.isWindowCompact
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
import com.aurora.store.compose.composables.HeaderComposable
@@ -51,11 +51,8 @@ fun ExodusScreen(
val trackers by detailsExodusViewModel.trackers.collectAsStateWithLifecycle()
val topAppBarTitle = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
stringResource(R.string.details_privacy)
}
else -> app!!.displayName
windowAdaptiveInfo.isWindowCompact -> app!!.displayName
else -> stringResource(R.string.details_privacy)
}
ScreenContent(

View File

@@ -47,8 +47,8 @@ import androidx.compose.ui.unit.dp
import androidx.core.text.isDigitsOnly
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.window.core.layout.WindowSizeClass
import com.aurora.extensions.adaptiveNavigationIcon
import com.aurora.extensions.isWindowCompact
import com.aurora.extensions.toast
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
@@ -70,11 +70,8 @@ fun ManualDownloadScreen(
val app by viewModel.app.collectAsStateWithLifecycle()
val topAppBarTitle = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
stringResource(R.string.title_manual_download)
}
else -> app!!.displayName
windowAdaptiveInfo.isWindowCompact -> app!!.displayName
else -> stringResource(R.string.title_manual_download)
}
LaunchedEffect(key1 = Unit) {

View File

@@ -31,9 +31,9 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.window.core.layout.WindowSizeClass
import coil3.compose.LocalAsyncImagePreviewHandler
import com.aurora.extensions.adaptiveNavigationIcon
import com.aurora.extensions.isWindowCompact
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
import com.aurora.store.compose.composables.HeaderComposable
@@ -76,11 +76,8 @@ private fun ScreenContent(
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
) {
val topAppBarTitle = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
stringResource(R.string.details_more_about_app)
}
else -> app.displayName
windowAdaptiveInfo.isWindowCompact -> app.displayName
else -> stringResource(R.string.details_more_about_app)
}
Scaffold(

View File

@@ -25,8 +25,8 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.window.core.layout.WindowSizeClass
import com.aurora.extensions.adaptiveNavigationIcon
import com.aurora.extensions.isWindowCompact
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
import com.aurora.store.compose.composables.InfoComposable
@@ -50,11 +50,8 @@ fun PermissionScreen(
val permissionsInfo by detailsPermissionViewModel.permissionsInfo.collectAsStateWithLifecycle()
val topAppBarTitle = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
stringResource(R.string.details_permission)
}
else -> app!!.displayName
windowAdaptiveInfo.isWindowCompact -> app!!.displayName
else -> stringResource(R.string.details_permission)
}
ScreenContent(

View File

@@ -37,9 +37,9 @@ import androidx.paging.PagingData
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey
import androidx.window.core.layout.WindowSizeClass
import coil3.compose.LocalAsyncImagePreviewHandler
import com.aurora.extensions.adaptiveNavigationIcon
import com.aurora.extensions.isWindowCompact
import com.aurora.gplayapi.data.models.Review
import com.aurora.store.R
import com.aurora.store.compose.composables.ErrorComposable
@@ -67,11 +67,8 @@ fun ReviewScreen(
val reviews = detailsReviewViewModel.reviews.collectAsLazyPagingItems()
val topAppBarTitle = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
stringResource(R.string.details_ratings)
}
else -> app!!.displayName
windowAdaptiveInfo.isWindowCompact -> app!!.displayName
else -> stringResource(R.string.details_ratings)
}
ScreenContent(

View File

@@ -21,8 +21,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.window.core.layout.WindowSizeClass
import com.aurora.extensions.adaptiveNavigationIcon
import com.aurora.extensions.isWindowCompact
import com.aurora.gplayapi.data.models.Artwork
import com.aurora.store.R
import com.aurora.store.compose.composables.TopAppBarComposable
@@ -40,11 +40,8 @@ fun ScreenshotScreen(
val app by viewModel.app.collectAsStateWithLifecycle()
val topAppBarTitle = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
stringResource(R.string.details_more_about_app)
}
else -> app!!.displayName
windowAdaptiveInfo.isWindowCompact -> app!!.displayName
else -> stringResource(R.string.details_more_about_app)
}
ScreenContent(

View File

@@ -21,7 +21,7 @@ import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.window.core.layout.WindowSizeClass
import com.aurora.extensions.isWindowCompact
import com.aurora.store.R
/**
@@ -50,11 +50,8 @@ fun Actions(
horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.padding_medium))
) {
val buttonWidthModifier = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
Modifier.widthIn(min = dimensionResource(R.dimen.width_button))
}
else -> Modifier.weight(1F)
windowAdaptiveInfo.isWindowCompact -> Modifier.weight(1F)
else -> Modifier.widthIn(min = dimensionResource(R.dimen.width_button))
}
FilledTonalButton(

View File

@@ -30,7 +30,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.util.fastForEach
import androidx.window.core.layout.WindowSizeClass
import com.aurora.extensions.isWindowCompact
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Rating
import com.aurora.gplayapi.data.models.Review
@@ -65,11 +65,13 @@ fun RatingAndReviews(
}
val avgRating = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
String.format(Locale.getDefault(), "%.1f / 5.0", rating.average)
windowAdaptiveInfo.isWindowCompact -> {
String.format(Locale.getDefault(), "%.1f", rating.average)
}
else -> String.format(Locale.getDefault(), "%.1f", rating.average)
else -> {
String.format(Locale.getDefault(), "%.1f / 5.0", rating.average)
}
}
HeaderComposable(