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 fc60c22a93fc922b4507214ed201227f5f304884..82932623c523844a68603c993ee5dd377b36547a 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 4100d6d13049f259efdd08f4cd33857d9adc9d7c..384817ddc6e77db3c5b7fb3285cd6a8e4a5b97c5 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 dd98a7c40d3a77f3596d74a080ed2c99a662ea66..5342507965aa25e09ad31d9dd716ba85e4a0b38f 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 17ee17c6c1b85fa91b626d13f1b4267cbd0544a4..04782cf2844d139c6faa1f864af17fc5ee7b80ef 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 65c50d15783b7c541cdfc2a20c349328b320dd64..3230e4723ca3a3fc32de46f9c56deda127f81d53 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 0000000000000000000000000000000000000000..8eb69a69d62b05b5ee9410e063de4d877004f1ce --- /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 0000000000000000000000000000000000000000..6c19df3c1f446fd1f36b9016602bcb6396195da0 --- /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