Skip to content

Commit c09b34b

Browse files
committed
Merge pull request #544 from TeamSparker/release-1.0.2
Release 1.0.2
2 parents 5efe74a + 5cdb7a9 commit c09b34b

File tree

9 files changed

+141
-25
lines changed

9 files changed

+141
-25
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
| 이창환 | 조재훈 | 이호재 | 손연주 |
2121
|:-------:|:-------:|:-------:|:-------:|
2222
|<img src="https://user-images.githubusercontent.com/91423342/148880108-08dddb1c-a862-4e1d-b0fd-4a33d4a4c2e8.jpeg" width="200" height="200"/> | <img src="https://user-images.githubusercontent.com/91423342/148880154-7848c470-824d-4198-aece-4940ad808ba8.png" width="200" height="200"/> | <img src="https://user-images.githubusercontent.com/91423342/148880221-86ea677f-d272-464c-9b67-90ae31620f3e.jpeg" width="200" height="200"/> | <img src="https://user-images.githubusercontent.com/91423342/148880265-18fd3045-96e7-4984-9497-39c971295a7a.png" width="200" height="200"/> |
23-
| 홈, 방생성 역할 담당 | 습관방 역할 담당 | 보관함 역할 담당 | 온보딩 , 로그인 , 피드 역할 담당|
23+
| 홈, 방생성 역할 담당 | 습관방 역할 담당 | 온보딩 , 보관함 역할 담당 | 로그인 , 피드 역할 담당|
2424

2525
## ⚡️팀 협업 방식
2626
### 🔥Branch 전략

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ android {
1515
applicationId "com.teamsparker.android"
1616
minSdk 26
1717
targetSdk 31
18-
versionCode 3
19-
versionName "1.0.1"
18+
versionCode 4
19+
versionName "1.0.2"
2020

2121
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
2222
}

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
android:fullBackupOnly="false"
2222
android:icon="@mipmap/ic_app_logo"
2323
android:label="@string/app_name"
24+
android:launchMode="singleInstance"
2425
android:roundIcon="@mipmap/ic_app_logo_round"
2526
android:supportsRtl="true"
2627
android:theme="@style/Theme.SparkAndroid">

app/src/main/java/com/teamsparker/android/SparkApplication.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.app.Application
44
import com.kakao.sdk.common.KakaoSdk
55
import com.kakao.sdk.common.util.Utility
66
import com.teamsparker.android.data.remote.LocalPreferences
7+
import com.teamsparker.android.util.CheckForeground
78
import dagger.hilt.android.HiltAndroidApp
89
import timber.log.Timber
910

@@ -18,6 +19,8 @@ class SparkApplication : Application() {
1819
KakaoSdk.init(this, getString(R.string.kakao_native_app_key))
1920
// Kakao 키 해시 호출하기
2021
Timber.tag("kakao_keyHash").d(Utility.getKeyHash(this))
22+
// Foreground, Background 감지 클래스 초기화
23+
CheckForeground.init(this@SparkApplication)
2124
}
2225

