checkpoint
This commit is contained in:
parent
e96bfac4a9
commit
c434d3b840
31 changed files with 189 additions and 159 deletions
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.y20k.trackbook">
|
package="net.voussoir.trkpt">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,11 +19,10 @@
|
||||||
<!-- DANGEROUS PERMISSIONS, must request -->
|
<!-- DANGEROUS PERMISSIONS, must request -->
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
|
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<application
|
<application
|
||||||
android:name="org.y20k.trackbook.Trackbook"
|
android:name="net.voussoir.trkpt.Trackbook"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
@ -33,7 +32,7 @@
|
||||||
|
|
||||||
<!-- MAIN ACTIVITY -->
|
<!-- MAIN ACTIVITY -->
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name="net.voussoir.trkpt.MainActivity"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
@ -43,19 +42,19 @@
|
||||||
|
|
||||||
<!-- TRACKER SERVICE -->
|
<!-- TRACKER SERVICE -->
|
||||||
<service
|
<service
|
||||||
android:name=".TrackerService"
|
android:name="net.voussoir.trkpt.TrackerService"
|
||||||
android:foregroundServiceType="location"
|
android:foregroundServiceType="location"
|
||||||
android:exported="false">
|
android:exported="false">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.y20k.trackbook.action.START" />
|
<action android:name="net.voussoir.trkpt.action.START" />
|
||||||
<action android:name="org.y20k.trackbook.action.STOP" />
|
<action android:name="net.voussoir.trkpt.action.STOP" />
|
||||||
<action android:name="org.y20k.trackbook.action.DISMISS" />
|
<action android:name="net.voussoir.trkpt.action.DISMISS" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<!-- TRACKING TOGGLE SERVICE SYSTEM QUICK SETTINGS -->
|
<!-- TRACKING TOGGLE SERVICE SYSTEM QUICK SETTINGS -->
|
||||||
<service
|
<service
|
||||||
android:name=".TrackingToggleTileService"
|
android:name="net.voussoir.trkpt.TrackingToggleTileService"
|
||||||
android:label="@string/quick_settings_tile_title_default"
|
android:label="@string/quick_settings_tile_title_default"
|
||||||
android:icon="@drawable/ic_notification_icon_small_24dp"
|
android:icon="@drawable/ic_notification_icon_small_24dp"
|
||||||
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
|
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
package org.y20k.trackbook
|
package net.voussoir.trkpt
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
import android.database.sqlite.SQLiteDatabase.openOrCreateDatabase
|
import android.database.sqlite.SQLiteDatabase.openOrCreateDatabase
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class Database(val trackbook: Trackbook)
|
class Database(val trackbook: net.voussoir.trkpt.Trackbook)
|
||||||
{
|
{
|
||||||
var ready: Boolean = false
|
var ready: Boolean = false
|
||||||
lateinit var file: File
|
lateinit var file: File
|
||||||
|
@ -61,7 +60,7 @@ class Database(val trackbook: Trackbook)
|
||||||
commit()
|
commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun insert_trkpt(trkpt: Trkpt)
|
fun insert_trkpt(trkpt: net.voussoir.trkpt.Trkpt)
|
||||||
{
|
{
|
||||||
Log.i("VOUSSOIR", "Database.insert_trkpt")
|
Log.i("VOUSSOIR", "Database.insert_trkpt")
|
||||||
val values = ContentValues().apply {
|
val values = ContentValues().apply {
|
||||||
|
@ -124,7 +123,7 @@ class Database(val trackbook: Trackbook)
|
||||||
cursor = this.connection.rawQuery("PRAGMA journal_mode = DELETE", null)
|
cursor = this.connection.rawQuery("PRAGMA journal_mode = DELETE", null)
|
||||||
cursor.moveToNext()
|
cursor.moveToNext()
|
||||||
cursor.close()
|
cursor.close()
|
||||||
cursor = this.connection.rawQuery("PRAGMA user_version = ${Keys.DATABASE_VERSION}", null)
|
cursor = this.connection.rawQuery("PRAGMA user_version = ${net.voussoir.trkpt.Keys.DATABASE_VERSION}", null)
|
||||||
cursor.moveToNext()
|
cursor.moveToNext()
|
||||||
cursor.close()
|
cursor.close()
|
||||||
// Not using this.commit because this.ready is not true yet.
|
// Not using this.commit because this.ready is not true yet.
|
|
@ -1,4 +1,4 @@
|
||||||
package org.y20k.trackbook
|
package net.voussoir.trkpt
|
||||||
import android.location.Location
|
import android.location.Location
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
|
@ -14,9 +14,8 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import android.graphics.Color
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -32,8 +31,8 @@ object Keys {
|
||||||
const val DATABASE_VERSION: Int = 1
|
const val DATABASE_VERSION: Int = 1
|
||||||
|
|
||||||
// intent actions
|
// intent actions
|
||||||
const val ACTION_START: String = "org.y20k.trackbook.action.START"
|
const val ACTION_START: String = "net.voussoir.trkpt.action.START"
|
||||||
const val ACTION_STOP: String = "org.y20k.trackbook.action.STOP"
|
const val ACTION_STOP: String = "net.voussoir.trkpt.action.STOP"
|
||||||
|
|
||||||
// args
|
// args
|
||||||
const val ARG_TRACK_TITLE: String = "ArgTrackTitle"
|
const val ARG_TRACK_TITLE: String = "ArgTrackTitle"
|
||||||
|
@ -112,5 +111,4 @@ object Keys {
|
||||||
const val NOTIFICATION_CHANNEL_RECORDING: String = "notificationChannelIdRecordingChannel"
|
const val NOTIFICATION_CHANNEL_RECORDING: String = "notificationChannelIdRecordingChannel"
|
||||||
|
|
||||||
const val POLYLINE_THICKNESS = 4F
|
const val POLYLINE_THICKNESS = 4F
|
||||||
val POLYLINE_COLOR = Color.argb(255, 255, 0, 255)
|
|
||||||
}
|
}
|
|
@ -14,20 +14,20 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
/*
|
||||||
|
* Modified by voussoir for trkpt, forked from Trackbook.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.PowerManager
|
|
||||||
import android.os.StrictMode
|
import android.os.StrictMode
|
||||||
import android.os.StrictMode.VmPolicy
|
import android.os.StrictMode.VmPolicy
|
||||||
import android.provider.Settings
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
@ -35,8 +35,8 @@ import androidx.navigation.fragment.NavHostFragment
|
||||||
import androidx.navigation.ui.setupWithNavController
|
import androidx.navigation.ui.setupWithNavController
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
import org.osmdroid.config.Configuration
|
import org.osmdroid.config.Configuration
|
||||||
import org.y20k.trackbook.helpers.AppThemeHelper
|
import net.voussoir.trkpt.helpers.AppThemeHelper
|
||||||
import org.y20k.trackbook.helpers.PreferencesHelper
|
import net.voussoir.trkpt.helpers.PreferencesHelper
|
||||||
|
|
||||||
class MainActivity: AppCompatActivity()
|
class MainActivity: AppCompatActivity()
|
||||||
{
|
{
|
||||||
|
@ -51,7 +51,7 @@ class MainActivity: AppCompatActivity()
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
request_permissions(this)
|
request_permissions(this)
|
||||||
// todo: remove after testing finished
|
// todo: remove after testing finished
|
||||||
if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
|
if (net.voussoir.trkpt.BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
|
||||||
{
|
{
|
||||||
StrictMode.setVmPolicy(
|
StrictMode.setVmPolicy(
|
||||||
VmPolicy.Builder()
|
VmPolicy.Builder()
|
||||||
|
@ -62,7 +62,7 @@ class MainActivity: AppCompatActivity()
|
||||||
}
|
}
|
||||||
|
|
||||||
// set user agent to prevent getting banned from the osm servers
|
// set user agent to prevent getting banned from the osm servers
|
||||||
Configuration.getInstance().userAgentValue = BuildConfig.APPLICATION_ID
|
Configuration.getInstance().userAgentValue = net.voussoir.trkpt.BuildConfig.APPLICATION_ID
|
||||||
// set the path for osmdroid's files (e.g. tile cache)
|
// set the path for osmdroid's files (e.g. tile cache)
|
||||||
Configuration.getInstance().osmdroidBasePath = this.getExternalFilesDir(null)
|
Configuration.getInstance().osmdroidBasePath = this.getExternalFilesDir(null)
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
|
@ -53,7 +53,8 @@ import org.osmdroid.views.overlay.Polyline
|
||||||
import org.osmdroid.views.overlay.TilesOverlay
|
import org.osmdroid.views.overlay.TilesOverlay
|
||||||
import org.osmdroid.views.overlay.compass.CompassOverlay
|
import org.osmdroid.views.overlay.compass.CompassOverlay
|
||||||
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider
|
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider
|
||||||
import org.y20k.trackbook.helpers.*
|
import net.voussoir.trkpt.helpers.*
|
||||||
|
import net.voussoir.trkpt.R
|
||||||
|
|
||||||
class MapFragment : Fragment()
|
class MapFragment : Fragment()
|
||||||
{
|
{
|
||||||
|
@ -219,7 +220,7 @@ class MapFragment : Fragment()
|
||||||
{
|
{
|
||||||
startTracking()
|
startTracking()
|
||||||
}
|
}
|
||||||
handler.post(location_update_redraw)
|
handler.postDelayed(location_update_redraw, 0)
|
||||||
}
|
}
|
||||||
currentLocationButton.setOnClickListener {
|
currentLocationButton.setOnClickListener {
|
||||||
centerMap(currentBestLocation, animated=true)
|
centerMap(currentBestLocation, animated=true)
|
||||||
|
@ -452,7 +453,7 @@ class MapFragment : Fragment()
|
||||||
clear_track_overlay()
|
clear_track_overlay()
|
||||||
val pl = Polyline(mapView)
|
val pl = Polyline(mapView)
|
||||||
pl.outlinePaint.strokeWidth = Keys.POLYLINE_THICKNESS
|
pl.outlinePaint.strokeWidth = Keys.POLYLINE_THICKNESS
|
||||||
pl.outlinePaint.color = Keys.POLYLINE_COLOR
|
pl.outlinePaint.color = requireContext().getColor(R.color.fuchsia)
|
||||||
mapView.overlays.add(pl)
|
mapView.overlays.add(pl)
|
||||||
current_track_overlay = pl
|
current_track_overlay = pl
|
||||||
}
|
}
|
||||||
|
@ -601,6 +602,7 @@ class MapFragment : Fragment()
|
||||||
// get state of tracking and update button if necessary
|
// get state of tracking and update button if necessary
|
||||||
trackingState = trackerService.trackingState
|
trackingState = trackerService.trackingState
|
||||||
update_main_button()
|
update_main_button()
|
||||||
|
handler.postDelayed(location_update_redraw, 0)
|
||||||
// register listener for changes in shared preferences
|
// register listener for changes in shared preferences
|
||||||
PreferencesHelper.registerPreferenceChangeListener(sharedPreferenceChangeListener)
|
PreferencesHelper.registerPreferenceChangeListener(sharedPreferenceChangeListener)
|
||||||
// start listening for location updates
|
// start listening for location updates
|
|
@ -14,7 +14,11 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
/*
|
||||||
|
* Modified by voussoir for trkpt, forked from Trackbook.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import YesNoDialog
|
import YesNoDialog
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
@ -40,10 +44,10 @@ import androidx.preference.PreferenceFragmentCompat
|
||||||
import androidx.preference.SwitchPreferenceCompat
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
import androidx.preference.contains
|
import androidx.preference.contains
|
||||||
import get_path_from_uri
|
import get_path_from_uri
|
||||||
import org.y20k.trackbook.helpers.AppThemeHelper
|
import net.voussoir.trkpt.helpers.AppThemeHelper
|
||||||
import org.y20k.trackbook.helpers.LengthUnitHelper
|
import net.voussoir.trkpt.helpers.LengthUnitHelper
|
||||||
import org.y20k.trackbook.helpers.PreferencesHelper
|
import net.voussoir.trkpt.helpers.PreferencesHelper
|
||||||
import org.y20k.trackbook.helpers.random_device_id
|
import net.voussoir.trkpt.helpers.random_device_id
|
||||||
|
|
||||||
class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogListener
|
class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogListener
|
||||||
{
|
{
|
|
@ -14,22 +14,25 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
/*
|
||||||
|
* Modified by voussoir for trkpt, forked from Trackbook.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.database.DatabaseUtils.dumpCursorToString
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import org.y20k.trackbook.helpers.iso8601
|
import net.voussoir.trkpt.helpers.iso8601
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
data class Track (
|
data class Track (
|
||||||
val database: Database,
|
val database: net.voussoir.trkpt.Database,
|
||||||
val device_id: String,
|
val device_id: String,
|
||||||
var start_time: Date,
|
var start_time: Date,
|
||||||
var end_time: Date,
|
var end_time: Date,
|
|
@ -14,7 +14,11 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
/*
|
||||||
|
* Modified by voussoir for trkpt, forked from Trackbook.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import YesNoDialog
|
import YesNoDialog
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
@ -54,14 +58,14 @@ import org.osmdroid.views.overlay.TilesOverlay
|
||||||
import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlay
|
import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlay
|
||||||
import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlayOptions
|
import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlayOptions
|
||||||
import org.osmdroid.views.overlay.simplefastpoint.SimplePointTheme
|
import org.osmdroid.views.overlay.simplefastpoint.SimplePointTheme
|
||||||
import org.y20k.trackbook.helpers.AppThemeHelper
|
import net.voussoir.trkpt.helpers.AppThemeHelper
|
||||||
import org.y20k.trackbook.helpers.DateTimeHelper
|
import net.voussoir.trkpt.helpers.DateTimeHelper
|
||||||
import org.y20k.trackbook.helpers.LengthUnitHelper
|
import net.voussoir.trkpt.helpers.LengthUnitHelper
|
||||||
import org.y20k.trackbook.helpers.PreferencesHelper
|
import net.voussoir.trkpt.helpers.PreferencesHelper
|
||||||
import org.y20k.trackbook.helpers.UiHelper
|
import net.voussoir.trkpt.helpers.UiHelper
|
||||||
import org.y20k.trackbook.helpers.create_start_end_markers
|
import net.voussoir.trkpt.helpers.create_start_end_markers
|
||||||
import org.y20k.trackbook.helpers.iso8601
|
import net.voussoir.trkpt.helpers.iso8601
|
||||||
import org.y20k.trackbook.helpers.iso8601_parse
|
import net.voussoir.trkpt.helpers.iso8601_parse
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -114,7 +118,7 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View
|
||||||
{
|
{
|
||||||
this.trackbook = (requireContext().applicationContext as Trackbook)
|
this.trackbook = (requireContext().applicationContext as Trackbook)
|
||||||
val database: Database = (requireActivity().applicationContext as Trackbook).database
|
val database: net.voussoir.trkpt.Database = (requireActivity().applicationContext as Trackbook).database
|
||||||
track = Track(
|
track = Track(
|
||||||
database=database,
|
database=database,
|
||||||
name=this.requireArguments().getString(Keys.ARG_TRACK_TITLE, ""),
|
name=this.requireArguments().getString(Keys.ARG_TRACK_TITLE, ""),
|
||||||
|
@ -337,7 +341,7 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
|
||||||
val pointTheme = SimplePointTheme(track_geopoints, false)
|
val pointTheme = SimplePointTheme(track_geopoints, false)
|
||||||
val style = Paint()
|
val style = Paint()
|
||||||
style.style = Paint.Style.FILL
|
style.style = Paint.Style.FILL
|
||||||
style.color = Keys.POLYLINE_COLOR
|
style.color = requireContext().getColor(R.color.fuchsia)
|
||||||
style.flags = Paint.ANTI_ALIAS_FLAG
|
style.flags = Paint.ANTI_ALIAS_FLAG
|
||||||
val overlayOptions: SimpleFastPointOverlayOptions = SimpleFastPointOverlayOptions.getDefaultStyle()
|
val overlayOptions: SimpleFastPointOverlayOptions = SimpleFastPointOverlayOptions.getDefaultStyle()
|
||||||
.setAlgorithm(SimpleFastPointOverlayOptions.RenderingAlgorithm.MEDIUM_OPTIMIZATION)
|
.setAlgorithm(SimpleFastPointOverlayOptions.RenderingAlgorithm.MEDIUM_OPTIMIZATION)
|
||||||
|
@ -369,7 +373,7 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
|
||||||
{
|
{
|
||||||
var pl = Polyline(mapView)
|
var pl = Polyline(mapView)
|
||||||
pl.outlinePaint.strokeWidth = Keys.POLYLINE_THICKNESS
|
pl.outlinePaint.strokeWidth = Keys.POLYLINE_THICKNESS
|
||||||
pl.outlinePaint.color = Keys.POLYLINE_COLOR
|
pl.outlinePaint.color = requireContext().getColor(R.color.fuchsia)
|
||||||
pl.infoWindow = null
|
pl.infoWindow = null
|
||||||
track_segment_overlays.add(pl)
|
track_segment_overlays.add(pl)
|
||||||
mapView.overlays.add(pl)
|
mapView.overlays.add(pl)
|
|
@ -14,7 +14,11 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
/*
|
||||||
|
* Modified by voussoir for trkpt, forked from Trackbook.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
@ -22,9 +26,9 @@ import android.content.pm.PackageManager
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.google.android.material.color.DynamicColors
|
import com.google.android.material.color.DynamicColors
|
||||||
import org.y20k.trackbook.helpers.AppThemeHelper
|
import net.voussoir.trkpt.helpers.AppThemeHelper
|
||||||
import org.y20k.trackbook.helpers.PreferencesHelper
|
import net.voussoir.trkpt.helpers.PreferencesHelper
|
||||||
import org.y20k.trackbook.helpers.PreferencesHelper.initPreferences
|
import net.voussoir.trkpt.helpers.PreferencesHelper.initPreferences
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,7 +39,7 @@ interface DatabaseChangedListener
|
||||||
|
|
||||||
class Trackbook : Application()
|
class Trackbook : Application()
|
||||||
{
|
{
|
||||||
val database: Database = Database(this)
|
val database: net.voussoir.trkpt.Database = net.voussoir.trkpt.Database(this)
|
||||||
val homepoints: ArrayList<Homepoint> = ArrayList()
|
val homepoints: ArrayList<Homepoint> = ArrayList()
|
||||||
val database_changed_listeners = ArrayList<DatabaseChangedListener>()
|
val database_changed_listeners = ArrayList<DatabaseChangedListener>()
|
||||||
|
|
|
@ -14,7 +14,11 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
/*
|
||||||
|
* Modified by voussoir for trkpt, forked from Trackbook.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import android.app.Notification
|
import android.app.Notification
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
|
@ -32,52 +36,56 @@ import android.util.Log
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import org.osmdroid.util.GeoPoint
|
import org.osmdroid.util.GeoPoint
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import org.y20k.trackbook.helpers.*
|
import net.voussoir.trkpt.helpers.*
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TrackerService class
|
* TrackerService class
|
||||||
*/
|
*/
|
||||||
class TrackerService: Service()
|
class TrackerService: Service()
|
||||||
{
|
{
|
||||||
/* Main class variables */
|
lateinit var trackbook: Trackbook
|
||||||
|
|
||||||
var trackingState: Int = Keys.STATE_TRACKING_STOPPED
|
var trackingState: Int = Keys.STATE_TRACKING_STOPPED
|
||||||
var gpsProviderActive: Boolean = false
|
|
||||||
var networkProviderActive: Boolean = false
|
|
||||||
var useImperial: Boolean = false
|
var useImperial: Boolean = false
|
||||||
var use_gps_location: Boolean = false
|
|
||||||
var use_network_location: Boolean = false
|
|
||||||
var omitRests: Boolean = true
|
var omitRests: Boolean = true
|
||||||
var device_id: String = random_device_id()
|
var device_id: String = random_device_id()
|
||||||
var currentBestLocation: Location = getDefaultLocation()
|
var currentBestLocation: Location = getDefaultLocation()
|
||||||
|
var last_location_time: Long = 0
|
||||||
var lastCommit: Long = 0
|
var lastCommit: Long = 0
|
||||||
var location_min_time_ms: Long = 0
|
var location_min_time_ms: Long = 0
|
||||||
private val RECENT_TRKPT_COUNT = 7200
|
private val RECENT_TRKPT_COUNT = 7200
|
||||||
lateinit var recent_trkpts: Deque<Trkpt>
|
lateinit var recent_trkpts: Deque<Trkpt>
|
||||||
lateinit var recent_displacement_locations: Deque<Location>
|
lateinit var recent_displacement_locations: Deque<Location>
|
||||||
var recent_trackpoints_for_mapview: MutableList<GeoPoint> = mutableListOf()
|
lateinit var recent_trackpoints_for_mapview: MutableList<GeoPoint>
|
||||||
var gpsLocationListenerRegistered: Boolean = false
|
|
||||||
var networkLocationListenerRegistered: Boolean = false
|
|
||||||
var bound: Boolean = false
|
var bound: Boolean = false
|
||||||
private val binder = LocalBinder()
|
private val binder = LocalBinder()
|
||||||
lateinit var trackbook: Trackbook
|
|
||||||
private lateinit var locationManager: LocationManager
|
|
||||||
private lateinit var notificationManager: NotificationManager
|
private lateinit var notificationManager: NotificationManager
|
||||||
private lateinit var notificationHelper: NotificationHelper
|
private lateinit var notificationHelper: NotificationHelper
|
||||||
|
|
||||||
|
private lateinit var locationManager: LocationManager
|
||||||
private lateinit var gpsLocationListener: LocationListener
|
private lateinit var gpsLocationListener: LocationListener
|
||||||
private lateinit var networkLocationListener: LocationListener
|
private lateinit var networkLocationListener: LocationListener
|
||||||
|
var use_gps_location: Boolean = false
|
||||||
|
var use_network_location: Boolean = false
|
||||||
|
var gpsProviderActive: Boolean = false
|
||||||
|
var networkProviderActive: Boolean = false
|
||||||
|
var gpsLocationListenerRegistered: Boolean = false
|
||||||
|
var networkLocationListenerRegistered: Boolean = false
|
||||||
|
|
||||||
var mapfragment: MapFragment? = null
|
var mapfragment: MapFragment? = null
|
||||||
|
|
||||||
private fun addGpsLocationListener()
|
private fun addGpsLocationListener()
|
||||||
{
|
{
|
||||||
if (! use_gps_location)
|
if (! use_gps_location)
|
||||||
{
|
{
|
||||||
Log.v("VOUSSOIR", "Skipping GPS listener.")
|
Log.i("VOUSSOIR", "Skipping GPS listener.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gpsLocationListenerRegistered)
|
if (gpsLocationListenerRegistered)
|
||||||
{
|
{
|
||||||
Log.v("VOUSSOIR", "GPS location listener has already been added.")
|
Log.i("VOUSSOIR", "GPS location listener has already been added.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,20 +110,20 @@ class TrackerService: Service()
|
||||||
gpsLocationListener,
|
gpsLocationListener,
|
||||||
)
|
)
|
||||||
gpsLocationListenerRegistered = true
|
gpsLocationListenerRegistered = true
|
||||||
Log.v("VOUSSOIR", "Added GPS location listener.")
|
Log.i("VOUSSOIR", "Added GPS location listener.")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addNetworkLocationListener()
|
private fun addNetworkLocationListener()
|
||||||
{
|
{
|
||||||
if (! use_network_location)
|
if (! use_network_location)
|
||||||
{
|
{
|
||||||
Log.v("VOUSSOIR", "Skipping Network listener.")
|
Log.i("VOUSSOIR", "Skipping Network listener.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (networkLocationListenerRegistered)
|
if (networkLocationListenerRegistered)
|
||||||
{
|
{
|
||||||
Log.v("VOUSSOIR", "Network location listener has already been added.")
|
Log.i("VOUSSOIR", "Network location listener has already been added.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +148,7 @@ class TrackerService: Service()
|
||||||
networkLocationListener,
|
networkLocationListener,
|
||||||
)
|
)
|
||||||
networkLocationListenerRegistered = true
|
networkLocationListenerRegistered = true
|
||||||
Log.v("VOUSSOIR", "Added Network location listener.")
|
Log.i("VOUSSOIR", "Added Network location listener.")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createLocationListener(): LocationListener
|
private fun createLocationListener(): LocationListener
|
||||||
|
@ -149,20 +157,23 @@ class TrackerService: Service()
|
||||||
{
|
{
|
||||||
override fun onLocationChanged(location: Location)
|
override fun onLocationChanged(location: Location)
|
||||||
{
|
{
|
||||||
Log.i("VOUSSOIR", "Processing point ${location.latitude}, ${location.longitude} ${location.time}.")
|
Log.i("VOUSSOIR", "Processing point ${location.time} ${location.latitude}, ${location.longitude}.")
|
||||||
|
|
||||||
if (! isBetterLocation(location, currentBestLocation))
|
if (location.time == currentBestLocation.time)
|
||||||
{
|
{
|
||||||
Log.i("VOUSSOIR", "Not better than previous.")
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (! isBetterLocation(location, currentBestLocation))
|
||||||
|
// {
|
||||||
|
// Log.i("VOUSSOIR", "Not better than previous.")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
|
||||||
currentBestLocation = location
|
currentBestLocation = location
|
||||||
|
|
||||||
if (mapfragment != null)
|
val mf = mapfragment
|
||||||
{
|
mf?.handler?.postDelayed(mf.location_update_redraw, 0)
|
||||||
mapfragment!!.handler.postDelayed(mapfragment!!.location_update_redraw, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trackingState != Keys.STATE_TRACKING_ACTIVE)
|
if (trackingState != Keys.STATE_TRACKING_ACTIVE)
|
||||||
{
|
{
|
||||||
|
@ -199,7 +210,11 @@ class TrackerService: Service()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (! (recent_displacement_locations.isEmpty() || isDifferentEnough(recent_displacement_locations.first(), location, omitRests)))
|
if (recent_displacement_locations.isEmpty())
|
||||||
|
{
|
||||||
|
// pass
|
||||||
|
}
|
||||||
|
else if (! isDifferentEnough(recent_displacement_locations.first(), location, omitRests))
|
||||||
{
|
{
|
||||||
Log.i("VOUSSOIR", "Omitting due to too close to previous.")
|
Log.i("VOUSSOIR", "Omitting due to too close to previous.")
|
||||||
return
|
return
|
||||||
|
@ -207,6 +222,7 @@ class TrackerService: Service()
|
||||||
|
|
||||||
val trkpt = Trkpt(device_id=device_id, location=location)
|
val trkpt = Trkpt(device_id=device_id, location=location)
|
||||||
trackbook.database.insert_trkpt(trkpt)
|
trackbook.database.insert_trkpt(trkpt)
|
||||||
|
|
||||||
recent_trkpts.add(trkpt)
|
recent_trkpts.add(trkpt)
|
||||||
while (recent_trkpts.size > RECENT_TRKPT_COUNT)
|
while (recent_trkpts.size > RECENT_TRKPT_COUNT)
|
||||||
{
|
{
|
||||||
|
@ -264,6 +280,7 @@ class TrackerService: Service()
|
||||||
/* Overrides onBind from Service */
|
/* Overrides onBind from Service */
|
||||||
override fun onBind(p0: Intent?): IBinder
|
override fun onBind(p0: Intent?): IBinder
|
||||||
{
|
{
|
||||||
|
Log.i("VOUSSOIR", "TrackerService.onBind")
|
||||||
bound = true
|
bound = true
|
||||||
// start receiving location updates
|
// start receiving location updates
|
||||||
addGpsLocationListener()
|
addGpsLocationListener()
|
||||||
|
@ -276,6 +293,7 @@ class TrackerService: Service()
|
||||||
override fun onCreate()
|
override fun onCreate()
|
||||||
{
|
{
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
Log.i("VOUSSOIR", "TrackerService.onCreate")
|
||||||
trackbook = (applicationContext as Trackbook)
|
trackbook = (applicationContext as Trackbook)
|
||||||
trackbook.load_homepoints()
|
trackbook.load_homepoints()
|
||||||
recent_trkpts = ArrayDeque<Trkpt>(RECENT_TRKPT_COUNT)
|
recent_trkpts = ArrayDeque<Trkpt>(RECENT_TRKPT_COUNT)
|
||||||
|
@ -317,6 +335,7 @@ class TrackerService: Service()
|
||||||
/* Overrides onRebind from Service */
|
/* Overrides onRebind from Service */
|
||||||
override fun onRebind(intent: Intent?)
|
override fun onRebind(intent: Intent?)
|
||||||
{
|
{
|
||||||
|
Log.i("VOUSSOIR", "TrackerService.onRebind")
|
||||||
bound = true
|
bound = true
|
||||||
addGpsLocationListener()
|
addGpsLocationListener()
|
||||||
addNetworkLocationListener()
|
addNetworkLocationListener()
|
||||||
|
@ -325,6 +344,7 @@ class TrackerService: Service()
|
||||||
/* Overrides onStartCommand from Service */
|
/* Overrides onStartCommand from Service */
|
||||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int
|
||||||
{
|
{
|
||||||
|
Log.i("VOUSSOIR", "TrackerService.onStartCommand")
|
||||||
// SERVICE RESTART (via START_STICKY)
|
// SERVICE RESTART (via START_STICKY)
|
||||||
if (intent == null)
|
if (intent == null)
|
||||||
{
|
{
|
||||||
|
@ -350,6 +370,8 @@ class TrackerService: Service()
|
||||||
/* Overrides onUnbind from Service */
|
/* Overrides onUnbind from Service */
|
||||||
override fun onUnbind(intent: Intent?): Boolean
|
override fun onUnbind(intent: Intent?): Boolean
|
||||||
{
|
{
|
||||||
|
super.onUnbind(intent)
|
||||||
|
Log.i("VOUSSOIR", "TrackerService.onUnbind")
|
||||||
bound = false
|
bound = false
|
||||||
// stop receiving location updates - if not tracking
|
// stop receiving location updates - if not tracking
|
||||||
if (trackingState != Keys.STATE_TRACKING_ACTIVE)
|
if (trackingState != Keys.STATE_TRACKING_ACTIVE)
|
||||||
|
@ -368,7 +390,7 @@ class TrackerService: Service()
|
||||||
{
|
{
|
||||||
locationManager.removeUpdates(gpsLocationListener)
|
locationManager.removeUpdates(gpsLocationListener)
|
||||||
gpsLocationListenerRegistered = false
|
gpsLocationListenerRegistered = false
|
||||||
Log.v("VOUSSOIR", "Removed GPS location listener.")
|
Log.i("VOUSSOIR", "Removed GPS location listener.")
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -382,7 +404,7 @@ class TrackerService: Service()
|
||||||
{
|
{
|
||||||
locationManager.removeUpdates(networkLocationListener)
|
locationManager.removeUpdates(networkLocationListener)
|
||||||
networkLocationListenerRegistered = false
|
networkLocationListenerRegistered = false
|
||||||
Log.v("VOUSSOIR", "Removed Network location listener.")
|
Log.i("VOUSSOIR", "Removed Network location listener.")
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -392,6 +414,7 @@ class TrackerService: Service()
|
||||||
|
|
||||||
fun startTracking()
|
fun startTracking()
|
||||||
{
|
{
|
||||||
|
Log.i("VOUSSOIR", "TrackerService.startTracking")
|
||||||
addGpsLocationListener()
|
addGpsLocationListener()
|
||||||
addNetworkLocationListener()
|
addNetworkLocationListener()
|
||||||
trackingState = Keys.STATE_TRACKING_ACTIVE
|
trackingState = Keys.STATE_TRACKING_ACTIVE
|
||||||
|
@ -402,6 +425,7 @@ class TrackerService: Service()
|
||||||
|
|
||||||
fun stopTracking()
|
fun stopTracking()
|
||||||
{
|
{
|
||||||
|
Log.i("VOUSSOIR", "TrackerService.stopTracking")
|
||||||
trackbook.database.commit()
|
trackbook.database.commit()
|
||||||
|
|
||||||
trackingState = Keys.STATE_TRACKING_STOPPED
|
trackingState = Keys.STATE_TRACKING_STOPPED
|
|
@ -14,7 +14,11 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
/*
|
||||||
|
* Modified by voussoir for trkpt, forked from Trackbook.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
@ -22,7 +26,7 @@ import android.graphics.drawable.Icon
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.service.quicksettings.Tile
|
import android.service.quicksettings.Tile
|
||||||
import android.service.quicksettings.TileService
|
import android.service.quicksettings.TileService
|
||||||
import org.y20k.trackbook.helpers.PreferencesHelper
|
import net.voussoir.trkpt.helpers.PreferencesHelper
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TrackingToggleTileService class
|
* TrackingToggleTileService class
|
|
@ -14,7 +14,11 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
/*
|
||||||
|
* Modified by voussoir for trkpt, forked from Trackbook.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import YesNoDialog
|
import YesNoDialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
@ -27,14 +31,12 @@ import androidx.core.os.bundleOf
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.recyclerview.widget.DefaultItemAnimator
|
import androidx.recyclerview.widget.DefaultItemAnimator
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
import org.y20k.trackbook.helpers.UiHelper
|
import net.voussoir.trkpt.helpers.iso8601
|
||||||
import org.y20k.trackbook.helpers.iso8601
|
import net.voussoir.trkpt.tracklist.TracklistAdapter
|
||||||
import org.y20k.trackbook.tracklist.TracklistAdapter
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TracklistFragment class
|
* TracklistFragment class
|
|
@ -14,13 +14,12 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook
|
package net.voussoir.trkpt
|
||||||
|
|
||||||
import android.location.Location
|
import android.location.Location
|
||||||
import org.osmdroid.api.IGeoPoint
|
|
||||||
import org.osmdroid.util.GeoPoint
|
import org.osmdroid.util.GeoPoint
|
||||||
import org.osmdroid.views.overlay.Polyline
|
import org.osmdroid.views.overlay.Polyline
|
||||||
import org.y20k.trackbook.helpers.getNumberOfSatellites
|
import net.voussoir.trkpt.helpers.getNumberOfSatellites
|
||||||
|
|
||||||
class Trkpt(
|
class Trkpt(
|
||||||
val device_id: String,
|
val device_id: String,
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.dialogs
|
package net.voussoir.trkpt.dialogs
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.DialogInterface
|
import android.content.DialogInterface
|
||||||
|
@ -25,7 +25,7 @@ import android.widget.TextView
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import org.y20k.trackbook.R
|
import net.voussoir.trkpt.R
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ErrorDialog object
|
* ErrorDialog object
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* YesNoDialog
|
* YesNoDialog
|
||||||
* Implements the YesNoDialog class
|
* Implements the YesNoDialog class
|
||||||
* A YesNoDialog asks the user if he/she wants to do something or notpackage org.y20k.trackbook.dialogs
|
* A YesNoDialog asks the user if he/she wants to do something or not
|
||||||
*
|
*
|
||||||
* This file is part of
|
* This file is part of
|
||||||
* TRACKBOOK - Movement Recorder for Android
|
* TRACKBOOK - Movement Recorder for Android
|
||||||
|
@ -16,8 +16,8 @@
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import org.y20k.trackbook.Keys
|
import net.voussoir.trkpt.Keys
|
||||||
import org.y20k.trackbook.R
|
import net.voussoir.trkpt.R
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* YesNoDialog class
|
* YesNoDialog class
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.extensions
|
package net.voussoir.trkpt.extensions
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
|
|
@ -1,19 +1,9 @@
|
||||||
package org.y20k.trackbook.helpers
|
package net.voussoir.trkpt.helpers
|
||||||
|
|
||||||
import android.annotation.TargetApi
|
|
||||||
import android.content.ContentUris
|
|
||||||
import android.content.Context
|
|
||||||
import android.database.Cursor
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Build
|
|
||||||
import android.os.Environment
|
|
||||||
import android.provider.DocumentsContract
|
|
||||||
import android.provider.MediaStore
|
|
||||||
import java.lang.Math.abs
|
import java.lang.Math.abs
|
||||||
import java.security.SecureRandom
|
import java.security.SecureRandom
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.random.Random.Default.nextBits
|
|
||||||
|
|
||||||
private val RNG = SecureRandom()
|
private val RNG = SecureRandom()
|
||||||
|
|
|
@ -14,14 +14,14 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.helpers
|
package net.voussoir.trkpt.helpers
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
import org.y20k.trackbook.Keys
|
import net.voussoir.trkpt.Keys
|
||||||
import org.y20k.trackbook.R
|
import net.voussoir.trkpt.R
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AppThemeHelper object
|
* AppThemeHelper object
|
|
@ -14,14 +14,12 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.helpers
|
package net.voussoir.trkpt.helpers
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.location.Location
|
import net.voussoir.trkpt.Keys
|
||||||
import org.y20k.trackbook.Keys
|
import net.voussoir.trkpt.R
|
||||||
import org.y20k.trackbook.R
|
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.helpers
|
package net.voussoir.trkpt.helpers
|
||||||
|
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
import java.math.RoundingMode
|
import java.math.RoundingMode
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.helpers
|
package net.voussoir.trkpt.helpers
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
@ -24,7 +24,7 @@ import android.location.LocationManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import org.y20k.trackbook.Keys
|
import net.voussoir.trkpt.Keys
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
|
|
||||||
/* Get default location */
|
/* Get default location */
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.helpers
|
package net.voussoir.trkpt.helpers
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
@ -24,8 +24,8 @@ import org.osmdroid.util.GeoPoint
|
||||||
import org.osmdroid.views.MapView
|
import org.osmdroid.views.MapView
|
||||||
import org.osmdroid.views.overlay.ItemizedIconOverlay
|
import org.osmdroid.views.overlay.ItemizedIconOverlay
|
||||||
import org.osmdroid.views.overlay.OverlayItem
|
import org.osmdroid.views.overlay.OverlayItem
|
||||||
import org.y20k.trackbook.R
|
import net.voussoir.trkpt.R
|
||||||
import org.y20k.trackbook.Trkpt
|
import net.voussoir.trkpt.Trkpt
|
||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.helpers
|
package net.voussoir.trkpt.helpers
|
||||||
|
|
||||||
import android.app.*
|
import android.app.*
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
@ -24,10 +24,10 @@ import androidx.annotation.RequiresApi
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.graphics.drawable.toBitmap
|
import androidx.core.graphics.drawable.toBitmap
|
||||||
import org.y20k.trackbook.Keys
|
import net.voussoir.trkpt.Keys
|
||||||
import org.y20k.trackbook.MainActivity
|
import net.voussoir.trkpt.MainActivity
|
||||||
import org.y20k.trackbook.R
|
import net.voussoir.trkpt.R
|
||||||
import org.y20k.trackbook.TrackerService
|
import net.voussoir.trkpt.TrackerService
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NotificationHelper class
|
* NotificationHelper class
|
||||||
|
@ -40,8 +40,8 @@ class NotificationHelper(private val trackerService: TrackerService)
|
||||||
/* Creates notification */
|
/* Creates notification */
|
||||||
fun createNotification(trackingState: Int, timestamp: String): Notification {
|
fun createNotification(trackingState: Int, timestamp: String): Notification {
|
||||||
|
|
||||||
// create notification channel if necessary
|
if (shouldCreateNotificationChannel())
|
||||||
if (shouldCreateNotificationChannel()) {
|
{
|
||||||
createNotificationChannel()
|
createNotificationChannel()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,6 @@ class NotificationHelper(private val trackerService: TrackerService)
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.build()
|
return builder.build()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Checks if notification channel should be created */
|
/* Checks if notification channel should be created */
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.helpers
|
package net.voussoir.trkpt.helpers
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
@ -23,9 +23,9 @@ import android.location.LocationManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import org.y20k.trackbook.Keys
|
import net.voussoir.trkpt.Keys
|
||||||
import org.y20k.trackbook.extensions.getDouble
|
import net.voussoir.trkpt.extensions.getDouble
|
||||||
import org.y20k.trackbook.extensions.putDouble
|
import net.voussoir.trkpt.extensions.putDouble
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PreferencesHelper object
|
* PreferencesHelper object
|
||||||
|
@ -75,10 +75,13 @@ object PreferencesHelper
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadTrackingState(): Int {
|
fun loadTrackingState(): Int {
|
||||||
return sharedPreferences.getInt(Keys.PREF_TRACKING_STATE, Keys.STATE_TRACKING_STOPPED)
|
val state = sharedPreferences.getInt(Keys.PREF_TRACKING_STATE, Keys.STATE_TRACKING_STOPPED)
|
||||||
|
Log.i("VOUSSOIR", "PreferencesHelper.loadTrackingState ${state}")
|
||||||
|
return state
|
||||||
}
|
}
|
||||||
|
|
||||||
fun saveTrackingState(trackingState: Int) {
|
fun saveTrackingState(trackingState: Int) {
|
||||||
|
Log.i("VOUSSOIR", "PreferencesHelper.saveTrackingState ${trackingState}")
|
||||||
sharedPreferences.edit { putInt(Keys.PREF_TRACKING_STATE, trackingState) }
|
sharedPreferences.edit { putInt(Keys.PREF_TRACKING_STATE, trackingState) }
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.helpers
|
package net.voussoir.trkpt.helpers
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
|
@ -22,13 +22,10 @@ import android.graphics.Paint
|
||||||
import android.graphics.PorterDuff
|
import android.graphics.PorterDuff
|
||||||
import android.graphics.PorterDuffXfermode
|
import android.graphics.PorterDuffXfermode
|
||||||
import android.graphics.drawable.ColorDrawable
|
import android.graphics.drawable.ColorDrawable
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import org.y20k.trackbook.R
|
import net.voussoir.trkpt.R
|
||||||
import org.y20k.trackbook.tracklist.TracklistAdapter
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UiHelper object
|
* UiHelper object
|
|
@ -14,7 +14,7 @@
|
||||||
* https://github.com/osmdroid/osmdroid
|
* https://github.com/osmdroid/osmdroid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.y20k.trackbook.tracklist
|
package net.voussoir.trkpt.tracklist
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
|
@ -26,15 +26,15 @@ import android.widget.TextView
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import org.y20k.trackbook.Keys
|
import net.voussoir.trkpt.Keys
|
||||||
import org.y20k.trackbook.R
|
import net.voussoir.trkpt.R
|
||||||
import org.y20k.trackbook.Database
|
import net.voussoir.trkpt.Database
|
||||||
import org.y20k.trackbook.Track
|
import net.voussoir.trkpt.Track
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class TracklistAdapter(val fragment: Fragment, val database: Database) : RecyclerView.Adapter<RecyclerView.ViewHolder>()
|
class TracklistAdapter(val fragment: Fragment, val database: net.voussoir.trkpt.Database) : RecyclerView.Adapter<RecyclerView.ViewHolder>()
|
||||||
{
|
{
|
||||||
private lateinit var tracklistListener: TracklistAdapterListener
|
private lateinit var tracklistListener: TracklistAdapterListener
|
||||||
val tracks: ArrayList<Track> = ArrayList<Track>()
|
val tracks: ArrayList<Track> = ArrayList<Track>()
|
|
@ -8,7 +8,7 @@
|
||||||
<!-- MAP -->
|
<!-- MAP -->
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/map_fragment"
|
android:id="@+id/map_fragment"
|
||||||
android:name="org.y20k.trackbook.MapFragment"
|
android:name="net.voussoir.trkpt.MapFragment"
|
||||||
android:label="Map"
|
android:label="Map"
|
||||||
tools:layout="@layout/fragment_map">
|
tools:layout="@layout/fragment_map">
|
||||||
<action
|
<action
|
||||||
|
@ -22,13 +22,13 @@
|
||||||
<!-- SETTINGS -->
|
<!-- SETTINGS -->
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/settings_fragment"
|
android:id="@+id/settings_fragment"
|
||||||
android:name="org.y20k.trackbook.SettingsFragment"
|
android:name="net.voussoir.trkpt.SettingsFragment"
|
||||||
android:label="Settings"/>
|
android:label="Settings"/>
|
||||||
|
|
||||||
<!-- TRACKS (LIST OF TRACKS) -->
|
<!-- TRACKS (LIST OF TRACKS) -->
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/tracklist_fragment"
|
android:id="@+id/tracklist_fragment"
|
||||||
android:name="org.y20k.trackbook.TracklistFragment"
|
android:name="net.voussoir.trkpt.TracklistFragment"
|
||||||
android:label="Tracks"
|
android:label="Tracks"
|
||||||
tools:layout="@layout/fragment_tracklist">
|
tools:layout="@layout/fragment_tracklist">
|
||||||
<action
|
<action
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
<!-- TRACK -->
|
<!-- TRACK -->
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/fragment_track"
|
android:id="@+id/fragment_track"
|
||||||
android:name="org.y20k.trackbook.TrackFragment"
|
android:name="net.voussoir.trkpt.TrackFragment"
|
||||||
android:label="Track"
|
android:label="Track"
|
||||||
tools:layout="@layout/fragment_track" >
|
tools:layout="@layout/fragment_track" >
|
||||||
<argument
|
<argument
|
||||||
|
|
|
@ -49,5 +49,6 @@
|
||||||
<color name="default_blue">#FF3C98DB</color>
|
<color name="default_blue">#FF3C98DB</color>
|
||||||
<color name="homepoint">#FFFFC107</color>
|
<color name="homepoint">#FFFFC107</color>
|
||||||
<color name="default_green">#FF4CAF50</color>
|
<color name="default_green">#FF4CAF50</color>
|
||||||
|
<color name="fuchsia">#FFFF00FF</color>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
<string name="tab_tracks">History</string>
|
<string name="tab_tracks">History</string>
|
||||||
<string name="tab_settings">Settings</string>
|
<string name="tab_settings">Settings</string>
|
||||||
<!-- Notification -->
|
<!-- Notification -->
|
||||||
<string name="notification_title_trackbook_running">Trackbook running</string>
|
<string name="notification_title_trackbook_running">Recording</string>
|
||||||
<string name="notification_title_trackbook_not_running">Trackbook stopped</string>
|
<string name="notification_title_trackbook_not_running">Stopped</string>
|
||||||
<string name="notification_pause">Stop</string>
|
<string name="notification_pause">Stop</string>
|
||||||
<string name="notification_resume">Record</string>
|
<string name="notification_resume">Record</string>
|
||||||
<string name="notification_show">Show</string>
|
<string name="notification_show">Show</string>
|
||||||
|
|
Loading…
Reference in a new issue