Skip to content

Commit

Permalink
Merge branch 'main' into feat/#45
Browse files Browse the repository at this point in the history
  • Loading branch information
minhye1013 authored Feb 26, 2024
2 parents 7e355f2 + 091ec06 commit a6cff25
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 107 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,9 @@ class AddDetailFragment : Fragment() {
.build()

val service = retrofit.create(ServiceApi::class.java)

// SharedPreferences

val sharedPreferences = requireActivity().getSharedPreferences("user_data", Context.MODE_PRIVATE)
val accessToken = sharedPreferences.getString("accessToken", "")

Expand Down
81 changes: 19 additions & 62 deletions app/src/main/java/org/gdsc_android/picky_panda/GoogleMapFragment.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.gdsc_android.picky_panda

import android.app.AlertDialog
import android.content.Context
import android.location.Geocoder
import android.os.Bundle
import androidx.fragment.app.Fragment
Expand Down Expand Up @@ -28,6 +29,7 @@ class GoogleMapFragment : Fragment() {
private lateinit var mapView: MapView
private var googleMap: GoogleMap? = null
/*private lateinit var placesClient: PlacesClient*/

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
Expand All @@ -43,6 +45,21 @@ class GoogleMapFragment : Fragment() {
// GoogleMap 초기화 및 설정
configureMapSettings()

// 지도 이동 이벤트 리스너 등록
map.setOnCameraIdleListener {
// 지도가 이동이 멈추면 호출되는 콜백
val visibleRegion = map.projection.visibleRegion
val northEast = visibleRegion.latLngBounds.northeast
val southWest = visibleRegion.latLngBounds.southwest

// SharedPreferences에서 토큰을 가져온다.
val sharedPreferences = requireActivity().getSharedPreferences("user_data", Context.MODE_PRIVATE)
val accessToken = sharedPreferences.getString("accessToken", "")
val homeFragment = HomeFragment()

homeFragment.inquireStoresOnMap(northEast, southWest, "Bearer $accessToken")
}

// 마커 추가
val markerOptions = MarkerOptions()
.position(LatLng(37.5569, -126.9239)) // 마커의 위치
Expand All @@ -55,6 +72,8 @@ class GoogleMapFragment : Fragment() {
// 여기에서 마커에 대한 상세 정보를 표시하는 등의 동작을 구현할 수 있습니다.
true
}


}

return view
Expand Down Expand Up @@ -114,68 +133,6 @@ class GoogleMapFragment : Fragment() {
}
}

// Vegan 가게를 표시하는 함수
/*fun showStoresOnMap(storeType: String) {
// 구글맵 관련 설정 및 초기화 등의 코드 추가
// storeType에 따라 마커를 표시하는 코드 추가
if (storeType == "Vegan") {
// 마커를 추가하는 코드
// 예시: 구글맵에 마커를 추가하는 코드 (실제로는 데이터베이스 또는 다른 소스에서 위치 정보를 가져와야 함)
val markerOptions = MarkerOptions()
.position(LatLng(37.7749, -122.4194)) // 가게의 위치 좌표
.title("Vegan Store")
val marker = googleMap?.addMarker(markerOptions)
// 마커 클릭 이벤트 처리
marker?.let { nonNullMarker ->
nonNullMarker.setOnMarkerClickListener { clickedMarker ->
// 마커를 클릭했을 때 상세 정보 다이얼로그 또는 화면을 표시하는 코드 추가
showStoreDetailsFragment("Vegan Store Details")
true
}
}
} else if (storeType == "Gluten Free") {
val markerOptions = MarkerOptions()
.position(LatLng(37.7749, -122.4194)) // 가게의 위치 좌표
.title("Vegan Store")
val marker = googleMap?.addMarker(markerOptions)
marker?.let { nonNullMarker ->
nonNullMarker.setOnMarkerClickListener { clickedMarker ->
// 마커를 클릭했을 때 상세 정보 다이얼로그 또는 화면을 표시하는 코드 추가
showStoreDetailsFragment("Gluten Free Store Details")
true
}
}
} else if (storeType == "Lactose Intolerance") {
val markerOptions = MarkerOptions()
.position(LatLng(37.7749, -122.4194)) // 가게의 위치 좌표
.title("Vegan Store")
val marker = googleMap?.addMarker(markerOptions)
marker?.let { nonNullMarker ->
nonNullMarker.setOnMarkerClickListener { clickedMarker ->
// 마커를 클릭했을 때 상세 정보 다이얼로그 또는 화면을 표시하는 코드 추가
showStoreDetailsFragment("Lactose Intolerance Store Details")
true
}
}
} else if (storeType == "Halal") {
val markerOptions = MarkerOptions()
.position(LatLng(37.7749, -122.4194)) // 가게의 위치 좌표
.title("Vegan Store")
val marker = googleMap?.addMarker(markerOptions)
marker?.let { nonNullMarker ->
nonNullMarker.setOnMarkerClickListener { clickedMarker ->
// 마커를 클릭했을 때 상세 정보 다이얼로그 또는 화면을 표시하는 코드 추가
showStoreDetailsFragment("Halal Store Details")
true
}
}
}*/

// 가게 목록을 표시하는 함수
fun showStoresOnMap(storeList: List<Store>) {
// 구글맵 관련 설정 및 초기화 등의 코드 추가
Expand Down
120 changes: 79 additions & 41 deletions app/src/main/java/org/gdsc_android/picky_panda/HomeFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,29 @@ import org.gdsc_android.picky_panda.databinding.FragmentHomeBinding
import com.google.android.gms.maps.*
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions
import org.gdsc_android.picky_panda.data.ResponseInquireMapData
import org.gdsc_android.picky_panda.data.ServiceApi
import org.gdsc_android.picky_panda.data.ServiceCreator
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class HomeFragment : Fragment() {

private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!
private lateinit var adapter: ArrayAdapter<String>

private lateinit var serviceApi: ServiceApi
private var googleMap: GoogleMap? = null

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
_binding = FragmentHomeBinding.inflate(layoutInflater, container, false)

//ServiceApi 초기화
serviceApi = ServiceCreator.apiService

// FragmentTransaction을 사용하여 GoogleMapFragment 추가
val fragmentTransaction = childFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.mapContainer, GoogleMapFragment())
Expand All @@ -44,59 +54,87 @@ class HomeFragment : Fragment() {
// AutoCompleteTextView 설정
val searchView = view?.findViewById<AutoCompleteTextView>(R.id.searchView)
searchView?.setAdapter(adapter)

// 검색 버튼 클릭 이벤트 처리
val searchButton = view?.findViewById<Button>(R.id.searchButton)
searchButton?.setOnClickListener {
val query = searchView?.text.toString()
binding.searchButton?.setOnClickListener {
val query = binding.searchView?.text.toString()
// GoogleMapFragment에 검색어 전달
val googleMapFragment =
childFragmentManager.findFragmentById(R.id.mapContainer) as? GoogleMapFragment
googleMapFragment?.onSearchQuery(query)
}

/*// Gluten Free 버튼 클릭 이벤트 처리
binding.GlutenFreeButton.setOnClickListener {
// Vegan 버튼이 클릭되었을 때 처리할 코드 추가
val googleMapFragment = GoogleMapFragment.newInstance()
googleMapFragment.showStoresOnMap("Gluten Free") // 가게 유형을 전달
//가게 조회 API 호출
//inquireStoresOnMap(query)
}

// Vegan 버튼 클릭 이벤트 처리
binding.VeganButton.setOnClickListener {
val googleMapFragment = GoogleMapFragment.newInstance()
googleMapFragment.showStoresOnMap("Vegan") // 가게 유형을 전달
}
// Lactose Intolerance 버튼 클릭 이벤트 처리
binding.LactoseButton.setOnClickListener {
val googleMapFragment = GoogleMapFragment.newInstance()
googleMapFragment.showStoresOnMap("Lactose Intolerance") // 가게 유형을 전달
}
// Halal 버튼 클릭 이벤트 처리
binding.HalalButton.setOnClickListener {
val googleMapFragment = GoogleMapFragment.newInstance()
googleMapFragment.showStoresOnMap("Halal") // 가게 유형을 전달
}*/

binding.VeganButton.setOnClickListener { showStoresOnMap("Vegan") }
binding.GlutenFreeButton.setOnClickListener { showStoresOnMap("Glueten Free") }
binding.LactoseButton.setOnClickListener { showStoresOnMap("Lactose Intolerance") }
binding.HalalButton.setOnClickListener { showStoresOnMap("Halal") }

return binding.root
}

private fun showStoresOnMap(storeType: String) {
val googleMapFragment = GoogleMapFragment.newInstance()
val stores = // fetch or provide a list of stores based on storeType
googleMapFragment.showStoresOnMap(stores)
}

//fragment의 view가 소멸되는 시점에 호출
override fun onDestroyView() {
super.onDestroyView()
_binding = null
//지도 경계 좌표값 가져오기
fun inquireStoresOnMap(northEast: LatLng, southWest: LatLng, authToken: String) {

// northEast와 southWest 좌표를 사용하여 가게 조회 API 호출
val northEastX = northEast.latitude
val northEastY = northEast.longitude
val southWestX = southWest.latitude
val southWestY = southWest.longitude

//authToken을 헤더에 추가하여 API 요청
serviceApi.inquireMap(authToken, northEastX, northEastY, southWestX, southWestY)
.enqueue(object : Callback<ResponseInquireMapData> {
override fun onResponse(
call: Call<ResponseInquireMapData>,
response: Response<ResponseInquireMapData>
) {
if (response.isSuccessful) {
// 가게 조회 성공 시의 처리
val responseData = response.body()

if (responseData != null){
if (responseData.code == 200){
//가게 목록이 비어있지 않을 경우
if (responseData.data != null) {
for (restaurant in responseData.data) {
// 가게 정보에서 위도(latitude)와 경도(longitude)를 추출
val storeLatLng = LatLng(restaurant.latitude, restaurant.longitude)

// 마커 추가
googleMap?.addMarker(
MarkerOptions()
.position(storeLatLng)
.title(restaurant.placeName)
.snippet("ID: ${restaurant.id}")
)
}
} else{
// 가게 목록이 비어있을 때의 처리
Toast.makeText(requireContext(), "Cannot find any store.", Toast.LENGTH_SHORT).show()
}
}
}
}
}

override fun onFailure(call: Call<ResponseInquireMapData>, t: Throwable) {
// 네트워크 오류 등으로 인한 실패 시의 처리
}
})
}

}
}

private fun showStoresOnMap(storeType: String) {
val googleMapFragment = GoogleMapFragment.newInstance()
val stores = // fetch or provide a list of stores based on storeType
googleMapFragment.showStoresOnMap(store)
}

//fragment의 view가 소멸되는 시점에 호출
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package org.gdsc_android.picky_panda.data

data class ResponseInquireMapData(
val code: Int,
val message: String
val message: String,
val data: List<Data>?
){
data class Data(
val id: Int,
val image: String,
val placeName: String,
val latitude: Double,
val longitude: Double
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package org.gdsc_android.picky_panda.data

data class ResponseInquireStoreData(
val code: Int,
val message: String
val message: String,
val data: Data?
){
data class Data(
val isSaved: Boolean,
val image: String,
val placeName: String,
val latitude: Double,
val longitude: Double,
Expand Down

0 comments on commit a6cff25

Please sign in to comment.