From eb42db49ee21f12db58fbecf9bc296bd380b429e Mon Sep 17 00:00:00 2001 From: mueller-ma Date: Wed, 5 Oct 2022 12:03:34 +0200 Subject: [PATCH] Show full response in list (#141) Click on a balance entry in MainActivity to view the full reponse. Fixes #118 --- .../2.json | 52 +++++++++++++++++++ .../muellerma/prepaidbalance/DatabaseTest.kt | 10 ++-- .../prepaidbalance/room/BalanceDatabase.kt | 9 +++- .../prepaidbalance/room/BalanceEntry.kt | 3 +- .../prepaidbalance/ui/BalanceListAdapter.kt | 14 +++++ .../prepaidbalance/work/CheckBalanceWorker.kt | 6 ++- app/src/main/res/layout/list_balance.xml | 1 + app/src/main/res/values/strings.xml | 2 + 8 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 app/schemas/com.github.muellerma.prepaidbalance.room.AppDatabase/2.json diff --git a/app/schemas/com.github.muellerma.prepaidbalance.room.AppDatabase/2.json b/app/schemas/com.github.muellerma.prepaidbalance.room.AppDatabase/2.json new file mode 100644 index 0000000..d10badd --- /dev/null +++ b/app/schemas/com.github.muellerma.prepaidbalance.room.AppDatabase/2.json @@ -0,0 +1,52 @@ +{ + "formatVersion": 1, + "database": { + "version": 2, + "identityHash": "f709374e68e6512c74cbe86c3533429c", + "entities": [ + { + "tableName": "BalanceEntry", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `timestamp` INTEGER NOT NULL, `balance` REAL NOT NULL, `fullResponse` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "balance", + "columnName": "balance", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "fullResponse", + "columnName": "fullResponse", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f709374e68e6512c74cbe86c3533429c')" + ] + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/github/muellerma/prepaidbalance/DatabaseTest.kt b/app/src/androidTest/java/com/github/muellerma/prepaidbalance/DatabaseTest.kt index 138deba..9689190 100644 --- a/app/src/androidTest/java/com/github/muellerma/prepaidbalance/DatabaseTest.kt +++ b/app/src/androidTest/java/com/github/muellerma/prepaidbalance/DatabaseTest.kt @@ -19,11 +19,11 @@ class DatabaseTest { AppDatabase.get(appContext) .balanceDao().apply { deleteAll() - insert(BalanceEntry(timestamp = now, balance = 10.15)) - insert(BalanceEntry(timestamp = now - 5 * 60 * 1000, balance = 0.15)) - insert(BalanceEntry(timestamp = now - 60 * 60 * 1000, balance = 5.12)) - insert(BalanceEntry(timestamp = now - 30 * 60 * 60 * 1000, balance = 7.12)) - insert(BalanceEntry(timestamp = 12, balance = 7.12)) // quite old + insert(BalanceEntry(timestamp = now, balance = 10.15, fullResponse = "foobar 10.15")) + insert(BalanceEntry(timestamp = now - 5 * 60 * 1000, balance = 0.15, fullResponse = "foobar 0.15")) + insert(BalanceEntry(timestamp = now - 60 * 60 * 1000, balance = 5.12, fullResponse = "foobar 5.12")) + insert(BalanceEntry(timestamp = now - 30 * 60 * 60 * 1000, balance = 7.12, fullResponse = "foobar 7.12")) + insert(BalanceEntry(timestamp = 12, balance = 7.12, fullResponse = null)) // quite old } } diff --git a/app/src/main/java/com/github/muellerma/prepaidbalance/room/BalanceDatabase.kt b/app/src/main/java/com/github/muellerma/prepaidbalance/room/BalanceDatabase.kt index 579d93d..de8c7ef 100644 --- a/app/src/main/java/com/github/muellerma/prepaidbalance/room/BalanceDatabase.kt +++ b/app/src/main/java/com/github/muellerma/prepaidbalance/room/BalanceDatabase.kt @@ -1,11 +1,18 @@ package com.github.muellerma.prepaidbalance.room import android.content.Context +import androidx.room.AutoMigration import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase -@Database(entities = [BalanceEntry::class], version = 1) +@Database( + entities = [BalanceEntry::class], + version = 2, + autoMigrations = [ + AutoMigration(from = 1, to = 2) + ] +) abstract class AppDatabase : RoomDatabase() { abstract fun balanceDao(): BalanceDao diff --git a/app/src/main/java/com/github/muellerma/prepaidbalance/room/BalanceEntry.kt b/app/src/main/java/com/github/muellerma/prepaidbalance/room/BalanceEntry.kt index 03d8e32..17144e2 100644 --- a/app/src/main/java/com/github/muellerma/prepaidbalance/room/BalanceEntry.kt +++ b/app/src/main/java/com/github/muellerma/prepaidbalance/room/BalanceEntry.kt @@ -9,7 +9,8 @@ import kotlin.math.abs data class BalanceEntry( @PrimaryKey(autoGenerate = true) val id: Int? = null, val timestamp: Long, - @ColumnInfo(name = "balance") val balance: Double + @ColumnInfo(name = "balance") val balance: Double, + val fullResponse: String? ) { fun nearlyEquals(other: BalanceEntry): Boolean { if (balance != other.balance) { diff --git a/app/src/main/java/com/github/muellerma/prepaidbalance/ui/BalanceListAdapter.kt b/app/src/main/java/com/github/muellerma/prepaidbalance/ui/BalanceListAdapter.kt index 2de46bb..c75f332 100644 --- a/app/src/main/java/com/github/muellerma/prepaidbalance/ui/BalanceListAdapter.kt +++ b/app/src/main/java/com/github/muellerma/prepaidbalance/ui/BalanceListAdapter.kt @@ -11,7 +11,9 @@ import com.github.muellerma.prepaidbalance.databinding.ListBalanceBinding import com.github.muellerma.prepaidbalance.room.BalanceEntry import com.github.muellerma.prepaidbalance.utils.formatAsCurrency import com.github.muellerma.prepaidbalance.utils.formatAsDiff +import com.github.muellerma.prepaidbalance.utils.showToast import com.github.muellerma.prepaidbalance.utils.timestampForUi +import com.google.android.material.dialog.MaterialAlertDialogBuilder class BalanceListAdapter(context: Context) : RecyclerView.Adapter() { @@ -42,6 +44,18 @@ class BalanceListAdapter(context: Context) : setTextColor(ContextCompat.getColor(context, color)) } + val fullResponse = balances[position].fullResponse + holder.binding.card.setOnClickListener { + if (fullResponse.isNullOrEmpty()) { + it.context.showToast(R.string.no_response_saved) + } else { + MaterialAlertDialogBuilder(it.context) + .setPositiveButton(R.string.close, null) + .setMessage(fullResponse) + .show() + } + } + holder.binding.date.apply { text = balances[position].timestamp.timestampForUi(context) } diff --git a/app/src/main/java/com/github/muellerma/prepaidbalance/work/CheckBalanceWorker.kt b/app/src/main/java/com/github/muellerma/prepaidbalance/work/CheckBalanceWorker.kt index 34115c5..ad2d6ad 100644 --- a/app/src/main/java/com/github/muellerma/prepaidbalance/work/CheckBalanceWorker.kt +++ b/app/src/main/java/com/github/muellerma/prepaidbalance/work/CheckBalanceWorker.kt @@ -173,7 +173,11 @@ class CheckBalanceWorker( val database = AppDatabase.get(context) val latestInDb = database.balanceDao().getLatest() - val new = BalanceEntry(timestamp = System.currentTimeMillis(), balance = balance) + val new = BalanceEntry( + timestamp = System.currentTimeMillis(), + balance = balance, + fullResponse = response + ) Log.d(TAG, "Insert $new") database diff --git a/app/src/main/res/layout/list_balance.xml b/app/src/main/res/layout/list_balance.xml index d9be444..96c1c5e 100644 --- a/app/src/main/res/layout/list_balance.xml +++ b/app/src/main/res/layout/list_balance.xml @@ -3,6 +3,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/card" app:cardElevation="4dp" app:cardCornerRadius="4dp" android:layout_marginHorizontal="8dp" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f6a5ef9..c276953 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -37,6 +37,8 @@ Copied to clipboard Retry A USSD request will be made to %s + Close + No response saved About Prepaid Balance