checkpoint

master
voussoir 2023-03-23 22:48:25 -07:00
parent e96bfac4a9
commit c434d3b840
31 changed files with 189 additions and 159 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<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 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_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.WRITE_EXTERNAL_STORAGE" />
<application
android:name="org.y20k.trackbook.Trackbook"
android:name="net.voussoir.trkpt.Trackbook"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
@ -33,7 +32,7 @@
<!-- MAIN ACTIVITY -->
<activity
android:name=".MainActivity"
android:name="net.voussoir.trkpt.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@ -43,19 +42,19 @@
<!-- TRACKER SERVICE -->
<service
android:name=".TrackerService"
android:name="net.voussoir.trkpt.TrackerService"
android:foregroundServiceType="location"
android:exported="false">
<intent-filter>
<action android:name="org.y20k.trackbook.action.START" />
<action android:name="org.y20k.trackbook.action.STOP" />
<action android:name="org.y20k.trackbook.action.DISMISS" />
<action android:name="net.voussoir.trkpt.action.START" />
<action android:name="net.voussoir.trkpt.action.STOP" />
<action android:name="net.voussoir.trkpt.action.DISMISS" />
</intent-filter>
</service>
<!-- TRACKING TOGGLE SERVICE SYSTEM QUICK SETTINGS -->
<service
android:name=".TrackingToggleTileService"
android:name="net.voussoir.trkpt.TrackingToggleTileService"
android:label="@string/quick_settings_tile_title_default"
android:icon="@drawable/ic_notification_icon_small_24dp"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"

View File

