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.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn 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 @Composable
fun SetupAppActions() { fun SetupAppActions() {
when (state) { when (state) {
@@ -365,15 +276,20 @@ private fun ScreenContentAppMainPane(
primaryActionDisplayName = primaryActionName, primaryActionDisplayName = primaryActionName,
secondaryActionDisplayName = stringResource(R.string.title_manual_download), secondaryActionDisplayName = stringResource(R.string.title_manual_download),
onPrimaryAction = onDownload, onPrimaryAction = onDownload,
onSecondaryAction = { onNavigateToScreen(Screen.DetailsManualDownload) } onSecondaryAction = { showExtraPane(Screen.DetailsManualDownload) }
) )
} }
} }
} }
@Composable
fun MainPane() {
Scaffold( Scaffold(
topBar = { topBar = {
TopAppBarComposable(onNavigateUp = onNavigateUp, actions = menuActions) TopAppBarComposable(
onNavigateUp = onNavigateUp,
actions = { if (shouldShowMenuOnMainPane) SetupMenu() }
)
} }
) { paddingValues -> ) { paddingValues ->
Column( Column(
@@ -388,7 +304,7 @@ private fun ScreenContentAppMainPane(
app = app, app = app,
inProgress = state.inProgress(), inProgress = state.inProgress(),
progress = state.progress(), progress = state.progress(),
onNavigateToDetailsDevProfile = { onNavigateToScreen(Screen.DevProfile(it)) }, onNavigateToDetailsDevProfile = { showExtraPane(Screen.DevProfile(it)) },
isUpdatable = state is AppState.Updatable isUpdatable = state is AppState.Updatable
) )
@@ -399,18 +315,18 @@ private fun ScreenContentAppMainPane(
HeaderComposable( HeaderComposable(
title = stringResource(R.string.details_more_about_app), title = stringResource(R.string.details_more_about_app),
subtitle = app.shortDescription, subtitle = app.shortDescription,
onClick = { onNavigateToScreen(Screen.DetailsMore) } onClick = { showExtraPane(Screen.DetailsMore) }
) )
AppScreenshots( AppScreenshots(
screenshots = app.screenshots, screenshots = app.screenshots,
onNavigateToScreenshot = { onNavigateToScreen(Screen.DetailsScreenshot(it)) } onNavigateToScreenshot = { showExtraPane(Screen.DetailsScreenshot(it)) }
) )
AppRatingAndReviews( AppRatingAndReviews(
rating = app.rating, rating = app.rating,
featuredReviews = featuredReviews, featuredReviews = featuredReviews,
onNavigateToDetailsReview = { onNavigateToScreen(Screen.DetailsReview) } onNavigateToDetailsReview = { showExtraPane(Screen.DetailsReview) }
) )
if (!isAnonymous && app.testingProgram?.isAvailable == true) { if (!isAnonymous && app.testingProgram?.isAvailable == true) {
@@ -433,7 +349,7 @@ private fun ScreenContentAppMainPane(
stringResource(R.string.details_no_permission) stringResource(R.string.details_no_permission)
}, },
onClick = if (app.permissions.isNotEmpty()) { onClick = if (app.permissions.isNotEmpty()) {
{ onNavigateToScreen(Screen.DetailsPermission) } { showExtraPane(Screen.DetailsPermission) }
} else { } else {
null null
} }
@@ -449,7 +365,7 @@ private fun ScreenContentAppMainPane(
AppPrivacy( AppPrivacy(
report = exodusReport, report = exodusReport,
onNavigateToDetailsExodus = if (!exodusReport?.trackers.isNullOrEmpty()) { onNavigateToDetailsExodus = if (!exodusReport?.trackers.isNullOrEmpty()) {
{ onNavigateToScreen(Screen.DetailsExodus) } { showExtraPane(Screen.DetailsExodus) }
} else { } else {
null null
} }
@@ -464,17 +380,12 @@ private fun ScreenContentAppMainPane(
} }
} }
/**
* Composable to display similar and related app suggestions
*/
@Composable @Composable
private fun ScreenContentAppSupportingPane( fun SupportingPane() {
menuActions: @Composable (RowScope.() -> Unit) = {},
suggestions: List<App> = emptyList(),
onNavigateToAppDetails: (packageName: String) -> Unit = {}
) {
Scaffold( Scaffold(
topBar = { TopAppBarComposable(actions = menuActions) } topBar = {
TopAppBarComposable(actions = { if (!shouldShowMenuOnMainPane) SetupMenu() })
}
) { paddingValues -> ) { paddingValues ->
Column( Column(
modifier = Modifier modifier = Modifier
@@ -507,6 +418,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 @PreviewScreenSizes
@Composable @Composable
@OptIn(ExperimentalCoilApi::class) @OptIn(ExperimentalCoilApi::class)