diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 990823e..69b0e73 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,6 +14,7 @@ + diff --git a/app/src/main/java/org/y20k/trackbook/Keys.kt b/app/src/main/java/org/y20k/trackbook/Keys.kt index 4e905f5..bba5564 100644 --- a/app/src/main/java/org/y20k/trackbook/Keys.kt +++ b/app/src/main/java/org/y20k/trackbook/Keys.kt @@ -53,9 +53,9 @@ object Keys { const val PREF_MAP_ZOOM_LEVEL: String = "prefMapZoomLevel" const val PREF_TRACKING_STATE: String = "prefTrackingState" const val PREF_USE_IMPERIAL_UNITS: String = "prefUseImperialUnits" - const val PREF_GPS_ONLY: String = "prefGpsOnly" + const val PREF_LOCATION_NETWORK: String = "prefLocationNetwork" + const val PREF_LOCATION_GPS: String = "prefLocationGPS" const val PREF_OMIT_RESTS: String = "prefOmitRests" - const val PREF_COMMIT_INTERVAL: String = "prefCommitInterval" const val PREF_DEVICE_ID: String = "prefDeviceID" const val PREF_DATABASE_DIRECTORY: String = "prefDatabaseDirectory" diff --git a/app/src/main/java/org/y20k/trackbook/MainActivity.kt b/app/src/main/java/org/y20k/trackbook/MainActivity.kt index c486eca..2d33f13 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivity.kt +++ b/app/src/main/java/org/y20k/trackbook/MainActivity.kt @@ -18,12 +18,16 @@ package org.y20k.trackbook 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 @@ -152,7 +156,7 @@ class MainActivity: AppCompatActivity() override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, - grantResults: IntArray + grantResults: IntArray, ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) diff --git a/app/src/main/java/org/y20k/trackbook/MapFragment.kt b/app/src/main/java/org/y20k/trackbook/MapFragment.kt index e2bbb5c..00f2ad3 100644 --- a/app/src/main/java/org/y20k/trackbook/MapFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/MapFragment.kt @@ -309,51 +309,24 @@ class MapFragment : Fragment() } private val requestLocationPermissionLauncher = registerForActivityResult(RequestPermission()) { isGranted: Boolean -> - if (isGranted) { + if (isGranted) + { // permission was granted - re-bind service activity?.unbindService(connection) activity?.bindService(Intent(activity, TrackerService::class.java), connection, Context.BIND_AUTO_CREATE) LogHelper.i(TAG, "Request result: Location permission has been granted.") - } else { + } + else + { // permission denied - unbind service activity?.unbindService(connection) } toggleLocationErrorBar(gpsProviderActive, networkProviderActive) } - /* Register the permission launcher for starting the tracking service */ - private val startTrackingPermissionLauncher = registerForActivityResult(RequestPermission()) { isGranted: Boolean -> - if (isGranted) - { - LogHelper.i(TAG, "Request result: Activity Recognition permission has been granted.") - } - else - { - LogHelper.i(TAG, "Request result: Activity Recognition permission has NOT been granted.") - } - // start service via intent so that it keeps running after unbind - startTrackerService() - trackerService.startTracking() - } - /* Start recording waypoints */ private fun startTracking() { - // request activity recognition permission on Android Q+ if denied - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && ContextCompat.checkSelfPermission(activity as Context, Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_DENIED) - { - startTrackingPermissionLauncher.launch(Manifest.permission.ACTIVITY_RECOGNITION) - } - else - { - // start service via intent so that it keeps running after unbind - startTrackerService() - trackerService.startTracking() - } - } - - /* Start tracker service */ - private fun startTrackerService() - { + // start service via intent so that it keeps running after unbind val intent = Intent(activity, TrackerService::class.java) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // ... start service in foreground to prevent it being killed on Oreo @@ -361,8 +334,10 @@ class MapFragment : Fragment() } else { activity?.startService(intent) } + trackerService.startTracking() } + /* Handles state when service is being unbound */ private fun handleServiceUnbind() { @@ -377,7 +352,7 @@ class MapFragment : Fragment() private fun handleTrackingManagementMenu() { when (trackingState) { - Keys.STATE_TRACKING_ACTIVE -> trackerService.pauseTracking() + Keys.STATE_TRACKING_ACTIVE -> trackerService.stopTracking() Keys.STATE_TRACKING_STOPPED -> startTracking() } } @@ -390,10 +365,10 @@ class MapFragment : Fragment() if (activity != null) { trackingState = PreferencesHelper.loadTrackingState() - update_main_button() } } } + update_main_button() } fun centerMap(location: Location, animated: Boolean = false) { @@ -598,16 +573,22 @@ class MapFragment : Fragment() } } - fun toggleLocationErrorBar(gpsProviderActive: Boolean, networkProviderActive: Boolean) { - if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED) { + fun toggleLocationErrorBar(gpsProviderActive: Boolean, networkProviderActive: Boolean) + { + if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED) + { // CASE: Location permission not granted locationErrorBar.setText(R.string.snackbar_message_location_permission_denied) if (!locationErrorBar.isShown) locationErrorBar.show() - } else if (!gpsProviderActive && !networkProviderActive) { + } + else if (!gpsProviderActive && !networkProviderActive) + { // CASE: Location setting is off locationErrorBar.setText(R.string.snackbar_message_location_offline) if (!locationErrorBar.isShown) locationErrorBar.show() - } else { + } + else + { if (locationErrorBar.isShown) locationErrorBar.dismiss() } } diff --git a/app/src/main/java/org/y20k/trackbook/SettingsFragment.kt b/app/src/main/java/org/y20k/trackbook/SettingsFragment.kt index 685d378..2c0eb52 100644 --- a/app/src/main/java/org/y20k/trackbook/SettingsFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/SettingsFragment.kt @@ -25,9 +25,12 @@ import android.content.Intent import android.net.Uri import android.os.Build import android.os.Bundle +import android.os.PowerManager import android.provider.DocumentsContract +import android.provider.Settings import android.util.Log import android.view.View +import android.widget.Button import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.preference.EditTextPreference @@ -71,17 +74,27 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList preferenceCategoryGeneral.title = getString(R.string.pref_general_title) screen.addPreference(preferenceCategoryGeneral) - // set up "Restrict to GPS" preference - val preferenceGpsOnly = SwitchPreferenceCompat(activity as Context) - preferenceGpsOnly.isSingleLineTitle = false - preferenceGpsOnly.title = getString(R.string.pref_gps_only_title) - preferenceGpsOnly.setIcon(R.drawable.ic_gps_24dp) - preferenceGpsOnly.key = Keys.PREF_GPS_ONLY - preferenceGpsOnly.summaryOn = getString(R.string.pref_gps_only_summary_gps_only) - preferenceGpsOnly.summaryOff = getString(R.string.pref_gps_only_summary_gps_and_network) - preferenceGpsOnly.setDefaultValue(false) - preferenceCategoryGeneral.contains(preferenceGpsOnly) - screen.addPreference(preferenceGpsOnly) + val prefLocationGPS = SwitchPreferenceCompat(activity as Context) + prefLocationGPS.isSingleLineTitle = false + prefLocationGPS.title = getString(R.string.pref_location_gps_title) + prefLocationGPS.setIcon(R.drawable.ic_gps_24dp) + prefLocationGPS.key = Keys.PREF_LOCATION_GPS + prefLocationGPS.summaryOn = getString(R.string.pref_location_gps_summary_on) + prefLocationGPS.summaryOff = getString(R.string.pref_location_gps_summary_off) + prefLocationGPS.setDefaultValue(true) + preferenceCategoryGeneral.contains(prefLocationGPS) + screen.addPreference(prefLocationGPS) + + val prefLocationNetwork = SwitchPreferenceCompat(activity as Context) + prefLocationNetwork.isSingleLineTitle = false + prefLocationNetwork.title = getString(R.string.pref_location_network_title) + prefLocationNetwork.setIcon(R.drawable.ic_gps_24dp) + prefLocationNetwork.key = Keys.PREF_LOCATION_NETWORK + prefLocationNetwork.summaryOn = getString(R.string.pref_location_network_summary_on) + prefLocationNetwork.summaryOff = getString(R.string.pref_location_network_summary_off) + prefLocationNetwork.setDefaultValue(false) + preferenceCategoryGeneral.contains(prefLocationNetwork) + screen.addPreference(prefLocationNetwork) // set up "Use Imperial Measurements" preference val preferenceImperialMeasurementUnits = SwitchPreferenceCompat(activity as Context) @@ -114,7 +127,6 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList } screen.addPreference(preferenceThemeSelection) - // set up "Recording Accuracy" preference val preferenceOmitRests = SwitchPreferenceCompat(activity as Context) preferenceOmitRests.isSingleLineTitle = false preferenceOmitRests.title = getString(R.string.pref_omit_rests_title) @@ -178,10 +190,26 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList preferenceDatabaseFolder.summary = getString(R.string.pref_database_folder_summary) + "\n" + newValue return@setOnPreferenceChangeListener true } - preferenceCategoryGeneral.contains(preferenceDatabaseFolder) screen.addPreference(preferenceDatabaseFolder) + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) + { + if (!context.getSystemService(PowerManager::class.java).isIgnoringBatteryOptimizations(context.packageName)) + { + val battery_optimization_button = Preference(context) + battery_optimization_button.title = "Disable battery optimization" + battery_optimization_button.summary = "If your device kills the app, you can give this a try" + battery_optimization_button.setOnPreferenceClickListener { + val i: Intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).setData(Uri.parse("package:${context.packageName}")) + context.startActivity(i) + return@setOnPreferenceClickListener true + } + preferenceCategoryGeneral.contains(battery_optimization_button) + screen.addPreference(battery_optimization_button) + } + } + val preferenceCategoryAbout = PreferenceCategory(context) preferenceCategoryAbout.title = getString(R.string.pref_about_title) screen.addPreference(preferenceCategoryAbout) diff --git a/app/src/main/java/org/y20k/trackbook/Track.kt b/app/src/main/java/org/y20k/trackbook/Track.kt index f974ed0..df848b1 100644 --- a/app/src/main/java/org/y20k/trackbook/Track.kt +++ b/app/src/main/java/org/y20k/trackbook/Track.kt @@ -37,7 +37,6 @@ data class Track ( var view_latitude: Double = Keys.DEFAULT_LATITUDE, var view_longitude: Double = Keys.DEFAULT_LONGITUDE, var trackFormatVersion: Int = Keys.CURRENT_TRACK_FORMAT_VERSION, - var zoomLevel: Double = Keys.DEFAULT_ZOOM_LEVEL, ) { fun delete() diff --git a/app/src/main/java/org/y20k/trackbook/TrackerService.kt b/app/src/main/java/org/y20k/trackbook/TrackerService.kt index b3583f0..599ca14 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackerService.kt +++ b/app/src/main/java/org/y20k/trackbook/TrackerService.kt @@ -23,10 +23,6 @@ import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.content.SharedPreferences -import android.hardware.Sensor -import android.hardware.SensorEvent -import android.hardware.SensorEventListener -import android.hardware.SensorManager import android.location.Location import android.location.LocationListener import android.location.LocationManager @@ -35,13 +31,12 @@ import android.os.* import android.util.Log import androidx.core.content.ContextCompat import java.util.* -import kotlinx.coroutines.Runnable import org.y20k.trackbook.helpers.* /* * TrackerService class */ -class TrackerService: Service(), SensorEventListener +class TrackerService: Service() { /* Define log tag */ private val TAG: String = LogHelper.makeLogTag(TrackerService::class.java) @@ -51,25 +46,22 @@ class TrackerService: Service(), SensorEventListener var gpsProviderActive: Boolean = false var networkProviderActive: Boolean = false var useImperial: Boolean = false - var gpsOnly: 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 recording_started: Date = GregorianCalendar.getInstance().time - var commitInterval: Int = Keys.COMMIT_INTERVAL var currentBestLocation: Location = getDefaultLocation() var lastCommit: Long = 0 var location_min_time_ms: Long = 0 private val RECENT_TRKPT_COUNT = 7200 - var stepCountOffset: Float = 0f lateinit var recent_trkpts: Deque + lateinit var recent_displacement_trkpts: Deque var gpsLocationListenerRegistered: Boolean = false var networkLocationListenerRegistered: Boolean = false var bound: Boolean = false private val binder = LocalBinder() - private val handler: Handler = Handler(Looper.getMainLooper()) lateinit var trackbook: Trackbook private lateinit var locationManager: LocationManager - private lateinit var sensorManager: SensorManager private lateinit var notificationManager: NotificationManager private lateinit var notificationHelper: NotificationHelper private lateinit var gpsLocationListener: LocationListener @@ -77,6 +69,12 @@ class TrackerService: Service(), SensorEventListener private fun addGpsLocationListener() { + if (! use_gps_location) + { + LogHelper.v(TAG, "Skipping GPS listener.") + return + } + if (gpsLocationListenerRegistered) { LogHelper.v(TAG, "GPS location listener has already been added.") @@ -109,9 +107,9 @@ class TrackerService: Service(), SensorEventListener private fun addNetworkLocationListener() { - if (gpsOnly) + if (! use_network_location) { - LogHelper.v(TAG, "Skipping Network listener. User prefers GPS-only.") + LogHelper.v(TAG, "Skipping Network listener.") return } @@ -167,13 +165,18 @@ class TrackerService: Service(), SensorEventListener val trkpt = Trkpt(location=location) trackbook.database.insert_trkpt(device_id, trkpt) recent_trkpts.add(trkpt) - while (recent_trkpts.size > RECENT_TRKPT_COUNT) { recent_trkpts.removeFirst() } - if (now - lastCommit > Keys.SAVE_TEMP_TRACK_INTERVAL) + recent_displacement_trkpts.add(trkpt) + while (recent_displacement_trkpts.size > 5) + { + recent_displacement_trkpts.removeFirst() + } + + if (now - lastCommit > Keys.COMMIT_INTERVAL) { trackbook.database.commit() lastCommit = now @@ -211,12 +214,6 @@ class TrackerService: Service(), SensorEventListener return notification } - /* Overrides onAccuracyChanged from SensorEventListener */ - override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) - { - LogHelper.v(TAG, "Accuracy changed: $accuracy") - } - /* Overrides onBind from Service */ override fun onBind(p0: Intent?): IBinder { @@ -235,13 +232,13 @@ class TrackerService: Service(), SensorEventListener trackbook = (applicationContext as Trackbook) trackbook.load_homepoints() recent_trkpts = ArrayDeque(RECENT_TRKPT_COUNT) - gpsOnly = PreferencesHelper.loadGpsOnly() + recent_displacement_trkpts = ArrayDeque(5) + use_gps_location = PreferencesHelper.load_location_gps() + use_network_location = PreferencesHelper.load_location_network() device_id = PreferencesHelper.load_device_id() useImperial = PreferencesHelper.loadUseImperialUnits() omitRests = PreferencesHelper.loadOmitRests() - commitInterval = PreferencesHelper.loadCommitInterval() locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager - sensorManager = this.getSystemService(Context.SENSOR_SERVICE) as SensorManager notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationHelper = NotificationHelper(this) gpsProviderActive = isGpsEnabled(locationManager) @@ -260,7 +257,7 @@ class TrackerService: Service(), SensorEventListener super.onDestroy() if (trackingState == Keys.STATE_TRACKING_ACTIVE) { - pauseTracking() + stopTracking() } stopForeground(STOP_FOREGROUND_REMOVE) notificationManager.cancel(Keys.TRACKER_SERVICE_NOTIFICATION_ID) // this call was not necessary prior to Android 12 @@ -277,21 +274,6 @@ class TrackerService: Service(), SensorEventListener addNetworkLocationListener() } - /* Overrides onSensorChanged from SensorEventListener */ - override fun onSensorChanged(sensorEvent: SensorEvent?) { - var steps = 0f - if (sensorEvent != null) - { - if (stepCountOffset == 0f) - { - // store steps previously recorded by the system - stepCountOffset = (sensorEvent.values[0] - 1) - 0 // subtract any steps recorded during this session in case the app was killed - } - // calculate step count - subtract steps previously recorded - steps = sensorEvent.values[0] - stepCountOffset - } - } - /* Overrides onStartCommand from Service */ override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { @@ -306,7 +288,7 @@ class TrackerService: Service(), SensorEventListener } else if (intent.action == Keys.ACTION_STOP) { - pauseTracking() + stopTracking() } else if (intent.action == Keys.ACTION_START) { @@ -360,38 +342,23 @@ class TrackerService: Service(), SensorEventListener } } - private fun startStepCounter() - { - val stepCounterAvailable = sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER), SensorManager.SENSOR_DELAY_UI) - if (!stepCounterAvailable) - { - LogHelper.w(TAG, "Pedometer sensor not available.") - } - } - - fun startTracking(newTrack: Boolean = true) + fun startTracking() { addGpsLocationListener() addNetworkLocationListener() trackingState = Keys.STATE_TRACKING_ACTIVE - if (newTrack) - { - this.recording_started = GregorianCalendar.getInstance().time - } PreferencesHelper.saveTrackingState(trackingState) - startStepCounter() + recent_displacement_trkpts.clear() startForeground(Keys.TRACKER_SERVICE_NOTIFICATION_ID, displayNotification()) } - fun pauseTracking() + fun stopTracking() { trackbook.database.commit() trackingState = Keys.STATE_TRACKING_STOPPED PreferencesHelper.saveTrackingState(trackingState) - - sensorManager.unregisterListener(this) - + recent_displacement_trkpts.clear() displayNotification() stopForeground(STOP_FOREGROUND_DETACH) } @@ -399,13 +366,28 @@ class TrackerService: Service(), SensorEventListener private val sharedPreferenceChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key -> when (key) { - Keys.PREF_GPS_ONLY -> + Keys.PREF_LOCATION_GPS -> { - gpsOnly = PreferencesHelper.loadGpsOnly() - when (gpsOnly) + use_gps_location = PreferencesHelper.load_location_gps() + if (use_gps_location) { - true -> removeNetworkLocationListener() - false -> addNetworkLocationListener() + addGpsLocationListener() + } + else + { + removeGpsLocationListener() + } + } + Keys.PREF_LOCATION_NETWORK -> + { + use_network_location = PreferencesHelper.load_location_network() + if (use_network_location) + { + addNetworkLocationListener() + } + else + { + removeNetworkLocationListener() } } Keys.PREF_USE_IMPERIAL_UNITS -> @@ -466,11 +448,11 @@ class TrackerService: Service(), SensorEventListener return false } } - if (recent_trkpts.isEmpty()) + if (recent_displacement_trkpts.isEmpty()) { return true } - if (! isDifferentEnough(recent_trkpts.last().toLocation(), location, omitRests)) + if (! isDifferentEnough(recent_displacement_trkpts.first().toLocation(), location, omitRests)) { Log.i("VOUSSOIR", "Omitting due to too close to previous.") return false diff --git a/app/src/main/java/org/y20k/trackbook/TrackingToggleTileService.kt b/app/src/main/java/org/y20k/trackbook/TrackingToggleTileService.kt index 65ad9ff..d020b2c 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackingToggleTileService.kt +++ b/app/src/main/java/org/y20k/trackbook/TrackingToggleTileService.kt @@ -22,7 +22,6 @@ import android.graphics.drawable.Icon import android.os.Build import android.service.quicksettings.Tile import android.service.quicksettings.TileService -import org.y20k.trackbook.helpers.LogHelper import org.y20k.trackbook.helpers.PreferencesHelper /* diff --git a/app/src/main/java/org/y20k/trackbook/helpers/DateTimeHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/DateTimeHelper.kt index bf12975..179c5da 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/DateTimeHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/DateTimeHelper.kt @@ -79,17 +79,6 @@ object DateTimeHelper { return timeString } - /* Create sortable string for date - used for filenames */ - fun convertToSortableDateString(date: Date): String { - val dateFormat: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US) - return dateFormat.format(date) - } - - /* Creates a readable string for date - used in the UI */ - fun convertToReadableDate(date: Date, dateStyle: Int = DateFormat.LONG): String { - return DateFormat.getDateInstance(dateStyle, Locale.getDefault()).format(date) - } - /* Creates a readable string date and time - used in the UI */ fun convertToReadableDateAndTime(date: Date, dateStyle: Int = DateFormat.SHORT, timeStyle: Int = DateFormat.SHORT): String { return "${DateFormat.getDateInstance(dateStyle, Locale.getDefault()).format(date)} ${DateFormat.getTimeInstance(timeStyle, Locale.getDefault()).format(date)}" diff --git a/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.kt index 338573b..05f3b44 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.kt @@ -24,13 +24,8 @@ import java.util.* /* * LengthUnitHelper object */ -object LengthUnitHelper { - - /* Converts for the given unit system a distance value to a readable string */ - fun convertDistanceToString(distance: Float, useImperial: Boolean = false): String { - return convertDistanceToString(distance.toDouble(), useImperial) - } - +object LengthUnitHelper +{ /* Converts for the given unit system a distance value to a readable string */ fun convertDistanceToString(distance: Double, useImperial: Boolean = false): String { val readableDistance: Double diff --git a/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.kt index 10f82b0..9d0457f 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/NotificationHelper.kt @@ -32,11 +32,8 @@ import org.y20k.trackbook.TrackerService /* * NotificationHelper class */ -class NotificationHelper(private val trackerService: TrackerService) { - - /* Define log tag */ - private val TAG: String = LogHelper.makeLogTag(NotificationHelper::class.java) - +class NotificationHelper(private val trackerService: TrackerService) +{ /* Main class variables */ private val notificationManager: NotificationManager = trackerService.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager diff --git a/app/src/main/java/org/y20k/trackbook/helpers/PreferencesHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/PreferencesHelper.kt index 6a0a808..66c97d5 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/PreferencesHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/PreferencesHelper.kt @@ -88,18 +88,18 @@ object PreferencesHelper { return sharedPreferences.getBoolean(Keys.PREF_USE_IMPERIAL_UNITS, LengthUnitHelper.useImperialUnits()) } - fun loadGpsOnly(): Boolean { - return sharedPreferences.getBoolean(Keys.PREF_GPS_ONLY, false) + fun load_location_gps(): Boolean { + return sharedPreferences.getBoolean(Keys.PREF_LOCATION_GPS, false) + } + + fun load_location_network(): Boolean { + return sharedPreferences.getBoolean(Keys.PREF_LOCATION_NETWORK, false) } fun loadOmitRests(): Boolean { return sharedPreferences.getBoolean(Keys.PREF_OMIT_RESTS, true) } - fun loadCommitInterval(): Int { - return sharedPreferences.getInt(Keys.PREF_COMMIT_INTERVAL, Keys.COMMIT_INTERVAL) - } - /* Loads the state of a map */ fun loadCurrentBestLocation(): Location { val provider: String = sharedPreferences.getString(Keys.PREF_CURRENT_BEST_LOCATION_PROVIDER, LocationManager.NETWORK_PROVIDER) ?: LocationManager.NETWORK_PROVIDER diff --git a/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt b/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt index cb27f6d..35b2151 100644 --- a/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt +++ b/app/src/main/java/org/y20k/trackbook/tracklist/TracklistAdapter.kt @@ -30,16 +30,13 @@ import org.y20k.trackbook.Keys import org.y20k.trackbook.R import org.y20k.trackbook.Database import org.y20k.trackbook.Track -import org.y20k.trackbook.helpers.* import java.text.DateFormat import java.text.SimpleDateFormat import java.util.* class TracklistAdapter(val fragment: Fragment, val database: Database) : RecyclerView.Adapter() { - private val context: Context = fragment.activity as Context private lateinit var tracklistListener: TracklistAdapterListener - private var useImperial: Boolean = PreferencesHelper.loadUseImperialUnits() val tracks: ArrayList = ArrayList() /* Listener Interface */ diff --git a/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt b/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt index 22b3d4b..958c141 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt @@ -24,12 +24,9 @@ import android.view.ViewGroup import android.widget.ImageButton import android.widget.Toast import androidx.constraintlayout.widget.Group -import androidx.core.view.isGone -import androidx.core.view.isVisible import androidx.core.widget.NestedScrollView import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.textview.MaterialTextView -import org.osmdroid.api.IGeoPoint import org.osmdroid.api.IMapController import org.osmdroid.events.MapListener import org.osmdroid.events.ScrollEvent @@ -68,8 +65,6 @@ data class TrackFragmentLayoutHolder( private val statisticsSheet: NestedScrollView private val statisticsView: View private val distanceView: MaterialTextView - private val stepsTitleView: MaterialTextView - private val stepsView: MaterialTextView private val waypointsView: MaterialTextView private val durationView: MaterialTextView private val velocityView: MaterialTextView @@ -102,14 +97,12 @@ data class TrackFragmentLayoutHolder( mapView.setMultiTouchControls(true) mapView.zoomController.setVisibility(org.osmdroid.views.CustomZoomButtonsController.Visibility.NEVER) controller.setCenter(GeoPoint(track.view_latitude, track.view_longitude)) - controller.setZoom(track.zoomLevel) + controller.setZoom(Keys.DEFAULT_ZOOM_LEVEL) // get views for statistics sheet statisticsSheet = rootView.findViewById(R.id.statistics_sheet) statisticsView = rootView.findViewById(R.id.statistics_view) distanceView = rootView.findViewById(R.id.statistics_data_distance) - stepsTitleView = rootView.findViewById(R.id.statistics_p_steps) - stepsView = rootView.findViewById(R.id.statistics_data_steps) waypointsView = rootView.findViewById(R.id.statistics_data_waypoints) durationView = rootView.findViewById(R.id.statistics_data_duration) velocityView = rootView.findViewById(R.id.statistics_data_velocity) @@ -190,25 +183,13 @@ data class TrackFragmentLayoutHolder( /* Overrides onZoom from MapListener */ override fun onZoom(event: ZoomEvent?): Boolean { - if (event == null) { - return false - } else { - track.zoomLevel = event.zoomLevel - return true - } + return (event != null) } /* Overrides onScroll from MapListener */ override fun onScroll(event: ScrollEvent?): Boolean { - if (event == null) { - return false - } else { - val center: IGeoPoint = mapView.mapCenter - track.view_latitude = center.latitude - track.view_longitude = center.longitude - return true - } + return (event != null) } } diff --git a/app/src/main/res/layout/track_statistics.xml b/app/src/main/res/layout/track_statistics.xml index 0fd8463..94fbaa6 100755 --- a/app/src/main/res/layout/track_statistics.xml +++ b/app/src/main/res/layout/track_statistics.xml @@ -78,29 +78,6 @@ app:layout_constraintTop_toTopOf="@+id/statistics_p_distance" tools:text="@string/sample_text_default_data" /> - - - - + app:layout_constraintStart_toStartOf="@+id/statistics_p_distance" + app:layout_constraintTop_toBottomOf="@+id/statistics_p_distance" /> Samlet registreret distance Rapporter fejl og foreslå forbedringer på GitHub. I øjeblikket anvendes metriske enheder (kilometer, meter). - I øjeblikket bruger vi kun GPS til lokalisering. - I øjeblikket bruges GPS og netværk til lokalisering. - Begræns til GPS Vedligeholdelse I øjeblikket anvendes britiske enheder (miles, fødder). Samme som enhed diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index a3b5ce7..409971b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -79,8 +79,6 @@ Aufnahme wird als GPX gepeichert. Alle nicht markierten Aufnahmen löschen\? Dies kann nicht rückgängig gemacht werden. Lösche alle nicht markierten Aufnahmen - Zur Ortung wird derzeit nur GPS verwendet. - Zur Ortung werden derzeit GPS und Netzwerk verwendet. Design der Anwendung Aktuelles Design: Zurücksetzen @@ -88,7 +86,6 @@ Imperiale Maße verwenden Derzeit werden imperiale Einheiten (Meilen, Fuß) verwendet. Derzeit werden metrische Einheiten (Kilometer, Meter) verwendet. - Auf GPS beschränken Instandhaltung Generell Erweitert diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 15503cf..1e87a38 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -7,7 +7,6 @@ Segundos ...se mostrara aqui. Acerca de - Actualmente se usa solo GPS para la localización. Actualmente se utilizan unidades imperiales (millas, pies). Informar errores y sugerir mejoras en GitHub. Resumir grabación @@ -72,8 +71,6 @@ Eliminar grabaciones no destacadas General Mantenimiento - Restringir a GPS - Actualmente usando GPS y Red para localización. Actualmente se utilizan unidades métricas (Kilómetro, Metro). Utilizar medidas imperiales Reportar problema diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index bc28ee6..f215c4b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -69,9 +69,6 @@ Seuil de précision Avancé Général - N\'utiliser que le GPS - Utilise actuellement le GPS et le réseau pour la localisation. - Utilise actuellement seulement le GPS pour la localisation. Utilise actuellement les unités métriques (kilomètre, mètre). Utilise actuellement les unités impériales (miles, pieds). Utiliser les unités impériales diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 5da3568..413a4f9 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -5,7 +5,6 @@ Prosječna brzina: Spremanje snimanja kao GPX. Dijeli GPX datoteku s - Ograniči na GPS brojač koraka nije dostupan Prikaži detalje Gumb za uređivanje puta @@ -39,7 +38,6 @@ Snimanje prekinuto: Unesi novo ime Vrati sve napredne postavke na standardne vrijednosti. - Za određivanje lokacije trenutačno se koristi GPS i mreža. Snima se Isto kao uređaj Karta @@ -80,7 +78,6 @@ Ikona programa Trackbook Nastavi snimati Održavanje - Za određivanje lokacije trenutačno se koristi samo GPS. Izbriši … će se ovdje prikazati. Najniža točka rute: diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 54f7678..bc332f0 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -129,9 +129,6 @@ Gunakan Pengukuran Imperial Saat ini menggunakan satuan imperial (Miles, Feet). Saat ini menggunakan satuan metrik (Kilometer, Meter). - Saat ini hanya menggunakan GPS untuk lokalisasi. - Saat ini menggunakan GPS dan Jaringan untuk lokalisasi. - Batasi ke GPS Pemeliharaan Umum Hapus Rekaman Tidak Berbintang diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 8d355e1..0ee801d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -79,9 +79,6 @@ Cancella tutte le registrazioni non marcate Generale Manutenzione - Limita a GPS - Sto usando GPS e rete per la localizzazione. - Sto usando solo GPS per la localizzazione. Sto usando il sistema metrico (kilometri, metri). Sto usando il sistema imperiale (miglia, piedi). Usa il sistema imperiale diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 6d4b39f..51f5964 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -69,9 +69,6 @@ Nøyaktighetsterskel Avansert Generelt - Begrens til GPS - Bruker nå GPS og nettverk for posisjonering. - Bruker nå kun GPS for posisjonering. Bruker nå kun metriske enheter (kilometer, meter). Bruker nå britiske måleenheter (mil, fot). Bruk det britiske enhetssystem for mål og vekt diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index ac15150..88bdb3a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -69,9 +69,6 @@ Nauwkeurigheidsdrempel Extra Algemeen - Alleen GPS gebruiken - Gebruikt nu GPS en netwerk voor lokalisatie. - Gebruikt nu alleen GPS voor lokalisatie. Gebruikt nu metrische eenheden (kilometer, meter). Gebruikt nu imperiale eenheden (Miles, Feet). Imperiale eenheden gebruiken diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 090f55d..914b9e7 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -37,9 +37,6 @@ Raport Wydanie Obecnie używane są jednostki imperialne (mile, stopy). Obecnie używane są jednostki metryczne (Kilometr, Meter). - Obecnie używa tylko GPS do lokalizacji. - Obecnie wykorzystuje GPS i sieć do lokalizacji. - Ograniczenie do GPS Konserwacja Zaawansowane Dokładność diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index fd74e93..b4f9450 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -79,9 +79,6 @@ Apagar gravações sem estrelas Geral Manutenção - Restrito a GPS - Atualmente usando GPS e rede para localização. - Atualmente usando apenas GPS para localização. Atualmente usando sistema internacional de unidade (Kilometer, Meter). Atualmente usando sistema imperial de unidade (Miles, Feet). Usar Sistema Imperial diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 752f6da..5ccdcb4 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -63,9 +63,7 @@ Порог точности Отбросьте исправления местоположения с точностью более (метров): Удалите все записи в \"Дорожках\", не отмеченные звездочками. - В настоящее время для локализации используется GPS и сеть. В настоящее время используются метрические единицы (километр, метр). - В настоящее время для локализации используется только GPS. Сброс расширенных настроек до значений по умолчанию. Выпуск отчета Темный режим @@ -80,7 +78,6 @@ Сообщайте об ошибках и предлагайте улучшения на GitHub. Используйте имперские меры В настоящее время используются имперские единицы (мили, футы). - Ограничение на GPS Обслуживание Удаление записей, не включенных в список Общее зарегистрированное расстояние diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 7cbe535..4c2c8a1 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -82,8 +82,6 @@ Inställningar - För närvarande används GPS och nätverk för lokalisering. - Begränsa till GPS Underhåll Allmänt Ta bort inspelningar som inte är starred @@ -154,7 +152,6 @@ Markera som stjärnmärkt Återuppta inspelning Total varaktighet: - För närvarande används endast GPS för lokalisering. Ta bort alla inspelningar i \"Tracks\" som inte har stjärnor. Starta inspelning Aktuellt tema: diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a3e51db..776d9da 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -28,9 +28,6 @@ İngiliz Ölçülerini Kullan Şu anda İngiliz ölçü birimleri (mil, fit) kullanılıyor. Şu anda metrik birimler (kilometre, metre) kullanılıyor. - Konumu belirlemek için şu anda yalnızca GPS kullanılıyor. - Konumu belirlemek için şu anda GPS ve ağ kullanılıyor. - Yalnızca GPS kullan Bakım Genel Yıldızlı Olmayan Kayıtları Sil diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f4de7d3..10627ae 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -85,9 +85,6 @@ 删除未加星的记录 常规 维护 - 仅限 GPS - 当前正使用 GPS 和网络进行定位。 - 当前正仅使用 GPS 进行定位。 当前正使用公制单位(千米,米)。 当前正使用英制单位(英里,英尺)。 使用英制测量 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2d02442..c6e47d6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -95,9 +95,12 @@ Delete Non-Starred Recordings General Maintenance - Restrict to GPS - Currently using GPS and Network for location. - Currently using only GPS for location. + Use GPS location + GPS location enabled + GPS location disabled + Use Network location + Network location enabled + Network location disabled Currently using metric units (Kilometer, Meter). Currently using imperial units (Miles, Feet). Use Imperial Measurements