compose: AppDetailsScreen: Merge ScreenContentApp logic into one function

Makes paramater hell a bit easier to manage

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-08-13 14:10:06 +08:00
parent e792c57943
commit 458b984a06

View File

@@ -9,7 +9,6 @@ import android.content.ActivityNotFoundException
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
@@ -236,94 +235,6 @@ private fun ScreenContentApp(
}
}
NavigableSupportingPaneScaffold(
navigator = scaffoldNavigator,
mainPane = {
AnimatedPane {
ScreenContentAppMainPane(
app = app,
featuredReviews = featuredReviews,
state = state,
isAnonymous = isAnonymous,
plexusScores = plexusScores,
dataSafetyReport = dataSafetyReport,
exodusReport = exodusReport,
onNavigateUp = onNavigateUp,
onNavigateToScreen = { screen -> showExtraPane(screen) },
onDownload = onDownload,
onCancelDownload = onCancelDownload,
onUninstall = onUninstall,
onOpen = onOpen,
onTestingSubscriptionChange = onTestingSubscriptionChange,
menuActions = { if (shouldShowMenuOnMainPane) SetupMenu() }
)
}
},
supportingPane = {
AnimatedPane {
ScreenContentAppSupportingPane(
suggestions = suggestions,
onNavigateToAppDetails = onNavigateToAppDetails,
menuActions = { if (!shouldShowMenuOnMainPane) SetupMenu() }
)
}
},
extraPane = {
scaffoldNavigator.currentDestination?.contentKey?.let { screen ->
AnimatedPane {
when (screen) {
is Screen.DetailsReview -> DetailsReviewScreen(onNavigateUp = ::showMainPane)
is Screen.DetailsExodus -> DetailsExodusScreen(onNavigateUp = ::showMainPane)
is Screen.DetailsMore -> DetailsMoreScreen(
onNavigateUp = ::showMainPane,
onNavigateToAppDetails = onNavigateToAppDetails
)
is Screen.DetailsPermission -> DetailsPermissionScreen(
onNavigateUp = ::showMainPane
)
is Screen.DetailsScreenshot -> DetailsScreenshotScreen(
index = screen.index,
onNavigateUp = ::showMainPane
)
is Screen.DetailsManualDownload -> DetailsManualDownloadScreen(
onNavigateUp = ::showMainPane
)
is Screen.DevProfile -> DevProfileScreen(
publisherId = app.developerName,
onNavigateUp = ::showMainPane,
onNavigateToAppDetails = { onNavigateToAppDetails(it) }
)
else -> {}
}
}
}
}
)
}
/**
* Composable to display app details
*/
@Composable
private fun ScreenContentAppMainPane(
app: App,
featuredReviews: List<Review> = emptyList(),
state: AppState = AppState.Unavailable,
isAnonymous: Boolean,
plexusScores: Scores?,
dataSafetyReport: DataSafetyReport?,
exodusReport: Report?,
onNavigateUp: () -> Unit,
onNavigateToScreen: (screen: Screen) -> Unit,
onDownload: () -> Unit,
onCancelDownload: () -> Unit,
onUninstall: () -> Unit,
onOpen: () -> Unit,
onTestingSubscriptionChange: (subscribe: Boolean) -> Unit,
menuActions: @Composable (RowScope.() -> Unit) = {}
) {
@Composable
fun SetupAppActions() {
when (state) {
@@ -365,15 +276,20 @@ private fun ScreenContentAppMainPane(
primaryActionDisplayName = primaryActionName,
secondaryActionDisplayName = stringResource(R.string.title_manual_download),
onPrimaryAction = onDownload,
onSecondaryAction = { onNavigateToScreen(Screen.DetailsManualDownload) }
onSecondaryAction = { showExtraPane(Screen.DetailsManualDownload) }
)
}
}
}
@Composable
fun MainPane() {
Scaffold(
topBar = {
TopAppBarComposable(onNavigateUp = onNavigateUp, actions = menuActions)
TopAppBarComposable(
onNavigateUp = onNavigateUp,
actions = { if (shouldShowMenuOnMainPane) SetupMenu() }
)
}
) { paddingValues ->
Column(
@@ -388,7 +304,7 @@ private fun ScreenContentAppMainPane(
app = app,
inProgress = state.inProgress(),
progress = state.progress(),
onNavigateToDetailsDevProfile = { onNavigateToScreen(Screen.DevProfile(it)) },
onNavigateToDetailsDevProfile = { showExtraPane(Screen.DevProfile(it)) },
isUpdatable = state is AppState.Updatable
)
@@ -399,18 +315,18 @@ private fun ScreenContentAppMainPane(
HeaderComposable(
title = stringResource(R.string.details_more_about_app),
subtitle = app.shortDescription,
onClick = { onNavigateToScreen(Screen.DetailsMore) }
onClick = { showExtraPane(Screen.DetailsMore) }
)
AppScreenshots(
screenshots = app.screenshots,
onNavigateToScreenshot = { onNavigateToScreen(Screen.DetailsScreenshot(it)) }
onNavigateToScreenshot = { showExtraPane(Screen.DetailsScreenshot(it)) }
)
AppRatingAndReviews(
rating = app.rating,
featuredReviews = featuredReviews,
onNavigateToDetailsReview = { onNavigateToScreen(Screen.DetailsReview) }
onNavigateToDetailsReview = { showExtraPane(Screen.DetailsReview) }
)
if (!isAnonymous && app.testingProgram?.isAvailable == true) {
@@ -433,7 +349,7 @@ private fun ScreenContentAppMainPane(
stringResource(R.string.details_no_permission)
},
onClick = if (app.permissions.isNotEmpty()) {
{ onNavigateToScreen(Screen.DetailsPermission) }
{ showExtraPane(Screen.DetailsPermission) }
} else {
null
}
@@ -449,7 +365,7 @@ private fun ScreenContentAppMainPane(
AppPrivacy(
report = exodusReport,
onNavigateToDetailsExodus = if (!exodusReport?.trackers.isNullOrEmpty()) {
{ onNavigateToScreen(Screen.DetailsExodus) }
{ showExtraPane(Screen.DetailsExodus) }
} else {
null
}
@@ -462,19 +378,14 @@ private fun ScreenContentAppMainPane(
)
}
}
}
}
/**
* Composable to display similar and related app suggestions
*/
@Composable
private fun ScreenContentAppSupportingPane(
menuActions: @Composable (RowScope.() -> Unit) = {},
suggestions: List<App> = emptyList(),
onNavigateToAppDetails: (packageName: String) -> Unit = {}
) {
@Composable
fun SupportingPane() {
Scaffold(
topBar = { TopAppBarComposable(actions = menuActions) }
topBar = {
TopAppBarComposable(actions = { if (!shouldShowMenuOnMainPane) SetupMenu() })
}
) { paddingValues ->
Column(
modifier = Modifier
@@ -505,6 +416,44 @@ private fun ScreenContentAppSupportingPane(
}
}
}
}
NavigableSupportingPaneScaffold(
navigator = scaffoldNavigator,
mainPane = { AnimatedPane { MainPane() } },
supportingPane = { AnimatedPane { SupportingPane() } },
extraPane = {
scaffoldNavigator.currentDestination?.contentKey?.let { screen ->
AnimatedPane {
when (screen) {
is Screen.DetailsReview -> DetailsReviewScreen(onNavigateUp = ::showMainPane)
is Screen.DetailsExodus -> DetailsExodusScreen(onNavigateUp = ::showMainPane)
is Screen.DetailsMore -> DetailsMoreScreen(
onNavigateUp = ::showMainPane,
onNavigateToAppDetails = onNavigateToAppDetails
)
is Screen.DetailsPermission -> DetailsPermissionScreen(
onNavigateUp = ::showMainPane
)
is Screen.DetailsScreenshot -> DetailsScreenshotScreen(
index = screen.index,
onNavigateUp = ::showMainPane
)
is Screen.DetailsManualDownload -> DetailsManualDownloadScreen(
onNavigateUp = ::showMainPane
)
is Screen.DevProfile -> DevProfileScreen(
publisherId = app.developerName,
onNavigateUp = ::showMainPane,
onNavigateToAppDetails = { onNavigateToAppDetails(it) }
)
else -> {}
}
}
}
}
)
}
@PreviewScreenSizes