diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a921694..7e39054 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -50,6 +50,7 @@ dependencies { implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.material3) implementation(libs.androidx.appcompat) + implementation(libs.androidx.recyclerview) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) diff --git a/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt b/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt index 0e71df2..b468083 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt @@ -1,15 +1,16 @@ package it.danieleverducci.lunatracker import android.os.Bundle -import android.util.Log import android.view.View import android.widget.NumberPicker import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import it.danieleverducci.lunatracker.adapters.LunaEventRecyclerAdapter import it.danieleverducci.lunatracker.entities.Logbook import it.danieleverducci.lunatracker.entities.LunaEvent import it.danieleverducci.lunatracker.entities.LunaEventType -import java.io.File class MainActivity : AppCompatActivity() { companion object { @@ -17,14 +18,25 @@ class MainActivity : AppCompatActivity() { } lateinit var logbook: Logbook + lateinit var adapter: LunaEventRecyclerAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + // Load data logbook = Logbook.load(this) + // Show view setContentView(R.layout.activity_main) + // Show logbook + val recyclerView = findViewById(R.id.list_events) + recyclerView.setLayoutManager(LinearLayoutManager(this)) + adapter = LunaEventRecyclerAdapter(this) + adapter.items.addAll(logbook.logs) + recyclerView.adapter = adapter + + // Set listeners findViewById(R.id.button_bottle).setOnClickListener { askBabyBottleContent() } findViewById(R.id.button_nipple_left).setOnClickListener { logEvent( LunaEvent( @@ -74,7 +86,9 @@ class MainActivity : AppCompatActivity() { } fun logEvent(event: LunaEvent) { - logbook.logs.add(event) + adapter.items.add(0, event) + adapter.notifyItemInserted(0) + logbook.logs.add(0, event) logbook.save(this) } diff --git a/app/src/main/java/it/danieleverducci/lunatracker/adapters/LunaEventRecyclerAdapter.kt b/app/src/main/java/it/danieleverducci/lunatracker/adapters/LunaEventRecyclerAdapter.kt new file mode 100644 index 0000000..92a529a --- /dev/null +++ b/app/src/main/java/it/danieleverducci/lunatracker/adapters/LunaEventRecyclerAdapter.kt @@ -0,0 +1,81 @@ +package it.danieleverducci.lunatracker.adapters + +import android.content.Context +import android.text.format.DateUtils +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import it.danieleverducci.lunatracker.entities.LunaEvent +import it.danieleverducci.lunatracker.entities.LunaEventType +import it.danieleverducci.lunatracker.R +import java.text.DateFormat +import java.util.Date + +class LunaEventRecyclerAdapter: RecyclerView.Adapter { + private val context: Context + val items = ArrayList() + + constructor(context: Context) { + this.context = context + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): LunaEventVH { + + val view = LayoutInflater.from(context).inflate(R.layout.row_luna_event, parent, false) + return LunaEventVH(view) + } + + override fun onBindViewHolder( + holder: LunaEventVH, + position: Int + ) { + val item = items.get(position) + holder.type.text = context.getString( + when (item.type) { + LunaEventType.BABY_BOTTLE -> R.string.event_bottle_type + LunaEventType.BREASTFEEDING_LEFT_NIPPLE -> R.string.event_breastfeeding_left_type + LunaEventType.BREASTFEEDING_BOTH_NIPPLE -> R.string.event_breastfeeding_both_type + LunaEventType.BREASTFEEDING_RIGHT_NIPPLE -> R.string.event_breastfeeding_right_type + LunaEventType.DIAPERCHANGE_POO -> R.string.event_diaperchange_poo_type + LunaEventType.DIAPERCHANGE_PEE -> R.string.event_diaperchange_pee_type + else -> R.string.event_unknown_type + } + ) + holder.description.text = context.getString( + when (item.type) { + LunaEventType.BABY_BOTTLE -> R.string.event_bottle_desc + LunaEventType.BREASTFEEDING_LEFT_NIPPLE -> R.string.event_breastfeeding_left_desc + LunaEventType.BREASTFEEDING_BOTH_NIPPLE -> R.string.event_breastfeeding_both_desc + LunaEventType.BREASTFEEDING_RIGHT_NIPPLE -> R.string.event_breastfeeding_right_desc + LunaEventType.DIAPERCHANGE_POO -> R.string.event_diaperchange_poo_desc + LunaEventType.DIAPERCHANGE_PEE -> R.string.event_diaperchange_pee_desc + else -> R.string.event_unknown_desc + } + ) + holder.quantity.text = if ((item.quantity ?: 0) > 0) item.quantity.toString() else "" + holder.time.text = DateUtils.getRelativeTimeSpanString(item.time * 1000) + } + + override fun getItemCount(): Int { + return items.size + } + + class LunaEventVH: RecyclerView.ViewHolder { + val type: TextView + val description: TextView + val quantity: TextView + val time: TextView + + constructor(v: View) : super(v) { + type = v.findViewById(R.id.type) + description = v.findViewById(R.id.description) + quantity = v.findViewById(R.id.quantity) + time = v.findViewById(R.id.time) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 90c86d8..bc17ec5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -26,7 +26,7 @@ android:background="@drawable/button_background" android:gravity="center_horizontal" android:textSize="50sp" - android:text="🍼"/> + android:text="@string/event_bottle_type"/> - + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1f584e6..7d89c73 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,4 +5,21 @@ Biberon Inserisci la quantità contenuta nel biberon + + 🍼 + 🤱 ← + 🤱 ↔ + 🤱 → + 🚼 💩 + 🚼 💧 + - + + Biberon + Allatt. al seno (sx) + Allatt. al seno + Allatt. al seno (dx) + Cambio (con cacca) + Cambio (con pipì) + + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ef72d00..ca8092b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,9 +9,11 @@ lifecycleRuntimeKtx = "2.6.1" activityCompose = "1.8.0" composeBom = "2024.04.01" appcompat = "1.7.0" +recyclerview = "1.3.2" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }