From 9b46a0cb37a8da7223167bf48cfd38c92b218923 Mon Sep 17 00:00:00 2001 From: aksworns22 Date: Thu, 12 Feb 2026 01:31:29 +0900 Subject: [PATCH 1/5] =?UTF-8?q?chore:=20=EB=8D=B0=EC=9D=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=9C=A0=EB=A6=AC=EB=B3=91=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_bottle.png | Bin 0 -> 2905 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/main/res/drawable/ic_bottle.png diff --git a/app/src/main/res/drawable/ic_bottle.png b/app/src/main/res/drawable/ic_bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..59fbd897fffccb44706a507f8c91b8585f95f578 GIT binary patch literal 2905 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 Dyy$EN literal 0 HcmV?d00001 From c90dfd1382edd069b25619691734806d9b6c561d Mon Sep 17 00:00:00 2001 From: aksworns22 Date: Thu, 12 Feb 2026 01:31:48 +0900 Subject: [PATCH 2/5] =?UTF-8?q?design:=20=EB=8D=B0=EC=9D=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=9C=A0=EB=A6=AC=EB=B3=91=20ui=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_home.xml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 29072679..d5ff2292 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,5 +1,6 @@ + + + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent"/> Date: Thu, 12 Feb 2026 01:32:18 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=EC=84=9C=EB=B2=84=EB=A1=9C=20?= =?UTF-8?q?=EB=B6=80=ED=84=B0=20=EB=8D=B0=EC=9D=BC=EB=A6=AC=20=EC=8B=AC?= =?UTF-8?q?=EB=A6=AC=EC=A7=80=EC=8B=9D=20=EC=9D=BD=EC=9D=8C=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../egobook/app/di/module/RepositoryModule.kt | 6 +++++ .../app/ui/home/repository/UserRepository.kt | 23 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/egobook/app/di/module/RepositoryModule.kt b/app/src/main/java/com/egobook/app/di/module/RepositoryModule.kt index a6a39116..953fb4d8 100644 --- a/app/src/main/java/com/egobook/app/di/module/RepositoryModule.kt +++ b/app/src/main/java/com/egobook/app/di/module/RepositoryModule.kt @@ -19,9 +19,11 @@ import dagger.Binds import com.egobook.app.domain.repository.QuestionRepository import com.egobook.app.domain.repository.account.AccountRepository import com.egobook.app.domain.repository.diary.DiaryRepository +import com.egobook.app.ui.home.repository.NetworkPsychologyService import com.egobook.app.ui.home.repository.NetworkTendencyLevelService import com.egobook.app.ui.home.repository.NetworkUserRepository import com.egobook.app.ui.home.repository.UserActivityRepository +import com.egobook.app.ui.home.repository.UserPsychologyRepository import com.egobook.app.ui.home.repository.UserRepository import com.egobook.app.ui.home.repository.UserTendencyRepository import dagger.Module @@ -79,4 +81,8 @@ abstract class RepositoryModule { @Binds @Singleton abstract fun bindActivityRecordRepository(impl: NetworkUserRepository): UserActivityRepository + + @Binds + @Singleton + abstract fun bindPsychologyRepository(impl: NetworkUserRepository): UserPsychologyRepository } diff --git a/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt b/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt index 397d4765..fc0205b4 100644 --- a/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt +++ b/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt @@ -16,6 +16,10 @@ interface UserTendencyRepository { suspend fun loadTendencies(): List } +interface UserPsychologyRepository { + suspend fun isReadDailyPsychology(): Boolean +} + interface NetworkUserService { @GET("/home") suspend fun loadBasicUserInformation(): BaseResponse @@ -26,14 +30,25 @@ interface NetworkTendencyLevelService { suspend fun loadTendencyLevels(): BaseResponse } +data class PsychologyStateDto( + val isBottleVisible: Boolean +) + +interface NetworkPsychologyService { + @GET("/psychology/daily/status") + suspend fun isReadDailyPsychology(): BaseResponse +} + @Singleton class NetworkUserRepository @Inject constructor( @BackendApi private val retrofit: Retrofit -) : UserRepository, UserTendencyRepository, UserActivityRepository { +) : UserRepository, UserTendencyRepository, UserActivityRepository, UserPsychologyRepository { private val userService by lazy { retrofit.create(NetworkUserService::class.java) } private val tendencyLevelService by lazy { retrofit.create(NetworkTendencyLevelService::class.java) } private val activityRecordService by lazy { retrofit.create(NetworkActivityRecordService::class.java) } + private val psychologyService by lazy { retrofit.create(NetworkPsychologyService::class.java) } + override suspend fun load(): User { val userServiceResponse: BaseResponse = userService.loadBasicUserInformation() return userServiceResponse.data.toDomain() @@ -50,4 +65,10 @@ class NetworkUserRepository @Inject constructor( activityRecordService.loadUserActivityRecord() return activityRecordResponse.data.toDomain() } + + override suspend fun isReadDailyPsychology(): Boolean { + val psychologyResponse: BaseResponse = + psychologyService.isReadDailyPsychology() + return psychologyResponse.data.isBottleVisible + } } From 642319b8ed5d807c7d1e740746cdba30d220cf45 Mon Sep 17 00:00:00 2001 From: aksworns22 Date: Thu, 12 Feb 2026 01:32:30 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=EB=8D=B0=EC=9D=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=8B=AC=EB=A6=AC=EC=A7=80=EC=8B=9D=20=EC=9D=BD=EC=9D=8C=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=EC=97=90=20=EB=94=B0=EB=A5=B8=20ui=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/egobook/app/ui/home/HomeViewModel.kt | 14 ++++++++++++-- .../com/egobook/app/ui/home/ui/HomeFragment.kt | 8 ++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/egobook/app/ui/home/HomeViewModel.kt b/app/src/main/java/com/egobook/app/ui/home/HomeViewModel.kt index 508f3b21..4b97e093 100644 --- a/app/src/main/java/com/egobook/app/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/egobook/app/ui/home/HomeViewModel.kt @@ -3,6 +3,7 @@ package com.egobook.app.ui.home import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.egobook.app.ui.home.repository.UserPsychologyRepository import com.egobook.app.ui.home.repository.UserRepository import com.egobook.app.ui.home.user.Ink import com.egobook.app.ui.home.user.Level @@ -19,17 +20,20 @@ import javax.inject.Inject @HiltViewModel class HomeViewModel @Inject constructor( private val userRepository: UserRepository, - private val storeRepository: StoreRepository + private val storeRepository: StoreRepository, + private val psychologyRepository: UserPsychologyRepository ) : ViewModel() { private val _uiState = MutableStateFlow(User(Level(1), Ink(0))) val uiState: StateFlow = _uiState.asStateFlow() - + private val _dailyPhycologyReadState = MutableStateFlow(true) + val dailyPhycologyReadState = _dailyPhycologyReadState.asStateFlow() private val _equippedItems = MutableStateFlow>(emptyList()) val equippedItems: StateFlow> = _equippedItems init { fetchUser() fetchEquipItems() + fetchDailyPhycologyReadState() } fun fetchEquipItems() { @@ -38,6 +42,12 @@ class HomeViewModel @Inject constructor( } } + fun fetchDailyPhycologyReadState() { + viewModelScope.launch { + _dailyPhycologyReadState.value = psychologyRepository.isReadDailyPsychology() + } + } + fun fetchUser() { viewModelScope.launch { try { diff --git a/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt b/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt index 990485bc..74e33d65 100644 --- a/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt +++ b/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt @@ -60,6 +60,14 @@ class HomeFragment(): Fragment() { } } + viewLifecycleOwner.lifecycleScope.launch { + viewModel.dailyPhycologyReadState.collect { phycologyReadState -> + if(phycologyReadState) { + binding.ivDailyBottle.visibility = View.VISIBLE + } + } + } + binding.ivStore.setOnClickListener { findNavController().navigate(R.id.action_homeFragment_to_storeFragment) } From 03a6ec8c2bc358bd1b4eb413f159148420903399 Mon Sep 17 00:00:00 2001 From: aksworns22 Date: Thu, 12 Feb 2026 03:00:06 +0900 Subject: [PATCH 5/5] =?UTF-8?q?=EC=BB=A4=EB=8B=A4=EB=9E=80=20=EC=BB=A4?= =?UTF-8?q?=EB=B0=8B:=20=EB=AA=B0=EB=9D=BC=20=EC=9D=B4=EC=A0=9C..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/egobook/app/ui/home/HomeViewModel.kt | 12 +-- .../app/ui/home/PsychologyViewModel.kt | 55 ++++++++++++ .../app/ui/home/repository/UserRepository.kt | 33 +++++++ .../egobook/app/ui/home/ui/HomeFragment.kt | 41 +++++++-- .../app/ui/home/ui/PsychologyDialog.kt | 72 +++++++++++++++ .../res/drawable/ic_bookmark_unclicked.xml | 17 ++++ app/src/main/res/layout/dialog_psychology.xml | 89 +++++++++++++++++++ 7 files changed, 307 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/egobook/app/ui/home/PsychologyViewModel.kt create mode 100644 app/src/main/java/com/egobook/app/ui/home/ui/PsychologyDialog.kt create mode 100644 app/src/main/res/drawable/ic_bookmark_unclicked.xml create mode 100644 app/src/main/res/layout/dialog_psychology.xml diff --git a/app/src/main/java/com/egobook/app/ui/home/HomeViewModel.kt b/app/src/main/java/com/egobook/app/ui/home/HomeViewModel.kt index 4b97e093..feddde9d 100644 --- a/app/src/main/java/com/egobook/app/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/egobook/app/ui/home/HomeViewModel.kt @@ -23,18 +23,18 @@ class HomeViewModel @Inject constructor( private val storeRepository: StoreRepository, private val psychologyRepository: UserPsychologyRepository ) : ViewModel() { - private val _uiState = MutableStateFlow(User(Level(1), Ink(0))) - val uiState: StateFlow = _uiState.asStateFlow() - private val _dailyPhycologyReadState = MutableStateFlow(true) - val dailyPhycologyReadState = _dailyPhycologyReadState.asStateFlow() - private val _equippedItems = MutableStateFlow>(emptyList()) - val equippedItems: StateFlow> = _equippedItems init { fetchUser() fetchEquipItems() fetchDailyPhycologyReadState() } + private val _uiState = MutableStateFlow(User(Level(1), Ink(0))) + val uiState: StateFlow = _uiState.asStateFlow() + private val _dailyPhycologyReadState = MutableStateFlow(false) + val dailyPhycologyReadState = _dailyPhycologyReadState.asStateFlow() + private val _equippedItems = MutableStateFlow>(emptyList()) + val equippedItems: StateFlow> = _equippedItems fun fetchEquipItems() { viewModelScope.launch { diff --git a/app/src/main/java/com/egobook/app/ui/home/PsychologyViewModel.kt b/app/src/main/java/com/egobook/app/ui/home/PsychologyViewModel.kt new file mode 100644 index 00000000..af18932a --- /dev/null +++ b/app/src/main/java/com/egobook/app/ui/home/PsychologyViewModel.kt @@ -0,0 +1,55 @@ +package com.egobook.app.ui.home + +import android.util.Log +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.egobook.app.ui.home.repository.DailyPsychologyDto +import com.egobook.app.ui.home.repository.PsychologyKnowledge +import com.egobook.app.ui.home.repository.PsychologyReward +import com.egobook.app.ui.home.repository.UserPsychologyRepository +import com.egobook.app.ui.home.repository.UserRepository +import com.egobook.app.ui.home.user.Ink +import com.egobook.app.ui.home.user.Level +import com.egobook.app.ui.home.user.User +import com.egobook.app.ui.shop.CustomItem +import com.egobook.app.ui.shop.StoreRepository +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class PsychologyViewModel @Inject constructor( + private val psychologyRepository: UserPsychologyRepository +) : ViewModel() { + + private val _dailyPhycologyDto = MutableStateFlow( + DailyPsychologyDto( + date = "0000-00-00", + knowledge = PsychologyKnowledge( + knowledgeId = 0, + title = "", + content = "", + source = "" + ), + reward = PsychologyReward( + granted = false, + inkGranted = 0, + inkBalance = 0, + toastMessage = "" + ), + isBookmarked = false + ) + ) + + val dailyPhycologyDto: StateFlow = _dailyPhycologyDto.asStateFlow() + + fun loadDailyPsychology() { + viewModelScope.launch { + _dailyPhycologyDto.value = psychologyRepository.loadDailyPsychology() + } + + } +} diff --git a/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt b/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt index fc0205b4..f99ceb37 100644 --- a/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt +++ b/app/src/main/java/com/egobook/app/ui/home/repository/UserRepository.kt @@ -1,5 +1,6 @@ package com.egobook.app.ui.home.repository +import android.util.Log import com.egobook.app.di.qualifier.BackendApi import com.egobook.app.ui.home.user.Tendency import com.egobook.app.ui.home.user.User @@ -18,6 +19,7 @@ interface UserTendencyRepository { interface UserPsychologyRepository { suspend fun isReadDailyPsychology(): Boolean + suspend fun loadDailyPsychology(): DailyPsychologyDto } interface NetworkUserService { @@ -34,9 +36,33 @@ data class PsychologyStateDto( val isBottleVisible: Boolean ) +data class PsychologyKnowledge( + val knowledgeId: Int, + val title: String, + val content: String, + val source: String +) + +data class PsychologyReward( + val granted: Boolean, + val inkGranted: Int, + val inkBalance: Int, + val toastMessage: String +) +data class DailyPsychologyDto( + val date: String, + val knowledge: PsychologyKnowledge, + val reward: PsychologyReward?, + val isBookmarked: Boolean + +) + interface NetworkPsychologyService { @GET("/psychology/daily/status") suspend fun isReadDailyPsychology(): BaseResponse + + @GET("/psychology/daily") + suspend fun loadDailyPsychology(): BaseResponse } @Singleton @@ -69,6 +95,13 @@ class NetworkUserRepository @Inject constructor( override suspend fun isReadDailyPsychology(): Boolean { val psychologyResponse: BaseResponse = psychologyService.isReadDailyPsychology() + Log.d("jang", "isReadDailyPsychology: ${psychologyResponse.data.isBottleVisible}") return psychologyResponse.data.isBottleVisible } + + override suspend fun loadDailyPsychology(): DailyPsychologyDto { + val psychologyResponse: BaseResponse = + psychologyService.loadDailyPsychology() + return psychologyResponse.data + } } diff --git a/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt b/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt index 74e33d65..ccd3362e 100644 --- a/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt +++ b/app/src/main/java/com/egobook/app/ui/home/ui/HomeFragment.kt @@ -1,6 +1,7 @@ package com.egobook.app.ui.home.ui import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -43,12 +44,10 @@ class HomeFragment(): Fragment() { super.onViewCreated(view, savedInstanceState) val viewModel: HomeViewModel by viewModels() lifecycleScope.launch { - viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { - viewModel.uiState.collect { userState -> - binding.tvLevel.text = "Lv ${userState.level.number}" - binding.ivLevelType.setImageResource(userState.level.type.getResId()) - binding.tvInk.text = "${userState.ink.value}" - } + viewModel.uiState.collect { userState -> + binding.tvLevel.text = "Lv ${userState.level.number}" + binding.ivLevelType.setImageResource(userState.level.type.getResId()) + binding.tvInk.text = "${userState.ink.value}" } } @@ -64,6 +63,8 @@ class HomeFragment(): Fragment() { viewModel.dailyPhycologyReadState.collect { phycologyReadState -> if(phycologyReadState) { binding.ivDailyBottle.visibility = View.VISIBLE + } else { + binding.ivDailyBottle.visibility = View.INVISIBLE } } } @@ -72,6 +73,34 @@ class HomeFragment(): Fragment() { findNavController().navigate(R.id.action_homeFragment_to_storeFragment) } + binding.ivDailyBottle.setOnClickListener { + applyScreenBlur(BlurLevel.BASE) + val dialog = PsychologyDialog() + dialog.isCancelable = false + dialog.show(parentFragmentManager, "DailyPsychologyDialog") + binding.ivDailyBottle.visibility = View.INVISIBLE + + parentFragmentManager.setFragmentResultListener("psychology_key", viewLifecycleOwner) { _, _ -> + Log.d("jang", "다이얼로그 닫힘 감지 - 데이터 갱신") + viewModel.fetchUser() + viewModel.fetchDailyPhycologyReadState() + } + } + + binding.ivBottle.setOnClickListener { + applyScreenBlur(BlurLevel.BASE) + val dialog = PsychologyDialog() + dialog.isCancelable = false + dialog.show(parentFragmentManager, "DailyPsychologyDialog") + binding.ivDailyBottle.visibility = View.INVISIBLE + + parentFragmentManager.setFragmentResultListener("psychology_key", viewLifecycleOwner) { _, _ -> + Log.d("jang", "다이얼로그 닫힘 감지 - 데이터 갱신") + viewModel.fetchUser() + viewModel.fetchDailyPhycologyReadState() + } + } + binding.ivAd.setOnClickListener { applyScreenBlur(BlurLevel.BASE) val dialog = AdDialog() diff --git a/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyDialog.kt b/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyDialog.kt new file mode 100644 index 00000000..21626819 --- /dev/null +++ b/app/src/main/java/com/egobook/app/ui/home/ui/PsychologyDialog.kt @@ -0,0 +1,72 @@ +package com.egobook.app.ui.home.ui + +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.os.bundleOf +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.activityViewModels +import androidx.fragment.app.setFragmentResult +import androidx.lifecycle.lifecycleScope +import com.egobook.app.databinding.DialogAdBinding +import com.egobook.app.databinding.DialogPsychologyBinding +import com.egobook.app.removeScreenBlur +import com.egobook.app.ui.home.HomeViewModel +import com.egobook.app.ui.home.PsychologyViewModel +import kotlinx.coroutines.launch + +class PsychologyDialog() : DialogFragment() { + + private var _binding: DialogPsychologyBinding? = null + private val binding get() = checkNotNull(_binding) { "Fragment가 제거되었습니다." } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + _binding = DialogPsychologyBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val viewModel: PsychologyViewModel by activityViewModels() + + viewModel.loadDailyPsychology() + + viewLifecycleOwner.lifecycleScope.launch { + viewModel.dailyPhycologyDto.collect { dailyPhycologyDto -> + binding.tvPsychologyContent.text = dailyPhycologyDto.knowledge.content + binding.tvPsychologySource.text = dailyPhycologyDto.knowledge.source + binding.tvPsychologyDate.text = dailyPhycologyDto.date + if(dailyPhycologyDto.reward == null) { + binding.btnReward.text = "메인으로 돌아가기" + } else { + binding.btnReward.text = "잉크 ${dailyPhycologyDto.reward.inkGranted}개 획득!" + } + + } + } + + binding.btnReward.setOnClickListener { + removeScreenBlur() + dismiss() + } + } + + override fun dismiss() { + super.dismiss() + setFragmentResult("psychology_key", bundleOf("isUpdated" to true)) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} diff --git a/app/src/main/res/drawable/ic_bookmark_unclicked.xml b/app/src/main/res/drawable/ic_bookmark_unclicked.xml new file mode 100644 index 00000000..0db0c216 --- /dev/null +++ b/app/src/main/res/drawable/ic_bookmark_unclicked.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/app/src/main/res/layout/dialog_psychology.xml b/app/src/main/res/layout/dialog_psychology.xml new file mode 100644 index 00000000..0474e327 --- /dev/null +++ b/app/src/main/res/layout/dialog_psychology.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + +