Skip to content

Commit 19fcb3a

Browse files
committed
adding csv export settings dialog
1 parent 165a552 commit 19fcb3a

File tree

19 files changed

+456
-14
lines changed

19 files changed

+456
-14
lines changed

app/src/main/java/com/example/util/simpletimetracker/navigation/ScreenResolverImpl.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,13 @@ class ScreenResolverImpl @Inject constructor() : ScreenResolver {
176176
null,
177177
navExtras
178178
)
179+
Screen.CSV_EXPORT_SETTINGS_DIALOG ->
180+
navController?.navigate(
181+
R.id.csvExportSettingsDialogFragment,
182+
null,
183+
null,
184+
navExtras
185+
)
179186
else -> {
180187
// Do nothing
181188
}

app/src/main/res/navigation/nav_graph.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@
102102
android:name="com.example.util.simpletimetracker.feature_dialogs.recordTagSelection.RecordTagSelectionDialogFragment"
103103
android:label="RecordTagSelectionDialogFragment"
104104
tools:layout="@layout/record_tag_selection_dialog_fragment" />
105+
<dialog
106+
android:id="@+id/csvExportSettingsDialogFragment"
107+
android:name="com.example.util.simpletimetracker.feature_dialogs.csvExportSettings.view.CsvExportSettingsDialogFragment"
108+
android:label="CsvExportSettingsDialogFragment"
109+
tools:layout="@layout/csv_export_settings_fragment" />
105110
<fragment
106111
android:id="@+id/recordsAllFragment"
107112
android:name="com.example.util.simpletimetracker.feature_records_all.view.RecordsAllFragment"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.example.util.simpletimetracker.core.dialog
2+
3+
import com.example.util.simpletimetracker.navigation.params.CsvExportSettingsParams
4+
5+
interface CsvExportSettingsDialogListener {
6+
7+
fun onCsvExportSettingsSelected(data: CsvExportSettingsParams)
8+
}

