Skip to content

Commit 9ec526a

Browse files
authored
Merge pull request #83 from boostcampwm-2022/81-alarm-bug-fix
[PR] ์•Œ๋žŒ ์ผ๋ถ€ ๋ฒ„๊ทธ์ˆ˜์ • ใ… ใ… 
2 parents c5b73af + d4346e6 commit 9ec526a

20 files changed

+344
-136
lines changed

โ€Žpresentation/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
tools:targetApi="31">
2929

3030
<receiver
31-
android:name=".AlarmReceiver"
31+
android:name=".alarm.AlarmReceiver"
3232
android:enabled="true" />
3333

34-
<service android:name=".SoundService" />
34+
<service android:name=".alarm.SoundService" />
3535

3636
<provider
3737
android:name="androidx.startup.InitializationProvider"

โ€Žpresentation/src/main/java/com/stop/AlarmFunctions.kt

Lines changed: 0 additions & 48 deletions
This file was deleted.

โ€Žpresentation/src/main/java/com/stop/AlarmReceiver.kt

Lines changed: 0 additions & 63 deletions
This file was deleted.

โ€Žpresentation/src/main/java/com/stop/MainActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class MainActivity : AppCompatActivity() {
2525

2626
override fun onNewIntent(intent: Intent?) {
2727
super.onNewIntent(intent)
28+
setIntent(intent)
2829

2930
intent?.extras?.getInt("ALARM_CODE")?.let {
3031
if (it == ALARM_CODE) {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.stop.alarm
2+
3+
import android.app.AlarmManager
4+
import android.app.NotificationManager
5+
import android.content.Context
6+
import com.stop.makeFullTime
7+
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_NOTIFICATION_ID
8+
import com.stop.util.getAlarmSettingNotification
9+
import com.stop.util.getAlarmSettingPendingIntent
10+
import com.stop.util.getAlarmStartPendingIntent
11+
12+
class AlarmFunctions(
13+
private val context: Context
14+
) {
15+
fun callAlarm(lastTime: String, alarmTime: Int) {
16+
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
17+
18+
val alarmSettingPendingIntent = context.getAlarmSettingPendingIntent()
19+
val alarmSettingNotification = context.getAlarmSettingNotification(
20+
alarmSettingPendingIntent,
21+
"์•Œ๋žŒ์ด ๋ง‰์ฐจ์‹œ๊ฐ„ ${lastTime}์—์„œ ${alarmTime}์ „์— ์šธ๋ฆด์˜ˆ์ •์ž…๋‹ˆ๋‹ค."
22+
)
23+
notificationManager.notify(ALARM_NOTIFICATION_ID, alarmSettingNotification)
24+
25+
val alarmReceiverPendingIntent = context.getAlarmStartPendingIntent()
26+
27+
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
28+
alarmManager.setExactAndAllowWhileIdle(
29+
AlarmManager.RTC_WAKEUP,
30+
makeFullTime(lastTime).timeInMillis - (alarmTime * 60 * 1000),
31+
alarmReceiverPendingIntent
32+
)
33+
}
34+
35+
fun cancelAlarm() {
36+
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
37+
val alarmReceiverPendingIntent = context.getAlarmStartPendingIntent()
38+
39+
alarmManager.cancel(alarmReceiverPendingIntent)
40+
41+
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
42+
notificationManager.cancel(ALARM_NOTIFICATION_ID)
43+
}
44+
45+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.stop.alarm
2+
3+
import android.app.NotificationManager
4+
import android.content.BroadcastReceiver
5+
import android.content.Context
6+
import android.content.Intent
7+
import com.stop.MainActivity
8+
import com.stop.R
9+
import com.stop.isMoreThanOreo
10+
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_CODE
11+
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_NOTIFICATION_HIGH_ID
12+
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_NOTIFICATION_ID
13+
import com.stop.util.getAlarmReceiverNotification
14+
import com.stop.util.getAlarmReceiverPendingIntent
15+
import com.stop.util.getAlarmScreenOnNotification
16+
import com.stop.util.isScreenOn
17+
18+
class AlarmReceiver : BroadcastReceiver() {
19+
20+
override fun onReceive(context: Context, intent: Intent) {
21+
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
22+
notificationManager.cancel(ALARM_NOTIFICATION_ID)
23+
24+
val soundServiceIntent = Intent(context, SoundService::class.java)
25+
val content = context.getString(R.string.alarm_content_text)
26+
27+
if (context.isScreenOn()) {
28+
if (isMoreThanOreo()) {
29+
context.startForegroundService(soundServiceIntent)
30+
} else {
31+
context.startService(soundServiceIntent)
32+
}
33+
34+
val alarmStartPendingIntent = context.getAlarmReceiverPendingIntent()
35+
val alarmStartNotification = context.getAlarmScreenOnNotification(alarmStartPendingIntent, content)
36+
37+
notificationManager.notify(ALARM_NOTIFICATION_ID, alarmStartNotification)
38+
39+
/*Intent(context, MainActivity::class.java).apply {
40+
putExtra("ALARM_CODE", ALARM_CODE)
41+
context.startActivity(this)
42+
}*/
43+
} else {
44+
if (isMoreThanOreo()) {
45+
context.startForegroundService(soundServiceIntent)
46+
47+
val alarmStartPendingIntent = context.getAlarmReceiverPendingIntent()
48+
val alarmStartNotification = context.getAlarmReceiverNotification(
49+
alarmStartPendingIntent,
50+
content
51+
)
52+
53+
notificationManager.notify(ALARM_NOTIFICATION_HIGH_ID, alarmStartNotification)
54+
} else {
55+
context.startService(soundServiceIntent)
56+
Intent(context, MainActivity::class.java).apply {
57+
putExtra("ALARM_CODE", ALARM_CODE)
58+
context.startActivity(this)
59+
}
60+
}
61+
}
62+
63+
}
64+
65+
}

โ€Žpresentation/src/main/java/com/stop/LastTimeCheckWorker.kt renamed to โ€Žpresentation/src/main/java/com/stop/alarm/LastTimeCheckWorker.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.stop
1+
package com.stop.alarm
22

33
import android.app.NotificationChannel
44
import android.app.NotificationManager
@@ -9,8 +9,10 @@ import androidx.work.CoroutineWorker
99
import androidx.work.ForegroundInfo
1010
import androidx.work.WorkManager
1111
import androidx.work.WorkerParameters
12+
import com.stop.R
1213
import com.stop.domain.usecase.nearplace.GetNearPlacesUseCase
13-
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_CODE
14+
import com.stop.isMoreThanOreo
15+
import com.stop.makeFullTime
1416
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_TIME
1517
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.LAST_TIME
1618
import dagger.assisted.Assisted
@@ -91,8 +93,8 @@ class LastTimeCheckWorker @AssistedInject constructor(
9193

9294
if(lastTime != resultLastTime && resultLastTime != null){
9395
lastTime = resultLastTime
94-
alarmFunctions.cancelAlarm(ALARM_CODE)
95-
alarmFunctions.callAlarm(resultLastTime, alarmTime, ALARM_CODE)
96+
alarmFunctions.cancelAlarm()
97+
alarmFunctions.callAlarm(resultLastTime, alarmTime)
9698
}
9799

98100
val delayTime = getDelayTime()

โ€Žpresentation/src/main/java/com/stop/SoundService.kt renamed to โ€Žpresentation/src/main/java/com/stop/alarm/SoundService.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.stop
1+
package com.stop.alarm
22

33
import android.app.NotificationChannel
44
import android.app.NotificationManager
@@ -10,6 +10,7 @@ import android.os.*
1010
import androidx.core.app.NotificationCompat
1111
import androidx.lifecycle.LifecycleService
1212
import androidx.lifecycle.lifecycleScope
13+
import com.stop.*
1314
import com.stop.domain.usecase.alarm.DeleteAlarmUseCase
1415
import com.stop.domain.usecase.alarm.GetAlarmUseCase
1516
import dagger.hilt.android.AndroidEntryPoint

โ€Žpresentation/src/main/java/com/stop/di/AlarmModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.stop.di
22

33
import android.content.Context
44
import androidx.work.WorkManager
5-
import com.stop.AlarmFunctions
5+
import com.stop.alarm.AlarmFunctions
66
import dagger.Module
77
import dagger.Provides
88
import dagger.hilt.InstallIn

โ€Žpresentation/src/main/java/com/stop/ui/alarmsetting/AlarmSettingFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ class AlarmSettingFragment : Fragment() {
123123

124124
companion object {
125125
const val ALARM_CODE = 123
126+
const val ALARM_MAP_CODE = 122
127+
const val ALARM_NOTIFICATION_ID = 121
126128
const val LAST_TIME = "lastTime"
127129
const val ALARM_TIME = "alarmTime"
128130
}

0 commit comments

Comments
ย (0)