@ -1,13 +1,12 @@
package org.y20k.trackbook
package net.voussoir.trkpt
import android.content.ContentValues
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteDatabase.openOrCreateDatabase
import android.util.Log
import java.io.File
import java.util.*
class Database(val trackbook: Trackbook)
class Database(val trackbook: net.voussoir.trkpt.Trackbook)
{
var ready: Boolean = false
lateinit var file: File
@ -61,7 +60,7 @@ class Database(val trackbook: Trackbook)
commit()
}
fun insert_trkpt(trkpt: Trkpt)
fun insert_trkpt(trkpt: net.voussoir.trkpt.Trkpt)
{
Log.i("VOUSSOIR", "Database.insert_trkpt")
val values = ContentValues().apply {
@ -124,7 +123,7 @@ class Database(val trackbook: Trackbook)
cursor = this.connection.rawQuery("PRAGMA journal_mode = DELETE", null)
cursor.moveToNext()
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.close()
// Not using this.commit because this.ready is not true yet.

View File

@ -1,4 +1,4 @@
package org.y20k.trackbook
package net.voussoir.trkpt
import android.location.Location
import java.util.*

View File

@ -14,9 +14,8 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook
package net.voussoir.trkpt
import android.graphics.Color
import java.util.*
/*
@ -32,8 +31,8 @@ object Keys {
const val DATABASE_VERSION: Int = 1
// intent actions
const val ACTION_START: String = "org.y20k.trackbook.action.START"
const val ACTION_STOP: String = "org.y20k.trackbook.action.STOP"
const val ACTION_START: String = "net.voussoir.trkpt.action.START"
const val ACTION_STOP: String = "net.voussoir.trkpt.action.STOP"
// args
const val ARG_TRACK_TITLE: String = "ArgTrackTitle"
@ -112,5 +111,4 @@ object Keys {
const val NOTIFICATION_CHANNEL_RECORDING: String = "notificationChannelIdRecordingChannel"
const val POLYLINE_THICKNESS = 4F
val POLYLINE_COLOR = Color.argb(255, 255, 0, 255)
}

View File

@ -14,20 +14,20 @@
* 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.app.Activity
import android.content.Intent
import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.PowerManager
import android.os.StrictMode
import android.os.StrictMode.VmPolicy
import android.provider.Settings
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
@ -35,8 +35,8 @@ import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.bottomnavigation.BottomNavigationView
import org.osmdroid.config.Configuration
import org.y20k.trackbook.helpers.AppThemeHelper
import org.y20k.trackbook.helpers.PreferencesHelper
import net.voussoir.trkpt.helpers.AppThemeHelper
import net.voussoir.trkpt.helpers.PreferencesHelper
class MainActivity: AppCompatActivity()
{
@ -51,7 +51,7 @@ class MainActivity: AppCompatActivity()
super.onCreate(savedInstanceState)
request_permissions(this)
// 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(
VmPolicy.Builder()
@ -62,7 +62,7 @@ class MainActivity: AppCompatActivity()
}
// 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)
Configuration.getInstance().osmdroidBasePath = this.getExternalFilesDir(null)

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook
package net.voussoir.trkpt
import android.Manifest
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.compass.CompassOverlay
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()
{
@ -219,7 +220,7 @@ class MapFragment : Fragment()
{
startTracking()
}
handler.post(location_update_redraw)
handler.postDelayed(location_update_redraw, 0)
}
currentLocationButton.setOnClickListener {
centerMap(currentBestLocation, animated=true)
@ -452,7 +453,7 @@ class MapFragment : Fragment()
clear_track_overlay()
val pl = Polyline(mapView)
pl.outlinePaint.strokeWidth = Keys.POLYLINE_THICKNESS
pl.outlinePaint.color = Keys.POLYLINE_COLOR
pl.outlinePaint.color = requireContext().getColor(R.color.fuchsia)
mapView.overlays.add(pl)
current_track_overlay = pl
}
@ -601,6 +602,7 @@ class MapFragment : Fragment()
// get state of tracking and update button if necessary
trackingState = trackerService.trackingState
update_main_button()
handler.postDelayed(location_update_redraw, 0)
// register listener for changes in shared preferences
PreferencesHelper.registerPreferenceChangeListener(sharedPreferenceChangeListener)
// start listening for location updates

View File

@ -14,7 +14,11 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook
/*
* Modified by voussoir for trkpt, forked from Trackbook.
*/
package net.voussoir.trkpt
import YesNoDialog
import android.app.Activity
@ -40,10 +44,10 @@ import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat
import androidx.preference.contains
import get_path_from_uri
import org.y20k.trackbook.helpers.AppThemeHelper
import org.y20k.trackbook.helpers.LengthUnitHelper
import org.y20k.trackbook.helpers.PreferencesHelper
import org.y20k.trackbook.helpers.random_device_id
import net.voussoir.trkpt.helpers.AppThemeHelper
import net.voussoir.trkpt.helpers.LengthUnitHelper
import net.voussoir.trkpt.helpers.PreferencesHelper
import net.voussoir.trkpt.helpers.random_device_id
class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogListener
{

View File

@ -14,22 +14,25 @@
* 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.database.Cursor
import android.database.DatabaseUtils.dumpCursorToString
import android.net.Uri
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.widget.Toast
import org.y20k.trackbook.helpers.iso8601
import net.voussoir.trkpt.helpers.iso8601
import java.text.SimpleDateFormat
import java.util.*
data class Track (
val database: Database,
val database: net.voussoir.trkpt.Database,
val device_id: String,
var start_time: Date,
var end_time: Date,

View File

@ -14,7 +14,11 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook
/*
* Modified by voussoir for trkpt, forked from Trackbook.
*/
package net.voussoir.trkpt
import YesNoDialog
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.SimpleFastPointOverlayOptions
import org.osmdroid.views.overlay.simplefastpoint.SimplePointTheme
import org.y20k.trackbook.helpers.AppThemeHelper
import org.y20k.trackbook.helpers.DateTimeHelper
import org.y20k.trackbook.helpers.LengthUnitHelper
import org.y20k.trackbook.helpers.PreferencesHelper
import org.y20k.trackbook.helpers.UiHelper
import org.y20k.trackbook.helpers.create_start_end_markers
import org.y20k.trackbook.helpers.iso8601
import org.y20k.trackbook.helpers.iso8601_parse
import net.voussoir.trkpt.helpers.AppThemeHelper
import net.voussoir.trkpt.helpers.DateTimeHelper
import net.voussoir.trkpt.helpers.LengthUnitHelper
import net.voussoir.trkpt.helpers.PreferencesHelper
import net.voussoir.trkpt.helpers.UiHelper
import net.voussoir.trkpt.helpers.create_start_end_markers
import net.voussoir.trkpt.helpers.iso8601
import net.voussoir.trkpt.helpers.iso8601_parse
import java.text.SimpleDateFormat
import java.util.*
@ -114,7 +118,7 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View
{
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(
database=database,
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 style = Paint()
style.style = Paint.Style.FILL
style.color = Keys.POLYLINE_COLOR
style.color = requireContext().getColor(R.color.fuchsia)
style.flags = Paint.ANTI_ALIAS_FLAG
val overlayOptions: SimpleFastPointOverlayOptions = SimpleFastPointOverlayOptions.getDefaultStyle()
.setAlgorithm(SimpleFastPointOverlayOptions.RenderingAlgorithm.MEDIUM_OPTIMIZATION)
@ -369,7 +373,7 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
{
var pl = Polyline(mapView)
pl.outlinePaint.strokeWidth = Keys.POLYLINE_THICKNESS
pl.outlinePaint.color = Keys.POLYLINE_COLOR
pl.outlinePaint.color = requireContext().getColor(R.color.fuchsia)
pl.infoWindow = null
track_segment_overlays.add(pl)
mapView.overlays.add(pl)

View File

@ -14,7 +14,11 @@
* 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.app.Application
@ -22,9 +26,9 @@ import android.content.pm.PackageManager
import android.database.Cursor
import android.util.Log
import com.google.android.material.color.DynamicColors
import org.y20k.trackbook.helpers.AppThemeHelper
import org.y20k.trackbook.helpers.PreferencesHelper
import org.y20k.trackbook.helpers.PreferencesHelper.initPreferences
import net.voussoir.trkpt.helpers.AppThemeHelper
import net.voussoir.trkpt.helpers.PreferencesHelper
import net.voussoir.trkpt.helpers.PreferencesHelper.initPreferences
import java.io.File
@ -35,7 +39,7 @@ interface DatabaseChangedListener
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 database_changed_listeners = ArrayList<DatabaseChangedListener>()

View File

@ -14,7 +14,11 @@
* 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.NotificationManager
@ -32,52 +36,56 @@ import android.util.Log
import androidx.core.content.ContextCompat
import org.osmdroid.util.GeoPoint
import java.util.*
import org.y20k.trackbook.helpers.*
import net.voussoir.trkpt.helpers.*
/*
* TrackerService class
*/
class TrackerService: Service()
{
/* Main class variables */
lateinit var trackbook: Trackbook
var trackingState: Int = Keys.STATE_TRACKING_STOPPED
var gpsProviderActive: Boolean = false
var networkProviderActive: Boolean = false
var useImperial: Boolean = false
var use_gps_location: Boolean = false
var use_network_location: Boolean = false
var omitRests: Boolean = true
var device_id: String = random_device_id()
var currentBestLocation: Location = getDefaultLocation()
var last_location_time: Long = 0
var lastCommit: Long = 0
var location_min_time_ms: Long = 0
private val RECENT_TRKPT_COUNT = 7200
lateinit var recent_trkpts: Deque<Trkpt>
lateinit var recent_displacement_locations: Deque<Location>
var recent_trackpoints_for_mapview: MutableList<GeoPoint> = mutableListOf()
var gpsLocationListenerRegistered: Boolean = false
var networkLocationListenerRegistered: Boolean = false
lateinit var recent_trackpoints_for_mapview: MutableList<GeoPoint>
var bound: Boolean = false
private val binder = LocalBinder()
lateinit var trackbook: Trackbook
private lateinit var locationManager: LocationManager
private lateinit var notificationManager: NotificationManager
private lateinit var notificationHelper: NotificationHelper
private lateinit var locationManager: LocationManager
private lateinit var gpsLocationListener: 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
private fun addGpsLocationListener()
{
if (! use_gps_location)
{
Log.v("VOUSSOIR", "Skipping GPS listener.")
Log.i("VOUSSOIR", "Skipping GPS listener.")
return
}
if (gpsLocationListenerRegistered)
{
Log.v("VOUSSOIR", "GPS location listener has already been added.")
Log.i("VOUSSOIR", "GPS location listener has already been added.")
return
}
@ -102,20 +110,20 @@ class TrackerService: Service()
gpsLocationListener,
)
gpsLocationListenerRegistered = true
Log.v("VOUSSOIR", "Added GPS location listener.")
Log.i("VOUSSOIR", "Added GPS location listener.")
}
private fun addNetworkLocationListener()
{
if (! use_network_location)
{
Log.v("VOUSSOIR", "Skipping Network listener.")
Log.i("VOUSSOIR", "Skipping Network listener.")
return
}
if (networkLocationListenerRegistered)
{
Log.v("VOUSSOIR", "Network location listener has already been added.")
Log.i("VOUSSOIR", "Network location listener has already been added.")
return
}
@ -140,7 +148,7 @@ class TrackerService: Service()
networkLocationListener,
)
networkLocationListenerRegistered = true
Log.v("VOUSSOIR", "Added Network location listener.")
Log.i("VOUSSOIR", "Added Network location listener.")
}
private fun createLocationListener(): LocationListener
@ -149,20 +157,23 @@ class TrackerService: Service()
{
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
}
// if (! isBetterLocation(location, currentBestLocation))
// {
// Log.i("VOUSSOIR", "Not better than previous.")
// return
// }
currentBestLocation = location
if (mapfragment != null)
{
mapfragment!!.handler.postDelayed(mapfragment!!.location_update_redraw, 0)
}
val mf = mapfragment
mf?.handler?.postDelayed(mf.location_update_redraw, 0)
if (trackingState != Keys.STATE_TRACKING_ACTIVE)
{
@ -199,7 +210,11 @@ class TrackerService: Service()
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.")
return
@ -207,6 +222,7 @@ class TrackerService: Service()
val trkpt = Trkpt(device_id=device_id, location=location)
trackbook.database.insert_trkpt(trkpt)
recent_trkpts.add(trkpt)
while (recent_trkpts.size > RECENT_TRKPT_COUNT)
{
@ -264,6 +280,7 @@ class TrackerService: Service()
/* Overrides onBind from Service */
override fun onBind(p0: Intent?): IBinder
{
Log.i("VOUSSOIR", "TrackerService.onBind")
bound = true
// start receiving location updates
addGpsLocationListener()
@ -276,6 +293,7 @@ class TrackerService: Service()
override fun onCreate()
{
super.onCreate()
Log.i("VOUSSOIR", "TrackerService.onCreate")
trackbook = (applicationContext as Trackbook)
trackbook.load_homepoints()
recent_trkpts = ArrayDeque<Trkpt>(RECENT_TRKPT_COUNT)
@ -317,6 +335,7 @@ class TrackerService: Service()
/* Overrides onRebind from Service */
override fun onRebind(intent: Intent?)
{
Log.i("VOUSSOIR", "TrackerService.onRebind")
bound = true
addGpsLocationListener()
addNetworkLocationListener()
@ -325,6 +344,7 @@ class TrackerService: Service()
/* Overrides onStartCommand from Service */
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int
{
Log.i("VOUSSOIR", "TrackerService.onStartCommand")
// SERVICE RESTART (via START_STICKY)
if (intent == null)
{
@ -350,6 +370,8 @@ class TrackerService: Service()
/* Overrides onUnbind from Service */
override fun onUnbind(intent: Intent?): Boolean
{
super.onUnbind(intent)
Log.i("VOUSSOIR", "TrackerService.onUnbind")
bound = false
// stop receiving location updates - if not tracking
if (trackingState != Keys.STATE_TRACKING_ACTIVE)
@ -368,7 +390,7 @@ class TrackerService: Service()
{
locationManager.removeUpdates(gpsLocationListener)
gpsLocationListenerRegistered = false
Log.v("VOUSSOIR", "Removed GPS location listener.")
Log.i("VOUSSOIR", "Removed GPS location listener.")
}
else
{
@ -382,7 +404,7 @@ class TrackerService: Service()
{
locationManager.removeUpdates(networkLocationListener)
networkLocationListenerRegistered = false
Log.v("VOUSSOIR", "Removed Network location listener.")
Log.i("VOUSSOIR", "Removed Network location listener.")
}
else
{
@ -392,6 +414,7 @@ class TrackerService: Service()
fun startTracking()
{
Log.i("VOUSSOIR", "TrackerService.startTracking")
addGpsLocationListener()
addNetworkLocationListener()
trackingState = Keys.STATE_TRACKING_ACTIVE
@ -402,6 +425,7 @@ class TrackerService: Service()
fun stopTracking()
{
Log.i("VOUSSOIR", "TrackerService.stopTracking")
trackbook.database.commit()
trackingState = Keys.STATE_TRACKING_STOPPED

View File

@ -14,7 +14,11 @@
* 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.SharedPreferences
@ -22,7 +26,7 @@ import android.graphics.drawable.Icon
import android.os.Build
import android.service.quicksettings.Tile
import android.service.quicksettings.TileService
import org.y20k.trackbook.helpers.PreferencesHelper
import net.voussoir.trkpt.helpers.PreferencesHelper
/*
* TrackingToggleTileService class

View File

@ -14,7 +14,11 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook
/*
* Modified by voussoir for trkpt, forked from Trackbook.
*/
package net.voussoir.trkpt
import YesNoDialog
import android.content.Context
@ -27,14 +31,12 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers.Main
import org.y20k.trackbook.helpers.UiHelper
import org.y20k.trackbook.helpers.iso8601
import org.y20k.trackbook.tracklist.TracklistAdapter
import net.voussoir.trkpt.helpers.iso8601
import net.voussoir.trkpt.tracklist.TracklistAdapter
/*
* TracklistFragment class

View File

@ -14,13 +14,12 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook
package net.voussoir.trkpt
import android.location.Location
import org.osmdroid.api.IGeoPoint
import org.osmdroid.util.GeoPoint
import org.osmdroid.views.overlay.Polyline
import org.y20k.trackbook.helpers.getNumberOfSatellites
import net.voussoir.trkpt.helpers.getNumberOfSatellites
class Trkpt(
val device_id: String,

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.dialogs
package net.voussoir.trkpt.dialogs
import android.content.Context
import android.content.DialogInterface
@ -25,7 +25,7 @@ import android.widget.TextView
import androidx.core.view.isGone
import androidx.core.view.isVisible
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.y20k.trackbook.R
import net.voussoir.trkpt.R
/*
* ErrorDialog object

View File

@ -1,7 +1,7 @@
/*
* YesNoDialog
* 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
* TRACKBOOK - Movement Recorder for Android
@ -16,8 +16,8 @@
import android.content.Context
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.y20k.trackbook.Keys
import org.y20k.trackbook.R
import net.voussoir.trkpt.Keys
import net.voussoir.trkpt.R
/*
* YesNoDialog class

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.extensions
package net.voussoir.trkpt.extensions
import android.content.SharedPreferences

View File

@ -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.security.SecureRandom
import java.text.SimpleDateFormat
import java.util.*
import kotlin.random.Random.Default.nextBits
private val RNG = SecureRandom()

View File

@ -14,14 +14,14 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.helpers
package net.voussoir.trkpt.helpers
import android.content.Context
import android.content.res.Configuration
import android.util.Log
import androidx.appcompat.app.AppCompatDelegate
import org.y20k.trackbook.Keys
import org.y20k.trackbook.R
import net.voussoir.trkpt.Keys
import net.voussoir.trkpt.R
/*
* AppThemeHelper object

View File

@ -14,14 +14,12 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.helpers
package net.voussoir.trkpt.helpers
import android.content.Context
import android.location.Location
import org.y20k.trackbook.Keys
import org.y20k.trackbook.R
import net.voussoir.trkpt.Keys
import net.voussoir.trkpt.R
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.TimeUnit

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.helpers
package net.voussoir.trkpt.helpers
import java.math.BigDecimal
import java.math.RoundingMode

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.helpers
package net.voussoir.trkpt.helpers
import android.Manifest
import android.content.Context
@ -24,7 +24,7 @@ import android.location.LocationManager
import android.os.Bundle
import android.os.SystemClock
import androidx.core.content.ContextCompat
import org.y20k.trackbook.Keys
import net.voussoir.trkpt.Keys
import kotlin.math.pow
/* Get default location */

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.helpers
package net.voussoir.trkpt.helpers
import android.content.Context
import android.util.Log
@ -24,8 +24,8 @@ import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.ItemizedIconOverlay
import org.osmdroid.views.overlay.OverlayItem
import org.y20k.trackbook.R
import org.y20k.trackbook.Trkpt
import net.voussoir.trkpt.R
import net.voussoir.trkpt.Trkpt
import java.text.DecimalFormat
import java.text.SimpleDateFormat
import java.util.*

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.helpers
package net.voussoir.trkpt.helpers
import android.app.*
import android.content.Context
@ -24,10 +24,10 @@ import androidx.annotation.RequiresApi
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.toBitmap
import org.y20k.trackbook.Keys
import org.y20k.trackbook.MainActivity
import org.y20k.trackbook.R
import org.y20k.trackbook.TrackerService
import net.voussoir.trkpt.Keys
import net.voussoir.trkpt.MainActivity
import net.voussoir.trkpt.R
import net.voussoir.trkpt.TrackerService
/*
* NotificationHelper class
@ -40,8 +40,8 @@ class NotificationHelper(private val trackerService: TrackerService)
/* Creates notification */
fun createNotification(trackingState: Int, timestamp: String): Notification {
// create notification channel if necessary
if (shouldCreateNotificationChannel()) {
if (shouldCreateNotificationChannel())
{
createNotificationChannel()
}
@ -67,7 +67,6 @@ class NotificationHelper(private val trackerService: TrackerService)
}
return builder.build()
}
/* Checks if notification channel should be created */

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.helpers
package net.voussoir.trkpt.helpers
import android.content.Context
import android.content.SharedPreferences
@ -23,9 +23,9 @@ import android.location.LocationManager
import android.util.Log
import androidx.core.content.edit
import androidx.preference.PreferenceManager
import org.y20k.trackbook.Keys
import org.y20k.trackbook.extensions.getDouble
import org.y20k.trackbook.extensions.putDouble
import net.voussoir.trkpt.Keys
import net.voussoir.trkpt.extensions.getDouble
import net.voussoir.trkpt.extensions.putDouble
/*
* PreferencesHelper object
@ -75,10 +75,13 @@ object PreferencesHelper
}
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) {
Log.i("VOUSSOIR", "PreferencesHelper.saveTrackingState ${trackingState}")
sharedPreferences.edit { putInt(Keys.PREF_TRACKING_STATE, trackingState) }
}

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.helpers
package net.voussoir.trkpt.helpers
import android.content.Context
import android.graphics.Canvas
@ -22,13 +22,10 @@ import android.graphics.Paint
import android.graphics.PorterDuff
import android.graphics.PorterDuffXfermode
import android.graphics.drawable.ColorDrawable
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import org.y20k.trackbook.R
import org.y20k.trackbook.tracklist.TracklistAdapter
import net.voussoir.trkpt.R
/*
* UiHelper object

View File

@ -14,7 +14,7 @@
* https://github.com/osmdroid/osmdroid
*/
package org.y20k.trackbook.tracklist
package net.voussoir.trkpt.tracklist
import android.content.Context
import android.database.Cursor
@ -26,15 +26,15 @@ import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.RecyclerView
import org.y20k.trackbook.Keys
import org.y20k.trackbook.R
import org.y20k.trackbook.Database
import org.y20k.trackbook.Track
import net.voussoir.trkpt.Keys
import net.voussoir.trkpt.R
import net.voussoir.trkpt.Database
import net.voussoir.trkpt.Track
import java.text.DateFormat
import java.text.SimpleDateFormat
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
val tracks: ArrayList<Track> = ArrayList<Track>()

View File

@ -8,7 +8,7 @@
<!-- MAP -->
<fragment
android:id="@+id/map_fragment"
android:name="org.y20k.trackbook.MapFragment"
android:name="net.voussoir.trkpt.MapFragment"
android:label="Map"
tools:layout="@layout/fragment_map">
<action
@ -22,13 +22,13 @@
<!-- SETTINGS -->
<fragment
android:id="@+id/settings_fragment"
android:name="org.y20k.trackbook.SettingsFragment"
android:name="net.voussoir.trkpt.SettingsFragment"
android:label="Settings"/>
<!-- TRACKS (LIST OF TRACKS) -->
<fragment
android:id="@+id/tracklist_fragment"
android:name="org.y20k.trackbook.TracklistFragment"
android:name="net.voussoir.trkpt.TracklistFragment"
android:label="Tracks"
tools:layout="@layout/fragment_tracklist">
<action
@ -40,7 +40,7 @@
<!-- TRACK -->
<fragment
android:id="@+id/fragment_track"
android:name="org.y20k.trackbook.TrackFragment"
android:name="net.voussoir.trkpt.TrackFragment"
android:label="Track"
tools:layout="@layout/fragment_track" >
<argument

View File

@ -49,5 +49,6 @@
<color name="default_blue">#FF3C98DB</color>
<color name="homepoint">#FFFFC107</color>
<color name="default_green">#FF4CAF50</color>
<color name="fuchsia">#FFFF00FF</color>
</resources>

View File

@ -8,8 +8,8 @@
<string name="tab_tracks">History</string>
<string name="tab_settings">Settings</string>
<!-- Notification -->
<string name="notification_title_trackbook_running">Trackbook running</string>
<string name="notification_title_trackbook_not_running">Trackbook stopped</string>
<string name="notification_title_trackbook_running">Recording</string>
<string name="notification_title_trackbook_not_running">Stopped</string>
<string name="notification_pause">Stop</string>
<string name="notification_resume">Record</string>
<string name="notification_show">Show</string>