From 1f7a6cc5aa3930ebee64463ad44d2896e94b9e54 Mon Sep 17 00:00:00 2001 From: junseo511 Date: Sat, 15 Feb 2025 02:09:34 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=ED=99=88=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20selector=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/into/websoso/ui/main/home/HomeFragment.kt | 8 +------- app/src/main/res/layout/fragment_home.xml | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/into/websoso/ui/main/home/HomeFragment.kt b/app/src/main/java/com/into/websoso/ui/main/home/HomeFragment.kt index ec9c3fa1a..7753d0dd3 100644 --- a/app/src/main/java/com/into/websoso/ui/main/home/HomeFragment.kt +++ b/app/src/main/java/com/into/websoso/ui/main/home/HomeFragment.kt @@ -5,7 +5,6 @@ import android.os.Build import android.os.Bundle import android.view.View import androidx.activity.result.contract.ActivityResultContracts -import androidx.core.content.ContextCompat import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import com.google.firebase.messaging.FirebaseMessaging @@ -195,12 +194,7 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { } private fun updateHasNotificationUnread(hasUnread: Boolean) { - val drawable = if (hasUnread) { - ContextCompat.getDrawable(requireContext(), R.drawable.ic_home_notification_unread) - } else { - ContextCompat.getDrawable(requireContext(), R.drawable.ic_home_notification_read) - } - binding.ivHomeNotification.setImageDrawable(drawable) + binding.ivHomeNotification.isSelected = hasUnread } private fun showNotificationPermissionDialog() { diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 567e6b8a3..91bf082e2 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -30,7 +30,7 @@ android:layout_width="28dp" android:layout_height="0dp" android:layout_marginEnd="20dp" - android:src="@drawable/ic_home_notification_unread" + android:src="@drawable/ic_home_notification_selector" app:layout_constraintBottom_toBottomOf="@id/iv_home_logo" app:layout_constraintDimensionRatio="1" app:layout_constraintEnd_toEndOf="parent" From 63e7016ebe19fe98aeb1522e5ceef6aa435af598 Mon Sep 17 00:00:00 2001 From: junseo511 Date: Sat, 15 Feb 2025 02:20:23 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EC=95=8C=EB=A6=BC=20=EB=B7=B0=20?= =?UTF-8?q?=EC=A2=85=EB=A3=8C=EC=8B=9C=20=EC=95=8C=EB=A6=BC=20=EC=9D=BD?= =?UTF-8?q?=EC=9D=8C=20=EC=97=AC=EB=B6=80=20API=20=ED=98=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../websoso/core/common/ui/model/ResultFrom.kt | 1 + .../com/into/websoso/ui/main/home/HomeFragment.kt | 15 ++++++++++++++- .../into/websoso/ui/main/home/HomeViewModel.kt | 2 +- .../ui/notification/NotificationActivity.kt | 6 +++++- .../websoso/ui/notification/NotificationScreen.kt | 5 +++++ 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/into/websoso/core/common/ui/model/ResultFrom.kt b/app/src/main/java/com/into/websoso/core/common/ui/model/ResultFrom.kt index d431ebdef..4040c464f 100644 --- a/app/src/main/java/com/into/websoso/core/common/ui/model/ResultFrom.kt +++ b/app/src/main/java/com/into/websoso/core/common/ui/model/ResultFrom.kt @@ -16,6 +16,7 @@ enum class ResultFrom { OtherUserProfileBack, NovelRating, WithdrawUser, + Notification, ; val RESULT_OK: Int = ordinal + 1 diff --git a/app/src/main/java/com/into/websoso/ui/main/home/HomeFragment.kt b/app/src/main/java/com/into/websoso/ui/main/home/HomeFragment.kt index 7753d0dd3..7bdc4c88e 100644 --- a/app/src/main/java/com/into/websoso/ui/main/home/HomeFragment.kt +++ b/app/src/main/java/com/into/websoso/ui/main/home/HomeFragment.kt @@ -1,9 +1,11 @@ package com.into.websoso.ui.main.home import android.Manifest +import android.content.Intent import android.os.Build import android.os.Bundle import android.view.View +import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels @@ -14,6 +16,7 @@ import com.into.websoso.core.common.ui.base.BaseFragment import com.into.websoso.core.common.ui.model.ResultFrom.FeedDetailBack import com.into.websoso.core.common.ui.model.ResultFrom.FeedDetailRemoved import com.into.websoso.core.common.ui.model.ResultFrom.NormalExploreBack +import com.into.websoso.core.common.ui.model.ResultFrom.Notification import com.into.websoso.core.common.ui.model.ResultFrom.NovelDetailBack import com.into.websoso.core.common.ui.model.ResultFrom.ProfileEditSuccess import com.into.websoso.core.common.util.tracker.Tracker @@ -39,6 +42,15 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { private val homeViewModel: HomeViewModel by viewModels() private val mainViewModel: MainViewModel by activityViewModels() + private val homeResultLauncher: ActivityResultLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + when (result.resultCode) { + Notification.RESULT_OK -> { + homeViewModel.updateNotificationUnread() + } + } + } + private val popularNovelsAdapter: PopularNovelsAdapter by lazy { PopularNovelsAdapter(::onPopularNovelClick) } @@ -283,7 +295,8 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { private fun onNotificationButtonClick() { binding.ivHomeNotification.setOnClickListener { - startActivity(NotificationActivity.getIntent(requireContext())) + val intent = NotificationActivity.getIntent(requireContext()) + homeResultLauncher.launch(intent) } } diff --git a/app/src/main/java/com/into/websoso/ui/main/home/HomeViewModel.kt b/app/src/main/java/com/into/websoso/ui/main/home/HomeViewModel.kt index 9ee6339c3..38eeba59c 100644 --- a/app/src/main/java/com/into/websoso/ui/main/home/HomeViewModel.kt +++ b/app/src/main/java/com/into/websoso/ui/main/home/HomeViewModel.kt @@ -189,7 +189,7 @@ class HomeViewModel } } - private fun updateNotificationUnread() { + fun updateNotificationUnread() { viewModelScope.launch { runCatching { notificationRepository.fetchNotificationUnread() diff --git a/app/src/main/java/com/into/websoso/ui/notification/NotificationActivity.kt b/app/src/main/java/com/into/websoso/ui/notification/NotificationActivity.kt index 4a669d794..d3a40d2c1 100644 --- a/app/src/main/java/com/into/websoso/ui/notification/NotificationActivity.kt +++ b/app/src/main/java/com/into/websoso/ui/notification/NotificationActivity.kt @@ -6,6 +6,7 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.viewModels +import com.into.websoso.core.common.ui.model.ResultFrom import com.into.websoso.core.designsystem.theme.WebsosoTheme import com.into.websoso.domain.model.Notification import com.into.websoso.ui.feedDetail.FeedDetailActivity @@ -25,7 +26,10 @@ class NotificationActivity : ComponentActivity() { viewModel = notificationViewModel, onNotificationDetailClick = ::navigateToNotificationDetail, onFeedDetailClick = ::navigateToFeedDetail, - onBackButtonClick = { finish() }, + onBackButtonClick = { + setResult(ResultFrom.Notification.RESULT_OK) + finish() + }, ) } } diff --git a/app/src/main/java/com/into/websoso/ui/notification/NotificationScreen.kt b/app/src/main/java/com/into/websoso/ui/notification/NotificationScreen.kt index 990271ce0..1f8351d31 100644 --- a/app/src/main/java/com/into/websoso/ui/notification/NotificationScreen.kt +++ b/app/src/main/java/com/into/websoso/ui/notification/NotificationScreen.kt @@ -1,5 +1,6 @@ package com.into.websoso.ui.notification +import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable @@ -19,6 +20,10 @@ fun NotificationScreen( ) { val uiState by viewModel.notificationUiState.collectAsStateWithLifecycle() + BackHandler { + onBackButtonClick() + } + Column(modifier = Modifier.fillMaxSize()) { NotificationAppBar(onBackButtonClick) NotificationsContainer(