From 566cc8dfbd341946e8c24b78ae35d6c7af250fe0 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 11 Sep 2025 20:55:39 +0800 Subject: [PATCH] compose: Move compact window checks to extension Signed-off-by: Aayush Gupta --- .../com/aurora/extensions/WindowAdaptiveInfo.kt | 14 +++++++++----- .../store/compose/ui/details/ExodusScreen.kt | 9 +++------ .../compose/ui/details/ManualDownloadScreen.kt | 9 +++------ .../aurora/store/compose/ui/details/MoreScreen.kt | 9 +++------ .../store/compose/ui/details/PermissionScreen.kt | 9 +++------ .../store/compose/ui/details/ReviewScreen.kt | 9 +++------ .../store/compose/ui/details/ScreenshotScreen.kt | 9 +++------ .../store/compose/ui/details/components/Actions.kt | 9 +++------ .../ui/details/components/RatingAndReviews.kt | 10 ++++++---- 9 files changed, 36 insertions(+), 51 deletions(-) diff --git a/app/src/main/java/com/aurora/extensions/WindowAdaptiveInfo.kt b/app/src/main/java/com/aurora/extensions/WindowAdaptiveInfo.kt index 13fb4835a..43b715beb 100644 --- a/app/src/main/java/com/aurora/extensions/WindowAdaptiveInfo.kt +++ b/app/src/main/java/com/aurora/extensions/WindowAdaptiveInfo.kt @@ -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) } diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/ExodusScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/ExodusScreen.kt index 8a5ab0fd7..54aefe312 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/ExodusScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/ExodusScreen.kt @@ -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( diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt index 66f21dd75..4f30dafdb 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt @@ -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) { diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/MoreScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/MoreScreen.kt index b37112637..d109792cc 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/MoreScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/MoreScreen.kt @@ -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( diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/PermissionScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/PermissionScreen.kt index 43f02e567..b1aa7ff38 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/PermissionScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/PermissionScreen.kt @@ -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( diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/ReviewScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/ReviewScreen.kt index 5418e7cbd..cb2f5b7f5 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/ReviewScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/ReviewScreen.kt @@ -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( diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/ScreenshotScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/ScreenshotScreen.kt index 8c470913c..9ceac9192 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/ScreenshotScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/ScreenshotScreen.kt @@ -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( diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/components/Actions.kt b/app/src/main/java/com/aurora/store/compose/ui/details/components/Actions.kt index e6be739ba..d567636af 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/components/Actions.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/components/Actions.kt @@ -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( diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/components/RatingAndReviews.kt b/app/src/main/java/com/aurora/store/compose/ui/details/components/RatingAndReviews.kt index ca3437705..e39776a52 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/components/RatingAndReviews.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/components/RatingAndReviews.kt @@ -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(