diff --git a/moti/app/src/main/java/com/example/moti/ui/map/MapFragment.kt b/moti/app/src/main/java/com/example/moti/ui/map/MapFragment.kt index 4f2aa93..bbb2fd0 100644 --- a/moti/app/src/main/java/com/example/moti/ui/map/MapFragment.kt +++ b/moti/app/src/main/java/com/example/moti/ui/map/MapFragment.kt @@ -16,7 +16,10 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter import android.widget.ImageButton +import android.widget.Spinner import android.widget.TextView import androidx.activity.result.contract.ActivityResultContracts import androidx.core.app.ActivityCompat @@ -55,6 +58,10 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext class MapFragment : Fragment(), OnMapReadyCallback, GoogleMap.OnMarkerClickListener { + + private lateinit var colorFilterSpinner: Spinner + private var selectedTagColor: TagColor? = null + private val radioButtonViewModel: RadioButtonViewModel by activityViewModels() private lateinit var googleMap: GoogleMap private lateinit var fusedLocationProviderClient: FusedLocationProviderClient @@ -128,6 +135,37 @@ class MapFragment : Fragment(), OnMapReadyCallback, GoogleMap.OnMarkerClickListe tagColorViewModel.selectedTagColor.observe(viewLifecycleOwner) { tagColor -> updateMarkerColor(tagColor) } + + + colorFilterSpinner = view.findViewById(R.id.spinner_color_filter) + val adapter = ArrayAdapter.createFromResource( + requireContext(), + R.array.tag_colors_array, + R.layout.custom_spinner_item + ) + adapter.setDropDownViewResource(R.layout.custom_spinner_dropdown_item) + colorFilterSpinner.adapter = adapter + + colorFilterSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) { + selectedTagColor = when (position) { + 1 -> TagColor.RD + 2 -> TagColor.OG + 3 -> TagColor.YE + 4 -> TagColor.GN + 5 -> TagColor.BU + 6 -> TagColor.PU + 7 -> TagColor.BK + else -> null + } + filteringMarkers() + } + + override fun onNothingSelected(parent: AdapterView<*>) { + selectedTagColor = null + filteringMarkers() + } + } } private fun updateMarkerColor(tagColor: TagColor) { @@ -283,6 +321,13 @@ class MapFragment : Fragment(), OnMapReadyCallback, GoogleMap.OnMarkerClickListe TagColor.BK to R.drawable.black_pin_marker ) + private fun filteringMarkers() { + markers.forEach { marker -> + val place = places.find { it.alarmId.toString() == marker.snippet } + marker.isVisible = selectedTagColor == null || place?.tagColor == selectedTagColor + } + } + private fun updateMarkers() { markers.forEach { marker -> // 마커 아이콘을 변경하는 애니메이션 diff --git a/moti/app/src/main/res/drawable/spinner_background.xml b/moti/app/src/main/res/drawable/spinner_background.xml new file mode 100644 index 0000000..535b5fa --- /dev/null +++ b/moti/app/src/main/res/drawable/spinner_background.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/moti/app/src/main/res/layout/custom_spinner_dropdown_item.xml b/moti/app/src/main/res/layout/custom_spinner_dropdown_item.xml new file mode 100644 index 0000000..7b24473 --- /dev/null +++ b/moti/app/src/main/res/layout/custom_spinner_dropdown_item.xml @@ -0,0 +1,10 @@ + + diff --git a/moti/app/src/main/res/layout/custom_spinner_item.xml b/moti/app/src/main/res/layout/custom_spinner_item.xml new file mode 100644 index 0000000..45eac3c --- /dev/null +++ b/moti/app/src/main/res/layout/custom_spinner_item.xml @@ -0,0 +1,10 @@ + + diff --git a/moti/app/src/main/res/layout/fragment_map.xml b/moti/app/src/main/res/layout/fragment_map.xml index b0fc269..db1cedf 100644 --- a/moti/app/src/main/res/layout/fragment_map.xml +++ b/moti/app/src/main/res/layout/fragment_map.xml @@ -1,9 +1,9 @@ - \ No newline at end of file + + diff --git a/moti/app/src/main/res/values/strings.xml b/moti/app/src/main/res/values/strings.xml index 3cce942..7b4bab4 100644 --- a/moti/app/src/main/res/values/strings.xml +++ b/moti/app/src/main/res/values/strings.xml @@ -16,4 +16,15 @@ silent alarm 공유 취소 완료 + + 모든 색상 + 빨강 + 주황 + 노랑 + 초록 + 파랑 + 보라 + 검정 + + \ No newline at end of file