forked from penguin86/luna-tracker
Compare commits
1 Commits
note_defau
...
bottle_tim
| Author | SHA1 | Date | |
|---|---|---|---|
| 5be2917839 |
@@ -21,6 +21,7 @@ import android.widget.Toast
|
|||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.core.widget.doOnTextChanged
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.google.android.material.progressindicator.LinearProgressIndicator
|
import com.google.android.material.progressindicator.LinearProgressIndicator
|
||||||
@@ -128,10 +129,6 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getAllEvents(): ArrayList<LunaEvent> {
|
|
||||||
return logbook?.logs ?: arrayListOf()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setListAdapter(items: ArrayList<LunaEvent>) {
|
private fun setListAdapter(items: ArrayList<LunaEvent>) {
|
||||||
val adapter = LunaEventRecyclerAdapter(this, items)
|
val adapter = LunaEventRecyclerAdapter(this, items)
|
||||||
adapter.onItemClickListener = object: LunaEventRecyclerAdapter.OnItemClickListener {
|
adapter.onItemClickListener = object: LunaEventRecyclerAdapter.OnItemClickListener {
|
||||||
@@ -199,23 +196,59 @@ class MainActivity : AppCompatActivity() {
|
|||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getAllEvents(): ArrayList<LunaEvent> {
|
||||||
|
return logbook?.logs ?: arrayListOf()
|
||||||
|
}
|
||||||
|
|
||||||
fun askBabyBottleContent() {
|
fun askBabyBottleContent() {
|
||||||
// Show number picker dialog
|
// Show number picker dialog
|
||||||
val localSettings = LocalSettingsRepository(this)
|
val event = LunaEvent(LunaEvent.TYPE_BABY_BOTTLE)
|
||||||
|
val previous = getPreviousSameEvent(event, getAllEvents())
|
||||||
val d = AlertDialog.Builder(this)
|
val d = AlertDialog.Builder(this)
|
||||||
val dialogView = layoutInflater.inflate(R.layout.number_picker_dialog, null)
|
val dialogView = layoutInflater.inflate(R.layout.number_picker_dialog, null)
|
||||||
d.setTitle(R.string.log_bottle_dialog_title)
|
d.setTitle(R.string.log_bottle_dialog_title)
|
||||||
d.setMessage(R.string.log_bottle_dialog_description)
|
d.setMessage(R.string.log_bottle_dialog_description)
|
||||||
d.setView(dialogView)
|
d.setView(dialogView)
|
||||||
|
|
||||||
val numberPicker = dialogView.findViewById<NumberPicker>(R.id.dialog_number_picker)
|
val numberPicker = dialogView.findViewById<NumberPicker>(R.id.dialog_number_picker)
|
||||||
numberPicker.minValue = 1 // "10"
|
numberPicker.minValue = 1 // "10"
|
||||||
numberPicker.maxValue = 25 // "250
|
numberPicker.maxValue = 25 // "250
|
||||||
numberPicker.displayedValues = ((10..250 step 10).map { it.toString() }.toTypedArray())
|
numberPicker.displayedValues = ((10..250 step 10).map { it.toString() }.toTypedArray())
|
||||||
numberPicker.wrapSelectorWheel = false
|
numberPicker.wrapSelectorWheel = false
|
||||||
numberPicker.value = localSettings.loadBabyBottleContent()
|
if (previous != null) {
|
||||||
|
numberPicker.value = previous.quantity / 10
|
||||||
|
}
|
||||||
|
|
||||||
|
val currentDateTime = Calendar.getInstance()
|
||||||
|
currentDateTime.time = Date(event.time * 1000)
|
||||||
|
val dateTextView = dialogView.findViewById<TextView>(R.id.dialog_date_picker)
|
||||||
|
dateTextView.text =
|
||||||
|
String.format(getString(R.string.dialog_event_detail_datetime_icon), DateUtils.formatDateTime(event.time))
|
||||||
|
dateTextView.setOnClickListener {
|
||||||
|
// Show datetime picker
|
||||||
|
val startYear = currentDateTime.get(Calendar.YEAR)
|
||||||
|
val startMonth = currentDateTime.get(Calendar.MONTH)
|
||||||
|
val startDay = currentDateTime.get(Calendar.DAY_OF_MONTH)
|
||||||
|
val startHour = currentDateTime.get(Calendar.HOUR_OF_DAY)
|
||||||
|
val startMinute = currentDateTime.get(Calendar.MINUTE)
|
||||||
|
|
||||||
|
DatePickerDialog(this, { _, year, month, day ->
|
||||||
|
TimePickerDialog(this, { _, hour, minute ->
|
||||||
|
val pickedDateTime = Calendar.getInstance()
|
||||||
|
pickedDateTime.set(year, month, day, hour, minute)
|
||||||
|
// Save event and move it to the right position in the logbook
|
||||||
|
event.time = pickedDateTime.time.time / 1000 // Seconds since epoch
|
||||||
|
dateTextView.text = String.format(getString(R.string.dialog_event_detail_datetime_icon), DateUtils.formatDateTime(event.time))
|
||||||
|
}, startHour, startMinute, android.text.format.DateFormat.is24HourFormat(this@MainActivity)).show()
|
||||||
|
}, startYear, startMonth, startDay).show()
|
||||||
|
}
|
||||||
|
|
||||||
d.setPositiveButton(android.R.string.ok) { dialogInterface, i ->
|
d.setPositiveButton(android.R.string.ok) { dialogInterface, i ->
|
||||||
logEvent(LunaEvent(LunaEvent.TYPE_BABY_BOTTLE, numberPicker.value * 10))
|
event.quantity = numberPicker.value * 10
|
||||||
localSettings.saveBabyBottleContent(numberPicker.value)
|
logEvent(event)
|
||||||
|
logbook?.sort()
|
||||||
|
recyclerView.adapter?.notifyDataSetChanged()
|
||||||
|
saveLogbook()
|
||||||
}
|
}
|
||||||
d.setNegativeButton(android.R.string.cancel) { dialogInterface, i -> dialogInterface.dismiss() }
|
d.setNegativeButton(android.R.string.cancel) { dialogInterface, i -> dialogInterface.dismiss() }
|
||||||
val alertDialog = d.create()
|
val alertDialog = d.create()
|
||||||
@@ -287,9 +320,6 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun askNotes(lunaEvent: LunaEvent) {
|
fun askNotes(lunaEvent: LunaEvent) {
|
||||||
val allEvents = getAllEvents()
|
|
||||||
val useQuantity = (lunaEvent.type != LunaEvent.TYPE_NOTE && lunaEvent.type != LunaEvent.TYPE_CUSTOM)
|
|
||||||
|
|
||||||
val d = AlertDialog.Builder(this)
|
val d = AlertDialog.Builder(this)
|
||||||
val dialogView = layoutInflater.inflate(R.layout.dialog_notes, null)
|
val dialogView = layoutInflater.inflate(R.layout.dialog_notes, null)
|
||||||
d.setTitle(lunaEvent.getTypeDescription(this))
|
d.setTitle(lunaEvent.getTypeDescription(this))
|
||||||
@@ -297,66 +327,11 @@ class MainActivity : AppCompatActivity() {
|
|||||||
d.setView(dialogView)
|
d.setView(dialogView)
|
||||||
val notesET = dialogView.findViewById<EditText>(R.id.notes_edittext)
|
val notesET = dialogView.findViewById<EditText>(R.id.notes_edittext)
|
||||||
val qtyET = dialogView.findViewById<EditText>(R.id.notes_qty_edittext)
|
val qtyET = dialogView.findViewById<EditText>(R.id.notes_qty_edittext)
|
||||||
|
if (lunaEvent.type == LunaEvent.TYPE_NOTE || lunaEvent.type == LunaEvent.TYPE_CUSTOM)
|
||||||
val nextTextView = dialogView.findViewById<TextView>(R.id.notes_template_next)
|
|
||||||
val clearTextView = dialogView.findViewById<TextView>(R.id.notes_clear)
|
|
||||||
val prevTextView = dialogView.findViewById<TextView>(R.id.notes_template_prev)
|
|
||||||
|
|
||||||
fun updateContent(current: LunaEvent) {
|
|
||||||
val prevEvent = getPreviousSameEvent(current, allEvents)
|
|
||||||
val nextEvent = getNextSameEvent(current, allEvents)
|
|
||||||
|
|
||||||
notesET.setText(current.notes)
|
|
||||||
if (useQuantity) {
|
|
||||||
qtyET.setText(current.quantity.toString())
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nextEvent != null) {
|
|
||||||
nextTextView.setOnClickListener {
|
|
||||||
notesET.setText(nextEvent.notes)
|
|
||||||
if (useQuantity) {
|
|
||||||
qtyET.setText(nextEvent.quantity.toString())
|
|
||||||
}
|
|
||||||
updateContent(nextEvent)
|
|
||||||
}
|
|
||||||
nextTextView.alpha = 1.0f
|
|
||||||
} else {
|
|
||||||
nextTextView.setOnClickListener {}
|
|
||||||
nextTextView.alpha = 0.5f
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prevEvent != null) {
|
|
||||||
prevTextView.setOnClickListener {
|
|
||||||
notesET.setText(prevEvent.notes)
|
|
||||||
if (useQuantity) {
|
|
||||||
qtyET.setText(prevEvent.quantity.toString())
|
|
||||||
}
|
|
||||||
updateContent(prevEvent)
|
|
||||||
}
|
|
||||||
prevTextView.alpha = 1.0f
|
|
||||||
} else {
|
|
||||||
prevTextView.setOnClickListener {}
|
|
||||||
prevTextView.alpha = 0.5f
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clearTextView.setOnClickListener {
|
|
||||||
notesET.setText("")
|
|
||||||
if (useQuantity) {
|
|
||||||
qtyET.setText("")
|
|
||||||
}
|
|
||||||
updateContent(lunaEvent)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!useQuantity) {
|
|
||||||
qtyET.visibility = View.GONE
|
qtyET.visibility = View.GONE
|
||||||
}
|
|
||||||
|
|
||||||
updateContent(lunaEvent)
|
|
||||||
|
|
||||||
d.setPositiveButton(android.R.string.ok) { dialogInterface, i ->
|
d.setPositiveButton(android.R.string.ok) { dialogInterface, i ->
|
||||||
val qtyStr = qtyET.text.toString()
|
val qtyStr = qtyET.text.toString()
|
||||||
if (qtyStr.isNotEmpty() && useQuantity) {
|
if (qtyStr.isNotEmpty()) {
|
||||||
val qty = qtyStr.toIntOrNull()
|
val qty = qtyStr.toIntOrNull()
|
||||||
if (qty == null) {
|
if (qty == null) {
|
||||||
Toast.makeText(this, R.string.toast_integer_error, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, R.string.toast_integer_error, Toast.LENGTH_SHORT).show()
|
||||||
|
|||||||
@@ -23,14 +23,6 @@ class LocalSettingsRepository(val context: Context) {
|
|||||||
sharedPreferences = context.getSharedPreferences(SHARED_PREFS_FILE_NAME, MODE_PRIVATE)
|
sharedPreferences = context.getSharedPreferences(SHARED_PREFS_FILE_NAME, MODE_PRIVATE)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun saveBabyBottleContent(content: Int) {
|
|
||||||
sharedPreferences.edit { putInt(SHARED_PREFS_BB_CONTENT, content) }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadBabyBottleContent(): Int {
|
|
||||||
return sharedPreferences.getInt(SHARED_PREFS_BB_CONTENT, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun saveSignature(content: String) {
|
fun saveSignature(content: String) {
|
||||||
sharedPreferences.edit { putString(SHARED_PREFS_SIGNATURE, content) }
|
sharedPreferences.edit { putString(SHARED_PREFS_SIGNATURE, content) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,33 +24,4 @@
|
|||||||
android:hint="@string/log_notes_dialog_note_hint"
|
android:hint="@string/log_notes_dialog_note_hint"
|
||||||
android:background="@drawable/textview_background"/>
|
android:background="@drawable/textview_background"/>
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
android:gravity="end"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/notes_template_prev"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textSize="18dp"
|
|
||||||
android:text="⬅️"/>
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/notes_clear"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginHorizontal="5dp"
|
|
||||||
android:textSize="18dp"
|
|
||||||
android:text="🚫"/>
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/notes_template_next"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textSize="18dp"
|
|
||||||
android:text="➡️"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -3,17 +3,33 @@
|
|||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_gravity="center"
|
android:orientation="vertical">
|
||||||
android:gravity="center">
|
|
||||||
|
|
||||||
<NumberPicker
|
<LinearLayout
|
||||||
android:id="@+id/dialog_number_picker"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="150dp"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout_gravity="center"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<NumberPicker
|
||||||
|
android:id="@+id/dialog_number_picker"
|
||||||
|
android:layout_width="150dp"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:text="ml"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:id="@+id/dialog_date_picker"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_gravity="center"
|
||||||
android:text="ml"/>
|
android:layout_marginEnd = "20dp"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
Reference in New Issue
Block a user