Skip to content
Snippets Groups Projects
Commit 56373c43 authored by auliamey's avatar auliamey
Browse files

Merge branch 'main' of...

Merge branch 'main' of https://gitlab.informatika.org/if3210-2024-android-jwr/IF3210-2024-Android-JWR into feat/transaction
parents fc76b5a1 f82e8524
1 merge request!17Feat/transaction
Showing
with 727 additions and 145 deletions
......@@ -56,10 +56,6 @@
>
</activity>
<activity android:name=".ScanActivity"
android:exported="false"
>
</activity>
<meta-data
android:name="preloaded_fonts"
......@@ -75,6 +71,6 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<service android:name=".backgroundService.JWTValidationService"/>
</application>
</manifest>
\ No newline at end of file
......@@ -49,7 +49,6 @@ class LoginActivity : AppCompatActivity() {
connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
networkCallback = NetworkCallbackImplementation(this)
registerNetworkCallback()
if (isLoggedIn()) {
// If the user credential is stored, login and start the MainActivity
......@@ -113,7 +112,6 @@ class LoginActivity : AppCompatActivity() {
override fun onDestroy() {
super.onDestroy()
unregisterNetworkCallback()
}
private fun isLoggedIn(): Boolean {
......
......@@ -83,7 +83,6 @@ class MainActivity : AppCompatActivity() {
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
if (!isLocationPermissionGranted()) {
requestLocationPermission()
}
......@@ -98,19 +97,23 @@ class MainActivity : AppCompatActivity() {
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_transaction, R.id.navigation_dashboard, R.id.navigation_settings
R.id.navigation_transaction, R.id.navigation_dashboard, R.id.navigation_settings, R.id.navigation_transaction_add, R.id.navigation_transaction_detail, R.id.navigation_twibbon, R.id.navigation_scan
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
val fab: FloatingActionButton = binding.fabScan
fab.setOnClickListener {
// Start ScanActivity
val intent = Intent(this, ScanActivity::class.java)
startScanActivityForResult.launch(intent)
// Navigate ScanFragment
navController.navigate(R.id.navigation_scan)
val menuItem = navView.menu.findItem(R.id.navigation_scan)
menuItem.isChecked = true
}
navView.setOnItemSelectedListener { menuItem ->
when (menuItem.itemId) {
R.id.navigation_transaction -> {
// Handle transaction navigation
navController.navigate(R.id.navigation_transaction)
......@@ -136,6 +139,10 @@ class MainActivity : AppCompatActivity() {
finish()
true
}
R.id.navigation_scan->{
navController.navigate(R.id.navigation_scan)
true
}
else -> false
}
}
......@@ -152,8 +159,9 @@ class MainActivity : AppCompatActivity() {
connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
networkCallback = NetworkCallbackImplementation(this)
registerNetworkCallback()
val serviceIntent = Intent(this, JWTValidationService::class.java)
startService(serviceIntent)
}
private fun isLocationPermissionGranted(): Boolean {
return ContextCompat.checkSelfPermission(
this,
......@@ -161,6 +169,7 @@ class MainActivity : AppCompatActivity() {
) == PackageManager.PERMISSION_GRANTED
}
// Request location permission
private fun requestLocationPermission() {
ActivityCompat.requestPermissions(
this,
......@@ -204,10 +213,13 @@ class MainActivity : AppCompatActivity() {
override fun onPause() {
super.onPause()
unregisterNetworkCallback()
val serviceIntent = Intent(this, JWTValidationService::class.java)
stopService(serviceIntent)
}
override fun onDestroy() {
super.onDestroy()
val serviceIntent = Intent(this, JWTValidationService::class.java)
stopService(serviceIntent)
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
......
......@@ -28,7 +28,7 @@ import kotlin.math.log
class JWTValidationService : Service() {
private lateinit var handler: Handler
private lateinit var runnable: Runnable
private val INTERVAL: Long = 5 * 60 * 1000 // 5 minutes in milliseconds
private val INTERVAL: Long = 2 * 60 * 1000 // 1 minutes in milliseconds
private var client = OkHttpClient()
private val validateTokenURL = "https://pbd-backend-2024.vercel.app/api/auth/token"
......@@ -76,7 +76,7 @@ class JWTValidationService : Service() {
override fun onFailure(call: Call, e: IOException) {
handler.post{
Toast.makeText(applicationContext, "Failed to re-login", Toast.LENGTH_SHORT).show()
Toast.makeText(applicationContext, "Connection error", Toast.LENGTH_SHORT).show()
}
......@@ -97,21 +97,23 @@ class JWTValidationService : Service() {
val password = sharedPreferences.getString("password","")
var isRememberTemp = sharedPreferences.getString("isRemember","")
var isRemember = false
if (isRememberTemp == "true"){
isRemember = true
}else{
isRemember = false
}
isRemember = isRememberTemp == "true"
it.close()
if (email != null && password != null) {
post(email,password,isRemember)
handler.post{
Toast.makeText(applicationContext,"Re-login success", Toast.LENGTH_SHORT).show()
}
} else {
handler.post{
Toast.makeText(applicationContext, "Server Error", Toast.LENGTH_SHORT).show()
}
}
}else{
handler.post{
Toast.makeText(applicationContext,"Token is not exp", Toast.LENGTH_SHORT).show()
}
return
}
} ?: run {
......@@ -119,7 +121,7 @@ class JWTValidationService : Service() {
}else{
handler.post{
Toast.makeText(applicationContext,"Failed to check token, server error", Toast.LENGTH_SHORT).show()
Toast.makeText(applicationContext,"Failed to check token, Server error", Toast.LENGTH_SHORT).show()
}
}
......@@ -128,7 +130,6 @@ class JWTValidationService : Service() {
}
})
}
fun isTokenExpired(expirationTime: Long): Boolean {
val currentTimeSeconds = Instant.now().epochSecond
......
package com.example.pbd_jwr.ui.scan
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class ScanViewModel : ViewModel() {
private val _text = MutableLiveData<String>().apply {
value = "This is scan Fragment"
}
val text: LiveData<String> = _text
}
\ No newline at end of file
package com.example.pbd_jwr.ui.transaction
import android.app.AlertDialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
......@@ -51,19 +50,15 @@ class TransactionDetailFragment : Fragment(), OnMapReadyCallback {
if (transaction != null) {
displayTransactionDetails(transaction)
binding.btnBack.setOnClickListener {
findNavController().popBackStack()
}
binding.btnDelete.setOnClickListener {
showDeleteConfirmationDialog(transaction)
transaction?.let { deleteTransaction(it) }
}
binding.btnEdit.setOnClickListener {
val bundle = Bundle().apply {
putParcelable("transaction", transaction)
putLong("transactionId", transaction.id)
putBoolean("editMode", true)
putLong("transactionId", transaction.id) // Pass the transaction ID
putBoolean("editMode", true) // Set edit mode to true
}
findNavController().navigate(R.id.action_transactionDetailFragment_to_transactionAddFragment, bundle)
}
......
......@@ -7,11 +7,11 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import com.example.pbd_jwr.ScanActivity
import com.example.pbd_jwr.ui.scan.ScanFragment
import com.example.pbd_jwr.databinding.TransactionDummyDetailBinding
class TransactionDummyAdapter(context: Context, transactions: List<ScanActivity.TransactionDummy>) :
ArrayAdapter<ScanActivity.TransactionDummy>(context, 0, transactions) {
class TransactionDummyAdapter(context: Context, transactions: List<ScanFragment.TransactionDummy>) :
ArrayAdapter<ScanFragment.TransactionDummy>(context, 0, transactions) {
@SuppressLint("SetTextI18n")
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
......
<vector android:height="24dp" android:tint="#B29F7A"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M7,17V9.93L13.93,3l0,0H5C3.9,3 3,3.9 3,5v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2v-8.93L14.07,17H7z"/>
<path android:fillColor="@android:color/white" android:pathData="M9,15l4.24,0l7.2,-7.2l-4.24,-4.24l-7.2,7.2z"/>
<path android:fillColor="@android:color/white" android:pathData="M22.91,2.49l-1.41,-1.41c-0.78,-0.78 -2.05,-0.78 -2.83,0l-1.06,1.06l4.24,4.24l1.06,-1.06C23.7,4.54 23.7,3.27 22.91,2.49z"/>
</vector>
<vector android:height="24dp" android:tint="#B29F7A"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,9h-4V3H9v6H5l7,7 7,-7zM5,18v2h14v-2H5z"/>
</vector>
<vector android:height="24dp" android:tint="#B29F7A"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M15.5,13.5c0,2 -2.5,3.5 -2.5,5h-2c0,-1.5 -2.5,-3 -2.5,-5c0,-1.93 1.57,-3.5 3.5,-3.5h0C13.93,10 15.5,11.57 15.5,13.5zM13,19.5h-2V21h2V19.5zM19,13c0,1.68 -0.59,3.21 -1.58,4.42l1.42,1.42C20.18,17.27 21,15.23 21,13c0,-2.74 -1.23,-5.19 -3.16,-6.84l-1.42,1.42C17.99,8.86 19,10.82 19,13zM16,5l-4,-4v3c0,0 0,0 0,0c-4.97,0 -9,4.03 -9,9c0,2.23 0.82,4.27 2.16,5.84l1.42,-1.42C5.59,16.21 5,14.68 5,13c0,-3.86 3.14,-7 7,-7c0,0 0,0 0,0v3L16,5z"/>
</vector>
<vector android:height="24dp" android:tint="#B29F7A"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M9,3L7.17,5L4,5c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,7c0,-1.1 -0.9,-2 -2,-2h-3.17L15,3L9,3zM12,18c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
<path android:fillColor="@android:color/white" android:pathData="M12,17l1.25,-2.75L16,13l-2.75,-1.25L12,9l-1.25,2.75L8,13l2.75,1.25z"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".MainActivity"
app:layout_constraintTop_toTopOf="parent"
android:overScrollMode="never"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/container"
tools:context=".LoginActivity"
android:paddingBottom="30dp"
>
<TextView
......@@ -85,6 +93,7 @@
android:layout_width="150dp"
android:layout_height="60dp"
app:layout_constraintTop_toBottomOf="@id/rememberMe"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:theme="@style/Theme.login"
......@@ -93,4 +102,6 @@
android:fontFamily="@font/press_start_2p"
android:paddingTop="12dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
\ No newline at end of file
......@@ -5,7 +5,6 @@
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="10dp"
tools:context=".MainActivity"
>
......@@ -28,7 +27,6 @@
android:layout_height="match_parent"
app:menu="@menu/bottom_nav_menu"
android:layout_marginEnd="20dp"
android:background="@android:color/transparent"
app:itemTextAppearanceActive="@style/BottomNavigationView.Active"
app:itemTextAppearanceInactive="@style/BottomNavigationView"
/>
......@@ -57,7 +55,9 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
app:navGraph="@navigation/mobile_navigation" />
app:navGraph="@navigation/mobile_navigation"
android:layout_marginBottom="60dp"
/>
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.dashboard.DashboardFragment">
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
android:overScrollMode="never"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".ui.dashboard.DashboardFragment"
android:paddingBottom="40dp"
>
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/pieChart"
android:layout_width="match_parent"
android:layout_height="600dp" />
android:layout_height="400dp"
/>
</RelativeLayout>
</ScrollView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ScanActivity">
android:overScrollMode="never"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".ui.scan.ScanFragment"
android:paddingHorizontal="8dp"
>
<Button
android:id="@+id/scanBtn"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="Scan"
android:text="@string/title_scan"
app:layout_constraintBottom_toTopOf="@+id/listDummyTransaction"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/galleryBtn"
app:layout_constraintTop_toBottomOf="@+id/imageView"
app:layout_constraintVertical_bias="0.3" />
/>
<Button
android:id="@+id/galleryBtn"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="Album"
android:text="@string/album"
app:layout_constraintBottom_toTopOf="@+id/listDummyTransaction"
app:layout_constraintStart_toEndOf="@+id/scanBtn"
app:layout_constraintLeft_toRightOf="@id/scanBtn"
app:layout_constraintRight_toLeftOf="@id/uploadBtn"
app:layout_constraintTop_toBottomOf="@+id/imageView"
app:layout_constraintVertical_bias="0.3"/>
/>
<Button
android:id="@+id/uploadBtn"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:text="Send"
android:text="@string/send"
app:layout_constraintBottom_toTopOf="@+id/listDummyTransaction"
app:layout_constraintEnd_toStartOf="@+id/saveTransactionsBtn"
app:layout_constraintStart_toEndOf="@+id/galleryBtn"
app:layout_constraintRight_toLeftOf="@id/saveTransactionsBtn"
app:layout_constraintLeft_toRightOf="@id/galleryBtn"
app:layout_constraintTop_toBottomOf="@+id/imageView"
app:layout_constraintVertical_bias="0.3" />
/>
<ImageView
android:id="@+id/imageView"
android:layout_width="335dp"
android:layout_height="335dp"
android:contentDescription="PreviewImg"
app:layout_constraintBottom_toTopOf="@+id/listDummyTransaction"
android:contentDescription="@string/previewimg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.366"
tools:srcCompat="@tools:sample/avatars" />
<Button
android:id="@+id/backBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Back"
app:layout_constraintBottom_toTopOf="@+id/imageView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.117"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.794" />
<Button
android:id="@+id/saveTransactionsBtn"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="Save"
android:text="@string/save"
app:layout_constraintBottom_toTopOf="@+id/listDummyTransaction"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@id/uploadBtn"
app:layout_constraintTop_toBottomOf="@+id/imageView"
app:layout_constraintVertical_bias="0.3" />
/>
<ListView
android:id="@+id/listDummyTransaction"
android:layout_width="324dp"
android:layout_height="211dp"
android:layout_marginBottom="16dp"
android:layout_width="323dp"
android:layout_height="193dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.494"
app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
android:textSize="16sp"
/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Transactions:"
android:text="@string/title_transaction"
android:textSize="25sp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toTopOf="@+id/listDummyTransaction"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.165"
app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/scanBtn" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</ScrollView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
android:overScrollMode="never"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".ui.settings.SettingsFragment"
android:paddingBottom="50dp"
android:paddingBottom="20dp"
>
......@@ -13,9 +20,9 @@
android:id="@+id/sendEmailButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginTop="16dp"
android:drawableEnd="@drawable/baseline_email_24"
android:paddingHorizontal="50dp"
android:paddingHorizontal="20dp"
android:text="@string/send_email"
app:layout_constraintBottom_toTopOf="@+id/saveBtn"
app:layout_constraintLeft_toLeftOf="parent"
......@@ -27,36 +34,34 @@
android:id="@+id/saveBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.221" />
android:text="@string/save"
app:layout_constraintTop_toBottomOf="@id/sendEmailButton"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:drawableEnd="@drawable/baseline_file_download_24"
/>
<Button
android:id="@+id/twibbonButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="26dp"
android:text="Twibbon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
android:text="@string/twibbon"
app:layout_constraintTop_toBottomOf="@+id/saveBtn"
app:layout_constraintVertical_bias="0.024"/>
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:drawableEnd="@drawable/baseline_twibbon_24"
/>
<Button
android:id="@+id/randomTransactionBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RandomizeTransaction"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.233" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
android:text="@string/randomizetransaction"
app:layout_constraintTop_toBottomOf="@id/twibbonButton"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:drawableEnd="@drawable/baseline_random_24"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
\ No newline at end of file
......@@ -4,9 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:paddingBottom="50dp"
tools:context=".ui.transaction.TransactionFragment"
>
<View
android:id="@+id/view"
......@@ -25,7 +23,9 @@
app:layout_constraintTop_toBottomOf="@id/view"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
app:layout_constraintEnd_toEndOf="parent"
android:overScrollMode="never"
/>
<ImageButton
android:id="@+id/btnAdd"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="22dp">
android:layout_height="wrap_content"
android:overScrollMode="never"
>
<!-- Back Button -->
<Button
android:id="@+id/backButton"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
tools:context="..ui.transaction.TransactionAddFragment"
android:paddingBottom="30dp"
>
<TextView
android:id="@+id/titleAddTransaction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:text="Title : "
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/editTextTitle"
android:textSize="16sp"
android:paddingHorizontal="2dp"
android:paddingVertical="5dp"
/>
<!-- Form Fields -->
<EditText
android:id="@+id/editTextTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="16dp"
android:hint="Title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/backButton" />
app:layout_constraintTop_toBottomOf="@id/titleAddTransaction"
android:background="@drawable/custom_input"
android:textColor="@color/black"
android:paddingVertical="12dp"
android:paddingHorizontal="8dp"
/>
<!-- Location Field -->
......@@ -40,52 +50,105 @@
android:id="@+id/spinnerCategory"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/editTextTitle" />
app:layout_goneMarginTop="5dp"
app:layout_constraintTop_toBottomOf="@id/editTextTitle"
android:textColor="@color/black"
android:paddingVertical="12dp"
android:paddingHorizontal="8dp"
app:layout_constraintBottom_toTopOf="@id/titleAmountTransaction"
android:layout_marginTop="10dp"
android:layout_marginBottom="8dp"
/>
<TextView
android:id="@+id/titleAmountTransaction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Amount :"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/spinnerCategory"
app:layout_constraintBottom_toTopOf="@id/editTextAmount"
android:textSize="16sp"
android:paddingHorizontal="2dp"
android:paddingVertical="5dp"
/>
<EditText
android:id="@+id/editTextAmount"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="28dp"
android:layout_marginEnd="16dp"
android:hint="Amount"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/spinnerCategory" />
app:layout_constraintTop_toBottomOf="@id/titleAmountTransaction"
android:textColor="@color/black"
android:paddingVertical="12dp"
android:paddingHorizontal="8dp"
android:background="@drawable/custom_input"
/>
<TextView
android:id="@+id/titleLatTransaction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lat : "
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/editTextAmount"
app:layout_constraintBottom_toTopOf="@id/editTextLatitude"
android:textSize="16sp"
android:paddingHorizontal="2dp"
android:paddingVertical="5dp"
/>
<EditText
android:id="@+id/editTextLatitude"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="28dp"
android:layout_marginEnd="16dp"
android:hint="Latitude"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/editTextAmount" />
app:layout_constraintTop_toBottomOf="@id/titleLatTransaction"
app:layout_constraintBottom_toTopOf="@id/titleLongTransaction"
android:textColor="@color/black"
android:paddingVertical="12dp"
android:paddingHorizontal="8dp"
android:background="@drawable/custom_input"
/>
<TextView
android:id="@+id/titleLongTransaction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Long : "
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/editTextLatitude"
app:layout_constraintBottom_toTopOf="@id/editTextLongitude"
android:textSize="16sp"
android:paddingHorizontal="2dp"
android:paddingVertical="5dp"
/>
<EditText
android:id="@+id/editTextLongitude"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="16dp"
android:hint="Longitude"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/editTextLatitude" />
app:layout_constraintTop_toBottomOf="@id/titleLongTransaction"
app:layout_constraintBottom_toTopOf="@id/btnSubmit"
android:textColor="@color/black"
android:paddingVertical="12dp"
android:paddingHorizontal="8dp"
android:background="@drawable/custom_input"
/>
<!-- Submit Button -->
......@@ -93,12 +156,14 @@
android:id="@+id/btnSubmit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginBottom="212dp"
android:text="@string/submit"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/editTextLongitude"
app:layout_constraintHorizontal_bias="0.533"
app:layout_constraintStart_toStartOf="@id/editTextLongitude" />
app:layout_constraintTop_toBottomOf="@id/editTextLongitude"
android:layout_marginTop="5dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
android:overScrollMode="never"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingTop="10dp"
android:paddingBottom="30dp"
>
<TextView
android:id="@+id/textViewTitle"
......@@ -125,17 +136,6 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/textViewLocation" />
<Button
android:id="@+id/btnBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="2dp"
android:text="Back"
android:textColor="@android:color/black"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="16dp" />
<Button
android:id="@+id/btnDelete"
......@@ -143,23 +143,26 @@
android:layout_height="wrap_content"
android:elevation="2dp"
android:text="Delete"
android:textColor="@android:color/black"
app:layout_constraintStart_toEndOf="@+id/btnBack"
app:layout_constraintTop_toTopOf="@+id/btnBack"
app:layout_constraintBottom_toBottomOf="@+id/btnBack"
android:layout_marginStart="8dp" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginEnd="5dp"
/>
<Button
android:id="@+id/btnEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:elevation="2dp"
android:text="Edit"
android:textColor="@android:color/black"
app:layout_constraintStart_toEndOf="@+id/btnDelete"
app:layout_constraintTop_toTopOf="@+id/btnDelete"
app:layout_constraintBottom_toBottomOf="@+id/btnDelete"
android:layout_marginStart="8dp" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginStart="5dp"
android:drawableEnd="@drawable/baseline_edit_square_24"
/>
<fragment
android:id="@+id/mapFragment"
......@@ -172,3 +175,5 @@
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
\ No newline at end of file
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