Skip to content

Commit c55a29b

Browse files
authored
Merge branch 'Razeeman:dev' into dev
2 parents d93c1af + eef79a3 commit c55a29b

File tree

13 files changed

+45
-21
lines changed

13 files changed

+45
-21
lines changed

buildSrc/src/main/kotlin/com/example/util/simpletimetracker/Base.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ object Base {
55
const val namespace = "com.example.util.simpletimetracker"
66

77
// Raise by 2 to account for wear version code.
8-
const val versionCode = 89
9-
const val versionName = "1.47"
8+
const val versionCode = 93
9+
const val versionName = "1.48"
1010
const val minSDK = 21
1111
const val currentSDK = 34
1212

core/src/main/java/com/example/util/simpletimetracker/core/base/BaseFragment.kt

-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ abstract class BaseFragment<T : ViewBinding> : Fragment(), Throttler {
3333
// This also somehow fixes memory leaks occurring on navigation
3434
// from main to some edit screen and back.
3535
// If this ever changes - need to also fix these memory leaks.
36-
// Also ViewPagers has isSaveEnabled set to false, to avoid crash
37-
// "Expected the adapter to be 'fresh' while restoring state".
3836
return _binding?.root?.also {
3937
initialized = true
4038
} ?: run {

core/src/main/java/com/example/util/simpletimetracker/core/utils/CoreConsts.kt

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const val SHORTCUT_NAVIGATION_RECORDS = "recordsTab"
66
const val SHORTCUT_NAVIGATION_STATISTICS = "statisticsTab"
77
const val SHORTCUT_NAVIGATION_SETTINGS = "settingsTab"
88

9+
// Same values written in manifest.
910
const val ACTION_EXTERNAL_START_ACTIVITY = "com.razeeman.util.simpletimetracker.ACTION_START_ACTIVITY"
1011
const val ACTION_EXTERNAL_STOP_ACTIVITY = "com.razeeman.util.simpletimetracker.ACTION_STOP_ACTIVITY"
1112
const val ACTION_EXTERNAL_STOP_ALL_ACTIVITIES = "com.razeeman.util.simpletimetracker.ACTION_STOP_ALL_ACTIVITIES"

core/src/main/java/com/example/util/simpletimetracker/core/view/SafeFragmentStateAdapter.kt

+5
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ class SafeFragmentStateAdapter(
8383

8484
override fun restoreState(savedState: Parcelable) {
8585
try {
86+
// Restoring is crashing with "Expected the adapter to be 'fresh' while restoring state".
87+
// Don't need it anyway, because binding is saved in BaseFragment.
88+
// Crash can be avoided with setSaveEnabled,
89+
// which would cause skipping of saveState / restoreState,
90+
// but it will cause fragments to save themselves which would cause TransactionTooLargeException.
8691
adapter.restoreState(savedState)
8792
} catch (e: Exception) {
8893
Timber.e(e)

features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/adapter/ChangeRecordCommentFieldAdapterDelegate.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ fun createChangeRecordCommentFieldAdapterDelegate(
2121
with(binding) {
2222
item as ViewData
2323

24-
if (item.text != etChangeRecordCommentField.text.toString()) {
24+
if (item.text != null &&
25+
item.text != etChangeRecordCommentField.text.toString()
26+
) {
2527
etChangeRecordCommentField.setText(item.text)
2628
etChangeRecordCommentField.setSelection(item.text.length)
2729
}
@@ -38,7 +40,7 @@ fun createChangeRecordCommentFieldAdapterDelegate(
3840

3941
data class ChangeRecordCommentFieldViewData(
4042
val id: Long,
41-
val text: String,
43+
val text: String?,
4244
@ColorInt val iconColor: Int,
4345
) : ViewHolderType {
4446

features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/interactor/ChangeRecordViewDataInteractor.kt

+7-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import com.example.util.simpletimetracker.core.view.timeAdjustment.TimeAdjustmen
77
import com.example.util.simpletimetracker.domain.favourite.interactor.FavouriteCommentInteractor
88
import com.example.util.simpletimetracker.domain.prefs.interactor.PrefsInteractor
99
import com.example.util.simpletimetracker.domain.record.interactor.RecordInteractor
10-
import com.example.util.simpletimetracker.domain.recordTag.interactor.RecordTagInteractor
11-
import com.example.util.simpletimetracker.domain.recordType.interactor.RecordTypeInteractor
1210
import com.example.util.simpletimetracker.domain.record.interactor.RunningRecordInteractor
1311
import com.example.util.simpletimetracker.domain.record.model.Record
12+
import com.example.util.simpletimetracker.domain.recordTag.interactor.RecordTagInteractor
13+
import com.example.util.simpletimetracker.domain.recordType.interactor.RecordTypeInteractor
1414
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
1515
import com.example.util.simpletimetracker.feature_base_adapter.hint.HintViewData
1616
import com.example.util.simpletimetracker.feature_change_record.R
@@ -63,6 +63,7 @@ class ChangeRecordViewDataInteractor @Inject constructor(
6363
suspend fun getCommentsViewData(
6464
comment: String,
6565
typeId: Long,
66+
fromCommentChange: Boolean,
6667
): List<ViewHolderType> {
6768
data class Data(val timeStarted: Long, val comment: String)
6869

@@ -71,8 +72,10 @@ class ChangeRecordViewDataInteractor @Inject constructor(
7172
val isFavourite = favouriteCommentInteractor.get(comment) != null
7273

7374
ChangeRecordCommentFieldViewData(
74-
id = 1L, // Only one at the time.
75-
text = comment,
75+
// Only one at the time.
76+
id = 1L,
77+
// Do not update text if update coming from typing.
78+
text = if (fromCommentChange) null else comment,
7679
iconColor = if (isFavourite) {
7780
resourceRepo.getColor(R.color.colorSecondary)
7881
} else {

features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordBaseViewModel.kt

+17-6
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ abstract class ChangeRecordBaseViewModel(
8080
return@lazy MutableLiveData<List<ViewHolderType>>().let { initial ->
8181
viewModelScope.launch {
8282
initializePreviewViewData()
83-
initial.value = loadCommentsViewData()
83+
initial.value = loadCommentsViewData(fromCommentChange = false)
8484
}
8585
initial
8686
}
@@ -338,15 +338,21 @@ abstract class ChangeRecordBaseViewModel(
338338
}
339339

340340
fun onCommentClick(item: ChangeRecordCommentViewData) {
341-
onCommentChange(item.text)
341+
viewModelScope.launch {
342+
if (item.text != newComment) {
343+
newComment = item.text
344+
updatePreview()
345+
updateCommentsViewData()
346+
}
347+
}
342348
}
343349

344350
fun onCommentChange(comment: String) {
345351
viewModelScope.launch {
346352
if (comment != newComment) {
347353
newComment = comment
348354
updatePreview()
349-
updateCommentsViewData()
355+
updateCommentsViewData(fromCommentChange = true)
350356
}
351357
}
352358
}
@@ -845,17 +851,22 @@ abstract class ChangeRecordBaseViewModel(
845851
)
846852
}
847853

848-
private fun updateCommentsViewData() {
854+
private fun updateCommentsViewData(
855+
fromCommentChange: Boolean = false,
856+
) {
849857
searchLoadJob?.cancel()
850858
searchLoadJob = viewModelScope.launch {
851-
comments.set(loadCommentsViewData())
859+
comments.set(loadCommentsViewData(fromCommentChange))
852860
}
853861
}
854862

855-
private suspend fun loadCommentsViewData(): List<ViewHolderType> {
863+
private suspend fun loadCommentsViewData(
864+
fromCommentChange: Boolean,
865+
): List<ViewHolderType> {
856866
return changeRecordViewDataInteractor.getCommentsViewData(
857867
comment = newComment,
858868
typeId = newTypeId,
869+
fromCommentChange = fromCommentChange,
859870
)
860871
}
861872

features/feature_main/src/main/java/com/example/util/simpletimetracker/feature_main/view/MainFragment.kt

-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ class MainFragment : BaseFragment<Binding>() {
7979
}
8080

8181
private fun setupPager() = with(binding) {
82-
mainPager.isSaveEnabled = false // See BaseFragment.
8382
mainPager.adapter = SafeFragmentStateAdapter(
8483
MainContentAdapter(
8584
fragment = this@MainFragment,

features/feature_notification/src/main/AndroidManifest.xml

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<action android:name="com.razeeman.util.simpletimetracker.ACTION_STOP_LONGEST_ACTIVITY" />
2323
<action android:name="com.razeeman.util.simpletimetracker.ACTION_RESTART_ACTIVITY" />
2424
<action android:name="com.razeeman.util.simpletimetracker.ACTION_ADD_RECORD" />
25+
<action android:name="com.razeeman.util.simpletimetracker.ACTION_CHANGE_RECORD" />
2526

2627
<action android:name="android.app.action.SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED" />
2728
</intent-filter>

features/feature_records/src/main/java/com/example/util/simpletimetracker/feature_records/view/RecordsContainerFragment.kt

-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ class RecordsContainerFragment :
5555

5656
override fun initUi(): Unit = with(binding) {
5757
pagerRecordsContainer.apply {
58-
isSaveEnabled = false // See BaseFragment.
5958
adapter = SafeFragmentStateAdapter(
6059
RecordsContainerAdapter(this@RecordsContainerFragment),
6160
)

features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/view/StatisticsContainerFragment.kt

-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ class StatisticsContainerFragment :
5353

5454
override fun initUi(): Unit = with(binding) {
5555
pagerStatisticsContainer.apply {
56-
isSaveEnabled = false // See BaseFragment.
5756
adapter = SafeFragmentStateAdapter(
5857
StatisticsContainerAdapter(this@StatisticsContainerFragment),
5958
)

metadata/en-US/changelogs/93.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
- Add activity suggestions available from Additional settings
2+
- Add negative goals
3+
- Add more detailed statistics
4+
- Add more quick actions to edit records
5+
- Add more intents for automated tracking
6+
- General bug fixes and improvements

resources/src/main/res/values-de/strings.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ Beispiel:<br/>
421421
<string name="message_import_complete">Import abgeschlossen</string>
422422
<string name="message_import_complete_hint">Hinzugefügte Datensätze: %s</string>
423423
<string name="message_import_error">Importfehler</string>
424-
<string name="message_action_share">Aktie</string>
424+
<string name="message_action_share">Teilen</string>
425425
<string name="message_automatic_backup_error">Bei der automatischen Sicherung ist ein Fehler aufgetreten.</string>
426426
<string name="message_automatic_export_error">Beim automatischen Export ist ein Fehler aufgetreten.</string>
427427
<string name="message_automatic_error_hint">Versuchen Sie, einen anderen Ort auszuwählen</string>
@@ -605,4 +605,4 @@ Beispiel:<br/>
605605
<string name="wear_settings_title">Einstellungen</string>
606606
<string name="wear_settings_title_show_compact_list">Kompakte Liste anzeigen</string>
607607

608-
</resources>
608+
</resources>

0 commit comments

Comments
 (0)