diff --git a/RandoTracker/.idea/misc.xml b/RandoTracker/.idea/misc.xml index 554909a0df80290735d4dc5d3e982402112440dd..612d57234d8693b5dacee52058e14394f3253d94 100644 --- a/RandoTracker/.idea/misc.xml +++ b/RandoTracker/.idea/misc.xml @@ -15,10 +15,10 @@ <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/add_marker_dialog.xml" value="0.36666666666666664" /> <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/fragment_map.xml" value="0.33" /> <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/fragment_rando.xml" value="0.36666666666666664" /> - <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/fragment_randon.xml" value="0.36666666666666664" /> + <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/fragment_randon.xml" value="0.25" /> <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/item_run.xml" value="0.31657608695652173" /> <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/main_fragment.xml" value="0.25" /> - <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/rando_activity.xml" value="0.34057971014492755" /> + <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/rando_activity.xml" value="0.1" /> <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/layout/save.xml" value="0.28541666666666665" /> <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/menu/menu.xml" value="0.5" /> <entry key="..\:/Users/benja/AndroidStudioProjects/RandoTracker/app/src/main/res/menu/menu_bottom_nav.xml" value="0.35260416666666666" /> diff --git a/RandoTracker/app/src/main/java/com/example/randotracker/Data.kt b/RandoTracker/app/src/main/java/com/example/randotracker/Data.kt index 6b6d109b29b44585931c7df476369e53bd17c75f..60f7cbe62f856d4d85d2e13bd198e1e597cc7c4b 100644 --- a/RandoTracker/app/src/main/java/com/example/randotracker/Data.kt +++ b/RandoTracker/app/src/main/java/com/example/randotracker/Data.kt @@ -1,10 +1,10 @@ package com.example.randotracker -class Data constructor(t: String, tim: Long, dist: Int) { +class Data constructor(t: String, tim: String, dist: String) { var title: String = t - var time: Long = tim - var distance: Int = dist + var time: String = tim + var distance: String = dist } \ No newline at end of file diff --git a/RandoTracker/app/src/main/java/com/example/randotracker/Randonne.kt b/RandoTracker/app/src/main/java/com/example/randotracker/Randonne.kt index 7381c94b41b0ceaabbf86fd299504c90bb4a0192..e5441a424747d7030627e0d5b6be14105ce5751f 100644 --- a/RandoTracker/app/src/main/java/com/example/randotracker/Randonne.kt +++ b/RandoTracker/app/src/main/java/com/example/randotracker/Randonne.kt @@ -1,17 +1,21 @@ package com.example.randotracker import android.Manifest +import android.content.ClipData import android.content.pm.PackageManager +import android.graphics.drawable.Drawable import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log +import android.view.Menu import androidx.annotation.RequiresApi import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.room.Room import com.example.randotracker.database.RandoRequest +import com.example.randotracker.databinding.ItemRunBinding import com.example.randotracker.fragments.MapFragment import com.example.randotracker.databinding.RandoActivityBinding import com.example.randotracker.fragments.Randon @@ -53,19 +57,11 @@ class Randonne : AppCompatActivity() { } true } - requestPermission(Manifest.permission.ACCESS_FINE_LOCATION) requestPermission(Manifest.permission.ACCESS_COARSE_LOCATION) requestPermission(Manifest.permission.ACCESS_BACKGROUND_LOCATION) - - - - - //ContextCompat.startForegroundService(this, Intent(this, NavigationService::class.java)) } - - private fun switchFragment(fragment : Fragment){ val transaction = supportFragmentManager.beginTransaction() diff --git a/RandoTracker/app/src/main/java/com/example/randotracker/adapter/RandoAdapter.kt b/RandoTracker/app/src/main/java/com/example/randotracker/adapter/RandoAdapter.kt index 6e447d4e935681444ecaf08c27059b2737f0f620..84a6d3345aab6676d9aa84adb4449cdef7afbb9d 100644 --- a/RandoTracker/app/src/main/java/com/example/randotracker/adapter/RandoAdapter.kt +++ b/RandoTracker/app/src/main/java/com/example/randotracker/adapter/RandoAdapter.kt @@ -13,9 +13,9 @@ import kotlin.collections.ArrayList class RandoAdapter(private var itemList: ArrayList<Data>) : RecyclerView.Adapter<RandoAdapter.RandoViewHolder>() { class RandoViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView){ - val title:MaterialTextView = itemView.findViewById<MaterialTextView>(R.id.tvTitle) - val distance:MaterialTextView = itemView.findViewById<MaterialTextView>(R.id.tvTime) - val time:MaterialTextView = itemView.findViewById<MaterialTextView>(R.id.tvDistance) + val title:MaterialTextView = itemView.findViewById(R.id.tvTitle) + val distance:MaterialTextView = itemView.findViewById(R.id.tvTime) + val time:MaterialTextView = itemView.findViewById(R.id.tvDistance) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RandoViewHolder { @@ -26,8 +26,8 @@ class RandoAdapter(private var itemList: ArrayList<Data>) : RecyclerView.Adapter override fun onBindViewHolder(holder: RandoViewHolder, position: Int) { val currentItem = itemList[position] holder.title.setText(currentItem.title) - holder.distance.setText(currentItem.distance.toString()) - holder.time.setText(currentItem.time.toString()) + holder.distance.setText(currentItem.distance) + holder.time.setText(currentItem.time) } fun submitItems(newItem: Data){ diff --git a/RandoTracker/app/src/main/java/com/example/randotracker/fragments/MapFragment.kt b/RandoTracker/app/src/main/java/com/example/randotracker/fragments/MapFragment.kt index 847ed2e800ff5ba2528955a0a4a5a9176678df80..5436e3406767847144395aa584703c9f75bb5cae 100644 --- a/RandoTracker/app/src/main/java/com/example/randotracker/fragments/MapFragment.kt +++ b/RandoTracker/app/src/main/java/com/example/randotracker/fragments/MapFragment.kt @@ -34,6 +34,7 @@ import com.example.randotracker.RandoViewModel import androidx.fragment.app.viewModels import androidx.room.InvalidationTracker import com.example.randotracker.dialog.saveDialog +import com.example.randotracker.service.NavigationService.Companion.isBegin import dagger.hilt.android.AndroidEntryPoint @@ -107,7 +108,7 @@ class MapFragment : Fragment() { requireActivity().findViewById<Button>(R.id.stop_button).setOnClickListener { requireActivity().findViewById<Button>(R.id.start_button).visibility = View.VISIBLE - requireActivity().findViewById<Button>(R.id.stop_button).visibility = View.INVISIBLE + requireActivity().findViewById<Button>(R.id.stop_button).visibility = View.INVISIBLE NavigationService.isTracking.postValue(false) NavigationService.isFirstRun = false sendCommandToService(ACTION_STOP_SERVICE) @@ -117,9 +118,9 @@ class MapFragment : Fragment() { saveDialog().show(childFragmentManager,"oui") if(isSaved){ - Db.insertRando(RandoTable(title,1,1, NavigationService.runNumber)) + //Db.insertRando(RandoTable(title,1,1, NavigationService.runNumber)) } - + isBegin = false NavigationService.latlong.removeObservers(viewLifecycleOwner) } diff --git a/RandoTracker/app/src/main/java/com/example/randotracker/fragments/Randon.kt b/RandoTracker/app/src/main/java/com/example/randotracker/fragments/Randon.kt index 2e359bd2ecbfb9409d3849c3356fa04aeff26221..fd6c4b2e77d4a800682d2afa2ed7888d2ee18161 100644 --- a/RandoTracker/app/src/main/java/com/example/randotracker/fragments/Randon.kt +++ b/RandoTracker/app/src/main/java/com/example/randotracker/fragments/Randon.kt @@ -1,6 +1,8 @@ package com.example.randotracker.fragments +import android.annotation.SuppressLint import android.os.Bundle +import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View @@ -13,12 +15,17 @@ import com.example.randotracker.R import com.example.randotracker.adapter.RandoAdapter import com.example.randotracker.database.RandoTable import com.example.randotracker.service.NavigationService +import com.example.randotracker.service.NavigationService.Companion.stop_time +import com.example.randotracker.service.NavigationService.Companion.start_time +import com.google.android.gms.maps.model.LatLng import dagger.hilt.android.AndroidEntryPoint +import com.example.randotracker.fragments.MapFragment.Companion.isSaved +import java.lang.Math.round -@AndroidEntryPoint class Randon : Fragment() { private lateinit var randoAdapter: RandoAdapter + private lateinit var recyclerView: RecyclerView //private val Db : RandoViewModel by viewModels() var itemList :ArrayList<Data> = arrayListOf() @@ -45,14 +52,41 @@ class Randon : Fragment() { return inflater.inflate(R.layout.fragment_randon, container, false) } + fun calcDist(loc1:LatLng,loc2:LatLng):Double{ + + return Math.sqrt(Math.pow(loc2.latitude-loc1.latitude,2.0) + Math.pow(loc2.longitude-loc1.longitude,2.0))*111139 + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + + recyclerView = requireActivity().findViewById(R.id.recyclerViewRandos) + recyclerView.layoutManager = LinearLayoutManager(requireContext()) + recyclerView.setHasFixedSize(true) + randoAdapter = RandoAdapter(itemList) + recyclerView.adapter = randoAdapter + + NavigationService.isTracking.observe(viewLifecycleOwner, Observer { - if(!it){ - Data("oui",NavigationService.stop_time -NavigationService.stop_time,0) + if(!it && isSaved){ + var time:Long = stop_time -start_time + var timeInSec:Long = time/1000 % 60 + var timeInMin:Long = timeInSec/60 % 60 + var timeInHour:Long = timeInMin/60 + + var dist:String = "" + + NavigationService.latlong.value?.let { it1 -> dist = round(calcDist(it1,NavigationService.start_loc)).toString() + "m"} + + + var timeString:String = timeInHour.toString() + "h " + timeInMin.toString() + "min " + timeInSec.toString() + "sec" + + itemList.add(Data(MapFragment.Companion.title,timeString,dist)) + randoAdapter.notifyItemChanged(itemList.size-1) + Log.d("INFO",(stop_time -stop_time).toString()) } }) - setupRecyclerView() + } } \ No newline at end of file diff --git a/RandoTracker/app/src/main/java/com/example/randotracker/service/NavigationService.kt b/RandoTracker/app/src/main/java/com/example/randotracker/service/NavigationService.kt index 3090ae6d70c1a5063003d4c3bfd6db7a3662c10a..67abd048bb80c03b9eaa1caa7b4f390ae60c5052 100644 --- a/RandoTracker/app/src/main/java/com/example/randotracker/service/NavigationService.kt +++ b/RandoTracker/app/src/main/java/com/example/randotracker/service/NavigationService.kt @@ -41,14 +41,15 @@ class NavigationService : LifecycleService() { lateinit var fusedLocationProviderClient: FusedLocationProviderClient - var isBegin = false + companion object{ + var isBegin = false var isFirstRun = true var runNumber = 0 var start_time:Long = 0L var stop_time:Long = 0L - var dist:Int = 0 + var start_loc:LatLng = LatLng(0.0,0.0) var latlong = MutableLiveData<LatLng>() val isTracking = MutableLiveData<Boolean>() val pathPoints = MutableLiveData<Polylines>() @@ -95,6 +96,12 @@ class NavigationService : LifecycleService() { pathPoints.postValue(mutableListOf()) } + + fun calcDist(loc1:LatLng,loc2:LatLng):Double{ + + return Math.sqrt(Math.pow(loc2.latitude-loc1.latitude,2.0) + Math.pow(loc2.longitude-loc1.longitude,2.0))*111139 + } + @SuppressLint("MissingPermission") private fun updateLocationTracking(isTracking: Boolean){ if(isTracking){ @@ -116,12 +123,16 @@ class NavigationService : LifecycleService() { result?.locations?.let{locations -> for(location in locations){ addPathPoint(location) - latlong.postValue(LatLng(location.latitude,location.longitude)) + + if(!isBegin){ isBegin = true + start_loc = LatLng(location.latitude,location.longitude) start_time = location.time } stop_time = location.time + latlong.postValue(LatLng(location.latitude,location.longitude)) + } } } diff --git a/RandoTracker/app/src/main/res/layout/fragment_map.xml b/RandoTracker/app/src/main/res/layout/fragment_map.xml index 272fbaacfb1a38eaf1cc8e6e4ff375a79f97cf01..0224be203d57e1d78349aa0cd046b65899ca619c 100644 --- a/RandoTracker/app/src/main/res/layout/fragment_map.xml +++ b/RandoTracker/app/src/main/res/layout/fragment_map.xml @@ -6,18 +6,6 @@ android:layout_height="match_parent" tools:context=".fragments.MapFragment"> - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="MAP" - android:textSize="36sp" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintRight_toRightOf="parent" - - /> - <fragment android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/map_frag" diff --git a/RandoTracker/app/src/main/res/layout/fragment_randon.xml b/RandoTracker/app/src/main/res/layout/fragment_randon.xml index 169d1b40a18471523276ea35df9a72cf8c19912c..ca873f7b43102979d43374b0563fa40ac42468b1 100644 --- a/RandoTracker/app/src/main/res/layout/fragment_randon.xml +++ b/RandoTracker/app/src/main/res/layout/fragment_randon.xml @@ -4,16 +4,15 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".fragments.MapFragment"> - + tools:context=".fragments.Randon"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerViewRandos" - android:layout_width="415dp" - android:layout_height="733dp" + android:layout_width="300dp" + android:layout_height="659dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.5" - app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintStart_toStartOf="parent" + tools:listitem="@layout/item_run" /> </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/RandoTracker/app/src/main/res/layout/item_run.xml b/RandoTracker/app/src/main/res/layout/item_run.xml index 3cff308a595bb562fc80501f764e8c417c84096f..f49d41637e7ac757478ec656bf17944be27db25a 100644 --- a/RandoTracker/app/src/main/res/layout/item_run.xml +++ b/RandoTracker/app/src/main/res/layout/item_run.xml @@ -4,35 +4,42 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:padding="8dp"> + android:backgroundTint="#F40A0A" + android:clickable="true" + android:padding="8dp" + app:circularflow_defaultRadius="20px"> <com.google.android.material.textview.MaterialTextView android:id="@+id/tvTitle" - android:layout_width="wrap_content" + android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TITLE" - - tools:ignore="MissingConstraints" - tools:layout_editor_absoluteX="247dp" - tools:layout_editor_absoluteY="16dp" /> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> <com.google.android.material.textview.MaterialTextView android:id="@+id/tvTime" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="TIME" - tools:ignore="MissingConstraints" - tools:layout_editor_absoluteX="174dp" - tools:layout_editor_absoluteY="16dp" /> + android:layout_marginTop="16dp" + android:text="DATE" + app:layout_constraintEnd_toStartOf="@+id/tvDistance" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tvTitle" /> <com.google.android.material.textview.MaterialTextView android:id="@+id/tvDistance" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="DISTANCE" + android:layout_marginTop="16dp" + android:text="TIME" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toEndOf="@+id/tvTime" + app:layout_constraintTop_toBottomOf="@+id/tvTitle" /> - tools:ignore="MissingConstraints" - tools:layout_editor_absoluteX="71dp" - tools:layout_editor_absoluteY="16dp" /> </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/RandoTracker/app/src/main/res/layout/main_fragment.xml b/RandoTracker/app/src/main/res/layout/main_fragment.xml deleted file mode 100644 index cf087357980f8c79203cc95baa156ae2fe98a068..0000000000000000000000000000000000000000 --- a/RandoTracker/app/src/main/res/layout/main_fragment.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/rando" - android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context=".ui.main.RandoFragment"> - - - - -</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/RandoTracker/app/src/main/res/layout/rando_activity.xml b/RandoTracker/app/src/main/res/layout/rando_activity.xml index beb367f67e56aea7b9f23c534e0ca11e4057503c..ae9837ef097528ad68f3aeb81ca8469a622e47c1 100644 --- a/RandoTracker/app/src/main/res/layout/rando_activity.xml +++ b/RandoTracker/app/src/main/res/layout/rando_activity.xml @@ -19,7 +19,6 @@ app:itemIconTint="#fff" app:itemTextColor="#fff"/> - </androidx.constraintlayout.widget.ConstraintLayout>