diff --git a/app/src/main/java/com/example/myapplication/LoginActivity.kt b/app/src/main/java/com/example/myapplication/LoginActivity.kt index b2537955bc3e91d1db404dbd8a363d45c6a7f641..437fe7ca280b1e64f93de645bf68f40f5d5bd2c6 100644 --- a/app/src/main/java/com/example/myapplication/LoginActivity.kt +++ b/app/src/main/java/com/example/myapplication/LoginActivity.kt @@ -34,12 +34,14 @@ class LoginActivity : AppCompatActivity() { // Perform login logic here if (isValidCredentials(email, password)) { // Update login status to true - setLoggedIn(true) + setLoggedIn() // Navigate to MainActivity val intent = Intent(this, MainActivity::class.java) startActivity(intent) - finish() // Close login activity + + // Close login activity + finish() } else { // Display error message or handle invalid login } @@ -72,11 +74,11 @@ class LoginActivity : AppCompatActivity() { return email.isNotEmpty() && password == "password" } - private fun setLoggedIn(isLoggedIn: Boolean) { + private fun setLoggedIn() { // Save the login status using SharedPreferences or any other suitable method val sharedPreferences = getSharedPreferences("login_status", MODE_PRIVATE) val editor = sharedPreferences.edit() - editor.putBoolean("isLoggedIn", isLoggedIn) + editor.putBoolean("isLoggedIn", true) editor.apply() } } diff --git a/app/src/main/java/com/example/myapplication/MainActivity.kt b/app/src/main/java/com/example/myapplication/MainActivity.kt index 16c818fcd93a62a8936a101bc1d2704912ab7974..610bf339a0d5c2c55e7a517307a082eb31e6b368 100644 --- a/app/src/main/java/com/example/myapplication/MainActivity.kt +++ b/app/src/main/java/com/example/myapplication/MainActivity.kt @@ -1,12 +1,11 @@ // MainActivity.kt package com.example.myapplication -import android.content.Intent import android.os.Bundle import com.google.android.material.bottomnavigation.BottomNavigationView import com.example.myapplication.databinding.ActivityMainBinding import androidx.appcompat.app.AppCompatActivity -import androidx.navigation.findNavController +import androidx.navigation.fragment.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController @@ -22,20 +21,22 @@ class MainActivity : AppCompatActivity() { setContentView(binding.root) val navView: BottomNavigationView = binding.navView + val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_activity_main) + val navController = navHostFragment!!.findNavController() - val navController = findNavController(R.id.nav_host_fragment_activity_main) + // Check login status + if (!isLoggedIn()) { + navController.navigate(R.id.loginActivity) + } + + // Set up navigation val appBarConfiguration = AppBarConfiguration( setOf( - R.id.navigation_home, R.id.navigation_transactions, R.id.navigation_scan, R.id.navigation_statistics, R.id.navigation_settings + R.id.navigation_transactions, R.id.navigation_scan, R.id.navigation_statistics, R.id.navigation_settings ) ) setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController) - - // Check login status - if (!isLoggedIn()) { - navigateToLogin() - } } private fun isLoggedIn(): Boolean { @@ -43,9 +44,4 @@ class MainActivity : AppCompatActivity() { val sharedPreferences = getSharedPreferences("login_status", MODE_PRIVATE) return sharedPreferences.getBoolean("isLoggedIn", false) } - - private fun navigateToLogin() { - startActivity(Intent(this, LoginActivity::class.java)) - finish() // Close MainActivity - } } diff --git a/app/src/main/java/com/example/myapplication/ui/settings/SettingsFragment.kt b/app/src/main/java/com/example/myapplication/ui/settings/SettingsFragment.kt index 65f3e3f69df2eac21f4e65dcbf0a641f25d826fb..992384eae5f5dfe820d1b8dfadbd9ec06e63be54 100644 --- a/app/src/main/java/com/example/myapplication/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/example/myapplication/ui/settings/SettingsFragment.kt @@ -1,12 +1,11 @@ package com.example.myapplication.ui.settings import android.content.Context.MODE_PRIVATE -import android.content.Intent import android.os.Bundle import android.widget.Toast +import androidx.navigation.fragment.findNavController import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import com.example.myapplication.LoginActivity import com.example.myapplication.R import com.example.myapplication.controllers.DialogController import com.example.myapplication.ui.saveTransactions.SaveTransactionsDialog @@ -40,8 +39,7 @@ class SettingsFragment : PreferenceFragmentCompat() { editor.putBoolean("isLoggedIn", false) editor.apply() - // Navigate to LoginActivity and destroy MainActivity - startActivity(Intent(requireContext(), LoginActivity::class.java)) + findNavController().navigate(R.id.loginActivity) requireActivity().finish() } diff --git a/app/src/main/java/com/example/myapplication/ui/transaction/TransactionFragment.kt b/app/src/main/java/com/example/myapplication/ui/transaction/TransactionFragment.kt index c31e6798cc15455f67c8144356bd854ed5b22e44..3023ceadca499b128e01767a9c420ab07c6cfba6 100644 --- a/app/src/main/java/com/example/myapplication/ui/transaction/TransactionFragment.kt +++ b/app/src/main/java/com/example/myapplication/ui/transaction/TransactionFragment.kt @@ -36,8 +36,8 @@ class TransactionFragment : Fragment() { _binding = FragmentTransactionBinding.inflate(inflater, container, false) val root: View = binding.root val allBtn: Button = binding.allFilter - val expensesBtn: Button = binding.expensesFIlter - val incomeBtn: Button = binding.incomeIlter + val expensesBtn: Button = binding.expensesFilter + val incomeBtn: Button = binding.incomeFilter allBtn.setOnClickListener { allBtn.setBackgroundResource(R.drawable.textlineactive) expensesBtn.setBackgroundResource(R.drawable.textlines) @@ -64,6 +64,8 @@ class TransactionFragment : Fragment() { transactionList.add(Transaction("Gaji Karyawan", "20 Desember 2024", "Perusahaan ABC", 7500000)) transactionList.add(Transaction("Pembayaran Sewa", "25 Desember 2024", "Pemilik Apartemen", 2000000)) transactionList.add(Transaction("Pengisian Bahan Bakar", "28 Desember 2024", "SPBU A", 300000)) + transactionList.add(Transaction("Pembelian Makanan", "30 Desember 2024", "Warung Sederhana", 25000)) + transactionList.add(Transaction("Pembayaran Listrik", "31 Desember 2024", "PLN", 500000)) diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index a3009a4ffae4b34fb97ccf87c3d1018b93b563f0..2b077d383bc10768534241e8add47fe808993f3e 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/loginActivity" 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"> - <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline2" android:layout_width="wrap_content" @@ -21,7 +20,8 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:srcCompat="@drawable/logo" /> + app:srcCompat="@drawable/logo" + android:contentDescription="@string/app_name" /> <com.google.android.material.textfield.TextInputLayout android:id="@+id/textInputLayout" @@ -44,7 +44,7 @@ android:id="@+id/editTextEmail" android:layout_width="match_parent" android:layout_height="match_parent" - android:hint="Email" + android:hint="@string/login_email" android:inputType="textEmailAddress" android:textSize="12sp" /> </com.google.android.material.textfield.TextInputLayout> @@ -54,7 +54,7 @@ android:layout_width="340dp" android:layout_height="wrap_content" android:backgroundTint="#806D90" - android:text="Log in" + android:text="@string/login_button" app:cornerRadius="30dp" app:layout_constraintBottom_toTopOf="@+id/guideline2" app:layout_constraintEnd_toEndOf="parent" @@ -78,7 +78,7 @@ android:id="@+id/editTextPassword" android:layout_width="match_parent" android:layout_height="52dp" - android:hint="Password" + android:hint="@string/login_password" android:inputType="textPassword" android:textSize="12sp" /> </com.google.android.material.textfield.TextInputLayout> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0d2fe44925a4ffb1a9050b1170c3e08fabfd73ca..d2839ad7d891af32feb7111bbb5d73d17a314558 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,24 +1,21 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" > - <fragment + <androidx.fragment.app.FragmentContainerView android:id="@+id/nav_host_fragment_activity_main" android:name="androidx.navigation.fragment.NavHostFragment" - android:layout_width="411dp" - android:layout_height="706dp" - app:defaultNavHost="true" + android:layout_width="match_parent" + android:layout_height="0dp" app:layout_constraintBottom_toTopOf="@id/nav_view" - app:layout_constraintHorizontal_bias="0.0" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_bias="0.0" + app:defaultNavHost="true" app:navGraph="@navigation/mobile_navigation" /> <com.google.android.material.bottomnavigation.BottomNavigationView diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml index 410e13cfb67e2c3487fd84ee632ed3725c52bd01..9c17e616a377a6a85e43c2b66cb5393600824106 100644 --- a/app/src/main/res/layout/fragment_statistics.xml +++ b/app/src/main/res/layout/fragment_statistics.xml @@ -9,7 +9,7 @@ <com.github.mikephil.charting.charts.PieChart android:id="@+id/pie_chart" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="0dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" @@ -20,4 +20,7 @@ </com.github.mikephil.charting.charts.PieChart> + + + </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_transaction.xml b/app/src/main/res/layout/fragment_transaction.xml index aef96fdacddd679327ae3371b7510cb102ad5f17..34d1bb0a1bff7de2ff04ad7cea6d16695c792c29 100644 --- a/app/src/main/res/layout/fragment_transaction.xml +++ b/app/src/main/res/layout/fragment_transaction.xml @@ -18,37 +18,37 @@ android:layout_width="130dp" android:layout_height="wrap_content" android:background="@drawable/textlineactive" - android:text="All" - app:layout_constraintEnd_toStartOf="@+id/expensesFIlter" + android:text="@string/filter_all" + app:layout_constraintEnd_toStartOf="@+id/expensesFilter" app:layout_constraintTop_toTopOf="@+id/guideline" /> <Button - android:id="@+id/expensesFIlter" + android:id="@+id/expensesFilter" android:layout_width="130dp" android:layout_height="wrap_content" android:background="@drawable/textlines" - android:text="Expenses" + android:text="@string/filter_expense" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guideline" /> <Button - android:id="@+id/incomeIlter" + android:id="@+id/incomeFilter" android:layout_width="130dp" android:layout_height="wrap_content" android:background="@drawable/textlines" - android:text="Income" - app:layout_constraintStart_toEndOf="@+id/expensesFIlter" + android:text="@string/filter_income" + app:layout_constraintStart_toEndOf="@+id/expensesFilter" app:layout_constraintTop_toTopOf="@+id/guideline" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/transactionView" android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginTop="55dp" + android:layout_height="0dp" android:background="@color/slate_950" android:paddingTop="5dp" - app:layout_constraintTop_toBottomOf="@+id/expensesFIlter" + app:layout_constraintTop_toBottomOf="@+id/expensesFilter" + app:layout_constraintBottom_toBottomOf="parent" tools:layout_editor_absoluteX="11dp" /> <com.google.android.material.button.MaterialButton diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index e7fcedb1338df908e655832da2b7684715237d30..f99394e2f6172e32b1eff901ba66323336fb3f7a 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -5,11 +5,11 @@ android:id="@+id/mobile_navigation" app:startDestination="@+id/navigation_transactions"> - <fragment - android:id="@+id/navigation_home" - android:name="com.example.myapplication.ui.transaction.TransactionFragment" - android:label="@string/title_home" - tools:layout="@layout/fragment_transaction" /> + <activity + android:id="@+id/loginActivity" + android:name="com.example.myapplication.LoginActivity" + android:label="@string/title_login" + tools:layout="@layout/activity_login" /> <fragment android:id="@+id/navigation_transactions" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4e2a0053ffb7fdba075052f7afb4062e2ed22d13..5a42e512bfa5193ac6aafc5b38a4414d07359908 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,24 +1,32 @@ <resources> <!-- Title --> <string name="app_name">BondoMan</string> + <string name="title_login">Login</string> <string name="title_home">Home</string> <string name="title_transactions">Transactions</string> <string name="title_scan">Scan</string> <string name="title_statistics">Statistics</string> <string name="title_settings">Settings</string> + <!-- Login --> + <string name="login_email">Email</string> + <string name="login_password">Password</string> + <string name="login_button">Log in</string> + + <!-- Filter Button Transactions --> + <string name="filter_all">All</string> + <string name="filter_income">Income</string> + <string name="filter_expense">Expense</string> + <!-- Settings --> <string name="settings_save">Save Transactions</string> <string name="settings_send">Send Transactions</string> <string name="settings_random">Randomize Transactions</string> <string name="settings_logout">Logout</string> - <!-- Text --> <string name="text_xlsx">.xlsx</string> <string name="text_xls">.xls</string> <string name="text_save">Save</string> <string name="text_save_dialog">Select file format to save transactions</string> - - <string name="piechart" /> </resources> \ No newline at end of file