From f3875674c21d070fc19d2f43cf601e8bd4c5346b Mon Sep 17 00:00:00 2001 From: Muhammad Rifko Favian <13521075@std.stei.itb.ac.id> Date: Tue, 2 Apr 2024 02:33:17 +0700 Subject: [PATCH] feat: add enum for transaction category --- .../bondoman/AddTransactionActivity.kt | 13 +++++--- .../bondoman/room/TransactionCategory.kt | 6 ++++ .../bondoman/room/TransactionEntity.kt | 6 ++-- .../onionsquad/bondoman/util/Converters.kt | 30 +++++++++++++++++++ .../onionsquad/bondoman/util/DateConverter.kt | 19 ------------ .../res/layout/activity_add_transaction.xml | 21 ++++++++++--- 6 files changed, 65 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/com/onionsquad/bondoman/room/TransactionCategory.kt create mode 100644 app/src/main/java/com/onionsquad/bondoman/util/Converters.kt delete mode 100644 app/src/main/java/com/onionsquad/bondoman/util/DateConverter.kt diff --git a/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt b/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt index 3408874..7f670a8 100644 --- a/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt +++ b/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt @@ -4,9 +4,11 @@ import android.content.Intent import android.os.Bundle import android.widget.Button import android.widget.EditText +import android.widget.RadioGroup import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.ViewModelProvider import com.onionsquad.bondoman.repository.TransactionRepository +import com.onionsquad.bondoman.room.TransactionCategory import com.onionsquad.bondoman.room.TransactionDatabase import com.onionsquad.bondoman.room.TransactionEntity import com.onionsquad.bondoman.ui.transaction.TransactionViewModel @@ -24,7 +26,7 @@ class AddTransactionActivity : AppCompatActivity() { val titleEditText: EditText = findViewById(R.id.titleEditText) val amountEditText: EditText = findViewById(R.id.amountEditText) - val categoryEditText: EditText = findViewById(R.id.categoryEditText) + val categoryRadioGroup: RadioGroup = findViewById(R.id.categoryRadioGroup) val locationEditText: EditText = findViewById(R.id.locationEditText) val factory = TransactionViewModelFactory(repository) @@ -34,10 +36,14 @@ class AddTransactionActivity : AppCompatActivity() { saveButton.setOnClickListener { val title = titleEditText.text.toString() val amount = amountEditText.text.toString().toDoubleOrNull() ?: 0.0 - val category = categoryEditText.text.toString() + val selectedCategoryId = categoryRadioGroup.checkedRadioButtonId + val category = when (selectedCategoryId) { + R.id.incomeRadioButton -> TransactionCategory.INCOME + R.id.outcomeRadioButton -> TransactionCategory.OUTCOME + else -> TransactionCategory.OUTCOME + } val location = locationEditText.text.toString() - // Dapatkan tanggal saat ini val currentDate = Date() val transaction = TransactionEntity( @@ -51,7 +57,6 @@ class AddTransactionActivity : AppCompatActivity() { viewModel.insertTransaction(transaction) - // Navigasi kembali ke halaman daftar transaksi Intent(this@AddTransactionActivity, MainActivity::class.java).also { startActivity(it) } diff --git a/app/src/main/java/com/onionsquad/bondoman/room/TransactionCategory.kt b/app/src/main/java/com/onionsquad/bondoman/room/TransactionCategory.kt new file mode 100644 index 0000000..a49c479 --- /dev/null +++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionCategory.kt @@ -0,0 +1,6 @@ +package com.onionsquad.bondoman.room + +enum class TransactionCategory { + INCOME, + OUTCOME +} \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt b/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt index 66c1766..64898cb 100644 --- a/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt +++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt @@ -4,11 +4,11 @@ import androidx.room.Entity import androidx.room.PrimaryKey import androidx.room.ColumnInfo import androidx.room.TypeConverters -import com.onionsquad.bondoman.util.DateConverter +import com.onionsquad.bondoman.util.Converters import java.util.Date @Entity(tableName = "transactions") -@TypeConverters(DateConverter::class) +@TypeConverters(Converters::class) data class TransactionEntity( @PrimaryKey(autoGenerate = true) val id: Int = 0, @@ -20,7 +20,7 @@ data class TransactionEntity( val amount: Double, @ColumnInfo(name = "category") - val category: String, + val category: TransactionCategory, @ColumnInfo(name = "date", defaultValue = "CURRENT_TIMESTAMP") val date: Date, diff --git a/app/src/main/java/com/onionsquad/bondoman/util/Converters.kt b/app/src/main/java/com/onionsquad/bondoman/util/Converters.kt new file mode 100644 index 0000000..eb9f90a --- /dev/null +++ b/app/src/main/java/com/onionsquad/bondoman/util/Converters.kt @@ -0,0 +1,30 @@ +package com.onionsquad.bondoman.util + +import androidx.room.TypeConverter +import com.onionsquad.bondoman.room.TransactionCategory +import java.util.Date + +object Converters { + + @TypeConverter + @JvmStatic + fun fromTimestamp(value: Long?): Date? { + return value?.let { Date(it) } + } + + @TypeConverter + @JvmStatic + fun dateToTimestamp(value: Date?): Long? { + return value?.time + } + + @TypeConverter + fun fromTransactionCategory(category: TransactionCategory): String { + return category.name + } + + @TypeConverter + fun toTransactionCategory(categoryString: String): TransactionCategory { + return TransactionCategory.valueOf(categoryString) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/util/DateConverter.kt b/app/src/main/java/com/onionsquad/bondoman/util/DateConverter.kt deleted file mode 100644 index 408d43f..0000000 --- a/app/src/main/java/com/onionsquad/bondoman/util/DateConverter.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.onionsquad.bondoman.util - -import androidx.room.TypeConverter -import java.util.Date - -object DateConverter { - - @TypeConverter - @JvmStatic - fun fromTimestamp(value: Long?): Date? { - return value?.let { Date(it) } - } - - @TypeConverter - @JvmStatic - fun dateToTimestamp(value: Date?): Long? { - return value?.time - } -} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_add_transaction.xml b/app/src/main/res/layout/activity_add_transaction.xml index 1858a85..95fa2b3 100644 --- a/app/src/main/res/layout/activity_add_transaction.xml +++ b/app/src/main/res/layout/activity_add_transaction.xml @@ -28,13 +28,26 @@ android:hint="Nominal" android:inputType="numberDecimal" /> - <EditText - android:id="@+id/categoryEditText" + <RadioGroup + android:id="@+id/categoryRadioGroup" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" - android:hint="Kategori" - android:inputType="text" /> + android:orientation="horizontal"> + + <RadioButton + android:id="@+id/incomeRadioButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Pemasukan" /> + + <RadioButton + android:id="@+id/outcomeRadioButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Pengeluaran" /> + + </RadioGroup> <EditText android:id="@+id/locationEditText" -- GitLab