From 04b8390f85f5eb8bc99f5538a8b2d026126f3f85 Mon Sep 17 00:00:00 2001 From: Eunice Sarah Siregar <13521013@mahasiswa.itb.ac.id> Date: Sat, 30 Mar 2024 15:25:42 +0700 Subject: [PATCH] fix: get transaction --- .../java/com/example/bondoman/GraphPage.kt | 8 ++++- .../java/com/example/bondoman/MainActivity.kt | 12 ++++++-- .../java/com/example/bondoman/ScanPage.kt | 8 +++-- .../java/com/example/bondoman/SettingsPage.kt | 8 ++++- .../com/example/bondoman/TransactionPage.kt | 14 +++++++-- .../bondoman/room/TransactionRepository.kt | 6 ++++ .../room/TransactionRepositoryImplement.kt | 30 +++++++++++++++++++ 7 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepository.kt create mode 100644 bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepositoryImplement.kt diff --git a/bondoman/app/src/main/java/com/example/bondoman/GraphPage.kt b/bondoman/app/src/main/java/com/example/bondoman/GraphPage.kt index fc60c22..8293262 100644 --- a/bondoman/app/src/main/java/com/example/bondoman/GraphPage.kt +++ b/bondoman/app/src/main/java/com/example/bondoman/GraphPage.kt @@ -10,6 +10,8 @@ import android.widget.ProgressBar import androidx.core.content.ContextCompat import androidx.lifecycle.lifecycleScope import com.example.bondoman.room.TransactionDB +import com.example.bondoman.room.TransactionRepository +import com.example.bondoman.room.TransactionRepositoryImplement import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.data.PieData import com.github.mikephil.charting.data.PieDataSet @@ -23,6 +25,8 @@ class GraphPage : Fragment(R.layout.fragment_graph_page) { val db by lazy { TransactionDB(requireContext()) } lateinit var PieChart: GraphPage + private lateinit var transactionRepository: TransactionRepository + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -44,10 +48,12 @@ class GraphPage : Fragment(R.layout.fragment_graph_page) { pieChart.legend.isEnabled = false progressBarTumbas.max = 100 + transactionRepository = TransactionRepositoryImplement(db.transactionDao(), requireContext()) + transactionRepository.setNIM() lifecycleScope.launch{ val transaction = withContext(Dispatchers.IO){ - db.transactionDao().getAllTransactions() + transactionRepository.getAllTransactions() } val entries = ArrayList<PieEntry>() transaction.forEach{ diff --git a/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt b/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt index 4100d6d..384817d 100644 --- a/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt +++ b/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt @@ -15,6 +15,8 @@ import androidx.core.content.ContentProviderCompat.requireContext import com.example.bondoman.databinding.ActivityMainBinding import androidx.fragment.app.Fragment import com.example.bondoman.room.TransactionDB +import com.example.bondoman.room.TransactionRepository +import com.example.bondoman.room.TransactionRepositoryImplement import com.example.bondoman.utils.AuthManager import com.example.bondoman.utils.CheckExpiryToken import kotlinx.coroutines.CoroutineScope @@ -26,7 +28,7 @@ import java.util.Base64 class MainActivity : AppCompatActivity() { lateinit var binding: ActivityMainBinding private val db by lazy { TransactionDB(this) } - + private lateinit var transactionRepository: TransactionRepository private val networkChangeReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { @@ -88,9 +90,11 @@ class MainActivity : AppCompatActivity() { } private fun loadTransactions() { + transactionRepository = TransactionRepositoryImplement(db.transactionDao(), this) + transactionRepository.setNIM() CoroutineScope(Dispatchers.IO).launch { try { - val transc = db.transactionDao().getAllTransactions() + val transc = transactionRepository.getAllTransactions() Log.d("MainActivity", "dbResponse: $transc") } catch (e: Exception) { Log.e("MainActivity", "Error loading transactions: ${e.message}") @@ -99,9 +103,11 @@ class MainActivity : AppCompatActivity() { } private fun loadCachedTransactions() { + transactionRepository = TransactionRepositoryImplement(db.transactionDao(), this) + transactionRepository.setNIM() CoroutineScope(Dispatchers.IO).launch { try { - val transc = db.transactionDao().getAllTransactions() + val transc = transactionRepository.getAllTransactions() Log.d("MainActivity", "Cached transactions: $transc") } catch (e: Exception) { Log.e("MainActivity", "Error loading cached transactions: ${e.message}") diff --git a/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt b/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt index dd98a7c..5342507 100644 --- a/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt +++ b/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt @@ -2,8 +2,11 @@ package com.example.bondoman import android.app.Activity import android.content.ContentValues +import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.net.ConnectivityManager +import android.net.NetworkCapabilities import android.net.Uri import android.os.Build import android.os.Bundle @@ -245,8 +248,7 @@ class ScanPage : Fragment() { cleanedItems.add(newItem) } addToDatabase(cleanedItems) - - } + } } else { val errorBody = response.errorBody()?.string() @@ -319,6 +321,8 @@ class ScanPage : Fragment() { _binding = null } + + companion object { private val REQUIRED_PERMISSIONS = mutableListOf ( diff --git a/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt b/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt index 17ee17c..04782cf 100644 --- a/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt +++ b/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt @@ -17,6 +17,8 @@ import androidx.core.content.FileProvider import androidx.lifecycle.lifecycleScope import com.example.bondoman.room.Transaction import com.example.bondoman.room.TransactionDB +import com.example.bondoman.room.TransactionRepository +import com.example.bondoman.room.TransactionRepositoryImplement import com.example.bondoman.utils.AuthManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -30,6 +32,8 @@ import java.util.Base64 class SettingsPage : Fragment() { val db by lazy { TransactionDB(requireContext()) } + private lateinit var transactionRepository: TransactionRepository + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -119,9 +123,11 @@ class SettingsPage : Fragment() { } private fun export(format: String, send: Boolean){ + transactionRepository = TransactionRepositoryImplement(db.transactionDao(), requireContext()) + transactionRepository.setNIM() lifecycleScope.launch { val transactions = withContext(Dispatchers.IO) { - db.transactionDao().getAllTransactions() + transactionRepository.getAllTransactions() } saveTransactionsToExcel(transactions, requireContext(), format, send) diff --git a/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt b/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt index 65c50d1..3230e47 100644 --- a/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt +++ b/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt @@ -18,6 +18,8 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView import com.example.bondoman.room.Transaction import com.example.bondoman.room.TransactionDB +import com.example.bondoman.room.TransactionRepository +import com.example.bondoman.room.TransactionRepositoryImplement import com.example.bondoman.utils.AuthManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -32,6 +34,8 @@ import java.util.Locale class TransactionPage : Fragment(R.layout.fragment_transaction_page), TransactionAdapter.EditTransactionListener { val db by lazy { TransactionDB(requireContext()) } + private lateinit var transactionRepository: TransactionRepository + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -53,13 +57,17 @@ class TransactionPage : Fragment(R.layout.fragment_transaction_page), Transactio val recyclerViewHeight = (0.6 * height).toInt() + transactionRepository = TransactionRepositoryImplement(db.transactionDao(), requireContext()) + transactionRepository.setNIM() + + recyclerView.layoutParams.height = recyclerViewHeight recyclerView.requestLayout() lifecycleScope.launch { if (isNetworkAvailable()) { val transactions = withContext(Dispatchers.IO) { - db.transactionDao().getAllTransactions() + transactionRepository.getAllTransactions() } val balance = saldo(transactions) @@ -138,10 +146,12 @@ class TransactionPage : Fragment(R.layout.fragment_transaction_page), Transactio } fun loadCachedTransactions() { + transactionRepository = TransactionRepositoryImplement(db.transactionDao(), requireContext()) + transactionRepository.setNIM() lifecycleScope.launch { try { val transactions = withContext(Dispatchers.IO) { - db.transactionDao().getAllTransactions() + transactionRepository.getAllTransactions() } Log.d("TransactionPage", "Cached transactions: $transactions") diff --git a/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepository.kt b/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepository.kt new file mode 100644 index 0000000..8eb69a6 --- /dev/null +++ b/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepository.kt @@ -0,0 +1,6 @@ +package com.example.bondoman.room + +interface TransactionRepository { + suspend fun getAllTransactions(): List<Transaction> + fun setNIM() +} \ No newline at end of file diff --git a/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepositoryImplement.kt b/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepositoryImplement.kt new file mode 100644 index 0000000..6c19df3 --- /dev/null +++ b/bondoman/app/src/main/java/com/example/bondoman/room/TransactionRepositoryImplement.kt @@ -0,0 +1,30 @@ +package com.example.bondoman.room + +import android.content.Context +import android.util.Log +import com.example.bondoman.utils.AuthManager +import org.json.JSONObject +import java.nio.charset.StandardCharsets +import java.util.Base64 + +class TransactionRepositoryImplement(private val transactionDao: TransactionDao, private val context: Context): TransactionRepository { + private var nimUser: String ="" + + override fun setNIM() { + nimUser = getUserNIMFromToken() + } + override suspend fun getAllTransactions(): List<Transaction> { + return transactionDao.getAllTransactions().filter { it.email == nimUser } + } + private fun getUserNIMFromToken(): String { + val token = AuthManager.getToken(context).toString().split('.') + if (token.size != 3) { + Log.e("TransactionRepository", "Invalid token format") + return "" + } + + val payload = Base64.getUrlDecoder().decode(token[1]) + val payloadJson = JSONObject(String(payload, StandardCharsets.UTF_8)) + return payloadJson.optString("nim") + } +} \ No newline at end of file -- GitLab