11package com.woozoo.menumonya
22
3+ import android.Manifest
34import android.content.Intent
5+ import android.content.Intent.ACTION_VIEW
46import android.content.pm.PackageManager
7+ import android.net.Ur
58import android.os.Bundle
69import android.provider.Settings
710import android.view.View
@@ -12,6 +15,7 @@ import androidx.appcompat.app.AppCompatActivity
1215import androidx.recyclerview.widget.RecyclerView
1316import androidx.viewpager2.widget.ViewPager2
1417import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
18+ import com.woozoo.menumonya.Constants.Companion.FEEDBACK_URL
1519import com.woozoo.menumonya.MainViewModel.Event
1620import com.woozoo.menumonya.databinding.ActivityMainBinding
1721import com.woozoo.menumonya.util.PermissionUtils.Companion.ACCESS_FINE_LOCATION_REQUEST_CODE
@@ -24,6 +28,7 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
2428 private lateinit var binding: ActivityMainBinding
2529
2630 private lateinit var viewPager: ViewPager2
31+ private lateinit var locationPermissionDialog: LocationPermissionDialog
2732
2833 override fun onCreate (savedInstanceState : Bundle ? ) {
2934 super .onCreate(savedInstanceState)
@@ -36,10 +41,11 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
3641 viewModel.eventFlow.collect { event -> handleEvent(event) }
3742 }
3843
39- binding.locationGnBtn.background = applicationContext.getDrawable(R .drawable.selector_location_button_selected )
44+ binding.locationGnBtn.background = applicationContext.getDrawable(R .drawable.color_button_background )
4045 binding.locationGnBtn.setTextColor(applicationContext.getColor(R .color.white))
4146 binding.locationGnBtn.setOnClickListener(this )
4247 binding.locationYsBtn.setOnClickListener(this )
48+ binding.feedbackIv.setOnClickListener(this )
4349 binding.currentLocationBtn.setOnClickListener(this )
4450
4551 // 좌우로 item이 보이도록 설정
@@ -54,12 +60,25 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
5460 viewPager.setPageTransformer { page, position ->
5561 val offset = position * - (2 * offsetPx + pageMarginPx)
5662 page.translationX = offset // offset 만큼 왼쪽으로 이동시킴
57-
58- updatePagerHeightForChild(page, viewPager)
5963 }
6064
6165 registerOnPageChangeCallback(object : OnPageChangeCallback () {
6266 override fun onPageSelected (position : Int ) {
67+ // height를 wrap_content가 되도록 설정
68+ val view = (getChildAt(0 ) as RecyclerView ).layoutManager?.findViewByPosition(position)
69+ view?.post {
70+ val wMeasureSpec =
71+ View .MeasureSpec .makeMeasureSpec(view.width, View .MeasureSpec .EXACTLY )
72+ val hMeasureSpec = View .MeasureSpec .makeMeasureSpec(0 , View .MeasureSpec .UNSPECIFIED )
73+ view.measure(wMeasureSpec, hMeasureSpec)
74+ if (getChildAt(0 ).layoutParams.height != view.measuredHeight) {
75+ getChildAt(0 ).layoutParams = (getChildAt(0 ).layoutParams).also { lp ->
76+ lp.height = view.measuredHeight
77+ }
78+ }
79+ }
80+
81+ // 마커로 카메라 이동
6382 viewModel.moveCameraToMarker(position)
6483 }
6584 })
@@ -91,28 +110,32 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
91110 }
92111 is Event .ShowRestaurantView -> {
93112 if (viewPager.adapter == null ) {
94- viewPager.adapter = RestaurantAdapter (event.data)
113+ viewPager.adapter = RestaurantAdapter (event.data, this )
95114 if (event.markerIndex != - 1 ) {
96115 viewPager.currentItem = event.markerIndex
97116 } else { }
98117 } else { }
99118 }
100119 is Event .RequestLocationPermission -> {
101- requestLocationPermission(this )
120+ locationPermissionDialog = LocationPermissionDialog (this ) {
121+ requestLocationPermission(this )
122+ locationPermissionDialog.dismiss()
123+ }
124+ locationPermissionDialog.show()
102125 }
103126 is Event .ShowGpsPermissionAlert -> {
104- val builder = AlertDialog .Builder (this )
105- builder. setMessage(" 현재 위치를 찾을 수 없습니다.\n 위치 서비스를 켜주세요." )
106- builder. setCancelable(true )
107- builder. setNegativeButton(" 취소" ) { dialog, which ->
108- dialog.dismiss()
109- }
110- builder. setPositiveButton(" 확인" ) { dialog, which ->
111- val gpsPermissionIntent = Intent (Settings .ACTION_LOCATION_SOURCE_SETTINGS )
112- startActivityForResult(gpsPermissionIntent, GPS_ENABLE_REQUEST_CODE )
113- dialog.dismiss()
114- }
115- builder .create().show()
127+ AlertDialog .Builder (this ). apply {
128+ setMessage(" 현재 위치를 찾을 수 없습니다.\n 위치 서비스를 켜주세요." )
129+ setCancelable(true )
130+ setNegativeButton(" 취소" ) { dialog, which ->
131+ dialog.dismiss()
132+ }
133+ setPositiveButton(" 확인" ) { dialog, which ->
134+ val gpsPermissionIntent = Intent (Settings .ACTION_LOCATION_SOURCE_SETTINGS )
135+ startActivityForResult(gpsPermissionIntent, GPS_ENABLE_REQUEST_CODE )
136+ dialog.dismiss()
137+ }
138+ } .create().show()
116139 }
117140 }
118141
@@ -157,20 +180,27 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
157180 viewPager.invalidate()
158181 viewPager.adapter = null
159182 viewModel.showLocationInfo(" 강남" )
160- binding.locationGnBtn.background = applicationContext.getDrawable(R .drawable.selector_location_button_selected)
161- binding.locationYsBtn.background = applicationContext.getDrawable(R .drawable.selector_location_button)
183+
184+ binding.locationGnBtn.background = applicationContext.getDrawable(R .drawable.color_button_background)
185+ binding.locationYsBtn.background = applicationContext.getDrawable(R .drawable.white_button_background)
162186 binding.locationGnBtn.setTextColor(applicationContext.getColor(R .color.white))
163187 binding.locationYsBtn.setTextColor(applicationContext.getColor(R .color.gray600))
164188 }
165189 R .id.location_ys_btn -> {
166190 viewPager.invalidate()
167191 viewPager.adapter = null
168192 viewModel.showLocationInfo(" 역삼" )
169- binding.locationYsBtn.background = applicationContext.getDrawable(R .drawable.selector_location_button_selected)
170- binding.locationGnBtn.background = applicationContext.getDrawable(R .drawable.selector_location_button)
193+
194+ binding.locationYsBtn.background = applicationContext.getDrawable(R .drawable.color_button_background)
195+ binding.locationGnBtn.background = applicationContext.getDrawable(R .drawable.white_button_background)
171196 binding.locationYsBtn.setTextColor(applicationContext.getColor(R .color.white))
172197 binding.locationGnBtn.setTextColor(applicationContext.getColor(R .color.gray600))
173198 }
199+ R .id.feedback_iv -> {
200+ val intent = Intent (ACTION_VIEW , Uri .parse(FEEDBACK_URL ))
201+ startActivity(intent)
202+ }
203+ // '내 주변' 버튼 클릭
174204 R .id.current_location_btn -> {
175205 viewModel.getCurrentLocation(this )
176206 }
@@ -180,10 +210,18 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
180210 override fun onRequestPermissionsResult (requestCode : Int , permissions : Array <out String >, grantResults : IntArray ) {
181211 super .onRequestPermissionsResult(requestCode, permissions, grantResults)
182212 if (requestCode == ACCESS_FINE_LOCATION_REQUEST_CODE ) {
213+ // (1) 권한 허용 여부 체크
183214 if (grantResults[0 ] == PackageManager .PERMISSION_GRANTED ) {
184215 viewModel.getCurrentLocation(this )
185216 } else {
186- Toast .makeText(this , " 위치 권한을 허용해주세요" , Toast .LENGTH_SHORT ).show()
217+ // (2) '다시는 보지 않음' 클릭 여부 체크
218+ if (shouldShowRequestPermissionRationale(Manifest .permission.ACCESS_FINE_LOCATION )) {
219+ Toast .makeText(this , R .string.location_permission_denied_toast,
220+ Toast .LENGTH_SHORT ).show()
221+ } else {
222+ Toast .makeText(this , R .string.location_permission_denied_forever_toast,
223+ Toast .LENGTH_SHORT ).show()
224+ }
187225 }
188226 }
189227 }
0 commit comments