Various linting.

This commit is contained in:
voussoir 2023-04-02 12:55:33 -07:00
parent 7788352286
commit 89035e0323
19 changed files with 37 additions and 202 deletions

View file

@ -6,7 +6,7 @@ import android.database.sqlite.SQLiteDatabase.openOrCreateDatabase
import android.util.Log import android.util.Log
import java.io.File import java.io.File
class Database(val trackbook: net.voussoir.trkpt.Trackbook) class Database(val trackbook: Trackbook)
{ {
var ready: Boolean = false var ready: Boolean = false
lateinit var file: File lateinit var file: File
@ -68,7 +68,7 @@ class Database(val trackbook: net.voussoir.trkpt.Trackbook)
this.commit() this.commit()
} }
fun insert_trkpt(trkpt: net.voussoir.trkpt.Trkpt) fun insert_trkpt(trkpt: Trkpt)
{ {
Log.i("VOUSSOIR", "Database.insert_trkpt") Log.i("VOUSSOIR", "Database.insert_trkpt")
val values = ContentValues().apply { val values = ContentValues().apply {
@ -183,7 +183,7 @@ class Database(val trackbook: net.voussoir.trkpt.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 = ${net.voussoir.trkpt.Keys.DATABASE_VERSION}", null) cursor = this.connection.rawQuery("PRAGMA user_version = ${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.

View file

@ -8,12 +8,12 @@ class Homepoint(val id: Long, val latitude: Double, val longitude: Double, val r
private fun to_location(): Location private fun to_location(): Location
{ {
val location: Location = Location("homepoint") val location = Location("homepoint")
location.latitude = latitude location.latitude = latitude
location.longitude = longitude location.longitude = longitude
location.altitude = 0.0 location.altitude = 0.0
location.accuracy = radius.toFloat() location.accuracy = radius.toFloat()
location.time = GregorianCalendar.getInstance().time.time location.time = System.currentTimeMillis()
return location return location
} }
} }

View file

@ -13,6 +13,9 @@
* Trackbook uses osmdroid - OpenStreetMap-Tools for Android * Trackbook uses osmdroid - OpenStreetMap-Tools for Android
* https://github.com/osmdroid/osmdroid * https://github.com/osmdroid/osmdroid
*/ */
/*
* Modified by voussoir for trkpt, forked from Trackbook.
*/
package net.voussoir.trkpt package net.voussoir.trkpt
@ -22,10 +25,6 @@ import java.util.*
* Keys object * Keys object
*/ */
object Keys { object Keys {
// application name
const val APPLICATION_NAME: String = "trkpt"
// axioms // axioms
const val ONE_SECOND_IN_MILLISECONDS: Long = 1000 const val ONE_SECOND_IN_MILLISECONDS: Long = 1000
const val ONE_MINUTE_IN_MILLISECONDS: Long = 60 * ONE_SECOND_IN_MILLISECONDS const val ONE_MINUTE_IN_MILLISECONDS: Long = 60 * ONE_SECOND_IN_MILLISECONDS
@ -77,7 +76,6 @@ object Keys {
// dialog types // dialog types
const val DIALOG_DELETE_TRACK: Int = 1 const val DIALOG_DELETE_TRACK: Int = 1
const val DIALOG_DELETE_NON_STARRED: Int = 2
// dialog results // dialog results
const val DIALOG_EMPTY_PAYLOAD_STRING: String = "" const val DIALOG_EMPTY_PAYLOAD_STRING: String = ""
@ -94,11 +92,8 @@ object Keys {
// default values // default values
val DEFAULT_DATE: Date = Date(0L) val DEFAULT_DATE: Date = Date(0L)
const val EMPTY_STRING_RESOURCE: Int = 0 const val EMPTY_STRING_RESOURCE: Int = 0
const val REQUEST_CURRENT_LOCATION_INTERVAL: Long = 1 * ONE_SECOND_IN_MILLISECONDS
const val SAVE_TEMP_TRACK_INTERVAL: Long = 30 * ONE_SECOND_IN_MILLISECONDS
const val SIGNIFICANT_TIME_DIFFERENCE: Long = 1 * ONE_MINUTE_IN_MILLISECONDS const val SIGNIFICANT_TIME_DIFFERENCE: Long = 1 * ONE_MINUTE_IN_MILLISECONDS
const val STOP_OVER_THRESHOLD: Long = 5 * ONE_MINUTE_IN_MILLISECONDS const val STOP_OVER_THRESHOLD: Long = 5 * ONE_MINUTE_IN_MILLISECONDS
const val IMPLAUSIBLE_TRACK_START_SPEED: Double = 250.0 // 250 km/h
const val DEFAULT_LATITUDE: Double = 71.172500 // latitude Nordkapp, Norway const val DEFAULT_LATITUDE: Double = 71.172500 // latitude Nordkapp, Norway
const val DEFAULT_LONGITUDE: Double = 25.784444 // longitude Nordkapp, Norway const val DEFAULT_LONGITUDE: Double = 25.784444 // longitude Nordkapp, Norway
const val DEFAULT_ACCURACY: Float = 300f // in meters const val DEFAULT_ACCURACY: Float = 300f // in meters
@ -111,7 +106,6 @@ object Keys {
const val DEFAULT_ZOOM_LEVEL: Double = 16.0 const val DEFAULT_ZOOM_LEVEL: Double = 16.0
const val DEFAULT_OMIT_RESTS: Boolean = true const val DEFAULT_OMIT_RESTS: Boolean = true
const val DEFAULT_ALLOW_SLEEP: Boolean = true const val DEFAULT_ALLOW_SLEEP: Boolean = true
const val ALTITUDE_MEASUREMENT_ERROR_THRESHOLD = 10 // altitude changes of 10 meter or more (per 15 seconds) are being discarded
// notification // notification
const val TRACKER_SERVICE_NOTIFICATION_ID: Int = 1 const val TRACKER_SERVICE_NOTIFICATION_ID: Int = 1

View file

@ -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 (net.voussoir.trkpt.BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
{ {
StrictMode.setVmPolicy( StrictMode.setVmPolicy(
VmPolicy.Builder() VmPolicy.Builder()
@ -62,14 +62,14 @@ 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 = net.voussoir.trkpt.BuildConfig.APPLICATION_ID Configuration.getInstance().userAgentValue = 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)
// set up views // set up views
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
navHostFragment = supportFragmentManager.findFragmentById(R.id.main_container) as NavHostFragment navHostFragment = supportFragmentManager.findFragmentById(R.id.main_container) as NavHostFragment
bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation_view) bottomNavigationView = findViewById(R.id.bottom_navigation_view)
// Prevents the UI from flickering when clicking the tab that you are already on. // Prevents the UI from flickering when clicking the tab that you are already on.
// Problem: clicking the Tracks nav while looking at a track should bring you back to the // Problem: clicking the Tracks nav while looking at a track should bring you back to the
// list of tracks. // list of tracks.

View file

@ -13,6 +13,9 @@
* Trackbook uses osmdroid - OpenStreetMap-Tools for Android * Trackbook uses osmdroid - OpenStreetMap-Tools for Android
* https://github.com/osmdroid/osmdroid * https://github.com/osmdroid/osmdroid
*/ */
/*
* Modified by voussoir for trkpt, forked from Trackbook.
*/
package net.voussoir.trkpt package net.voussoir.trkpt
@ -20,7 +23,6 @@ import android.Manifest
import android.app.Dialog import android.app.Dialog
import android.content.* import android.content.*
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.Resources
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.location.Location import android.location.Location

View file

@ -20,7 +20,6 @@
package net.voussoir.trkpt package net.voussoir.trkpt
import YesNoDialog
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@ -46,7 +45,7 @@ import net.voussoir.trkpt.helpers.LengthUnitHelper
import net.voussoir.trkpt.helpers.PreferencesHelper import net.voussoir.trkpt.helpers.PreferencesHelper
import net.voussoir.trkpt.helpers.random_device_id import net.voussoir.trkpt.helpers.random_device_id
class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogListener class SettingsFragment : PreferenceFragmentCompat()
{ {
/* Overrides onViewCreated from PreferenceFragmentCompat */ /* Overrides onViewCreated from PreferenceFragmentCompat */
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -222,7 +221,7 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
source_code.summary = "Available on github, gitlab, and codeberg." source_code.summary = "Available on github, gitlab, and codeberg."
source_code.setOnPreferenceClickListener { source_code.setOnPreferenceClickListener {
val intent = Intent(Intent.ACTION_VIEW) val intent = Intent(Intent.ACTION_VIEW)
intent.setData(Uri.parse("https://github.com/voussoir/trkpt")) intent.data = Uri.parse("https://github.com/voussoir/trkpt")
startActivity(intent) startActivity(intent)
return@setOnPreferenceClickListener true return@setOnPreferenceClickListener true
} }
@ -235,7 +234,7 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
fork_notice.summary = "Thank you y20k." fork_notice.summary = "Thank you y20k."
fork_notice.setOnPreferenceClickListener { fork_notice.setOnPreferenceClickListener {
val intent = Intent(Intent.ACTION_VIEW) val intent = Intent(Intent.ACTION_VIEW)
intent.setData(Uri.parse("https://codeberg.org/y20k/trackbook")) intent.data = Uri.parse("https://codeberg.org/y20k/trackbook")
startActivity(intent) startActivity(intent)
return@setOnPreferenceClickListener true return@setOnPreferenceClickListener true
} }
@ -248,7 +247,7 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
copyright_notice.setIcon(R.drawable.ic_map_24dp) copyright_notice.setIcon(R.drawable.ic_map_24dp)
copyright_notice.setOnPreferenceClickListener { copyright_notice.setOnPreferenceClickListener {
val intent = Intent(Intent.ACTION_VIEW) val intent = Intent(Intent.ACTION_VIEW)
intent.setData(Uri.parse("https://www.openstreetmap.org")) intent.data = Uri.parse("https://www.openstreetmap.org")
startActivity(intent) startActivity(intent)
return@setOnPreferenceClickListener true return@setOnPreferenceClickListener true
} }
@ -264,16 +263,5 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
preferenceScreen = screen preferenceScreen = screen
} }
/* Overrides onYesNoDialog from YesNoDialogListener */
override fun onYesNoDialog(type: Int, dialogResult: Boolean, payload: Int, payloadString: String) {
when (type) {
Keys.DIALOG_DELETE_NON_STARRED -> {
}
else -> {
super.onYesNoDialog(type, dialogResult, payload, payloadString)
}
}
}
} }

View file

@ -31,7 +31,7 @@ import java.text.SimpleDateFormat
import java.util.* import java.util.*
data class Track ( data class Track (
val database: net.voussoir.trkpt.Database, val database: Database,
val device_id: String, val device_id: String,
var name: String = "", var name: String = "",
var _start_time: Long = 0L, var _start_time: Long = 0L,

View file

@ -438,11 +438,12 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
style.style = Paint.Style.FILL style.style = Paint.Style.FILL
style.color = requireContext().getColor(R.color.fuchsia) style.color = requireContext().getColor(R.color.fuchsia)
style.flags = Paint.ANTI_ALIAS_FLAG style.flags = Paint.ANTI_ALIAS_FLAG
val density_scaling_factor = requireContext().resources.displayMetrics.density
val overlayOptions: SimpleFastPointOverlayOptions = SimpleFastPointOverlayOptions.getDefaultStyle() val overlayOptions: SimpleFastPointOverlayOptions = SimpleFastPointOverlayOptions.getDefaultStyle()
.setAlgorithm(SimpleFastPointOverlayOptions.RenderingAlgorithm.MEDIUM_OPTIMIZATION) .setAlgorithm(SimpleFastPointOverlayOptions.RenderingAlgorithm.MEDIUM_OPTIMIZATION)
.setSymbol(SimpleFastPointOverlayOptions.Shape.CIRCLE) .setSymbol(SimpleFastPointOverlayOptions.Shape.CIRCLE)
.setPointStyle(style) .setPointStyle(style)
.setRadius(((Keys.POLYLINE_THICKNESS + 1 ) / 2) * UiHelper.getDensityScalingFactor(requireContext())) .setRadius(((Keys.POLYLINE_THICKNESS + 1 ) / 2) * density_scaling_factor)
.setIsClickable(true) .setIsClickable(true)
.setCellSize(12) .setCellSize(12)
track_points_overlay = SimpleFastPointOverlay(pointTheme, overlayOptions) track_points_overlay = SimpleFastPointOverlay(pointTheme, overlayOptions)
@ -549,7 +550,7 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
private fun setupStatisticsViews() private fun setupStatisticsViews()
{ {
val stats: TrackStatistics = TrackStatistics(track.trkpts) val stats = TrackStatistics(track.trkpts)
trackNameView.text = track.name trackNameView.text = track.name
distanceView.text = LengthUnitHelper.convertDistanceToString(stats.distance, useImperialUnits) distanceView.text = LengthUnitHelper.convertDistanceToString(stats.distance, useImperialUnits)
waypointsView.text = track.trkpts.size.toString() waypointsView.text = track.trkpts.size.toString()

View file

@ -39,7 +39,7 @@ interface DatabaseChangedListener
class Trackbook : Application() class Trackbook : Application()
{ {
val database: net.voussoir.trkpt.Database = net.voussoir.trkpt.Database(this) val database = Database(this)
val homepoints: ArrayDeque<Homepoint> = ArrayDeque() val homepoints: ArrayDeque<Homepoint> = ArrayDeque()
val database_changed_listeners = ArrayList<DatabaseChangedListener>() val database_changed_listeners = ArrayList<DatabaseChangedListener>()

View file

@ -40,10 +40,8 @@ import android.media.ToneGenerator
import android.os.* import android.os.*
import android.util.Log import android.util.Log
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toBitmap
import net.voussoir.trkpt.helpers.* import net.voussoir.trkpt.helpers.*
import org.osmdroid.util.GeoPoint import org.osmdroid.util.GeoPoint
import java.lang.ref.WeakReference import java.lang.ref.WeakReference

View file

@ -115,17 +115,6 @@ class TracklistFragment : Fragment(), TracklistAdapter.TracklistAdapterListener,
override fun onLayoutCompleted(state: RecyclerView.State?) override fun onLayoutCompleted(state: RecyclerView.State?)
{ {
super.onLayoutCompleted(state) super.onLayoutCompleted(state)
// handle delete request from TrackFragment - after layout calculations are complete
val deleteTrackId: Long = arguments?.getLong(Keys.ARG_TRACK_ID, -1L) ?: -1L
arguments?.putLong(Keys.ARG_TRACK_ID, -1L)
if (deleteTrackId == -1L)
{
return
}
CoroutineScope(Main). launch {
tracklistAdapter.delete_track_by_id(this@TracklistFragment.activity as Context, deleteTrackId)
toggleOnboardingLayout()
}
} }
} }

View file

@ -35,7 +35,7 @@ object ErrorDialog
/* Construct and show dialog */ /* Construct and show dialog */
fun show(context: Context, errorTitle: Int, errorMessage: Int, errorDetails: String = String()) { fun show(context: Context, errorTitle: Int, errorMessage: Int, errorDetails: String = String()) {
// prepare dialog builder // prepare dialog builder
val builder: MaterialAlertDialogBuilder = MaterialAlertDialogBuilder(context, R.style.AlertDialogTheme) val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialogTheme)
// set title // set title
builder.setTitle(context.getString(errorTitle)) builder.setTitle(context.getString(errorTitle))

View file

@ -56,7 +56,7 @@ class YesNoDialog (private var yesNoDialogListener: YesNoDialogListener)
payloadString: String = Keys.DIALOG_EMPTY_PAYLOAD_STRING) { payloadString: String = Keys.DIALOG_EMPTY_PAYLOAD_STRING) {
// prepare dialog builder // prepare dialog builder
val builder: MaterialAlertDialogBuilder = MaterialAlertDialogBuilder(context, R.style.AlertDialogTheme) val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialogTheme)
// set title and message // set title and message
builder.setMessage(messageString) builder.setMessage(messageString)

View file

@ -28,12 +28,12 @@ fun iso8601_local_noms(timestamp: Long): String
fun random_int(): Int fun random_int(): Int
{ {
return abs(RNG.nextInt()) return kotlin.math.abs(RNG.nextInt())
} }
fun random_long(): Long fun random_long(): Long
{ {
return abs(RNG.nextLong()) return kotlin.math.abs(RNG.nextLong())
} }
fun random_device_id(): String fun random_device_id(): String

View file

@ -79,14 +79,14 @@ object LengthUnitHelper
/* Determines which unit system the device is using (metric or imperial) */ /* Determines which unit system the device is using (metric or imperial) */
fun useImperialUnits(): Boolean { fun useImperialUnits(): Boolean {
// America (US), Liberia (LR), Myanmar(MM) use the imperial system // America (US), Liberia (LR), Myanmar(MM) use the imperial system
val imperialSystemCountries = Arrays.asList("US", "LR", "MM") val imperialSystemCountries = listOf("US", "LR", "MM")
val countryCode = Locale.getDefault().country val countryCode = Locale.getDefault().country
return imperialSystemCountries.contains(countryCode) return imperialSystemCountries.contains(countryCode)
} }
/* Converts for the given unit System distance and duration values to a readable velocity string */ /* Converts for the given unit System distance and duration values to a readable velocity string */
fun convertToVelocityString(velocity: Double, useImperialUnits: Boolean = false) : String { fun convertToVelocityString(velocity: Double, useImperialUnits: Boolean = false) : String {
var speed: String = "0" var speed = "0"
if (velocity > 0.0) { if (velocity > 0.0) {
// speed in km/h / mph // speed in km/h / mph

View file

@ -26,11 +26,9 @@ import org.osmdroid.views.overlay.ItemizedIconOverlay
import org.osmdroid.views.overlay.OverlayItem import org.osmdroid.views.overlay.OverlayItem
import net.voussoir.trkpt.R import net.voussoir.trkpt.R
import net.voussoir.trkpt.Trkpt import net.voussoir.trkpt.Trkpt
import java.text.DecimalFormat
import java.text.SimpleDateFormat
import java.util.* import java.util.*
fun create_start_end_markers(context: Context, map_view: MapView, startpoint: Trkpt, endpoint: Trkpt): ItemizedIconOverlay<OverlayItem>? fun create_start_end_markers(context: Context, map_view: MapView, startpoint: Trkpt, endpoint: Trkpt): ItemizedIconOverlay<OverlayItem>
{ {
Log.i("VOUSSOIR", "MapOverlayHelper.create_start_end_markers") Log.i("VOUSSOIR", "MapOverlayHelper.create_start_end_markers")
val overlayItems: ArrayList<OverlayItem> = ArrayList<OverlayItem>() val overlayItems: ArrayList<OverlayItem> = ArrayList<OverlayItem>()

View file

@ -1,101 +0,0 @@
/*
* UiHelper.kt
* Implements the UiHelper object
* A UiHelper provides helper methods for User Interface related tasks
*
* This file is part of
* TRACKBOOK - Movement Recorder for Android
*
* Copyright (c) 2016-22 - Y20K.org
* Licensed under the MIT-License
* http://opensource.org/licenses/MIT
*
* Trackbook uses osmdroid - OpenStreetMap-Tools for Android
* https://github.com/osmdroid/osmdroid
*/
package net.voussoir.trkpt.helpers
import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.PorterDuff
import android.graphics.PorterDuffXfermode
import android.graphics.drawable.ColorDrawable
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import net.voussoir.trkpt.R
/*
* UiHelper object
*/
object UiHelper {
/* Get scaling factor from display density */
fun getDensityScalingFactor(context: Context): Float {
return context.resources.displayMetrics.density
}
/*
* Inner class: Callback that detects a left swipe
* Credit: https://github.com/kitek/android-rv-swipe-delete/blob/master/app/src/main/java/pl/kitek/rvswipetodelete/SwipeToDeleteCallback.kt
*/
abstract class SwipeToDeleteCallback(context: Context): ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
private val deleteIcon = ContextCompat.getDrawable(context, R.drawable.ic_remove_circle_24dp)
private val intrinsicWidth: Int = deleteIcon?.intrinsicWidth ?: 0
private val intrinsicHeight: Int = deleteIcon?.intrinsicHeight ?: 0
private val background: ColorDrawable = ColorDrawable()
private val backgroundColor = context.resources.getColor(R.color.list_card_delete_background, null)
private val clearPaint: Paint = Paint().apply { xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR) }
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
// do nothing
return false
}
override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
val itemView = viewHolder.itemView
val itemHeight = itemView.bottom - itemView.top
val isCanceled = dX == 0f && !isCurrentlyActive
if (isCanceled) {
clearCanvas(c, itemView.right + dX, itemView.top.toFloat(), itemView.right.toFloat(), itemView.bottom.toFloat())
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
return
}
// draw red delete background
background.color = backgroundColor
background.setBounds(
itemView.right + dX.toInt(),
itemView.top,
itemView.right,
itemView.bottom
)
background.draw(c)
// calculate position of delete icon
val deleteIconTop = itemView.top + (itemHeight - intrinsicHeight) / 2
val deleteIconMargin = (itemHeight - intrinsicHeight) / 2
val deleteIconLeft = itemView.right - deleteIconMargin - intrinsicWidth
val deleteIconRight = itemView.right - deleteIconMargin
val deleteIconBottom = deleteIconTop + intrinsicHeight
// draw delete icon
deleteIcon?.setBounds(deleteIconLeft, deleteIconTop, deleteIconRight, deleteIconBottom)
deleteIcon?.draw(c)
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
}
private fun clearCanvas(c: Canvas?, left: Float, top: Float, right: Float, bottom: Float) {
c?.drawRect(left, top, right, bottom, clearPaint)
}
}
/*
* End of inner class
*/
}

View file

@ -34,7 +34,7 @@ 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: net.voussoir.trkpt.Database) : RecyclerView.Adapter<RecyclerView.ViewHolder>() class TracklistAdapter(val fragment: Fragment, val database: 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>()
@ -64,15 +64,12 @@ class TracklistAdapter(val fragment: Fragment, val database: net.voussoir.trkpt.
{ {
val trackdate = cursor.getString(0) val trackdate = cursor.getString(0)
val device_id = cursor.getString(1) val device_id = cursor.getString(1)
val start_time: Long? = df.parse(trackdate + "T00:00:00.000").time val start_time: Long = df.parse(trackdate + "T00:00:00.000").time
val stop_time: Long? = df.parse(trackdate + "T23:59:59.999").time val stop_time: Long = df.parse(trackdate + "T23:59:59.999").time
Log.i("VOUSSOIR", "TracklistAdapter prep track ${trackdate}") Log.i("VOUSSOIR", "TracklistAdapter prep track ${trackdate}")
if (start_time != null && stop_time != null) val track = Track(database=database, device_id=device_id, _start_time=start_time, _end_time=stop_time)
{ track.name = "$trackdate $device_id"
val track = Track(database=database, device_id=device_id, _start_time=start_time, _end_time=stop_time) tracks.add(track)
track.name = "$trackdate $device_id"
tracks.add(track)
}
} }
} }
finally finally
@ -118,27 +115,6 @@ class TracklistAdapter(val fragment: Fragment, val database: net.voussoir.trkpt.
return SimpleDateFormat("yyyy-MM-dd", Locale.US).format(tracks[positionInRecyclerView]._start_time) return SimpleDateFormat("yyyy-MM-dd", Locale.US).format(tracks[positionInRecyclerView]._start_time)
} }
fun delete_track_at_position(context: Context, index: Int)
{
// val track = tracklist.tracks[index]
// track.delete()
// tracklist.tracks.remove(track)
// notifyItemRemoved(index)
// notifyItemRangeChanged(index, this.itemCount);
}
fun delete_track_by_id(context: Context, trackId: Long)
{
// val index: Int = tracklist.tracks.indexOfFirst {it.id == trackId}
// if (index == -1) {
// return
// }
// tracklist.tracks[index].delete()
// tracklist.tracks.removeAt(index)
// notifyItemRemoved(index)
// notifyItemRangeChanged(index, this.itemCount);
}
fun isEmpty(): Boolean fun isEmpty(): Boolean
{ {
return tracks.size == 0 return tracks.size == 0
@ -149,17 +125,6 @@ class TracklistAdapter(val fragment: Fragment, val database: net.voussoir.trkpt.
{ {
val track: Track = tracks[position] val track: Track = tracks[position]
return "device: " + track.device_id return "device: " + track.device_id
// val track_duration_string = DateTimeHelper.convertToReadableTime(context, track.duration)
// val trackDataString: String
// if (track.name == track.dateString)
// {
// trackDataString = "${LengthUnitHelper.convertDistanceToString(track.distance, useImperial)} • ${track_duration_string}"
// }
// else
// {
// trackDataString = "${track.dateString} • ${LengthUnitHelper.convertDistanceToString(track.distance, useImperial)} • ${track_duration_string}"
// }
// return trackDataString
} }
inner class ElementTrackViewHolder (elementTrackLayout: View): RecyclerView.ViewHolder(elementTrackLayout) { inner class ElementTrackViewHolder (elementTrackLayout: View): RecyclerView.ViewHolder(elementTrackLayout) {

View file

@ -92,6 +92,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
app:fontFamily="monospace"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"