2326
private fun initTimber() {

app/src/main/java/com/teamsparker/android/SparkMessagingService.kt

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,14 @@ import androidx.core.app.NotificationCompat
1010
import com.google.firebase.messaging.FirebaseMessagingService
1111
import com.google.firebase.messaging.RemoteMessage
1212
import com.teamsparker.android.ui.intro.IntroActivity
13+
import com.teamsparker.android.ui.main.MainActivity
1314
import com.teamsparker.android.util.ImageCropUtil
15+
import com.teamsparker.android.util.NotificationCategory
1416
import com.teamsparker.android.util.useBitmapImg
1517
import timber.log.Timber
1618
import java.lang.IllegalArgumentException
1719

1820
class SparkMessagingService : FirebaseMessagingService() {
19-
data class NotificationCategory(
20-
val summaryId: Int,
21-
val groupName: String
22-
)
2321

2422
override fun onNewToken(token: String) {
2523
super.onNewToken(token)
@@ -29,10 +27,14 @@ class SparkMessagingService : FirebaseMessagingService() {
2927
override fun onMessageReceived(remoteMessage: RemoteMessage) {
3028
super.onMessageReceived(remoteMessage)
3129
if (remoteMessage.data.isNotEmpty()) {
32-
if (remoteMessage.data["imageUrl"].toString().isNotBlank()) {
33-
transformImageUrlToBitmap(remoteMessage)
34-
} else {
35-
createNotificationWithoutImage(remoteMessage)
30+
when (remoteMessage.data["category"].toString()) {
31+
NotificationCategory.CERTIFICATION.category ->
32+
transformImageUrlToBitmap(remoteMessage)
33+
NotificationCategory.SPARK.category,
34+
NotificationCategory.REMIND.category,
35+
NotificationCategory.ROOM_START.category,
36+
NotificationCategory.CONSIDER.category ->
37+
createNotificationWithoutImage(remoteMessage)
3638
}
3739
}
3840
}
@@ -52,11 +54,20 @@ class SparkMessagingService : FirebaseMessagingService() {
5254
private fun createNotificationWithoutImage(remoteMessage: RemoteMessage) {
5355
val alarmId = remoteMessage.sentTime.toInt()
5456
val category = remoteMessage.data["category"].toString()
57+
val roomId = requireNotNull(remoteMessage.data["roomId"]).toInt()
5558
val intent = Intent(this, IntroActivity::class.java).apply {
5659
putExtra(OPEN_FROM_PUSH_ALARM, category)
60+
putExtra(ROOM_ID, roomId)
61+
flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP
5762
}
63+
5864
val pendingIntent =
59-
PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)
65+
PendingIntent.getActivity(
66+
this,
67+
0,
68+
intent,
69+
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
70+
)
6071
val builder =
6172
NotificationCompat.Builder(this, getChannelId(category))
6273
.setContentTitle(remoteMessage.data["title"].toString())
@@ -74,9 +85,16 @@ class SparkMessagingService : FirebaseMessagingService() {
7485
val category = remoteMessage.data["category"].toString()
7586
val intent = Intent(this, IntroActivity::class.java).apply {
7687
putExtra(OPEN_FROM_PUSH_ALARM, category)
88+
flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP
7789
}
90+
7891
val pendingIntent =
79-
PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)
92+
PendingIntent.getActivity(
93+
this,
94+
0,
95+
intent,
96+
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
97+
)
8098
val builder = NotificationCompat.Builder(this, getChannelId(category))
8199
.setContentTitle(remoteMessage.data["title"].toString())
82100
.setContentText(remoteMessage.data["body"].toString())
@@ -119,20 +137,16 @@ class SparkMessagingService : FirebaseMessagingService() {
119137
}
120138

121139
private fun getSummaryId(category: String) = when (category) {
122-
CATEGORY_CERTIFICATION.groupName -> CATEGORY_CERTIFICATION.summaryId
123-
CATEGORY_SPARK.groupName -> CATEGORY_SPARK.summaryId
124-
CATEGORY_REMIND.groupName -> CATEGORY_REMIND.summaryId
125-
CATEGORY_ROOM_START.groupName -> CATEGORY_ROOM_START.summaryId
126-
CATEGORY_CONSIDER.groupName -> CATEGORY_CONSIDER.summaryId
140+
NotificationCategory.CERTIFICATION.category -> NotificationCategory.CERTIFICATION.summaryId
141+
NotificationCategory.SPARK.category -> NotificationCategory.SPARK.summaryId
142+
NotificationCategory.REMIND.category -> NotificationCategory.REMIND.summaryId
143+
NotificationCategory.ROOM_START.category -> NotificationCategory.ROOM_START.summaryId
144+
NotificationCategory.CONSIDER.category -> NotificationCategory.CONSIDER.summaryId
127145
else -> throw IllegalArgumentException("FCM category 필드 오류")
128146
}
129147

130148
companion object {
131149
const val OPEN_FROM_PUSH_ALARM = "openPushAlarm"
132-
private val CATEGORY_CERTIFICATION = NotificationCategory(0, "certification")
133-
private val CATEGORY_SPARK = NotificationCategory(1, "spark")
134-
private val CATEGORY_REMIND = NotificationCategory(2, "remind")
135-
private val CATEGORY_ROOM_START = NotificationCategory(3, "roomStart")
136-
private val CATEGORY_CONSIDER = NotificationCategory(4, "consider")
150+
const val ROOM_ID = "roomId"
137151
}
138152
}

app/src/main/java/com/teamsparker/android/ui/intro/IntroActivity.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@ import android.net.Uri
66
import android.os.Bundle
77
import androidx.activity.viewModels
88
import com.teamsparker.android.R
9+
import com.teamsparker.android.SparkMessagingService
910
import com.teamsparker.android.SparkMessagingService.Companion.OPEN_FROM_PUSH_ALARM
1011
import com.teamsparker.android.databinding.ActivityIntroBinding
1112
import com.teamsparker.android.ui.base.BaseActivity
1213
import com.teamsparker.android.ui.main.MainActivity
1314
import com.teamsparker.android.ui.onboarding.OnBoardingActivity
15+
import com.teamsparker.android.util.CheckForeground
1416
import com.teamsparker.android.util.DialogUtil
1517
import com.teamsparker.android.util.DialogUtil.Companion.UPDATE_CHECK
1618
import com.teamsparker.android.util.FirebaseLogUtil
19+
import com.teamsparker.android.util.NotificationCategory
1720
import com.teamsparker.android.util.initStatusBarColor
1821
import dagger.hilt.android.AndroidEntryPoint
1922

@@ -23,6 +26,9 @@ class IntroActivity : BaseActivity<ActivityIntroBinding>(R.layout.activity_intro
2326

2427
override fun onCreate(savedInstanceState: Bundle?) {
2528
super.onCreate(savedInstanceState)
29+
if (CheckForeground.isForeground()) {
30+
moveToMainActivity()
31+
}
2632
initStatusBarColor(R.color.spark_more_deep_gray)
2733
checkOpenFromPushAlarm()
2834
introViewModel.versionCheck()
@@ -93,6 +99,13 @@ class IntroActivity : BaseActivity<ActivityIntroBinding>(R.layout.activity_intro
9399

94100
private fun moveToMainActivity() {
95101
startActivity(Intent(this, MainActivity::class.java).apply {
102+
putExtra(OPEN_FROM_PUSH_ALARM, intent.getStringExtra(OPEN_FROM_PUSH_ALARM))
103+
if (intent.getStringExtra(OPEN_FROM_PUSH_ALARM) != NotificationCategory.CERTIFICATION.category) {
104+
putExtra(
105+
SparkMessagingService.ROOM_ID,
106+
intent.getIntExtra(SparkMessagingService.ROOM_ID, -1)
107+
)
108+
}
96109
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
97110
})
98111
finish()

app/src/main/java/com/teamsparker/android/ui/main/MainActivity.kt

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ import androidx.core.app.ActivityCompat
88
import androidx.navigation.NavController
99
import androidx.navigation.fragment.NavHostFragment
1010
import com.teamsparker.android.R
11+
import com.teamsparker.android.SparkMessagingService.Companion.OPEN_FROM_PUSH_ALARM
12+
import com.teamsparker.android.SparkMessagingService.Companion.ROOM_ID
1113
import com.teamsparker.android.databinding.ActivityMainBinding
1214
import com.teamsparker.android.ui.base.BaseActivity
1315
import com.teamsparker.android.ui.certify.CertifyActivity.Companion.FROM_CERTIFY_ACTIVITY
1416
import com.teamsparker.android.ui.feed.FeedFragmentDirections
1517
import com.teamsparker.android.ui.feedreport.FeedReportActivity.Companion.FEED_REPORT_SUCCESS
1618
import com.teamsparker.android.ui.feedreport.FeedReportActivity.Companion.FROM_FEED_REPORT_ACTIVITY
19+
import com.teamsparker.android.ui.habit.HabitActivity
1720
import com.teamsparker.android.ui.home.HomeMainFragmentDirections
1821
import com.teamsparker.android.ui.joincode.inputcode.InputCodeFragmentDialog
1922
import com.teamsparker.android.ui.main.viewmodel.MainViewModel
@@ -24,6 +27,7 @@ import com.teamsparker.android.ui.makeroom.MakeRoomActivity
2427
import com.teamsparker.android.ui.storage.StorageFragmentDirections
2528
import com.teamsparker.android.util.AnimationUtil
2629
import com.teamsparker.android.ui.storage.photo.StoragePhotoCollectionActivity.Companion.FROM_STORAGE_PHOTO_COLLECTION_ACTIVITY
30+
import com.teamsparker.android.util.NotificationCategory
2731
import com.teamsparker.android.util.getToast
2832
import com.teamsparker.android.util.initStatusBarColor
2933
import com.teamsparker.android.util.initStatusBarTextColorToWhite
@@ -57,8 +61,24 @@ class MainActivity : BaseActivity<ActivityMainBinding>(R.layout.activity_main) {
5761

5862
override fun onResume() {
5963
super.onResume()
60-
mainViewModel.initTabPositionHome()
61-
initTabPositionFromOthers()
64+
if (intent.getStringExtra(OPEN_FROM_PUSH_ALARM) != null) {
65+
when (intent.getStringExtra(OPEN_FROM_PUSH_ALARM)) {
66+
NotificationCategory.CERTIFICATION.category -> {
67+
mainViewModel.initTabPositionFeed()
68+
intent.removeExtra(OPEN_FROM_PUSH_ALARM)
69+
}
70+
NotificationCategory.SPARK.category,
71+
NotificationCategory.REMIND.category,
72+
NotificationCategory.ROOM_START.category,
73+
NotificationCategory.CONSIDER.category -> {
74+
mainViewModel.initTabPositionHome()
75+
moveAfterOpenPushAlarm()
76+
}
77+
}
78+
} else {
79+
mainViewModel.initTabPositionHome()
80+
initTabPositionFromOthers()
81+
}
6282
}
6383

6484
override fun onBackPressed() {
@@ -215,6 +235,21 @@ class MainActivity : BaseActivity<ActivityMainBinding>(R.layout.activity_main) {
215235
}
216236
}
217237

238+
private fun moveAfterOpenPushAlarm() {
239+
when (intent.getStringExtra(OPEN_FROM_PUSH_ALARM)) {
240+
NotificationCategory.SPARK.category,
241+
NotificationCategory.REMIND.category,
242+
NotificationCategory.ROOM_START.category,
243+
NotificationCategory.CONSIDER.category -> {
244+
startActivity(Intent(this, HabitActivity::class.java).apply {
245+
putExtra(ROOM_ID, intent.getIntExtra(ROOM_ID, -1))
246+
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
247+
})
248+
}
249+
}
250+
intent.removeExtra(OPEN_FROM_PUSH_ALARM)
251+
}
252+
218253
companion object {
219254
private const val BACK_BTN_WAIT_TIME = 2000L
220255
const val FROM_WHERE = "fromWhere"
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.teamsparker.android.util
2+
3+
import android.app.Activity
4+
import android.app.Application
5+
import android.os.Bundle
6+
import timber.log.Timber
7+
8+
9+
object CheckForeground : Application.ActivityLifecycleCallbacks {
10+
private var instance: CheckForeground? = null
11+
12+
private var activityCount = 0
13+
14+
fun init(app: Application) {
15+
if (instance == null) {
16+
instance = CheckForeground
17+
app.registerActivityLifecycleCallbacks(instance)
18+
}
19+
}
20+
21+
fun isForeground(): Boolean = activityCount >= 1
22+
23+
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
24+
25+
override fun onActivityStarted(activity: Activity) {
26+
activityCount++
27+
}
28+
29+
override fun onActivityResumed(activity: Activity) {}
30+
31+
override fun onActivityPaused(activity: Activity) {}
32+
33+
override fun onActivityStopped(activity: Activity) {
34+
activityCount--
35+
}
36+
37+
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
38+
39+
override fun onActivityDestroyed(activity: Activity) {}
40+
41+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.teamsparker.android.util
2+
3+
enum class NotificationCategory(val summaryId: Int, val category: String) {
4+
CERTIFICATION(0, "certification"),
5+
SPARK(1, "spark"),
6+
REMIND(2, "remind"),
7+
ROOM_START(3, "roomStart"),
8+
CONSIDER(4, "consider")
9+
}

0 commit comments

Comments
 (0)