@@ -8,9 +8,6 @@ import android.location.LocationListener
88import android.location.LocationManager
99import androidx.lifecycle.AndroidViewModel
1010import androidx.lifecycle.viewModelScope
11- import com.google.firebase.firestore.ktx.firestore
12- import com.google.firebase.firestore.ktx.toObject
13- import com.google.firebase.ktx.Firebase
1411import com.naver.maps.geometry.LatLng
1512import com.naver.maps.map.*
1613import com.naver.maps.map.overlay.Marker
@@ -21,19 +18,15 @@ import com.woozoo.menumonya.Constants.Companion.LATLNG_GN
2118import com.woozoo.menumonya.Constants.Companion.LATLNG_YS
2219import com.woozoo.menumonya.Constants.Companion.MAP_DEFAULT_ZOOM
2320import com.woozoo.menumonya.Constants.Companion.MAP_MIN_ZOOM
24- import com.woozoo.menumonya.model.Menu
2521import com.woozoo.menumonya.model.Restaurant
26- import com.woozoo.menumonya.util.DateUtils.Companion.getTodayDate
22+ import com.woozoo.menumonya.repository.FireStoreRepository
23+ import com.woozoo.menumonya.repository.RemoteConfigRepository
2724import com.woozoo.menumonya.util.LocationUtils.Companion.requestLocationUpdateOnce
2825import com.woozoo.menumonya.util.PermissionUtils.Companion.isGpsPermissionAllowed
29-
3026import com.woozoo.menumonya.util.PermissionUtils.Companion.isLocationPermissionAllowed
31- import kotlinx.coroutines.Deferred
32- import kotlinx.coroutines.async
3327import kotlinx.coroutines.flow.MutableSharedFlow
3428import kotlinx.coroutines.flow.asSharedFlow
3529import kotlinx.coroutines.launch
36- import kotlinx.coroutines.tasks.await
3730import java.lang.Double.parseDouble
3831
3932class MainViewModel (application : Application ): AndroidViewModel(Application ()) {
@@ -45,6 +38,9 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
4538 lateinit var naverMap: NaverMap
4639 private var locationManager: LocationManager
4740
41+ private var firestoreRepository = FireStoreRepository .get()
42+ private var remoteConfigRepository = RemoteConfigRepository .get()
43+
4844 private var mRestaurantInfoArray: ArrayList <Restaurant > = ArrayList ()
4945 private var markerList: ArrayList <Marker > = ArrayList ()
5046 private var selectedLocation: String = " "
@@ -60,13 +56,9 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
6056 }
6157
6258 @SuppressLint(" MissingPermission" )
63- fun initializeMapView (mapView : MapView , activity : Activity ) {
59+ fun initializeMapView (mapView : MapView ) {
6460 mapView.getMapAsync {
6561 naverMap = it.apply {
66- // locationSource = FusedLocationSource(
67- // activity,
68- // LOCATION_PERMISSION_REQUEST_CODE
69- // )
7062 locationTrackingMode = LocationTrackingMode .NoFollow
7163 uiSettings.apply {
7264 isLocationButtonEnabled = false
@@ -122,59 +114,6 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
122114 naverMap.moveCamera(CameraUpdate .withParams(cameraUpdateParams))
123115 }
124116
125- suspend fun getTodayRestaurantInfoAsync (location : String ): Deferred <ArrayList <Restaurant >> {
126- return viewModelScope.async {
127- val restaurantInfo = ArrayList <Restaurant >()
128- val db = Firebase .firestore
129- val restaurantRef = db.collection(" restaurants" )
130- val query = restaurantRef.whereArrayContainsAny(" locationCategory" , listOf (location))
131-
132- val result = query.get().await()
133- val documents = result.documents
134-
135- for (document in documents) {
136- val restaurant = document.toObject<Restaurant >()
137-
138- if (restaurant != null ) {
139- // 메뉴 정보 조회
140- val menu = getMenuAsync(document.id)?.await()
141-
142- val todayMenu = menu?.date?.get(getTodayDate())
143- if (todayMenu != null ) restaurant.todayMenu = todayMenu
144-
145- restaurantInfo.add(restaurant)
146- }
147- }
148-
149- // locationCategoryOrder값으로 순서 재정렬(가까운 블록에 위치한 순서대로)
150- for (restaurant in restaurantInfo) {
151- restaurant.locationCategoryOrder.removeAll { ! it.contains(location) }
152- }
153- restaurantInfo.sortBy { it.locationCategoryOrder[0 ] }
154-
155- restaurantInfo
156- }
157- }
158-
159- suspend fun getMenuAsync (restaurantId : String ): Deferred <Menu >? {
160- return viewModelScope.async {
161- var menu = Menu ()
162-
163- val db = Firebase .firestore
164- val menuRef = db.collection(" menus" )
165- val query = menuRef.whereEqualTo(" restaurantId" , restaurantId)
166-
167- val result = query.get().await()
168- val documents = result.documents
169-
170- if (documents.size > 0 ) {
171- menu = documents[0 ].toObject<Menu >()!!
172- }
173-
174- menu
175- }
176- }
177-
178117 /* *
179118 * 하단의 식당 정보 가로 스크롤 뷰를 표시함.
180119 * - (중요) 지도에 마커를 표시하기 위한 식당 정보를 이미 fetch하였다는 전제 하에 작동함.
@@ -194,7 +133,7 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
194133 " 역삼" -> moveCameraCoord(LATLNG_YS .latitude, LATLNG_YS .longitude)
195134 }
196135
197- mRestaurantInfoArray = getTodayRestaurantInfoAsync(selectedLocation).await() // TODO: 정렬 안돼있음
136+ mRestaurantInfoArray = firestoreRepository.getRestaurantInLocation(location)
198137
199138 setMarkers(mRestaurantInfoArray)
200139 }
@@ -257,11 +196,16 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
257196 locationSource = FusedLocationSource (activity, LOCATION_PERMISSION_REQUEST_CODE )
258197 locationTrackingMode = LocationTrackingMode .Follow
259198 }
199+ moveToCurrentLocation()
260200 })
261201 }
262202 }
263203 }
264204
205+ fun getFeedbackUrl (): String {
206+ return remoteConfigRepository.getFeedbackUrl()
207+ }
208+
265209 private fun showToast (text : String ) {
266210 event(Event .ShowToast (text))
267211 }
@@ -281,6 +225,9 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
281225 private fun showGpsPermissionAlert () {
282226 event(Event .ShowGpsPermissionAlert (" " ))
283227 }
228+ private fun moveToCurrentLocation () {
229+ event(Event .MoveToCurrentLocation (" " ))
230+ }
284231
285232 sealed class Event {
286233 /* *
@@ -293,5 +240,6 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
293240 data class OnMarkerClicked (val markerIndex : Int , val location : String ): Event()
294241 data class RequestLocationPermission (val data : String ): Event()
295242 data class ShowGpsPermissionAlert (val data : String ): Event()
243+ data class MoveToCurrentLocation (val data : String ): Event()
296244 }
297245}
0 commit comments