diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4a51b78ff66e9fcbe857133f367055c0b22182a1..497e69a30d2e3148e20ee25c48d931ee8caeb56e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,17 +11,19 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Bondoman" - tools:targetApi="31"> + > <activity android:name=".MainActivity" - android:exported="true" - android:label="@string/app_name"> + android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + <activity + android:name=".AddTransactionActivity" + android:exported="false"/> </application> </manifest> \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt b/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt index 7f8e861bbcd897e96fa857e18fa6ffdee14eb234..34088743ebf42d06a2a3dcd0815421bae4aedc49 100644 --- a/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt +++ b/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt @@ -6,14 +6,18 @@ import android.widget.Button import android.widget.EditText import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.ViewModelProvider +import com.onionsquad.bondoman.repository.TransactionRepository +import com.onionsquad.bondoman.room.TransactionDatabase import com.onionsquad.bondoman.room.TransactionEntity import com.onionsquad.bondoman.ui.transaction.TransactionViewModel -import java.text.SimpleDateFormat +import com.onionsquad.bondoman.ui.transaction.TransactionViewModelFactory import java.util.Date -import java.util.Locale class AddTransactionActivity : AppCompatActivity() { - private lateinit var viewModel: TransactionViewModel + + private val database by lazy { TransactionDatabase.getInstance(this) } + private val repository by lazy { TransactionRepository(database.transactionDao()) } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_add_transaction) @@ -23,7 +27,8 @@ class AddTransactionActivity : AppCompatActivity() { val categoryEditText: EditText = findViewById(R.id.categoryEditText) val locationEditText: EditText = findViewById(R.id.locationEditText) - viewModel = ViewModelProvider(this).get(TransactionViewModel::class.java) + val factory = TransactionViewModelFactory(repository) + val viewModel = ViewModelProvider(this, factory)[TransactionViewModel::class.java] val saveButton: Button = findViewById(R.id.saveButton) saveButton.setOnClickListener { @@ -33,7 +38,7 @@ class AddTransactionActivity : AppCompatActivity() { val location = locationEditText.text.toString() // Dapatkan tanggal saat ini - val currentDate = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date()) + val currentDate = Date() val transaction = TransactionEntity( title = title, 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 82452546f5f4802914ba8bbb2dbe51f700b2c5f2..66c176602c7f51214ba4ddd47de96c2ae911e837 100644 --- a/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt +++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt @@ -3,8 +3,12 @@ package com.onionsquad.bondoman.room import androidx.room.Entity import androidx.room.PrimaryKey import androidx.room.ColumnInfo +import androidx.room.TypeConverters +import com.onionsquad.bondoman.util.DateConverter +import java.util.Date @Entity(tableName = "transactions") +@TypeConverters(DateConverter::class) data class TransactionEntity( @PrimaryKey(autoGenerate = true) val id: Int = 0, @@ -18,8 +22,8 @@ data class TransactionEntity( @ColumnInfo(name = "category") val category: String, - @ColumnInfo(name = "date") - val date: String, + @ColumnInfo(name = "date", defaultValue = "CURRENT_TIMESTAMP") + val date: Date, @ColumnInfo(name = "location") val location: String diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionFragment.kt b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionFragment.kt index 915ec662c638d026f1c3fc530550b248df2de390..4ff1ccc32f50abe95a0e0e74e85e2595bf8997e6 100644 --- a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionFragment.kt +++ b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionFragment.kt @@ -5,12 +5,12 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Button import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import com.onionsquad.bondoman.AddTransactionActivity -import com.onionsquad.bondoman.R import com.onionsquad.bondoman.databinding.FragmentTransactionBinding +import com.onionsquad.bondoman.repository.TransactionRepository +import com.onionsquad.bondoman.room.TransactionDatabase class TransactionFragment : Fragment() { @@ -20,13 +20,16 @@ class TransactionFragment : Fragment() { // onDestroyView. private val binding get() = _binding!! + private val database by lazy { TransactionDatabase.getInstance(requireContext().applicationContext) } + private val repository by lazy { TransactionRepository(database.transactionDao()) } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - val transactionViewModel = - ViewModelProvider(this).get(TransactionViewModel::class.java) + val factory = TransactionViewModelFactory(repository) + val transactionViewModel = ViewModelProvider(this, factory)[TransactionViewModel::class.java] _binding = FragmentTransactionBinding.inflate(inflater, container, false) diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt index a4e10ab1aec043dd0fcbbe484520f06cc3bd08fe..cf96283f3289be47bfd3205f7e6faa0ac4467748 100644 --- a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt +++ b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt @@ -3,9 +3,9 @@ package com.onionsquad.bondoman.ui.transaction import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import kotlinx.coroutines.launch -import com.onionsquad.bondoman.room.* import com.onionsquad.bondoman.repository.TransactionRepository +import com.onionsquad.bondoman.room.TransactionEntity +import kotlinx.coroutines.launch class TransactionViewModel(private val repository : TransactionRepository) : ViewModel() { var listTransactions: LiveData<List<TransactionEntity>> = repository.listTransactions diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModelFactory.kt b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModelFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..d318bade3a0a3dfa99c25021f0e02aac38ab04c7 --- /dev/null +++ b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModelFactory.kt @@ -0,0 +1,17 @@ +package com.onionsquad.bondoman.ui.transaction + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import com.onionsquad.bondoman.repository.TransactionRepository + +class TransactionViewModelFactory(private val repository: TransactionRepository) : + ViewModelProvider.Factory { + + override fun <T : ViewModel> create(modelClass: Class<T>): T { + if (modelClass.isAssignableFrom(TransactionViewModel::class.java)) { + @Suppress("UNCHECKED_CAST") + return TransactionViewModel(repository) as T + } + throw IllegalArgumentException("Unknown ViewModel class") + } +} \ 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 new file mode 100644 index 0000000000000000000000000000000000000000..408d43f29d0fef1feb655b043a8080594af926e5 --- /dev/null +++ b/app/src/main/java/com/onionsquad/bondoman/util/DateConverter.kt @@ -0,0 +1,19 @@ +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/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index fc575e810de8c1a52bac57a9d44e78422bee791d..f7d84c6783037f11b61b8f406f6570a4d374a7a9 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -7,21 +7,21 @@ <fragment android:id="@+id/navigation_transaction" - android:name="com.onionsquad.bondoman.ui.graph.GraphFragment" + android:name="com.onionsquad.bondoman.ui.transaction.TransactionFragment" android:label="@string/title_transaction" - tools:layout="@layout/fragment_graph" /> + tools:layout="@layout/fragment_transaction" /> <fragment android:id="@+id/navigation_scan" - android:name="com.onionsquad.bondoman.ui.transaction.TransactionFragment" + android:name="com.onionsquad.bondoman.ui.scan.ScanFragment" android:label="@string/title_scan" - tools:layout="@layout/fragment_transaction" /> + tools:layout="@layout/fragment_scan" /> <fragment android:id="@+id/navigation_graph" - android:name="com.onionsquad.bondoman.ui.scan.ScanFragment" + android:name="com.onionsquad.bondoman.ui.graph.GraphFragment" android:label="@string/title_graph" - tools:layout="@layout/fragment_scan" /> + tools:layout="@layout/fragment_graph" /> <fragment android:id="@+id/navigation_settings" android:name="com.onionsquad.bondoman.ui.settings.SettingsFragment"