Skip to content
Snippets Groups Projects
Commit b1f57c45 authored by Rayhan Hanif Maulana Pradana's avatar Rayhan Hanif Maulana Pradana
Browse files

Merge branch 'randomizer' into 'dev'

Randomizer

See merge request !7
parents 00275828 a3c9cee4
Branches
3 merge requests!13Release,!11proper save for gmail,!7Randomizer
...@@ -25,6 +25,15 @@ ...@@ -25,6 +25,15 @@
android:permission="android.permission.INTERNET"> android:permission="android.permission.INTERNET">
</service> </service>
<receiver
android:name=".ui.transactions.TransactionsBroadcastReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="com.BondoYap.transactions.randomize" />
</intent-filter>
</receiver>
<activity <activity
android:name=".ui.login.LoginActivity" android:name=".ui.login.LoginActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
...@@ -41,6 +50,8 @@ ...@@ -41,6 +50,8 @@
android:exported="true"> android:exported="true">
</activity> </activity>
</application> </application>
</manifest> </manifest>
\ No newline at end of file
...@@ -2,23 +2,38 @@ package com.example.bondoyap ...@@ -2,23 +2,38 @@ package com.example.bondoyap
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import androidx.activity.viewModels
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContentProviderCompat.requireContext
import androidx.fragment.app.viewModels
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.navigation.findNavController import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController import androidx.navigation.ui.setupWithNavController
import com.example.bondoyap.service.api.Constants.SHARED_PREFS_NAME import com.example.bondoyap.service.api.Constants.SHARED_PREFS_NAME
import com.example.bondoyap.databinding.ActivityMainBinding import com.example.bondoyap.databinding.ActivityMainBinding
import com.example.bondoyap.service.api.Constants
import com.example.bondoyap.service.jwt.JwtService import com.example.bondoyap.service.jwt.JwtService
import com.example.bondoyap.ui.login.LoginActivity import com.example.bondoyap.ui.login.LoginActivity
import com.example.bondoyap.ui.transactions.TransactionsApplication
import com.example.bondoyap.ui.transactions.TransactionsBroadcastReceiver
import com.example.bondoyap.ui.transactions.TransactionsViewModel
import com.example.bondoyap.ui.transactions.TransactionsViewModelFactory
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding private lateinit var binding: ActivityMainBinding
private lateinit var sharedPreferences: SharedPreferences private lateinit var sharedPreferences: SharedPreferences
private lateinit var transactionsBroadcastReceiver: TransactionsBroadcastReceiver
private val transactionsViewModel: TransactionsViewModel by viewModels {
TransactionsViewModelFactory((applicationContext as TransactionsApplication).repository)
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -48,6 +63,10 @@ class MainActivity : AppCompatActivity() { ...@@ -48,6 +63,10 @@ class MainActivity : AppCompatActivity() {
setupActionBarWithNavController(navController, appBarConfiguration) setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController) navView.setupWithNavController(navController)
transactionsBroadcastReceiver = TransactionsBroadcastReceiver(transactionsViewModel)
val filter = IntentFilter(Constants.ACTION_RANDOMIZE_TRANSACTIONS)
LocalBroadcastManager.getInstance(this).registerReceiver(transactionsBroadcastReceiver, filter)
} }
override fun onSupportNavigateUp(): Boolean { override fun onSupportNavigateUp(): Boolean {
...@@ -57,4 +76,9 @@ class MainActivity : AppCompatActivity() { ...@@ -57,4 +76,9 @@ class MainActivity : AppCompatActivity() {
private fun isLoggedIn(): Boolean { private fun isLoggedIn(): Boolean {
return sharedPreferences.getBoolean("isLoggedIn", false) return sharedPreferences.getBoolean("isLoggedIn", false)
} }
override fun onDestroy() {
super.onDestroy()
LocalBroadcastManager.getInstance(this).unregisterReceiver(transactionsBroadcastReceiver)
}
} }
\ No newline at end of file
...@@ -3,4 +3,5 @@ package com.example.bondoyap.service.api ...@@ -3,4 +3,5 @@ package com.example.bondoyap.service.api
object Constants { object Constants {
const val BASE_URL: String = "https://pbd-backend-2024.vercel.app/api/" const val BASE_URL: String = "https://pbd-backend-2024.vercel.app/api/"
const val SHARED_PREFS_NAME = "BondoYap" const val SHARED_PREFS_NAME = "BondoYap"
const val ACTION_RANDOMIZE_TRANSACTIONS = "com.BondoYap.transactions.randomize"
} }
\ No newline at end of file
...@@ -2,13 +2,16 @@ package com.example.bondoyap.ui.settings ...@@ -2,13 +2,16 @@ package com.example.bondoyap.ui.settings
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.example.bondoyap.databinding.FragmentSettingsBinding import com.example.bondoyap.databinding.FragmentSettingsBinding
import com.example.bondoyap.service.api.Constants.ACTION_RANDOMIZE_TRANSACTIONS
import com.example.bondoyap.ui.login.LoginActivity import com.example.bondoyap.ui.login.LoginActivity
class SettingsFragment : Fragment() { class SettingsFragment : Fragment() {
...@@ -25,6 +28,7 @@ class SettingsFragment : Fragment() { ...@@ -25,6 +28,7 @@ class SettingsFragment : Fragment() {
_binding = FragmentSettingsBinding.inflate(inflater, container, false) _binding = FragmentSettingsBinding.inflate(inflater, container, false)
return binding.root return binding.root
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
...@@ -60,15 +64,20 @@ class SettingsFragment : Fragment() { ...@@ -60,15 +64,20 @@ class SettingsFragment : Fragment() {
randomButton.setOnClickListener { randomButton.setOnClickListener {
Toast.makeText(appContext, "Membuat transaksi random ...", Toast.LENGTH_SHORT).show() Toast.makeText(appContext, "Membuat transaksi random ...", Toast.LENGTH_SHORT).show()
//todo
val intent = Intent(ACTION_RANDOMIZE_TRANSACTIONS)
intent.putExtra("message", "Randomize from setting!")
LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent)
Log.d("BroadcastDebug", "Sending broadcast from SettingsFragment")
} }
saveButton.setOnClickListener{ saveButton.setOnClickListener {
Toast.makeText(appContext, "Menyimpan transaksi...", Toast.LENGTH_SHORT).show() Toast.makeText(appContext, "Menyimpan transaksi...", Toast.LENGTH_SHORT).show()
//todo //todo
} }
sendButton.setOnClickListener{ sendButton.setOnClickListener {
Toast.makeText(appContext, "Mengirimkan transaksi ...", Toast.LENGTH_SHORT).show() Toast.makeText(appContext, "Mengirimkan transaksi ...", Toast.LENGTH_SHORT).show()
//todo //todo
} }
......
package com.example.bondoyap.ui.transactions package com.example.bondoyap.ui.transactions
import android.R import android.R
import android.content.Context
import android.content.IntentFilter
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import android.widget.Toast import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.example.bondoyap.databinding.FragmentAddTransactionsBinding import com.example.bondoyap.databinding.FragmentAddTransactionsBinding
import com.example.bondoyap.service.api.Constants.ACTION_RANDOMIZE_TRANSACTIONS
import com.example.bondoyap.ui.transactions.data.Transactions import com.example.bondoyap.ui.transactions.data.Transactions
import com.google.android.gms.location.FusedLocationProviderClient import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices import com.google.android.gms.location.LocationServices
...@@ -85,7 +91,7 @@ class AddTransactionsFragment : Fragment() { ...@@ -85,7 +91,7 @@ class AddTransactionsFragment : Fragment() {
0.0 0.0
} }
val location = fusedLocationProviderClient.lastLocation val location = fusedLocationProviderClient.lastLocation
location.addOnSuccessListener { location.addOnSuccessListener {
if(it != null) { if(it != null) {
latitude = it.latitude.toString() latitude = it.latitude.toString()
......
package com.example.bondoyap.ui.transactions
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.util.Log
import android.widget.Toast
import androidx.core.app.ActivityCompat
import com.example.bondoyap.ui.transactions.data.Transactions
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import kotlin.random.Random
class TransactionsBroadcastReceiver(private val transactionsViewModel: TransactionsViewModel) : BroadcastReceiver() {
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
private lateinit var latitude: String
private lateinit var longitude: String
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("BroadcastDebug", "Broadcast received in AddTransactionsFragment")
context ?: return
val randomJudul = "Random Judul ${Random.nextInt(1000)}"
val randomNominal = Random.nextDouble(1000000000000000.0)
val randomIsPemasukan = Random.nextBoolean()
val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
val currentDate = dateFormat.format(Date())
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context)
val location = fusedLocationProviderClient.lastLocation
location.addOnSuccessListener {
if(it != null) {
latitude = it.latitude.toString()
longitude = it.longitude.toString()
val transaction: Transactions = Transactions(
judul = randomJudul,
nominal = randomNominal,
isPemasukan = randomIsPemasukan,
tanggal = currentDate,
longitude = longitude,
latitude = latitude
)
transactionsViewModel.upsert(transaction)
}
}
if(
ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
) {
val transaction: Transactions = Transactions(
judul = randomJudul,
nominal = randomNominal,
isPemasukan = randomIsPemasukan,
tanggal = currentDate,
longitude = "",
latitude = ""
)
transactionsViewModel.upsert(transaction)
Toast.makeText(context.applicationContext,
"Izinkan location permission untuk membuat transaksi random dengan lokasi",
Toast.LENGTH_SHORT).show()
}
Toast.makeText(context.applicationContext, "Transaksi random telah dibuat", Toast.LENGTH_SHORT).show()
}
}
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.example.bondoyap.ui.transactions ...@@ -2,6 +2,7 @@ package com.example.bondoyap.ui.transactions
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
...@@ -15,12 +16,11 @@ import androidx.recyclerview.widget.LinearLayoutManager ...@@ -15,12 +16,11 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.example.bondoyap.R import com.example.bondoyap.R
import com.example.bondoyap.databinding.FragmentTransactionsBinding import com.example.bondoyap.databinding.FragmentTransactionsBinding
import com.example.bondoyap.service.api.Constants.ACTION_RANDOMIZE_TRANSACTIONS
class TransactionsFragment: Fragment() { class TransactionsFragment: Fragment() {
private var _binding: FragmentTransactionsBinding? = null private var _binding: FragmentTransactionsBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!! private val binding get() = _binding!!
private val transactionsViewModel: TransactionsViewModel by viewModels { private val transactionsViewModel: TransactionsViewModel by viewModels {
...@@ -52,6 +52,7 @@ class TransactionsFragment: Fragment() { ...@@ -52,6 +52,7 @@ class TransactionsFragment: Fragment() {
return binding.root return binding.root
} }
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
_binding = null _binding = null
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment