diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0cb11ad6abb1668f5c6c8d4830f123c6b8f76d0c..a52dfd9b03bc09e4f2c6f545527cf47a2ed5631a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -73,5 +73,11 @@ dependencies { implementation("com.squareup.okhttp3:logging-interceptor:4.9.3") implementation("androidx.navigation:navigation-fragment-ktx:2.7.7") implementation("androidx.navigation:navigation-ui-ktx:2.7.7") + val roomVersion = "2.6.1" + + implementation("androidx.room:room-runtime:$roomVersion") + annotationProcessor("androidx.room:room-compiler:$roomVersion") + implementation("androidx.room:room-ktx:$roomVersion") + kapt("androidx.room:room-compiler:$roomVersion") } \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/MainActivity.kt b/app/src/main/java/com/pbd/psi/MainActivity.kt index b7e2754f4277ad6b726b0e2fe2cc86027cd5a51b..f8af57e8bdc137c09643762ba5b439d9e0de92da 100644 --- a/app/src/main/java/com/pbd/psi/MainActivity.kt +++ b/app/src/main/java/com/pbd/psi/MainActivity.kt @@ -19,10 +19,6 @@ import android.content.res.ColorStateList import android.graphics.Color - - - - class MainActivity : AppCompatActivity() { companion object { const val SHARED_PREFS = "shared_prefs" diff --git a/app/src/main/java/com/pbd/psi/repository/TransactionRepository.kt b/app/src/main/java/com/pbd/psi/repository/TransactionRepository.kt new file mode 100644 index 0000000000000000000000000000000000000000..42656257b886c6e9f8a1555efeee5a60e1c6cfd3 --- /dev/null +++ b/app/src/main/java/com/pbd/psi/repository/TransactionRepository.kt @@ -0,0 +1,22 @@ +package com.pbd.psi.repository + +import androidx.lifecycle.LiveData +import com.pbd.psi.room.AppDatabase +import com.pbd.psi.room.TransactionEntity + +class TransactionRepository(private val database: AppDatabase) { + + val transactionList: LiveData<List<TransactionEntity>> = database.transactionDao().getAllTrans() + + suspend fun insertTransaction(transaction: TransactionEntity) { + database.transactionDao().insertTransaction(transaction) + } + + suspend fun updateTransaction(transaction: TransactionEntity) { + database.transactionDao().updateTransaction(transaction) + } + + suspend fun deleteTransaction(transaction: TransactionEntity) { + database.transactionDao().deleteTransaction(transaction) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/room/AppDatabase.kt b/app/src/main/java/com/pbd/psi/room/AppDatabase.kt new file mode 100644 index 0000000000000000000000000000000000000000..04d804a612f177eccb6647906f9348cfc4b4b626 --- /dev/null +++ b/app/src/main/java/com/pbd/psi/room/AppDatabase.kt @@ -0,0 +1,36 @@ +package com.pbd.psi.room + +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import android.content.Context +import androidx.room.TypeConverters + +@Database(entities = [TransactionEntity::class], version = 1) +@TypeConverters(Converters::class) +abstract class AppDatabase() : RoomDatabase() { + + abstract fun transactionDao(): TransactionDao + + companion object { + @Volatile + private var Instance: AppDatabase? = null + + fun getDatabase(context: Context): AppDatabase{ + synchronized(this){ + var instance = Instance + + if (instance == null) { + instance = Room.databaseBuilder( + context.applicationContext, + AppDatabase::class.java, + "app_database" + ).build() + Instance = instance + } + + return instance + } + } + } +} diff --git a/app/src/main/java/com/pbd/psi/room/Converters.kt b/app/src/main/java/com/pbd/psi/room/Converters.kt new file mode 100644 index 0000000000000000000000000000000000000000..dee6eeb59ff0d2ab4d2c4c24d36001166e70fc86 --- /dev/null +++ b/app/src/main/java/com/pbd/psi/room/Converters.kt @@ -0,0 +1,19 @@ +package com.pbd.psi.room + +import androidx.room.TypeConverter +import java.text.SimpleDateFormat +import java.util.* + +class Converters { + private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) + + @TypeConverter + fun toDate(value: String?): Date? { + return value?.let { dateFormat.parse(it) } + } + + @TypeConverter + fun fromDate(date: Date?): String? { + return date?.let { dateFormat.format(it) } + } +} diff --git a/app/src/main/java/com/pbd/psi/room/TransactionDao.kt b/app/src/main/java/com/pbd/psi/room/TransactionDao.kt new file mode 100644 index 0000000000000000000000000000000000000000..15a0b2f2bd1751dee70353a0820521983b523f9b --- /dev/null +++ b/app/src/main/java/com/pbd/psi/room/TransactionDao.kt @@ -0,0 +1,18 @@ +package com.pbd.psi.room + +import androidx.lifecycle.LiveData +import androidx.room.* +@Dao +interface TransactionDao { + @Query("SELECT * FROM `transaction`") + fun getAllTrans(): LiveData<List<TransactionEntity>> + + @Insert(onConflict = OnConflictStrategy.FAIL) + suspend fun insertTransaction(trans: TransactionEntity) + + @Update(onConflict = OnConflictStrategy.FAIL) + suspend fun updateTransaction(trans: TransactionEntity) + + @Delete + suspend fun deleteTransaction(trans: TransactionEntity) +} \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/room/TransactionEntity.kt b/app/src/main/java/com/pbd/psi/room/TransactionEntity.kt new file mode 100644 index 0000000000000000000000000000000000000000..e7a721a54a9aa8db1df8d3fda0fbf90f21a389b9 --- /dev/null +++ b/app/src/main/java/com/pbd/psi/room/TransactionEntity.kt @@ -0,0 +1,17 @@ +package com.pbd.psi.room + +import androidx.room.Entity +import androidx.room.PrimaryKey +import java.util.Date + +@Entity(tableName = "transaction") +data class TransactionEntity( + @PrimaryKey(autoGenerate = true) + val id: Int = 0, + val name: String = "", + val category: Int = 0, + val price: Int = 0, + val date: Date = Date(), + val longitude: Double = 0.0, + val latitude: Double = 0.0, +) \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/ui/transaction/TransactionViewModel.kt b/app/src/main/java/com/pbd/psi/ui/transaction/TransactionViewModel.kt new file mode 100644 index 0000000000000000000000000000000000000000..670bbb2de3172db0eeb9843b3e48ba6202105787 --- /dev/null +++ b/app/src/main/java/com/pbd/psi/ui/transaction/TransactionViewModel.kt @@ -0,0 +1,4 @@ +package com.pbd.psi.ui.transaction + +class TransactionViewModel { +} \ No newline at end of file