瀏覽代碼

- 2차 완료

Aaron 5 年之前
父節點
當前提交
7e551a4ea5

+ 4 - 0
app/src/main/java/com/aaron/kakao/hospitalmapfortube/data/remote/model/Category.kt

@@ -2,6 +2,10 @@ package com.aaron.kakao.hospitalmapfortube.data.remote.model
 
 import com.google.gson.annotations.Expose
 
+const val CATEGORY_HOSPITAL = "HP8"
+const val CATEGORY_PHARMACY = "PM9"
+const val CATEGORY_OIL = "OL7"
+
 data class Category(
     @Expose val documents: List<Document>,
     @Expose val meta: Meta

+ 63 - 6
app/src/main/java/com/aaron/kakao/hospitalmapfortube/ui/main/MainActivity.kt

@@ -1,13 +1,20 @@
 package com.aaron.kakao.hospitalmapfortube.ui.main
 
 import android.Manifest
+import android.content.ActivityNotFoundException
 import android.content.Context
+import android.content.Intent
 import android.content.pm.PackageManager
+import android.net.Uri
 import android.os.Build
 import android.os.Bundle
 import android.support.v4.app.ActivityCompat
+import android.support.v7.app.AlertDialog
+import android.widget.ArrayAdapter
 import android.widget.Toast
 import com.aaron.kakao.hospitalmapfortube.R
+import com.aaron.kakao.hospitalmapfortube.data.remote.model.CATEGORY_HOSPITAL
+import com.aaron.kakao.hospitalmapfortube.data.remote.model.CATEGORY_PHARMACY
 import com.aaron.kakao.hospitalmapfortube.data.remote.model.Document
 import com.aaron.kakao.hospitalmapfortube.databinding.ActivityMainBinding
 import com.aaron.kakao.hospitalmapfortube.ui.BindingActivity
@@ -19,9 +26,14 @@ import net.daum.mf.map.api.MapPoint
 import net.daum.mf.map.api.MapView
 import org.koin.android.viewmodel.ext.android.getViewModel
 
+private const val NAVI_TYPE_CAR = "CAR"
+private const val NAVI_TYPE_PUBLICTRANSIT = "PUBLICTRANSIT"
+private const val NAVI_TYPE_FOOT = "FOOT"
+
 class MainActivity : BindingActivity<ActivityMainBinding, MainViewModel>() {
 
     private val mapView by lazy { MapView(this) }
+
     // 런타임 퍼미션 체크 필요 여부
     private val needPermission: Boolean
         get() {
@@ -152,8 +164,8 @@ class MainActivity : BindingActivity<ActivityMainBinding, MainViewModel>() {
                     MapPoint.mapPointWithGeoCoord(document.y.toDouble(), document.x.toDouble())
                 tag = document.id.toInt()
                 markerType = when (document.category_group_code) {
-                    "HP8" -> MapPOIItem.MarkerType.BluePin
-                    "PM9" -> MapPOIItem.MarkerType.YellowPin
+                    CATEGORY_HOSPITAL -> MapPOIItem.MarkerType.BluePin
+                    CATEGORY_PHARMACY -> MapPOIItem.MarkerType.YellowPin
                     else -> MapPOIItem.MarkerType.RedPin
                 }
                 selectedMarkerType = MapPOIItem.MarkerType.RedPin
@@ -227,9 +239,6 @@ class MainActivity : BindingActivity<ActivityMainBinding, MainViewModel>() {
 
         override fun onMapViewLongPressed(mv: MapView?, p1: MapPoint?) {
             mapView.moveCurrentLocation(this@MainActivity)
-//            if (!needPermission) {
-//                showCurrentLocationMarker()
-//            }
             Toast.makeText(this@MainActivity, R.string.message_move_current, Toast.LENGTH_SHORT)
                 .show()
         }
@@ -245,9 +254,14 @@ class MainActivity : BindingActivity<ActivityMainBinding, MainViewModel>() {
 
         override fun onCalloutBalloonOfPOIItemTouched(
             p0: MapView?,
-            p1: MapPOIItem?,
+            mapPOIItem: MapPOIItem?,
             p2: MapPOIItem.CalloutBalloonButtonType?
         ) {
+            if (!needPermission) {
+                showNaviDialog(mapPOIItem!!.mapPoint)
+            } else {
+                Toast.makeText(this@MainActivity, getString(R.string.message_navi_permission), Toast.LENGTH_SHORT).show()
+            }
         }
 
         override fun onDraggablePOIItemMoved(p0: MapView?, p1: MapPOIItem?, p2: MapPoint?) {
@@ -259,6 +273,49 @@ class MainActivity : BindingActivity<ActivityMainBinding, MainViewModel>() {
 
     }
 
+    /**
+     * 길찾기 다이얼로그 팝업
+     */
+    private fun showNaviDialog(mapPoint: MapPoint) {
+        val arrayAdapter =
+            ArrayAdapter<String>(this@MainActivity, android.R.layout.select_dialog_item)
+                .apply {
+                    add(getString(R.string.navi_car))
+                    add(getString(R.string.navi_publictransit))
+                    add(getString(R.string.navi_foot))
+                }
+        AlertDialog.Builder(this@MainActivity).run {
+            setTitle(getString(R.string.navi_title))
+            setIcon(R.drawable.tube_icon)
+            setAdapter(arrayAdapter) { dialog, id ->
+                val naviType = when (id) {
+                    0 -> NAVI_TYPE_CAR
+                    1 -> NAVI_TYPE_PUBLICTRANSIT
+                    else -> NAVI_TYPE_FOOT
+                }
+
+                var url = LocationUtil.getCurrentLocation(this@MainActivity).let {
+                    String.format(
+                        getString(R.string.url_daummap),
+                        it!!.latitude,
+                        it.longitude,
+                        mapPoint.mapPointGeoCoord.latitude,
+                        mapPoint.mapPointGeoCoord.longitude,
+                        naviType
+                    )
+                }
+
+                try {
+                    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
+                } catch (ex: ActivityNotFoundException) {
+                    url = getString(R.string.market_url_daummap)
+                    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
+                }
+                dialog.dismiss()
+            }
+        }.show()
+    }
+
     /**
      * 현재 위치로 이동
      */

+ 4 - 6
app/src/main/java/com/aaron/kakao/hospitalmapfortube/ui/main/MainViewModel.kt

@@ -1,11 +1,9 @@
 package com.aaron.kakao.hospitalmapfortube.ui.main
 
 import android.databinding.ObservableBoolean
-import android.util.Log
 import com.aaron.kakao.hospitalmapfortube.core.BaseViewModel
 import com.aaron.kakao.hospitalmapfortube.data.remote.api.MapAPI
-import com.aaron.kakao.hospitalmapfortube.data.remote.model.Category
-import com.aaron.kakao.hospitalmapfortube.data.remote.model.Document
+import com.aaron.kakao.hospitalmapfortube.data.remote.model.*
 import io.reactivex.Observable
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.schedulers.Schedulers
@@ -99,7 +97,7 @@ class MainViewModel(private val api: MapAPI) : BaseViewModel() {
                     "x" to "${mapPoint.mapPointGeoCoord.longitude}",
                     "y" to "${mapPoint.mapPointGeoCoord.latitude}",
                     "sort" to "distance",
-                    "category_group_code" to "HP8",
+                    "category_group_code" to CATEGORY_HOSPITAL,
                     "page" to currentHospitalPage.toString()
                 ))
                     .subscribeOn(Schedulers.io()).toObservable()
@@ -111,7 +109,7 @@ class MainViewModel(private val api: MapAPI) : BaseViewModel() {
                     "x" to "${mapPoint.mapPointGeoCoord.longitude}",
                     "y" to "${mapPoint.mapPointGeoCoord.latitude}",
                     "sort" to "distance",
-                    "category_group_code" to "PM9",
+                    "category_group_code" to CATEGORY_PHARMACY,
                     "page" to currentPharmacyPage.toString()
                 ))
                     .subscribeOn(Schedulers.io()).toObservable()
@@ -123,7 +121,7 @@ class MainViewModel(private val api: MapAPI) : BaseViewModel() {
                     "x" to "${mapPoint.mapPointGeoCoord.longitude}",
                     "y" to "${mapPoint.mapPointGeoCoord.latitude}",
                     "sort" to "distance",
-                    "category_group_code" to "OL7",
+                    "category_group_code" to CATEGORY_OIL,
                     "page" to currentOilPage.toString()
                 ))
                     .subscribeOn(Schedulers.io()).toObservable()

二進制
app/src/main/res/drawable-xxhdpi/tube_icon.png


+ 8 - 2
app/src/main/res/values/strings.xml

@@ -10,10 +10,16 @@
     <string name="message_permission_request">앱을 사용하기 위해 사용자 위치정보 접근 권한이 필요합니다.</string>
     <string name="message_permission_denied">현재 위치 사용을 위해 [설정] > [권한]에서 권한을 허용해주세요.</string>
     <string name="current_location">현재위치</string>
-
+
     <string name="title_activity_splash">SplashActivity</string>
     <string name="dummy_button">Dummy Button</string>
     <string name="dummy_content">DUMMY\nCONTENT</string>
-
+    <string name="navi_car">자동차</string>
+    <string name="navi_publictransit">대중교통</string>
+    <string name="navi_foot">도보</string>
+    <string name="navi_title">길찾기</string>
+    <string name="url_daummap">daummaps://route?sp=%1f,%2f&amp;ep=%3f,%4f&amp;by=%5s</string>
+    <string name="market_url_daummap">market://details?id=net.daum.android.map</string>
+    <string name="message_navi_permission">길찾기 서비스를 이용하시려면 위치 정보 접근 권한을 허용해주세요.</string>
 
 </resources>