Skip to content

Commit d0ae83b

Browse files
committed
fix : AlarmReceiver 수정
1 parent fb9ec03 commit d0ae83b

File tree

5 files changed

+83
-50
lines changed

5 files changed

+83
-50
lines changed

presentation/src/main/java/com/stop/alarm/AlarmFunctions.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import android.app.NotificationManager
55
import android.content.Context
66
import com.stop.makeFullTime
77
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_NOTIFICATION_ID
8-
import com.stop.util.getAlarmReceiverPendingIntent
98
import com.stop.util.getAlarmSettingNotification
109
import com.stop.util.getAlarmSettingPendingIntent
10+
import com.stop.util.getAlarmStartPendingIntent
1111

1212
class AlarmFunctions(
1313
private val context: Context
@@ -22,7 +22,7 @@ class AlarmFunctions(
2222
)
2323
notificationManager.notify(ALARM_NOTIFICATION_ID, alarmSettingNotification)
2424

25-
val alarmReceiverPendingIntent = context.getAlarmReceiverPendingIntent()
25+
val alarmReceiverPendingIntent = context.getAlarmStartPendingIntent()
2626

2727
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
2828
alarmManager.setExactAndAllowWhileIdle(
@@ -34,7 +34,7 @@ class AlarmFunctions(
3434

3535
fun cancelAlarm() {
3636
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
37-
val alarmReceiverPendingIntent = context.getAlarmReceiverPendingIntent()
37+
val alarmReceiverPendingIntent = context.getAlarmStartPendingIntent()
3838

3939
alarmManager.cancel(alarmReceiverPendingIntent)
4040

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,65 @@
11
package com.stop.alarm
22

3-
import android.app.NotificationChannel
43
import android.app.NotificationManager
5-
import android.app.PendingIntent
64
import android.content.BroadcastReceiver
75
import android.content.Context
86
import android.content.Intent
9-
import androidx.core.app.NotificationCompat
10-
import com.stop.alarm.LastTimeCheckWorker.Companion.NOTIFICATION_ID
117
import com.stop.MainActivity
128
import com.stop.R
139
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
1417

1518
class AlarmReceiver : BroadcastReceiver() {
1619

1720
override fun onReceive(context: Context, intent: Intent) {
18-
val alarmCode = intent.extras?.getInt("ALARM_CODE") ?: -1
21+
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
22+
notificationManager.cancel(ALARM_NOTIFICATION_ID)
1923

2024
val soundServiceIntent = Intent(context, SoundService::class.java)
25+
val content = context.getString(R.string.alarm_content_text)
2126

22-
if (isMoreThanOreo()) {
23-
context.startForegroundService(soundServiceIntent)
24-
25-
val id = context.getString(R.string.notification_channel_id)
26-
val name = context.getString(R.string.notification_channel_name)
27-
28-
val notificationManager = context.getSystemService(NotificationManager::class.java)
29-
if (notificationManager.getNotificationChannel(id) == null) {
30-
NotificationChannel(id, name, NotificationManager.IMPORTANCE_HIGH).apply {
31-
notificationManager.createNotificationChannel(this)
32-
}
27+
if (context.isScreenOn()) {
28+
if (isMoreThanOreo()) {
29+
context.startForegroundService(soundServiceIntent)
30+
} else {
31+
context.startService(soundServiceIntent)
3332
}
3433

35-
val pendingIntent = PendingIntent.getActivity(context, alarmCode, Intent(context, MainActivity::class.java).apply {
36-
putExtra("ALARM_CODE", alarmCode)
37-
}, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
34+
val alarmStartPendingIntent = context.getAlarmReceiverPendingIntent()
35+
val alarmStartNotification = context.getAlarmScreenOnNotification(alarmStartPendingIntent, content)
3836

39-
val title = context.getString(R.string.notification_title)
40-
val content = context.getString(R.string.alarm_content_text)
37+
notificationManager.notify(ALARM_NOTIFICATION_ID, alarmStartNotification)
4138

42-
val builder = NotificationCompat.Builder(context, id)
43-
.setSmallIcon(R.mipmap.ic_bus)
44-
.setContentTitle(title)
45-
.setContentText(content)
46-
.setAutoCancel(true)
47-
.setPriority(NotificationCompat.PRIORITY_HIGH)
48-
.setCategory(NotificationCompat.CATEGORY_ALARM)
49-
.setFullScreenIntent(pendingIntent, true)
50-
51-
try {
52-
notificationManager.notify(NOTIFICATION_ID, builder.build())
53-
} catch (e: Exception) {
54-
e.printStackTrace()
55-
}
39+
/*Intent(context, MainActivity::class.java).apply {
40+
putExtra("ALARM_CODE", ALARM_CODE)
41+
context.startActivity(this)
42+
}*/
5643
} else {
57-
context.startService(soundServiceIntent)
44+
if (isMoreThanOreo()) {
45+
context.startForegroundService(soundServiceIntent)
5846

59-
Intent(context, MainActivity::class.java).apply {
60-
putExtra("ALARM_CODE", alarmCode)
61-
context.startActivity(this)
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+
}
6260
}
6361
}
62+
6463
}
6564

6665
}

presentation/src/main/java/com/stop/ui/map/MapFragment.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class MapFragment : Fragment(), MapHandler {
6969
}
7070

7171
private fun initBinding() {
72+
alarmViewModel.getAlarm()
7273
binding.lifecycleOwner = viewLifecycleOwner
7374
binding.alarmViewModel = alarmViewModel
7475
binding.placeSearchViewModel = placeSearchViewModel
@@ -137,8 +138,6 @@ class MapFragment : Fragment(), MapHandler {
137138

138139
val behavior = BottomSheetBehavior.from(binding.layoutHomeBottomSheet)
139140

140-
alarmViewModel.getAlarm()
141-
142141
alarmViewModel.isAlarmItemNotNull.asLiveData().observe(viewLifecycleOwner) {
143142
behavior.isDraggable = it
144143
}

presentation/src/main/java/com/stop/util/Context.kt

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.stop.util
22

3-
import android.app.Notification
4-
import android.app.NotificationChannel
5-
import android.app.NotificationManager
6-
import android.app.PendingIntent
3+
import android.app.*
74
import android.content.Context
85
import android.content.Intent
96
import android.content.res.Resources
@@ -48,7 +45,7 @@ fun Context.getAlarmSettingNotification(pendingIntent: PendingIntent, content: S
4845
.build()
4946
}
5047

51-
fun Context.getAlarmReceiverPendingIntent(): PendingIntent {
48+
fun Context.getAlarmStartPendingIntent(): PendingIntent {
5249
val intent = Intent(this, AlarmReceiver::class.java)
5350
intent.putExtra("ALARM_CODE", ALARM_CODE)
5451
return PendingIntent.getBroadcast(
@@ -59,14 +56,49 @@ fun Context.getAlarmReceiverPendingIntent(): PendingIntent {
5956
)
6057
}
6158

59+
fun Context.isThisAppRunning() =
60+
(getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager)
61+
.runningAppProcesses
62+
.firstOrNull()
63+
?.processName
64+
?.equals("com.stop")
65+
?: false
66+
6267
fun Context.isScreenOn() =
6368
(getSystemService(Context.POWER_SERVICE) as PowerManager).isInteractive
6469

65-
fun Context.getAlarmReceiverNotification(pendingIntent: PendingIntent, content: String): Notification {
70+
fun Context.getAlarmReceiverPendingIntent(): PendingIntent {
71+
val intent = Intent(this, MainActivity::class.java)
72+
intent.putExtra("ALARM_CODE", ALARM_CODE)
73+
return PendingIntent.getActivity(
74+
this,
75+
ALARM_CODE,
76+
intent,
77+
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
78+
)
79+
}
80+
81+
fun Context.getAlarmScreenOnNotification(pendingIntent: PendingIntent, content : String) : Notification{
6682
val id = applicationContext.getString(R.string.notification_channel_id)
6783
val name = applicationContext.getString(R.string.notification_channel_name)
6884
val title = applicationContext.getString(R.string.notification_title)
6985

86+
createDefaultNotificationChannel(applicationContext, id, name)
87+
88+
return NotificationCompat.Builder(applicationContext, id)
89+
.setContentTitle(title)
90+
.setContentText(content)
91+
.setSmallIcon(R.mipmap.ic_bus)
92+
.setAutoCancel(true)
93+
.setContentIntent(pendingIntent)
94+
.build()
95+
}
96+
97+
fun Context.getAlarmReceiverNotification(pendingIntent: PendingIntent, content: String): Notification {
98+
val id = applicationContext.getString(R.string.notification_channel_high_id)
99+
val name = applicationContext.getString(R.string.notification_channel_high_name)
100+
val title = applicationContext.getString(R.string.notification_title)
101+
70102
createHighNotificationChannel(applicationContext, id, name)
71103

72104
return NotificationCompat.Builder(applicationContext, id)
@@ -76,6 +108,7 @@ fun Context.getAlarmReceiverNotification(pendingIntent: PendingIntent, content:
76108
.setAutoCancel(true)
77109
.setPriority(NotificationCompat.PRIORITY_HIGH)
78110
.setCategory(NotificationCompat.CATEGORY_ALARM)
111+
.setContentIntent(pendingIntent)
79112
.setFullScreenIntent(pendingIntent, true)
80113
.build()
81114
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
<string name="delete_recent_search_text">최근기록 삭제</string>
4646
<string name="notification_channel_id">notification_channel_id</string>
4747
<string name="notification_channel_name">notification_channel_name</string>
48+
<string name="notification_channel_high_id">notification_channel_high_id</string>
49+
<string name="notification_channel_high_name">notification_channel_high_name</string>
4850
<string name="notification_title">막차 알림</string>
4951
<string name="alarm_cancel_text">취소하기</string>
5052
<string name="alarm_content_text">막차를 타러 이제 나가야해요~!!</string>

0 commit comments

Comments
 (0)