From daca60c2875c55eebbcd48f61bc1b51b698c1eb4 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Fri, 16 Sep 2022 21:03:02 +0900
Subject: [PATCH 01/99] =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=81=AB?=
=?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=97=E9=96=A2=E9=80=A3=E3=81=AE=E4=BE=9D?=
=?UTF-8?q?=E5=AD=98=E9=96=A2=E4=BF=82=E3=81=AA=E3=81=A9=E3=82=92=E8=BF=BD?=
=?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 6 +++++-
build.gradle | 1 +
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index e8c8382..6afea0b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
+ id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}
android {
@@ -12,7 +13,6 @@ android {
targetSdk 32
versionCode 1
versionName "1.0"
-
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -50,6 +50,10 @@ dependencies {
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.1'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.1'
+ implementation 'com.google.android.gms:play-services-maps:18.1.0'
+ implementation "com.google.maps:google-maps-services:0.2.11"
+ implementation 'com.google.maps.android:android-maps-utils:2.2.0'
+
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
diff --git a/build.gradle b/build.gradle
index 64f119e..6d184ae 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,6 +3,7 @@ plugins {
id 'com.android.application' version '7.2.2' apply false
id 'com.android.library' version '7.2.2' apply false
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
+ id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
}
task clean(type: Delete) {
From 2668460f603dd1259640e5995b4cf7baa93ac598 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Fri, 16 Sep 2022 23:07:21 +0900
Subject: [PATCH 02/99] =?UTF-8?q?map=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97?=
=?UTF-8?q?=E3=81=A6Manifest=E3=81=8C=E5=B0=91=E3=81=97=E3=81=A0=E3=81=91?=
=?UTF-8?q?=E5=81=8F=E5=90=91=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 75e3fbc..dbfc5b7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,12 +13,17 @@
android:supportsRtl="true"
android:theme="@style/Theme.AROA"
tools:targetApi="31">
+
+
+
-
-
+
+
From ce0cbc8446871a5966efed32050994f24f11047a Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Fri, 16 Sep 2022 23:15:41 +0900
Subject: [PATCH 03/99] =?UTF-8?q?MapsFragment=E3=82=92=E8=BF=BD=E5=8A=A0?=
=?UTF-8?q?=E3=81=97=E3=80=81viewModel=E3=82=82=E8=BF=BD=E5=8A=A0=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsFragment.kt | 156 ++++++++++++++++++
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 106 ++++++++++++
.../res/layout/fragment_add_trial_maps.xml | 8 +
3 files changed, 270 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
create mode 100644 app/src/main/res/layout/fragment_add_trial_maps.xml
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
new file mode 100644
index 0000000..cf0c55d
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
@@ -0,0 +1,156 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.*
+import com.google.maps.android.PolyUtil
+import com.google.maps.model.DirectionsResult
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import java.util.*
+
+class AddTrialMapsFragment : Fragment() {
+ companion object {
+ private const val ZOOM_SIZE = 14f
+ private const val POLYLINE_WIDTH = 12f
+ }
+
+ private var map: GoogleMap? = null
+ private var polyline: Polyline? = null
+ private val overview = 0
+ private lateinit var viewModel: AddTrialMapsViewModel
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ viewModel.execute()
+ moveCamera()
+ setMapLongClick(googleMap)
+ setMarkerClick(googleMap)
+ setOnMarkerDrag(googleMap)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ val viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
+ return inflater.inflate(R.layout.fragment_add_trial_maps, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ observeLiveData()
+ }
+
+ private fun observeLiveData() {
+ viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
+ updatePolyline(it, map)
+ })
+ }
+
+ private fun moveCamera() {
+ // Add a marker in Sydney and move the camera
+ val okinawa = LatLng(26.387409,127.729753)
+ map?.apply {
+ addMarker(MarkerOptions().position(okinawa).title("Marker in Okinawa"))
+ // moveCamera(CameraUpdateFactory.newLatLng(tokyo))
+ moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
+ }
+ }
+
+ private fun setMapLongClick(map: GoogleMap) {
+ map.setOnMapLongClickListener{latLng ->
+ val snippet = String.format(
+ Locale.getDefault(),
+ "Lat: %1$.5f, Long: %2$.5f",
+ latLng.latitude,
+ latLng.longitude
+ )
+
+ val marker = map.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .title("drop")
+ .snippet(snippet)
+ .draggable(true)
+ )
+
+ Log.i("MapsActivity","doAddMarker")
+ if (marker != null) {
+ viewModel.addWaypointMarker(marker)
+ }
+ Log.i("MapsActivity","didAddMarker")
+ }
+ }
+
+ private fun setMarkerClick(map: GoogleMap) {
+ map.setOnMarkerClickListener{marker ->
+ viewModel.removeWaypointMarker(marker)
+ marker.remove()
+ return@setOnMarkerClickListener true
+ }
+ }
+
+ private fun setOnMarkerDrag(map: GoogleMap) {
+ map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
+ private var start: com.google.maps.model.LatLng? = null
+ private var end: com.google.maps.model.LatLng? = null
+
+ override fun onMarkerDragStart(marker: Marker) {
+ marker.position.let { start =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ Log.i("MapsActivity","StartMarker:${start.toString()}")
+ }
+
+ override fun onMarkerDrag(marker: Marker) {
+ // Do Nothing.
+ }
+
+ override fun onMarkerDragEnd(marker: Marker) {
+ marker.position.let { end =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ Log.i("MapsActivity","EndMarker:${end.toString()}")
+ viewModel.changeWaypointMarker(marker)
+ }
+ })
+ }
+
+ private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
+ googleMap ?: return
+ directionsResult ?: return
+ removePolyline()
+ Log.i("MapsActivity","doUpdatePolyline")
+ addPolyline(directionsResult, googleMap)
+ Log.i("MapsActivity","didUpdatePolyline")
+ }
+
+ // 線を消す.
+ private fun removePolyline() {
+ if (map != null && polyline != null) {
+ polyline?.remove()
+ }
+ }
+
+ // 線を引く
+ private fun addPolyline(directionsResult: DirectionsResult, map: GoogleMap) {
+ val polylineOptions = PolylineOptions()
+ polylineOptions.width(POLYLINE_WIDTH)
+ // ARGB32bit形式.
+ polylineOptions.color(R.color.map_polyline_stroke)
+ val decodedPath = PolyUtil.decode(directionsResult.routes[overview].overviewPolyline.encodedPath)
+ polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
new file mode 100644
index 0000000..8d60aef
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -0,0 +1,106 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.app.Application
+import android.util.Log
+import androidx.lifecycle.*
+import com.google.maps.model.LatLng
+import com.google.android.gms.maps.model.Marker
+import com.google.maps.model.DirectionsResult
+import kotlinx.coroutines.launch
+import java.lang.StringBuilder
+
+class AddTrialMapsViewModel(application: Application) : AndroidViewModel(application) {
+ private val _directionsResult = MutableLiveData()
+ val directionsResult: LiveData = _directionsResult
+
+ private val _origin = MutableLiveData()
+ val origin: LiveData get() = _origin
+
+ private val _dest = MutableLiveData()
+ val dest: LiveData get() = _dest
+
+ private val _waypoints = MutableLiveData>().apply {
+ value = ArrayList()
+ }
+ val waypoints: LiveData> get() = _waypoints
+
+ private val _waypointMarkers = MutableLiveData>().apply {
+ value = ArrayList()
+ }
+ val waypointMarkers: LiveData> get() = _waypointMarkers
+
+
+ init {
+ _origin.value = LatLng(26.387409, 127.729753)
+ _dest.value = LatLng(26.387409, 127.729753)
+// _dest.value = LatLng(26.52486985103984, 128.0300908585622)
+// _waypoints.value?.add(LatLng(26.313224610295485, 127.79608257031921))
+ }
+
+ fun setOrigin(lat: Double, lng: Double) {
+ _origin.value = LatLng(lat,lng)
+ }
+
+ fun setDest(lat: Double, lng: Double) {
+ _dest.value = LatLng(lat,lng)
+ }
+
+
+ fun addWaypointMarker(marker: Marker) {
+ _waypointMarkers.value?.add(marker)
+ Log.i("MapsActivity", "addWaypointMarker:${_waypointMarkers.value.toString()}")
+ execute()
+ }
+
+ fun removeWaypointMarker(marker: Marker) {
+ Log.i("MapsActivity","removeMarkerLatLng:${marker.position}")
+ _waypointMarkers.value?.remove(marker)
+ Log.i("MapsActivity", "removeWaypointMarker:${_waypointMarkers.value.toString()}")
+ execute()
+ }
+
+ fun changeWaypointMarker(marker: Marker) {
+ val markersId = ArrayList()
+ for (id in _waypointMarkers.value!!) {
+ markersId.add(id.id)
+ }
+ val index = markersId.indexOf(marker.id)
+ _waypointMarkers.value?.set(index,marker)
+ Log.i("MapsActivity", "changeWaypointMarker:${_waypointMarkers.value!!.get(index).position}")
+ execute()
+ }
+
+ private fun markersToString(): String {
+ Log.i("MapsActivity","do1:")
+ val sb = StringBuilder()
+ Log.i("MapsActivity","do2:")
+ if (_waypointMarkers != null) {
+ Log.i("MapsActivity","do3:")
+ for (waypoint in _waypointMarkers.value!!) {
+// sb.append(waypoint.lat.toString() + "," + waypoint.lng.toString() + "|")
+ Log.i("MapsActivity","waypointsString: ${waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|"}")
+ sb.append(waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|")
+ }
+ }
+ val waypointsString = sb.toString()
+// waypointsString.drop(1)
+// waypointsString.dropLast(2)
+// waypointsString.replace("[", "").replace("]", "")
+ Log.i("MapsActivity","waypointsString: $waypointsString")
+ return waypointsString
+ }
+
+
+
+ fun execute() {
+ viewModelScope.launch {
+ val waypointsString = markersToString()
+ Log.i("MapsActivity", "execute:${_waypoints.value.toString()}")
+ val result = DirectionsApiHelper().execute(getApplication(),
+ _origin.value, _dest.value, waypointsString
+ )
+ Log.i("MapsActivity", "executed:${result.toString()}")
+ _directionsResult.value = result
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_add_trial_maps.xml b/app/src/main/res/layout/fragment_add_trial_maps.xml
new file mode 100644
index 0000000..fb0c88d
--- /dev/null
+++ b/app/src/main/res/layout/fragment_add_trial_maps.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
From dcd36b074887a5c3b6bfaf048092f03f8e556bde Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 17 Sep 2022 23:30:06 +0900
Subject: [PATCH 04/99] =?UTF-8?q?DirectionAPI=E3=81=AE=E5=87=A6=E7=90=86?=
=?UTF-8?q?=E3=82=92=E8=A1=8C=E3=81=86=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/DirectionsApiHelper.kt | 47 +++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
new file mode 100644
index 0000000..2846832
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
@@ -0,0 +1,47 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.content.Context
+import androidx.annotation.Nullable
+import com.google.maps.DirectionsApi
+import com.google.maps.GeoApiContext
+import com.google.maps.model.DirectionsResult
+import com.google.maps.model.LatLng
+import com.google.maps.model.TravelMode
+import com.google.maps.model.Unit
+import jp.ac.okinawa_ct.nitoc_ict.aroa.BuildConfig
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import java.util.*
+
+class DirectionsApiHelper {
+ /**
+ * 経路APIを実行する.
+ *
+ * @param context コンテキスト
+ * @param origin 出発地点
+ * @param destination 到着地点
+ * @return 取得成功: [com.google.maps.model.DirectionsResult] 失敗: null
+ */
+ @Nullable
+ suspend fun execute(context: Context, origin: LatLng?, destination: LatLng?, waypoints: String): DirectionsResult? {
+ return withContext(Dispatchers.IO) {
+ // Mapキーの取得.
+ val apiContext = GeoApiContext.Builder()
+ .apiKey(BuildConfig.API_KEY).build()
+
+ // API実行.
+ kotlin.runCatching {
+ DirectionsApi
+ .newRequest(apiContext)
+ .mode(TravelMode.WALKING)
+ .units(Unit.METRIC)
+ .language(Locale.JAPAN.language)
+ .origin(origin)
+ .destination(destination)
+ .waypoints(waypoints)
+ .await()
+ }.getOrNull()
+ }
+ }
+}
\ No newline at end of file
From 9e7929658b2f017e959f11b4d918bc56ca991b38 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sun, 18 Sep 2022 21:59:03 +0900
Subject: [PATCH 05/99] =?UTF-8?q?=E5=BE=AE=E4=BF=AE=E6=AD=A3=EF=BC=86?=
=?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsFragment.kt | 26 +++++++-------
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 36 +++++--------------
2 files changed, 22 insertions(+), 40 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
index cf0c55d..166582d 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
@@ -24,13 +24,13 @@ class AddTrialMapsFragment : Fragment() {
private const val POLYLINE_WIDTH = 12f
}
- private var map: GoogleMap? = null
- private var polyline: Polyline? = null
+ private lateinit var map: GoogleMap
+ private lateinit var polyline: Polyline
private val overview = 0
private lateinit var viewModel: AddTrialMapsViewModel
private val callback = OnMapReadyCallback { googleMap ->
- viewModel.execute()
+ viewModel.directionApiExecute()
moveCamera()
setMapLongClick(googleMap)
setMarkerClick(googleMap)
@@ -42,7 +42,7 @@ class AddTrialMapsFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- val viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
+ viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
return inflater.inflate(R.layout.fragment_add_trial_maps, container, false)
}
@@ -59,16 +59,17 @@ class AddTrialMapsFragment : Fragment() {
})
}
+ //カメラを移動
private fun moveCamera() {
// Add a marker in Sydney and move the camera
- val okinawa = LatLng(26.387409,127.729753)
- map?.apply {
- addMarker(MarkerOptions().position(okinawa).title("Marker in Okinawa"))
- // moveCamera(CameraUpdateFactory.newLatLng(tokyo))
- moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
+ val origin = LatLng(viewModel.origin.value!!.lat, viewModel.origin.value!!.lng)
+ map.apply {
+ addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
+ moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
}
}
+ //マップをロングクリック時にマーカーを追加
private fun setMapLongClick(map: GoogleMap) {
map.setOnMapLongClickListener{latLng ->
val snippet = String.format(
@@ -94,6 +95,7 @@ class AddTrialMapsFragment : Fragment() {
}
}
+ //マーカーをクリック時にそのマーカーを削除
private fun setMarkerClick(map: GoogleMap) {
map.setOnMarkerClickListener{marker ->
viewModel.removeWaypointMarker(marker)
@@ -102,6 +104,7 @@ class AddTrialMapsFragment : Fragment() {
}
}
+ //マーカーをドラッグ時に、マーカーのLatLngを更新
private fun setOnMarkerDrag(map: GoogleMap) {
map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
private var start: com.google.maps.model.LatLng? = null
@@ -111,7 +114,6 @@ class AddTrialMapsFragment : Fragment() {
marker.position.let { start =
com.google.maps.model.LatLng(it.latitude, it.longitude)
}
- Log.i("MapsActivity","StartMarker:${start.toString()}")
}
override fun onMarkerDrag(marker: Marker) {
@@ -122,19 +124,17 @@ class AddTrialMapsFragment : Fragment() {
marker.position.let { end =
com.google.maps.model.LatLng(it.latitude, it.longitude)
}
- Log.i("MapsActivity","EndMarker:${end.toString()}")
viewModel.changeWaypointMarker(marker)
}
})
}
+ //Polylineを更新
private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
googleMap ?: return
directionsResult ?: return
removePolyline()
- Log.i("MapsActivity","doUpdatePolyline")
addPolyline(directionsResult, googleMap)
- Log.i("MapsActivity","didUpdatePolyline")
}
// 線を消す.
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
index 8d60aef..1dd80a0 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -30,13 +30,6 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
val waypointMarkers: LiveData> get() = _waypointMarkers
- init {
- _origin.value = LatLng(26.387409, 127.729753)
- _dest.value = LatLng(26.387409, 127.729753)
-// _dest.value = LatLng(26.52486985103984, 128.0300908585622)
-// _waypoints.value?.add(LatLng(26.313224610295485, 127.79608257031921))
- }
-
fun setOrigin(lat: Double, lng: Double) {
_origin.value = LatLng(lat,lng)
}
@@ -45,20 +38,19 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
_dest.value = LatLng(lat,lng)
}
-
+ //waypointを追加する
fun addWaypointMarker(marker: Marker) {
_waypointMarkers.value?.add(marker)
- Log.i("MapsActivity", "addWaypointMarker:${_waypointMarkers.value.toString()}")
- execute()
+ directionApiExecute()
}
+ //waypointを削除する
fun removeWaypointMarker(marker: Marker) {
- Log.i("MapsActivity","removeMarkerLatLng:${marker.position}")
_waypointMarkers.value?.remove(marker)
- Log.i("MapsActivity", "removeWaypointMarker:${_waypointMarkers.value.toString()}")
- execute()
+ directionApiExecute()
}
+ //waypointの値を変更する(ドラッグ&ドロップ)
fun changeWaypointMarker(marker: Marker) {
val markersId = ArrayList()
for (id in _waypointMarkers.value!!) {
@@ -66,40 +58,30 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
}
val index = markersId.indexOf(marker.id)
_waypointMarkers.value?.set(index,marker)
- Log.i("MapsActivity", "changeWaypointMarker:${_waypointMarkers.value!!.get(index).position}")
- execute()
+ directionApiExecute()
}
+ //Marker型のwaypointsをDirectionAPIにリクエストを送る用のString型に変更する
private fun markersToString(): String {
- Log.i("MapsActivity","do1:")
val sb = StringBuilder()
- Log.i("MapsActivity","do2:")
if (_waypointMarkers != null) {
- Log.i("MapsActivity","do3:")
for (waypoint in _waypointMarkers.value!!) {
// sb.append(waypoint.lat.toString() + "," + waypoint.lng.toString() + "|")
- Log.i("MapsActivity","waypointsString: ${waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|"}")
sb.append(waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|")
}
}
val waypointsString = sb.toString()
-// waypointsString.drop(1)
-// waypointsString.dropLast(2)
-// waypointsString.replace("[", "").replace("]", "")
- Log.i("MapsActivity","waypointsString: $waypointsString")
return waypointsString
}
-
- fun execute() {
+ //DirectionAPIを実行
+ fun directionApiExecute() {
viewModelScope.launch {
val waypointsString = markersToString()
- Log.i("MapsActivity", "execute:${_waypoints.value.toString()}")
val result = DirectionsApiHelper().execute(getApplication(),
_origin.value, _dest.value, waypointsString
)
- Log.i("MapsActivity", "executed:${result.toString()}")
_directionsResult.value = result
}
}
From 7fbaad879b2c0578050a100223473a4f27d53141 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Fri, 16 Sep 2022 21:03:02 +0900
Subject: [PATCH 06/99] =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=81=AB?=
=?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=97=E9=96=A2=E9=80=A3=E3=81=AE=E4=BE=9D?=
=?UTF-8?q?=E5=AD=98=E9=96=A2=E4=BF=82=E3=81=AA=E3=81=A9=E3=82=92=E8=BF=BD?=
=?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
build.gradle | 1 +
1 file changed, 1 insertion(+)
diff --git a/build.gradle b/build.gradle
index adecd88..a5b0ffa 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,6 +11,7 @@ plugins {
id 'com.android.application' version '7.2.2' apply false
id 'com.android.library' version '7.2.2' apply false
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
+ id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
}
task clean(type: Delete) {
From 90c131978b1e9782ef8d8ae202c877b8df9eb0b1 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Fri, 16 Sep 2022 23:15:41 +0900
Subject: [PATCH 07/99] =?UTF-8?q?MapsFragment=E3=82=92=E8=BF=BD=E5=8A=A0?=
=?UTF-8?q?=E3=81=97=E3=80=81viewModel=E3=82=82=E8=BF=BD=E5=8A=A0=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsFragment.kt | 156 ++++++++++++++++++
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 106 ++++++++++++
.../res/layout/fragment_add_trial_maps.xml | 8 +
3 files changed, 270 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
create mode 100644 app/src/main/res/layout/fragment_add_trial_maps.xml
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
new file mode 100644
index 0000000..cf0c55d
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
@@ -0,0 +1,156 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.*
+import com.google.maps.android.PolyUtil
+import com.google.maps.model.DirectionsResult
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import java.util.*
+
+class AddTrialMapsFragment : Fragment() {
+ companion object {
+ private const val ZOOM_SIZE = 14f
+ private const val POLYLINE_WIDTH = 12f
+ }
+
+ private var map: GoogleMap? = null
+ private var polyline: Polyline? = null
+ private val overview = 0
+ private lateinit var viewModel: AddTrialMapsViewModel
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ viewModel.execute()
+ moveCamera()
+ setMapLongClick(googleMap)
+ setMarkerClick(googleMap)
+ setOnMarkerDrag(googleMap)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ val viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
+ return inflater.inflate(R.layout.fragment_add_trial_maps, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ observeLiveData()
+ }
+
+ private fun observeLiveData() {
+ viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
+ updatePolyline(it, map)
+ })
+ }
+
+ private fun moveCamera() {
+ // Add a marker in Sydney and move the camera
+ val okinawa = LatLng(26.387409,127.729753)
+ map?.apply {
+ addMarker(MarkerOptions().position(okinawa).title("Marker in Okinawa"))
+ // moveCamera(CameraUpdateFactory.newLatLng(tokyo))
+ moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
+ }
+ }
+
+ private fun setMapLongClick(map: GoogleMap) {
+ map.setOnMapLongClickListener{latLng ->
+ val snippet = String.format(
+ Locale.getDefault(),
+ "Lat: %1$.5f, Long: %2$.5f",
+ latLng.latitude,
+ latLng.longitude
+ )
+
+ val marker = map.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .title("drop")
+ .snippet(snippet)
+ .draggable(true)
+ )
+
+ Log.i("MapsActivity","doAddMarker")
+ if (marker != null) {
+ viewModel.addWaypointMarker(marker)
+ }
+ Log.i("MapsActivity","didAddMarker")
+ }
+ }
+
+ private fun setMarkerClick(map: GoogleMap) {
+ map.setOnMarkerClickListener{marker ->
+ viewModel.removeWaypointMarker(marker)
+ marker.remove()
+ return@setOnMarkerClickListener true
+ }
+ }
+
+ private fun setOnMarkerDrag(map: GoogleMap) {
+ map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
+ private var start: com.google.maps.model.LatLng? = null
+ private var end: com.google.maps.model.LatLng? = null
+
+ override fun onMarkerDragStart(marker: Marker) {
+ marker.position.let { start =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ Log.i("MapsActivity","StartMarker:${start.toString()}")
+ }
+
+ override fun onMarkerDrag(marker: Marker) {
+ // Do Nothing.
+ }
+
+ override fun onMarkerDragEnd(marker: Marker) {
+ marker.position.let { end =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ Log.i("MapsActivity","EndMarker:${end.toString()}")
+ viewModel.changeWaypointMarker(marker)
+ }
+ })
+ }
+
+ private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
+ googleMap ?: return
+ directionsResult ?: return
+ removePolyline()
+ Log.i("MapsActivity","doUpdatePolyline")
+ addPolyline(directionsResult, googleMap)
+ Log.i("MapsActivity","didUpdatePolyline")
+ }
+
+ // 線を消す.
+ private fun removePolyline() {
+ if (map != null && polyline != null) {
+ polyline?.remove()
+ }
+ }
+
+ // 線を引く
+ private fun addPolyline(directionsResult: DirectionsResult, map: GoogleMap) {
+ val polylineOptions = PolylineOptions()
+ polylineOptions.width(POLYLINE_WIDTH)
+ // ARGB32bit形式.
+ polylineOptions.color(R.color.map_polyline_stroke)
+ val decodedPath = PolyUtil.decode(directionsResult.routes[overview].overviewPolyline.encodedPath)
+ polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
new file mode 100644
index 0000000..8d60aef
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -0,0 +1,106 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.app.Application
+import android.util.Log
+import androidx.lifecycle.*
+import com.google.maps.model.LatLng
+import com.google.android.gms.maps.model.Marker
+import com.google.maps.model.DirectionsResult
+import kotlinx.coroutines.launch
+import java.lang.StringBuilder
+
+class AddTrialMapsViewModel(application: Application) : AndroidViewModel(application) {
+ private val _directionsResult = MutableLiveData()
+ val directionsResult: LiveData = _directionsResult
+
+ private val _origin = MutableLiveData()
+ val origin: LiveData get() = _origin
+
+ private val _dest = MutableLiveData()
+ val dest: LiveData get() = _dest
+
+ private val _waypoints = MutableLiveData>().apply {
+ value = ArrayList()
+ }
+ val waypoints: LiveData> get() = _waypoints
+
+ private val _waypointMarkers = MutableLiveData>().apply {
+ value = ArrayList()
+ }
+ val waypointMarkers: LiveData> get() = _waypointMarkers
+
+
+ init {
+ _origin.value = LatLng(26.387409, 127.729753)
+ _dest.value = LatLng(26.387409, 127.729753)
+// _dest.value = LatLng(26.52486985103984, 128.0300908585622)
+// _waypoints.value?.add(LatLng(26.313224610295485, 127.79608257031921))
+ }
+
+ fun setOrigin(lat: Double, lng: Double) {
+ _origin.value = LatLng(lat,lng)
+ }
+
+ fun setDest(lat: Double, lng: Double) {
+ _dest.value = LatLng(lat,lng)
+ }
+
+
+ fun addWaypointMarker(marker: Marker) {
+ _waypointMarkers.value?.add(marker)
+ Log.i("MapsActivity", "addWaypointMarker:${_waypointMarkers.value.toString()}")
+ execute()
+ }
+
+ fun removeWaypointMarker(marker: Marker) {
+ Log.i("MapsActivity","removeMarkerLatLng:${marker.position}")
+ _waypointMarkers.value?.remove(marker)
+ Log.i("MapsActivity", "removeWaypointMarker:${_waypointMarkers.value.toString()}")
+ execute()
+ }
+
+ fun changeWaypointMarker(marker: Marker) {
+ val markersId = ArrayList()
+ for (id in _waypointMarkers.value!!) {
+ markersId.add(id.id)
+ }
+ val index = markersId.indexOf(marker.id)
+ _waypointMarkers.value?.set(index,marker)
+ Log.i("MapsActivity", "changeWaypointMarker:${_waypointMarkers.value!!.get(index).position}")
+ execute()
+ }
+
+ private fun markersToString(): String {
+ Log.i("MapsActivity","do1:")
+ val sb = StringBuilder()
+ Log.i("MapsActivity","do2:")
+ if (_waypointMarkers != null) {
+ Log.i("MapsActivity","do3:")
+ for (waypoint in _waypointMarkers.value!!) {
+// sb.append(waypoint.lat.toString() + "," + waypoint.lng.toString() + "|")
+ Log.i("MapsActivity","waypointsString: ${waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|"}")
+ sb.append(waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|")
+ }
+ }
+ val waypointsString = sb.toString()
+// waypointsString.drop(1)
+// waypointsString.dropLast(2)
+// waypointsString.replace("[", "").replace("]", "")
+ Log.i("MapsActivity","waypointsString: $waypointsString")
+ return waypointsString
+ }
+
+
+
+ fun execute() {
+ viewModelScope.launch {
+ val waypointsString = markersToString()
+ Log.i("MapsActivity", "execute:${_waypoints.value.toString()}")
+ val result = DirectionsApiHelper().execute(getApplication(),
+ _origin.value, _dest.value, waypointsString
+ )
+ Log.i("MapsActivity", "executed:${result.toString()}")
+ _directionsResult.value = result
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_add_trial_maps.xml b/app/src/main/res/layout/fragment_add_trial_maps.xml
new file mode 100644
index 0000000..fb0c88d
--- /dev/null
+++ b/app/src/main/res/layout/fragment_add_trial_maps.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
From c355f0b3a0426912b2eb25268bddaf6ac07203c2 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 17 Sep 2022 23:30:06 +0900
Subject: [PATCH 08/99] =?UTF-8?q?DirectionAPI=E3=81=AE=E5=87=A6=E7=90=86?=
=?UTF-8?q?=E3=82=92=E8=A1=8C=E3=81=86=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/DirectionsApiHelper.kt | 47 +++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
new file mode 100644
index 0000000..2846832
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
@@ -0,0 +1,47 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.content.Context
+import androidx.annotation.Nullable
+import com.google.maps.DirectionsApi
+import com.google.maps.GeoApiContext
+import com.google.maps.model.DirectionsResult
+import com.google.maps.model.LatLng
+import com.google.maps.model.TravelMode
+import com.google.maps.model.Unit
+import jp.ac.okinawa_ct.nitoc_ict.aroa.BuildConfig
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import java.util.*
+
+class DirectionsApiHelper {
+ /**
+ * 経路APIを実行する.
+ *
+ * @param context コンテキスト
+ * @param origin 出発地点
+ * @param destination 到着地点
+ * @return 取得成功: [com.google.maps.model.DirectionsResult] 失敗: null
+ */
+ @Nullable
+ suspend fun execute(context: Context, origin: LatLng?, destination: LatLng?, waypoints: String): DirectionsResult? {
+ return withContext(Dispatchers.IO) {
+ // Mapキーの取得.
+ val apiContext = GeoApiContext.Builder()
+ .apiKey(BuildConfig.API_KEY).build()
+
+ // API実行.
+ kotlin.runCatching {
+ DirectionsApi
+ .newRequest(apiContext)
+ .mode(TravelMode.WALKING)
+ .units(Unit.METRIC)
+ .language(Locale.JAPAN.language)
+ .origin(origin)
+ .destination(destination)
+ .waypoints(waypoints)
+ .await()
+ }.getOrNull()
+ }
+ }
+}
\ No newline at end of file
From e52fa2279f5e7f43f19b9b839dbb18abe6baec65 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sun, 18 Sep 2022 21:59:03 +0900
Subject: [PATCH 09/99] =?UTF-8?q?=E5=BE=AE=E4=BF=AE=E6=AD=A3=EF=BC=86?=
=?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsFragment.kt | 26 +++++++-------
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 36 +++++--------------
2 files changed, 22 insertions(+), 40 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
index cf0c55d..166582d 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
@@ -24,13 +24,13 @@ class AddTrialMapsFragment : Fragment() {
private const val POLYLINE_WIDTH = 12f
}
- private var map: GoogleMap? = null
- private var polyline: Polyline? = null
+ private lateinit var map: GoogleMap
+ private lateinit var polyline: Polyline
private val overview = 0
private lateinit var viewModel: AddTrialMapsViewModel
private val callback = OnMapReadyCallback { googleMap ->
- viewModel.execute()
+ viewModel.directionApiExecute()
moveCamera()
setMapLongClick(googleMap)
setMarkerClick(googleMap)
@@ -42,7 +42,7 @@ class AddTrialMapsFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- val viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
+ viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
return inflater.inflate(R.layout.fragment_add_trial_maps, container, false)
}
@@ -59,16 +59,17 @@ class AddTrialMapsFragment : Fragment() {
})
}
+ //カメラを移動
private fun moveCamera() {
// Add a marker in Sydney and move the camera
- val okinawa = LatLng(26.387409,127.729753)
- map?.apply {
- addMarker(MarkerOptions().position(okinawa).title("Marker in Okinawa"))
- // moveCamera(CameraUpdateFactory.newLatLng(tokyo))
- moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
+ val origin = LatLng(viewModel.origin.value!!.lat, viewModel.origin.value!!.lng)
+ map.apply {
+ addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
+ moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
}
}
+ //マップをロングクリック時にマーカーを追加
private fun setMapLongClick(map: GoogleMap) {
map.setOnMapLongClickListener{latLng ->
val snippet = String.format(
@@ -94,6 +95,7 @@ class AddTrialMapsFragment : Fragment() {
}
}
+ //マーカーをクリック時にそのマーカーを削除
private fun setMarkerClick(map: GoogleMap) {
map.setOnMarkerClickListener{marker ->
viewModel.removeWaypointMarker(marker)
@@ -102,6 +104,7 @@ class AddTrialMapsFragment : Fragment() {
}
}
+ //マーカーをドラッグ時に、マーカーのLatLngを更新
private fun setOnMarkerDrag(map: GoogleMap) {
map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
private var start: com.google.maps.model.LatLng? = null
@@ -111,7 +114,6 @@ class AddTrialMapsFragment : Fragment() {
marker.position.let { start =
com.google.maps.model.LatLng(it.latitude, it.longitude)
}
- Log.i("MapsActivity","StartMarker:${start.toString()}")
}
override fun onMarkerDrag(marker: Marker) {
@@ -122,19 +124,17 @@ class AddTrialMapsFragment : Fragment() {
marker.position.let { end =
com.google.maps.model.LatLng(it.latitude, it.longitude)
}
- Log.i("MapsActivity","EndMarker:${end.toString()}")
viewModel.changeWaypointMarker(marker)
}
})
}
+ //Polylineを更新
private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
googleMap ?: return
directionsResult ?: return
removePolyline()
- Log.i("MapsActivity","doUpdatePolyline")
addPolyline(directionsResult, googleMap)
- Log.i("MapsActivity","didUpdatePolyline")
}
// 線を消す.
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
index 8d60aef..1dd80a0 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -30,13 +30,6 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
val waypointMarkers: LiveData> get() = _waypointMarkers
- init {
- _origin.value = LatLng(26.387409, 127.729753)
- _dest.value = LatLng(26.387409, 127.729753)
-// _dest.value = LatLng(26.52486985103984, 128.0300908585622)
-// _waypoints.value?.add(LatLng(26.313224610295485, 127.79608257031921))
- }
-
fun setOrigin(lat: Double, lng: Double) {
_origin.value = LatLng(lat,lng)
}
@@ -45,20 +38,19 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
_dest.value = LatLng(lat,lng)
}
-
+ //waypointを追加する
fun addWaypointMarker(marker: Marker) {
_waypointMarkers.value?.add(marker)
- Log.i("MapsActivity", "addWaypointMarker:${_waypointMarkers.value.toString()}")
- execute()
+ directionApiExecute()
}
+ //waypointを削除する
fun removeWaypointMarker(marker: Marker) {
- Log.i("MapsActivity","removeMarkerLatLng:${marker.position}")
_waypointMarkers.value?.remove(marker)
- Log.i("MapsActivity", "removeWaypointMarker:${_waypointMarkers.value.toString()}")
- execute()
+ directionApiExecute()
}
+ //waypointの値を変更する(ドラッグ&ドロップ)
fun changeWaypointMarker(marker: Marker) {
val markersId = ArrayList()
for (id in _waypointMarkers.value!!) {
@@ -66,40 +58,30 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
}
val index = markersId.indexOf(marker.id)
_waypointMarkers.value?.set(index,marker)
- Log.i("MapsActivity", "changeWaypointMarker:${_waypointMarkers.value!!.get(index).position}")
- execute()
+ directionApiExecute()
}
+ //Marker型のwaypointsをDirectionAPIにリクエストを送る用のString型に変更する
private fun markersToString(): String {
- Log.i("MapsActivity","do1:")
val sb = StringBuilder()
- Log.i("MapsActivity","do2:")
if (_waypointMarkers != null) {
- Log.i("MapsActivity","do3:")
for (waypoint in _waypointMarkers.value!!) {
// sb.append(waypoint.lat.toString() + "," + waypoint.lng.toString() + "|")
- Log.i("MapsActivity","waypointsString: ${waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|"}")
sb.append(waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|")
}
}
val waypointsString = sb.toString()
-// waypointsString.drop(1)
-// waypointsString.dropLast(2)
-// waypointsString.replace("[", "").replace("]", "")
- Log.i("MapsActivity","waypointsString: $waypointsString")
return waypointsString
}
-
- fun execute() {
+ //DirectionAPIを実行
+ fun directionApiExecute() {
viewModelScope.launch {
val waypointsString = markersToString()
- Log.i("MapsActivity", "execute:${_waypoints.value.toString()}")
val result = DirectionsApiHelper().execute(getApplication(),
_origin.value, _dest.value, waypointsString
)
- Log.i("MapsActivity", "executed:${result.toString()}")
_directionsResult.value = result
}
}
From b2115a7ecdc760b56998b11ff4872c1d6041207c Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Mon, 19 Sep 2022 02:36:18 +0900
Subject: [PATCH 10/99] =?UTF-8?q?build.gradle=E3=81=AE=E4=BE=9D=E5=AD=98?=
=?UTF-8?q?=E9=96=A2=E4=BF=82=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 1 +
build.gradle | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 2b7dd00..17d969e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -60,6 +60,7 @@ dependencies {
// Google Maps SDK
implementation 'com.google.android.gms:play-services-maps:18.1.0'
+ implementation "com.google.maps:google-maps-services:0.2.11"
// Firebase
implementation platform('com.google.firebase:firebase-bom:30.2.0') // Firebase BoM
diff --git a/build.gradle b/build.gradle
index a5b0ffa..48e08e8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,8 +8,8 @@ buildscript {
}
plugins {
- id 'com.android.application' version '7.2.2' apply false
- id 'com.android.library' version '7.2.2' apply false
+ id 'com.android.application' version '7.3.0' apply false
+ id 'com.android.library' version '7.3.0' apply false
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
}
From 107a0899df1016abb8469a861528618f644a2123 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Mon, 19 Sep 2022 02:44:46 +0900
Subject: [PATCH 11/99] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E5=BF=98?=
=?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9Fbuild.gradle=E3=81=AE?=
=?UTF-8?q?=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82=E3=82=92=E8=BF=BD=E5=8A=A0?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/build.gradle b/app/build.gradle
index 17d969e..116d205 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -61,6 +61,7 @@ dependencies {
// Google Maps SDK
implementation 'com.google.android.gms:play-services-maps:18.1.0'
implementation "com.google.maps:google-maps-services:0.2.11"
+ implementation 'com.google.maps.android:android-maps-utils:2.2.0'
// Firebase
implementation platform('com.google.firebase:firebase-bom:30.2.0') // Firebase BoM
From 4c27e6f5a8b614bbc263c48fc692e1f9d940af1c Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Tue, 20 Sep 2022 17:07:52 +0900
Subject: [PATCH 12/99] =?UTF-8?q?DirectionsApiHelper.kt=E3=81=AEimport?=
=?UTF-8?q?=E3=82=92=E6=9C=80=E9=81=A9=E5=8C=96=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
index 2846832..03dbaad 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
@@ -9,7 +9,6 @@ import com.google.maps.model.LatLng
import com.google.maps.model.TravelMode
import com.google.maps.model.Unit
import jp.ac.okinawa_ct.nitoc_ict.aroa.BuildConfig
-import jp.ac.okinawa_ct.nitoc_ict.aroa.R
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.util.*
From 381f0af36e98f30d1cbd9a6c7d0f81701a1879b5 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 24 Sep 2022 20:36:40 +0900
Subject: [PATCH 13/99] =?UTF-8?q?AddTrialMapsViewModel.kt=E3=81=A7?=
=?UTF-8?q?=E3=83=AA=E3=83=9D=E3=82=B8=E3=83=88=E3=83=AA=E3=81=AEcreatTria?=
=?UTF-8?q?l=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=82=92=E5=91=BC?=
=?UTF-8?q?=E3=81=B3=E5=87=BA=E3=81=99=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 43 +++++++++++++++----
1 file changed, 34 insertions(+), 9 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
index 1dd80a0..72dd0a4 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -1,29 +1,31 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
import android.app.Application
-import android.util.Log
-import androidx.lifecycle.*
-import com.google.maps.model.LatLng
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
import com.google.android.gms.maps.model.Marker
+import com.google.maps.android.PolyUtil
import com.google.maps.model.DirectionsResult
+import com.google.maps.model.LatLng
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
import kotlinx.coroutines.launch
-import java.lang.StringBuilder
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result as Result
class AddTrialMapsViewModel(application: Application) : AndroidViewModel(application) {
private val _directionsResult = MutableLiveData()
val directionsResult: LiveData = _directionsResult
+ private val trialRepositoryDummy = TrialRepositoryDummy()
+
private val _origin = MutableLiveData()
val origin: LiveData get() = _origin
private val _dest = MutableLiveData()
val dest: LiveData get() = _dest
- private val _waypoints = MutableLiveData>().apply {
- value = ArrayList()
- }
- val waypoints: LiveData> get() = _waypoints
-
private val _waypointMarkers = MutableLiveData>().apply {
value = ArrayList()
}
@@ -38,6 +40,11 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
_dest.value = LatLng(lat,lng)
}
+ init {
+ _origin.value = LatLng(26.387409, 127.729753)
+ _dest.value = LatLng(26.387409, 127.729753)
+ }
+
//waypointを追加する
fun addWaypointMarker(marker: Marker) {
_waypointMarkers.value?.add(marker)
@@ -85,4 +92,22 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
_directionsResult.value = result
}
}
+
+ fun createNewTrial() {
+ val trialCourse = PolyUtil.decode(directionsResult.value!!.routes[0].overviewPolyline.encodedPath)
+ val trial = Trial.Marathon("","",trialCourse[0],trialCourse,)
+ viewModelScope.launch {
+ trialRepositoryDummy.createTrial(trial).collect{
+ when(it) {
+ is Result.Loading -> "Loading"
+ is Result.Success -> {
+ //navigationを実装
+ }
+ is Result.Error -> {
+
+ }
+ }
+ }
+ }
+ }
}
\ No newline at end of file
From 660a6e3b248688c5b7cac69c1f790acbe264f3b0 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:07:31 +0900
Subject: [PATCH 14/99] =?UTF-8?q?activity=5Fmain.xml=E3=81=AEpaddingTop?=
=?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/res/layout/activity_main.xml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index df23f2e..39d13e9 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -3,8 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingTop="?attr/actionBarSize">
+ android:layout_height="match_parent">
Date: Sat, 1 Oct 2022 18:08:43 +0900
Subject: [PATCH 15/99] =?UTF-8?q?Trial=E3=81=AEorigin=E3=82=92=E8=A8=AD?=
=?UTF-8?q?=E5=AE=9A=E3=81=99=E3=82=8BAddTrialOriginFragment=E3=81=A8ViewM?=
=?UTF-8?q?odel=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/addtrial/AddTrialOriginFragment.kt | 147 ++++++++++++++++++
.../ui/addtrial/AddTrialOriginViewModel.kt | 33 ++++
2 files changed, 180 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
new file mode 100644
index 0000000..61a2548
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
@@ -0,0 +1,147 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.LatLng
+import com.google.android.gms.maps.model.Marker
+import com.google.android.gms.maps.model.MarkerOptions
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialOriginBinding
+import java.util.*
+
+class AddTrialOriginFragment : Fragment() {
+
+ companion object {
+ private const val ZOOM_SIZE = 14f
+ }
+
+ private var map: GoogleMap? = null
+ private lateinit var viewModel: AddTrialOriginViewModel
+
+ private lateinit var _binding: FragmentAddTrialOriginBinding
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding
+
+ private var currentMarker: Marker? = null
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ map = googleMap
+ moveCamera()
+ setMapLongClick(googleMap)
+ setMarkerClick(googleMap)
+ setOnMarkerDrag(googleMap)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ _binding = FragmentAddTrialOriginBinding.inflate(inflater,container, false)
+ viewModel = ViewModelProvider(this).get(AddTrialOriginViewModel::class.java)
+ binding.nextButton.setOnClickListener { viewModel.navStart() }
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ observeLiveData()
+ }
+
+ private fun observeLiveData() {
+ viewModel.navFrag.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
+ if (it == true) {
+ Log.i("originValue",viewModel.origin.value.toString())
+ val action =
+ AddTrialOriginFragmentDirections
+ .actionNavigationAddTrialOriginToNavigationAddTrialDest(
+ LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude))
+ this.findNavController().navigate(action)
+ viewModel.navCompleted()
+ }
+ })
+ }
+
+ //カメラを移動
+ private fun moveCamera() {
+ // Add a marker in Sydney and move the camera
+ val okinawa = LatLng(26.39987724386553, 127.74766655445417)
+ map?.apply {
+ moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
+ }
+ }
+
+ //マップをロングクリック時にマーカーを追加
+ private fun setMapLongClick(map: GoogleMap) {
+ map.setOnMapLongClickListener{latLng ->
+ val snippet = String.format(
+ Locale.getDefault(),
+ "Lat: %1$.5f, Long: %2$.5f",
+ latLng.latitude,
+ latLng.longitude
+ )
+
+ map.clear()
+
+ val marker = map.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .title("drop")
+ .snippet(snippet)
+ .draggable(true)
+ )
+
+ if (marker != null) {
+ viewModel.setOrigin(marker.position)
+ }
+ }
+ }
+
+ //マーカーをクリック時にそのマーカーを削除
+ private fun setMarkerClick(map: GoogleMap) {
+ map.setOnMarkerClickListener{marker ->
+ viewModel.removeOrigin()
+ marker.remove()
+ return@setOnMarkerClickListener true
+ }
+ }
+
+ //マーカーをドラッグ時に、マーカーのLatLngを更新
+ private fun setOnMarkerDrag(map: GoogleMap) {
+ map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
+ private var start: com.google.maps.model.LatLng? = null
+ private var end: com.google.maps.model.LatLng? = null
+
+ override fun onMarkerDragStart(marker: Marker) {
+ marker.position.let { start =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ }
+
+ override fun onMarkerDrag(marker: Marker) {
+ // Do Nothing.
+ }
+
+ override fun onMarkerDragEnd(marker: Marker) {
+ marker.position.let { end =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ viewModel.setOrigin(marker.position)
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
new file mode 100644
index 0000000..4eec909
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
@@ -0,0 +1,33 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import com.google.android.gms.maps.model.LatLng
+
+class AddTrialOriginViewModel(application: Application) : AndroidViewModel(application) {
+ private val _origin = MutableLiveData()
+ val origin: LiveData get() = _origin
+
+ private val _navFrag = MutableLiveData()
+ val navFrag: LiveData get() = _navFrag
+
+ fun setOrigin(latLng: LatLng) {
+ _origin.value = latLng
+ }
+
+ fun removeOrigin() {
+ if (_origin != null) {
+// _origin.value = null
+ }
+ }
+
+ fun navStart() {
+ _navFrag.value = true
+ }
+
+ fun navCompleted() {
+ _navFrag.value = false
+ }
+}
\ No newline at end of file
From 78b8a16162ed64a0b9d64809a1a634f2fa6ed72e Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:42:10 +0900
Subject: [PATCH 16/99] =?UTF-8?q?Trial=E3=81=AEdest=E3=82=92=E8=A8=AD?=
=?UTF-8?q?=E5=AE=9A=E3=81=99=E3=82=8BAddTrialDestFragment=E3=81=A8ViewMod?=
=?UTF-8?q?el=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialDestFragment.kt | 185 ++++++++++++++++++
.../aroa/ui/addtrial/AddTrialDestViewModel.kt | 62 ++++++
2 files changed, 247 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
new file mode 100644
index 0000000..8a2b6a1
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
@@ -0,0 +1,185 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.*
+import com.google.maps.android.PolyUtil
+import com.google.maps.model.DirectionsResult
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialDestBinding
+import java.util.*
+
+class AddTrialDestFragment : Fragment() {
+
+ companion object {
+ private const val ZOOM_SIZE = 14f
+ private const val POLYLINE_WIDTH = 12f
+ }
+
+ private var map: GoogleMap? = null
+ private lateinit var viewModel: AddTrialDestViewModel
+ private var polyline: Polyline? = null
+
+ private lateinit var _binding: FragmentAddTrialDestBinding
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ map = googleMap
+ moveCamera()
+ setMapLongClick(googleMap)
+ setMarkerClick(googleMap)
+ setOnMarkerDrag(googleMap)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ _binding = FragmentAddTrialDestBinding.inflate(inflater,container, false)
+ val args = AddTrialDestFragmentArgs.fromBundle(requireArguments())
+ viewModel = ViewModelProvider(this).get(AddTrialDestViewModel::class.java)
+ viewModel.setOrigin(args.originLatLng)
+ binding.nextButton.setOnClickListener { viewModel.navStart() }
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ observeLiveData()
+ }
+
+ private fun observeLiveData() {
+ viewModel.directionsResult.observe(viewLifecycleOwner, androidx.lifecycle.Observer{
+ Log.i("DestFragment","directionsResult:${it.toString()}")
+ updatePolyline(it, map)
+ })
+
+ viewModel.navFrag.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
+ if (it) {
+ val action = AddTrialDestFragmentDirections
+ .actionNavigationAddTrialDestToNavigationAddTrialMaps(
+ LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude),
+ LatLng(viewModel.dest.value!!.latitude,viewModel.dest.value!!.longitude))
+ this.findNavController().navigate(action)
+ viewModel.navCompleted()
+ }
+ })
+ }
+
+ //カメラを移動
+ private fun moveCamera() {
+ // Add a marker in Sydney and move the camera
+ val origin = LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude)
+ map?.apply {
+ addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
+ moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
+ }
+ }
+
+ //マップをロングクリック時にマーカーを追加
+ private fun setMapLongClick(map: GoogleMap) {
+ map.setOnMapLongClickListener{latLng ->
+ val snippet = String.format(
+ Locale.getDefault(),
+ "Lat: %1$.5f, Long: %2$.5f",
+ latLng.latitude,
+ latLng.longitude
+ )
+
+ map.clear()
+
+ map.addMarker(MarkerOptions()
+ .position(LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude))
+ .title("Marker in Origin"))
+
+ val marker = map.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .title("drop")
+ .snippet(snippet)
+ .draggable(true)
+ )
+
+
+ if (marker != null) {
+ Log.i("DestFragment","addMarker:${marker.position.toString()}")
+ viewModel.setDest(marker.position)
+ }
+ }
+ }
+
+ //マーカーをクリック時にそのマーカーを削除
+ private fun setMarkerClick(map: GoogleMap) {
+ map.setOnMarkerClickListener{marker ->
+ viewModel.removeDest()
+ marker.remove()
+ return@setOnMarkerClickListener true
+ }
+ }
+
+ //マーカーをドラッグ時に、マーカーのLatLngを更新
+ private fun setOnMarkerDrag(map: GoogleMap) {
+ map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
+ private var start: com.google.maps.model.LatLng? = null
+ private var end: com.google.maps.model.LatLng? = null
+
+ override fun onMarkerDragStart(marker: Marker) {
+ marker.position.let { start =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ }
+
+ override fun onMarkerDrag(marker: Marker) {
+ // Do Nothing.
+ }
+
+ override fun onMarkerDragEnd(marker: Marker) {
+ marker.position.let { end =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ viewModel.setDest(marker.position)
+ }
+ })
+ }
+
+ //Polylineを更新
+ private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
+ googleMap ?: return
+ directionsResult ?: return
+ removePolyline()
+ addPolyline(directionsResult, googleMap)
+ }
+
+ // 線を消す.
+ private fun removePolyline() {
+ if (map != null && polyline != null) {
+ polyline?.remove()
+ }
+ }
+
+ // 線を引く
+ private fun addPolyline(directionsResult: DirectionsResult, map: GoogleMap) {
+ val polylineOptions = PolylineOptions()
+ polylineOptions.width(AddTrialDestFragment.POLYLINE_WIDTH)
+ // ARGB32bit形式.
+ polylineOptions.color(R.color.map_polyline_stroke)
+ val decodedPath = PolyUtil.decode(directionsResult.routes[0].overviewPolyline.encodedPath)
+ polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
new file mode 100644
index 0000000..1d47748
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
@@ -0,0 +1,62 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.app.Application
+import android.util.Log
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import com.google.android.gms.maps.model.LatLng
+import com.google.maps.model.DirectionsResult
+import com.google.maps.model.LatLng as MapsLatLng
+import kotlinx.coroutines.launch
+
+class AddTrialDestViewModel(application: Application) : AndroidViewModel(application) {
+ private val _directionsResult = MutableLiveData()
+ val directionsResult: LiveData = _directionsResult
+
+ private val _origin = MutableLiveData()
+ val origin: LiveData get() = _origin
+
+ private val _dest = MutableLiveData()
+ val dest: LiveData get() = _dest
+
+ private val _navFrag = MutableLiveData()
+ val navFrag: LiveData get() = _navFrag
+
+ fun setOrigin(latLng: LatLng) {
+ _origin.value = latLng
+ }
+
+ fun setDest(latLng: LatLng) {
+ Log.i("DestViewModel","setDest:${latLng.toString()}")
+ _dest.value = latLng
+ directionApiExecute()
+ }
+
+ fun removeDest() {
+ if (_dest != null) {
+// _dest.value = null
+ }
+ }
+
+ fun navStart() {
+ _navFrag.value = true
+ }
+
+ fun navCompleted() {
+ _navFrag.value = false
+ }
+
+ //DirectionAPIを実行
+ fun directionApiExecute() {
+ viewModelScope.launch {
+ val result = DirectionsApiHelper().onlyOriginDestExecute(
+ MapsLatLng(_origin.value!!.latitude, _origin.value!!.longitude),
+ MapsLatLng(_dest.value!!.latitude, _dest.value!!.longitude)
+ )
+ Log.i("DestViewModel","result:${result.toString()}")
+ _directionsResult.value = result
+ }
+ }
+}
\ No newline at end of file
From 1a7ab69dbb8e089e9384cdf437b3e5026faad720 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:46:06 +0900
Subject: [PATCH 17/99] =?UTF-8?q?AddTrialFragment.kt=E3=81=A8AddTrialViewM?=
=?UTF-8?q?odel.kt=E3=82=92=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=AB?=
=?UTF-8?q?=E5=88=B6=E4=BD=9C=E7=94=BB=E9=9D=A2=E3=81=AB=E9=81=B7=E7=A7=BB?=
=?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=83=9C?=
=?UTF-8?q?=E3=82=BF=E3=83=B3=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialFragment.kt | 30 +++++++++++--------
.../aroa/ui/addtrial/AddTrialViewModel.kt | 11 +++++--
2 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
index 3e88349..d4fd0d0 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
@@ -4,39 +4,43 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.TextView
import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialBinding
class AddTrialFragment : Fragment() {
- private var _binding: FragmentAddTrialBinding? = null
-
// This property is only valid between onCreateView and
// onDestroyView.
- private val binding get() = _binding!!
+ private lateinit var binding: FragmentAddTrialBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- val dashboardViewModel =
+ val viewModel =
ViewModelProvider(this).get(AddTrialViewModel::class.java)
+// binding = FragmentAddTrialBinding.inflate(inflater, container, false)
+ binding = FragmentAddTrialBinding.inflate(layoutInflater)
+
+ viewModel.navFrag.observe(viewLifecycleOwner, Observer {
+ if (it == true) {
+ this.findNavController().navigate(
+ AddTrialFragmentDirections.actionNavigationAddTrialToNavigationAddTrialOrigin())
+ viewModel.navCompleted()
+ }
+ })
- _binding = FragmentAddTrialBinding.inflate(inflater, container, false)
- val root: View = binding.root
+ binding.startButton.setOnClickListener { viewModel.navStart() }
- val textView: TextView = binding.textAddTrial
- dashboardViewModel.text.observe(viewLifecycleOwner) {
- textView.text = it
- }
- return root
+ return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
- _binding = null
+// binding = null
}
}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
index dc12d43..3b77a50 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
@@ -5,9 +5,14 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class AddTrialViewModel : ViewModel() {
+ private val _navFrag = MutableLiveData()
+ val navFrag: LiveData get() = _navFrag
- private val _text = MutableLiveData().apply {
- value = "This is addTrial Fragment"
+ fun navStart() {
+ _navFrag.value = true
+ }
+
+ fun navCompleted() {
+ _navFrag.value = null
}
- val text: LiveData = _text
}
\ No newline at end of file
From 4eaf762a9e94604e0f178e5ac106a30427a2046c Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:48:03 +0900
Subject: [PATCH 18/99] =?UTF-8?q?AddTrialMapsFragment.kt=E3=81=A8AddTrialM?=
=?UTF-8?q?apsViewModel.kt=E3=82=92=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2?=
=?UTF-8?q?=E3=83=AB=E3=81=AE=E3=83=AA=E3=83=9D=E3=82=B8=E3=83=88=E3=83=AA?=
=?UTF-8?q?=E3=81=B8=E3=81=AE=E8=BF=BD=E5=8A=A0=E3=80=81=E3=82=B9=E3=82=BF?=
=?UTF-8?q?=E3=83=BC=E3=83=88=E7=94=BB=E9=9D=A2=E3=81=B8=E3=81=AE=E9=81=B7?=
=?UTF-8?q?=E7=A7=BB=E3=81=8C=E5=8F=AF=E8=83=BD=E3=81=AB=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsFragment.kt | 35 ++++++++++++++++---
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 31 ++++++++++------
2 files changed, 51 insertions(+), 15 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
index 166582d..2bb4325 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
@@ -8,6 +8,7 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
@@ -16,6 +17,7 @@ import com.google.android.gms.maps.model.*
import com.google.maps.android.PolyUtil
import com.google.maps.model.DirectionsResult
import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialMapsBinding
import java.util.*
class AddTrialMapsFragment : Fragment() {
@@ -24,12 +26,19 @@ class AddTrialMapsFragment : Fragment() {
private const val POLYLINE_WIDTH = 12f
}
- private lateinit var map: GoogleMap
- private lateinit var polyline: Polyline
+ private var map: GoogleMap? = null
+ private var polyline: Polyline? = null
private val overview = 0
private lateinit var viewModel: AddTrialMapsViewModel
+ private lateinit var _binding: FragmentAddTrialMapsBinding
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding
+
private val callback = OnMapReadyCallback { googleMap ->
+ map = googleMap
viewModel.directionApiExecute()
moveCamera()
setMapLongClick(googleMap)
@@ -42,8 +51,13 @@ class AddTrialMapsFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
+ _binding = FragmentAddTrialMapsBinding.inflate(inflater,container, false)
viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
- return inflater.inflate(R.layout.fragment_add_trial_maps, container, false)
+ val args = AddTrialMapsFragmentArgs.fromBundle(requireArguments())
+ viewModel.setOrigin(args.originLatLng)
+ viewModel.setDest(args.destLatLng)
+ binding.saveButton.setOnClickListener { viewModel.createNewTrial() }
+ return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -57,14 +71,24 @@ class AddTrialMapsFragment : Fragment() {
viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
updatePolyline(it, map)
})
+
+ viewModel.navFrag.observe(viewLifecycleOwner, Observer {
+ if (it) {
+ val action = AddTrialMapsFragmentDirections.actionNavigationAddTrialMapsToNavigationAddTrial()
+ this.findNavController().navigate(action)
+ viewModel.navCompleted()
+ }
+ })
}
//カメラを移動
private fun moveCamera() {
// Add a marker in Sydney and move the camera
- val origin = LatLng(viewModel.origin.value!!.lat, viewModel.origin.value!!.lng)
- map.apply {
+ val origin = LatLng(viewModel.origin.value!!.latitude, viewModel.origin.value!!.longitude)
+ val dest = LatLng(viewModel.dest.value!!.latitude, viewModel.dest.value!!.longitude)
+ map?.apply {
addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
+ addMarker(MarkerOptions().position(dest).title("Marker in Dest"))
moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
}
}
@@ -87,6 +111,7 @@ class AddTrialMapsFragment : Fragment() {
.draggable(true)
)
+
Log.i("MapsActivity","doAddMarker")
if (marker != null) {
viewModel.addWaypointMarker(marker)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
index 72dd0a4..cf9a4b7 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -5,10 +5,11 @@ import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
+import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.Marker
import com.google.maps.android.PolyUtil
import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng
+import com.google.maps.model.LatLng as MapsLatLng
import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
import kotlinx.coroutines.launch
@@ -20,6 +21,9 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
private val trialRepositoryDummy = TrialRepositoryDummy()
+ private val _navFrag = MutableLiveData()
+ val navFrag: LiveData get() = _navFrag
+
private val _origin = MutableLiveData()
val origin: LiveData get() = _origin
@@ -32,17 +36,17 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
val waypointMarkers: LiveData> get() = _waypointMarkers
- fun setOrigin(lat: Double, lng: Double) {
- _origin.value = LatLng(lat,lng)
+ init {
+ _origin.value = LatLng(26.387409, 127.729753)
+ _dest.value = LatLng(26.387409, 127.729753)
}
- fun setDest(lat: Double, lng: Double) {
- _dest.value = LatLng(lat,lng)
+ fun setOrigin(latLng: LatLng) {
+ _origin.value = latLng
}
- init {
- _origin.value = LatLng(26.387409, 127.729753)
- _dest.value = LatLng(26.387409, 127.729753)
+ fun setDest(latLng: LatLng) {
+ _dest.value = latLng
}
//waypointを追加する
@@ -86,8 +90,10 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
fun directionApiExecute() {
viewModelScope.launch {
val waypointsString = markersToString()
- val result = DirectionsApiHelper().execute(getApplication(),
- _origin.value, _dest.value, waypointsString
+ val result = DirectionsApiHelper().execute(
+ MapsLatLng(_origin.value!!.latitude, _origin.value!!.longitude),
+ MapsLatLng(_dest.value!!.latitude, _dest.value!!.longitude),
+ waypointsString
)
_directionsResult.value = result
}
@@ -102,6 +108,7 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
is Result.Loading -> "Loading"
is Result.Success -> {
//navigationを実装
+ _navFrag.value = true
}
is Result.Error -> {
@@ -110,4 +117,8 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
}
}
}
+
+ fun navCompleted() {
+ _navFrag.value = false
+ }
}
\ No newline at end of file
From 6414561fd7b2888725bfebc25ea01b732acbd780 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:49:25 +0900
Subject: [PATCH 19/99] =?UTF-8?q?AddTrialOriginFragment=E3=81=A8AddTrialDe?=
=?UTF-8?q?stFragment=E3=81=AElayout=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?=
=?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../res/layout/fragment_add_trial_dest.xml | 29 +++++++++++++++++++
.../res/layout/fragment_add_trial_origin.xml | 29 +++++++++++++++++++
2 files changed, 58 insertions(+)
create mode 100644 app/src/main/res/layout/fragment_add_trial_dest.xml
create mode 100644 app/src/main/res/layout/fragment_add_trial_origin.xml
diff --git a/app/src/main/res/layout/fragment_add_trial_dest.xml b/app/src/main/res/layout/fragment_add_trial_dest.xml
new file mode 100644
index 0000000..a749858
--- /dev/null
+++ b/app/src/main/res/layout/fragment_add_trial_dest.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_add_trial_origin.xml b/app/src/main/res/layout/fragment_add_trial_origin.xml
new file mode 100644
index 0000000..94ae16d
--- /dev/null
+++ b/app/src/main/res/layout/fragment_add_trial_origin.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From ba4751fd9fe32f69555b2b62b6571c6dfda48674 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:50:06 +0900
Subject: [PATCH 20/99] =?UTF-8?q?AddTrialMapsFragment=E3=81=AB=E9=81=B7?=
=?UTF-8?q?=E7=A7=BB=E7=94=A8=E3=81=AE=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../res/layout/fragment_add_trial_maps.xml | 33 ++++++++++++++++---
1 file changed, 29 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/layout/fragment_add_trial_maps.xml b/app/src/main/res/layout/fragment_add_trial_maps.xml
index fb0c88d..d6d1182 100644
--- a/app/src/main/res/layout/fragment_add_trial_maps.xml
+++ b/app/src/main/res/layout/fragment_add_trial_maps.xml
@@ -1,8 +1,33 @@
-
\ No newline at end of file
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+
+
+
+
+
+
+
+
+
+
+
From 42be0934e7202ba12e5721b9ffb233b214b56a79 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:52:24 +0900
Subject: [PATCH 21/99] =?UTF-8?q?navigation=E7=94=A8=E3=81=AECreateTrialFr?=
=?UTF-8?q?agment.kt=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=A6=E3=80=81?=
=?UTF-8?q?AddTrialFragment=E3=82=92=E5=8F=82=E7=85=A7=E3=81=97=E3=81=A6?=
=?UTF-8?q?=E3=81=84=E3=81=9F=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?=
=?UTF-8?q?=E5=8F=82=E7=85=A7=E5=85=88=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nitoc_ict/aroa/ui/MainActivity.kt | 3 +-
.../ui/create_trial/CreateTrialFragment.kt | 32 ++++++++++
.../ui/create_trial/CreateTrialViewModel.kt | 7 +++
.../main/res/layout/fragment_create_trial.xml | 17 +++++
app/src/main/res/menu/bottom_nav_menu.xml | 2 +-
.../res/navigation/bottom_nav_navigation.xml | 4 +-
.../navigation/create_trial_navigation.xml | 62 +++++++++++++++++++
7 files changed, 122 insertions(+), 5 deletions(-)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/create_trial/CreateTrialFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/create_trial/CreateTrialViewModel.kt
create mode 100644 app/src/main/res/layout/fragment_create_trial.xml
create mode 100644 app/src/main/res/navigation/create_trial_navigation.xml
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/MainActivity.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/MainActivity.kt
index 3f871ea..5a7bf20 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/MainActivity.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/MainActivity.kt
@@ -3,7 +3,6 @@ package jp.ac.okinawa_ct.nitoc_ict.aroa.ui
import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity
-import androidx.navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
@@ -30,7 +29,7 @@ class MainActivity : AppCompatActivity() {
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(
setOf(
- R.id.navigation_home, R.id.navigation_add_trial, R.id.navigation_check_record
+ R.id.navigation_home, R.id.navigation_create_trial, R.id.navigation_check_record
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/create_trial/CreateTrialFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/create_trial/CreateTrialFragment.kt
new file mode 100644
index 0000000..c5d49c0
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/create_trial/CreateTrialFragment.kt
@@ -0,0 +1,32 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.create_trial
+
+import androidx.lifecycle.ViewModelProvider
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.navigation.fragment.NavHostFragment
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialBinding
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentCreateTrialBinding
+
+class CreateTrialFragment : Fragment() {
+
+ companion object {
+ fun newInstance() = CreateTrialFragment()
+ }
+
+ private lateinit var viewModel: CreateTrialViewModel
+ private lateinit var binding: FragmentCreateTrialBinding
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentCreateTrialBinding.inflate(layoutInflater)
+ val navHostFragment = childFragmentManager.findFragmentById(R.id.nav_host_create_trial) as NavHostFragment
+ val navController = navHostFragment.navController
+ return binding.root
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/create_trial/CreateTrialViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/create_trial/CreateTrialViewModel.kt
new file mode 100644
index 0000000..f460df1
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/create_trial/CreateTrialViewModel.kt
@@ -0,0 +1,7 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.create_trial
+
+import androidx.lifecycle.ViewModel
+
+class CreateTrialViewModel : ViewModel() {
+ // TODO: Implement the ViewModel
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_create_trial.xml b/app/src/main/res/layout/fragment_create_trial.xml
new file mode 100644
index 0000000..020dd47
--- /dev/null
+++ b/app/src/main/res/layout/fragment_create_trial.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml
index 6fc5549..830bfa8 100644
--- a/app/src/main/res/menu/bottom_nav_menu.xml
+++ b/app/src/main/res/menu/bottom_nav_menu.xml
@@ -7,7 +7,7 @@
android:title="@string/title_home" />
diff --git a/app/src/main/res/navigation/bottom_nav_navigation.xml b/app/src/main/res/navigation/bottom_nav_navigation.xml
index 502e115..1cef112 100644
--- a/app/src/main/res/navigation/bottom_nav_navigation.xml
+++ b/app/src/main/res/navigation/bottom_nav_navigation.xml
@@ -12,8 +12,8 @@
tools:layout="@layout/fragment_home" />
diff --git a/app/src/main/res/navigation/create_trial_navigation.xml b/app/src/main/res/navigation/create_trial_navigation.xml
new file mode 100644
index 0000000..f601429
--- /dev/null
+++ b/app/src/main/res/navigation/create_trial_navigation.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From 439e4f5d6c9dcba45bf4c2645a3cfe2c58308ee8 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:53:42 +0900
Subject: [PATCH 22/99] =?UTF-8?q?navigation=E9=96=A2=E9=80=A3=E3=81=AE?=
=?UTF-8?q?=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82=E3=82=92build.gradle?=
=?UTF-8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 2 ++
build.gradle | 1 +
2 files changed, 3 insertions(+)
diff --git a/app/build.gradle b/app/build.gradle
index 116d205..b2b8a64 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@ plugins {
id 'org.jetbrains.kotlin.android'
id 'com.google.gms.google-services' // Google Services Gradle Plugin
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' // Secrets Gradle Plugin
+ id "androidx.navigation.safeargs"
}
android {
@@ -53,6 +54,7 @@ dependencies {
// Navigation
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.1'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.1'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
diff --git a/build.gradle b/build.gradle
index 48e08e8..7c44337 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,6 +4,7 @@ buildscript {
dependencies {
classpath 'com.google.gms:google-services:4.3.13'
classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
+ classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0"
}
}
From 08e6ecb94402ff398b9b75852dc4640cf432caf3 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:54:36 +0900
Subject: [PATCH 23/99] =?UTF-8?q?commit=E3=81=97=E5=BF=98=E3=82=8C?=
=?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9FAddTrialFragment=E3=81=AElayout?=
=?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E8=BF=BD=E5=8A=A0?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/res/layout/fragment_add_trial.xml | 43 +++++++++++++++----
1 file changed, 34 insertions(+), 9 deletions(-)
diff --git a/app/src/main/res/layout/fragment_add_trial.xml b/app/src/main/res/layout/fragment_add_trial.xml
index 42372a0..2c910a4 100644
--- a/app/src/main/res/layout/fragment_add_trial.xml
+++ b/app/src/main/res/layout/fragment_add_trial.xml
@@ -6,14 +6,39 @@
android:layout_height="match_parent"
tools:context=".ui.addtrial.AddTrialFragment">
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From b8c771317ad8102be4e82c3cb9b1b4eeddb36c59 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 19:02:34 +0900
Subject: [PATCH 24/99] =?UTF-8?q?waypoint=E3=81=AA=E3=81=97=E3=81=A7Direct?=
=?UTF-8?q?ionApi=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E3=83=A1?=
=?UTF-8?q?=E3=82=BD=E3=83=83=E3=83=89=E3=82=92DirectionsApiHelper.kt?=
=?UTF-8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/DirectionsApiHelper.kt | 31 ++++++++++++++++---
1 file changed, 27 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
index 03dbaad..bee2e5f 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
@@ -1,11 +1,12 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-import android.content.Context
+import android.util.Log
import androidx.annotation.Nullable
+import com.google.android.gms.maps.model.LatLng
import com.google.maps.DirectionsApi
import com.google.maps.GeoApiContext
import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng
+import com.google.maps.model.LatLng as MapsLatLng
import com.google.maps.model.TravelMode
import com.google.maps.model.Unit
import jp.ac.okinawa_ct.nitoc_ict.aroa.BuildConfig
@@ -23,11 +24,11 @@ class DirectionsApiHelper {
* @return 取得成功: [com.google.maps.model.DirectionsResult] 失敗: null
*/
@Nullable
- suspend fun execute(context: Context, origin: LatLng?, destination: LatLng?, waypoints: String): DirectionsResult? {
+ suspend fun execute(origin: MapsLatLng?, destination: MapsLatLng?, waypoints: String): DirectionsResult? {
return withContext(Dispatchers.IO) {
// Mapキーの取得.
val apiContext = GeoApiContext.Builder()
- .apiKey(BuildConfig.API_KEY).build()
+ .apiKey(BuildConfig.MAPS_API_KEY).build()
// API実行.
kotlin.runCatching {
@@ -43,4 +44,26 @@ class DirectionsApiHelper {
}.getOrNull()
}
}
+
+ @Nullable
+ suspend fun onlyOriginDestExecute(origin: MapsLatLng?, destination: MapsLatLng?): DirectionsResult? {
+ return withContext(Dispatchers.IO) {
+ // Mapキーの取得.
+ val apiContext = GeoApiContext.Builder()
+ .apiKey(BuildConfig.MAPS_API_KEY).build()
+
+ Log.i("onlyOriginDestExecute","${origin.toString()},${destination.toString()}")
+ // API実行.
+ kotlin.runCatching {
+ DirectionsApi
+ .newRequest(apiContext)
+ .mode(TravelMode.WALKING)
+ .units(Unit.METRIC)
+ .language(Locale.JAPAN.language)
+ .origin(origin)
+ .destination(destination)
+ .await()
+ }.getOrNull()
+ }
+ }
}
\ No newline at end of file
From 245f70cb4ef9a3621fa86118f5ba2b90b14e108e Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Mon, 3 Oct 2022 16:11:23 +0900
Subject: [PATCH 25/99] =?UTF-8?q?=E4=BD=9C=E6=88=90=E3=81=97=E3=81=9F?=
=?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=AB=E3=81=AE=E3=83=AA?=
=?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B?=
=?UTF-8?q?RecyclerView=E3=81=AEAdapter=E3=82=92=E8=BF=BD=E5=8A=A0?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/CreatedTrialAdapter.kt | 92 +++++++++++++++++++
1 file changed, 92 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/CreatedTrialAdapter.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/CreatedTrialAdapter.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/CreatedTrialAdapter.kt
new file mode 100644
index 0000000..18a9fd5
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/CreatedTrialAdapter.kt
@@ -0,0 +1,92 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.ListItemTrialBinding
+
+typealias OnItemClickListener = (view: View, position: Int) -> Unit
+
+class CreatedTrialAdapter(
+ context: Context
+) : ListAdapter(ITEM_CALLBACK) {
+ private val inflater = LayoutInflater.from(context)
+
+ private var onItemClickListener: OnItemClickListener? = null
+
+ class BindingHolder(
+ val binding: ListItemTrialBinding
+ ) : RecyclerView.ViewHolder(binding.root)
+ companion object {
+ val ITEM_CALLBACK = object : DiffUtil.ItemCallback() {
+ override fun areItemsTheSame(
+ oldItem: Trial,
+ newItem: Trial
+ ): Boolean = oldItem.id == newItem.id
+
+ override fun areContentsTheSame(
+ oldItem: Trial,
+ newItem: Trial
+ ): Boolean = oldItem == newItem
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindingHolder {
+
+ val binding = ListItemTrialBinding.inflate(inflater, parent, false)
+ return BindingHolder(binding)
+ }
+
+ override fun onBindViewHolder(bindingHolder: BindingHolder, position: Int) {
+ val current = getItem(position)
+ bindingHolder.binding.trialName.text = current.name
+ bindingHolder.binding.itemViewGroup.setOnClickListener {
+ onItemClickListener?.invoke(it,position)
+ }
+ }
+
+ fun setOnItemClickListener(onItemClickListener: OnItemClickListener) {
+ this.onItemClickListener = onItemClickListener
+ }
+}
+
+//class CreatedTrialAdapter: ListAdapter(CreatedTrialDiffCallback()) {
+// override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+// val item = getItem(position)
+// holder.bind(item)
+// }
+//
+// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+// return ViewHolder.from(parent)
+// }
+//
+// class ViewHolder private constructor(private val binding: ListItemTrialBinding): RecyclerView.ViewHolder(binding.root) {
+// fun bind(item: Trial) {
+// binding.trialName.text = item.name
+//// binding.executePendingBindings()
+// }
+// companion object {
+// fun from(parent: ViewGroup): ViewHolder {
+// val layoutInflater = LayoutInflater.from(parent.context)
+// val binding = ListItemTrialBinding.inflate(layoutInflater,parent,false)
+// return ViewHolder(binding)
+// }
+// }
+// }
+//}
+//
+//class CreatedTrialDiffCallback : DiffUtil.ItemCallback() {
+// override fun areItemsTheSame(oldItem: Trial, newItem: Trial): Boolean {
+// return oldItem.id == newItem.id
+// }
+//
+// override fun areContentsTheSame(oldItem: Trial, newItem: Trial): Boolean {
+// return oldItem == newItem
+// }
+//}
+
From 9c384ee1060458d8e16fdba5defbf658c36d2b81 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Mon, 3 Oct 2022 16:14:05 +0900
Subject: [PATCH 26/99] =?UTF-8?q?=E4=BD=9C=E6=88=90=E3=81=97=E3=81=9F?=
=?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=AB=E3=81=AE=E3=83=AA?=
=?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B?=
=?UTF-8?q?RecyclerView=E3=81=AEitem=E3=81=AElayout=E3=82=92=E8=BF=BD?=
=?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/res/layout/list_item_trial.xml | 15 +++++++++++++++
1 file changed, 15 insertions(+)
create mode 100644 app/src/main/res/layout/list_item_trial.xml
diff --git a/app/src/main/res/layout/list_item_trial.xml b/app/src/main/res/layout/list_item_trial.xml
new file mode 100644
index 0000000..dbcf602
--- /dev/null
+++ b/app/src/main/res/layout/list_item_trial.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
From 541955f5575e6ec86b9960e30234e19d416776ef Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Mon, 3 Oct 2022 16:15:53 +0900
Subject: [PATCH 27/99] =?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2?=
=?UTF-8?q?=E3=83=AB=E3=81=AE=E8=A9=B3=E7=B4=B0=E3=82=92=E8=A1=A8=E7=A4=BA?=
=?UTF-8?q?=E3=81=99=E3=82=8BFragment=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/addtrial/detail/TrialDetailFragment.kt | 41 +++++++++++++++++++
.../main/res/layout/fragment_trial_detail.xml | 32 +++++++++++++++
2 files changed, 73 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
create mode 100644 app/src/main/res/layout/fragment_trial_detail.xml
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
new file mode 100644
index 0000000..2e3b860
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
@@ -0,0 +1,41 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.detail
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.LatLng
+import com.google.android.gms.maps.model.MarkerOptions
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentTrialDetailBinding
+
+class TrialDetailFragment : Fragment() {
+ private lateinit var _binding: FragmentTrialDetailBinding
+ private val binding get() = _binding
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ val okinawa = LatLng(26.526230, 128.030372)
+ googleMap.addMarker(MarkerOptions().position(okinawa).title("Marker in Sydney"))
+ googleMap.moveCamera(CameraUpdateFactory.newLatLng(okinawa))
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentTrialDetailBinding.inflate(layoutInflater)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_trial_detail.xml b/app/src/main/res/layout/fragment_trial_detail.xml
new file mode 100644
index 0000000..af37b37
--- /dev/null
+++ b/app/src/main/res/layout/fragment_trial_detail.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
From 9d5719b60286bd52ff730a7b73edebf8dfc95832 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Mon, 3 Oct 2022 16:25:44 +0900
Subject: [PATCH 28/99] =?UTF-8?q?AddTrialFragment.kt=E3=81=A8AddTrialViewM?=
=?UTF-8?q?odel.kt=E3=81=AB=E4=BD=9C=E6=88=90=E3=81=97=E3=81=9F=E3=83=88?=
=?UTF-8?q?=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=AB=E3=81=AE=E3=83=AA=E3=82=B9?=
=?UTF-8?q?=E3=83=88=E3=82=92RecyclerView=E3=81=A7=E8=A1=A8=E7=A4=BA?=
=?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialFragment.kt | 28 +++++++++++
.../aroa/ui/addtrial/AddTrialViewModel.kt | 46 +++++++++++++++++++
.../main/res/layout/fragment_add_trial.xml | 4 +-
3 files changed, 77 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
index d4fd0d0..895b459 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
@@ -1,9 +1,11 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
import android.os.Bundle
+import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
@@ -26,6 +28,32 @@ class AddTrialFragment : Fragment() {
// binding = FragmentAddTrialBinding.inflate(inflater, container, false)
binding = FragmentAddTrialBinding.inflate(layoutInflater)
+
+
+
+ val adapter = CreatedTrialAdapter(binding.createdTrialList.context)
+ binding.createdTrialList.adapter = adapter
+ adapter.setOnItemClickListener { view, position ->
+ val action = AddTrialFragmentDirections.actionNavigationCreateTrialToTrialDetailFragment()
+ this.findNavController().navigate(action)
+ Toast.makeText(context,"$position",Toast.LENGTH_SHORT).show()
+ }
+
+ viewModel.testData.observe(viewLifecycleOwner, Observer {
+ it?.let {
+ Log.i("AddTrialFragment","${it}")
+ adapter.submitList(it)
+ }
+ })
+
+ viewModel.collectState.observe(viewLifecycleOwner, Observer {
+ when(it) {
+ "Loading" -> Toast.makeText(context , "Loading", Toast.LENGTH_SHORT).show()
+ "Success" -> Toast.makeText(context , "Success", Toast.LENGTH_SHORT).show()
+ "Error" -> Toast.makeText(context , "Error", Toast.LENGTH_SHORT).show()
+ }
+ })
+
viewModel.navFrag.observe(viewLifecycleOwner, Observer {
if (it == true) {
this.findNavController().navigate(
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
index 3b77a50..0d114db 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
@@ -3,11 +3,25 @@ package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.google.android.gms.maps.model.LatLng
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
+import kotlinx.coroutines.launch
class AddTrialViewModel : ViewModel() {
+ private val trialRepositoryDummy = TrialRepositoryDummy()
+
+ private val _testData : MutableLiveData> = MutableLiveData(listOf())
+ val testData: LiveData> get() = _testData
+
private val _navFrag = MutableLiveData()
val navFrag: LiveData get() = _navFrag
+ private val _collectState = MutableLiveData()
+ val collectState: LiveData get() = _collectState
+
fun navStart() {
_navFrag.value = true
}
@@ -15,4 +29,36 @@ class AddTrialViewModel : ViewModel() {
fun navCompleted() {
_navFrag.value = null
}
+
+ init {
+ getTrialList("testUserID")
+ }
+
+ fun getTrialList(userId: String) {
+ viewModelScope.launch {
+ trialRepositoryDummy.getTriedTrialByUserId(userId).collect{
+ when(it) {
+ is Result.Loading -> _collectState.value = "Loading"
+ is Result.Success -> {
+ _collectState.value = "Success"
+ _testData.value = it.data!!}
+ is Result.Error -> _collectState.value = "Error"
+ }
+ }
+ }
+ }
+
+// fun getTrialList(userId: String) {
+// viewModelScope.launch {
+// trialRepositoryDummy.getTrialsNear(LatLng(26.526230, 128.030372), 100.0).collect{
+// when(it) {
+// is Result.Loading -> _collectState.value = "Loading"
+// is Result.Success -> {
+// _collectState.value = "Success"
+// _testData.value = it.data!!}
+// is Result.Error -> _collectState.value = "Error"
+// }
+// }
+// }
+// }
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_add_trial.xml b/app/src/main/res/layout/fragment_add_trial.xml
index 2c910a4..376887c 100644
--- a/app/src/main/res/layout/fragment_add_trial.xml
+++ b/app/src/main/res/layout/fragment_add_trial.xml
@@ -37,8 +37,10 @@
android:textSize="24sp" />
+ android:layout_height="match_parent"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
\ No newline at end of file
From d46b26e9eb4c535837d23383db50619faff96425 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Tue, 4 Oct 2022 21:37:02 +0900
Subject: [PATCH 29/99] =?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=81=94=E3=81=A8?=
=?UTF-8?q?=E3=81=ABFragment=E3=81=A8ViewModel=E3=82=92=E3=82=AF=E3=83=A9?=
=?UTF-8?q?=E3=82=B9=E5=88=86=E3=81=91=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../{ => dest}/AddTrialDestFragment.kt | 36 ++++++++++++-------
.../{ => dest}/AddTrialDestViewModel.kt | 12 +++----
.../{ => origin}/AddTrialOriginFragment.kt | 15 ++++----
.../{ => origin}/AddTrialOriginViewModel.kt | 2 +-
.../addtrial/{ => start}/AddTrialFragment.kt | 22 +++++++-----
.../addtrial/{ => start}/AddTrialViewModel.kt | 3 +-
.../{ => waypoints}/AddTrialMapsFragment.kt | 22 +++++++-----
.../{ => waypoints}/AddTrialMapsViewModel.kt | 15 ++++----
.../detail/TrialDetailFragment.kt | 2 +-
.../main/res/layout/fragment_add_trial.xml | 2 +-
.../res/layout/fragment_add_trial_dest.xml | 2 +-
.../res/layout/fragment_add_trial_maps.xml | 2 +-
.../res/layout/fragment_add_trial_origin.xml | 2 +-
.../main/res/layout/fragment_trial_detail.xml | 2 +-
.../navigation/create_trial_navigation.xml | 20 ++++++++---
app/src/main/res/values/colors.xml | 1 +
gradle/wrapper/gradle-wrapper.properties | 2 +-
17 files changed, 99 insertions(+), 63 deletions(-)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/{ => dest}/AddTrialDestFragment.kt (83%)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/{ => dest}/AddTrialDestViewModel.kt (77%)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/{ => origin}/AddTrialOriginFragment.kt (91%)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/{ => origin}/AddTrialOriginViewModel.kt (93%)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/{ => start}/AddTrialFragment.kt (70%)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/{ => start}/AddTrialViewModel.kt (95%)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/{ => waypoints}/AddTrialMapsFragment.kt (90%)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/{ => waypoints}/AddTrialMapsViewModel.kt (86%)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/{addtrial => }/detail/TrialDetailFragment.kt (96%)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestFragment.kt
similarity index 83%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestFragment.kt
index 8a2b6a1..04e8937 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestFragment.kt
@@ -1,4 +1,4 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.dest
import android.os.Bundle
import android.util.Log
@@ -49,8 +49,10 @@ class AddTrialDestFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- _binding = FragmentAddTrialDestBinding.inflate(inflater,container, false)
- val args = AddTrialDestFragmentArgs.fromBundle(requireArguments())
+ _binding = FragmentAddTrialDestBinding.inflate(inflater, container, false)
+ val args = AddTrialDestFragmentArgs.fromBundle(
+ requireArguments()
+ )
viewModel = ViewModelProvider(this).get(AddTrialDestViewModel::class.java)
viewModel.setOrigin(args.originLatLng)
binding.nextButton.setOnClickListener { viewModel.navStart() }
@@ -66,16 +68,20 @@ class AddTrialDestFragment : Fragment() {
private fun observeLiveData() {
viewModel.directionsResult.observe(viewLifecycleOwner, androidx.lifecycle.Observer{
- Log.i("DestFragment","directionsResult:${it.toString()}")
+ Log.i("DestFragment", "directionsResult:${it.toString()}")
updatePolyline(it, map)
})
viewModel.navFrag.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
if (it) {
- val action = AddTrialDestFragmentDirections
- .actionNavigationAddTrialDestToNavigationAddTrialMaps(
- LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude),
- LatLng(viewModel.dest.value!!.latitude,viewModel.dest.value!!.longitude))
+ val action =
+ AddTrialDestFragmentDirections.actionNavigationAddTrialDestToNavigationAddTrialMaps(
+ LatLng(
+ viewModel.origin.value!!.latitude,
+ viewModel.origin.value!!.longitude
+ ),
+ LatLng(viewModel.dest.value!!.latitude, viewModel.dest.value!!.longitude)
+ )
this.findNavController().navigate(action)
viewModel.navCompleted()
}
@@ -85,7 +91,7 @@ class AddTrialDestFragment : Fragment() {
//カメラを移動
private fun moveCamera() {
// Add a marker in Sydney and move the camera
- val origin = LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude)
+ val origin = LatLng(viewModel.origin.value!!.latitude, viewModel.origin.value!!.longitude)
map?.apply {
addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
@@ -104,8 +110,14 @@ class AddTrialDestFragment : Fragment() {
map.clear()
- map.addMarker(MarkerOptions()
- .position(LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude))
+ map.addMarker(
+ MarkerOptions()
+ .position(
+ LatLng(
+ viewModel.origin.value!!.latitude,
+ viewModel.origin.value!!.longitude
+ )
+ )
.title("Marker in Origin"))
val marker = map.addMarker(
@@ -118,7 +130,7 @@ class AddTrialDestFragment : Fragment() {
if (marker != null) {
- Log.i("DestFragment","addMarker:${marker.position.toString()}")
+ Log.i("DestFragment", "addMarker:${marker.position.toString()}")
viewModel.setDest(marker.position)
}
}
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestViewModel.kt
similarity index 77%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestViewModel.kt
index 1d47748..b335636 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestViewModel.kt
@@ -1,4 +1,4 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.dest
import android.app.Application
import android.util.Log
@@ -8,7 +8,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.google.android.gms.maps.model.LatLng
import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng as MapsLatLng
+import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.DirectionsApiHelper
import kotlinx.coroutines.launch
class AddTrialDestViewModel(application: Application) : AndroidViewModel(application) {
@@ -29,7 +29,7 @@ class AddTrialDestViewModel(application: Application) : AndroidViewModel(applica
}
fun setDest(latLng: LatLng) {
- Log.i("DestViewModel","setDest:${latLng.toString()}")
+ Log.i("DestViewModel", "setDest:${latLng.toString()}")
_dest.value = latLng
directionApiExecute()
}
@@ -52,10 +52,10 @@ class AddTrialDestViewModel(application: Application) : AndroidViewModel(applica
fun directionApiExecute() {
viewModelScope.launch {
val result = DirectionsApiHelper().onlyOriginDestExecute(
- MapsLatLng(_origin.value!!.latitude, _origin.value!!.longitude),
- MapsLatLng(_dest.value!!.latitude, _dest.value!!.longitude)
+ com.google.maps.model.LatLng(_origin.value!!.latitude, _origin.value!!.longitude),
+ com.google.maps.model.LatLng(_dest.value!!.latitude, _dest.value!!.longitude)
)
- Log.i("DestViewModel","result:${result.toString()}")
+ Log.i("DestViewModel", "result:${result.toString()}")
_directionsResult.value = result
}
}
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginFragment.kt
similarity index 91%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginFragment.kt
index 61a2548..6a0048b 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginFragment.kt
@@ -1,4 +1,4 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.origin
import android.os.Bundle
import android.util.Log
@@ -49,7 +49,7 @@ class AddTrialOriginFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- _binding = FragmentAddTrialOriginBinding.inflate(inflater,container, false)
+ _binding = FragmentAddTrialOriginBinding.inflate(inflater, container, false)
viewModel = ViewModelProvider(this).get(AddTrialOriginViewModel::class.java)
binding.nextButton.setOnClickListener { viewModel.navStart() }
return binding.root
@@ -65,11 +65,14 @@ class AddTrialOriginFragment : Fragment() {
private fun observeLiveData() {
viewModel.navFrag.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
if (it == true) {
- Log.i("originValue",viewModel.origin.value.toString())
+ Log.i("originValue", viewModel.origin.value.toString())
val action =
- AddTrialOriginFragmentDirections
- .actionNavigationAddTrialOriginToNavigationAddTrialDest(
- LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude))
+ AddTrialOriginFragmentDirections.actionNavigationAddTrialOriginToNavigationAddTrialDest(
+ LatLng(
+ viewModel.origin.value!!.latitude,
+ viewModel.origin.value!!.longitude
+ )
+ )
this.findNavController().navigate(action)
viewModel.navCompleted()
}
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginViewModel.kt
similarity index 93%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginViewModel.kt
index 4eec909..0286970 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginViewModel.kt
@@ -1,4 +1,4 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.origin
import android.app.Application
import androidx.lifecycle.AndroidViewModel
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt
similarity index 70%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt
index 895b459..7b0d557 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt
@@ -1,4 +1,4 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.start
import android.os.Bundle
import android.util.Log
@@ -11,6 +11,7 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialBinding
+import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.CreatedTrialAdapter
class AddTrialFragment : Fragment() {
@@ -34,30 +35,33 @@ class AddTrialFragment : Fragment() {
val adapter = CreatedTrialAdapter(binding.createdTrialList.context)
binding.createdTrialList.adapter = adapter
adapter.setOnItemClickListener { view, position ->
- val action = AddTrialFragmentDirections.actionNavigationCreateTrialToTrialDetailFragment()
+ val action = AddTrialFragmentDirections.actionNavigationCreateTrialToTrialDetailFragment(
+ viewModel.testData.value!!.get(position).id
+ )
this.findNavController().navigate(action)
- Toast.makeText(context,"$position",Toast.LENGTH_SHORT).show()
+ Toast.makeText(context, "$position", Toast.LENGTH_SHORT).show()
}
- viewModel.testData.observe(viewLifecycleOwner, Observer {
+ viewModel.testData.observe(viewLifecycleOwner, Observer{
it?.let {
- Log.i("AddTrialFragment","${it}")
+ Log.i("AddTrialFragment", "${it}")
adapter.submitList(it)
}
})
viewModel.collectState.observe(viewLifecycleOwner, Observer {
when(it) {
- "Loading" -> Toast.makeText(context , "Loading", Toast.LENGTH_SHORT).show()
- "Success" -> Toast.makeText(context , "Success", Toast.LENGTH_SHORT).show()
- "Error" -> Toast.makeText(context , "Error", Toast.LENGTH_SHORT).show()
+ "Loading" -> Toast.makeText(context, "Loading", Toast.LENGTH_SHORT).show()
+ "Success" -> Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show()
+ "Error" -> Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show()
}
})
viewModel.navFrag.observe(viewLifecycleOwner, Observer {
if (it == true) {
this.findNavController().navigate(
- AddTrialFragmentDirections.actionNavigationAddTrialToNavigationAddTrialOrigin())
+ AddTrialFragmentDirections.actionNavigationAddTrialToNavigationAddTrialOrigin()
+ )
viewModel.navCompleted()
}
})
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialViewModel.kt
similarity index 95%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialViewModel.kt
index 0d114db..94064bc 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialViewModel.kt
@@ -1,10 +1,9 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.start
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.google.android.gms.maps.model.LatLng
import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result
import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsFragment.kt
similarity index 90%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsFragment.kt
index 2bb4325..a912515 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsFragment.kt
@@ -1,4 +1,4 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.waypoints
import android.os.Bundle
import android.util.Log
@@ -6,8 +6,8 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
-import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
@@ -51,9 +51,11 @@ class AddTrialMapsFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- _binding = FragmentAddTrialMapsBinding.inflate(inflater,container, false)
+ _binding = FragmentAddTrialMapsBinding.inflate(inflater, container, false)
viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
- val args = AddTrialMapsFragmentArgs.fromBundle(requireArguments())
+ val args = AddTrialMapsFragmentArgs.fromBundle(
+ requireArguments()
+ )
viewModel.setOrigin(args.originLatLng)
viewModel.setDest(args.destLatLng)
binding.saveButton.setOnClickListener { viewModel.createNewTrial() }
@@ -68,13 +70,14 @@ class AddTrialMapsFragment : Fragment() {
}
private fun observeLiveData() {
- viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
+ viewModel.directionsResult.observe(viewLifecycleOwner, androidx.lifecycle.Observer{
updatePolyline(it, map)
})
viewModel.navFrag.observe(viewLifecycleOwner, Observer {
if (it) {
- val action = AddTrialMapsFragmentDirections.actionNavigationAddTrialMapsToNavigationAddTrial()
+ val action =
+ AddTrialMapsFragmentDirections.actionNavigationAddTrialMapsToNavigationAddTrial()
this.findNavController().navigate(action)
viewModel.navCompleted()
}
@@ -112,11 +115,11 @@ class AddTrialMapsFragment : Fragment() {
)
- Log.i("MapsActivity","doAddMarker")
+ Log.i("MapsActivity", "doAddMarker")
if (marker != null) {
viewModel.addWaypointMarker(marker)
}
- Log.i("MapsActivity","didAddMarker")
+ Log.i("MapsActivity", "didAddMarker")
}
}
@@ -175,7 +178,8 @@ class AddTrialMapsFragment : Fragment() {
polylineOptions.width(POLYLINE_WIDTH)
// ARGB32bit形式.
polylineOptions.color(R.color.map_polyline_stroke)
- val decodedPath = PolyUtil.decode(directionsResult.routes[overview].overviewPolyline.encodedPath)
+ val decodedPath =
+ PolyUtil.decode(directionsResult.routes[overview].overviewPolyline.encodedPath)
polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
}
}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsViewModel.kt
similarity index 86%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsViewModel.kt
index cf9a4b7..775dc53 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsViewModel.kt
@@ -1,4 +1,4 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.waypoints
import android.app.Application
import androidx.lifecycle.AndroidViewModel
@@ -9,11 +9,11 @@ import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.Marker
import com.google.maps.android.PolyUtil
import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng as MapsLatLng
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result
import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
+import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.DirectionsApiHelper
import kotlinx.coroutines.launch
-import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result as Result
class AddTrialMapsViewModel(application: Application) : AndroidViewModel(application) {
private val _directionsResult = MutableLiveData()
@@ -91,8 +91,8 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
viewModelScope.launch {
val waypointsString = markersToString()
val result = DirectionsApiHelper().execute(
- MapsLatLng(_origin.value!!.latitude, _origin.value!!.longitude),
- MapsLatLng(_dest.value!!.latitude, _dest.value!!.longitude),
+ com.google.maps.model.LatLng(_origin.value!!.latitude, _origin.value!!.longitude),
+ com.google.maps.model.LatLng(_dest.value!!.latitude, _dest.value!!.longitude),
waypointsString
)
_directionsResult.value = result
@@ -100,8 +100,9 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
}
fun createNewTrial() {
- val trialCourse = PolyUtil.decode(directionsResult.value!!.routes[0].overviewPolyline.encodedPath)
- val trial = Trial.Marathon("","",trialCourse[0],trialCourse,)
+ val trialCourse =
+ PolyUtil.decode(directionsResult.value!!.routes[0].overviewPolyline.encodedPath)
+ val trial = Trial.Marathon("", "", trialCourse[0], trialCourse,)
viewModelScope.launch {
trialRepositoryDummy.createTrial(trial).collect{
when(it) {
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
similarity index 96%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
index 2e3b860..69f521e 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
@@ -1,4 +1,4 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.detail
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.detail
import android.os.Bundle
import android.view.LayoutInflater
diff --git a/app/src/main/res/layout/fragment_add_trial.xml b/app/src/main/res/layout/fragment_add_trial.xml
index 376887c..a22b4b9 100644
--- a/app/src/main/res/layout/fragment_add_trial.xml
+++ b/app/src/main/res/layout/fragment_add_trial.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".ui.addtrial.AddTrialFragment">
+ tools:context=".ui.addtrial.start.AddTrialFragment">
+ tools:context=".ui.addtrial.dest.AddTrialDestFragment" />
+ tools:context=".ui.addtrial.waypoints.AddTrialMapsFragment" />
+ tools:context=".ui.addtrial.origin.AddTrialOriginFragment" />
+ tools:context=".ui.detail.TrialDetailFragment" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index f8c6127..47a6c64 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -7,4 +7,5 @@
#FF018786
#FF000000
#FFFFFFFF
+ #FF3700B3
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index b8010e9..dda5dfd 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Tue Aug 23 02:20:20 JST 2022
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
From 6c04069538252b7180d6bb4d0b18e94173477e5f Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sun, 18 Sep 2022 21:59:03 +0900
Subject: [PATCH 30/99] =?UTF-8?q?=E5=BE=AE=E4=BF=AE=E6=AD=A3=EF=BC=86?=
=?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 88 +++++++++++++++++++
1 file changed, 88 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
new file mode 100644
index 0000000..1dd80a0
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -0,0 +1,88 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.app.Application
+import android.util.Log
+import androidx.lifecycle.*
+import com.google.maps.model.LatLng
+import com.google.android.gms.maps.model.Marker
+import com.google.maps.model.DirectionsResult
+import kotlinx.coroutines.launch
+import java.lang.StringBuilder
+
+class AddTrialMapsViewModel(application: Application) : AndroidViewModel(application) {
+ private val _directionsResult = MutableLiveData()
+ val directionsResult: LiveData = _directionsResult
+
+ private val _origin = MutableLiveData()
+ val origin: LiveData get() = _origin
+
+ private val _dest = MutableLiveData()
+ val dest: LiveData get() = _dest
+
+ private val _waypoints = MutableLiveData>().apply {
+ value = ArrayList()
+ }
+ val waypoints: LiveData> get() = _waypoints
+
+ private val _waypointMarkers = MutableLiveData>().apply {
+ value = ArrayList()
+ }
+ val waypointMarkers: LiveData> get() = _waypointMarkers
+
+
+ fun setOrigin(lat: Double, lng: Double) {
+ _origin.value = LatLng(lat,lng)
+ }
+
+ fun setDest(lat: Double, lng: Double) {
+ _dest.value = LatLng(lat,lng)
+ }
+
+ //waypointを追加する
+ fun addWaypointMarker(marker: Marker) {
+ _waypointMarkers.value?.add(marker)
+ directionApiExecute()
+ }
+
+ //waypointを削除する
+ fun removeWaypointMarker(marker: Marker) {
+ _waypointMarkers.value?.remove(marker)
+ directionApiExecute()
+ }
+
+ //waypointの値を変更する(ドラッグ&ドロップ)
+ fun changeWaypointMarker(marker: Marker) {
+ val markersId = ArrayList()
+ for (id in _waypointMarkers.value!!) {
+ markersId.add(id.id)
+ }
+ val index = markersId.indexOf(marker.id)
+ _waypointMarkers.value?.set(index,marker)
+ directionApiExecute()
+ }
+
+ //Marker型のwaypointsをDirectionAPIにリクエストを送る用のString型に変更する
+ private fun markersToString(): String {
+ val sb = StringBuilder()
+ if (_waypointMarkers != null) {
+ for (waypoint in _waypointMarkers.value!!) {
+// sb.append(waypoint.lat.toString() + "," + waypoint.lng.toString() + "|")
+ sb.append(waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|")
+ }
+ }
+ val waypointsString = sb.toString()
+ return waypointsString
+ }
+
+
+ //DirectionAPIを実行
+ fun directionApiExecute() {
+ viewModelScope.launch {
+ val waypointsString = markersToString()
+ val result = DirectionsApiHelper().execute(getApplication(),
+ _origin.value, _dest.value, waypointsString
+ )
+ _directionsResult.value = result
+ }
+ }
+}
\ No newline at end of file
From ad86bced6219dd63ea7ec6bf844c2b15397291f2 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Fri, 16 Sep 2022 21:03:02 +0900
Subject: [PATCH 31/99] =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=81=AB?=
=?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=97=E9=96=A2=E9=80=A3=E3=81=AE=E4=BE=9D?=
=?UTF-8?q?=E5=AD=98=E9=96=A2=E4=BF=82=E3=81=AA=E3=81=A9=E3=82=92=E8=BF=BD?=
=?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 21 ++++-----------------
1 file changed, 4 insertions(+), 17 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index b2b8a64..6afea0b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,9 +1,7 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
- id 'com.google.gms.google-services' // Google Services Gradle Plugin
- id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' // Secrets Gradle Plugin
- id "androidx.navigation.safeargs"
+ id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}
android {
@@ -15,7 +13,6 @@ android {
targetSdk 32
versionCode 1
versionName "1.0"
-
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -42,8 +39,6 @@ dependencies {
// 基本的なライブラリ
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.5.0'
-
- // レイアウト系
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
@@ -54,20 +49,12 @@ dependencies {
// Navigation
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.1'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.1'
- implementation 'androidx.legacy:legacy-support-v4:1.0.0'
-
- testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
- // Google Maps SDK
implementation 'com.google.android.gms:play-services-maps:18.1.0'
implementation "com.google.maps:google-maps-services:0.2.11"
implementation 'com.google.maps.android:android-maps-utils:2.2.0'
- // Firebase
- implementation platform('com.google.firebase:firebase-bom:30.2.0') // Firebase BoM
- implementation 'com.google.firebase:firebase-analytics-ktx' // Firebase Analytics
- implementation 'com.google.firebase:firebase-firestore-ktx' // Firebase FireStore
-
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
\ No newline at end of file
From d53a1553f64e5c8134aab5100ba2c630c187f01e Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Fri, 16 Sep 2022 23:15:41 +0900
Subject: [PATCH 32/99] =?UTF-8?q?MapsFragment=E3=82=92=E8=BF=BD=E5=8A=A0?=
=?UTF-8?q?=E3=81=97=E3=80=81viewModel=E3=82=82=E8=BF=BD=E5=8A=A0=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsFragment.kt | 156 ++++++++++++++++++
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 36 +++-
.../res/layout/fragment_add_trial_maps.xml | 33 +---
3 files changed, 187 insertions(+), 38 deletions(-)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
new file mode 100644
index 0000000..cf0c55d
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
@@ -0,0 +1,156 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.*
+import com.google.maps.android.PolyUtil
+import com.google.maps.model.DirectionsResult
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import java.util.*
+
+class AddTrialMapsFragment : Fragment() {
+ companion object {
+ private const val ZOOM_SIZE = 14f
+ private const val POLYLINE_WIDTH = 12f
+ }
+
+ private var map: GoogleMap? = null
+ private var polyline: Polyline? = null
+ private val overview = 0
+ private lateinit var viewModel: AddTrialMapsViewModel
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ viewModel.execute()
+ moveCamera()
+ setMapLongClick(googleMap)
+ setMarkerClick(googleMap)
+ setOnMarkerDrag(googleMap)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ val viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
+ return inflater.inflate(R.layout.fragment_add_trial_maps, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ observeLiveData()
+ }
+
+ private fun observeLiveData() {
+ viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
+ updatePolyline(it, map)
+ })
+ }
+
+ private fun moveCamera() {
+ // Add a marker in Sydney and move the camera
+ val okinawa = LatLng(26.387409,127.729753)
+ map?.apply {
+ addMarker(MarkerOptions().position(okinawa).title("Marker in Okinawa"))
+ // moveCamera(CameraUpdateFactory.newLatLng(tokyo))
+ moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
+ }
+ }
+
+ private fun setMapLongClick(map: GoogleMap) {
+ map.setOnMapLongClickListener{latLng ->
+ val snippet = String.format(
+ Locale.getDefault(),
+ "Lat: %1$.5f, Long: %2$.5f",
+ latLng.latitude,
+ latLng.longitude
+ )
+
+ val marker = map.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .title("drop")
+ .snippet(snippet)
+ .draggable(true)
+ )
+
+ Log.i("MapsActivity","doAddMarker")
+ if (marker != null) {
+ viewModel.addWaypointMarker(marker)
+ }
+ Log.i("MapsActivity","didAddMarker")
+ }
+ }
+
+ private fun setMarkerClick(map: GoogleMap) {
+ map.setOnMarkerClickListener{marker ->
+ viewModel.removeWaypointMarker(marker)
+ marker.remove()
+ return@setOnMarkerClickListener true
+ }
+ }
+
+ private fun setOnMarkerDrag(map: GoogleMap) {
+ map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
+ private var start: com.google.maps.model.LatLng? = null
+ private var end: com.google.maps.model.LatLng? = null
+
+ override fun onMarkerDragStart(marker: Marker) {
+ marker.position.let { start =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ Log.i("MapsActivity","StartMarker:${start.toString()}")
+ }
+
+ override fun onMarkerDrag(marker: Marker) {
+ // Do Nothing.
+ }
+
+ override fun onMarkerDragEnd(marker: Marker) {
+ marker.position.let { end =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ Log.i("MapsActivity","EndMarker:${end.toString()}")
+ viewModel.changeWaypointMarker(marker)
+ }
+ })
+ }
+
+ private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
+ googleMap ?: return
+ directionsResult ?: return
+ removePolyline()
+ Log.i("MapsActivity","doUpdatePolyline")
+ addPolyline(directionsResult, googleMap)
+ Log.i("MapsActivity","didUpdatePolyline")
+ }
+
+ // 線を消す.
+ private fun removePolyline() {
+ if (map != null && polyline != null) {
+ polyline?.remove()
+ }
+ }
+
+ // 線を引く
+ private fun addPolyline(directionsResult: DirectionsResult, map: GoogleMap) {
+ val polylineOptions = PolylineOptions()
+ polylineOptions.width(POLYLINE_WIDTH)
+ // ARGB32bit形式.
+ polylineOptions.color(R.color.map_polyline_stroke)
+ val decodedPath = PolyUtil.decode(directionsResult.routes[overview].overviewPolyline.encodedPath)
+ polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
index 1dd80a0..8d60aef 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -30,6 +30,13 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
val waypointMarkers: LiveData> get() = _waypointMarkers
+ init {
+ _origin.value = LatLng(26.387409, 127.729753)
+ _dest.value = LatLng(26.387409, 127.729753)
+// _dest.value = LatLng(26.52486985103984, 128.0300908585622)
+// _waypoints.value?.add(LatLng(26.313224610295485, 127.79608257031921))
+ }
+
fun setOrigin(lat: Double, lng: Double) {
_origin.value = LatLng(lat,lng)
}
@@ -38,19 +45,20 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
_dest.value = LatLng(lat,lng)
}
- //waypointを追加する
+
fun addWaypointMarker(marker: Marker) {
_waypointMarkers.value?.add(marker)
- directionApiExecute()
+ Log.i("MapsActivity", "addWaypointMarker:${_waypointMarkers.value.toString()}")
+ execute()
}
- //waypointを削除する
fun removeWaypointMarker(marker: Marker) {
+ Log.i("MapsActivity","removeMarkerLatLng:${marker.position}")
_waypointMarkers.value?.remove(marker)
- directionApiExecute()
+ Log.i("MapsActivity", "removeWaypointMarker:${_waypointMarkers.value.toString()}")
+ execute()
}
- //waypointの値を変更する(ドラッグ&ドロップ)
fun changeWaypointMarker(marker: Marker) {
val markersId = ArrayList()
for (id in _waypointMarkers.value!!) {
@@ -58,30 +66,40 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
}
val index = markersId.indexOf(marker.id)
_waypointMarkers.value?.set(index,marker)
- directionApiExecute()
+ Log.i("MapsActivity", "changeWaypointMarker:${_waypointMarkers.value!!.get(index).position}")
+ execute()
}
- //Marker型のwaypointsをDirectionAPIにリクエストを送る用のString型に変更する
private fun markersToString(): String {
+ Log.i("MapsActivity","do1:")
val sb = StringBuilder()
+ Log.i("MapsActivity","do2:")
if (_waypointMarkers != null) {
+ Log.i("MapsActivity","do3:")
for (waypoint in _waypointMarkers.value!!) {
// sb.append(waypoint.lat.toString() + "," + waypoint.lng.toString() + "|")
+ Log.i("MapsActivity","waypointsString: ${waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|"}")
sb.append(waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|")
}
}
val waypointsString = sb.toString()
+// waypointsString.drop(1)
+// waypointsString.dropLast(2)
+// waypointsString.replace("[", "").replace("]", "")
+ Log.i("MapsActivity","waypointsString: $waypointsString")
return waypointsString
}
- //DirectionAPIを実行
- fun directionApiExecute() {
+
+ fun execute() {
viewModelScope.launch {
val waypointsString = markersToString()
+ Log.i("MapsActivity", "execute:${_waypoints.value.toString()}")
val result = DirectionsApiHelper().execute(getApplication(),
_origin.value, _dest.value, waypointsString
)
+ Log.i("MapsActivity", "executed:${result.toString()}")
_directionsResult.value = result
}
}
diff --git a/app/src/main/res/layout/fragment_add_trial_maps.xml b/app/src/main/res/layout/fragment_add_trial_maps.xml
index e606a6e..fb0c88d 100644
--- a/app/src/main/res/layout/fragment_add_trial_maps.xml
+++ b/app/src/main/res/layout/fragment_add_trial_maps.xml
@@ -1,33 +1,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+ tools:context=".ui.addtrial.AddTrialMapsFragment" />
\ No newline at end of file
From 4ac5ca75192c33576f99ee36e4c04b7db25b309f Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 17 Sep 2022 23:30:06 +0900
Subject: [PATCH 33/99] =?UTF-8?q?DirectionAPI=E3=81=AE=E5=87=A6=E7=90=86?=
=?UTF-8?q?=E3=82=92=E8=A1=8C=E3=81=86=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/DirectionsApiHelper.kt | 32 +++----------------
1 file changed, 5 insertions(+), 27 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
index bee2e5f..2846832 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
@@ -1,15 +1,15 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-import android.util.Log
+import android.content.Context
import androidx.annotation.Nullable
-import com.google.android.gms.maps.model.LatLng
import com.google.maps.DirectionsApi
import com.google.maps.GeoApiContext
import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng as MapsLatLng
+import com.google.maps.model.LatLng
import com.google.maps.model.TravelMode
import com.google.maps.model.Unit
import jp.ac.okinawa_ct.nitoc_ict.aroa.BuildConfig
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.util.*
@@ -24,11 +24,11 @@ class DirectionsApiHelper {
* @return 取得成功: [com.google.maps.model.DirectionsResult] 失敗: null
*/
@Nullable
- suspend fun execute(origin: MapsLatLng?, destination: MapsLatLng?, waypoints: String): DirectionsResult? {
+ suspend fun execute(context: Context, origin: LatLng?, destination: LatLng?, waypoints: String): DirectionsResult? {
return withContext(Dispatchers.IO) {
// Mapキーの取得.
val apiContext = GeoApiContext.Builder()
- .apiKey(BuildConfig.MAPS_API_KEY).build()
+ .apiKey(BuildConfig.API_KEY).build()
// API実行.
kotlin.runCatching {
@@ -44,26 +44,4 @@ class DirectionsApiHelper {
}.getOrNull()
}
}
-
- @Nullable
- suspend fun onlyOriginDestExecute(origin: MapsLatLng?, destination: MapsLatLng?): DirectionsResult? {
- return withContext(Dispatchers.IO) {
- // Mapキーの取得.
- val apiContext = GeoApiContext.Builder()
- .apiKey(BuildConfig.MAPS_API_KEY).build()
-
- Log.i("onlyOriginDestExecute","${origin.toString()},${destination.toString()}")
- // API実行.
- kotlin.runCatching {
- DirectionsApi
- .newRequest(apiContext)
- .mode(TravelMode.WALKING)
- .units(Unit.METRIC)
- .language(Locale.JAPAN.language)
- .origin(origin)
- .destination(destination)
- .await()
- }.getOrNull()
- }
- }
}
\ No newline at end of file
From dbd7a06876de0f318b67951ea20038d69a082af9 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sun, 18 Sep 2022 21:59:03 +0900
Subject: [PATCH 34/99] =?UTF-8?q?=E5=BE=AE=E4=BF=AE=E6=AD=A3=EF=BC=86?=
=?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsFragment.kt | 26 +++++++-------
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 36 +++++--------------
2 files changed, 22 insertions(+), 40 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
index cf0c55d..166582d 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
@@ -24,13 +24,13 @@ class AddTrialMapsFragment : Fragment() {
private const val POLYLINE_WIDTH = 12f
}
- private var map: GoogleMap? = null
- private var polyline: Polyline? = null
+ private lateinit var map: GoogleMap
+ private lateinit var polyline: Polyline
private val overview = 0
private lateinit var viewModel: AddTrialMapsViewModel
private val callback = OnMapReadyCallback { googleMap ->
- viewModel.execute()
+ viewModel.directionApiExecute()
moveCamera()
setMapLongClick(googleMap)
setMarkerClick(googleMap)
@@ -42,7 +42,7 @@ class AddTrialMapsFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- val viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
+ viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
return inflater.inflate(R.layout.fragment_add_trial_maps, container, false)
}
@@ -59,16 +59,17 @@ class AddTrialMapsFragment : Fragment() {
})
}
+ //カメラを移動
private fun moveCamera() {
// Add a marker in Sydney and move the camera
- val okinawa = LatLng(26.387409,127.729753)
- map?.apply {
- addMarker(MarkerOptions().position(okinawa).title("Marker in Okinawa"))
- // moveCamera(CameraUpdateFactory.newLatLng(tokyo))
- moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
+ val origin = LatLng(viewModel.origin.value!!.lat, viewModel.origin.value!!.lng)
+ map.apply {
+ addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
+ moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
}
}
+ //マップをロングクリック時にマーカーを追加
private fun setMapLongClick(map: GoogleMap) {
map.setOnMapLongClickListener{latLng ->
val snippet = String.format(
@@ -94,6 +95,7 @@ class AddTrialMapsFragment : Fragment() {
}
}
+ //マーカーをクリック時にそのマーカーを削除
private fun setMarkerClick(map: GoogleMap) {
map.setOnMarkerClickListener{marker ->
viewModel.removeWaypointMarker(marker)
@@ -102,6 +104,7 @@ class AddTrialMapsFragment : Fragment() {
}
}
+ //マーカーをドラッグ時に、マーカーのLatLngを更新
private fun setOnMarkerDrag(map: GoogleMap) {
map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
private var start: com.google.maps.model.LatLng? = null
@@ -111,7 +114,6 @@ class AddTrialMapsFragment : Fragment() {
marker.position.let { start =
com.google.maps.model.LatLng(it.latitude, it.longitude)
}
- Log.i("MapsActivity","StartMarker:${start.toString()}")
}
override fun onMarkerDrag(marker: Marker) {
@@ -122,19 +124,17 @@ class AddTrialMapsFragment : Fragment() {
marker.position.let { end =
com.google.maps.model.LatLng(it.latitude, it.longitude)
}
- Log.i("MapsActivity","EndMarker:${end.toString()}")
viewModel.changeWaypointMarker(marker)
}
})
}
+ //Polylineを更新
private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
googleMap ?: return
directionsResult ?: return
removePolyline()
- Log.i("MapsActivity","doUpdatePolyline")
addPolyline(directionsResult, googleMap)
- Log.i("MapsActivity","didUpdatePolyline")
}
// 線を消す.
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
index 8d60aef..1dd80a0 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -30,13 +30,6 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
val waypointMarkers: LiveData> get() = _waypointMarkers
- init {
- _origin.value = LatLng(26.387409, 127.729753)
- _dest.value = LatLng(26.387409, 127.729753)
-// _dest.value = LatLng(26.52486985103984, 128.0300908585622)
-// _waypoints.value?.add(LatLng(26.313224610295485, 127.79608257031921))
- }
-
fun setOrigin(lat: Double, lng: Double) {
_origin.value = LatLng(lat,lng)
}
@@ -45,20 +38,19 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
_dest.value = LatLng(lat,lng)
}
-
+ //waypointを追加する
fun addWaypointMarker(marker: Marker) {
_waypointMarkers.value?.add(marker)
- Log.i("MapsActivity", "addWaypointMarker:${_waypointMarkers.value.toString()}")
- execute()
+ directionApiExecute()
}
+ //waypointを削除する
fun removeWaypointMarker(marker: Marker) {
- Log.i("MapsActivity","removeMarkerLatLng:${marker.position}")
_waypointMarkers.value?.remove(marker)
- Log.i("MapsActivity", "removeWaypointMarker:${_waypointMarkers.value.toString()}")
- execute()
+ directionApiExecute()
}
+ //waypointの値を変更する(ドラッグ&ドロップ)
fun changeWaypointMarker(marker: Marker) {
val markersId = ArrayList()
for (id in _waypointMarkers.value!!) {
@@ -66,40 +58,30 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
}
val index = markersId.indexOf(marker.id)
_waypointMarkers.value?.set(index,marker)
- Log.i("MapsActivity", "changeWaypointMarker:${_waypointMarkers.value!!.get(index).position}")
- execute()
+ directionApiExecute()
}
+ //Marker型のwaypointsをDirectionAPIにリクエストを送る用のString型に変更する
private fun markersToString(): String {
- Log.i("MapsActivity","do1:")
val sb = StringBuilder()
- Log.i("MapsActivity","do2:")
if (_waypointMarkers != null) {
- Log.i("MapsActivity","do3:")
for (waypoint in _waypointMarkers.value!!) {
// sb.append(waypoint.lat.toString() + "," + waypoint.lng.toString() + "|")
- Log.i("MapsActivity","waypointsString: ${waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|"}")
sb.append(waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|")
}
}
val waypointsString = sb.toString()
-// waypointsString.drop(1)
-// waypointsString.dropLast(2)
-// waypointsString.replace("[", "").replace("]", "")
- Log.i("MapsActivity","waypointsString: $waypointsString")
return waypointsString
}
-
- fun execute() {
+ //DirectionAPIを実行
+ fun directionApiExecute() {
viewModelScope.launch {
val waypointsString = markersToString()
- Log.i("MapsActivity", "execute:${_waypoints.value.toString()}")
val result = DirectionsApiHelper().execute(getApplication(),
_origin.value, _dest.value, waypointsString
)
- Log.i("MapsActivity", "executed:${result.toString()}")
_directionsResult.value = result
}
}
From 88b41d6e507d58809c6650677fba41917cde6133 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Mon, 19 Sep 2022 02:36:18 +0900
Subject: [PATCH 35/99] =?UTF-8?q?build.gradle=E3=81=AE=E4=BE=9D=E5=AD=98?=
=?UTF-8?q?=E9=96=A2=E4=BF=82=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 6afea0b..17d969e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,7 +1,8 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
- id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
+ id 'com.google.gms.google-services' // Google Services Gradle Plugin
+ id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' // Secrets Gradle Plugin
}
android {
@@ -13,6 +14,7 @@ android {
targetSdk 32
versionCode 1
versionName "1.0"
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -39,6 +41,8 @@ dependencies {
// 基本的なライブラリ
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.5.0'
+
+ // レイアウト系
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
@@ -50,11 +54,17 @@ dependencies {
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.1'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.1'
- implementation 'com.google.android.gms:play-services-maps:18.1.0'
- implementation "com.google.maps:google-maps-services:0.2.11"
- implementation 'com.google.maps.android:android-maps-utils:2.2.0'
-
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+
+ // Google Maps SDK
+ implementation 'com.google.android.gms:play-services-maps:18.1.0'
+ implementation "com.google.maps:google-maps-services:0.2.11"
+
+ // Firebase
+ implementation platform('com.google.firebase:firebase-bom:30.2.0') // Firebase BoM
+ implementation 'com.google.firebase:firebase-analytics-ktx' // Firebase Analytics
+ implementation 'com.google.firebase:firebase-firestore-ktx' // Firebase FireStore
+
}
\ No newline at end of file
From 8738637a8ac8fefea1d1d2f519358ad9bdcd5b55 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Mon, 19 Sep 2022 02:44:46 +0900
Subject: [PATCH 36/99] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E5=BF=98?=
=?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9Fbuild.gradle=E3=81=AE?=
=?UTF-8?q?=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82=E3=82=92=E8=BF=BD=E5=8A=A0?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/build.gradle b/app/build.gradle
index 17d969e..116d205 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -61,6 +61,7 @@ dependencies {
// Google Maps SDK
implementation 'com.google.android.gms:play-services-maps:18.1.0'
implementation "com.google.maps:google-maps-services:0.2.11"
+ implementation 'com.google.maps.android:android-maps-utils:2.2.0'
// Firebase
implementation platform('com.google.firebase:firebase-bom:30.2.0') // Firebase BoM
From 076ca716774bf887e7eaa791eec84ea60b37eb96 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Tue, 20 Sep 2022 17:07:52 +0900
Subject: [PATCH 37/99] =?UTF-8?q?DirectionsApiHelper.kt=E3=81=AEimport?=
=?UTF-8?q?=E3=82=92=E6=9C=80=E9=81=A9=E5=8C=96=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
index 2846832..03dbaad 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
@@ -9,7 +9,6 @@ import com.google.maps.model.LatLng
import com.google.maps.model.TravelMode
import com.google.maps.model.Unit
import jp.ac.okinawa_ct.nitoc_ict.aroa.BuildConfig
-import jp.ac.okinawa_ct.nitoc_ict.aroa.R
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.util.*
From 661056c66b35cdc1bb015754ac3a8021cd25ff80 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 24 Sep 2022 20:36:40 +0900
Subject: [PATCH 38/99] =?UTF-8?q?AddTrialMapsViewModel.kt=E3=81=A7?=
=?UTF-8?q?=E3=83=AA=E3=83=9D=E3=82=B8=E3=83=88=E3=83=AA=E3=81=AEcreatTria?=
=?UTF-8?q?l=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=82=92=E5=91=BC?=
=?UTF-8?q?=E3=81=B3=E5=87=BA=E3=81=99=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 43 +++++++++++++++----
1 file changed, 34 insertions(+), 9 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
index 1dd80a0..72dd0a4 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -1,29 +1,31 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
import android.app.Application
-import android.util.Log
-import androidx.lifecycle.*
-import com.google.maps.model.LatLng
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
import com.google.android.gms.maps.model.Marker
+import com.google.maps.android.PolyUtil
import com.google.maps.model.DirectionsResult
+import com.google.maps.model.LatLng
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
import kotlinx.coroutines.launch
-import java.lang.StringBuilder
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result as Result
class AddTrialMapsViewModel(application: Application) : AndroidViewModel(application) {
private val _directionsResult = MutableLiveData()
val directionsResult: LiveData = _directionsResult
+ private val trialRepositoryDummy = TrialRepositoryDummy()
+
private val _origin = MutableLiveData()
val origin: LiveData get() = _origin
private val _dest = MutableLiveData()
val dest: LiveData get() = _dest
- private val _waypoints = MutableLiveData>().apply {
- value = ArrayList()
- }
- val waypoints: LiveData> get() = _waypoints
-
private val _waypointMarkers = MutableLiveData>().apply {
value = ArrayList()
}
@@ -38,6 +40,11 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
_dest.value = LatLng(lat,lng)
}
+ init {
+ _origin.value = LatLng(26.387409, 127.729753)
+ _dest.value = LatLng(26.387409, 127.729753)
+ }
+
//waypointを追加する
fun addWaypointMarker(marker: Marker) {
_waypointMarkers.value?.add(marker)
@@ -85,4 +92,22 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
_directionsResult.value = result
}
}
+
+ fun createNewTrial() {
+ val trialCourse = PolyUtil.decode(directionsResult.value!!.routes[0].overviewPolyline.encodedPath)
+ val trial = Trial.Marathon("","",trialCourse[0],trialCourse,)
+ viewModelScope.launch {
+ trialRepositoryDummy.createTrial(trial).collect{
+ when(it) {
+ is Result.Loading -> "Loading"
+ is Result.Success -> {
+ //navigationを実装
+ }
+ is Result.Error -> {
+
+ }
+ }
+ }
+ }
+ }
}
\ No newline at end of file
From 27bc09edd28111cb071245904d564e7ef5704b44 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:08:43 +0900
Subject: [PATCH 39/99] =?UTF-8?q?Trial=E3=81=AEorigin=E3=82=92=E8=A8=AD?=
=?UTF-8?q?=E5=AE=9A=E3=81=99=E3=82=8BAddTrialOriginFragment=E3=81=A8ViewM?=
=?UTF-8?q?odel=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/addtrial/AddTrialOriginFragment.kt | 147 ++++++++++++++++++
.../ui/addtrial/AddTrialOriginViewModel.kt | 33 ++++
2 files changed, 180 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
new file mode 100644
index 0000000..61a2548
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
@@ -0,0 +1,147 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.LatLng
+import com.google.android.gms.maps.model.Marker
+import com.google.android.gms.maps.model.MarkerOptions
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialOriginBinding
+import java.util.*
+
+class AddTrialOriginFragment : Fragment() {
+
+ companion object {
+ private const val ZOOM_SIZE = 14f
+ }
+
+ private var map: GoogleMap? = null
+ private lateinit var viewModel: AddTrialOriginViewModel
+
+ private lateinit var _binding: FragmentAddTrialOriginBinding
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding
+
+ private var currentMarker: Marker? = null
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ map = googleMap
+ moveCamera()
+ setMapLongClick(googleMap)
+ setMarkerClick(googleMap)
+ setOnMarkerDrag(googleMap)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ _binding = FragmentAddTrialOriginBinding.inflate(inflater,container, false)
+ viewModel = ViewModelProvider(this).get(AddTrialOriginViewModel::class.java)
+ binding.nextButton.setOnClickListener { viewModel.navStart() }
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ observeLiveData()
+ }
+
+ private fun observeLiveData() {
+ viewModel.navFrag.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
+ if (it == true) {
+ Log.i("originValue",viewModel.origin.value.toString())
+ val action =
+ AddTrialOriginFragmentDirections
+ .actionNavigationAddTrialOriginToNavigationAddTrialDest(
+ LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude))
+ this.findNavController().navigate(action)
+ viewModel.navCompleted()
+ }
+ })
+ }
+
+ //カメラを移動
+ private fun moveCamera() {
+ // Add a marker in Sydney and move the camera
+ val okinawa = LatLng(26.39987724386553, 127.74766655445417)
+ map?.apply {
+ moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
+ }
+ }
+
+ //マップをロングクリック時にマーカーを追加
+ private fun setMapLongClick(map: GoogleMap) {
+ map.setOnMapLongClickListener{latLng ->
+ val snippet = String.format(
+ Locale.getDefault(),
+ "Lat: %1$.5f, Long: %2$.5f",
+ latLng.latitude,
+ latLng.longitude
+ )
+
+ map.clear()
+
+ val marker = map.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .title("drop")
+ .snippet(snippet)
+ .draggable(true)
+ )
+
+ if (marker != null) {
+ viewModel.setOrigin(marker.position)
+ }
+ }
+ }
+
+ //マーカーをクリック時にそのマーカーを削除
+ private fun setMarkerClick(map: GoogleMap) {
+ map.setOnMarkerClickListener{marker ->
+ viewModel.removeOrigin()
+ marker.remove()
+ return@setOnMarkerClickListener true
+ }
+ }
+
+ //マーカーをドラッグ時に、マーカーのLatLngを更新
+ private fun setOnMarkerDrag(map: GoogleMap) {
+ map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
+ private var start: com.google.maps.model.LatLng? = null
+ private var end: com.google.maps.model.LatLng? = null
+
+ override fun onMarkerDragStart(marker: Marker) {
+ marker.position.let { start =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ }
+
+ override fun onMarkerDrag(marker: Marker) {
+ // Do Nothing.
+ }
+
+ override fun onMarkerDragEnd(marker: Marker) {
+ marker.position.let { end =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ viewModel.setOrigin(marker.position)
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
new file mode 100644
index 0000000..4eec909
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
@@ -0,0 +1,33 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import com.google.android.gms.maps.model.LatLng
+
+class AddTrialOriginViewModel(application: Application) : AndroidViewModel(application) {
+ private val _origin = MutableLiveData()
+ val origin: LiveData get() = _origin
+
+ private val _navFrag = MutableLiveData()
+ val navFrag: LiveData get() = _navFrag
+
+ fun setOrigin(latLng: LatLng) {
+ _origin.value = latLng
+ }
+
+ fun removeOrigin() {
+ if (_origin != null) {
+// _origin.value = null
+ }
+ }
+
+ fun navStart() {
+ _navFrag.value = true
+ }
+
+ fun navCompleted() {
+ _navFrag.value = false
+ }
+}
\ No newline at end of file
From 6451360707a712bcdab4d078f9119d47b7dafa4e Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:42:10 +0900
Subject: [PATCH 40/99] =?UTF-8?q?Trial=E3=81=AEdest=E3=82=92=E8=A8=AD?=
=?UTF-8?q?=E5=AE=9A=E3=81=99=E3=82=8BAddTrialDestFragment=E3=81=A8ViewMod?=
=?UTF-8?q?el=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialDestFragment.kt | 185 ++++++++++++++++++
.../aroa/ui/addtrial/AddTrialDestViewModel.kt | 62 ++++++
2 files changed, 247 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
new file mode 100644
index 0000000..8a2b6a1
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
@@ -0,0 +1,185 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.*
+import com.google.maps.android.PolyUtil
+import com.google.maps.model.DirectionsResult
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialDestBinding
+import java.util.*
+
+class AddTrialDestFragment : Fragment() {
+
+ companion object {
+ private const val ZOOM_SIZE = 14f
+ private const val POLYLINE_WIDTH = 12f
+ }
+
+ private var map: GoogleMap? = null
+ private lateinit var viewModel: AddTrialDestViewModel
+ private var polyline: Polyline? = null
+
+ private lateinit var _binding: FragmentAddTrialDestBinding
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ map = googleMap
+ moveCamera()
+ setMapLongClick(googleMap)
+ setMarkerClick(googleMap)
+ setOnMarkerDrag(googleMap)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ _binding = FragmentAddTrialDestBinding.inflate(inflater,container, false)
+ val args = AddTrialDestFragmentArgs.fromBundle(requireArguments())
+ viewModel = ViewModelProvider(this).get(AddTrialDestViewModel::class.java)
+ viewModel.setOrigin(args.originLatLng)
+ binding.nextButton.setOnClickListener { viewModel.navStart() }
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ observeLiveData()
+ }
+
+ private fun observeLiveData() {
+ viewModel.directionsResult.observe(viewLifecycleOwner, androidx.lifecycle.Observer{
+ Log.i("DestFragment","directionsResult:${it.toString()}")
+ updatePolyline(it, map)
+ })
+
+ viewModel.navFrag.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
+ if (it) {
+ val action = AddTrialDestFragmentDirections
+ .actionNavigationAddTrialDestToNavigationAddTrialMaps(
+ LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude),
+ LatLng(viewModel.dest.value!!.latitude,viewModel.dest.value!!.longitude))
+ this.findNavController().navigate(action)
+ viewModel.navCompleted()
+ }
+ })
+ }
+
+ //カメラを移動
+ private fun moveCamera() {
+ // Add a marker in Sydney and move the camera
+ val origin = LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude)
+ map?.apply {
+ addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
+ moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
+ }
+ }
+
+ //マップをロングクリック時にマーカーを追加
+ private fun setMapLongClick(map: GoogleMap) {
+ map.setOnMapLongClickListener{latLng ->
+ val snippet = String.format(
+ Locale.getDefault(),
+ "Lat: %1$.5f, Long: %2$.5f",
+ latLng.latitude,
+ latLng.longitude
+ )
+
+ map.clear()
+
+ map.addMarker(MarkerOptions()
+ .position(LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude))
+ .title("Marker in Origin"))
+
+ val marker = map.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .title("drop")
+ .snippet(snippet)
+ .draggable(true)
+ )
+
+
+ if (marker != null) {
+ Log.i("DestFragment","addMarker:${marker.position.toString()}")
+ viewModel.setDest(marker.position)
+ }
+ }
+ }
+
+ //マーカーをクリック時にそのマーカーを削除
+ private fun setMarkerClick(map: GoogleMap) {
+ map.setOnMarkerClickListener{marker ->
+ viewModel.removeDest()
+ marker.remove()
+ return@setOnMarkerClickListener true
+ }
+ }
+
+ //マーカーをドラッグ時に、マーカーのLatLngを更新
+ private fun setOnMarkerDrag(map: GoogleMap) {
+ map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
+ private var start: com.google.maps.model.LatLng? = null
+ private var end: com.google.maps.model.LatLng? = null
+
+ override fun onMarkerDragStart(marker: Marker) {
+ marker.position.let { start =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ }
+
+ override fun onMarkerDrag(marker: Marker) {
+ // Do Nothing.
+ }
+
+ override fun onMarkerDragEnd(marker: Marker) {
+ marker.position.let { end =
+ com.google.maps.model.LatLng(it.latitude, it.longitude)
+ }
+ viewModel.setDest(marker.position)
+ }
+ })
+ }
+
+ //Polylineを更新
+ private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
+ googleMap ?: return
+ directionsResult ?: return
+ removePolyline()
+ addPolyline(directionsResult, googleMap)
+ }
+
+ // 線を消す.
+ private fun removePolyline() {
+ if (map != null && polyline != null) {
+ polyline?.remove()
+ }
+ }
+
+ // 線を引く
+ private fun addPolyline(directionsResult: DirectionsResult, map: GoogleMap) {
+ val polylineOptions = PolylineOptions()
+ polylineOptions.width(AddTrialDestFragment.POLYLINE_WIDTH)
+ // ARGB32bit形式.
+ polylineOptions.color(R.color.map_polyline_stroke)
+ val decodedPath = PolyUtil.decode(directionsResult.routes[0].overviewPolyline.encodedPath)
+ polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
new file mode 100644
index 0000000..1d47748
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
@@ -0,0 +1,62 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.app.Application
+import android.util.Log
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import com.google.android.gms.maps.model.LatLng
+import com.google.maps.model.DirectionsResult
+import com.google.maps.model.LatLng as MapsLatLng
+import kotlinx.coroutines.launch
+
+class AddTrialDestViewModel(application: Application) : AndroidViewModel(application) {
+ private val _directionsResult = MutableLiveData()
+ val directionsResult: LiveData = _directionsResult
+
+ private val _origin = MutableLiveData()
+ val origin: LiveData get() = _origin
+
+ private val _dest = MutableLiveData()
+ val dest: LiveData get() = _dest
+
+ private val _navFrag = MutableLiveData()
+ val navFrag: LiveData get() = _navFrag
+
+ fun setOrigin(latLng: LatLng) {
+ _origin.value = latLng
+ }
+
+ fun setDest(latLng: LatLng) {
+ Log.i("DestViewModel","setDest:${latLng.toString()}")
+ _dest.value = latLng
+ directionApiExecute()
+ }
+
+ fun removeDest() {
+ if (_dest != null) {
+// _dest.value = null
+ }
+ }
+
+ fun navStart() {
+ _navFrag.value = true
+ }
+
+ fun navCompleted() {
+ _navFrag.value = false
+ }
+
+ //DirectionAPIを実行
+ fun directionApiExecute() {
+ viewModelScope.launch {
+ val result = DirectionsApiHelper().onlyOriginDestExecute(
+ MapsLatLng(_origin.value!!.latitude, _origin.value!!.longitude),
+ MapsLatLng(_dest.value!!.latitude, _dest.value!!.longitude)
+ )
+ Log.i("DestViewModel","result:${result.toString()}")
+ _directionsResult.value = result
+ }
+ }
+}
\ No newline at end of file
From a21f016c89374c206bcdb6c62d78a7b7d740c2cb Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:46:06 +0900
Subject: [PATCH 41/99] =?UTF-8?q?AddTrialFragment.kt=E3=81=A8AddTrialViewM?=
=?UTF-8?q?odel.kt=E3=82=92=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=AB?=
=?UTF-8?q?=E5=88=B6=E4=BD=9C=E7=94=BB=E9=9D=A2=E3=81=AB=E9=81=B7=E7=A7=BB?=
=?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=83=9C?=
=?UTF-8?q?=E3=82=BF=E3=83=B3=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialFragment.kt | 46 +++++++++++++++++++
.../aroa/ui/addtrial/AddTrialViewModel.kt | 18 ++++++++
2 files changed, 64 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
new file mode 100644
index 0000000..d4fd0d0
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
@@ -0,0 +1,46 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialBinding
+
+class AddTrialFragment : Fragment() {
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private lateinit var binding: FragmentAddTrialBinding
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ val viewModel =
+ ViewModelProvider(this).get(AddTrialViewModel::class.java)
+// binding = FragmentAddTrialBinding.inflate(inflater, container, false)
+ binding = FragmentAddTrialBinding.inflate(layoutInflater)
+
+ viewModel.navFrag.observe(viewLifecycleOwner, Observer {
+ if (it == true) {
+ this.findNavController().navigate(
+ AddTrialFragmentDirections.actionNavigationAddTrialToNavigationAddTrialOrigin())
+ viewModel.navCompleted()
+ }
+ })
+
+ binding.startButton.setOnClickListener { viewModel.navStart() }
+
+ return binding.root
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+// binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
new file mode 100644
index 0000000..3b77a50
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
@@ -0,0 +1,18 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+
+class AddTrialViewModel : ViewModel() {
+ private val _navFrag = MutableLiveData()
+ val navFrag: LiveData get() = _navFrag
+
+ fun navStart() {
+ _navFrag.value = true
+ }
+
+ fun navCompleted() {
+ _navFrag.value = null
+ }
+}
\ No newline at end of file
From 3f684b7c6862e7bf0679886e11172e9872ca097b Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:48:03 +0900
Subject: [PATCH 42/99] =?UTF-8?q?AddTrialMapsFragment.kt=E3=81=A8AddTrialM?=
=?UTF-8?q?apsViewModel.kt=E3=82=92=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2?=
=?UTF-8?q?=E3=83=AB=E3=81=AE=E3=83=AA=E3=83=9D=E3=82=B8=E3=83=88=E3=83=AA?=
=?UTF-8?q?=E3=81=B8=E3=81=AE=E8=BF=BD=E5=8A=A0=E3=80=81=E3=82=B9=E3=82=BF?=
=?UTF-8?q?=E3=83=BC=E3=83=88=E7=94=BB=E9=9D=A2=E3=81=B8=E3=81=AE=E9=81=B7?=
=?UTF-8?q?=E7=A7=BB=E3=81=8C=E5=8F=AF=E8=83=BD=E3=81=AB=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialMapsFragment.kt | 35 ++++++++++++++++---
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 31 ++++++++++------
2 files changed, 51 insertions(+), 15 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
index 166582d..2bb4325 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
@@ -8,6 +8,7 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
@@ -16,6 +17,7 @@ import com.google.android.gms.maps.model.*
import com.google.maps.android.PolyUtil
import com.google.maps.model.DirectionsResult
import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialMapsBinding
import java.util.*
class AddTrialMapsFragment : Fragment() {
@@ -24,12 +26,19 @@ class AddTrialMapsFragment : Fragment() {
private const val POLYLINE_WIDTH = 12f
}
- private lateinit var map: GoogleMap
- private lateinit var polyline: Polyline
+ private var map: GoogleMap? = null
+ private var polyline: Polyline? = null
private val overview = 0
private lateinit var viewModel: AddTrialMapsViewModel
+ private lateinit var _binding: FragmentAddTrialMapsBinding
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding
+
private val callback = OnMapReadyCallback { googleMap ->
+ map = googleMap
viewModel.directionApiExecute()
moveCamera()
setMapLongClick(googleMap)
@@ -42,8 +51,13 @@ class AddTrialMapsFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
+ _binding = FragmentAddTrialMapsBinding.inflate(inflater,container, false)
viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
- return inflater.inflate(R.layout.fragment_add_trial_maps, container, false)
+ val args = AddTrialMapsFragmentArgs.fromBundle(requireArguments())
+ viewModel.setOrigin(args.originLatLng)
+ viewModel.setDest(args.destLatLng)
+ binding.saveButton.setOnClickListener { viewModel.createNewTrial() }
+ return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -57,14 +71,24 @@ class AddTrialMapsFragment : Fragment() {
viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
updatePolyline(it, map)
})
+
+ viewModel.navFrag.observe(viewLifecycleOwner, Observer {
+ if (it) {
+ val action = AddTrialMapsFragmentDirections.actionNavigationAddTrialMapsToNavigationAddTrial()
+ this.findNavController().navigate(action)
+ viewModel.navCompleted()
+ }
+ })
}
//カメラを移動
private fun moveCamera() {
// Add a marker in Sydney and move the camera
- val origin = LatLng(viewModel.origin.value!!.lat, viewModel.origin.value!!.lng)
- map.apply {
+ val origin = LatLng(viewModel.origin.value!!.latitude, viewModel.origin.value!!.longitude)
+ val dest = LatLng(viewModel.dest.value!!.latitude, viewModel.dest.value!!.longitude)
+ map?.apply {
addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
+ addMarker(MarkerOptions().position(dest).title("Marker in Dest"))
moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
}
}
@@ -87,6 +111,7 @@ class AddTrialMapsFragment : Fragment() {
.draggable(true)
)
+
Log.i("MapsActivity","doAddMarker")
if (marker != null) {
viewModel.addWaypointMarker(marker)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
index 72dd0a4..cf9a4b7 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
@@ -5,10 +5,11 @@ import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
+import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.Marker
import com.google.maps.android.PolyUtil
import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng
+import com.google.maps.model.LatLng as MapsLatLng
import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
import kotlinx.coroutines.launch
@@ -20,6 +21,9 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
private val trialRepositoryDummy = TrialRepositoryDummy()
+ private val _navFrag = MutableLiveData()
+ val navFrag: LiveData get() = _navFrag
+
private val _origin = MutableLiveData()
val origin: LiveData get() = _origin
@@ -32,17 +36,17 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
val waypointMarkers: LiveData> get() = _waypointMarkers
- fun setOrigin(lat: Double, lng: Double) {
- _origin.value = LatLng(lat,lng)
+ init {
+ _origin.value = LatLng(26.387409, 127.729753)
+ _dest.value = LatLng(26.387409, 127.729753)
}
- fun setDest(lat: Double, lng: Double) {
- _dest.value = LatLng(lat,lng)
+ fun setOrigin(latLng: LatLng) {
+ _origin.value = latLng
}
- init {
- _origin.value = LatLng(26.387409, 127.729753)
- _dest.value = LatLng(26.387409, 127.729753)
+ fun setDest(latLng: LatLng) {
+ _dest.value = latLng
}
//waypointを追加する
@@ -86,8 +90,10 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
fun directionApiExecute() {
viewModelScope.launch {
val waypointsString = markersToString()
- val result = DirectionsApiHelper().execute(getApplication(),
- _origin.value, _dest.value, waypointsString
+ val result = DirectionsApiHelper().execute(
+ MapsLatLng(_origin.value!!.latitude, _origin.value!!.longitude),
+ MapsLatLng(_dest.value!!.latitude, _dest.value!!.longitude),
+ waypointsString
)
_directionsResult.value = result
}
@@ -102,6 +108,7 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
is Result.Loading -> "Loading"
is Result.Success -> {
//navigationを実装
+ _navFrag.value = true
}
is Result.Error -> {
@@ -110,4 +117,8 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
}
}
}
+
+ fun navCompleted() {
+ _navFrag.value = false
+ }
}
\ No newline at end of file
From 090c98bc49b90dd1a5dd66e9e7cfdecc0e1871f0 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:49:25 +0900
Subject: [PATCH 43/99] =?UTF-8?q?AddTrialOriginFragment=E3=81=A8AddTrialDe?=
=?UTF-8?q?stFragment=E3=81=AElayout=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?=
=?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/res/layout/fragment_add_trial_dest.xml | 2 +-
app/src/main/res/layout/fragment_add_trial_origin.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/layout/fragment_add_trial_dest.xml b/app/src/main/res/layout/fragment_add_trial_dest.xml
index 7344fdf..a749858 100644
--- a/app/src/main/res/layout/fragment_add_trial_dest.xml
+++ b/app/src/main/res/layout/fragment_add_trial_dest.xml
@@ -10,7 +10,7 @@
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".ui.addtrial.dest.AddTrialDestFragment" />
+ tools:context=".ui.addtrial.AddTrialDestFragment" />
+ tools:context=".ui.addtrial.AddTrialOriginFragment" />
Date: Sat, 1 Oct 2022 18:50:06 +0900
Subject: [PATCH 44/99] =?UTF-8?q?AddTrialMapsFragment=E3=81=AB=E9=81=B7?=
=?UTF-8?q?=E7=A7=BB=E7=94=A8=E3=81=AE=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../res/layout/fragment_add_trial_maps.xml | 33 ++++++++++++++++---
1 file changed, 29 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/layout/fragment_add_trial_maps.xml b/app/src/main/res/layout/fragment_add_trial_maps.xml
index fb0c88d..d6d1182 100644
--- a/app/src/main/res/layout/fragment_add_trial_maps.xml
+++ b/app/src/main/res/layout/fragment_add_trial_maps.xml
@@ -1,8 +1,33 @@
-
\ No newline at end of file
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+
+
+
+
+
+
+
+
+
+
+
From c5b3917b220b68c0ebb86d7cfb688320f891d209 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:52:24 +0900
Subject: [PATCH 45/99] =?UTF-8?q?navigation=E7=94=A8=E3=81=AECreateTrialFr?=
=?UTF-8?q?agment.kt=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=A6=E3=80=81?=
=?UTF-8?q?AddTrialFragment=E3=82=92=E5=8F=82=E7=85=A7=E3=81=97=E3=81=A6?=
=?UTF-8?q?=E3=81=84=E3=81=9F=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?=
=?UTF-8?q?=E5=8F=82=E7=85=A7=E5=85=88=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../navigation/create_trial_navigation.xml | 20 ++++---------------
1 file changed, 4 insertions(+), 16 deletions(-)
diff --git a/app/src/main/res/navigation/create_trial_navigation.xml b/app/src/main/res/navigation/create_trial_navigation.xml
index c474aaf..f601429 100644
--- a/app/src/main/res/navigation/create_trial_navigation.xml
+++ b/app/src/main/res/navigation/create_trial_navigation.xml
@@ -7,20 +7,17 @@
-
-
-
-
-
\ No newline at end of file
From 28588c68555cb6a3a35166f1424063ff2f3aca05 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:53:42 +0900
Subject: [PATCH 46/99] =?UTF-8?q?navigation=E9=96=A2=E9=80=A3=E3=81=AE?=
=?UTF-8?q?=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82=E3=82=92build.gradle?=
=?UTF-8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/build.gradle b/app/build.gradle
index 116d205..b2b8a64 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@ plugins {
id 'org.jetbrains.kotlin.android'
id 'com.google.gms.google-services' // Google Services Gradle Plugin
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' // Secrets Gradle Plugin
+ id "androidx.navigation.safeargs"
}
android {
@@ -53,6 +54,7 @@ dependencies {
// Navigation
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.1'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.1'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
From 04729ef0df481192a7a7021e8b0e83f0b9c25d88 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 18:54:36 +0900
Subject: [PATCH 47/99] =?UTF-8?q?commit=E3=81=97=E5=BF=98=E3=82=8C?=
=?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9FAddTrialFragment=E3=81=AElayout?=
=?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E8=BF=BD=E5=8A=A0?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/res/layout/fragment_add_trial.xml | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/layout/fragment_add_trial.xml b/app/src/main/res/layout/fragment_add_trial.xml
index a22b4b9..2c910a4 100644
--- a/app/src/main/res/layout/fragment_add_trial.xml
+++ b/app/src/main/res/layout/fragment_add_trial.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".ui.addtrial.start.AddTrialFragment">
+ tools:context=".ui.addtrial.AddTrialFragment">
+ android:layout_height="match_parent" />
\ No newline at end of file
From 8b539be2bf7afcec521ad12a9cdd802338f7aee6 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sat, 1 Oct 2022 19:02:34 +0900
Subject: [PATCH 48/99] =?UTF-8?q?waypoint=E3=81=AA=E3=81=97=E3=81=A7Direct?=
=?UTF-8?q?ionApi=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E3=83=A1?=
=?UTF-8?q?=E3=82=BD=E3=83=83=E3=83=89=E3=82=92DirectionsApiHelper.kt?=
=?UTF-8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/DirectionsApiHelper.kt | 31 ++++++++++++++++---
1 file changed, 27 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
index 03dbaad..bee2e5f 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
@@ -1,11 +1,12 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-import android.content.Context
+import android.util.Log
import androidx.annotation.Nullable
+import com.google.android.gms.maps.model.LatLng
import com.google.maps.DirectionsApi
import com.google.maps.GeoApiContext
import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng
+import com.google.maps.model.LatLng as MapsLatLng
import com.google.maps.model.TravelMode
import com.google.maps.model.Unit
import jp.ac.okinawa_ct.nitoc_ict.aroa.BuildConfig
@@ -23,11 +24,11 @@ class DirectionsApiHelper {
* @return 取得成功: [com.google.maps.model.DirectionsResult] 失敗: null
*/
@Nullable
- suspend fun execute(context: Context, origin: LatLng?, destination: LatLng?, waypoints: String): DirectionsResult? {
+ suspend fun execute(origin: MapsLatLng?, destination: MapsLatLng?, waypoints: String): DirectionsResult? {
return withContext(Dispatchers.IO) {
// Mapキーの取得.
val apiContext = GeoApiContext.Builder()
- .apiKey(BuildConfig.API_KEY).build()
+ .apiKey(BuildConfig.MAPS_API_KEY).build()
// API実行.
kotlin.runCatching {
@@ -43,4 +44,26 @@ class DirectionsApiHelper {
}.getOrNull()
}
}
+
+ @Nullable
+ suspend fun onlyOriginDestExecute(origin: MapsLatLng?, destination: MapsLatLng?): DirectionsResult? {
+ return withContext(Dispatchers.IO) {
+ // Mapキーの取得.
+ val apiContext = GeoApiContext.Builder()
+ .apiKey(BuildConfig.MAPS_API_KEY).build()
+
+ Log.i("onlyOriginDestExecute","${origin.toString()},${destination.toString()}")
+ // API実行.
+ kotlin.runCatching {
+ DirectionsApi
+ .newRequest(apiContext)
+ .mode(TravelMode.WALKING)
+ .units(Unit.METRIC)
+ .language(Locale.JAPAN.language)
+ .origin(origin)
+ .destination(destination)
+ .await()
+ }.getOrNull()
+ }
+ }
}
\ No newline at end of file
From 61e2e4e78b3870a08c6fa8b1bd64be46acf97865 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Mon, 3 Oct 2022 16:15:53 +0900
Subject: [PATCH 49/99] =?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2?=
=?UTF-8?q?=E3=83=AB=E3=81=AE=E8=A9=B3=E7=B4=B0=E3=82=92=E8=A1=A8=E7=A4=BA?=
=?UTF-8?q?=E3=81=99=E3=82=8BFragment=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/addtrial/detail/TrialDetailFragment.kt | 41 +++++++++++++++++++
.../main/res/layout/fragment_trial_detail.xml | 2 +-
2 files changed, 42 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
new file mode 100644
index 0000000..2e3b860
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
@@ -0,0 +1,41 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.detail
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.LatLng
+import com.google.android.gms.maps.model.MarkerOptions
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentTrialDetailBinding
+
+class TrialDetailFragment : Fragment() {
+ private lateinit var _binding: FragmentTrialDetailBinding
+ private val binding get() = _binding
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ val okinawa = LatLng(26.526230, 128.030372)
+ googleMap.addMarker(MarkerOptions().position(okinawa).title("Marker in Sydney"))
+ googleMap.moveCamera(CameraUpdateFactory.newLatLng(okinawa))
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentTrialDetailBinding.inflate(layoutInflater)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_trial_detail.xml b/app/src/main/res/layout/fragment_trial_detail.xml
index 5241126..af37b37 100644
--- a/app/src/main/res/layout/fragment_trial_detail.xml
+++ b/app/src/main/res/layout/fragment_trial_detail.xml
@@ -12,7 +12,7 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- tools:context=".ui.detail.TrialDetailFragment" />
+ tools:context=".ui.addtrial.detail.TrialDetailFragment" />
Date: Mon, 3 Oct 2022 16:25:44 +0900
Subject: [PATCH 50/99] =?UTF-8?q?AddTrialFragment.kt=E3=81=A8AddTrialViewM?=
=?UTF-8?q?odel.kt=E3=81=AB=E4=BD=9C=E6=88=90=E3=81=97=E3=81=9F=E3=83=88?=
=?UTF-8?q?=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=AB=E3=81=AE=E3=83=AA=E3=82=B9?=
=?UTF-8?q?=E3=83=88=E3=82=92RecyclerView=E3=81=A7=E8=A1=A8=E7=A4=BA?=
=?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialFragment.kt | 28 +++++++++++
.../aroa/ui/addtrial/AddTrialViewModel.kt | 46 +++++++++++++++++++
.../main/res/layout/fragment_add_trial.xml | 4 +-
3 files changed, 77 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
index d4fd0d0..895b459 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
@@ -1,9 +1,11 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
import android.os.Bundle
+import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
@@ -26,6 +28,32 @@ class AddTrialFragment : Fragment() {
// binding = FragmentAddTrialBinding.inflate(inflater, container, false)
binding = FragmentAddTrialBinding.inflate(layoutInflater)
+
+
+
+ val adapter = CreatedTrialAdapter(binding.createdTrialList.context)
+ binding.createdTrialList.adapter = adapter
+ adapter.setOnItemClickListener { view, position ->
+ val action = AddTrialFragmentDirections.actionNavigationCreateTrialToTrialDetailFragment()
+ this.findNavController().navigate(action)
+ Toast.makeText(context,"$position",Toast.LENGTH_SHORT).show()
+ }
+
+ viewModel.testData.observe(viewLifecycleOwner, Observer {
+ it?.let {
+ Log.i("AddTrialFragment","${it}")
+ adapter.submitList(it)
+ }
+ })
+
+ viewModel.collectState.observe(viewLifecycleOwner, Observer {
+ when(it) {
+ "Loading" -> Toast.makeText(context , "Loading", Toast.LENGTH_SHORT).show()
+ "Success" -> Toast.makeText(context , "Success", Toast.LENGTH_SHORT).show()
+ "Error" -> Toast.makeText(context , "Error", Toast.LENGTH_SHORT).show()
+ }
+ })
+
viewModel.navFrag.observe(viewLifecycleOwner, Observer {
if (it == true) {
this.findNavController().navigate(
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
index 3b77a50..0d114db 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
@@ -3,11 +3,25 @@ package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.google.android.gms.maps.model.LatLng
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
+import kotlinx.coroutines.launch
class AddTrialViewModel : ViewModel() {
+ private val trialRepositoryDummy = TrialRepositoryDummy()
+
+ private val _testData : MutableLiveData> = MutableLiveData(listOf())
+ val testData: LiveData> get() = _testData
+
private val _navFrag = MutableLiveData()
val navFrag: LiveData get() = _navFrag
+ private val _collectState = MutableLiveData()
+ val collectState: LiveData get() = _collectState
+
fun navStart() {
_navFrag.value = true
}
@@ -15,4 +29,36 @@ class AddTrialViewModel : ViewModel() {
fun navCompleted() {
_navFrag.value = null
}
+
+ init {
+ getTrialList("testUserID")
+ }
+
+ fun getTrialList(userId: String) {
+ viewModelScope.launch {
+ trialRepositoryDummy.getTriedTrialByUserId(userId).collect{
+ when(it) {
+ is Result.Loading -> _collectState.value = "Loading"
+ is Result.Success -> {
+ _collectState.value = "Success"
+ _testData.value = it.data!!}
+ is Result.Error -> _collectState.value = "Error"
+ }
+ }
+ }
+ }
+
+// fun getTrialList(userId: String) {
+// viewModelScope.launch {
+// trialRepositoryDummy.getTrialsNear(LatLng(26.526230, 128.030372), 100.0).collect{
+// when(it) {
+// is Result.Loading -> _collectState.value = "Loading"
+// is Result.Success -> {
+// _collectState.value = "Success"
+// _testData.value = it.data!!}
+// is Result.Error -> _collectState.value = "Error"
+// }
+// }
+// }
+// }
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_add_trial.xml b/app/src/main/res/layout/fragment_add_trial.xml
index 2c910a4..376887c 100644
--- a/app/src/main/res/layout/fragment_add_trial.xml
+++ b/app/src/main/res/layout/fragment_add_trial.xml
@@ -37,8 +37,10 @@
android:textSize="24sp" />
+ android:layout_height="match_parent"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
\ No newline at end of file
From 8d9c651c989703f22f3a45a67d54ce0b971700c5 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Tue, 4 Oct 2022 23:44:56 +0900
Subject: [PATCH 51/99] =?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=81=94=E3=81=A8?=
=?UTF-8?q?=E3=81=ABFragment=E3=81=A8ViewModel=E3=82=92=E3=83=95=E3=82=A9?=
=?UTF-8?q?=E3=83=AB=E3=83=80=E5=88=86=E3=81=91=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F=E3=80=82TrialDetailFragment=E3=82=82=E5=AE=9F?=
=?UTF-8?q?=E8=A3=85=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/AddTrialDestFragment.kt | 185 ------------------
.../aroa/ui/addtrial/AddTrialDestViewModel.kt | 62 ------
.../aroa/ui/addtrial/AddTrialFragment.kt | 74 -------
.../aroa/ui/addtrial/AddTrialMapsFragment.kt | 181 -----------------
.../aroa/ui/addtrial/AddTrialMapsViewModel.kt | 124 ------------
.../ui/addtrial/AddTrialOriginFragment.kt | 147 --------------
.../ui/addtrial/AddTrialOriginViewModel.kt | 33 ----
.../aroa/ui/addtrial/AddTrialViewModel.kt | 64 ------
.../aroa/ui/addtrial/DirectionsApiHelper.kt | 3 +-
.../ui/addtrial/detail/TrialDetailFragment.kt | 41 ----
.../ui/addtrial/start/AddTrialFragment.kt | 2 +-
.../aroa/ui/detail/TrialDetailFragment.kt | 88 ++++++++-
.../aroa/ui/detail/TrialDetailViewModel.kt | 120 ++++++++++++
.../main/res/layout/fragment_add_trial.xml | 2 +-
.../res/layout/fragment_add_trial_dest.xml | 2 +-
.../res/layout/fragment_add_trial_maps.xml | 2 +-
.../res/layout/fragment_add_trial_origin.xml | 2 +-
.../main/res/layout/fragment_trial_detail.xml | 25 ++-
.../navigation/create_trial_navigation.xml | 23 ++-
19 files changed, 251 insertions(+), 929 deletions(-)
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailViewModel.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
deleted file mode 100644
index 8a2b6a1..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestFragment.kt
+++ /dev/null
@@ -1,185 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-
-import android.os.Bundle
-import android.util.Log
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.ViewModelProvider
-import androidx.navigation.fragment.findNavController
-import com.google.android.gms.maps.CameraUpdateFactory
-import com.google.android.gms.maps.GoogleMap
-import com.google.android.gms.maps.OnMapReadyCallback
-import com.google.android.gms.maps.SupportMapFragment
-import com.google.android.gms.maps.model.*
-import com.google.maps.android.PolyUtil
-import com.google.maps.model.DirectionsResult
-import jp.ac.okinawa_ct.nitoc_ict.aroa.R
-import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialDestBinding
-import java.util.*
-
-class AddTrialDestFragment : Fragment() {
-
- companion object {
- private const val ZOOM_SIZE = 14f
- private const val POLYLINE_WIDTH = 12f
- }
-
- private var map: GoogleMap? = null
- private lateinit var viewModel: AddTrialDestViewModel
- private var polyline: Polyline? = null
-
- private lateinit var _binding: FragmentAddTrialDestBinding
-
- // This property is only valid between onCreateView and
- // onDestroyView.
- private val binding get() = _binding
-
- private val callback = OnMapReadyCallback { googleMap ->
- map = googleMap
- moveCamera()
- setMapLongClick(googleMap)
- setMarkerClick(googleMap)
- setOnMarkerDrag(googleMap)
- }
-
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- _binding = FragmentAddTrialDestBinding.inflate(inflater,container, false)
- val args = AddTrialDestFragmentArgs.fromBundle(requireArguments())
- viewModel = ViewModelProvider(this).get(AddTrialDestViewModel::class.java)
- viewModel.setOrigin(args.originLatLng)
- binding.nextButton.setOnClickListener { viewModel.navStart() }
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
- mapFragment?.getMapAsync(callback)
- observeLiveData()
- }
-
- private fun observeLiveData() {
- viewModel.directionsResult.observe(viewLifecycleOwner, androidx.lifecycle.Observer{
- Log.i("DestFragment","directionsResult:${it.toString()}")
- updatePolyline(it, map)
- })
-
- viewModel.navFrag.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
- if (it) {
- val action = AddTrialDestFragmentDirections
- .actionNavigationAddTrialDestToNavigationAddTrialMaps(
- LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude),
- LatLng(viewModel.dest.value!!.latitude,viewModel.dest.value!!.longitude))
- this.findNavController().navigate(action)
- viewModel.navCompleted()
- }
- })
- }
-
- //カメラを移動
- private fun moveCamera() {
- // Add a marker in Sydney and move the camera
- val origin = LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude)
- map?.apply {
- addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
- moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
- }
- }
-
- //マップをロングクリック時にマーカーを追加
- private fun setMapLongClick(map: GoogleMap) {
- map.setOnMapLongClickListener{latLng ->
- val snippet = String.format(
- Locale.getDefault(),
- "Lat: %1$.5f, Long: %2$.5f",
- latLng.latitude,
- latLng.longitude
- )
-
- map.clear()
-
- map.addMarker(MarkerOptions()
- .position(LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude))
- .title("Marker in Origin"))
-
- val marker = map.addMarker(
- MarkerOptions()
- .position(latLng)
- .title("drop")
- .snippet(snippet)
- .draggable(true)
- )
-
-
- if (marker != null) {
- Log.i("DestFragment","addMarker:${marker.position.toString()}")
- viewModel.setDest(marker.position)
- }
- }
- }
-
- //マーカーをクリック時にそのマーカーを削除
- private fun setMarkerClick(map: GoogleMap) {
- map.setOnMarkerClickListener{marker ->
- viewModel.removeDest()
- marker.remove()
- return@setOnMarkerClickListener true
- }
- }
-
- //マーカーをドラッグ時に、マーカーのLatLngを更新
- private fun setOnMarkerDrag(map: GoogleMap) {
- map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
- private var start: com.google.maps.model.LatLng? = null
- private var end: com.google.maps.model.LatLng? = null
-
- override fun onMarkerDragStart(marker: Marker) {
- marker.position.let { start =
- com.google.maps.model.LatLng(it.latitude, it.longitude)
- }
- }
-
- override fun onMarkerDrag(marker: Marker) {
- // Do Nothing.
- }
-
- override fun onMarkerDragEnd(marker: Marker) {
- marker.position.let { end =
- com.google.maps.model.LatLng(it.latitude, it.longitude)
- }
- viewModel.setDest(marker.position)
- }
- })
- }
-
- //Polylineを更新
- private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
- googleMap ?: return
- directionsResult ?: return
- removePolyline()
- addPolyline(directionsResult, googleMap)
- }
-
- // 線を消す.
- private fun removePolyline() {
- if (map != null && polyline != null) {
- polyline?.remove()
- }
- }
-
- // 線を引く
- private fun addPolyline(directionsResult: DirectionsResult, map: GoogleMap) {
- val polylineOptions = PolylineOptions()
- polylineOptions.width(AddTrialDestFragment.POLYLINE_WIDTH)
- // ARGB32bit形式.
- polylineOptions.color(R.color.map_polyline_stroke)
- val decodedPath = PolyUtil.decode(directionsResult.routes[0].overviewPolyline.encodedPath)
- polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
deleted file mode 100644
index 1d47748..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialDestViewModel.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-
-import android.app.Application
-import android.util.Log
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.viewModelScope
-import com.google.android.gms.maps.model.LatLng
-import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng as MapsLatLng
-import kotlinx.coroutines.launch
-
-class AddTrialDestViewModel(application: Application) : AndroidViewModel(application) {
- private val _directionsResult = MutableLiveData()
- val directionsResult: LiveData = _directionsResult
-
- private val _origin = MutableLiveData()
- val origin: LiveData get() = _origin
-
- private val _dest = MutableLiveData()
- val dest: LiveData get() = _dest
-
- private val _navFrag = MutableLiveData()
- val navFrag: LiveData get() = _navFrag
-
- fun setOrigin(latLng: LatLng) {
- _origin.value = latLng
- }
-
- fun setDest(latLng: LatLng) {
- Log.i("DestViewModel","setDest:${latLng.toString()}")
- _dest.value = latLng
- directionApiExecute()
- }
-
- fun removeDest() {
- if (_dest != null) {
-// _dest.value = null
- }
- }
-
- fun navStart() {
- _navFrag.value = true
- }
-
- fun navCompleted() {
- _navFrag.value = false
- }
-
- //DirectionAPIを実行
- fun directionApiExecute() {
- viewModelScope.launch {
- val result = DirectionsApiHelper().onlyOriginDestExecute(
- MapsLatLng(_origin.value!!.latitude, _origin.value!!.longitude),
- MapsLatLng(_dest.value!!.latitude, _dest.value!!.longitude)
- )
- Log.i("DestViewModel","result:${result.toString()}")
- _directionsResult.value = result
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
deleted file mode 100644
index 895b459..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialFragment.kt
+++ /dev/null
@@ -1,74 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-
-import android.os.Bundle
-import android.util.Log
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Toast
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.navigation.fragment.findNavController
-import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialBinding
-
-class AddTrialFragment : Fragment() {
-
- // This property is only valid between onCreateView and
- // onDestroyView.
- private lateinit var binding: FragmentAddTrialBinding
-
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- val viewModel =
- ViewModelProvider(this).get(AddTrialViewModel::class.java)
-// binding = FragmentAddTrialBinding.inflate(inflater, container, false)
- binding = FragmentAddTrialBinding.inflate(layoutInflater)
-
-
-
-
- val adapter = CreatedTrialAdapter(binding.createdTrialList.context)
- binding.createdTrialList.adapter = adapter
- adapter.setOnItemClickListener { view, position ->
- val action = AddTrialFragmentDirections.actionNavigationCreateTrialToTrialDetailFragment()
- this.findNavController().navigate(action)
- Toast.makeText(context,"$position",Toast.LENGTH_SHORT).show()
- }
-
- viewModel.testData.observe(viewLifecycleOwner, Observer {
- it?.let {
- Log.i("AddTrialFragment","${it}")
- adapter.submitList(it)
- }
- })
-
- viewModel.collectState.observe(viewLifecycleOwner, Observer {
- when(it) {
- "Loading" -> Toast.makeText(context , "Loading", Toast.LENGTH_SHORT).show()
- "Success" -> Toast.makeText(context , "Success", Toast.LENGTH_SHORT).show()
- "Error" -> Toast.makeText(context , "Error", Toast.LENGTH_SHORT).show()
- }
- })
-
- viewModel.navFrag.observe(viewLifecycleOwner, Observer {
- if (it == true) {
- this.findNavController().navigate(
- AddTrialFragmentDirections.actionNavigationAddTrialToNavigationAddTrialOrigin())
- viewModel.navCompleted()
- }
- })
-
- binding.startButton.setOnClickListener { viewModel.navStart() }
-
- return binding.root
- }
-
- override fun onDestroyView() {
- super.onDestroyView()
-// binding = null
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
deleted file mode 100644
index 2bb4325..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsFragment.kt
+++ /dev/null
@@ -1,181 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-
-import android.os.Bundle
-import android.util.Log
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.navigation.fragment.findNavController
-import com.google.android.gms.maps.CameraUpdateFactory
-import com.google.android.gms.maps.GoogleMap
-import com.google.android.gms.maps.OnMapReadyCallback
-import com.google.android.gms.maps.SupportMapFragment
-import com.google.android.gms.maps.model.*
-import com.google.maps.android.PolyUtil
-import com.google.maps.model.DirectionsResult
-import jp.ac.okinawa_ct.nitoc_ict.aroa.R
-import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialMapsBinding
-import java.util.*
-
-class AddTrialMapsFragment : Fragment() {
- companion object {
- private const val ZOOM_SIZE = 14f
- private const val POLYLINE_WIDTH = 12f
- }
-
- private var map: GoogleMap? = null
- private var polyline: Polyline? = null
- private val overview = 0
- private lateinit var viewModel: AddTrialMapsViewModel
-
- private lateinit var _binding: FragmentAddTrialMapsBinding
-
- // This property is only valid between onCreateView and
- // onDestroyView.
- private val binding get() = _binding
-
- private val callback = OnMapReadyCallback { googleMap ->
- map = googleMap
- viewModel.directionApiExecute()
- moveCamera()
- setMapLongClick(googleMap)
- setMarkerClick(googleMap)
- setOnMarkerDrag(googleMap)
- }
-
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- _binding = FragmentAddTrialMapsBinding.inflate(inflater,container, false)
- viewModel = ViewModelProvider(this).get(AddTrialMapsViewModel::class.java)
- val args = AddTrialMapsFragmentArgs.fromBundle(requireArguments())
- viewModel.setOrigin(args.originLatLng)
- viewModel.setDest(args.destLatLng)
- binding.saveButton.setOnClickListener { viewModel.createNewTrial() }
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
- mapFragment?.getMapAsync(callback)
- observeLiveData()
- }
-
- private fun observeLiveData() {
- viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
- updatePolyline(it, map)
- })
-
- viewModel.navFrag.observe(viewLifecycleOwner, Observer {
- if (it) {
- val action = AddTrialMapsFragmentDirections.actionNavigationAddTrialMapsToNavigationAddTrial()
- this.findNavController().navigate(action)
- viewModel.navCompleted()
- }
- })
- }
-
- //カメラを移動
- private fun moveCamera() {
- // Add a marker in Sydney and move the camera
- val origin = LatLng(viewModel.origin.value!!.latitude, viewModel.origin.value!!.longitude)
- val dest = LatLng(viewModel.dest.value!!.latitude, viewModel.dest.value!!.longitude)
- map?.apply {
- addMarker(MarkerOptions().position(origin).title("Marker in Origin"))
- addMarker(MarkerOptions().position(dest).title("Marker in Dest"))
- moveCamera(CameraUpdateFactory.newLatLngZoom(origin, ZOOM_SIZE))
- }
- }
-
- //マップをロングクリック時にマーカーを追加
- private fun setMapLongClick(map: GoogleMap) {
- map.setOnMapLongClickListener{latLng ->
- val snippet = String.format(
- Locale.getDefault(),
- "Lat: %1$.5f, Long: %2$.5f",
- latLng.latitude,
- latLng.longitude
- )
-
- val marker = map.addMarker(
- MarkerOptions()
- .position(latLng)
- .title("drop")
- .snippet(snippet)
- .draggable(true)
- )
-
-
- Log.i("MapsActivity","doAddMarker")
- if (marker != null) {
- viewModel.addWaypointMarker(marker)
- }
- Log.i("MapsActivity","didAddMarker")
- }
- }
-
- //マーカーをクリック時にそのマーカーを削除
- private fun setMarkerClick(map: GoogleMap) {
- map.setOnMarkerClickListener{marker ->
- viewModel.removeWaypointMarker(marker)
- marker.remove()
- return@setOnMarkerClickListener true
- }
- }
-
- //マーカーをドラッグ時に、マーカーのLatLngを更新
- private fun setOnMarkerDrag(map: GoogleMap) {
- map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
- private var start: com.google.maps.model.LatLng? = null
- private var end: com.google.maps.model.LatLng? = null
-
- override fun onMarkerDragStart(marker: Marker) {
- marker.position.let { start =
- com.google.maps.model.LatLng(it.latitude, it.longitude)
- }
- }
-
- override fun onMarkerDrag(marker: Marker) {
- // Do Nothing.
- }
-
- override fun onMarkerDragEnd(marker: Marker) {
- marker.position.let { end =
- com.google.maps.model.LatLng(it.latitude, it.longitude)
- }
- viewModel.changeWaypointMarker(marker)
- }
- })
- }
-
- //Polylineを更新
- private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
- googleMap ?: return
- directionsResult ?: return
- removePolyline()
- addPolyline(directionsResult, googleMap)
- }
-
- // 線を消す.
- private fun removePolyline() {
- if (map != null && polyline != null) {
- polyline?.remove()
- }
- }
-
- // 線を引く
- private fun addPolyline(directionsResult: DirectionsResult, map: GoogleMap) {
- val polylineOptions = PolylineOptions()
- polylineOptions.width(POLYLINE_WIDTH)
- // ARGB32bit形式.
- polylineOptions.color(R.color.map_polyline_stroke)
- val decodedPath = PolyUtil.decode(directionsResult.routes[overview].overviewPolyline.encodedPath)
- polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
deleted file mode 100644
index cf9a4b7..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialMapsViewModel.kt
+++ /dev/null
@@ -1,124 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.viewModelScope
-import com.google.android.gms.maps.model.LatLng
-import com.google.android.gms.maps.model.Marker
-import com.google.maps.android.PolyUtil
-import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng as MapsLatLng
-import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
-import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
-import kotlinx.coroutines.launch
-import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result as Result
-
-class AddTrialMapsViewModel(application: Application) : AndroidViewModel(application) {
- private val _directionsResult = MutableLiveData()
- val directionsResult: LiveData = _directionsResult
-
- private val trialRepositoryDummy = TrialRepositoryDummy()
-
- private val _navFrag = MutableLiveData()
- val navFrag: LiveData get() = _navFrag
-
- private val _origin = MutableLiveData()
- val origin: LiveData get() = _origin
-
- private val _dest = MutableLiveData()
- val dest: LiveData get() = _dest
-
- private val _waypointMarkers = MutableLiveData>().apply {
- value = ArrayList()
- }
- val waypointMarkers: LiveData> get() = _waypointMarkers
-
-
- init {
- _origin.value = LatLng(26.387409, 127.729753)
- _dest.value = LatLng(26.387409, 127.729753)
- }
-
- fun setOrigin(latLng: LatLng) {
- _origin.value = latLng
- }
-
- fun setDest(latLng: LatLng) {
- _dest.value = latLng
- }
-
- //waypointを追加する
- fun addWaypointMarker(marker: Marker) {
- _waypointMarkers.value?.add(marker)
- directionApiExecute()
- }
-
- //waypointを削除する
- fun removeWaypointMarker(marker: Marker) {
- _waypointMarkers.value?.remove(marker)
- directionApiExecute()
- }
-
- //waypointの値を変更する(ドラッグ&ドロップ)
- fun changeWaypointMarker(marker: Marker) {
- val markersId = ArrayList()
- for (id in _waypointMarkers.value!!) {
- markersId.add(id.id)
- }
- val index = markersId.indexOf(marker.id)
- _waypointMarkers.value?.set(index,marker)
- directionApiExecute()
- }
-
- //Marker型のwaypointsをDirectionAPIにリクエストを送る用のString型に変更する
- private fun markersToString(): String {
- val sb = StringBuilder()
- if (_waypointMarkers != null) {
- for (waypoint in _waypointMarkers.value!!) {
-// sb.append(waypoint.lat.toString() + "," + waypoint.lng.toString() + "|")
- sb.append(waypoint.position.latitude.toString() + "," + waypoint.position.longitude.toString() + "|")
- }
- }
- val waypointsString = sb.toString()
- return waypointsString
- }
-
-
- //DirectionAPIを実行
- fun directionApiExecute() {
- viewModelScope.launch {
- val waypointsString = markersToString()
- val result = DirectionsApiHelper().execute(
- MapsLatLng(_origin.value!!.latitude, _origin.value!!.longitude),
- MapsLatLng(_dest.value!!.latitude, _dest.value!!.longitude),
- waypointsString
- )
- _directionsResult.value = result
- }
- }
-
- fun createNewTrial() {
- val trialCourse = PolyUtil.decode(directionsResult.value!!.routes[0].overviewPolyline.encodedPath)
- val trial = Trial.Marathon("","",trialCourse[0],trialCourse,)
- viewModelScope.launch {
- trialRepositoryDummy.createTrial(trial).collect{
- when(it) {
- is Result.Loading -> "Loading"
- is Result.Success -> {
- //navigationを実装
- _navFrag.value = true
- }
- is Result.Error -> {
-
- }
- }
- }
- }
- }
-
- fun navCompleted() {
- _navFrag.value = false
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
deleted file mode 100644
index 61a2548..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginFragment.kt
+++ /dev/null
@@ -1,147 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-
-import android.os.Bundle
-import android.util.Log
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.ViewModelProvider
-import androidx.navigation.fragment.findNavController
-import com.google.android.gms.maps.CameraUpdateFactory
-import com.google.android.gms.maps.GoogleMap
-import com.google.android.gms.maps.OnMapReadyCallback
-import com.google.android.gms.maps.SupportMapFragment
-import com.google.android.gms.maps.model.LatLng
-import com.google.android.gms.maps.model.Marker
-import com.google.android.gms.maps.model.MarkerOptions
-import jp.ac.okinawa_ct.nitoc_ict.aroa.R
-import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentAddTrialOriginBinding
-import java.util.*
-
-class AddTrialOriginFragment : Fragment() {
-
- companion object {
- private const val ZOOM_SIZE = 14f
- }
-
- private var map: GoogleMap? = null
- private lateinit var viewModel: AddTrialOriginViewModel
-
- private lateinit var _binding: FragmentAddTrialOriginBinding
-
- // This property is only valid between onCreateView and
- // onDestroyView.
- private val binding get() = _binding
-
- private var currentMarker: Marker? = null
-
- private val callback = OnMapReadyCallback { googleMap ->
- map = googleMap
- moveCamera()
- setMapLongClick(googleMap)
- setMarkerClick(googleMap)
- setOnMarkerDrag(googleMap)
- }
-
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- _binding = FragmentAddTrialOriginBinding.inflate(inflater,container, false)
- viewModel = ViewModelProvider(this).get(AddTrialOriginViewModel::class.java)
- binding.nextButton.setOnClickListener { viewModel.navStart() }
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
- mapFragment?.getMapAsync(callback)
- observeLiveData()
- }
-
- private fun observeLiveData() {
- viewModel.navFrag.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
- if (it == true) {
- Log.i("originValue",viewModel.origin.value.toString())
- val action =
- AddTrialOriginFragmentDirections
- .actionNavigationAddTrialOriginToNavigationAddTrialDest(
- LatLng(viewModel.origin.value!!.latitude,viewModel.origin.value!!.longitude))
- this.findNavController().navigate(action)
- viewModel.navCompleted()
- }
- })
- }
-
- //カメラを移動
- private fun moveCamera() {
- // Add a marker in Sydney and move the camera
- val okinawa = LatLng(26.39987724386553, 127.74766655445417)
- map?.apply {
- moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
- }
- }
-
- //マップをロングクリック時にマーカーを追加
- private fun setMapLongClick(map: GoogleMap) {
- map.setOnMapLongClickListener{latLng ->
- val snippet = String.format(
- Locale.getDefault(),
- "Lat: %1$.5f, Long: %2$.5f",
- latLng.latitude,
- latLng.longitude
- )
-
- map.clear()
-
- val marker = map.addMarker(
- MarkerOptions()
- .position(latLng)
- .title("drop")
- .snippet(snippet)
- .draggable(true)
- )
-
- if (marker != null) {
- viewModel.setOrigin(marker.position)
- }
- }
- }
-
- //マーカーをクリック時にそのマーカーを削除
- private fun setMarkerClick(map: GoogleMap) {
- map.setOnMarkerClickListener{marker ->
- viewModel.removeOrigin()
- marker.remove()
- return@setOnMarkerClickListener true
- }
- }
-
- //マーカーをドラッグ時に、マーカーのLatLngを更新
- private fun setOnMarkerDrag(map: GoogleMap) {
- map.setOnMarkerDragListener(object : GoogleMap.OnMarkerDragListener {
- private var start: com.google.maps.model.LatLng? = null
- private var end: com.google.maps.model.LatLng? = null
-
- override fun onMarkerDragStart(marker: Marker) {
- marker.position.let { start =
- com.google.maps.model.LatLng(it.latitude, it.longitude)
- }
- }
-
- override fun onMarkerDrag(marker: Marker) {
- // Do Nothing.
- }
-
- override fun onMarkerDragEnd(marker: Marker) {
- marker.position.let { end =
- com.google.maps.model.LatLng(it.latitude, it.longitude)
- }
- viewModel.setOrigin(marker.position)
- }
- })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
deleted file mode 100644
index 4eec909..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialOriginViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import com.google.android.gms.maps.model.LatLng
-
-class AddTrialOriginViewModel(application: Application) : AndroidViewModel(application) {
- private val _origin = MutableLiveData()
- val origin: LiveData get() = _origin
-
- private val _navFrag = MutableLiveData()
- val navFrag: LiveData get() = _navFrag
-
- fun setOrigin(latLng: LatLng) {
- _origin.value = latLng
- }
-
- fun removeOrigin() {
- if (_origin != null) {
-// _origin.value = null
- }
- }
-
- fun navStart() {
- _navFrag.value = true
- }
-
- fun navCompleted() {
- _navFrag.value = false
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
deleted file mode 100644
index 0d114db..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/AddTrialViewModel.kt
+++ /dev/null
@@ -1,64 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
-
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
-import com.google.android.gms.maps.model.LatLng
-import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result
-import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
-import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
-import kotlinx.coroutines.launch
-
-class AddTrialViewModel : ViewModel() {
- private val trialRepositoryDummy = TrialRepositoryDummy()
-
- private val _testData : MutableLiveData> = MutableLiveData(listOf())
- val testData: LiveData> get() = _testData
-
- private val _navFrag = MutableLiveData()
- val navFrag: LiveData get() = _navFrag
-
- private val _collectState = MutableLiveData()
- val collectState: LiveData get() = _collectState
-
- fun navStart() {
- _navFrag.value = true
- }
-
- fun navCompleted() {
- _navFrag.value = null
- }
-
- init {
- getTrialList("testUserID")
- }
-
- fun getTrialList(userId: String) {
- viewModelScope.launch {
- trialRepositoryDummy.getTriedTrialByUserId(userId).collect{
- when(it) {
- is Result.Loading -> _collectState.value = "Loading"
- is Result.Success -> {
- _collectState.value = "Success"
- _testData.value = it.data!!}
- is Result.Error -> _collectState.value = "Error"
- }
- }
- }
- }
-
-// fun getTrialList(userId: String) {
-// viewModelScope.launch {
-// trialRepositoryDummy.getTrialsNear(LatLng(26.526230, 128.030372), 100.0).collect{
-// when(it) {
-// is Result.Loading -> _collectState.value = "Loading"
-// is Result.Success -> {
-// _collectState.value = "Success"
-// _testData.value = it.data!!}
-// is Result.Error -> _collectState.value = "Error"
-// }
-// }
-// }
-// }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
index bee2e5f..5899d0b 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/DirectionsApiHelper.kt
@@ -2,17 +2,16 @@ package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial
import android.util.Log
import androidx.annotation.Nullable
-import com.google.android.gms.maps.model.LatLng
import com.google.maps.DirectionsApi
import com.google.maps.GeoApiContext
import com.google.maps.model.DirectionsResult
-import com.google.maps.model.LatLng as MapsLatLng
import com.google.maps.model.TravelMode
import com.google.maps.model.Unit
import jp.ac.okinawa_ct.nitoc_ict.aroa.BuildConfig
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.util.*
+import com.google.maps.model.LatLng as MapsLatLng
class DirectionsApiHelper {
/**
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
deleted file mode 100644
index 2e3b860..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/detail/TrialDetailFragment.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.detail
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.ViewModelProvider
-import com.google.android.gms.maps.CameraUpdateFactory
-import com.google.android.gms.maps.OnMapReadyCallback
-import com.google.android.gms.maps.SupportMapFragment
-import com.google.android.gms.maps.model.LatLng
-import com.google.android.gms.maps.model.MarkerOptions
-import jp.ac.okinawa_ct.nitoc_ict.aroa.R
-import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentTrialDetailBinding
-
-class TrialDetailFragment : Fragment() {
- private lateinit var _binding: FragmentTrialDetailBinding
- private val binding get() = _binding
-
- private val callback = OnMapReadyCallback { googleMap ->
- val okinawa = LatLng(26.526230, 128.030372)
- googleMap.addMarker(MarkerOptions().position(okinawa).title("Marker in Sydney"))
- googleMap.moveCamera(CameraUpdateFactory.newLatLng(okinawa))
- }
-
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- _binding = FragmentTrialDetailBinding.inflate(layoutInflater)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
- mapFragment?.getMapAsync(callback)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt
index 7b0d557..4cbf556 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt
@@ -36,7 +36,7 @@ class AddTrialFragment : Fragment() {
binding.createdTrialList.adapter = adapter
adapter.setOnItemClickListener { view, position ->
val action = AddTrialFragmentDirections.actionNavigationCreateTrialToTrialDetailFragment(
- viewModel.testData.value!!.get(position).id
+ viewModel.testData.value!!.get(position).id,true
)
this.findNavController().navigate(action)
Toast.makeText(context, "$position", Toast.LENGTH_SHORT).show()
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
index 69f521e..8d00f44 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
@@ -5,23 +5,40 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.SupportMapFragment
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions
+import com.google.android.gms.maps.model.Polyline
+import com.google.android.gms.maps.model.PolylineOptions
+import com.google.maps.android.PolyUtil
+import com.google.maps.model.DirectionsResult
import jp.ac.okinawa_ct.nitoc_ict.aroa.R
import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentTrialDetailBinding
+import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.waypoints.AddTrialMapsFragment
+import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.waypoints.AddTrialMapsFragmentDirections
+import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.waypoints.AddTrialMapsViewModel
class TrialDetailFragment : Fragment() {
+ companion object {
+ private const val ZOOM_SIZE = 16f
+ private const val POLYLINE_WIDTH = 12f
+ }
+
+ private var map: GoogleMap? = null
+ private var polyline: Polyline? = null
+ private lateinit var viewModel: TrialDetailViewModel
+
private lateinit var _binding: FragmentTrialDetailBinding
private val binding get() = _binding
private val callback = OnMapReadyCallback { googleMap ->
- val okinawa = LatLng(26.526230, 128.030372)
- googleMap.addMarker(MarkerOptions().position(okinawa).title("Marker in Sydney"))
- googleMap.moveCamera(CameraUpdateFactory.newLatLng(okinawa))
+ map = googleMap
}
override fun onCreateView(
@@ -30,6 +47,17 @@ class TrialDetailFragment : Fragment() {
savedInstanceState: Bundle?
): View {
_binding = FragmentTrialDetailBinding.inflate(layoutInflater)
+ viewModel = ViewModelProvider(this).get(TrialDetailViewModel::class.java)
+ val args = TrialDetailFragmentArgs.fromBundle(requireArguments())
+ if (!args.canStartTrial) {
+ binding.startTrialButton.visibility = View.INVISIBLE
+ }else {
+ binding.startTrialButton.setOnClickListener {
+
+ }
+ }
+ viewModel.setTrialId(args.trialId)
+
return binding.root
}
@@ -37,5 +65,59 @@ class TrialDetailFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(callback)
+ observeLiveData()
+ }
+
+ private fun observeLiveData() {
+ viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
+ updatePolyline(it, map)
+ })
+
+ viewModel.trialId.observe(viewLifecycleOwner, Observer {
+ viewModel.getTrialById()
+ })
+
+ viewModel.trial.observe(viewLifecycleOwner, Observer {
+ viewModel.assignmentTrialData()
+ map?.moveCamera(
+ CameraUpdateFactory.newLatLngZoom(viewModel.trialPosition.value!!, ZOOM_SIZE))
+ binding.detailTrialName.text = viewModel.trialName.value
+ binding.detailTrialAuthorUserId.text = viewModel.trialId.value
+ binding.detailTrialPosition.text = viewModel.trialPosition.value.toString()
+ })
+
+ viewModel.trialCourse.observe(viewLifecycleOwner, Observer {
+ viewModel.courseTranslate()
+ viewModel.directionApiExecute()
+ map?.addMarker(MarkerOptions().position(viewModel.origin.value!!).title("origin"))
+ map?.addMarker(MarkerOptions().position(viewModel.dest.value!!).title("dest"))
+ })
+ viewModel
+ }
+
+ //Polylineを更新
+ private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
+ googleMap ?: return
+ directionsResult ?: return
+ removePolyline()
+ addPolyline(directionsResult, googleMap)
+ }
+
+ // 線を消す.
+ private fun removePolyline() {
+ if (map != null && polyline != null) {
+ polyline?.remove()
+ }
+ }
+
+ // 線を引く
+ private fun addPolyline(directionsResult: DirectionsResult, map: GoogleMap) {
+ val polylineOptions = PolylineOptions()
+ polylineOptions.width(POLYLINE_WIDTH)
+ // ARGB32bit形式.
+ polylineOptions.color(R.color.map_polyline_stroke)
+ val decodedPath =
+ PolyUtil.decode(directionsResult.routes[0].overviewPolyline.encodedPath)
+ polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
}
}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailViewModel.kt
new file mode 100644
index 0000000..08ab5eb
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailViewModel.kt
@@ -0,0 +1,120 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.detail
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import com.google.android.gms.maps.model.LatLng
+import com.google.maps.model.DirectionsResult
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
+import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.DirectionsApiHelper
+import kotlinx.coroutines.launch
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result as Result
+
+class TrialDetailViewModel(application: Application) : AndroidViewModel(application) {
+ private val trialRepositoryDummy = TrialRepositoryDummy()
+
+ private val _directionsResult = MutableLiveData()
+ val directionsResult: LiveData = _directionsResult
+
+ private val _origin = MutableLiveData()
+ val origin: LiveData get() = _origin
+
+ private val _dest = MutableLiveData()
+ val dest: LiveData get() = _dest
+
+ private val _waypoints = MutableLiveData>().apply {
+ value = ArrayList()
+ }
+ val waypoints: LiveData> get() = _waypoints
+
+ private val _trial = MutableLiveData()
+ val trial: LiveData get() = _trial
+
+ private val _trialId = MutableLiveData()
+ val trialId: LiveData get() = _trialId
+
+ private val _trialName = MutableLiveData()
+ val trialName: LiveData get() = _trialName
+
+ private val _trialAuthorUserId = MutableLiveData()
+ val trialAuthorUserId: LiveData get() = _trialAuthorUserId
+
+ private val _trialPosition = MutableLiveData()
+ val trialPosition: LiveData get() = _trialPosition
+
+ private val _trialCourse = MutableLiveData>()
+ val trialCourse: LiveData> get() = _trialCourse
+
+ fun setTrialId(id: String) {
+ _trialId.value = id
+ }
+
+ fun getTrialById() {
+ viewModelScope.launch {
+ trialRepositoryDummy.getTrialById(_trialId.value!!).collect{
+ when(it) {
+ is Result.Loading -> "Loading"
+ is Result.Success -> {
+ _trial.value = it.data!!
+ }
+ is Result.Error -> "Error"
+ }
+ }
+ }
+ }
+
+ fun assignmentTrialData() {
+ _trial.value?.let {
+ when(it) {
+ is Trial.Marathon -> {
+ _trialName.value = it.name
+ _trialAuthorUserId.value = it.authorUserId
+ _trialPosition.value = it.position
+ _trialCourse.value = it.course
+ }
+ else -> "Error"
+ }
+ }
+ }
+
+ fun courseTranslate() {
+ _trialCourse.value?.let { courselatLng ->
+ _origin.value = courselatLng.first()
+ _dest.value = courselatLng.last()
+ for (latLng in courselatLng) {
+ when(latLng) {
+ courselatLng.first() -> continue
+ courselatLng.last() -> continue
+ else -> _waypoints.value?.add(latLng)
+ }
+ }
+ }
+ }
+
+ private fun latLngToString(): String {
+ val sb = StringBuilder()
+ if (_waypoints != null) {
+ for (waypoint in _waypoints.value!!) {
+ sb.append(waypoint.latitude.toString() + "," + waypoint.longitude.toString() + "|")
+ }
+ }
+ return sb.toString()
+ }
+
+ fun directionApiExecute() {
+ viewModelScope.launch {
+ val waypointsString = latLngToString()
+ val result = DirectionsApiHelper().execute(
+ com.google.maps.model.LatLng(_origin.value!!.latitude, _origin.value!!.longitude),
+ com.google.maps.model.LatLng(_dest.value!!.latitude, _dest.value!!.longitude),
+ waypointsString
+ )
+ _directionsResult.value = result
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_add_trial.xml b/app/src/main/res/layout/fragment_add_trial.xml
index 376887c..a22b4b9 100644
--- a/app/src/main/res/layout/fragment_add_trial.xml
+++ b/app/src/main/res/layout/fragment_add_trial.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".ui.addtrial.AddTrialFragment">
+ tools:context=".ui.addtrial.start.AddTrialFragment">
+ tools:context=".ui.addtrial.dest.AddTrialDestFragment" />
+ tools:context=".ui.addtrial..waypoints.AddTrialMapsFragment" />
+ tools:context=".ui.addtrial.origin.AddTrialOriginFragment" />
+ tools:context=".ui.detail.TrialDetailFragment" />
+
+
+
-
-
diff --git a/app/src/main/res/navigation/create_trial_navigation.xml b/app/src/main/res/navigation/create_trial_navigation.xml
index f601429..f313670 100644
--- a/app/src/main/res/navigation/create_trial_navigation.xml
+++ b/app/src/main/res/navigation/create_trial_navigation.xml
@@ -7,17 +7,20 @@
+
+
+
+
+
+
\ No newline at end of file
From c092dbb0920be2f421c4521b4f0ac29ea44874e1 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Tue, 4 Oct 2022 23:54:15 +0900
Subject: [PATCH 52/99] =?UTF-8?q?CreatedTrialAdapter.kt=E3=81=AE=E5=86=97?=
=?UTF-8?q?=E9=95=B7=E3=81=AA=E8=A8=98=E8=BF=B0=E3=82=92=E5=89=8A=E9=99=A4?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/addtrial/CreatedTrialAdapter.kt | 35 -------------------
1 file changed, 35 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/CreatedTrialAdapter.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/CreatedTrialAdapter.kt
index 18a9fd5..bd2e8cb 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/CreatedTrialAdapter.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/CreatedTrialAdapter.kt
@@ -55,38 +55,3 @@ class CreatedTrialAdapter(
}
}
-//class CreatedTrialAdapter: ListAdapter(CreatedTrialDiffCallback()) {
-// override fun onBindViewHolder(holder: ViewHolder, position: Int) {
-// val item = getItem(position)
-// holder.bind(item)
-// }
-//
-// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
-// return ViewHolder.from(parent)
-// }
-//
-// class ViewHolder private constructor(private val binding: ListItemTrialBinding): RecyclerView.ViewHolder(binding.root) {
-// fun bind(item: Trial) {
-// binding.trialName.text = item.name
-//// binding.executePendingBindings()
-// }
-// companion object {
-// fun from(parent: ViewGroup): ViewHolder {
-// val layoutInflater = LayoutInflater.from(parent.context)
-// val binding = ListItemTrialBinding.inflate(layoutInflater,parent,false)
-// return ViewHolder(binding)
-// }
-// }
-// }
-//}
-//
-//class CreatedTrialDiffCallback : DiffUtil.ItemCallback() {
-// override fun areItemsTheSame(oldItem: Trial, newItem: Trial): Boolean {
-// return oldItem.id == newItem.id
-// }
-//
-// override fun areContentsTheSame(oldItem: Trial, newItem: Trial): Boolean {
-// return oldItem == newItem
-// }
-//}
-
From 0f2644701933261bd191dbd85b75581c39882474 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 00:23:38 +0900
Subject: [PATCH 53/99] =?UTF-8?q?AddTrial=E9=96=A2=E9=80=A3=E3=81=AE?=
=?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AB=E3=82=B3=E3=83=A1=E3=83=B3?=
=?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=80=81import?=
=?UTF-8?q?=E3=82=92=E6=9C=80=E9=81=A9=E5=8C=96=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/addtrial/dest/AddTrialDestFragment.kt | 5 +---
.../addtrial/origin/AddTrialOriginFragment.kt | 7 +-----
.../ui/addtrial/start/AddTrialFragment.kt | 24 +++----------------
.../ui/addtrial/start/AddTrialViewModel.kt | 17 ++-----------
.../waypoints/AddTrialMapsViewModel.kt | 4 +++-
5 files changed, 10 insertions(+), 47 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestFragment.kt
index 04e8937..3d47898 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/dest/AddTrialDestFragment.kt
@@ -32,8 +32,6 @@ class AddTrialDestFragment : Fragment() {
private lateinit var _binding: FragmentAddTrialDestBinding
- // This property is only valid between onCreateView and
- // onDestroyView.
private val binding get() = _binding
private val callback = OnMapReadyCallback { googleMap ->
@@ -107,7 +105,7 @@ class AddTrialDestFragment : Fragment() {
latLng.latitude,
latLng.longitude
)
-
+ //マップをクリア、originのマーカーを追加
map.clear()
map.addMarker(
@@ -128,7 +126,6 @@ class AddTrialDestFragment : Fragment() {
.draggable(true)
)
-
if (marker != null) {
Log.i("DestFragment", "addMarker:${marker.position.toString()}")
viewModel.setDest(marker.position)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginFragment.kt
index 6a0048b..fae1b20 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/origin/AddTrialOriginFragment.kt
@@ -30,12 +30,8 @@ class AddTrialOriginFragment : Fragment() {
private lateinit var _binding: FragmentAddTrialOriginBinding
- // This property is only valid between onCreateView and
- // onDestroyView.
private val binding get() = _binding
- private var currentMarker: Marker? = null
-
private val callback = OnMapReadyCallback { googleMap ->
map = googleMap
moveCamera()
@@ -81,7 +77,6 @@ class AddTrialOriginFragment : Fragment() {
//カメラを移動
private fun moveCamera() {
- // Add a marker in Sydney and move the camera
val okinawa = LatLng(26.39987724386553, 127.74766655445417)
map?.apply {
moveCamera(CameraUpdateFactory.newLatLngZoom(okinawa, ZOOM_SIZE))
@@ -97,7 +92,7 @@ class AddTrialOriginFragment : Fragment() {
latLng.latitude,
latLng.longitude
)
-
+ //マップをクリア
map.clear()
val marker = map.addMarker(
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt
index 4cbf556..22955a3 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialFragment.kt
@@ -15,8 +15,6 @@ import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.CreatedTrialAdapter
class AddTrialFragment : Fragment() {
- // This property is only valid between onCreateView and
- // onDestroyView.
private lateinit var binding: FragmentAddTrialBinding
override fun onCreateView(
@@ -26,20 +24,16 @@ class AddTrialFragment : Fragment() {
): View {
val viewModel =
ViewModelProvider(this).get(AddTrialViewModel::class.java)
-// binding = FragmentAddTrialBinding.inflate(inflater, container, false)
binding = FragmentAddTrialBinding.inflate(layoutInflater)
-
-
-
val adapter = CreatedTrialAdapter(binding.createdTrialList.context)
binding.createdTrialList.adapter = adapter
+ //RecyclerViewのclickListener
adapter.setOnItemClickListener { view, position ->
val action = AddTrialFragmentDirections.actionNavigationCreateTrialToTrialDetailFragment(
- viewModel.testData.value!!.get(position).id,true
+ viewModel.testData.value!!.get(position).id,false
)
this.findNavController().navigate(action)
- Toast.makeText(context, "$position", Toast.LENGTH_SHORT).show()
}
viewModel.testData.observe(viewLifecycleOwner, Observer{
@@ -49,14 +43,7 @@ class AddTrialFragment : Fragment() {
}
})
- viewModel.collectState.observe(viewLifecycleOwner, Observer {
- when(it) {
- "Loading" -> Toast.makeText(context, "Loading", Toast.LENGTH_SHORT).show()
- "Success" -> Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show()
- "Error" -> Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show()
- }
- })
-
+ //トライアルの作成開始
viewModel.navFrag.observe(viewLifecycleOwner, Observer {
if (it == true) {
this.findNavController().navigate(
@@ -70,9 +57,4 @@ class AddTrialFragment : Fragment() {
return binding.root
}
-
- override fun onDestroyView() {
- super.onDestroyView()
-// binding = null
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialViewModel.kt
index 94064bc..8ca4c5d 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/start/AddTrialViewModel.kt
@@ -33,7 +33,8 @@ class AddTrialViewModel : ViewModel() {
getTrialList("testUserID")
}
- fun getTrialList(userId: String) {
+ //リポジトリからテストデータを持ってくる
+ private fun getTrialList(userId: String) {
viewModelScope.launch {
trialRepositoryDummy.getTriedTrialByUserId(userId).collect{
when(it) {
@@ -46,18 +47,4 @@ class AddTrialViewModel : ViewModel() {
}
}
}
-
-// fun getTrialList(userId: String) {
-// viewModelScope.launch {
-// trialRepositoryDummy.getTrialsNear(LatLng(26.526230, 128.030372), 100.0).collect{
-// when(it) {
-// is Result.Loading -> _collectState.value = "Loading"
-// is Result.Success -> {
-// _collectState.value = "Success"
-// _testData.value = it.data!!}
-// is Result.Error -> _collectState.value = "Error"
-// }
-// }
-// }
-// }
}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsViewModel.kt
index 775dc53..8463032 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/addtrial/waypoints/AddTrialMapsViewModel.kt
@@ -106,7 +106,9 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
viewModelScope.launch {
trialRepositoryDummy.createTrial(trial).collect{
when(it) {
- is Result.Loading -> "Loading"
+ is Result.Loading -> {
+
+ }
is Result.Success -> {
//navigationを実装
_navFrag.value = true
From ba8611a01663a6af957cdd85e66166f2107f81bf Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 00:32:20 +0900
Subject: [PATCH 54/99] =?UTF-8?q?HomeFragment.kt=E3=81=ABmap=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=80=81=E3=83=88=E3=83=A9=E3=82=A4?=
=?UTF-8?q?=E3=82=A2=E3=83=AB=E3=81=AE=E3=83=9E=E3=83=BC=E3=82=AB=E3=83=BC?=
=?UTF-8?q?=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?=
=?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
=?UTF-8?q?=E3=81=9D=E3=81=97=E3=81=A6=E3=80=81=E3=83=9E=E3=83=BC=E3=82=AB?=
=?UTF-8?q?=E3=83=BC=E3=82=92=E3=82=AF=E3=83=AA=E3=83=83=E3=82=AF=E3=81=97?=
=?UTF-8?q?=E3=81=9F=E3=82=89=E3=80=81=E3=81=9D=E3=81=AE=E3=83=88=E3=83=A9?=
=?UTF-8?q?=E3=82=A4=E3=82=A2=E3=83=AB=E3=81=AE=E8=A9=B3=E7=B4=B0=E7=94=BB?=
=?UTF-8?q?=E9=9D=A2=E3=81=AB=E9=81=B7=E7=A7=BB=E3=81=99=E3=82=8B=E3=82=88?=
=?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nitoc_ict/aroa/ui/home/HomeFragment.kt | 68 ++++++++++++++++---
.../nitoc_ict/aroa/ui/home/HomeViewModel.kt | 36 +++++++++-
app/src/main/res/layout/fragment_home.xml | 16 ++---
3 files changed, 96 insertions(+), 24 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeFragment.kt
index 3fdffb5..d01aa6e 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeFragment.kt
@@ -4,11 +4,19 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.LatLng
+import com.google.android.gms.maps.model.MarkerOptions
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentHomeBinding
+
class HomeFragment : Fragment() {
private var _binding: FragmentHomeBinding? = null
@@ -17,26 +25,64 @@ class HomeFragment : Fragment() {
// onDestroyView.
private val binding get() = _binding!!
+ private lateinit var map : GoogleMap
+
+ private lateinit var homeViewModel: HomeViewModel
+
+
+ private val callback = OnMapReadyCallback { googleMap ->
+ map = googleMap
+ moveCamera()
+ setMarkerClick(googleMap)
+ }
+
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- val homeViewModel =
+ _binding = FragmentHomeBinding.inflate(inflater, container, false)
+ homeViewModel =
ViewModelProvider(this).get(HomeViewModel::class.java)
+ return binding.root
+ }
- _binding = FragmentHomeBinding.inflate(inflater, container, false)
- val root: View = binding.root
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
+ mapFragment.getMapAsync(callback)
+ observeLiveData()
+ }
- val textView: TextView = binding.textHome
- homeViewModel.text.observe(viewLifecycleOwner) {
- textView.text = it
+ private fun observeLiveData() {
+ homeViewModel.foundTrials.observe(viewLifecycleOwner) {
+ for (data in it){
+ map.addMarker(MarkerOptions().position(data.position).title(data.id))
+ }
}
- return root
}
- override fun onDestroyView() {
- super.onDestroyView()
- _binding = null
+ private fun moveCamera() {
+ val cUpdate = CameraUpdateFactory.newLatLngZoom(
+ LatLng(26.526230, 128.030372), 16f
+ )
+ map.apply {
+ moveCamera(cUpdate)
+ }
}
+
+ private fun setMarkerClick(map: GoogleMap) {
+ homeViewModel.foundTrials.observe(viewLifecycleOwner) {
+ map.setOnMarkerClickListener{marker ->
+ marker.title?.let {
+ val action = HomeFragmentDirections.actionHomeFragmentToTrialDetailFragment(
+ it,true
+ )
+ this.findNavController().navigate(action)
+ }
+ return@setOnMarkerClickListener true
+ }
+ }
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeViewModel.kt
index 523c1d9..943b684 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeViewModel.kt
@@ -3,11 +3,41 @@ package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.home
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.google.android.gms.maps.model.LatLng
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
+import kotlinx.coroutines.launch
class HomeViewModel : ViewModel() {
+ private val trialRepository = TrialRepositoryDummy()
- private val _text = MutableLiveData().apply {
- value = "This is home Fragment"
+ private val _foundTrials: MutableLiveData> = MutableLiveData(listOf())
+ val foundTrials: LiveData> = _foundTrials
+
+ init {
+ findTrialsNearMe()
+ }
+
+ fun findTrialsNearMe() {
+
+ viewModelScope.launch {
+
+ trialRepository
+ .getTrialsNear(LatLng(26.526230, 128.030372), 100.0)
+ .collect {
+ when (it) {
+ is Result.Loading -> _foundTrials.value = listOf()
+ is Result.Success -> {
+ _foundTrials.value = it.data!!
+ }
+
+ is Result.Error -> {
+ _foundTrials.value = listOf()
+ }
+ }
+ }
+ }
}
- val text: LiveData = _text
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 5c0a701..f075aab 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -6,14 +6,10 @@
android:layout_height="match_parent"
tools:context=".ui.home.HomeFragment">
-
-
+
\ No newline at end of file
From e770c79e470bf61b17844a01e8a6cc06b8cbb1a3 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 00:35:24 +0900
Subject: [PATCH 55/99] =?UTF-8?q?HomeFragment=E3=81=AEnavigation=E3=81=A8n?=
=?UTF-8?q?avGraph=E7=94=A8=E3=81=AEfragment=E3=82=92=E5=AE=9F=E8=A3=85?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82bottomNavigation?=
=?UTF-8?q?=E3=81=AE=E9=81=B7=E7=A7=BB=E5=85=88=E3=82=82navGraph=E7=94=A8?=
=?UTF-8?q?=E3=81=AEfragment=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/home/HomeNavGraphFragment.kt | 25 +++++++++++++++++
.../res/layout/fragment_home_nav_graph.xml | 17 +++++++++++
.../res/navigation/bottom_nav_navigation.xml | 6 ++--
.../res/navigation/home_trial_navigation.xml | 28 +++++++++++++++++++
4 files changed, 73 insertions(+), 3 deletions(-)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeNavGraphFragment.kt
create mode 100644 app/src/main/res/layout/fragment_home_nav_graph.xml
create mode 100644 app/src/main/res/navigation/home_trial_navigation.xml
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeNavGraphFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeNavGraphFragment.kt
new file mode 100644
index 0000000..26b1bdf
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/home/HomeNavGraphFragment.kt
@@ -0,0 +1,25 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.home
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.navigation.fragment.NavHostFragment
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentCheckRecordListBinding
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentHomeNavGraphBinding
+
+class HomeNavGraphFragment : Fragment() {
+ private lateinit var binding: FragmentHomeNavGraphBinding
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ binding = FragmentHomeNavGraphBinding.inflate(layoutInflater)
+ val navHostFragment = childFragmentManager.findFragmentById(R.id.nav_host_home_trial) as NavHostFragment
+ val navController = navHostFragment.navController
+ return binding.root
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home_nav_graph.xml b/app/src/main/res/layout/fragment_home_nav_graph.xml
new file mode 100644
index 0000000..4ca8e8b
--- /dev/null
+++ b/app/src/main/res/layout/fragment_home_nav_graph.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/bottom_nav_navigation.xml b/app/src/main/res/navigation/bottom_nav_navigation.xml
index 1cef112..cf83d05 100644
--- a/app/src/main/res/navigation/bottom_nav_navigation.xml
+++ b/app/src/main/res/navigation/bottom_nav_navigation.xml
@@ -7,7 +7,7 @@
@@ -19,7 +19,7 @@
+ tools:layout="@layout/fragment_check_record_list" />
\ No newline at end of file
diff --git a/app/src/main/res/navigation/home_trial_navigation.xml b/app/src/main/res/navigation/home_trial_navigation.xml
new file mode 100644
index 0000000..8147aa0
--- /dev/null
+++ b/app/src/main/res/navigation/home_trial_navigation.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From a8309bc55c02d2151da159810bf2b4c33169ad07 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 00:37:24 +0900
Subject: [PATCH 56/99] =?UTF-8?q?CheckRecordListFragment=E3=81=A8=E3=81=9D?=
=?UTF-8?q?=E3=81=AEViewModel=E3=82=92=E5=AE=9F=E8=A3=85=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/checkrecord/CheckRecordFragment.kt | 42 --------------
.../ui/checkrecord/CheckRecordViewModel.kt | 13 -----
.../aroa/ui/checkrecord/RecordListAdapter.kt | 55 +++++++++++++++++++
.../record_list/CheckRecordListFragment.kt | 47 ++++++++++++++++
.../record_list/CheckRecordListViewModel.kt | 39 +++++++++++++
.../main/res/layout/fragment_check_record.xml | 19 -------
.../res/layout/fragment_check_record_list.xml | 14 +++++
app/src/main/res/layout/list_item_record.xml | 15 +++++
8 files changed, 170 insertions(+), 74 deletions(-)
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/CheckRecordFragment.kt
delete mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/CheckRecordViewModel.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordListAdapter.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListViewModel.kt
delete mode 100644 app/src/main/res/layout/fragment_check_record.xml
create mode 100644 app/src/main/res/layout/fragment_check_record_list.xml
create mode 100644 app/src/main/res/layout/list_item_record.xml
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/CheckRecordFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/CheckRecordFragment.kt
deleted file mode 100644
index d59c5fd..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/CheckRecordFragment.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.ViewModelProvider
-import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentCheckRecordBinding
-
-class CheckRecordFragment : Fragment() {
-
- private var _binding: FragmentCheckRecordBinding? = null
-
- // This property is only valid between onCreateView and
- // onDestroyView.
- private val binding get() = _binding!!
-
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- val notificationsViewModel =
- ViewModelProvider(this).get(CheckRecordViewModel::class.java)
-
- _binding = FragmentCheckRecordBinding.inflate(inflater, container, false)
- val root: View = binding.root
-
- val textView: TextView = binding.textCheckRecord
- notificationsViewModel.text.observe(viewLifecycleOwner) {
- textView.text = it
- }
- return root
- }
-
- override fun onDestroyView() {
- super.onDestroyView()
- _binding = null
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/CheckRecordViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/CheckRecordViewModel.kt
deleted file mode 100644
index 00debf5..0000000
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/CheckRecordViewModel.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord
-
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.ViewModel
-
-class CheckRecordViewModel : ViewModel() {
-
- private val _text = MutableLiveData().apply {
- value = "This is CheckRecord Fragment"
- }
- val text: LiveData = _text
-}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordListAdapter.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordListAdapter.kt
new file mode 100644
index 0000000..093f3fe
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordListAdapter.kt
@@ -0,0 +1,55 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Record
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.ListItemRecordBinding
+
+typealias OnItemClickListener = (view: View, position: Int) -> Unit
+
+class RecordListAdapter(
+ context: Context
+) : ListAdapter(ITEM_CALLBACK) {
+ private val inflater = LayoutInflater.from(context)
+
+ private var onItemClickListener: OnItemClickListener? = null
+
+ class BindingHolder(
+ val binding: ListItemRecordBinding
+ ) : RecyclerView.ViewHolder(binding.root)
+ companion object {
+ val ITEM_CALLBACK = object : DiffUtil.ItemCallback() {
+ override fun areItemsTheSame(
+ oldItem: Record,
+ newItem: Record
+ ): Boolean = oldItem.userId == newItem.userId
+
+ override fun areContentsTheSame(
+ oldItem: Record,
+ newItem: Record
+ ): Boolean = oldItem == newItem
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindingHolder {
+ val binding = ListItemRecordBinding.inflate(inflater, parent, false)
+ return BindingHolder(binding)
+ }
+
+ override fun onBindViewHolder(bindingHolder: BindingHolder, position: Int) {
+ val current = getItem(position)
+ bindingHolder.binding.recordTrialName.text = current.userId
+ bindingHolder.binding.recordTrialName.setOnClickListener {
+ onItemClickListener?.invoke(it,position)
+ }
+ }
+
+ fun setOnItemClickListener(onItemClickListener: OnItemClickListener) {
+ this.onItemClickListener = onItemClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt
new file mode 100644
index 0000000..15425bc
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt
@@ -0,0 +1,47 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.record_list
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentCheckRecordListBinding
+import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.RecordListAdapter
+
+class CheckRecordListFragment : Fragment() {
+
+ private var _binding: FragmentCheckRecordListBinding? = null
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding!!
+ private lateinit var viewModel: CheckRecordListViewModel
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ val viewModel =
+ ViewModelProvider(this).get(CheckRecordListViewModel::class.java)
+
+ _binding = FragmentCheckRecordListBinding.inflate(inflater, container, false)
+
+ val adapter = RecordListAdapter(requireContext())
+ binding.recordList.adapter = adapter
+ viewModel.testRecordList.observe(viewLifecycleOwner, Observer {
+ adapter.submitList(it)
+ })
+
+ adapter.setOnItemClickListener { view, position ->
+ val action = CheckRecordListFragmentDirections
+ .actionCheckRecordListFragmentToRecordDetailFragment()
+ this.findNavController().navigate(action)
+ }
+
+ return binding.root
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListViewModel.kt
new file mode 100644
index 0000000..05f68fa
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListViewModel.kt
@@ -0,0 +1,39 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.record_list
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Record
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.RecordRepositoryDummy
+import kotlinx.coroutines.launch
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result as Result
+
+class CheckRecordListViewModel : ViewModel() {
+ private val recordRepositoryDummy = RecordRepositoryDummy()
+
+ private val _testRecordList = MutableLiveData>()
+ val testRecordList: LiveData> get() = _testRecordList
+
+ private val _collectState = MutableLiveData()
+ val collectState: LiveData get() = _collectState
+
+ init {
+ getRecordList()
+ }
+
+ private fun getRecordList() {
+ viewModelScope.launch {
+ recordRepositoryDummy.getMyRecords("").collect{
+ when(it) {
+ is Result.Loading -> _collectState.value = "Loading"
+ is Result.Success -> {
+ _testRecordList.value = it.data!!
+ }
+ is Result.Error -> _collectState.value = "Error"
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_check_record.xml b/app/src/main/res/layout/fragment_check_record.xml
deleted file mode 100644
index 8749236..0000000
--- a/app/src/main/res/layout/fragment_check_record.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_check_record_list.xml b/app/src/main/res/layout/fragment_check_record_list.xml
new file mode 100644
index 0000000..942f682
--- /dev/null
+++ b/app/src/main/res/layout/fragment_check_record_list.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_item_record.xml b/app/src/main/res/layout/list_item_record.xml
new file mode 100644
index 0000000..b1a7f42
--- /dev/null
+++ b/app/src/main/res/layout/list_item_record.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
\ No newline at end of file
From 9863bdf1c547f9091dab32ed1d5868ed173e1aad Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 00:43:49 +0900
Subject: [PATCH 57/99] =?UTF-8?q?RecordRepository=E3=81=AB=E8=87=AA?=
=?UTF-8?q?=E5=88=86=E3=81=AERecord=E3=82=92=E5=8F=96=E5=BE=97=E3=81=99?=
=?UTF-8?q?=E3=82=8BgetMyRecords=E3=81=A8RecordRepositoryDummy=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/data/repository/RecordRepository.kt | 2 +
.../data/repository/RecordRepositoryDummy.kt | 53 +++++++++++++++++++
2 files changed, 55 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt
index 3fb8b01..d3e122f 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt
@@ -37,4 +37,6 @@ interface RecordRepository {
* @return データベースへの送信委成功した時は実際のランキングが保存された[Record]
*/
fun createOrUpdateRecord(trial: Trial, record: Record): Flow>
+
+ fun getMyRecords(userId: String): Flow>>
}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt
new file mode 100644
index 0000000..e78f9bf
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt
@@ -0,0 +1,53 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository
+
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Record
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.*
+
+class RecordRepositoryDummy: RecordRepository {
+ private val testRecordList = mutableListOf(
+ Record.MarathonRecord(
+ "testUserId1", 140,2
+ ),
+ Record.MarathonRecord(
+ "testUserId2",150,3
+ ),
+ Record.MarathonRecord(
+ "testUserId3",110,1
+ ),
+ )
+
+ override fun getRecordByUserId(trial: Trial, userId: String): Flow> {
+ TODO("Not yet implemented")
+ }
+
+ override fun getRecords(
+ trial: Trial,
+ startRank: Int,
+ maxResult: Int
+ ): Flow>> {
+ TODO("Not yet implemented")
+ }
+
+ override fun createOrUpdateRecord(trial: Trial, record: Record): Flow> {
+ TODO("Not yet implemented")
+ }
+
+ override fun getMyRecords(userId: String): Flow>> =
+ flow>> {
+ delay(1000)
+ emit(Result.Success(testRecordList))
+ }.catch {
+ when(it) {
+ is Exception -> {
+ emit(Result.Error(true, it))
+ }
+ }
+ }.onStart {
+ emit(Result.Loading)
+ }.flowOn(Dispatchers.IO)
+}
+
From be394ca626314111c9b35a33687d02f94f69cde5 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 00:51:32 +0900
Subject: [PATCH 58/99] =?UTF-8?q?Record=E3=81=AE=E8=A9=B3=E7=B4=B0?=
=?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=81=B8=E9=81=B7=E7=A7=BB=E3=81=99=E3=82=8B?=
=?UTF-8?q?=E3=81=9F=E3=82=81=E3=81=AENavGraphFragment=E3=82=92=E4=BD=9C?=
=?UTF-8?q?=E6=88=90=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82=E3=81=9D?=
=?UTF-8?q?=E3=81=97=E3=81=A6=E3=80=81navigation=E3=83=AA=E3=82=BD?=
=?UTF-8?q?=E3=83=BC=E3=82=B9=E3=82=82=E4=BD=9C=E6=88=90=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/checkrecord/RecordNavGraphFragment.kt | 25 +++++++++++++++++++
.../res/layout/fragment_record_nav_graph.xml | 17 +++++++++++++
.../navigation/check_record_navigation.xml | 23 +++++++++++++++++
3 files changed, 65 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordNavGraphFragment.kt
create mode 100644 app/src/main/res/layout/fragment_record_nav_graph.xml
create mode 100644 app/src/main/res/navigation/check_record_navigation.xml
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordNavGraphFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordNavGraphFragment.kt
new file mode 100644
index 0000000..8b9571c
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordNavGraphFragment.kt
@@ -0,0 +1,25 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.navigation.fragment.NavHostFragment
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentCheckRecordListBinding
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentCreateTrialBinding
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentRecordNavGraphBinding
+
+class RecordNavGraphFragment : Fragment() {
+ private lateinit var binding: FragmentRecordNavGraphBinding
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ binding = FragmentRecordNavGraphBinding.inflate(layoutInflater)
+ val navHostFragment = childFragmentManager.findFragmentById(R.id.nav_host_check_record) as NavHostFragment
+ val navController = navHostFragment.navController
+ return binding.root
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_record_nav_graph.xml b/app/src/main/res/layout/fragment_record_nav_graph.xml
new file mode 100644
index 0000000..2c218d1
--- /dev/null
+++ b/app/src/main/res/layout/fragment_record_nav_graph.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/check_record_navigation.xml b/app/src/main/res/navigation/check_record_navigation.xml
new file mode 100644
index 0000000..b62c0d7
--- /dev/null
+++ b/app/src/main/res/navigation/check_record_navigation.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From d1a6a507cb0753d0ddc07183b306aaa4168b6ff6 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 00:52:23 +0900
Subject: [PATCH 59/99] =?UTF-8?q?Record=E3=81=AE=E8=A9=B3=E7=B4=B0?=
=?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=81=AEFragment=E3=82=92=E4=BD=9C=E6=88=90?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82=E5=AE=9F=E8=A3=85?=
=?UTF-8?q?=E3=81=AF=E3=81=97=E3=81=A6=E3=81=84=E3=81=BE=E3=81=9B=E3=82=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../record_detail/RecordDetailFragment.kt | 31 +++++++++++++++
.../res/layout/fragment_record_detail.xml | 39 +++++++++++++++++++
2 files changed, 70 insertions(+)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt
create mode 100644 app/src/main/res/layout/fragment_record_detail.xml
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt
new file mode 100644
index 0000000..7ef68ec
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt
@@ -0,0 +1,31 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.record_detail
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import com.google.android.gms.maps.OnMapReadyCallback
+import com.google.android.gms.maps.SupportMapFragment
+import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+
+class RecordDetailFragment : Fragment() {
+
+ private val callback = OnMapReadyCallback { googleMap ->
+
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(R.layout.fragment_record_detail, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
+ mapFragment?.getMapAsync(callback)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_record_detail.xml b/app/src/main/res/layout/fragment_record_detail.xml
new file mode 100644
index 0000000..ee518ac
--- /dev/null
+++ b/app/src/main/res/layout/fragment_record_detail.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From 223d839f0791b3920c78b585a9e5bcc9426760f3 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 20:49:17 +0900
Subject: [PATCH 60/99] =?UTF-8?q?HomeFragment=E3=81=A7=E7=8F=BE=E5=9C=A8?=
=?UTF-8?q?=E5=9C=B0=E3=81=AE=E8=A1=A8=E7=A4=BA=E3=81=8C=E5=87=BA=E6=9D=A5?=
=?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 3 ++
.../nitoc_ict/aroa/ui/home/HomeFragment.kt | 36 +++++++++++++++++++
2 files changed, 39 insertions(+)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4d6a9aa..424a52f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,9 @@
xmlns:tools="http://schemas.android.com/tools"
package="jp.ac.okinawa_ct.nitoc_ict.aroa">
+
+
+
(android.Manifest.permission.ACCESS_FINE_LOCATION),
+ REQUEST_LOCATION_PERMISSION
+ )
+ }
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int,
+ permissions: Array,
+ grantResults: IntArray) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ if (requestCode == REQUEST_LOCATION_PERMISSION) {
+ if (grantResults.contains(PackageManager.PERMISSION_GRANTED)) {
+ enableMyLocation()
+ }
+ }
+ }
+
}
\ No newline at end of file
From 1906594ce7350f0120d83a893506ff234b740008 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 20:52:20 +0900
Subject: [PATCH 61/99] =?UTF-8?q?themes.xml=E3=82=92brand=5Ftame=E3=82=92?=
=?UTF-8?q?=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/res/values/colors.xml | 3 ++-
app/src/main/res/values/themes.xml | 8 ++++----
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 47a6c64..bca5a95 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -7,5 +7,6 @@
#FF018786
#FF000000
#FFFFFFFF
- #FF3700B3
+ #F3821A
+ #F3821A
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 1b78abc..ab90385 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,16 +1,16 @@
-
+
\ No newline at end of file
From 337d7a882d79cd8b7932d79810ee9e0976778a49 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 20:58:07 +0900
Subject: [PATCH 62/99] =?UTF-8?q?Record.kt=E3=81=ABtrialId=E3=81=A8trialNa?=
=?UTF-8?q?me=E3=80=81recordId=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ac/okinawa_ct/nitoc_ict/aroa/data/dto/Record.kt | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/dto/Record.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/dto/Record.kt
index 6531394..5716bef 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/dto/Record.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/dto/Record.kt
@@ -1,5 +1,8 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto
+import android.gesture.GestureOverlayView
+import java.util.*
+
/**
* トライアルの記録を表現するクラス
*
@@ -8,7 +11,10 @@ package jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto
*/
sealed class Record {
abstract val userId: String
+ abstract val trialId: String
+ abstract val trialName: String
abstract val rank: Int
+ abstract val recordId: String
/**
* マラソンのトライアルの記録を表現するクラス
@@ -17,8 +23,11 @@ sealed class Record {
*/
data class MarathonRecord(
override val userId: String,
+ override val trialId: String,
+ override val trialName: String,
val time: Long,
override val rank: Int = -1,
+ override val recordId: String = UUID.randomUUID().toString(),
): Record()
/**
@@ -28,7 +37,10 @@ sealed class Record {
*/
data class DanglingRecord(
override val userId: String,
+ override val trialId: String,
+ override val trialName: String,
val time: Long,
override val rank: Int = -1,
+ override val recordId: String,
): Record()
}
From 73c0a0a1a089b45d18a27c1defb2dbd438c21329 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 20:59:34 +0900
Subject: [PATCH 63/99] =?UTF-8?q?RecordRepository.kt=E3=81=ABrecordId?=
=?UTF-8?q?=E3=81=8B=E3=82=89Record=E3=82=92=E5=8F=96=E5=BE=97=E3=81=99?=
=?UTF-8?q?=E3=82=8B=E9=96=A2=E6=95=B0getRecordByRecordId=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nitoc_ict/aroa/data/repository/RecordRepository.kt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt
index d3e122f..eaacc3b 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt
@@ -39,4 +39,6 @@ interface RecordRepository {
fun createOrUpdateRecord(trial: Trial, record: Record): Flow>
fun getMyRecords(userId: String): Flow>>
+
+ fun getRecordByRecordId(recordId: String): Flow>
}
\ No newline at end of file
From 8ac8f5f9afc6c0abe812dce800c383bb67c92344 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 21:00:37 +0900
Subject: [PATCH 64/99] =?UTF-8?q?RecordRepositoryDummy.kt=E3=81=AEtestData?=
=?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=97=E3=80=81getRecordByRecordI?=
=?UTF-8?q?d=E3=81=AE=E5=AE=9F=E8=A3=85=E3=82=92=E8=BF=BD=E5=8A=A0?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../data/repository/RecordRepositoryDummy.kt | 20 ++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt
index e78f9bf..7ce33cc 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt
@@ -10,13 +10,13 @@ import kotlinx.coroutines.flow.*
class RecordRepositoryDummy: RecordRepository {
private val testRecordList = mutableListOf(
Record.MarathonRecord(
- "testUserId1", 140,2
+ "testUserId1", "testTrialID_1","testTrialName_1",140,2,"testRecordId1"
),
Record.MarathonRecord(
- "testUserId2",150,3
+ "testUserId2","testTrialID_1","testTrialName_1",150,3,"testRecordId2"
),
Record.MarathonRecord(
- "testUserId3",110,1
+ "testUserId3","testTrialID_1","testTrialName_1",110,1,"testRecordId3"
),
)
@@ -49,5 +49,19 @@ class RecordRepositoryDummy: RecordRepository {
}.onStart {
emit(Result.Loading)
}.flowOn(Dispatchers.IO)
+
+ override fun getRecordByRecordId(recordId: String): Flow> =
+ flow> {
+ delay(1000)
+ emit(Result.Success(testRecordList[0]))
+ }.catch {
+ when(it) {
+ is Exception -> {
+ emit(Result.Error(true, it))
+ }
+ }
+ }.onStart {
+ emit(Result.Loading)
+ }.flowOn(Dispatchers.IO)
}
From 8f14c09ebbf417d48587f2373f71c4ba4935674e Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 21:09:09 +0900
Subject: [PATCH 65/99] =?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2?=
=?UTF-8?q?=E3=83=AB=E3=81=AE=E8=A9=B3=E7=B4=B0=E7=94=BB=E9=9D=A2=E3=81=A7?=
=?UTF-8?q?=E3=80=81=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=AB=E3=81=AE?=
=?UTF-8?q?=E8=B7=9D=E9=9B=A2=E3=81=8C=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C?=
=?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/detail/TrialDetailFragment.kt | 12 ++++++----
.../aroa/ui/detail/TrialDetailViewModel.kt | 24 +++++++++++--------
.../main/res/layout/fragment_trial_detail.xml | 8 ++++++-
3 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
index 8d00f44..48204bc 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
@@ -1,6 +1,7 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.detail
import android.os.Bundle
+import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -53,7 +54,7 @@ class TrialDetailFragment : Fragment() {
binding.startTrialButton.visibility = View.INVISIBLE
}else {
binding.startTrialButton.setOnClickListener {
-
+ //トライアルに参加
}
}
viewModel.setTrialId(args.trialId)
@@ -71,6 +72,8 @@ class TrialDetailFragment : Fragment() {
private fun observeLiveData() {
viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
updatePolyline(it, map)
+ viewModel.getDistance()
+ binding.detailTrialDistance.text = viewModel.trialDistance.value.toString() + "m"
})
viewModel.trialId.observe(viewLifecycleOwner, Observer {
@@ -80,9 +83,9 @@ class TrialDetailFragment : Fragment() {
viewModel.trial.observe(viewLifecycleOwner, Observer {
viewModel.assignmentTrialData()
map?.moveCamera(
- CameraUpdateFactory.newLatLngZoom(viewModel.trialPosition.value!!, ZOOM_SIZE))
- binding.detailTrialName.text = viewModel.trialName.value
- binding.detailTrialAuthorUserId.text = viewModel.trialId.value
+ CameraUpdateFactory.newLatLngZoom(viewModel.trial.value!!.position, ZOOM_SIZE))
+ binding.detailTrialName.text = viewModel.trial.value!!.name
+ binding.detailTrialAuthorUserId.text = viewModel.trial.value!!.authorUserId
binding.detailTrialPosition.text = viewModel.trialPosition.value.toString()
})
@@ -92,7 +95,6 @@ class TrialDetailFragment : Fragment() {
map?.addMarker(MarkerOptions().position(viewModel.origin.value!!).title("origin"))
map?.addMarker(MarkerOptions().position(viewModel.dest.value!!).title("dest"))
})
- viewModel
}
//Polylineを更新
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailViewModel.kt
index 08ab5eb..02b02b0 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailViewModel.kt
@@ -1,6 +1,7 @@
package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.detail
import android.app.Application
+import android.util.Log
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
@@ -36,18 +37,17 @@ class TrialDetailViewModel(application: Application) : AndroidViewModel(applicat
private val _trialId = MutableLiveData()
val trialId: LiveData get() = _trialId
- private val _trialName = MutableLiveData()
- val trialName: LiveData get() = _trialName
-
- private val _trialAuthorUserId = MutableLiveData()
- val trialAuthorUserId: LiveData get() = _trialAuthorUserId
-
private val _trialPosition = MutableLiveData()
val trialPosition: LiveData get() = _trialPosition
private val _trialCourse = MutableLiveData>()
val trialCourse: LiveData> get() = _trialCourse
+ private val _trialDistance = MutableLiveData().apply {
+ value = 0
+ }
+ val trialDistance: LiveData get() = _trialDistance
+
fun setTrialId(id: String) {
_trialId.value = id
}
@@ -70,8 +70,6 @@ class TrialDetailViewModel(application: Application) : AndroidViewModel(applicat
_trial.value?.let {
when(it) {
is Trial.Marathon -> {
- _trialName.value = it.name
- _trialAuthorUserId.value = it.authorUserId
_trialPosition.value = it.position
_trialCourse.value = it.course
}
@@ -80,6 +78,14 @@ class TrialDetailViewModel(application: Application) : AndroidViewModel(applicat
}
}
+ fun getDistance() {
+ for (route in _directionsResult.value!!.routes) {
+ for (leg in route.legs) {
+ _trialDistance.value = _trialDistance.value?.plus(leg.distance.inMeters)
+ }
+ }
+ }
+
fun courseTranslate() {
_trialCourse.value?.let { courselatLng ->
_origin.value = courselatLng.first()
@@ -115,6 +121,4 @@ class TrialDetailViewModel(application: Application) : AndroidViewModel(applicat
_directionsResult.value = result
}
}
-
-
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_trial_detail.xml b/app/src/main/res/layout/fragment_trial_detail.xml
index daafab1..21ddc29 100644
--- a/app/src/main/res/layout/fragment_trial_detail.xml
+++ b/app/src/main/res/layout/fragment_trial_detail.xml
@@ -38,12 +38,18 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="12dp"/>
+
From 178de06148e901bd00047bff0dda08d2ba3a56e7 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 21:10:50 +0900
Subject: [PATCH 66/99] =?UTF-8?q?=E3=83=AC=E3=82=B3=E3=83=BC=E3=83=89?=
=?UTF-8?q?=E3=81=AE=E8=A9=B3=E7=B4=B0=E7=94=BB=E9=9D=A2=E3=81=B8=E3=81=AE?=
=?UTF-8?q?=E5=BC=95=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82recordId=E3=81=A8trialId=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../checkrecord/record_list/CheckRecordListFragment.kt | 7 +++++--
app/src/main/res/navigation/check_record_navigation.xml | 9 ++++++++-
app/src/main/res/navigation/create_trial_navigation.xml | 2 +-
3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt
index 15425bc..5e42b72 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt
@@ -25,7 +25,7 @@ class CheckRecordListFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- val viewModel =
+ viewModel =
ViewModelProvider(this).get(CheckRecordListViewModel::class.java)
_binding = FragmentCheckRecordListBinding.inflate(inflater, container, false)
@@ -38,7 +38,10 @@ class CheckRecordListFragment : Fragment() {
adapter.setOnItemClickListener { view, position ->
val action = CheckRecordListFragmentDirections
- .actionCheckRecordListFragmentToRecordDetailFragment()
+ .actionCheckRecordListFragmentToRecordDetailFragment(
+ viewModel.testRecordList.value!!.get(position).recordId,
+ viewModel.testRecordList.value!!.get(position).trialId
+ )
this.findNavController().navigate(action)
}
diff --git a/app/src/main/res/navigation/check_record_navigation.xml b/app/src/main/res/navigation/check_record_navigation.xml
index b62c0d7..0316ce8 100644
--- a/app/src/main/res/navigation/check_record_navigation.xml
+++ b/app/src/main/res/navigation/check_record_navigation.xml
@@ -19,5 +19,12 @@
android:id="@+id/recordDetailFragment"
android:name="jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.record_detail.RecordDetailFragment"
android:label="fragment_check_record_detail"
- tools:layout="@layout/fragment_record_detail"/>
+ tools:layout="@layout/fragment_record_detail">
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/create_trial_navigation.xml b/app/src/main/res/navigation/create_trial_navigation.xml
index f313670..fa18a0f 100644
--- a/app/src/main/res/navigation/create_trial_navigation.xml
+++ b/app/src/main/res/navigation/create_trial_navigation.xml
@@ -64,7 +64,7 @@
+ android:label="トライアルの詳細" >
From 4d0fbbbf5f8f736c063770a73b9b41d4910bc4df Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 21:12:33 +0900
Subject: [PATCH 67/99] =?UTF-8?q?=E3=83=AC=E3=82=B3=E3=83=BC=E3=83=89?=
=?UTF-8?q?=E3=81=AE=E8=A9=B3=E7=B4=B0=E7=94=BB=E9=9D=A2=E3=82=92=E3=82=BF?=
=?UTF-8?q?=E3=82=A4=E3=83=A0=E3=80=81=E8=B7=9D=E9=9B=A2=E3=80=81=E3=82=B9?=
=?UTF-8?q?=E3=83=94=E3=83=BC=E3=83=89=E3=80=81=E3=82=B3=E3=83=BC=E3=82=B9?=
=?UTF-8?q?=E3=81=8C=E8=A1=A8=E7=A4=BA=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?=
=?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../record_detail/RecordDetailFragment.kt | 97 ++++++++++-
.../record_detail/RecordDetailViewModel.kt | 161 ++++++++++++++++++
.../res/layout/fragment_record_detail.xml | 9 +-
3 files changed, 262 insertions(+), 5 deletions(-)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailViewModel.kt
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt
index 7ef68ec..996be0c 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt
@@ -5,14 +5,37 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import com.google.android.gms.maps.CameraUpdateFactory
+import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.SupportMapFragment
+import com.google.android.gms.maps.model.MarkerOptions
+import com.google.android.gms.maps.model.Polyline
+import com.google.android.gms.maps.model.PolylineOptions
+import com.google.maps.android.PolyUtil
+import com.google.maps.model.DirectionsResult
import jp.ac.okinawa_ct.nitoc_ict.aroa.R
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentRecordDetailBinding
class RecordDetailFragment : Fragment() {
- private val callback = OnMapReadyCallback { googleMap ->
+ companion object {
+ private const val ZOOM_SIZE = 16f
+ private const val POLYLINE_WIDTH = 12f
+ }
+
+ private var _binding: FragmentRecordDetailBinding? = null
+ private val binding get() = _binding!!
+
+ private lateinit var viewModel: RecordDetailViewModel
+
+ private var map: GoogleMap? = null
+ private var polyline: Polyline? = null
+ private val callback = OnMapReadyCallback { googleMap ->
+ map = googleMap
}
override fun onCreateView(
@@ -20,12 +43,82 @@ class RecordDetailFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- return inflater.inflate(R.layout.fragment_record_detail, container, false)
+ _binding = FragmentRecordDetailBinding.inflate(layoutInflater)
+ viewModel = ViewModelProvider(this).get(RecordDetailViewModel::class.java)
+ val args = RecordDetailFragmentArgs.fromBundle(requireArguments())
+ viewModel.setTrialId(args.trialId)
+ viewModel.setRecordId(args.recordId)
+ return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(callback)
+ observeLiveData()
+ }
+
+ private fun observeLiveData() {
+ viewModel.recordId.observe(viewLifecycleOwner, Observer {
+ viewModel.getRecordById()
+ })
+
+ viewModel.record.observe(viewLifecycleOwner, Observer {
+ viewModel.assignmentRecordDate()
+ binding.recordTime.text = viewModel.recordTime.value.toString() + "秒"
+
+ })
+
+ viewModel.trialId.observe(viewLifecycleOwner, Observer {
+ viewModel.getTrialById()
+ })
+
+ viewModel.trial.observe(viewLifecycleOwner, Observer {
+ viewModel.assignmentTrialData()
+ map?.moveCamera(
+ CameraUpdateFactory.newLatLngZoom(viewModel.trialCourse.value!!.get(0), ZOOM_SIZE)
+ )
+ })
+
+ viewModel.trialCourse.observe(viewLifecycleOwner, Observer {
+ viewModel.courseTranslate()
+ viewModel.directionApiExecute()
+ map?.addMarker(MarkerOptions().position(viewModel.origin.value!!).title("origin"))
+ map?.addMarker(MarkerOptions().position(viewModel.dest.value!!).title("dest"))
+ })
+
+ viewModel.directionsResult.observe(viewLifecycleOwner, Observer{
+ updatePolyline(it, map)
+ viewModel.getDistance()
+ binding.recordDistance.text = viewModel.trialDistance.value.toString() + "m"
+ val speed = viewModel.trialDistance.value!! / viewModel.recordTime.value!! * 3.6
+ binding.recordSpeed.text = speed.toString() + "km/h"
+ })
+ }
+
+ //Polylineを更新
+ private fun updatePolyline(directionsResult: DirectionsResult?, googleMap: GoogleMap?) {
+ googleMap ?: return
+ directionsResult ?: return
+ removePolyline()
+ addPolyline(directionsResult, googleMap)
+ }
+
+ // 線を消す.
+ private fun removePolyline() {
+ if (map != null && polyline != null) {
+ polyline?.remove()
+ }
+ }
+
+ // 線を引く
+ private fun addPolyline(directionsResult: DirectionsResult, map: GoogleMap) {
+ val polylineOptions = PolylineOptions()
+ polylineOptions.width(POLYLINE_WIDTH)
+ // ARGB32bit形式.
+ polylineOptions.color(R.color.map_polyline_stroke)
+ val decodedPath =
+ PolyUtil.decode(directionsResult.routes[0].overviewPolyline.encodedPath)
+ polyline = map.addPolyline(polylineOptions.addAll(decodedPath))
}
}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailViewModel.kt
new file mode 100644
index 0000000..d8de810
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailViewModel.kt
@@ -0,0 +1,161 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.record_detail
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.google.android.gms.maps.model.LatLng
+import com.google.maps.model.DirectionsResult
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Record
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Trial
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.RecordRepositoryDummy
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.TrialRepositoryDummy
+import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.addtrial.DirectionsApiHelper
+import kotlinx.coroutines.launch
+
+class RecordDetailViewModel : ViewModel() {
+ private val trialRepositoryDummy = TrialRepositoryDummy()
+ private val recordRepositoryDummy = RecordRepositoryDummy()
+
+ private val _directionsResult = MutableLiveData()
+ val directionsResult: LiveData = _directionsResult
+
+ private val _origin = MutableLiveData()
+ val origin: LiveData get() = _origin
+
+ private val _dest = MutableLiveData()
+ val dest: LiveData get() = _dest
+
+ private val _waypoints = MutableLiveData>().apply {
+ value = ArrayList()
+ }
+ val waypoints: LiveData> get() = _waypoints
+
+ private val _recordId = MutableLiveData()
+ val recordId: LiveData get() = _recordId
+
+ private val _record = MutableLiveData()
+ val record: LiveData get() = _record
+
+ private val _recordTime = MutableLiveData()
+ val recordTime: LiveData get() = _recordTime
+
+ private val _trial = MutableLiveData()
+ val trial: LiveData get() = _trial
+
+ private val _trialId = MutableLiveData()
+ val trialId: LiveData get() = _trialId
+
+ private val _trialCourse = MutableLiveData>()
+ val trialCourse: LiveData> get() = _trialCourse
+
+ private val _trialDistance = MutableLiveData().apply {
+ value = 0
+ }
+ val trialDistance: LiveData get() = _trialDistance
+
+ fun setTrialId(id: String) {
+ _trialId.value = id
+ }
+
+ fun setRecordId(id: String) {
+ _recordId.value = id
+ }
+
+ fun getTrialById() {
+ viewModelScope.launch {
+ trialRepositoryDummy.getTrialById(_trialId.value!!).collect{
+ when(it) {
+ is Result.Loading -> "Loading"
+ is Result.Success -> {
+ _trial.value = it.data!!
+ }
+ is Result.Error -> "Error"
+ }
+ }
+ }
+ }
+
+ fun getRecordById() {
+ viewModelScope.launch {
+ recordRepositoryDummy.getRecordByRecordId(_recordId.value!!).collect{
+ when(it) {
+ is Result.Loading -> "Loading"
+ is Result.Success -> {
+ _record.value = it.data!!
+ }
+ is Result.Error -> "Error"
+ }
+ }
+ }
+ }
+
+ fun assignmentTrialData() {
+ _trial.value?.let {
+ when(it) {
+ is Trial.Marathon -> {
+ _trialCourse.value = it.course
+ }
+ else -> {}
+ }
+ }
+ }
+
+ fun assignmentRecordDate() {
+ _record.value?.let {
+ when(it) {
+ is Record.MarathonRecord -> {
+ _recordTime.value = it.time
+ }
+ else -> {}
+ }
+ }
+ }
+
+ fun getDistance() {
+ for (route in _directionsResult.value!!.routes) {
+ for (leg in route.legs) {
+ _trialDistance.value = _trialDistance.value?.plus(leg.distance.inMeters)
+ }
+ }
+ }
+
+ fun courseTranslate() {
+ _trialCourse.value?.let { courselatLng ->
+ _origin.value = courselatLng.first()
+ _dest.value = courselatLng.last()
+ for (latLng in courselatLng) {
+ when(latLng) {
+ courselatLng.first() -> continue
+ courselatLng.last() -> continue
+ else -> _waypoints.value?.add(latLng)
+ }
+ }
+ }
+ }
+
+ private fun latLngToString(): String {
+ val sb = StringBuilder()
+ if (_waypoints != null) {
+ for (waypoint in _waypoints.value!!) {
+ sb.append(waypoint.latitude.toString() + "," + waypoint.longitude.toString() + "|")
+ }
+ }
+ return sb.toString()
+ }
+
+ fun directionApiExecute() {
+ viewModelScope.launch {
+ val waypointsString = latLngToString()
+ val result = DirectionsApiHelper().execute(
+ com.google.maps.model.LatLng(_origin.value!!.latitude, _origin.value!!.longitude),
+ com.google.maps.model.LatLng(_dest.value!!.latitude, _dest.value!!.longitude),
+ waypointsString
+ )
+ _directionsResult.value = result
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_record_detail.xml b/app/src/main/res/layout/fragment_record_detail.xml
index ee518ac..33423bf 100644
--- a/app/src/main/res/layout/fragment_record_detail.xml
+++ b/app/src/main/res/layout/fragment_record_detail.xml
@@ -21,19 +21,22 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
+ android:textSize="48dp"/>
+ android:textSize="36dp"/>
+ android:textSize="36dp"/>
\ No newline at end of file
From 1d80f896c6dfe74c404742dde3044035f8c8ae98 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 22:39:15 +0900
Subject: [PATCH 68/99] =?UTF-8?q?RecordRepository=E3=81=AEgetRecords?=
=?UTF-8?q?=E3=82=92testData=E3=82=92=E5=8F=96=E5=BE=97=E3=81=A7=E3=81=8D?=
=?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=AE=9F=E8=A3=85=E3=81=97?=
=?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/data/repository/RecordRepository.kt | 2 +-
.../data/repository/RecordRepositoryDummy.kt | 18 ++++++++++++++----
.../record_list/CheckRecordListFragment.kt | 1 -
3 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt
index eaacc3b..6abce88 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepository.kt
@@ -26,7 +26,7 @@ interface RecordRepository {
* @param startRank 何位から取得するか. 1以上である必要がある。
* @param maxResult startRankで指定された順位から最大でいくつの[Record]を取得するか
*/
- fun getRecords(trial: Trial, startRank: Int, maxResult: Int): Flow>>
+ fun getRecords(trialId: String, startRank: Int, maxResult: Int): Flow>>
/**
* 指定された[Trial]のランキングに[Record]を追加する.すでに同じユーザーの記録がある場合は上書きする
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt
index 7ce33cc..10dce85 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/data/repository/RecordRepositoryDummy.kt
@@ -25,12 +25,22 @@ class RecordRepositoryDummy: RecordRepository {
}
override fun getRecords(
- trial: Trial,
+ trialId: String,
startRank: Int,
maxResult: Int
- ): Flow>> {
- TODO("Not yet implemented")
- }
+ ): Flow>> =
+ flow>> {
+ delay(1000)
+ emit(Result.Success(testRecordList))
+ }.catch {
+ when(it) {
+ is Exception -> {
+ emit(Result.Error(true, it))
+ }
+ }
+ }.onStart {
+ emit(Result.Loading)
+ }.flowOn(Dispatchers.IO)
override fun createOrUpdateRecord(trial: Trial, record: Record): Flow> {
TODO("Not yet implemented")
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt
index 5e42b72..e513cdd 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/CheckRecordListFragment.kt
@@ -9,7 +9,6 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentCheckRecordListBinding
-import jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.RecordListAdapter
class CheckRecordListFragment : Fragment() {
From 5b75f70bfce6363d38bec28cdd4aa1076412aae4 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 22:43:59 +0900
Subject: [PATCH 69/99] =?UTF-8?q?RecordDetailFragment=E3=81=ABRecordRankin?=
=?UTF-8?q?gFragment=E3=81=B8=E9=81=B7=E7=A7=BB=E3=81=99=E3=82=8B=E7=94=A8?=
=?UTF-8?q?=E3=81=AEButton=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE?=
=?UTF-8?q?=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../record_detail/RecordDetailFragment.kt | 7 +++++++
app/src/main/res/layout/fragment_record_detail.xml | 6 ++++++
.../main/res/navigation/check_record_navigation.xml | 13 +++++++++++++
3 files changed, 26 insertions(+)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt
index 996be0c..9c448f6 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_detail/RecordDetailFragment.kt
@@ -7,6 +7,7 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
@@ -48,6 +49,12 @@ class RecordDetailFragment : Fragment() {
val args = RecordDetailFragmentArgs.fromBundle(requireArguments())
viewModel.setTrialId(args.trialId)
viewModel.setRecordId(args.recordId)
+ binding.checkRankingButton.setOnClickListener {
+ val action = RecordDetailFragmentDirections.actionRecordDetailFragmentToRecordRankingFragment(
+ args.trialId
+ )
+ this.findNavController().navigate(action)
+ }
return binding.root
}
diff --git a/app/src/main/res/layout/fragment_record_detail.xml b/app/src/main/res/layout/fragment_record_detail.xml
index 33423bf..7f5e347 100644
--- a/app/src/main/res/layout/fragment_record_detail.xml
+++ b/app/src/main/res/layout/fragment_record_detail.xml
@@ -38,5 +38,11 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="36dp"/>
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/check_record_navigation.xml b/app/src/main/res/navigation/check_record_navigation.xml
index 0316ce8..2aa3d59 100644
--- a/app/src/main/res/navigation/check_record_navigation.xml
+++ b/app/src/main/res/navigation/check_record_navigation.xml
@@ -26,5 +26,18 @@
+
+
+
+
+
\ No newline at end of file
From 025e2ed619ee314f3fc7124be7c05899dc6ea7af Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 22:45:56 +0900
Subject: [PATCH 70/99] =?UTF-8?q?=E9=81=B8=E6=8A=9E=E3=81=97=E3=81=9F?=
=?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=AB=E3=81=AE=E3=83=A9?=
=?UTF-8?q?=E3=83=B3=E3=82=AD=E3=83=B3=E3=82=B0=E3=82=92=E8=A1=A8=E7=A4=BA?=
=?UTF-8?q?=E3=81=99=E3=82=8BRecordRankingFragment=E3=82=92=E4=BD=9C?=
=?UTF-8?q?=E6=88=90=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82RecordRep?=
=?UTF-8?q?ository=E3=81=AEgetRecords=E9=96=A2=E6=95=B0=E3=81=AB=E3=82=BD?=
=?UTF-8?q?=E3=83=BC=E3=83=88=E6=A9=9F=E8=83=BD=E3=82=92=E5=AE=9F=E8=A3=85?=
=?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=81=AE=E3=81=A7?=
=?UTF-8?q?=E3=80=81=E3=83=A9=E3=83=B3=E3=82=AD=E3=83=B3=E3=82=B0=E3=81=AF?=
=?UTF-8?q?=E3=83=90=E3=83=A9=E3=83=90=E3=83=A9=E3=81=A7=E3=81=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../{ => record_list}/RecordListAdapter.kt | 4 +-
.../record_ranking/RecordRankingFragment.kt | 42 ++++++++++++++
.../RecordRankingListAdapter.kt | 58 +++++++++++++++++++
.../record_ranking/RecordRankingViewModel.kt | 44 ++++++++++++++
.../res/layout/fragment_record_ranking.xml | 15 +++++
.../res/layout/list_item_record_ranking.xml | 39 +++++++++++++
6 files changed, 200 insertions(+), 2 deletions(-)
rename app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/{ => record_list}/RecordListAdapter.kt (93%)
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingFragment.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingListAdapter.kt
create mode 100644 app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingViewModel.kt
create mode 100644 app/src/main/res/layout/fragment_record_ranking.xml
create mode 100644 app/src/main/res/layout/list_item_record_ranking.xml
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordListAdapter.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/RecordListAdapter.kt
similarity index 93%
rename from app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordListAdapter.kt
rename to app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/RecordListAdapter.kt
index 093f3fe..4a68805 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/RecordListAdapter.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_list/RecordListAdapter.kt
@@ -1,4 +1,4 @@
-package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.record_list
import android.content.Context
import android.view.LayoutInflater
@@ -43,7 +43,7 @@ class RecordListAdapter(
override fun onBindViewHolder(bindingHolder: BindingHolder, position: Int) {
val current = getItem(position)
- bindingHolder.binding.recordTrialName.text = current.userId
+ bindingHolder.binding.recordTrialName.text = current.trialName
bindingHolder.binding.recordTrialName.setOnClickListener {
onItemClickListener?.invoke(it,position)
}
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingFragment.kt
new file mode 100644
index 0000000..32236c6
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingFragment.kt
@@ -0,0 +1,42 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.record_ranking
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.FragmentRecordRankingBinding
+
+class RecordRankingFragment : Fragment() {
+ private var _biding: FragmentRecordRankingBinding? = null
+ private val binding get() = _biding!!
+ private lateinit var viewModel: RecordRankingViewModel
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ _biding = FragmentRecordRankingBinding.inflate(layoutInflater)
+ viewModel = ViewModelProvider(this).get(RecordRankingViewModel::class.java)
+
+ val args = RecordRankingFragmentArgs.fromBundle(requireArguments())
+ viewModel.setTrialId(args.trialId)
+
+ viewModel.trialId.observe(viewLifecycleOwner, Observer {
+ viewModel.getRanking(it)
+ })
+
+ val adapter = RecordRankingListAdapter(requireContext())
+ binding.createdTrialList.adapter = adapter
+
+ viewModel.testRecordData.observe(viewLifecycleOwner, Observer {
+ adapter.submitList(it)
+ })
+
+
+ return binding.root
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingListAdapter.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingListAdapter.kt
new file mode 100644
index 0000000..04502bf
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingListAdapter.kt
@@ -0,0 +1,58 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.record_ranking
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Record
+import jp.ac.okinawa_ct.nitoc_ict.aroa.databinding.ListItemRecordRankingBinding
+
+typealias OnItemClickListener = (view: View, position: Int) -> Unit
+
+class RecordRankingListAdapter(
+ context: Context
+) : ListAdapter(ITEM_CALLBACK) {
+ private val inflater = LayoutInflater.from(context)
+
+ private var onItemClickListener: OnItemClickListener? = null
+
+ class BindingHolder(
+ val binding: ListItemRecordRankingBinding
+ ) : RecyclerView.ViewHolder(binding.root)
+ companion object {
+ val ITEM_CALLBACK = object : DiffUtil.ItemCallback() {
+ override fun areItemsTheSame(
+ oldItem: Record,
+ newItem: Record
+ ): Boolean = oldItem.userId == newItem.userId
+
+ override fun areContentsTheSame(
+ oldItem: Record,
+ newItem: Record
+ ): Boolean = oldItem == newItem
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindingHolder {
+ val binding = ListItemRecordRankingBinding.inflate(inflater, parent, false)
+ return BindingHolder(binding)
+ }
+
+ override fun onBindViewHolder(bindingHolder: BindingHolder, position: Int) {
+ val current = getItem(position)
+ when(current) {
+ is Record.MarathonRecord -> {
+ bindingHolder.binding.rankNum.text = current.rank.toString()
+ bindingHolder.binding.userName.text = current.userId
+ bindingHolder.binding.time.text = current.time.toString()}
+ else -> {}
+ }
+ }
+
+ fun setOnItemClickListener(onItemClickListener: OnItemClickListener) {
+ this.onItemClickListener = onItemClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingViewModel.kt
new file mode 100644
index 0000000..1eb4fc1
--- /dev/null
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingViewModel.kt
@@ -0,0 +1,44 @@
+package jp.ac.okinawa_ct.nitoc_ict.aroa.ui.checkrecord.record_ranking
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Record
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.dto.Result
+import jp.ac.okinawa_ct.nitoc_ict.aroa.data.repository.RecordRepositoryDummy
+import kotlinx.coroutines.launch
+
+class RecordRankingViewModel : ViewModel() {
+ private val recordRepositoryDummy = RecordRepositoryDummy()
+
+ private val _testRecordData = MutableLiveData>()
+ val testRecordData: LiveData> get() = _testRecordData
+
+ private val _trialId = MutableLiveData()
+ val trialId: LiveData get() = _trialId
+
+ fun setTrialId(id: String) {
+ _trialId.value = id
+ }
+
+ fun getRanking(trialId: String) {
+ viewModelScope.launch {
+ recordRepositoryDummy.getRecords(trialId,1,10).collect{
+ when(it) {
+ is Result.Loading -> {}
+ is Result.Success -> {
+ _testRecordData.value = it.data!!
+ }
+ is Result.Error -> {}
+ }
+ }
+ }
+ }
+
+ private fun sortRanking() {
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_record_ranking.xml b/app/src/main/res/layout/fragment_record_ranking.xml
new file mode 100644
index 0000000..eeab88f
--- /dev/null
+++ b/app/src/main/res/layout/fragment_record_ranking.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_item_record_ranking.xml b/app/src/main/res/layout/list_item_record_ranking.xml
new file mode 100644
index 0000000..7f678c8
--- /dev/null
+++ b/app/src/main/res/layout/list_item_record_ranking.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From 771b8ca7621c19fa7ae2375659b50d44f443b5df Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 22:50:08 +0900
Subject: [PATCH 71/99] =?UTF-8?q?RecordRankingViewModel.kt=E3=81=AEimport?=
=?UTF-8?q?=E3=82=92=E6=9C=80=E9=81=A9=E5=8C=96=E3=81=97=E3=81=BE=E3=81=97?=
=?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/checkrecord/record_ranking/RecordRankingViewModel.kt | 6 ------
1 file changed, 6 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingViewModel.kt
index 1eb4fc1..4d13c06 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/checkrecord/record_ranking/RecordRankingViewModel.kt
@@ -35,10 +35,4 @@ class RecordRankingViewModel : ViewModel() {
}
}
}
-
- private fun sortRanking() {
-
- }
-
-
}
\ No newline at end of file
From be6843fb2b7a89d56ae02f2420f5a067a2281d46 Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Thu, 6 Oct 2022 23:20:18 +0900
Subject: [PATCH 72/99] =?UTF-8?q?TrialDetailFragment=E3=81=8B=E3=82=89?=
=?UTF-8?q?=E3=82=82=E3=83=A9=E3=83=B3=E3=82=AD=E3=83=B3=E3=82=B0=E3=82=92?=
=?UTF-8?q?=E7=A2=BA=E8=AA=8D=E5=87=BA=E6=9D=A5=E3=82=8B=E3=82=88=E3=81=86?=
=?UTF-8?q?=E3=81=AB=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92=E4=BD=9C=E6=88=90?=
=?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/detail/TrialDetailFragment.kt | 6 ++++++
.../main/res/layout/fragment_record_detail.xml | 2 +-
app/src/main/res/layout/fragment_trial_detail.xml | 15 +++++++++++----
.../res/navigation/check_record_navigation.xml | 1 -
.../res/navigation/create_trial_navigation.xml | 12 ++++++++++++
.../main/res/navigation/home_trial_navigation.xml | 15 +++++++++++++++
6 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
index 48204bc..d60af5d 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/detail/TrialDetailFragment.kt
@@ -57,6 +57,12 @@ class TrialDetailFragment : Fragment() {
//トライアルに参加
}
}
+ binding.checkRankingButton.setOnClickListener {
+ val action = TrialDetailFragmentDirections.actionTrialDetailFragmentToRecordRankingFragment(
+ args.trialId
+ )
+ this.findNavController().navigate(action)
+ }
viewModel.setTrialId(args.trialId)
return binding.root
diff --git a/app/src/main/res/layout/fragment_record_detail.xml b/app/src/main/res/layout/fragment_record_detail.xml
index 7f5e347..69e04ab 100644
--- a/app/src/main/res/layout/fragment_record_detail.xml
+++ b/app/src/main/res/layout/fragment_record_detail.xml
@@ -8,7 +8,7 @@
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
- android:layout_height="200dp"
+ android:layout_height="350dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout/fragment_trial_detail.xml b/app/src/main/res/layout/fragment_trial_detail.xml
index 21ddc29..e7ddf90 100644
--- a/app/src/main/res/layout/fragment_trial_detail.xml
+++ b/app/src/main/res/layout/fragment_trial_detail.xml
@@ -8,7 +8,7 @@
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
- android:layout_height="400dp"
+ android:layout_height="325dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -31,19 +31,26 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:textSize="12dp"/>
+ android:textSize="24dp"/>
+ android:textSize="24dp"/>
+ android:textSize="24dp"/>
+
\ No newline at end of file
From 8f9bb56b2a14862534c85a5c057164cdb320370e Mon Sep 17 00:00:00 2001
From: scitheAX <80904538+scitheAX@users.noreply.github.com>
Date: Sun, 16 Oct 2022 08:29:47 +0900
Subject: [PATCH 99/99] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E3=81=99=E3=82=8B?=
=?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=AB=E3=81=AE=E6=97=A5?=
=?UTF-8?q?=E4=BB=98=E3=82=92=E4=BB=8A=E6=97=A52022=E5=B9=B410=E6=9C=8816?=
=?UTF-8?q?=E6=97=A5=E3=81=AB=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../aroa/ui/add_trial/waypoints/AddTrialMapsViewModel.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/add_trial/waypoints/AddTrialMapsViewModel.kt b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/add_trial/waypoints/AddTrialMapsViewModel.kt
index b133580..1e58c67 100644
--- a/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/add_trial/waypoints/AddTrialMapsViewModel.kt
+++ b/app/src/main/java/jp/ac/okinawa_ct/nitoc_ict/aroa/ui/add_trial/waypoints/AddTrialMapsViewModel.kt
@@ -122,7 +122,7 @@ class AddTrialMapsViewModel(application: Application) : AndroidViewModel(applica
"ひじかた",
_trialCourse.value!!.toList()[0],
_trialCourse.value!!.toList(),
- "2022年10月14日")
+ "2022年10月16日")
viewModelScope.launch {
trialRepositoryDummy.createTrial(trial).collect{
when(it) {