core/src/main/java/com/example/util/simpletimetracker/core/viewModel/BackupViewModel.kt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import com.example.util.simpletimetracker.core.R
88
import com.example.util.simpletimetracker.core.repo.ResourceRepo
99
import com.example.util.simpletimetracker.domain.interactor.BackupInteractor
1010
import com.example.util.simpletimetracker.domain.interactor.CsvExportInteractor
11+
import com.example.util.simpletimetracker.domain.model.Range
1112
import com.example.util.simpletimetracker.domain.resolver.BackupRepo
1213
import com.example.util.simpletimetracker.domain.resolver.CsvRepo
1314
import com.example.util.simpletimetracker.navigation.Notification
1415
import com.example.util.simpletimetracker.navigation.Router
16+
import com.example.util.simpletimetracker.navigation.params.CsvExportSettingsParams
1517
import com.example.util.simpletimetracker.navigation.params.ToastParams
1618
import kotlinx.coroutines.launch
1719
import javax.inject.Inject
@@ -20,10 +22,11 @@ class BackupViewModel @Inject constructor(
2022
private val resourceRepo: ResourceRepo,
2123
private val router: Router,
2224
private val backupInteractor: BackupInteractor,
23-
private val csvExportInteractor: CsvExportInteractor
25+
private val csvExportInteractor: CsvExportInteractor,
2426
) : ViewModel() {
2527

2628
val progressVisibility: LiveData<Boolean> = MutableLiveData(false)
29+
private var csvExportSettingsParams: CsvExportSettingsParams? = null
2730

2831
fun onSaveBackup(uriString: String) = viewModelScope.launch {
2932
showProgress(true)
@@ -53,10 +56,23 @@ class BackupViewModel @Inject constructor(
5356
showProgress(false)
5457
}
5558

59+
fun onCsvExportSettingsSelected(data: CsvExportSettingsParams) {
60+
csvExportSettingsParams = data
61+
}
62+
5663
fun onSaveCsvFile(uriString: String) = viewModelScope.launch {
5764
showProgress(true)
5865

59-
val resultCode = csvExportInteractor.saveCsvFile(uriString)
66+
val range = csvExportSettingsParams?.range?.let {
67+
Range(
68+
timeStarted = it.rangeStart,
69+
timeEnded = it.rangeEnd,
70+
)
71+
}
72+
val resultCode = csvExportInteractor.saveCsvFile(
73+
uriString = uriString,
74+
range = range
75+
)
6076

6177
if (resultCode == CsvRepo.ResultCode.SUCCESS) {
6278
R.string.message_csv_export_complete
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:shape="rectangle">
4+
<corners android:radius="8dp" />
5+
<stroke
6+
android:width="2dp"
7+
android:color="@color/inputFieldBorderDialogDark" />
8+
</shape>

core/src/main/res/values/attrs.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
<attr name="appTextPrimaryColor" format="reference" />
55
<attr name="appLightTextColor" format="reference" />
66
<attr name="appBackgroundColor" format="reference" />
7+
<attr name="appBackgroundDialogColor" format="reference" />
78
<attr name="appDialogBackground" format="reference" />
89
<attr name="appTextHintColor" format="reference" />
910
<attr name="appArrow" format="reference" />
1011
<attr name="appDividerColor" format="reference" />
1112
<attr name="appDivider" format="reference" />
1213
<attr name="appInputFieldBorder" format="reference" />
14+
<attr name="appInputFieldBorderDialog" format="reference" />
1315
<attr name="appInputFieldBorderColor" format="reference" />
1416
<attr name="appPieChartDividerColor" format="reference" />
1517
<attr name="appCardBackgroundColor" format="reference" />

core/src/main/res/values/colors.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,6 @@
6868

6969
<color name="inputFieldBorder">@color/blue_grey_50</color>
7070
<color name="inputFieldBorderDark">@color/grey_900</color>
71+
<color name="inputFieldBorderDialogDark">@color/grey_800</color>
7172

7273
</resources>

core/src/main/res/values/styles.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616
<item name="appTextPrimaryColor">@color/textPrimary</item>
1717
<item name="appLightTextColor">@color/textLight</item>
1818
<item name="appBackgroundColor">@color/colorBackground</item>
19+
<item name="appBackgroundDialogColor">@color/colorDialogBackground</item>
1920
<item name="appDialogBackground">@drawable/bg_rounded_bottom_sheet</item>
2021
<item name="appTextHintColor">@color/textHint</item>
2122
<item name="appArrow">@drawable/arrow</item>
2223
<item name="appDividerColor">@color/colorDivider</item>
2324
<item name="appDivider">@drawable/divider_drawable</item>
2425
<item name="appInputFieldBorder">@drawable/bg_input_field_border</item>
26+
<item name="appInputFieldBorderDialog">@drawable/bg_input_field_border</item>
2527
<item name="appInputFieldBorderColor">@color/inputFieldBorder</item>
2628
<item name="appPieChartDividerColor">@color/pieChartDivider</item>
2729
<item name="appCardBackgroundColor">@color/cardBackground</item>
@@ -51,12 +53,14 @@
5153
<item name="appTextPrimaryColor">@color/textPrimaryDark</item>
5254
<item name="appLightTextColor">@color/textLightDark</item>
5355
<item name="appBackgroundColor">@color/colorBackgroundDark</item>
56+
<item name="appBackgroundDialogColor">@color/colorDialogBackgroundDark</item>
5457
<item name="appDialogBackground">@drawable/bg_rounded_bottom_sheet_dark</item>
5558
<item name="appTextHintColor">@color/textHintDark</item>
5659
<item name="appArrow">@drawable/arrow_dark</item>
5760
<item name="appDividerColor">@color/colorDividerDark</item>
5861
<item name="appDivider">@drawable/divider_drawable_dark</item>
5962
<item name="appInputFieldBorder">@drawable/bg_input_field_border_dark</item>
63+
<item name="appInputFieldBorderDialog">@drawable/bg_input_field_border_dialog_dark</item>
6064
<item name="appInputFieldBorderColor">@color/inputFieldBorderDark</item>
6165
<item name="appPieChartDividerColor">@color/pieChartDividerDark</item>
6266
<item name="appCardBackgroundColor">@color/cardBackgroundDark</item>
@@ -131,6 +135,10 @@
131135
<item name="android:textSize">16sp</item>
132136
</style>
133137

138+
<style name="InputFieldCardDialog" parent="InputFieldCard">
139+
<item name="cardBackgroundColor">?appBackgroundDialogColor</item>
140+
</style>
141+
134142
<style name="ChangeItemNameEditText">
135143
<item name="android:textColor">?appTextPrimaryColor</item>
136144
<item name="android:textSize">16sp</item>

data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/CsvRepoImpl.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.ContentResolver
44
import android.net.Uri
55
import android.os.ParcelFileDescriptor
66
import com.example.util.simpletimetracker.domain.model.Category
7+
import com.example.util.simpletimetracker.domain.model.Range
78
import com.example.util.simpletimetracker.domain.model.Record
89
import com.example.util.simpletimetracker.domain.model.RecordTag
910
import com.example.util.simpletimetracker.domain.model.RecordType
@@ -29,7 +30,10 @@ class CsvRepoImpl @Inject constructor(
2930
private val recordTagRepo: RecordTagRepo
3031
) : CsvRepo {
3132

32-
override suspend fun saveCsvFile(uriString: String): CsvRepo.ResultCode = withContext(Dispatchers.IO) {
33+
override suspend fun saveCsvFile(
34+
uriString: String,
35+
range: Range?,
36+
): CsvRepo.ResultCode = withContext(Dispatchers.IO) {
3337
var fileDescriptor: ParcelFileDescriptor? = null
3438
var fileOutputStream: FileOutputStream? = null
3539

@@ -46,7 +50,12 @@ class CsvRepoImpl @Inject constructor(
4650
.map { it.id to it }.toMap()
4751

4852
// Write data
49-
recordRepo.getAll()
53+
val records = if (range != null) {
54+
recordRepo.getFromRange(range.timeStarted, range.timeEnded)
55+
} else {
56+
recordRepo.getAll()
57+
}
58+
records
5059
.sortedBy { it.timeStarted }
5160
.forEach { record ->
5261
val activityTags = recordTypeCategoryRepo.getCategoriesByType(record.typeId)
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
package com.example.util.simpletimetracker.domain.interactor
22

3+
import com.example.util.simpletimetracker.domain.model.Range
34
import com.example.util.simpletimetracker.domain.resolver.CsvRepo
45
import javax.inject.Inject
56

67
class CsvExportInteractor @Inject constructor(
7-
private val csvRepo: CsvRepo
8+
private val csvRepo: CsvRepo,
89
) {
910

10-
suspend fun saveCsvFile(uriString: String): CsvRepo.ResultCode {
11-
return csvRepo.saveCsvFile(uriString)
11+
suspend fun saveCsvFile(
12+
uriString: String,
13+
range: Range?,
14+
): CsvRepo.ResultCode {
15+
return csvRepo.saveCsvFile(
16+
uriString = uriString,
17+
range = range,
18+
)
1219
}
1320
}

0 commit comments

Comments
 (0)