Skip to content

Commit 7c548a2

Browse files
committed
add intent to add record
1 parent f60d2fe commit 7c548a2

File tree

30 files changed

+143
-6
lines changed

30 files changed

+143
-6
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ const val ACTION_STOP_ALL_ACTIVITIES = "com.razeeman.util.simpletimetracker.ACTI
1212
const val ACTION_STOP_SHORTEST_ACTIVITY = "com.razeeman.util.simpletimetracker.ACTION_STOP_SHORTEST_ACTIVITY"
1313
const val ACTION_STOP_LONGEST_ACTIVITY = "com.razeeman.util.simpletimetracker.ACTION_STOP_LONGEST_ACTIVITY"
1414
const val ACTION_RESTART_ACTIVITY = "com.razeeman.util.simpletimetracker.ACTION_RESTART_ACTIVITY"
15+
const val ACTION_ADD_RECORD = "com.razeeman.util.simpletimetracker.ACTION_ADD_RECORD"
1516
const val EVENT_STARTED_ACTIVITY = "com.razeeman.util.simpletimetracker.EVENT_STARTED_ACTIVITY"
1617
const val EVENT_STOPPED_ACTIVITY = "com.razeeman.util.simpletimetracker.EVENT_STOPPED_ACTIVITY"
1718
const val EXTRA_ACTIVITY_NAME = "extra_activity_name"
1819
const val EXTRA_RECORD_COMMENT = "extra_record_comment"
19-
const val EXTRA_RECORD_TAG_NAME = "extra_record_tag"
20+
const val EXTRA_RECORD_TAG_NAME = "extra_record_tag"
21+
const val EXTRA_TIME_STARTED = "extra_record_time_started"
22+
const val EXTRA_TIME_ENDED = "extra_record_time_ended"

features/feature_notification/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<action android:name="com.razeeman.util.simpletimetracker.ACTION_STOP_SHORTEST_ACTIVITY" />
2222
<action android:name="com.razeeman.util.simpletimetracker.ACTION_STOP_LONGEST_ACTIVITY" />
2323
<action android:name="com.razeeman.util.simpletimetracker.ACTION_RESTART_ACTIVITY" />
24+
<action android:name="com.razeeman.util.simpletimetracker.ACTION_ADD_RECORD" />
2425

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

features/feature_notification/src/main/java/com/example/util/simpletimetracker/feature_notification/recevier/NotificationReceiver.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.content.BroadcastReceiver
55
import android.content.Context
66
import android.content.Intent
77
import com.example.util.simpletimetracker.core.extension.goAsync
8+
import com.example.util.simpletimetracker.core.utils.ACTION_ADD_RECORD
89
import com.example.util.simpletimetracker.core.utils.ACTION_RESTART_ACTIVITY
910
import com.example.util.simpletimetracker.core.utils.ACTION_START_ACTIVITY
1011
import com.example.util.simpletimetracker.core.utils.ACTION_STOP_ACTIVITY
@@ -14,6 +15,8 @@ import com.example.util.simpletimetracker.core.utils.ACTION_STOP_SHORTEST_ACTIVI
1415
import com.example.util.simpletimetracker.core.utils.EXTRA_ACTIVITY_NAME
1516
import com.example.util.simpletimetracker.core.utils.EXTRA_RECORD_COMMENT
1617
import com.example.util.simpletimetracker.core.utils.EXTRA_RECORD_TAG_NAME
18+
import com.example.util.simpletimetracker.core.utils.EXTRA_TIME_ENDED
19+
import com.example.util.simpletimetracker.core.utils.EXTRA_TIME_STARTED
1720
import com.example.util.simpletimetracker.domain.model.RecordTypeGoal
1821
import com.example.util.simpletimetracker.feature_notification.activity.controller.NotificationActivityBroadcastController
1922
import com.example.util.simpletimetracker.feature_notification.automaticBackup.controller.AutomaticBackupBroadcastController
@@ -154,6 +157,20 @@ class NotificationReceiver : BroadcastReceiver() {
154157
tagName = tagName,
155158
)
156159
}
160+
ACTION_ADD_RECORD -> {
161+
val name = intent.getStringExtra(EXTRA_ACTIVITY_NAME)
162+
val timeStarted = intent.getStringExtra(EXTRA_TIME_STARTED)
163+
val timeEnded = intent.getStringExtra(EXTRA_TIME_ENDED)
164+
val comment = intent.getStringExtra(EXTRA_RECORD_COMMENT)
165+
val tagName = intent.getStringExtra(EXTRA_RECORD_TAG_NAME)
166+
typeController.onActionRecordAdd(
167+
name = name,
168+
timeStarted = timeStarted,
169+
timeEnded = timeEnded,
170+
comment = comment,
171+
tagName = tagName,
172+
)
173+
}
157174
ACTION_NOTIFICATION_STOP -> {
158175
val typeId = intent.getLongExtra(ARGS_TYPE_ID, 0)
159176
typeController.onActionActivityStop(typeId)

features/feature_notification/src/main/java/com/example/util/simpletimetracker/feature_notification/recordType/controller/NotificationTypeBroadcastController.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,27 @@ class NotificationTypeBroadcastController @Inject constructor(
7373
}
7474
}
7575

