diff --git a/app/src/main/java/com/example/bondoman/services/receivers/ExpiryBroadcastReceiver.kt b/app/src/main/java/com/example/bondoman/services/receivers/ExpiryBroadcastReceiver.kt index f50288fee96eb9402c44e016860eb43c25fa7340..ba96f994db77dc0b492d7ecb3fb7e1c9efc00980 100644 --- a/app/src/main/java/com/example/bondoman/services/receivers/ExpiryBroadcastReceiver.kt +++ b/app/src/main/java/com/example/bondoman/services/receivers/ExpiryBroadcastReceiver.kt @@ -3,13 +3,10 @@ package com.example.bondoman.services.receivers import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import android.content.IntentFilter import com.example.bondoman.data.utils.PreferencesManager import com.example.bondoman.views.activities.LoginActivity class ExpiryBroadcastReceiver : BroadcastReceiver() { - val filter = IntentFilter("com.example.bondoman.services.LOGOUT_TIMEOUT") - override fun onReceive( context: Context?, intent: Intent?, diff --git a/app/src/main/java/com/example/bondoman/services/services/ExpiryService.kt b/app/src/main/java/com/example/bondoman/services/services/ExpiryService.kt index c310549c2f5557928d78ae36b3adfdcf4bfc9f9f..f3972da3466f55f3e6e900e1cd09fc2c3126604e 100644 --- a/app/src/main/java/com/example/bondoman/services/services/ExpiryService.kt +++ b/app/src/main/java/com/example/bondoman/services/services/ExpiryService.kt @@ -4,13 +4,10 @@ import android.app.Service import android.content.Intent import android.os.IBinder import android.util.Log -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.example.bondoman.data.repositories.UserRepository import com.example.bondoman.data.utils.PreferencesManager import com.example.bondoman.networks.RetrofitClient -import com.example.bondoman.networks.responses.TokenResponse import com.example.bondoman.networks.services.UserService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -66,8 +63,12 @@ class ExpiryService : Service() { private fun checkTokenJob(token: String) { coroutineScope.launch { - val repository = UserRepository(RetrofitClient.getInstanceWithAuth(token).create( - UserService::class.java)) + val repository = + UserRepository( + RetrofitClient.getInstanceWithAuth(token).create( + UserService::class.java, + ), + ) val tokenResponse = repository.checkToken() // If not success then sendBroadcast diff --git a/app/src/main/java/com/example/bondoman/views/activities/LoginActivity.kt b/app/src/main/java/com/example/bondoman/views/activities/LoginActivity.kt index 0bd639382eb95d9a2b47042f5a6bbb982f9fd048..43a0d863faf0bdc74aa6c6f6cbecb7fef67e6c96 100644 --- a/app/src/main/java/com/example/bondoman/views/activities/LoginActivity.kt +++ b/app/src/main/java/com/example/bondoman/views/activities/LoginActivity.kt @@ -20,7 +20,7 @@ import com.google.android.material.textfield.TextInputEditText class LoginActivity : AppCompatActivity() { private val viewModel: LoginViewModel by viewModels() private val expiryDuration: Long = 300000L // 5 minutes -// private val expiryDuration: Long = 10000L // 10 seconds for testing +// private val expiryDuration: Long = 10000L // 10 seconds for testing private lateinit var loginLayout: ConstraintLayout private lateinit var emailInput: TextInputEditText diff --git a/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt b/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt index 6fc76766a70600a48564a8e9de3ff627d8082be0..e53ea7d45dfa90338e943eed28ab1e313cd96911 100644 --- a/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt +++ b/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt @@ -1,5 +1,9 @@ package com.example.bondoman.views.activities +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter import android.os.Bundle import android.view.View import android.view.ViewGroup @@ -51,6 +55,19 @@ class MainActivity : AppCompatActivity(), ParentActivityService { private val expiryReceiver = ExpiryBroadcastReceiver() + var randomizeNextTransaction: Boolean = false + private val randomizeReceiver = + object : BroadcastReceiver() { + override fun onReceive( + context: Context?, + intent: Intent?, + ) { + if (intent?.action == "com.example.bondoman.intents.RANDOMIZE_TRANSACTION") { + randomizeNextTransaction = true + } + } + } + override fun addDestinationChangedListener(listener: (Int) -> Unit) { destinationListeners.add(listener) } @@ -204,6 +221,11 @@ class MainActivity : AppCompatActivity(), ParentActivityService { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + if (savedInstanceState != null) { + randomizeNextTransaction = savedInstanceState.getBoolean("randomizeNextTransaction") + } + binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) @@ -214,17 +236,29 @@ class MainActivity : AppCompatActivity(), ParentActivityService { // initialize fragment id tracking currentFragmentId = null + // IntentFilter + val expiryReceiverFilter = IntentFilter("com.example.bondoman.services.LOGOUT_TIMEOUT") + val randomizeReceiverFilter = IntentFilter("com.example.bondoman.intents.RANDOMIZE_TRANSACTION") + // Register Expiry Receiver LocalBroadcastManager.getInstance(this) - .registerReceiver(expiryReceiver, expiryReceiver.filter) + .registerReceiver(expiryReceiver, expiryReceiverFilter) + LocalBroadcastManager.getInstance(this) + .registerReceiver(randomizeReceiver, randomizeReceiverFilter) initializeComponents() configureNavigation() } + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + outState.putBoolean("randomizeNextTransaction", randomizeNextTransaction) + } + override fun onDestroy() { LocalBroadcastManager.getInstance(this) .unregisterReceiver(expiryReceiver) + LocalBroadcastManager.getInstance(this).unregisterReceiver(randomizeReceiver) super.onDestroy() } } diff --git a/app/src/main/java/com/example/bondoman/views/fragments/SettingsFragment.kt b/app/src/main/java/com/example/bondoman/views/fragments/SettingsFragment.kt index 91f2b5e83b25a8b9bb4586be8b8f34d34b3efb8b..24a41ef4ae2b58e7e30be4d87b9cf3d507fd49bb 100644 --- a/app/src/main/java/com/example/bondoman/views/fragments/SettingsFragment.kt +++ b/app/src/main/java/com/example/bondoman/views/fragments/SettingsFragment.kt @@ -9,6 +9,7 @@ import android.widget.Toast import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider +import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.example.bondoman.R import com.example.bondoman.data.utils.PreferencesManager import com.example.bondoman.data.viewmodels.settings.ExportTransactionResponseContainer @@ -58,10 +59,10 @@ class SettingsFragment : Fragment() { Observer<ExportTransactionResponseContainer> { when (it.status) { ExportTransactionStatus.SUCCESS -> { - Toast.makeText(context, "Export Report Success", Toast.LENGTH_SHORT).show() + Toast.makeText(requireActivity(), "Export Report Success", Toast.LENGTH_SHORT).show() } ExportTransactionStatus.FAILED -> { - Toast.makeText(context, "Export Report Failed", Toast.LENGTH_SHORT).show() + Toast.makeText(requireActivity(), "Export Report Failed", Toast.LENGTH_SHORT).show() } } } @@ -71,11 +72,13 @@ class SettingsFragment : Fragment() { } private fun onSendReportButtonClick() { - Toast.makeText(context, "Send Report", Toast.LENGTH_SHORT).show() + Toast.makeText(requireActivity(), "Send Report", Toast.LENGTH_SHORT).show() } private fun onRandomizeTransactionButtonClick() { - Toast.makeText(context, "Randomize Transaction", Toast.LENGTH_SHORT).show() + val intent = Intent("com.example.bondoman.intents.RANDOMIZE_TRANSACTION") + LocalBroadcastManager.getInstance(requireActivity()).sendBroadcast(intent) +// Toast.makeText(requireActivity(), "Add Transaction Page has been randomized", Toast.LENGTH_SHORT).show() } private fun onLogoutButtonClick() { diff --git a/app/src/main/java/com/example/bondoman/views/fragments/TransactionFormFragment.kt b/app/src/main/java/com/example/bondoman/views/fragments/TransactionFormFragment.kt index 139b988fd8358b081c54645f5c0020f469f32c91..0118facc90601f8a60b85055a8bb00c8ce1632c6 100644 --- a/app/src/main/java/com/example/bondoman/views/fragments/TransactionFormFragment.kt +++ b/app/src/main/java/com/example/bondoman/views/fragments/TransactionFormFragment.kt @@ -25,6 +25,7 @@ import com.example.bondoman.data.models.TransactionCategory import com.example.bondoman.data.models.transactionCategoryMap import com.example.bondoman.data.utils.TransactionParser import com.example.bondoman.databinding.FragmentTransactionFormBinding +import com.example.bondoman.views.activities.MainActivity import com.example.bondoman.views.utils.interfaces.ParentActivityService import com.example.bondoman.views.utils.interfaces.SecondaryFragment import java.util.Date @@ -410,6 +411,18 @@ abstract class TransactionFormFragment : Fragment(), SecondaryFragment { return ValidationResult(true, null) } + private fun randomizeTransaction() { + val randomCategory = transactionCategoryMap.keys.random() + val randomTitle = "Transaction " + (0..1000).random() + val randomAmount = (0..10000).random().times(1000L) + val randomLocation = null + + setCategory(transactionCategoryMap[randomCategory]!!) + setTitle(randomTitle) + setAmount(randomAmount) + setLocation(randomLocation) + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -461,4 +474,20 @@ abstract class TransactionFormFragment : Fragment(), SecondaryFragment { return view } + + override fun onViewCreated( + view: View, + savedInstanceState: Bundle?, + ) { + super.onViewCreated(view, savedInstanceState) + + // Randomize Transaction + if (activity is MainActivity) { + val mainActivity = activity as MainActivity + if (mainActivity.randomizeNextTransaction) { + randomizeTransaction() + mainActivity.randomizeNextTransaction = false + } + } + } }