Skip to content

Commit ee48e21

Browse files
committed
feat : 지민 작업 noti 성공
1 parent c81c78f commit ee48e21

File tree

5 files changed

+117
-3
lines changed

5 files changed

+117
-3
lines changed

presentation/src/main/java/com/stop/ui/mission/MissionFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class MissionFragment : Fragment(), MissionHandler {
4949
initTMap()
5050
initView()
5151
setObserve()
52+
viewModel.makeMissionWorker("23:30:00")
5253
}
5354

5455
override fun onDestroyView() {

presentation/src/main/java/com/stop/ui/mission/MissionViewModel.kt

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package com.stop.ui.mission
22

33
import androidx.lifecycle.*
4+
import androidx.work.OneTimeWorkRequestBuilder
5+
import androidx.work.WorkManager
6+
import androidx.work.workDataOf
7+
import com.stop.LastTimeCheckWorker
48
import com.stop.domain.model.nowlocation.BusInfoUseCaseItem
59
import com.stop.domain.model.nowlocation.SubwayRouteLocationUseCaseItem
610
import com.stop.domain.model.route.tmap.RouteRequest
@@ -9,6 +13,7 @@ import com.stop.domain.usecase.nowlocation.GetNowStationLocationUseCase
913
import com.stop.domain.usecase.nowlocation.GetSubwayRouteUseCase
1014
import com.stop.domain.usecase.nowlocation.GetSubwayTrainNowStationUseCase
1115
import com.stop.model.Location
16+
import com.stop.ui.alarmsetting.AlarmSettingFragment
1217
import dagger.hilt.android.lifecycle.HiltViewModel
1318
import kotlinx.coroutines.Dispatchers
1419
import kotlinx.coroutines.delay
@@ -22,7 +27,8 @@ class MissionViewModel @Inject constructor(
2227
private val getBusNowLocationUseCase: GetBusNowLocationUseCase,
2328
private val getSubwayTrainNowStationUseCase: GetSubwayTrainNowStationUseCase,
2429
private val getNowStationLocationUseCase: GetNowStationLocationUseCase,
25-
private val getSubwayRouteUseCase: GetSubwayRouteUseCase
30+
private val getSubwayRouteUseCase: GetSubwayRouteUseCase,
31+
private val workManager: WorkManager
2632
) : ViewModel() {
2733

2834
private val random = Random(System.currentTimeMillis())
@@ -146,6 +152,32 @@ class MissionViewModel @Inject constructor(
146152
}
147153
}
148154

155+
fun makeMissionWorker(time: String) {
156+
val workData = workDataOf(
157+
AlarmSettingFragment.LAST_TIME to time,
158+
AlarmSettingFragment.ALARM_TIME to 0
159+
)
160+
161+
val workRequest = OneTimeWorkRequestBuilder<MissionWorker>()
162+
.setInputData(workData)
163+
.build()
164+
165+
workManager.enqueue(workRequest)
166+
}
167+
168+
fun makeAlarmWorker(time : String) {
169+
val workData = workDataOf(
170+
AlarmSettingFragment.LAST_TIME to time,
171+
AlarmSettingFragment.ALARM_TIME to 0
172+
)
173+
174+
val workRequest = OneTimeWorkRequestBuilder<LastTimeCheckWorker>()
175+
.setInputData(workData)
176+
.build()
177+
178+
workManager.enqueue(workRequest)
179+
}
180+
149181
companion object {
150182
private const val DELAY_TIME = 1000L
151183
private const val TIME_ZERO = 0
@@ -160,7 +192,7 @@ class MissionViewModel @Inject constructor(
160192

161193
private const val TEST_SUBWAY_NUMER = 4
162194
private const val LINE = "호선" //임시로.. 종성님이 어떻게 넘겨주시느냐에 따라 달림
163-
private const val TEST_TRAIN_NUMBER = "4591"
195+
private const val TEST_TRAIN_NUMBER = "4330"
164196

165197
private const val TEST_SUBWAY_LAT = "37.30973177"
166198
private const val TEST_SUBWAY_LONG = "126.85359515"
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.stop.ui.mission
2+
3+
import android.app.NotificationChannel
4+
import android.app.NotificationManager
5+
import android.content.Context
6+
import androidx.core.app.NotificationCompat
7+
import androidx.hilt.work.HiltWorker
8+
import androidx.work.CoroutineWorker
9+
import androidx.work.ForegroundInfo
10+
import androidx.work.WorkManager
11+
import androidx.work.WorkerParameters
12+
import com.stop.R
13+
import com.stop.domain.usecase.nearplace.GetNearPlacesUseCase
14+
import com.stop.isMoreThanOreo
15+
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_TIME
16+
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.LAST_TIME
17+
import dagger.assisted.Assisted
18+
import dagger.assisted.AssistedInject
19+
import kotlinx.coroutines.delay
20+
21+
@HiltWorker
22+
class MissionWorker @AssistedInject constructor(
23+
@Assisted context: Context,
24+
@Assisted workerParameters: WorkerParameters
25+
) : CoroutineWorker(context, workerParameters) {
26+
27+
private val notificationManager =
28+
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
29+
30+
override suspend fun doWork(): Result {
31+
setForeground(createForegroundInfo())
32+
33+
return Result.success()
34+
}
35+
36+
private fun createForegroundInfo(): ForegroundInfo {
37+
val id = applicationContext.getString(R.string.mission_notification_channel_id)
38+
val title = applicationContext.getString(R.string.mission_notification_title)
39+
val cancel = applicationContext.getString(R.string.alarm_cancel_text)
40+
41+
val intent = WorkManager.getInstance(applicationContext)
42+
.createCancelPendingIntent(getId())
43+
44+
createChannel(id)
45+
46+
val notification = NotificationCompat.Builder(applicationContext, id)
47+
.setContentTitle(title)
48+
.setTicker(title)
49+
.setContentText(NOTIFICATION_CONTENT)
50+
.setSmallIcon(R.mipmap.ic_bus)
51+
.setOngoing(true) // 사용자가 지우지 못하도록 막음
52+
.addAction(android.R.drawable.ic_delete, cancel, intent)
53+
.build()
54+
55+
return ForegroundInfo(NOTIFICATION_ID, notification)
56+
}
57+
58+
private fun createChannel(id: String) {
59+
if (isMoreThanOreo()) {
60+
if (notificationManager.getNotificationChannel(id) == null) {
61+
val name = applicationContext.getString(R.string.notification_channel_name)
62+
NotificationChannel(id, name, NotificationManager.IMPORTANCE_DEFAULT).apply {
63+
notificationManager.createNotificationChannel(this)
64+
}
65+
}
66+
}
67+
}
68+
69+
70+
71+
companion object {
72+
const val NOTIFICATION_ID = 12
73+
private const val NOTIFICATION_CONTENT = "사용자의 위치를 추적중입니다."
74+
}
75+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools"
55
android:id="@+id/nav_graph"
6-
app:startDestination="@id/mapFragment">
6+
app:startDestination="@id/missionFragment">
77

88
<fragment
99
android:id="@+id/mapFragment"

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,10 @@
5050
<string name="notification_title">막차 알림</string>
5151
<string name="alarm_cancel_text">취소하기</string>
5252
<string name="alarm_content_text">막차를 타러 이제 나가야해요~!!</string>
53+
54+
<string name="mission_notification_channel_id">mission_notification_channel_id</string>
55+
<string name="mission_notification_channel_name">mission_notification_channel_name</string>
56+
<string name="mission_notification_title">실시간 위치 추적중</string>
57+
<string name="mission_cancel_text">취소하기</string>
58+
<string name="mission_content_text">정류장까지 달려~!</string>
5359
</resources>

0 commit comments

Comments
 (0)