Skip to content

Commit 23340ba

Browse files
committed
Merge branch 'development'
2 parents 18964a0 + 609002a commit 23340ba

File tree

9 files changed

+133
-36
lines changed

9 files changed

+133
-36
lines changed

app/build.gradle.kts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ android {
1515
minSdk = 33
1616
targetSdk = 34
1717
versionCode = 20
18-
versionName = "1.4.1"
18+
versionName = "1.4.2"
1919

2020
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2121
}
@@ -46,21 +46,21 @@ val aboutLibrariesVersion: String by rootProject.extra
4646
val composeVersion: String by rootProject.extra
4747

4848
dependencies {
49-
implementation(platform("androidx.compose:compose-bom:2023.10.01"))
49+
implementation(platform("androidx.compose:compose-bom:2024.01.00"))
5050

5151
implementation("androidx.core:core-ktx:1.12.0")
5252
implementation("androidx.compose.ui:ui")
5353
implementation("androidx.compose.material3:material3")
5454
implementation("androidx.compose.ui:ui-tooling-preview")
5555
implementation("androidx.lifecycle:lifecycle-viewmodel-compose")
56-
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
57-
implementation("androidx.activity:activity-compose:1.8.1")
56+
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
57+
implementation("androidx.activity:activity-compose:1.8.2")
5858
implementation("androidx.appcompat:appcompat:1.6.1")
59-
implementation("com.google.android.material:material:1.10.0")
60-
implementation("androidx.annotation:annotation:1.7.0")
59+
implementation("com.google.android.material:material:1.11.0")
60+
implementation("androidx.annotation:annotation:1.7.1")
6161
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
62-
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2")
63-
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
62+
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.7.0")
63+
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0")
6464
testImplementation("junit:junit:4.13.2")
6565
androidTestImplementation("androidx.test.ext:junit:1.1.5")
6666
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
@@ -69,28 +69,28 @@ dependencies {
6969
debugImplementation("androidx.compose.ui:ui-test-manifest")
7070

7171
// ROOM DB
72-
val room_version = "2.6.0"
72+
val room_version = "2.6.1"
7373
implementation("androidx.room:room-ktx:$room_version")
7474
ksp("androidx.room:room-compiler:$room_version")
7575
annotationProcessor("androidx.room:room-compiler:$room_version")
7676

7777
// ACCOMPANIST
78-
val accompanist_version = "0.33.2-alpha"
78+
val accompanist_version = "0.34.0"
7979
implementation("com.google.accompanist:accompanist-flowlayout:$accompanist_version")
8080
implementation("com.google.accompanist:accompanist-systemuicontroller:$accompanist_version")
8181
implementation("com.google.accompanist:accompanist-permissions:$accompanist_version")
8282

8383
// CALENDAR
84-
implementation("com.kizitonwose.calendar:compose:2.5.0-alpha01")
84+
implementation("com.kizitonwose.calendar:compose:2.5.0-beta01")
8585

8686
// NAVIGATION
87-
implementation("androidx.navigation:navigation-compose:2.7.5")
87+
implementation("androidx.navigation:navigation-compose:2.7.6")
8888

8989
// GSON
9090
implementation("com.google.code.gson:gson:2.10.1")
9191

9292
// LOTTIE
93-
implementation("com.airbnb.android:lottie-compose:6.1.0")
93+
implementation("com.airbnb.android:lottie-compose:6.3.0")
9494

9595
//ABOUT LIBRARIES
9696
implementation("com.mikepenz:aboutlibraries-compose:$aboutLibrariesVersion")

app/src/main/java/com/blazecode/eventtool/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class MainActivity : ComponentActivity() {
5757
val navController = rememberNavController()
5858
NavHost(navController = navController, startDestination = NavRoutes.Home.route) {
5959
// HOME
60-
composable(route= NavRoutes.Home.route,) { Home(HomeViewModel(application), navController, printer) }
60+
composable(route= NavRoutes.Home.route,) { Home(HomeViewModel(application), navController, printer, exporter) }
6161
// NEW EVENT
6262
composable(NavRoutes.NewEvent.route) {
6363
val event = navController.previousBackStackEntry?.savedStateHandle?.get<Event>("event")

app/src/main/java/com/blazecode/eventtool/screens/Home.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import com.airbnb.lottie.compose.*
4040
import com.blazecode.eventtool.R
4141
import com.blazecode.eventtool.data.Event
4242
import com.blazecode.eventtool.data.EventDateType
43+
import com.blazecode.eventtool.database.DataBaseExporter
4344
import com.blazecode.eventtool.enums.Additions
4445
import com.blazecode.eventtool.enums.EventType
4546
import com.blazecode.eventtool.navigation.NavRoutes
@@ -78,9 +79,8 @@ private val colorfulDaysEnabled = mutableStateOf(false)
7879
private val debugUpdateCheckEnabled = mutableStateOf(false)
7980

8081

81-
@OptIn(ExperimentalMaterial3Api::class)
8282
@Composable
83-
fun Home(viewModel: HomeViewModel = viewModel(), navController: NavController, printer: PdfPrinter) {
83+
fun Home(viewModel: HomeViewModel = viewModel(), navController: NavController, printer: PdfPrinter, exporter :DataBaseExporter) {
8484
val context = LocalContext.current
8585

8686
LaunchedEffect(context) {
@@ -119,7 +119,7 @@ fun Home(viewModel: HomeViewModel = viewModel(), navController: NavController, p
119119
content = { paddingValues ->
120120
Column(modifier = Modifier.padding(paddingValues)) {
121121
if((debugUpdateCheckEnabled.value && com.blazecode.eventtool.BuildConfig.DEBUG) || !com.blazecode.eventtool.BuildConfig.DEBUG)
122-
GitHubUpdater(context)
122+
GitHubUpdater(exporter = exporter, context = context)
123123
MainLayout(viewModel, navController)
124124
}
125125
})

app/src/main/java/com/blazecode/eventtool/screens/NewEvent.kt

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,60 @@ package com.blazecode.eventtool
99
import android.content.Context
1010
import android.widget.Toast
1111
import androidx.activity.compose.BackHandler
12-
import androidx.compose.animation.*
12+
import androidx.compose.animation.AnimatedContent
13+
import androidx.compose.animation.fadeIn
14+
import androidx.compose.animation.fadeOut
15+
import androidx.compose.animation.togetherWith
1316
import androidx.compose.foundation.BorderStroke
1417
import androidx.compose.foundation.clickable
15-
import androidx.compose.foundation.layout.*
18+
import androidx.compose.foundation.layout.Arrangement
19+
import androidx.compose.foundation.layout.Box
20+
import androidx.compose.foundation.layout.Column
21+
import androidx.compose.foundation.layout.Row
22+
import androidx.compose.foundation.layout.Spacer
23+
import androidx.compose.foundation.layout.fillMaxWidth
24+
import androidx.compose.foundation.layout.padding
25+
import androidx.compose.foundation.layout.size
1626
import androidx.compose.foundation.rememberScrollState
1727
import androidx.compose.foundation.text.KeyboardOptions
1828
import androidx.compose.foundation.verticalScroll
1929
import androidx.compose.material.icons.Icons
2030
import androidx.compose.material.icons.filled.Call
2131
import androidx.compose.material.icons.filled.Send
22-
import androidx.compose.material3.*
23-
import androidx.compose.runtime.*
32+
import androidx.compose.material3.AlertDialog
33+
import androidx.compose.material3.Button
34+
import androidx.compose.material3.ButtonDefaults
35+
import androidx.compose.material3.Card
36+
import androidx.compose.material3.DatePicker
37+
import androidx.compose.material3.DatePickerDialog
38+
import androidx.compose.material3.DropdownMenu
39+
import androidx.compose.material3.DropdownMenuItem
40+
import androidx.compose.material3.ExperimentalMaterial3Api
41+
import androidx.compose.material3.ExtendedFloatingActionButton
42+
import androidx.compose.material3.FloatingActionButtonDefaults
43+
import androidx.compose.material3.Icon
44+
import androidx.compose.material3.IconButton
45+
import androidx.compose.material3.InputChip
46+
import androidx.compose.material3.InputChipDefaults
47+
import androidx.compose.material3.LargeTopAppBar
48+
import androidx.compose.material3.MaterialTheme
49+
import androidx.compose.material3.OutlinedButton
50+
import androidx.compose.material3.OutlinedTextField
51+
import androidx.compose.material3.Scaffold
52+
import androidx.compose.material3.Text
53+
import androidx.compose.material3.TopAppBarDefaults
54+
import androidx.compose.material3.TopAppBarScrollBehavior
55+
import androidx.compose.material3.rememberDatePickerState
56+
import androidx.compose.material3.rememberTopAppBarState
57+
import androidx.compose.runtime.Composable
58+
import androidx.compose.runtime.LaunchedEffect
59+
import androidx.compose.runtime.getValue
60+
import androidx.compose.runtime.mutableStateOf
61+
import androidx.compose.runtime.remember
62+
import androidx.compose.runtime.rememberCoroutineScope
2463
import androidx.compose.runtime.saveable.rememberSaveable
64+
import androidx.compose.runtime.setValue
2565
import androidx.compose.ui.Alignment
26-
import androidx.compose.ui.ExperimentalComposeUiApi
2766
import androidx.compose.ui.Modifier
2867
import androidx.compose.ui.graphics.Color
2968
import androidx.compose.ui.input.nestedscroll.nestedScroll
@@ -87,13 +126,13 @@ fun NewEvent(viewModel: NewEventViewModel = viewModel(), navController: NavContr
87126
}
88127
}
89128

90-
@OptIn(ExperimentalAnimationApi::class)
91129
@Composable
92130
private fun MainLayout(viewModel: NewEventViewModel, navController: NavController) {
93131
val context = LocalContext.current
94132

95133
AnimatedContent(targetState = eventType.value,
96-
transitionSpec = { fadeIn() with fadeOut() }) { targetState ->
134+
transitionSpec = { fadeIn() togetherWith fadeOut() }, label = "pageFadeIn"
135+
) { targetState ->
97136
Column (horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(0.dp,0.dp,0.dp, dimensionResource(R.dimen.fab_height_padding))){
98137
when (targetState) {
99138
EventType.WEDDING -> {
@@ -454,7 +493,7 @@ private fun CommentsLayout(viewModel: NewEventViewModel) {
454493
@OptIn(ExperimentalMaterial3Api::class)
455494
@Composable
456495
private fun AdditionsLayout(viewModel: NewEventViewModel) {
457-
val allAdditions: MutableList<Additions> = Additions.values().toMutableList()
496+
val allAdditions: MutableList<Additions> = Additions.entries.toMutableList()
458497
val additions = rememberSaveable { mutableStateOf(viewModel.event.additions) }
459498

460499
Card (modifier = Modifier
@@ -491,7 +530,7 @@ private fun AdditionsLayout(viewModel: NewEventViewModel) {
491530
}
492531

493532
private fun getAddition(value: String): Additions? {
494-
val map = Additions.values().associateBy(Additions::name)
533+
val map = Additions.entries.associateBy(Additions::name)
495534
return map[value]
496535
}
497536

app/src/main/java/com/blazecode/eventtool/util/updater/GitHubUpdater.kt

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,38 @@ import androidx.compose.runtime.Composable
1515
import androidx.compose.runtime.LaunchedEffect
1616
import androidx.compose.runtime.mutableStateOf
1717
import androidx.compose.runtime.remember
18+
import androidx.compose.runtime.rememberCoroutineScope
1819
import androidx.compose.runtime.saveable.rememberSaveable
1920
import androidx.compose.ui.Alignment
2021
import androidx.compose.ui.Modifier
2122
import androidx.compose.ui.graphics.painter.Painter
2223
import androidx.compose.ui.res.dimensionResource
2324
import androidx.compose.ui.res.painterResource
2425
import androidx.compose.ui.res.stringResource
26+
import androidx.lifecycle.viewModelScope
2527
import com.android.volley.Request
2628
import com.android.volley.toolbox.StringRequest
2729
import com.android.volley.toolbox.Volley
2830
import com.blazecode.eventtool.BuildConfig
2931
import com.blazecode.eventtool.R
32+
import com.blazecode.eventtool.database.DataBaseExporter
33+
import com.blazecode.eventtool.database.EventRepository
3034
import com.blazecode.scrapguidev2.util.LinkUtil
3135
import com.google.gson.GsonBuilder
36+
import kotlinx.coroutines.CoroutineScope
37+
import kotlinx.coroutines.Dispatchers
3238
import kotlinx.coroutines.GlobalScope
3339
import kotlinx.coroutines.launch
3440

3541
@Composable
36-
fun GitHubUpdater(context: Context) {
42+
fun GitHubUpdater(context: Context, exporter : DataBaseExporter) {
3743
val release = remember{ mutableStateOf(GitHubRelease("","", arrayListOf())) }
44+
val scope = rememberCoroutineScope()
3845

3946
val download = rememberSaveable{ mutableStateOf(false) }
47+
val doBackup = rememberSaveable{ mutableStateOf(false) }
4048
val showDialog = rememberSaveable{ mutableStateOf(false) }
49+
val showBackupDialog = rememberSaveable{ mutableStateOf(false) }
4150
val extendCard = rememberSaveable{ mutableStateOf(false) }
4251

4352
fun parseJSON(input: String){
@@ -83,17 +92,24 @@ fun GitHubUpdater(context: Context) {
8392
var icon: Painter = painterResource(R.drawable.ic_expand_more)
8493
val showMoreIcon: Painter = painterResource(R.drawable.ic_expand_more)
8594
val showLessIcon: Painter = painterResource(R.drawable.ic_expand_less)
86-
Card (modifier = Modifier.fillMaxWidth().padding(dimensionResource(R.dimen.medium_padding))){
95+
Card (modifier = Modifier
96+
.fillMaxWidth()
97+
.padding(dimensionResource(R.dimen.medium_padding))){
8798
Column {
8899
Row (verticalAlignment = Alignment.CenterVertically){
89-
Text(modifier = Modifier.padding(dimensionResource(R.dimen.medium_padding)).weight(2f),
100+
Text(modifier = Modifier
101+
.padding(dimensionResource(R.dimen.medium_padding))
102+
.weight(2f),
90103
text = stringResource(R.string.update_available, release.value.tag_name),
91104
softWrap = true
92105
)
93106

94-
Box(modifier = Modifier.fillMaxWidth().padding(dimensionResource(R.dimen.medium_padding)).weight(2f), contentAlignment = Alignment.CenterEnd){
107+
Box(modifier = Modifier
108+
.fillMaxWidth()
109+
.padding(dimensionResource(R.dimen.medium_padding))
110+
.weight(2f), contentAlignment = Alignment.CenterEnd){
95111
Row {
96-
Button(onClick = { download.value = true }) { Text(stringResource(R.string.download)) }
112+
Button(onClick = { showBackupDialog.value = true }) { Text(stringResource(R.string.download)) }
97113
IconButton(onClick = {
98114
extendCard.value = !extendCard.value
99115
if(extendCard.value) icon = showLessIcon
@@ -109,7 +125,41 @@ fun GitHubUpdater(context: Context) {
109125
}
110126
}
111127

128+
if(showBackupDialog.value) {
129+
AlertDialog(onDismissRequest = { showBackupDialog.value = false},
130+
title = { Text(stringResource(R.string.backup_database_title)) },
131+
text = { Text(stringResource(R.string.backup_database_message)) },
132+
confirmButton = {
133+
FilledTonalButton(onClick = { doBackup.value = true }) {
134+
Text(text = stringResource(R.string.backup_database_button))
135+
}
136+
},
137+
dismissButton = {
138+
OutlinedButton(onClick = { showBackupDialog.value = false; download.value = true }) {
139+
Text(text = stringResource(R.string.download_update))
140+
}
141+
})
142+
}
143+
144+
LaunchedEffect(doBackup.value){
145+
if(doBackup.value) {
146+
scope.launch(Dispatchers.IO) {
147+
export(scope, exporter, context)
148+
}.join()
149+
}
150+
}
151+
112152
if(download.value) {
153+
download.value = false
113154
LinkUtil.Builder(context).link(release.value.assets[0].browser_download_url).open()
114155
}
156+
}
157+
158+
private fun export(scope: CoroutineScope, exporter: DataBaseExporter, context: Context){
159+
val repository = EventRepository()
160+
161+
scope.launch(Dispatchers.IO) {
162+
val list = repository.getEventList(context)
163+
exporter.exportJson(context, list)
164+
}
115165
}

app/src/main/res/values-de-rDE/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@
105105
<string name="update_available">Update %s verfügbar</string>
106106
<string name="download">Herunterladen</string>
107107
<string name="reserved">Reserviert</string>
108+
<string name="download_update">Update Herunterladen</string>
109+
<string name="backup_database_title">Backup Datenbank</string>
110+
<string name="backup_database_message">Erstelle ein Backup der Datenbank vor dem Aktualisieren</string>
111+
<string name="backup_database_button">Backup</string>
108112
<string name="send">Senden</string>
109113
<string name="error_report_title">Ups, etwas ist schief gelaufen</string>
110114
<string name="error_user_comment">Kommentar</string>

app/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@
128128
<!-- UPDATE -->
129129
<string name="update_available">Update %s available</string>
130130
<string name="download">Download</string>
131+
<string name="download_update">Download Update</string>
132+
<string name="backup_database_title">Backup database</string>
133+
<string name="backup_database_message">Backup your database before updating</string>
134+
<string name="backup_database_button">Backup</string>
131135

132136
<!-- ERROR REPORT -->
133137
<string name="send">Send</string>

build.gradle.kts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
buildscript {
2-
val aboutLibrariesVersion by extra("10.9.1")
3-
val composeVersion by extra("1.6.0-beta01")
2+
val aboutLibrariesVersion by extra("10.10.0")
3+
val composeVersion by extra("1.6.0")
44

55
repositories {
66
google()
@@ -15,8 +15,8 @@ buildscript {
1515
}
1616
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
1717
plugins {
18-
id("com.android.application") version "8.1.4" apply false
19-
id("com.android.library") version "8.1.4" apply false
18+
id("com.android.application") version "8.2.2" apply false
19+
id("com.android.library") version "8.2.2" apply false
2020
id("org.jetbrains.kotlin.android") version "1.9.20" apply false
2121
id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false
2222
}

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66

77
distributionBase=GRADLE_USER_HOME
88
distributionPath=wrapper/dists
9-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
9+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
1010
zipStoreBase=GRADLE_USER_HOME
1111
zipStorePath=wrapper/dists

0 commit comments

Comments
 (0)