76+
fun onActionRecordAdd(
77+
name: String?,
78+
timeStarted: String?,
79+
timeEnded: String?,
80+
comment: String?,
81+
tagName: String?,
82+
) {
83+
name ?: return
84+
timeStarted ?: return
85+
timeEnded ?: return
86+
GlobalScope.launch {
87+
activityStartStopFromBroadcastInteractor.onRecordAdd(
88+
name = name,
89+
timeStarted = timeStarted,
90+
timeEnded = timeEnded,
91+
comment = comment,
92+
tagName = tagName,
93+
)
94+
}
95+
}
96+
7697
fun onActionTypeClick(
7798
typeId: Long,
7899
selectedTypeId: Long,

features/feature_notification/src/main/java/com/example/util/simpletimetracker/feature_notification/recordType/interactor/ActivityStartStopFromBroadcastInteractor.kt

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,31 @@ package com.example.util.simpletimetracker.feature_notification.recordType.inter
22

33
import com.example.util.simpletimetracker.core.interactor.RecordRepeatInteractor
44
import com.example.util.simpletimetracker.domain.REPEAT_BUTTON_ITEM_ID
5+
import com.example.util.simpletimetracker.domain.interactor.AddRecordMediator
56
import com.example.util.simpletimetracker.domain.interactor.AddRunningRecordMediator
67
import com.example.util.simpletimetracker.domain.interactor.GetSelectableTagsInteractor
78
import com.example.util.simpletimetracker.domain.interactor.NotificationTypeInteractor
89
import com.example.util.simpletimetracker.domain.interactor.RecordInteractor
910
import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor
11+
import com.example.util.simpletimetracker.domain.interactor.RecordsUpdateInteractor
1012
import com.example.util.simpletimetracker.domain.interactor.RemoveRunningRecordMediator
1113
import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor
14+
import com.example.util.simpletimetracker.domain.model.Record
15+
import java.text.SimpleDateFormat
16+
import java.util.Locale
1217
import javax.inject.Inject
1318

1419
class ActivityStartStopFromBroadcastInteractor @Inject constructor(
1520
private val recordTypeInteractor: RecordTypeInteractor,
1621
private val addRunningRecordMediator: AddRunningRecordMediator,
22+
private val addRecordMediator: AddRecordMediator,
1723
private val removeRunningRecordMediator: RemoveRunningRecordMediator,
1824
private val runningRecordInteractor: RunningRecordInteractor,
1925
private val recordInteractor: RecordInteractor,
2026
private val notificationTypeInteractor: NotificationTypeInteractor,
2127
private val recordRepeatInteractor: RecordRepeatInteractor,
2228
private val getSelectableTagsInteractor: GetSelectableTagsInteractor,
29+
private val recordsUpdateInteractor: RecordsUpdateInteractor,
2330
) {
2431

2532
suspend fun onActionActivityStart(
@@ -94,6 +101,31 @@ class ActivityStartStopFromBroadcastInteractor @Inject constructor(
94101
)
95102
}
96103

104+
suspend fun onRecordAdd(
105+
name: String,
106+
timeStarted: String,
107+
timeEnded: String,
108+
comment: String?,
109+
tagName: String?,
110+
) {
111+
val typeId = getTypeIdByName(name) ?: return
112+
val newTimeStarted = parseTimestamp(timeStarted) ?: return
113+
val newTimeEnded = parseTimestamp(timeEnded) ?: return
114+
val tagId = findTagIdByName(tagName, typeId)
115+
116+
Record(
117+
id = 0, // Zero creates new record.
118+
typeId = typeId,
119+
timeStarted = newTimeStarted,
120+
timeEnded = newTimeEnded,
121+
comment = comment.orEmpty(),
122+
tagIds = listOfNotNull(tagId),
123+
).let {
124+
addRecordMediator.add(it)
125+
recordsUpdateInteractor.send()
126+
}
127+
}
128+
97129
suspend fun onActionTypeClick(
98130
typeId: Long,
99131
selectedTypeId: Long,
@@ -147,4 +179,26 @@ class ActivityStartStopFromBroadcastInteractor @Inject constructor(
147179
return getSelectableTagsInteractor.execute(typeId)
148180
.firstOrNull { it.name == name && !it.archived }?.id
149181
}
182+
183+
/**
184+
* Supported formats:
185+
* [dateTimeFormat],
186+
* UTC timestamp in milliseconds.
187+
*/
188+
private fun parseTimestamp(timeString: String): Long? {
189+
return parseDateTime(timeString)
190+
?: timeString.toLongOrNull()
191+
}
192+
193+
private fun parseDateTime(timeString: String): Long? {
194+
return synchronized(dateTimeFormat) {
195+
runCatching {
196+
dateTimeFormat.parse(timeString)
197+
}.getOrNull()?.time
198+
}
199+
}
200+
201+
companion object {
202+
private val dateTimeFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US)
203+
}
150204
}

features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/mapper/SettingsMapper.kt

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.example.util.simpletimetracker.core.interactor.LanguageInteractor
55
import com.example.util.simpletimetracker.core.mapper.TimeMapper
66
import com.example.util.simpletimetracker.core.provider.ApplicationDataProvider
77
import com.example.util.simpletimetracker.core.repo.ResourceRepo
8+
import com.example.util.simpletimetracker.core.utils.ACTION_ADD_RECORD
89
import com.example.util.simpletimetracker.core.utils.ACTION_RESTART_ACTIVITY
910
import com.example.util.simpletimetracker.core.utils.ACTION_START_ACTIVITY
1011
import com.example.util.simpletimetracker.core.utils.ACTION_STOP_ACTIVITY
@@ -16,6 +17,8 @@ import com.example.util.simpletimetracker.core.utils.EVENT_STOPPED_ACTIVITY
1617
import com.example.util.simpletimetracker.core.utils.EXTRA_ACTIVITY_NAME
1718
import com.example.util.simpletimetracker.core.utils.EXTRA_RECORD_COMMENT
1819
import com.example.util.simpletimetracker.core.utils.EXTRA_RECORD_TAG_NAME
20+
import com.example.util.simpletimetracker.core.utils.EXTRA_TIME_ENDED
21+
import com.example.util.simpletimetracker.core.utils.EXTRA_TIME_STARTED
1922
import com.example.util.simpletimetracker.domain.extension.orZero
2023
import com.example.util.simpletimetracker.domain.interactor.DarkMode
2124
import com.example.util.simpletimetracker.domain.model.CardOrder
@@ -99,9 +102,8 @@ class SettingsMapper @Inject constructor(
99102
)
100103

101104
fun toAutomatedTrackingHelpDialog(): HelpDialogParams {
102-
return HelpDialogParams(
103-
title = resourceRepo.getString(R.string.settings_automated_tracking),
104-
text = resourceRepo.getString(
105+
val mainText = runCatching {
106+
resourceRepo.getString(
105107
R.string.settings_automated_tracking_text,
106108
).format(
107109
ACTION_START_ACTIVITY,
@@ -114,7 +116,17 @@ class SettingsMapper @Inject constructor(
114116
ACTION_STOP_SHORTEST_ACTIVITY,
115117
ACTION_STOP_LONGEST_ACTIVITY,
116118
ACTION_RESTART_ACTIVITY,
117-
) + "<br/>" + resourceRepo.getString(
119+
ACTION_ADD_RECORD,
120+
EXTRA_ACTIVITY_NAME,
121+
EXTRA_RECORD_COMMENT,
122+
EXTRA_RECORD_TAG_NAME,
123+
EXTRA_TIME_STARTED,
124+
EXTRA_TIME_ENDED,
125+
)
126+
}.getOrNull().orEmpty()
127+
128+
val sendEventsText = runCatching {
129+
resourceRepo.getString(
118130
R.string.settings_automated_tracking_send_events_text,
119131
).format(
120132
resourceRepo.getString(R.string.settings_automated_tracking_send_events),
@@ -123,7 +135,12 @@ class SettingsMapper @Inject constructor(
123135
EXTRA_ACTIVITY_NAME,
124136
EXTRA_RECORD_COMMENT,
125137
EXTRA_RECORD_TAG_NAME,
126-
),
138+
)
139+
}.getOrNull().orEmpty()
140+
141+
return HelpDialogParams(
142+
title = resourceRepo.getString(R.string.settings_automated_tracking),
143+
text = "$mainText<br/>$sendEventsText",
127144
)
128145
}
129146

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@
348348
<b>Action</b> - \"%s\".<br/>
349349
<b>Action</b> - \"%s\".<br/>
350350
<b>Action</b> - \"%s\".<br/>
351+
<b>Action</b> - \"%s\" مع الإضافات: \"%s\"، \"%s\"، \"%s\" و \"%s\"، \"%s\" بالتنسيق \"yyyy-MM-dd HH:mm:ss\" أو الطابع الزمني UTC.<br/>
351352
]]></string>
352353
<string name="settings_automated_tracking_send_events">إرسال اﻷحداث</string>
353354
<string name="settings_automated_tracking_send_events_text"><![CDATA[

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ Addicional:<br/>
348348
<b>Action</b> - \"%s\".<br/>
349349
<b>Action</b> - \"%s\".<br/>
350350
<b>Action</b> - \"%s\".<br/>
351+
<b>Action</b> - \"%s\" amb extres: \"%s\", \"%s\", \"%s\" i \"%s\", \"%s\" en el format \"aaaa-MM-dd HH:mm:ss\" o marca d\'hora UTC.<br/>
351352
]]></string>
352353
<string name="settings_automated_tracking_send_events">Envia esdeveniments</string>
353354
<string name="settings_automated_tracking_send_events_text"><![CDATA[

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ Zusätzlich:<br/>
348348
<b>Action</b> - \"%s\".<br/>
349349
<b>Action</b> - \"%s\".<br/>
350350
<b>Action</b> - \"%s\".<br/>
351+
<b>Action</b> – \"%s\" mit Extras: \"%s\", \"%s\", \"%s\" und \"%s\", \"%s\" im Format „jjjj-MM-tt HH:mm:ss“ oder UTC-Zeitstempel.<br/>
351352
]]></string>
352353
<string name="settings_automated_tracking_send_events">Ereignisse senden</string>
353354
<string name="settings_automated_tracking_send_events_text"><![CDATA[

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ Adicional:<br/>
348348
<b>Action</b> - \"%s\".<br/>
349349
<b>Action</b> - \"%s\".<br/>
350350
<b>Action</b> - \"%s\".<br/>
351+
<b>Action</b> - \"%s\" con extras: \"%s\", \"%s\", \"%s\" y \"%s\", \"%s\" en el formato \"yyyy-MM-dd HH:mm:ss\" o marca de tiempo UTC.<br/>
351352
]]></string>
352353
<string name="settings_automated_tracking_send_events">Enviar eventos</string>
353354
<string name="settings_automated_tracking_send_events_text"><![CDATA[

0 commit comments

Comments
 (0)