Skip to content

Commit

Permalink
Swapped interval slider for number pickers
Browse files Browse the repository at this point in the history
  • Loading branch information
BradPatras committed Feb 19, 2019
1 parent 93a725f commit 4958a01
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import android.content.Intent
import android.location.Location
import android.os.Binder
import android.os.IBinder
import android.util.Log
import com.google.android.gms.location.LocationCallback
import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.LocationServices
Expand Down Expand Up @@ -118,6 +119,7 @@ class LocationRecorderService : Service() {
gpx?.trackList?.last()?.segments?.last()?.addPoint(trkpt)
}
realm.close()
Log.i("RECORDER", "\n\nlocation recorded: ${System.currentTimeMillis() / 60000}\n\n")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ class RecordingConfiguratorModal : Fragment() {
configuratorView = RecordingConfiguratorView(this, initialInterval)
configuratorView.doneButton.setOnClickListener {
PreferenceManager.getDefaultSharedPreferences(context).edit()
.putFloat(RecordingConfiguration.intervalKey, configuratorView.actualInterval())
.putFloat(RecordingConfiguration.intervalKey, 1f)//configuratorView.actualInterval())
.apply()

listener?.configurationCreated (
RecordingConfiguration(
title = configuratorView.titleEditText.text.toString().takeIf { it.isNotEmpty() } ?: "Untitled",
interval = (configuratorView.actualInterval() * 60000f).toLong()
interval = (1f /*configuratorView.actualInterval() */ * 60000f).toLong()
))
this@RecordingConfiguratorModal.fragmentManager?.popBackStack()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,61 +1,38 @@
package com.iboism.gpxrecorder.recording.configurator

import android.content.Context
import android.graphics.PorterDuff
import android.support.v4.content.ContextCompat
import android.view.View
import android.widget.Button
import android.widget.SeekBar
import android.widget.TextView
import android.widget.EditText
import android.widget.NumberPicker
import com.iboism.gpxrecorder.R
import kotlin.math.roundToInt

/**
* Created by brad on 5/8/18.
*/

private const val INTERVAL_MIN = 1

class RecordingConfiguratorView(root: View,
initialIntervalMinutes: Float,
intervalValueTextView: TextView = root.findViewById(R.id.interval_value),
private val intervalSlider: SeekBar = root.findViewById(R.id.interval_seekBar),
initialIntervalMillis: Float,
val titleEditText: EditText = root.findViewById(R.id.config_title_editText),
val doneButton: Button = root.findViewById(R.id.start_button)) {
val doneButton: Button = root.findViewById(R.id.start_button),
val hoursPicker: NumberPicker = root.findViewById(R.id.interval_hours_picker),
val minutesPicker: NumberPicker = root.findViewById(R.id.interval_minutes_picker),
val secondsPicker: NumberPicker = root.findViewById(R.id.interval_seconds_picker)) {
private val context: Context = root.context

init {
val primaryColor = ContextCompat.getColor(context, R.color.colorPrimary)

intervalSlider.progressDrawable.setColorFilter(primaryColor, PorterDuff.Mode.SRC_IN)
intervalSlider.thumb.setColorFilter(primaryColor, PorterDuff.Mode.SRC_IN)
intervalSlider.max -= INTERVAL_MIN

intervalSlider.bindProgress(intervalValueTextView, initialIntervalMinutes)
}

fun actualInterval(): Float {
return (intervalSlider.progress + INTERVAL_MIN) / 2f
hoursPicker.minValue = 0
hoursPicker.maxValue = 24
hoursPicker.wrapSelectorWheel = false
minutesPicker.minValue = 0
minutesPicker.maxValue = 60
minutesPicker.wrapSelectorWheel = false
secondsPicker.minValue = 1
secondsPicker.maxValue = 60
secondsPicker.wrapSelectorWheel = false
}

private fun sliderProgressFromActual(interval: Float): Int {
return ((interval * 2) - (INTERVAL_MIN.toFloat() / 2f)).toInt()
}

private fun SeekBar.bindProgress(textView: TextView, initialValueMinutes: Float) {
this.progress = sliderProgressFromActual(initialValueMinutes)
textView.text = actualInterval().toString()
this.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onStartTrackingTouch(p0: SeekBar?) {}

override fun onStopTrackingTouch(p0: SeekBar?) {}

override fun onProgressChanged(seekBar: SeekBar?, p1: Int, p2: Boolean) {
seekBar?.let {
textView.text = actualInterval().toString()
}
}
})
fun getIntervalMillis(): Long {
return (hoursPicker.value * 3600000L) + (minutesPicker.value * 60000L) + (secondsPicker.value * 1000L)
}
}
124 changes: 101 additions & 23 deletions app/src/main/res/layout/config_dialog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:paddingTop="10dp">
android:paddingTop="10dp"
android:clickable="true">

<EditText
android:id="@+id/config_title_editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dialog_horizontal_margin"
android:layout_marginStart="@dimen/dialog_horizontal_margin"
android:layout_marginTop="24dp"
android:layout_marginEnd="@dimen/dialog_horizontal_margin"
android:hint="@string/enter_title"
android:lines="1"
android:singleLine="true"
Expand All @@ -21,17 +22,98 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title" />

<SeekBar
android:id="@+id/interval_seekBar"
<TextView
android:id="@+id/hours_lbl"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="4dp"
android:text="h"
android:textSize="16sp"
app:layout_constraintStart_toEndOf="@+id/interval_hours_picker"
app:layout_constraintEnd_toStartOf="@id/interval_minutes_picker"
app:layout_constraintTop_toTopOf="@+id/interval_minutes_picker"
app:layout_constraintBottom_toBottomOf="@id/interval_minutes_picker"/>

<TextView
android:id="@+id/minutes_lbl"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="4dp"
android:text="m"
android:textSize="16sp"
app:layout_constraintStart_toEndOf="@+id/interval_minutes_picker"
app:layout_constraintEnd_toStartOf="@id/interval_seconds_picker"
app:layout_constraintTop_toTopOf="@+id/interval_minutes_picker"
app:layout_constraintBottom_toBottomOf="@id/interval_minutes_picker"/>

<TextView
android:id="@+id/seconds_lbl"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="4dp"
android:text="s"
android:textSize="16sp"
app:layout_constraintStart_toEndOf="@+id/interval_seconds_picker"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/interval_minutes_picker"
app:layout_constraintBottom_toBottomOf="@id/interval_minutes_picker"/>

<android.support.constraint.Guideline
android:id="@+id/hguide_one_fourth"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.2" />

<android.support.constraint.Guideline
android:id="@+id/hguide_half"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent=".5" />

<android.support.constraint.Guideline
android:id="@+id/hguide_three_fourths"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.8" />

<NumberPicker
android:id="@+id/interval_hours_picker"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_marginStart="@dimen/dialog_horizontal_margin"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintRight_toRightOf="@id/hguide_one_fourth"
app:layout_constraintLeft_toLeftOf="@id/hguide_one_fourth"
app:layout_constraintTop_toBottomOf="@+id/textView2" />

<NumberPicker
android:id="@+id/interval_minutes_picker"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_marginTop="8dp"
app:layout_constraintRight_toRightOf="@id/hguide_half"
app:layout_constraintLeft_toLeftOf="@id/hguide_half"
app:layout_constraintTop_toBottomOf="@+id/textView2" />

<NumberPicker
android:id="@+id/interval_seconds_picker"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_marginStart="@dimen/dialog_horizontal_margin"
android:layout_marginTop="8dp"
android:max="60"
android:progress="1"
app:layout_constraintEnd_toStartOf="@+id/interval_value"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginEnd="8dp"
app:layout_constraintRight_toRightOf="@id/hguide_three_fourths"
app:layout_constraintLeft_toLeftOf="@id/hguide_three_fourths"
app:layout_constraintTop_toBottomOf="@+id/textView2" />

<TextView
Expand All @@ -49,28 +131,17 @@
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="@string/how_often_to_record_track_points"
android:textAlignment="textStart"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="@+id/interval_seekBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/textView2"
app:layout_constraintTop_toBottomOf="@+id/interval_seekBar" />

<TextView
android:id="@+id/interval_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dialog_horizontal_margin"
android:text="#"
app:layout_constraintBottom_toBottomOf="@+id/interval_seekBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/interval_seekBar"
app:layout_constraintTop_toTopOf="@+id/interval_seekBar" />
app:layout_constraintTop_toBottomOf="@id/interval_hours_picker" />

<Button
android:id="@+id/start_button"
Expand All @@ -94,13 +165,20 @@
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:text="@string/new_recording"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textColor="@color/colorAccent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="20dp" />

</android.support.constraint.ConstraintLayout>
2 changes: 1 addition & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
<string name="pause_recording">Pause</string>
<string name="enter_title" translatable="false">Enter Title</string>
<string name="interval_minutes" translatable="false">Interval</string>
<string name="how_often_to_record_track_points" translatable="false">How often to record track points (Minutes)</string>
<string name="how_often_to_record_track_points" translatable="false">How often to record track points</string>
<string name="start">Start</string>
<string name="new_recording">New Recording</string>
<string name="title">Title</string>
Expand Down

0 comments on commit 4958a01

Please sign in to comment.