Skip to content
Open
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
df8a5cc
refactor(PlaceMap): 뒤로 가기 처리 로직 Compose BackHandler로 마이그레이션
oungsi2000 Dec 28, 2025
649b1cd
refactor(PlaceMap): UI 상태 관리 클래스 일반화 및 구조 개선
oungsi2000 Dec 28, 2025
f208c15
refactor(PlaceMap): TimeTag 상태 관리 StateFlow 및 UiState로 마이그레이션
oungsi2000 Dec 28, 2025
a57f04e
refactor(PlaceMap): ViewModel LiveData -> Flow 마이그레이션
oungsi2000 Dec 29, 2025
c8055f0
refactor(PlaceMap): Fragment 트랜잭션 제거 및 Compose UI로 전면 전환
oungsi2000 Dec 29, 2025
da97853
refactor(PlaceMap): View 시스템 코드 제거 및 패키지 구조 통합
oungsi2000 Dec 29, 2025
8aaf666
refactor(PlaceMap): MVI 아키텍처 도입 및 상태 관리 리팩토링
oungsi2000 Dec 29, 2025
55b2501
refactor(PlaceMap): 지도 제어 이벤트 분리 및 핸들러 리팩토링
oungsi2000 Dec 30, 2025
6a287bd
fix(MapFilterManager): 타임태그 없는 경우 마커 필터링 오류 수정
oungsi2000 Dec 30, 2025
f3b5565
refactor(PlaceMap): 비대해진 ViewModel 3개의 Handler로 분리
oungsi2000 Dec 31, 2025
f67125b
refactor(PlaceMap): ActionHandler 의존성 주입 리팩토링 (Metro)
oungsi2000 Dec 31, 2025
f2d693f
refactor(PlaceMap): Intent Handler 구조 표준화 및 패키지 정리
oungsi2000 Jan 1, 2026
d5913f4
refactor(PlaceMap): 하드코딩된 UI 수치를 Theme Spacing으로 추출 및 적용
oungsi2000 Jan 1, 2026
f71dc7b
test(PlaceMap): ActionHandler 테스트 작성
oungsi2000 Jan 2, 2026
14bfbb2
fix(FestaBookApp): 전역 예외 처리 핸들러 활성화
oungsi2000 Jan 2, 2026
f98fbef
refactor(PlaceMap): 컴포저블 사이드 이펙트 when절 -> 상단으로 분리
oungsi2000 Jan 2, 2026
0942544
refactor(PlaceMap): MapControlEventHandler uiState에 getter 적용
oungsi2000 Jan 2, 2026
d2ddeeb
test(PlaceMap): Flow 테스트 유틸리티 개선 및 에러 핸들링 테스트 추가
oungsi2000 Jan 2, 2026
64ceeb7
refactor(PlaceMap): ListLoadState 구조 개선 및 마커 선택 동시성 문제시 일관성 보장
oungsi2000 Jan 2, 2026
946a669
refactor(PlaceMap): await 확장 함수에 타임아웃 처리 추가
oungsi2000 Jan 2, 2026
f4dd3b3
fix(PlaceMap): 이벤트 채널 설정 수정 및 테스트 리소스 해제 로직 추가
oungsi2000 Jan 2, 2026
f915ae8
refactor(test): observeEvent timeout 처리 로직 변경
oungsi2000 Jan 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/src/main/java/com/daedan/festabook/FestaBookApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class FestaBookApp : Application() {

override fun onCreate() {
super.onCreate()
setGlobalExceptionHandler()
// setGlobalExceptionHandler()
festaBookGraph.inject(this)
setupTimber()
setupNaverSdk()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.daedan.festabook.di.mapManager

import com.daedan.festabook.presentation.placeMap.MapClickListener
import com.daedan.festabook.presentation.placeMap.MapClickListenerImpl
import com.daedan.festabook.presentation.placeMap.PlaceMapViewModel
import com.daedan.festabook.presentation.placeMap.listener.MapClickListener
import com.daedan.festabook.presentation.placeMap.listener.MapClickListenerImpl
import com.daedan.festabook.presentation.placeMap.mapManager.internal.OverlayImageManager
import com.daedan.festabook.presentation.placeMap.model.PlaceCategoryUiModel
import com.daedan.festabook.presentation.placeMap.model.iconResources
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.daedan.festabook.di.placeMapHandler

import dev.zacsweers.metro.Qualifier

@Qualifier
annotation class CachedPlaceByTimeTag
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.daedan.festabook.di.placeMapHandler

import dev.zacsweers.metro.Qualifier

@Qualifier
annotation class CachedPlaces
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.daedan.festabook.di.placeMapHandler

import com.daedan.festabook.presentation.placeMap.intent.event.MapControlEvent
import com.daedan.festabook.presentation.placeMap.intent.event.PlaceMapEvent
import com.daedan.festabook.presentation.placeMap.intent.handler.FilterActionHandler
import com.daedan.festabook.presentation.placeMap.intent.handler.MapEventActionHandler
import com.daedan.festabook.presentation.placeMap.intent.handler.SelectActionHandler
import com.daedan.festabook.presentation.placeMap.intent.state.PlaceMapUiState
import com.daedan.festabook.presentation.placeMap.model.PlaceUiModel
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.ContributesTo
import dev.zacsweers.metro.GraphExtension
import dev.zacsweers.metro.Provides
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.StateFlow

@GraphExtension(PlaceMapViewModelScope::class)
interface PlaceMapHandlerGraph {
val filterActionHandler: FilterActionHandler
val selectActionHandler: SelectActionHandler
val mapEventActionHandler: MapEventActionHandler

@ContributesTo(AppScope::class)
@GraphExtension.Factory
interface Factory {
fun create(
@Provides mapControlUiEvent: Channel<MapControlEvent>,
@Provides placeMapUiEvent: Channel<PlaceMapEvent>,
@Provides uiState: StateFlow<PlaceMapUiState>,
@Provides @CachedPlaces cachedPlaces: StateFlow<List<PlaceUiModel>>,
@Provides @CachedPlaceByTimeTag cachedPlaceByTimeTag: StateFlow<List<PlaceUiModel>>,
@Provides onUpdateCachedPlace: (List<PlaceUiModel>) -> Unit,
@Provides onUpdateState: ((PlaceMapUiState) -> PlaceMapUiState) -> Unit,
@Provides scope: CoroutineScope,
): PlaceMapHandlerGraph
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.daedan.festabook.di.placeMapHandler

abstract class PlaceMapViewModelScope private constructor()
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.daedan.festabook.presentation.common

import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.repeatOnLifecycle
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.withContext

@Composable
fun <T> ObserveAsEvents(
flow: Flow<T>,
onEvent: suspend (T) -> Unit,
) {
val lifecycleOwner = LocalLifecycleOwner.current
LaunchedEffect(flow, lifecycleOwner.lifecycle) {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
withContext(Dispatchers.Main.immediate) {
flow.collect(onEvent)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.daedan.festabook.presentation.placeMap.placeList
package com.daedan.festabook.presentation.placeDetail

import android.content.Context
import android.util.AttributeSet
Expand Down
Loading
Loading