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 androidx.window.core.layout.WindowSizeClass
import com.aurora.store.R 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 * Returns navigation icon for adaptive screens such as extra pane
*/ */
val WindowAdaptiveInfo.adaptiveNavigationIcon: Painter val WindowAdaptiveInfo.adaptiveNavigationIcon: Painter
@Composable @Composable
get() = when { get() = when {
windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> { isWindowCompact -> painterResource(R.drawable.ic_arrow_back)
painterResource(R.drawable.ic_cancel) else -> painterResource(R.drawable.ic_cancel)
}
else -> painterResource(R.drawable.ic_arrow_back)
} }

View File

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

View File

@@ -47,8 +47,8 @@ import androidx.compose.ui.unit.dp
import androidx.core.text.isDigitsOnly import androidx.core.text.isDigitsOnly
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.window.core.layout.WindowSizeClass
import com.aurora.extensions.adaptiveNavigationIcon import com.aurora.extensions.adaptiveNavigationIcon
import com.aurora.extensions.isWindowCompact
import com.aurora.extensions.toast import com.aurora.extensions.toast
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.store.R import com.aurora.store.R
@@ -70,11 +70,8 @@ fun ManualDownloadScreen(
val app by viewModel.app.collectAsStateWithLifecycle() val app by viewModel.app.collectAsStateWithLifecycle()
val topAppBarTitle = when { val topAppBarTitle = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> { windowAdaptiveInfo.isWindowCompact -> app!!.displayName
stringResource(R.string.title_manual_download) else -> stringResource(R.string.title_manual_download)
}
else -> app!!.displayName
} }
LaunchedEffect(key1 = Unit) { 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.compose.ui.tooling.preview.PreviewParameter
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.window.core.layout.WindowSizeClass
import coil3.compose.LocalAsyncImagePreviewHandler import coil3.compose.LocalAsyncImagePreviewHandler
import com.aurora.extensions.adaptiveNavigationIcon import com.aurora.extensions.adaptiveNavigationIcon
import com.aurora.extensions.isWindowCompact
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.compose.composables.HeaderComposable import com.aurora.store.compose.composables.HeaderComposable
@@ -76,11 +76,8 @@ private fun ScreenContent(
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
) { ) {
val topAppBarTitle = when { val topAppBarTitle = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> { windowAdaptiveInfo.isWindowCompact -> app.displayName
stringResource(R.string.details_more_about_app) else -> stringResource(R.string.details_more_about_app)
}
else -> app.displayName
} }
Scaffold( Scaffold(

View File

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

View File

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

View File

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

View File

@@ -21,7 +21,7 @@ import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.window.core.layout.WindowSizeClass import com.aurora.extensions.isWindowCompact
import com.aurora.store.R import com.aurora.store.R
/** /**
@@ -50,11 +50,8 @@ fun Actions(
horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.padding_medium)) horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.padding_medium))
) { ) {
val buttonWidthModifier = when { val buttonWidthModifier = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> { windowAdaptiveInfo.isWindowCompact -> Modifier.weight(1F)
Modifier.widthIn(min = dimensionResource(R.dimen.width_button)) else -> Modifier.widthIn(min = dimensionResource(R.dimen.width_button))
}
else -> Modifier.weight(1F)
} }
FilledTonalButton( 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.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.util.fastForEach 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.App
import com.aurora.gplayapi.data.models.Rating import com.aurora.gplayapi.data.models.Rating
import com.aurora.gplayapi.data.models.Review import com.aurora.gplayapi.data.models.Review
@@ -65,11 +65,13 @@ fun RatingAndReviews(
} }
val avgRating = when { val avgRating = when {
windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) -> { windowAdaptiveInfo.isWindowCompact -> {
String.format(Locale.getDefault(), "%.1f / 5.0", rating.average) 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( HeaderComposable(