diff --git a/.gitignore b/.gitignore index 64cd9da..f9db208 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ local.properties *.code-workspace /app/release/* sample-database.zip +todo.md +thomas-sample-img diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c00ae83 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,20 @@ +# Changelog + +## [1.1.0] - 2023-03-15 + +### New features + +* Added feature for image import (only via copy) +* New Screenshots of updated UI with new sample pictures + +## [1.0.0] - 2023-02-20 + +Initial release including: + +* Implementation of base application in Kotlin and UI in Jetpack Compose: + * Request for folder permission + * CRUD for capture image, happiness, diary + * Flashbacks, diary view, calendar view and streak-count +* Room database storage and data export to JSON +* Dark- / light theme aligned with system design +* App Logo v1 diff --git a/README.md b/README.md index 1dff552..1a065c9 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,16 @@ +

+ # OneShot -Logo +

**Remember the happy days!** +
+ OneShot is made to remind you of the special moments. Because every day has at least one. And that's what counts in life! So make it your habit and remember the happy days! ## Features @@ -14,18 +21,20 @@ It stores your photos in a local folder and your diary within the app. Import an
-preview 1 -preview 2 -preview 3 +preview 1 +preview 2 +preview 3
-preview 1 -preview 2 -preview 3 +preview 1 +preview 2 +preview 3

+Thank's to [@Cynog](https://github.com/Cynog) for providing the beautiful images in the screenshots! + ## Privacy Your data is yours! diff --git a/app/build.gradle b/app/build.gradle index 3ef2b86..2f651f5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "de.ptrlx.oneshot" minSdk 29 targetSdk 32 - versionCode 1 - versionName "1.0" + versionCode 110 + versionName '1.1.0' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/domain/util/DiaryFileManager.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/domain/util/DiaryFileManager.kt index bf309f6..a606917 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/domain/util/DiaryFileManager.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/domain/util/DiaryFileManager.kt @@ -2,19 +2,15 @@ package de.ptrlx.oneshot.feature_diary.domain.util import android.content.Context import android.net.Uri -import android.util.Log +import android.os.FileUtils import androidx.documentfile.provider.DocumentFile import de.ptrlx.oneshot.feature_diary.domain.model.DiaryEntry -import kotlinx.serialization.Serializable import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream -import kotlinx.serialization.json.internal.readJson -import okio.use -class DiaryFileManager(baseLocation: Uri, context: Context) { - val baseLocation = baseLocation - val context = context + +class DiaryFileManager(val baseLocation: Uri, val context: Context) { private val baseFolder: DocumentFile? = DocumentFile.fromTreeUri(context, baseLocation) private var diaryEntryFileRepository = HashMap() private val baseLocationDocumentPath = baseLocation.encodedPath.toString().substring(6) @@ -56,7 +52,7 @@ class DiaryFileManager(baseLocation: Uri, context: Context) { /** * Create a new dummy file before launching camara activity. * - * @param filename + * @param filename filename of new dummy * @return the URI of the dummy file or null if file could not be created */ fun createNewImageDummy(filename: String): Uri? { @@ -64,6 +60,39 @@ class DiaryFileManager(baseLocation: Uri, context: Context) { return file?.uri } + /** + * Copy an image to baseFolder. + * + * @param srcUri Source Uri of image + * @param filename filename of new image + */ + fun copyImage(srcUri: Uri, filename: String): Uri? { + val file: DocumentFile? = baseFolder?.createFile("image/jpg", filename) + return file?.let { df -> + val inStream = context.contentResolver.openInputStream(srcUri) + inStream?.let { + val uri = context.contentResolver.openOutputStream(df.uri)?.let { outStream -> + FileUtils.copy( + inStream, + outStream + ) + + outStream.flush() + outStream.close() + + df.uri + } ?: run { + deleteImage(filename) + null + } + + inStream.close() + uri + } + } + } + + /** * Delete an image from baseFolder. * @@ -77,7 +106,7 @@ class DiaryFileManager(baseLocation: Uri, context: Context) { * Write a JSON export to base location * * @param filename - * @param export JSON String of export + * @param entries list of diary entries to export * @return success of write */ fun writeJSONExport(filename: String, entries: List): Boolean { diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/DiaryEvent.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/DiaryEvent.kt index 389b01e..a28fcbc 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/DiaryEvent.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/DiaryEvent.kt @@ -1,7 +1,6 @@ package de.ptrlx.oneshot.feature_diary.presentation.diary import android.app.Activity -import android.content.Context import android.net.Uri import de.ptrlx.oneshot.feature_diary.domain.model.DiaryEntry import de.ptrlx.oneshot.feature_diary.domain.util.HappinessType @@ -16,9 +15,10 @@ sealed class DiaryEvent { val text: String? = null, val happiness: HappinessType? = null ) : DiaryEvent() + data class ImageImport(val uri: Uri): DiaryEvent() - object WriteExport : DiaryEvent() - object ReadImport : DiaryEvent() + object WriteDBExport : DiaryEvent() + object ReadDBImport : DiaryEvent() object CaptureImageAborted : DiaryEvent() object CaptureUpdateEntry : DiaryEvent() object SnackbarDismissed : DiaryEvent() diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/DiaryViewModel.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/DiaryViewModel.kt index 6d22451..36ae7f0 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/DiaryViewModel.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/DiaryViewModel.kt @@ -47,7 +47,7 @@ class DiaryViewModel @Inject constructor( // private var searchQuery: String by mutableStateOf("") // private var searchEntries: List by mutableStateOf(emptyList()) - var fielManager: DiaryFileManager? by mutableStateOf(null) + var fileManager: DiaryFileManager? by mutableStateOf(null) private set var currentImageAddEditEntry: DiaryEntry? by mutableStateOf(null) @@ -77,7 +77,7 @@ class DiaryViewModel @Inject constructor( var snackbarCause: SnackbarCause = SnackbarCause.DELETE_ENTRY private set - var currentIsCapture: Boolean = true + var currentIsNewEntry: Boolean = true private set init { @@ -119,10 +119,14 @@ class DiaryViewModel @Inject constructor( showModalBottomSheet() Log.d(LOG_TAG, "Image saved") } + is DiaryEvent.ImageImport -> { + createNewImageDummyOrImport(copyImageUri = event.uri) + showModalBottomSheet() + } is DiaryEvent.CaptureImageAborted -> { // cleanup created (but empty) file currentImageAddEditEntry?.let { entry -> - fielManager?.deleteImage(entry.relativePath) + fileManager?.deleteImage(entry.relativePath) currentImageAddEditEntry = null } } @@ -149,7 +153,7 @@ class DiaryViewModel @Inject constructor( } is DiaryEvent.DiaryEditEntry -> { currentImageAddEditEntry = event.entry - currentIsCapture = false + currentIsNewEntry = false showModalBottomSheet() } is DiaryEvent.FilterHappinessType -> { @@ -189,21 +193,21 @@ class DiaryViewModel @Inject constructor( // nothing to do here } } - is DiaryEvent.WriteExport -> { + is DiaryEvent.WriteDBExport -> { if (entries.isNotEmpty()) { val timestamp = System.currentTimeMillis() val currentDate = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).format(timestamp) val filename = "OneShot_DB_$currentDate.json" - val success = fielManager?.writeJSONExport(filename, entries) + val success = fileManager?.writeJSONExport(filename, entries) snackbarCause = (if (success == true) SnackbarCause.SUCCESS else SnackbarCause.ERROR) isSnackbarShowing = true } } - is DiaryEvent.ReadImport -> { + is DiaryEvent.ReadDBImport -> { var success = false - fielManager?.let { fileManager -> + fileManager?.let { fileManager -> currentImportDatabaseUri?.let { uri -> Log.d(LOG_TAG, "Importing entries from $uri") val importEntries = fileManager.readJSONExport(uri) @@ -243,7 +247,7 @@ class DiaryViewModel @Inject constructor( diaryUseCases.getSettingsString(imageBaseLocationKey).onEach { uriString -> Log.d(LOG_TAG, "New element received in GetImageBaseLocationJob") uriString?.let { - fielManager = DiaryFileManager(Uri.parse(uriString), context) + fileManager = DiaryFileManager(Uri.parse(uriString), context) } }.launchIn(viewModelScope) @@ -289,16 +293,24 @@ class DiaryViewModel @Inject constructor( * @return Uri that can be used to store an image */ fun createNewImageDummy(): Uri? { + return createNewImageDummyOrImport(copyImageUri = null) + } + + private fun createNewImageDummyOrImport(copyImageUri: Uri? = null): Uri? { val localDate = LocalDate.now() val timestamp = System.currentTimeMillis() val currentDate = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).format(timestamp) val filename = "OneShot_$currentDate.jpg" - val uri = fielManager?.createNewImageDummy(filename) + val uri = copyImageUri?.let { + fileManager?.copyImage(srcUri = copyImageUri, filename = filename) + }?: run { + fileManager?.createNewImageDummy(filename) + } uri?.let { - currentIsCapture = true + currentIsNewEntry = true currentImageAddEditEntry = DiaryEntry( localDate, timestamp / 1000L, diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/AddEditEntry.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/AddEditEntry.kt index 424ca24..e1f214c 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/AddEditEntry.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/AddEditEntry.kt @@ -22,10 +22,12 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import de.ptrlx.oneshot.R +import de.ptrlx.oneshot.feature_diary.domain.model.DiaryEntry import de.ptrlx.oneshot.feature_diary.domain.util.HappinessType import de.ptrlx.oneshot.feature_diary.presentation.diary.DiaryEvent import de.ptrlx.oneshot.feature_diary.presentation.diary.DiaryViewModel import java.time.Instant +import java.time.LocalDate import java.time.ZoneId @Composable @@ -70,7 +72,7 @@ fun AddEditEntryModalBottomSheetContent( .fillMaxWidth() .height(670.dp) ) { - if (!viewModel.currentIsCapture) + if (!viewModel.currentIsNewEntry) Icon( Icons.Default.Delete, contentDescription = "delete", @@ -175,9 +177,17 @@ fun AddEditEntryModalBottomSheetContent( fun AddEditOrSetLocationButton( modifier: Modifier = Modifier, viewModel: DiaryViewModel, + hideWhenCaptured: Boolean = false ) { - if (viewModel.fielManager == null) - SetLocation(modifier, viewModel = viewModel) - else - AddEntryButton(modifier, viewModel = viewModel) + var lastEntry: DiaryEntry? = null + try { + lastEntry = viewModel.entries.last() + } catch (e: NoSuchElementException) {} + + if (viewModel.fileManager == null) + SetLocation(modifier.padding(top = 4.dp), viewModel = viewModel) + else if ((!hideWhenCaptured) || (lastEntry?.date != LocalDate.now())) + AddEntryButton(modifier.padding(top = 4.dp), viewModel = viewModel) + } + diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/ImageCard.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/ImageCard.kt index 56958f1..01a3a36 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/ImageCard.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/ImageCard.kt @@ -54,7 +54,7 @@ fun ImageCard( ) { AsyncImage( modifier = Modifier.fillMaxWidth(), - model = viewModel.fielManager?.resolveUri(entry.relativePath), + model = viewModel.fileManager?.resolveUri(entry.relativePath), contentDescription = contentDescription, error = painterResource(R.drawable.ic_baseline_error_24), contentScale = if (!expanded) ContentScale.Crop else ContentScale.FillWidth, diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/ImportImage.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/ImportImage.kt new file mode 100644 index 0000000..017c50e --- /dev/null +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/ImportImage.kt @@ -0,0 +1,31 @@ +package de.ptrlx.oneshot.feature_diary.presentation.diary.components.common + +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import de.ptrlx.oneshot.feature_diary.presentation.diary.DiaryEvent +import de.ptrlx.oneshot.feature_diary.presentation.diary.DiaryViewModel + +@Composable +fun ImportImageButton( + modifier: Modifier = Modifier, + viewModel: DiaryViewModel +) { + if (viewModel.fileManager != null) { + val launcher = + rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { + it?.let { + viewModel.onEvent(DiaryEvent.ImageImport(it)) + } + } + + RoundedButton( + modifier = modifier, + text = "Import image", + onClick = { + launcher.launch("image/*") + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/SetLocation.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/SetLocation.kt index 8725a79..279f887 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/SetLocation.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/common/SetLocation.kt @@ -22,7 +22,7 @@ fun SetLocation( val launcher = rememberLauncherForActivityResult(ActivityResultContracts.OpenDocumentTree()) { uri -> uri?.let { - viewModel.fielManager?.let { + viewModel.fileManager?.let { val toast = Toast.makeText( context, @@ -38,7 +38,7 @@ fun SetLocation( RoundedButton( modifier = modifier, text = "Set image file path", - onClick = { launcher.launch(viewModel.fielManager?.baseLocation) }, + onClick = { launcher.launch(viewModel.fileManager?.baseLocation) }, arrow = arrow ) } \ No newline at end of file diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/diary/DiaryScreen.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/diary/DiaryScreen.kt index 199a770..db5fdb4 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/diary/DiaryScreen.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/diary/DiaryScreen.kt @@ -24,28 +24,19 @@ fun DiaryScreen( modifier: Modifier = Modifier, viewModel: DiaryViewModel ) { - Box( + Column( modifier = modifier - .padding(start = 8.dp, end = 8.dp, bottom = 8.dp) + .padding(start = 8.dp, end = 8.dp) ) { - //todo use fab instead - AddEditOrSetLocationButton( - modifier = Modifier - .align(Alignment.BottomCenter), + DiaryTop() + DiaryEntryList( + modifier = Modifier.weight(1f), viewModel = viewModel ) - Column( - modifier = Modifier - .align(Alignment.TopStart) - .padding( - bottom = 64.dp - ) - ) { - DiaryTop() - DiaryEntryList( - viewModel = viewModel - ) - } + AddEditOrSetLocationButton( + viewModel = viewModel, + hideWhenCaptured = true + ) } } diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/home/HomeScreen.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/home/HomeScreen.kt index e0b26b1..dc115b5 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/home/HomeScreen.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/home/HomeScreen.kt @@ -18,6 +18,7 @@ import de.ptrlx.oneshot.feature_diary.presentation.diary.DiaryEvent import de.ptrlx.oneshot.feature_diary.presentation.diary.DiaryViewModel import de.ptrlx.oneshot.feature_diary.presentation.diary.components.common.AddEditOrSetLocationButton import de.ptrlx.oneshot.feature_diary.presentation.diary.components.common.ImageCard +import de.ptrlx.oneshot.feature_diary.presentation.diary.components.common.ImportImageButton /** * Main Composable for home screen. @@ -32,13 +33,17 @@ fun HomeScreen( viewModel: DiaryViewModel, controller: NavController ) { + //todo pull to reload event => reset uri resolver storage; reset viewmodel.now; kill and relaunch jobs; display loading spinner Column( - modifier = modifier - .verticalScroll(rememberScrollState()), + modifier = modifier, verticalArrangement = Arrangement.SpaceBetween ) { - //todo pull to reload event => reset uri resolver storage; reset viewmodel.now; kill and relaunch jobs; display loading spinner - Column(verticalArrangement = Arrangement.spacedBy(32.dp)) { + Column( + modifier = Modifier + .verticalScroll(rememberScrollState()) + .weight(1f), + verticalArrangement = Arrangement.spacedBy(32.dp) + ) { HomeTop( Modifier.padding(start = 8.dp, end = 8.dp), controller = controller @@ -47,11 +52,15 @@ fun HomeScreen( Flashbacks( viewModel = viewModel ) + //todo motivation => fetch motivation api and display daily motivation -> Store in DiaryEntry.motivation - //todo fetch motivation api and display daily motivation -> Store in DiaryEntry.motivation } + ImportImageButton( + Modifier.padding(start = 8.dp, end = 8.dp), + viewModel = viewModel + ) AddEditOrSetLocationButton( - Modifier.padding(top = 16.dp, bottom = 8.dp, start = 8.dp, end = 8.dp), + Modifier.padding(start = 8.dp, end = 8.dp), viewModel = viewModel ) } diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/settings/Settings.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/settings/Settings.kt index 4decbf1..a07c550 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/settings/Settings.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/settings/Settings.kt @@ -76,7 +76,7 @@ fun SettingsButtons( Spacer(modifier = Modifier.size(8.dp)) RoundedButton( text = "Export database", - onClick = { viewModel.onEvent(DiaryEvent.WriteExport) }, + onClick = { viewModel.onEvent(DiaryEvent.WriteDBExport) }, arrow = false ) Spacer(modifier = Modifier.size(8.dp)) @@ -227,7 +227,7 @@ fun ImportDatabaseButton( colors = ButtonDefaults.buttonColors(backgroundColor = MaterialTheme.colors.error), onClick = { showDialog = false - viewModel.onEvent(DiaryEvent.ReadImport) + viewModel.onEvent(DiaryEvent.ReadDBImport) }) { Text("OK", color = MaterialTheme.colors.onError) } diff --git a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/stats/StatsScreen.kt b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/stats/StatsScreen.kt index b96f0e9..a8cbbcd 100644 --- a/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/stats/StatsScreen.kt +++ b/app/src/main/java/de/ptrlx/oneshot/feature_diary/presentation/diary/components/stats/StatsScreen.kt @@ -1,7 +1,6 @@ package de.ptrlx.oneshot.feature_diary.presentation.diary.components.stats import androidx.compose.animation.* -import androidx.compose.animation.core.FiniteAnimationSpec import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.grid.GridCells @@ -29,7 +28,7 @@ fun StatsScreen( ) { Column( modifier = modifier - .padding(bottom = 8.dp, top = 8.dp) + .padding(top = 8.dp) // .verticalScroll(rememberScrollState()), .verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.spacedBy(16.dp), @@ -163,9 +162,7 @@ fun HappinessCalendarEntry( color = onColor ) Text( - fontSize = 30.sp, color = onColor, text = (entry?.let { - it.happiness - } ?: run { HappinessType.NOT_SPECIFIED }).emoticon() + fontSize = 30.sp, color = onColor, text = (entry?.happiness ?: run { HappinessType.NOT_SPECIFIED }).emoticon() ) } } diff --git a/assets/preview_1.png b/assets/preview_1.png deleted file mode 100755 index f263d72..0000000 Binary files a/assets/preview_1.png and /dev/null differ diff --git a/assets/preview_2.png b/assets/preview_2.png deleted file mode 100755 index bd2a26f..0000000 Binary files a/assets/preview_2.png and /dev/null differ diff --git a/assets/preview_3.png b/assets/preview_3.png deleted file mode 100755 index 3258dca..0000000 Binary files a/assets/preview_3.png and /dev/null differ diff --git a/assets/preview_4.png b/assets/preview_4.png deleted file mode 100755 index 8450d9c..0000000 Binary files a/assets/preview_4.png and /dev/null differ diff --git a/assets/preview_5.png b/assets/preview_5.png deleted file mode 100755 index 62ac9f9..0000000 Binary files a/assets/preview_5.png and /dev/null differ diff --git a/assets/preview_6.png b/assets/preview_6.png deleted file mode 100755 index 38c9872..0000000 Binary files a/assets/preview_6.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/changelogs/110.txt b/fastlane/metadata/android/en-US/changelogs/110.txt new file mode 100644 index 0000000..cdb943b --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/110.txt @@ -0,0 +1 @@ +* Added feature for image import (only via copy) \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_1.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_1.jpg index 9ee2f04..28a4d85 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_1.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_1.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_2.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_2.jpg index 4e9e639..1852e73 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_2.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_2.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_3.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_3.jpg index 2609377..e6dae2a 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_3.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_3.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_4.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_4.jpg index 6620d50..e1d6573 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_4.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_4.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_5.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_5.jpg index 25ef49d..07b0d52 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_5.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_5.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_6.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_6.jpg index 915bd73..7a1abc8 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_6.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/preview_6.jpg differ