Skip to content

Commit

Permalink
📸 Code for generating screenshots
Browse files Browse the repository at this point in the history
  • Loading branch information
lorenzovngl committed Dec 5, 2023
1 parent f2c70d3 commit 6ae9b9f
Show file tree
Hide file tree
Showing 26 changed files with 307 additions and 433 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@ import com.lorenzovainigli.foodexpirationdates.view.composable.screen.SettingsSc
fun Navigation(
activity: MainActivity? = null,
navController: NavHostController,
startDestination: String = Screen.MainScreen.route,
showSnackbar: MutableState<Boolean>
) {
NavHost(
modifier = Modifier.fillMaxSize(),
navController = navController,
startDestination = Screen.MainScreen.route
startDestination = startDestination
) {
composable(route = Screen.MainScreen.route) {
MainScreen(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.lorenzovainigli.foodexpirationdates.R
Expand All @@ -27,7 +26,7 @@ import com.lorenzovainigli.foodexpirationdates.view.preview.LanguagePreviews
@Composable
fun MyBottomAppBar(
navController: NavHostController,
currentBackStackEntry: NavBackStackEntry?
currentDestination: String?
){
val navigationItems = listOf(
NavigationItem(
Expand All @@ -50,7 +49,7 @@ fun MyBottomAppBar(
)
)
NavigationBar {
var selectedItem = when (currentBackStackEntry?.destination?.route) {
var selectedItem = when (currentDestination) {
Screen.AboutScreen.route -> 0
Screen.SettingsScreen.route -> 2
else -> 1
Expand Down Expand Up @@ -91,7 +90,7 @@ fun MyBottomAppBarPreview(){
Surface {
MyBottomAppBar(
navController = rememberNavController(),
currentBackStackEntry = null
currentDestination = Screen.AboutScreen.route
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ data class NavigationItem(
fun MyScaffold(
activity: MainActivity? = null,
navController: NavHostController,
navDestination: String? = null,
showSnackbar: MutableState<Boolean>,
content: @Composable () -> Unit
) {
Expand Down Expand Up @@ -91,9 +92,10 @@ fun MyScaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
snackbarHost = { SnackbarHost(snackbarHostState) },
topBar = {
val destination = navDestination ?: currentBackStackEntry?.destination?.route
MyTopAppBar(
activity = activity,
title = when (currentBackStackEntry?.destination?.route) {
title = when (destination) {
Screen.AboutScreen.route -> stringResource(id = R.string.about_this_app)
Screen.InsertScreen.route -> stringResource(id = R.string.insert)
Screen.SettingsScreen.route -> stringResource(id = R.string.settings)
Expand All @@ -120,7 +122,7 @@ fun MyScaffold(
bottomBar = {
MyBottomAppBar(
navController = navController,
currentBackStackEntry = currentBackStackEntry
currentDestination = navDestination ?: currentBackStackEntry?.destination?.route
)
}
) { padding ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ import androidx.compose.ui.tooling.preview.PreviewDynamicColors
import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.navigation.compose.rememberNavController
import com.lorenzovainigli.foodexpirationdates.ui.theme.FoodExpirationDatesTheme
import com.lorenzovainigli.foodexpirationdates.view.Navigation
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.InfoScreen
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.MainScreen
import com.lorenzovainigli.foodexpirationdates.view.composable.MyScaffold
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.InsertScreen
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.Screen
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.SettingsScreen

class DefaultPreviews {
Expand All @@ -28,7 +30,7 @@ class DefaultPreviews {
mutableStateOf(false)
}
MyScaffold(navController = navController, showSnackbar = showSnackbar) {
MainScreen(navController = navController)
Navigation(navController = navController, showSnackbar = showSnackbar, startDestination = Screen.AboutScreen.route)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package com.lorenzovainigli.foodexpirationdates.view.preview

import android.os.Build
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.absoluteOffset
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.scale
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.compose.rememberNavController
import com.lorenzovainigli.foodexpirationdates.R
import com.lorenzovainigli.foodexpirationdates.ui.theme.FoodExpirationDatesTheme
import com.lorenzovainigli.foodexpirationdates.view.Navigation
import com.lorenzovainigli.foodexpirationdates.view.composable.MyScaffold
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.Screen

@Composable
fun PlayStoreScreenshot(
text: String,
content: @Composable () -> Unit
){
FoodExpirationDatesTheme(
darkTheme = false,
dynamicColor = false
) {
Box(
modifier = Modifier
.fillMaxSize()
.background(
brush = Brush.verticalGradient(
colors = listOf(
MaterialTheme.colorScheme.primaryContainer,
MaterialTheme.colorScheme.surface
)
)
)
) {
Column(
modifier = Modifier
.fillMaxWidth()
.height(100.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
modifier = Modifier.padding(6.dp),
text = text,
style = MaterialTheme.typography.headlineLarge,
fontWeight = FontWeight(600),
color = MaterialTheme.colorScheme.onPrimaryContainer,
textAlign = TextAlign.Center
)
}
Image(
modifier = Modifier
.padding(top = 100.dp, start = 6.dp, end = 6.dp, bottom = 6.dp)
.align(
Alignment.Center
),
painter = painterResource(id = R.drawable.pixel_3a),
contentDescription = null
)
Box(
modifier = Modifier
.height(810.dp)
.scale(.8f)
.absoluteOffset(x = (-3).dp, y = 90.dp)
.clip(RoundedCornerShape(18.dp)),
) {
content()
}
}
}
}

@RequiresApi(Build.VERSION_CODES.O)
@Preview(showBackground = true)
@Composable
fun PlayStoreScreenshotPreview() {
val context = LocalContext.current
PlayStoreScreenshot(
text = stringResource(id = R.string.app_name)
) {
FoodExpirationDatesTheme {
val navController = rememberNavController()
val showSnackbar = mutableStateOf(false)
MyScaffold(navController = navController, showSnackbar = showSnackbar) {
Navigation(
navController = navController ,
showSnackbar = showSnackbar,
startDestination = Screen.AboutScreen.route
)
}
}
}
}
8 changes: 8 additions & 0 deletions app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,12 @@
<item>Funghi</item>
<item>Pomodori</item>
</string-array>
<string-array name="screenshot_titles">
<item>I tuoi alimenti ordinati per data di scadenza</item>
<item>Inserimento semplice</item>
<item>Personalizza comportamento e aspetto</item>
<item>Open source</item>
<item>Tema scuro</item>
<item>Colori dinamici</item>
</string-array>
</resources>
8 changes: 8 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,12 @@
<item>Mushrooms</item>
<item>Tomatoes</item>
</string-array>
<string-array name="screenshot_titles">
<item>Your groceries sorted by expiration date</item>
<item>Easy insertion</item>
<item>Customize behavior and appearance</item>
<item>Open source</item>
<item>Dark theme</item>
<item>Dynamic colors</item>
</string-array>
</resources>
113 changes: 71 additions & 42 deletions app/src/test/java/screenshot/Screenshot.kt
Original file line number Diff line number Diff line change
@@ -1,79 +1,108 @@
package screenshot

import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.res.stringArrayResource
import androidx.navigation.compose.rememberNavController
import app.cash.paparazzi.Paparazzi
import com.lorenzovainigli.foodexpirationdates.R
import com.lorenzovainigli.foodexpirationdates.ui.theme.FoodExpirationDatesTheme
import com.lorenzovainigli.foodexpirationdates.view.composable.MyScaffold
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.InfoScreen
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.InsertScreen
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.MainScreen
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.Screen
import com.lorenzovainigli.foodexpirationdates.view.composable.screen.SettingsScreen
import com.lorenzovainigli.foodexpirationdates.view.preview.PlayStoreScreenshot

open class Screenshot {

fun screen1MainActivity(paparazzi: Paparazzi) {
paparazzi.snapshot {
@Composable
fun Screenshot(
header: String,
darkMode: Boolean = false,
dynamicColors: Boolean = false,
navDestination: String
) {
PlayStoreScreenshot(
text = header
) {
FoodExpirationDatesTheme(
dynamicColor = false
darkTheme = darkMode,
dynamicColor = dynamicColors
) {
val navController = rememberNavController()
val showSnackbar = remember {
mutableStateOf(false)
}
MyScaffold(navController = navController, showSnackbar = showSnackbar) {
MainScreen(navController = navController)
val showSnackbar = mutableStateOf(false)
MyScaffold(
navController = navController,
showSnackbar = showSnackbar,
navDestination = navDestination
) {
// Navigation composable not work here
when (navDestination){
Screen.AboutScreen.route -> InfoScreen()
Screen.InsertScreen.route -> InsertScreen(navController = navController)
Screen.SettingsScreen.route -> SettingsScreen()
else -> MainScreen(navController = navController)
}
}
}
}
}

fun screen1MainActivity(paparazzi: Paparazzi) {
paparazzi.snapshot {
Screenshot(
header = stringArrayResource(id = R.array.screenshot_titles)[0],
navDestination = Screen.MainScreen.route
)
}
}

fun screen2InsertActivity(paparazzi: Paparazzi) {
paparazzi.snapshot {
FoodExpirationDatesTheme(
dynamicColor = false
) {
val navController = rememberNavController()
val showSnackbar = remember {
mutableStateOf(false)
}
MyScaffold(navController = navController, showSnackbar = showSnackbar) {
InsertScreen(navController = navController)
}
}
Screenshot(
header = stringArrayResource(id = R.array.screenshot_titles)[1],
navDestination = Screen.InsertScreen.route
)
}
}

fun screen3SettingsActivity(paparazzi: Paparazzi) {
paparazzi.snapshot {
FoodExpirationDatesTheme(
dynamicColor = false
) {
val navController = rememberNavController()
val showSnackbar = remember {
mutableStateOf(false)
}
MyScaffold(navController = navController, showSnackbar = showSnackbar) {
SettingsScreen()
}
}
Screenshot(
header = stringArrayResource(id = R.array.screenshot_titles)[2],
navDestination = Screen.SettingsScreen.route
)
}
}

fun screen4InfoActivity(paparazzi: Paparazzi) {
paparazzi.snapshot {
FoodExpirationDatesTheme(
dynamicColor = false
) {
val navController = rememberNavController()
val showSnackbar = remember {
mutableStateOf(false)
}
MyScaffold(navController = navController, showSnackbar = showSnackbar) {
InfoScreen()
}
}
Screenshot(
header = stringArrayResource(id = R.array.screenshot_titles)[3],
navDestination = Screen.AboutScreen.route
)
}
}

fun screen5DarkMode(paparazzi: Paparazzi) {
paparazzi.snapshot {
Screenshot(
header = stringArrayResource(id = R.array.screenshot_titles)[4],
darkMode = true,
navDestination = Screen.MainScreen.route
)
}
}

fun screen6DynamicColors(paparazzi: Paparazzi) {
paparazzi.snapshot {
Screenshot(
header = stringArrayResource(id = R.array.screenshot_titles)[5],
dynamicColors = true,
navDestination = Screen.MainScreen.route
)
}
}

Expand Down
Loading

0 comments on commit 6ae9b9f

Please sign in to comment.