diff --git a/app/src/main/java/org/y20k/trackbook/MapFragment.kt b/app/src/main/java/org/y20k/trackbook/MapFragment.kt index 275fa4e..4d5894a 100644 --- a/app/src/main/java/org/y20k/trackbook/MapFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/MapFragment.kt @@ -33,7 +33,6 @@ import android.view.WindowManager import android.widget.Button import android.widget.EditText import android.widget.TextView -import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts.RequestPermission import androidx.core.content.ContextCompat import androidx.core.view.isVisible @@ -71,7 +70,6 @@ class MapFragment : Fragment() private var trackingState: Int = Keys.STATE_TRACKING_STOPPED private var gpsProviderActive: Boolean = false private var networkProviderActive: Boolean = false - private lateinit var track: Track private lateinit var currentBestLocation: Location private lateinit var trackerService: TrackerService @@ -185,12 +183,13 @@ class MapFragment : Fragment() dialog.cancel() } save_button.setOnClickListener { + val radius = radius_input.text.toString().toDoubleOrNull() ?: 25.0 trackbook.database.insert_homepoint( id=random_long(), name=name_input.text.toString(), latitude=point.latitude, longitude=point.longitude, - radius=radius_input.text.toString().toDouble(), + radius=radius, ) trackbook.load_homepoints() create_homepoint_overlays(requireContext(), mapView, trackbook.homepoints) @@ -221,6 +220,7 @@ class MapFragment : Fragment() mapView.setOnTouchListener { v, event -> continuous_auto_center = false + zoomLevel = mapView.zoomLevelDouble false } @@ -229,13 +229,15 @@ class MapFragment : Fragment() handleTrackingManagementMenu() } currentLocationButton.setOnClickListener { - centerMap(currentBestLocation, animated = true) + centerMap(currentBestLocation, animated=true) } zoom_in_button.setOnClickListener { - controller.zoomTo(mapView.zoomLevelDouble + 0.5, 250) + zoomLevel += 0.5 + controller.zoomTo(mapView.zoomLevelDouble + 0.5, 0) } zoom_out_button.setOnClickListener { - controller.zoomTo(mapView.zoomLevelDouble - 0.5, 250) + zoomLevel -= 0.5 + controller.zoomTo(mapView.zoomLevelDouble - 0.5, 0) } requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) @@ -247,7 +249,8 @@ class MapFragment : Fragment() { super.onStart() // request location permission if denied - if (ContextCompat.checkSelfPermission(activity as Context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED) { + if (ContextCompat.checkSelfPermission(activity as Context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED) + { requestLocationPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION) } // bind to TrackerService @@ -556,7 +559,7 @@ class MapFragment : Fragment() } /* Overlay current track on map */ - fun create_current_track_overlay(track: Track, trackingState: Int) + fun create_current_track_overlay(trkpts: Collection, trackingState: Int) { if (currentTrackOverlay != null) { mapView.overlays.remove(currentTrackOverlay) @@ -564,9 +567,9 @@ class MapFragment : Fragment() if (currentTrackSpecialMarkerOverlay != null) { mapView.overlays.remove(currentTrackSpecialMarkerOverlay) } - if (track.trkpts.isNotEmpty()) { - createTrackOverlay(requireContext(), mapView, track, trackingState) - createSpecialMakersTrackOverlay(requireContext(), mapView, track, trackingState) + if (trkpts.isNotEmpty()) { + createTrackOverlay(requireContext(), mapView, trkpts, trackingState) + createSpecialMakersTrackOverlay(requireContext(), mapView, trkpts, trackingState) } } @@ -608,7 +611,8 @@ class MapFragment : Fragment() } private val connection = object : ServiceConnection { - override fun onServiceConnected(className: ComponentName, service: IBinder) { + override fun onServiceConnected(className: ComponentName, service: IBinder) + { bound = true // get reference to tracker service val binder = service as TrackerService.LocalBinder @@ -622,7 +626,8 @@ class MapFragment : Fragment() handler.removeCallbacks(periodicLocationRequestRunnable) handler.postDelayed(periodicLocationRequestRunnable, 0) } - override fun onServiceDisconnected(arg0: ComponentName) { + override fun onServiceDisconnected(arg0: ComponentName) + { // service has crashed, or was killed by the system handleServiceUnbind() } @@ -632,17 +637,16 @@ class MapFragment : Fragment() override fun run() { currentBestLocation = trackerService.currentBestLocation - track = trackerService.track gpsProviderActive = trackerService.gpsProviderActive networkProviderActive = trackerService.networkProviderActive trackingState = trackerService.trackingState // update location and track create_current_position_overlays(currentBestLocation, trackingState) - create_current_track_overlay(track, trackingState) + create_current_track_overlay(trackerService.recent_trkpts, trackingState) // center map, if it had not been dragged/zoomed before if (continuous_auto_center) { - centerMap(currentBestLocation, true) + centerMap(currentBestLocation, animated=false) } handler.postDelayed(this, Keys.REQUEST_CURRENT_LOCATION_INTERVAL) } diff --git a/app/src/main/java/org/y20k/trackbook/Track.kt b/app/src/main/java/org/y20k/trackbook/Track.kt index ee1b195..70f73ab 100644 --- a/app/src/main/java/org/y20k/trackbook/Track.kt +++ b/app/src/main/java/org/y20k/trackbook/Track.kt @@ -26,8 +26,6 @@ import android.widget.Toast import org.y20k.trackbook.helpers.iso8601_format import java.text.SimpleDateFormat import java.util.* -import kotlin.coroutines.resume -import kotlin.coroutines.suspendCoroutine data class Track ( val database: Database, diff --git a/app/src/main/java/org/y20k/trackbook/TrackFragment.kt b/app/src/main/java/org/y20k/trackbook/TrackFragment.kt index adba08d..7902b2c 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/TrackFragment.kt @@ -29,14 +29,13 @@ import android.widget.Toast import androidx.activity.result.ActivityResult import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult import androidx.fragment.app.Fragment -import org.y20k.trackbook.dialogs.RenameTrackDialog import org.y20k.trackbook.helpers.LogHelper import org.y20k.trackbook.helpers.iso8601_format import org.y20k.trackbook.ui.TrackFragmentLayoutHolder import java.text.SimpleDateFormat import java.util.* -class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDialog.YesNoDialogListener +class TrackFragment : Fragment(), YesNoDialog.YesNoDialogListener { /* Define log tag */ private val TAG: String = LogHelper.makeLogTag(TrackFragment::class.java) @@ -59,12 +58,12 @@ class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDi layout = TrackFragmentLayoutHolder(activity as Context, inflater, container, track) // set up share button - layout.shareButton.setOnClickListener { + layout.save_track_button.setOnClickListener { openSaveGpxDialog() } // set up delete button layout.deleteButton.setOnClickListener { - val dialogMessage = "${getString(R.string.dialog_yes_no_message_delete_recording)}\n\n- ${layout.trackNameView.text}" + val dialogMessage = "${getString(R.string.dialog_yes_no_message_delete_recording)}\n\n${layout.trackNameView.text}" YesNoDialog(this@TrackFragment as YesNoDialog.YesNoDialogListener).show( context = activity as Context, type = Keys.DIALOG_DELETE_TRACK, @@ -72,10 +71,6 @@ class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDi yesButton = R.string.dialog_yes_no_positive_button_delete_recording ) } - // set up rename button - layout.editButton.setOnClickListener { - RenameTrackDialog(this as RenameTrackDialog.RenameTrackListener).show(activity as Context, layout.trackNameView.text.toString()) - } return layout.rootView } @@ -135,7 +130,6 @@ class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDi /* Opens up a file picker to select the save location */ private fun openSaveGpxDialog() { - val context = this.activity as Context val export_name: String = SimpleDateFormat("yyyy-MM-dd", Locale.US).format(layout.track.start_time) + " " + layout.track.device_id + Keys.GPX_FILE_EXTENSION val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply { addCategory(Intent.CATEGORY_OPENABLE) diff --git a/app/src/main/java/org/y20k/trackbook/TrackerService.kt b/app/src/main/java/org/y20k/trackbook/TrackerService.kt index 9e03629..287b4f6 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackerService.kt +++ b/app/src/main/java/org/y20k/trackbook/TrackerService.kt @@ -31,7 +31,6 @@ import android.location.Location import android.location.LocationListener import android.location.LocationManager import android.Manifest -import android.content.ContentValues import android.os.* import android.util.Log import androidx.core.content.ContextCompat @@ -60,8 +59,9 @@ class TrackerService: Service(), SensorEventListener var currentBestLocation: Location = getDefaultLocation() var lastCommit: Date = Keys.DEFAULT_DATE var location_min_time_ms: Long = 0 + private val RECENT_TRKPT_COUNT = 7200 var stepCountOffset: Float = 0f - lateinit var track: Track + lateinit var recent_trkpts: Deque var gpsLocationListenerRegistered: Boolean = false var networkLocationListenerRegistered: Boolean = false var bound: Boolean = false @@ -170,10 +170,6 @@ class TrackerService: Service(), SensorEventListener LocationManager.NETWORK_PROVIDER -> networkProviderActive = isNetworkEnabled(locationManager) } } - override fun onStatusChanged(p0: String?, p1: Int, p2: Bundle?) - { - // deprecated method - } } } @@ -211,9 +207,9 @@ class TrackerService: Service(), SensorEventListener super.onCreate() trackbook = (applicationContext as Trackbook) trackbook.load_homepoints() + recent_trkpts = ArrayDeque(RECENT_TRKPT_COUNT) gpsOnly = PreferencesHelper.loadGpsOnly() device_id = PreferencesHelper.load_device_id() - track = Track(trackbook.database, device_id, start_time=GregorianCalendar.getInstance().time, stop_time=Date(GregorianCalendar.getInstance().time.time + 86400)) useImperial = PreferencesHelper.loadUseImperialUnits() omitRests = PreferencesHelper.loadOmitRests() commitInterval = PreferencesHelper.loadCommitInterval() @@ -445,11 +441,11 @@ class TrackerService: Service(), SensorEventListener return false } } - if (track.trkpts.isEmpty()) + if (recent_trkpts.isEmpty()) { return true } - if (! isDifferentEnough(track.trkpts.last().toLocation(), location, omitRests)) + if (! isDifferentEnough(recent_trkpts.last().toLocation(), location, omitRests)) { Log.i("VOUSSOIR", "Omitting due to too close to previous.") return false @@ -466,11 +462,11 @@ class TrackerService: Service(), SensorEventListener if (should_keep_point((currentBestLocation))) { trackbook.database.insert_trkpt(device_id, trkpt) - track.trkpts.add(trkpt) + recent_trkpts.add(trkpt) - while (track.trkpts.size > 7200) + while (recent_trkpts.size > RECENT_TRKPT_COUNT) { - track.trkpts.removeFirst() + recent_trkpts.removeFirst() } if (now.time - lastCommit.time > Keys.SAVE_TEMP_TRACK_INTERVAL) diff --git a/app/src/main/java/org/y20k/trackbook/dialogs/RenameTrackDialog.kt b/app/src/main/java/org/y20k/trackbook/dialogs/RenameTrackDialog.kt deleted file mode 100644 index d01099c..0000000 --- a/app/src/main/java/org/y20k/trackbook/dialogs/RenameTrackDialog.kt +++ /dev/null @@ -1,81 +0,0 @@ -/* - * RenameTrackDialog.kt - * Implements the RenameTrackDialog class - * A RenameTrackDialog offers user to change name of track - * - * 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 org.y20k.trackbook.dialogs - -import android.content.Context -import android.text.InputType -import android.view.LayoutInflater -import android.widget.EditText -import android.widget.TextView -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import org.y20k.trackbook.R -import org.y20k.trackbook.helpers.LogHelper - -/* - * RenameTrackDialog class - */ -class RenameTrackDialog (private var renameTrackListener: RenameTrackListener) { - - /* Interface used to communicate back to activity */ - interface RenameTrackListener { - fun onRenameTrackDialog(textInput: String) { - } - } - - /* Define log tag */ - private val TAG = LogHelper.makeLogTag(RenameTrackDialog::class.java.simpleName) - - /* Construct and show dialog */ - fun show(context: Context, trackName: String) { - // prepare dialog builder - val builder: MaterialAlertDialogBuilder = MaterialAlertDialogBuilder(context, R.style.AlertDialogTheme) - - // get input field - val inflater = LayoutInflater.from(context) - val view = inflater.inflate(R.layout.dialog_rename_track, null) - val inputField = view.findViewById(R.id.dialog_rename_track_input_edit_text) - - // pre-fill with current track name - inputField.setText(trackName, TextView.BufferType.EDITABLE) - inputField.setSelection(trackName.length) - inputField.inputType = InputType.TYPE_CLASS_TEXT - inputField.requestFocus() - - // set dialog view - builder.setView(view) - - // add "add" button - builder.setPositiveButton(R.string.dialog_rename_track_button) { _, _ -> - // hand text over to initiating activity - inputField.text?.let { - var newStationName: String = it.toString() - if (newStationName.isEmpty()) newStationName = trackName - renameTrackListener.onRenameTrackDialog(newStationName) - } - } - - // add cancel button - builder.setNegativeButton(R.string.dialog_generic_button_cancel) { _, _ -> - // listen for click on cancel button - // do nothing - } - - // display add dialog - builder.show() - } - -} \ No newline at end of file diff --git a/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt index 41c3ee3..08692ea 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/MapOverlayHelper.kt @@ -31,30 +31,26 @@ import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlayOptions import org.osmdroid.views.overlay.simplefastpoint.SimplePointTheme import org.y20k.trackbook.Keys import org.y20k.trackbook.R -import org.y20k.trackbook.Track import org.y20k.trackbook.Trkpt import java.text.DecimalFormat import java.text.SimpleDateFormat import java.util.* /* Creates icon overlay for track */ -fun createTrackOverlay(context: Context, map_view: MapView, track: Track, trackingState: Int) +fun createTrackOverlay(context: Context, map_view: MapView, trkpts: Collection, trackingState: Int) { - // get marker color val color = if (trackingState == Keys.STATE_TRACKING_ACTIVE) context.getColor(R.color.default_red) else context.getColor(R.color.default_blue) - // gather points for overlay val points: MutableList = mutableListOf() - track.trkpts.forEach { wayPoint -> - val label: String = "${context.getString(R.string.marker_description_time)}: ${SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault()).format(wayPoint.time)} | ${context.getString(R.string.marker_description_accuracy)}: ${DecimalFormat("#0.00").format(wayPoint.accuracy)} (${wayPoint.provider})" + trkpts.forEach { trkpt -> + val label = "${context.getString(R.string.marker_description_time)}: ${SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault()).format(trkpt.time)} | ${context.getString(R.string.marker_description_accuracy)}: ${DecimalFormat("#0.00").format(trkpt.accuracy)} (${trkpt.provider})" // only add normal points - if (!wayPoint.starred) + if (!trkpt.starred) { - points.add(LabelledGeoPoint(wayPoint.latitude, wayPoint.longitude, wayPoint.altitude, label)) + points.add(LabelledGeoPoint(trkpt.latitude, trkpt.longitude, trkpt.altitude, label)) } } val pointTheme: SimplePointTheme = SimplePointTheme(points, false) - // set styling for overlay - val style: Paint = Paint() + val style = Paint() style.style = Paint.Style.FILL style.color = color style.flags = Paint.ANTI_ALIAS_FLAG @@ -64,20 +60,20 @@ fun createTrackOverlay(context: Context, map_view: MapView, track: Track, tracki .setSymbol(SimpleFastPointOverlayOptions.Shape.CIRCLE) .setPointStyle(style) .setRadius(6F * scalingFactor) // radius is set in px - scaling factor makes that display density independent (= dp) - .setIsClickable(true) + .setIsClickable(false) .setCellSize(12) // Sets the grid cell size used for indexing, in pixels. Larger cells result in faster rendering speed, but worse fidelity. Default is 10 pixels, for large datasets (>10k points), use 15. val overlay = SimpleFastPointOverlay(pointTheme, overlayOptions) map_view.overlays.add(overlay) } /* Creates overlay containing start, stop, stopover and starred markers for track */ -fun createSpecialMakersTrackOverlay(context: Context, map_view: MapView, track: Track, trackingState: Int, displayStartEndMarker: Boolean = false) +fun createSpecialMakersTrackOverlay(context: Context, map_view: MapView, trkpts: Collection, trackingState: Int, displayStartEndMarker: Boolean = false) { val overlayItems: ArrayList = ArrayList() val trackingActive: Boolean = trackingState == Keys.STATE_TRACKING_ACTIVE - val maxIndex: Int = track.trkpts.size - 1 + val maxIndex: Int = trkpts.size - 1 - track.trkpts.forEachIndexed { index: Int, trkpt: Trkpt -> + trkpts.forEachIndexed { index: Int, trkpt: Trkpt -> var overlayItem: OverlayItem? = null if (!trackingActive && index == 0 && displayStartEndMarker && trkpt.starred) { 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 8b856d8..1de22d9 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt @@ -37,18 +37,14 @@ import org.osmdroid.events.ZoomEvent import org.osmdroid.tileprovider.tilesource.TileSourceFactory import org.osmdroid.util.GeoPoint import org.osmdroid.views.MapView -import org.osmdroid.views.overlay.ItemizedIconOverlay -import org.osmdroid.views.overlay.OverlayItem import org.osmdroid.views.overlay.TilesOverlay import org.osmdroid.views.overlay.compass.CompassOverlay import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider -import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlay import org.y20k.trackbook.Keys import org.y20k.trackbook.R import org.y20k.trackbook.Track import org.y20k.trackbook.TrackStatistics import org.y20k.trackbook.helpers.* -import kotlin.math.roundToInt /* * TrackFragmentLayoutHolder class @@ -63,9 +59,8 @@ data class TrackFragmentLayoutHolder( { /* Main class variables */ val rootView: View - val shareButton: ImageButton + val save_track_button: ImageButton val deleteButton: ImageButton - val editButton: ImageButton val trackNameView: MaterialTextView private val mapView: MapView private var controller: IMapController @@ -87,17 +82,15 @@ data class TrackFragmentLayoutHolder( private val positiveElevationView: MaterialTextView private val negativeElevationView: MaterialTextView private val elevationDataViews: Group - private val trackManagementViews: Group private val useImperialUnits: Boolean - /* Init block */ - init { + init + { // find views rootView = inflater.inflate(R.layout.fragment_track, container, false) mapView = rootView.findViewById(R.id.map) - shareButton = rootView.findViewById(R.id.save_button) + save_track_button = rootView.findViewById(R.id.save_button) deleteButton = rootView.findViewById(R.id.delete_button) - editButton = rootView.findViewById(R.id.edit_button) trackNameView = rootView.findViewById(R.id.statistics_track_name_headline) // basic map setup @@ -128,7 +121,6 @@ data class TrackFragmentLayoutHolder( positiveElevationView = rootView.findViewById(R.id.statistics_data_positive_elevation) negativeElevationView = rootView.findViewById(R.id.statistics_data_negative_elevation) elevationDataViews = rootView.findViewById(R.id.elevation_data) - trackManagementViews = rootView.findViewById(R.id.management_icons) // get measurement unit system useImperialUnits = PreferencesHelper.loadUseImperialUnits() @@ -146,14 +138,13 @@ data class TrackFragmentLayoutHolder( mapView.overlays.add(compassOverlay) if (track.trkpts.isNotEmpty()) { - createSpecialMakersTrackOverlay(context, mapView, track, Keys.STATE_TRACKING_STOPPED, displayStartEndMarker = true) - createTrackOverlay(context, mapView, track, Keys.STATE_TRACKING_STOPPED) + createSpecialMakersTrackOverlay(context, mapView, track.trkpts, Keys.STATE_TRACKING_STOPPED, displayStartEndMarker = true) + createTrackOverlay(context, mapView, track.trkpts, Keys.STATE_TRACKING_STOPPED) } // set up and show statistics sheet statisticsSheetBehavior = BottomSheetBehavior.from(statisticsSheet) statisticsSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED - statisticsSheetBehavior.addBottomSheetCallback(getStatisticsSheetCallback()) setupStatisticsViews() } @@ -187,44 +178,17 @@ data class TrackFragmentLayoutHolder( } /* Shows/hides the statistics sheet */ - private fun toggleStatisticsSheetVisibility() { + private fun toggleStatisticsSheetVisibility() + { when (statisticsSheetBehavior.state) { BottomSheetBehavior.STATE_EXPANDED -> statisticsSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED else -> statisticsSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED } } - /* Defines the behavior of the statistics sheet */ - private fun getStatisticsSheetCallback(): BottomSheetBehavior.BottomSheetCallback { - return object : BottomSheetBehavior.BottomSheetCallback() { - override fun onStateChanged(bottomSheet: View, newState: Int) { - when (newState) { - BottomSheetBehavior.STATE_EXPANDED -> { - trackManagementViews.isVisible = true - shareButton.isGone = true - // bottomSheet.setPadding(0,24,0,0) - } - else -> { - trackManagementViews.isGone = true - shareButton.isVisible = true - // bottomSheet.setPadding(0,0,0,0) - } - } - } - override fun onSlide(bottomSheet: View, slideOffset: Float) { - if (slideOffset < 0.125f) { - trackManagementViews.isGone = true - shareButton.isVisible = true - } else { - trackManagementViews.isVisible = true - shareButton.isGone = true - } - } - } - } - /* Overrides onZoom from MapListener */ - override fun onZoom(event: ZoomEvent?): Boolean { + override fun onZoom(event: ZoomEvent?): Boolean + { if (event == null) { return false } else { @@ -234,7 +198,8 @@ data class TrackFragmentLayoutHolder( } /* Overrides onScroll from MapListener */ - override fun onScroll(event: ScrollEvent?): Boolean { + override fun onScroll(event: ScrollEvent?): Boolean + { if (event == null) { return false } else { diff --git a/app/src/main/res/layout/track_statistics.xml b/app/src/main/res/layout/track_statistics.xml index 793dd01..0fd8463 100755 --- a/app/src/main/res/layout/track_statistics.xml +++ b/app/src/main/res/layout/track_statistics.xml @@ -15,14 +15,6 @@ android:layout_height="wrap_content" app:constraint_referenced_ids="statistics_p_positive_elevation,statistics_data_positive_elevation,statistics_p_negative_elevation,statistics_data_negative_elevation,statistics_p_max_altitude,statistics_data_max_altitude,statistics_p_min_altitude,statistics_data_min_altitude" /> - - - @@ -46,21 +38,10 @@ android:layout_height="wrap_content" android:backgroundTint="@color/default_transparent" android:contentDescription="@string/descr_statistics_sheet_delete_button" - app:layout_constraintBottom_toBottomOf="@+id/edit_button" - app:layout_constraintEnd_toStartOf="@+id/save_button" - app:layout_constraintTop_toTopOf="@+id/edit_button" - app:srcCompat="@drawable/ic_delete_24dp" /> - - + app:srcCompat="@drawable/ic_delete_24dp" /> Map - Tracks + History Settings Trackbook running