From 774034bbc55ff7bd02460216c40c93a597454cca Mon Sep 17 00:00:00 2001 From: mrsyaban <mrsyaban99@gmail.com> Date: Mon, 18 Mar 2024 06:52:57 +0700 Subject: [PATCH] feat: add navbar and fragment for each page --- .idea/.gitignore | 5 -- .idea/.name | 1 - .idea/compiler.xml | 6 -- .idea/deploymentTargetDropDown.xml | 10 ---- .idea/gradle.xml | 19 ------ .idea/kotlinc.xml | 6 -- .idea/migrations.xml | 10 ---- .idea/misc.xml | 9 --- .idea/render.experimental.xml | 6 -- .idea/vcs.xml | 6 -- app/build.gradle.kts | 4 ++ app/src/main/java/com/pbd/psi/MainActivity.kt | 39 ++++++++++-- .../main/java/com/pbd/psi/SplashActivity.kt | 1 - .../com/pbd/psi/ui/graph/GraphFragment.kt | 60 +++++++++++++++++++ .../java/com/pbd/psi/ui/scan/ScanFragment.kt | 60 +++++++++++++++++++ .../pbd/psi/ui/settings/SettingsFragment.kt | 60 +++++++++++++++++++ .../psi/ui/transaction/TransactionFragment.kt | 60 +++++++++++++++++++ .../com/pbd/psi/ui/twibbon/TwibbonFragment.kt | 60 +++++++++++++++++++ .../main/res/drawable/baseline_camera_24.xml | 5 ++ app/src/main/res/layout/activity_main.xml | 55 ++++++++++------- app/src/main/res/layout/activity_splash.xml | 4 ++ app/src/main/res/layout/fragment_graph.xml | 14 +++++ app/src/main/res/layout/fragment_scan.xml | 14 +++++ app/src/main/res/layout/fragment_settings.xml | 38 ++++++++++++ .../main/res/layout/fragment_transaction.xml | 14 +++++ app/src/main/res/layout/fragment_twibbon.xml | 14 +++++ app/src/main/res/menu/bottom_nav_menu.xml | 27 +++++++++ app/src/main/res/navigation/nav_graph.xml | 32 ++++++++++ app/src/main/res/values/colors.xml | 3 +- app/src/main/res/values/strings.xml | 20 ++++++- build.gradle.kts | 9 +++ 31 files changed, 563 insertions(+), 108 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/.name delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/deploymentTargetDropDown.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/kotlinc.xml delete mode 100644 .idea/migrations.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/render.experimental.xml delete mode 100644 .idea/vcs.xml create mode 100644 app/src/main/java/com/pbd/psi/ui/graph/GraphFragment.kt create mode 100644 app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt create mode 100644 app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt create mode 100644 app/src/main/java/com/pbd/psi/ui/transaction/TransactionFragment.kt create mode 100644 app/src/main/java/com/pbd/psi/ui/twibbon/TwibbonFragment.kt create mode 100644 app/src/main/res/drawable/baseline_camera_24.xml create mode 100644 app/src/main/res/layout/fragment_graph.xml create mode 100644 app/src/main/res/layout/fragment_scan.xml create mode 100644 app/src/main/res/layout/fragment_settings.xml create mode 100644 app/src/main/res/layout/fragment_transaction.xml create mode 100644 app/src/main/res/layout/fragment_twibbon.xml create mode 100644 app/src/main/res/menu/bottom_nav_menu.xml create mode 100644 app/src/main/res/navigation/nav_graph.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 8f00030..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# GitHub Copilot persisted chat sessions -/copilot/chatSessions diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index ff8a25a..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -PSI \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index b589d56..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="CompilerConfiguration"> - <bytecodeTargetLevel target="17" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index 0c0c338..0000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="deploymentTargetDropDown"> - <value> - <entry key="app"> - <State /> - </entry> - </value> - </component> -</project> \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 0897082..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="GradleMigrationSettings" migrationVersion="1" /> - <component name="GradleSettings"> - <option name="linkedExternalProjectsSettings"> - <GradleProjectSettings> - <option name="externalProjectPath" value="$PROJECT_DIR$" /> - <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" /> - <option name="modules"> - <set> - <option value="$PROJECT_DIR$" /> - <option value="$PROJECT_DIR$/app" /> - </set> - </option> - <option name="resolveExternalAnnotations" value="false" /> - </GradleProjectSettings> - </option> - </component> -</project> \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml deleted file mode 100644 index 8d81632..0000000 --- a/.idea/kotlinc.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="KotlinJpsPluginSettings"> - <option name="version" value="1.9.22" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml deleted file mode 100644 index f8051a6..0000000 --- a/.idea/migrations.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectMigrations"> - <option name="MigrateToGradleLocalJavaHome"> - <set> - <option value="$PROJECT_DIR$" /> - </set> - </option> - </component> -</project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 8978d23..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<project version="4"> - <component name="ExternalStorageConfigurationManager" enabled="true" /> - <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK"> - <output url="file://$PROJECT_DIR$/build/classes" /> - </component> - <component name="ProjectType"> - <option name="id" value="Android" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/render.experimental.xml b/.idea/render.experimental.xml deleted file mode 100644 index 8ec256a..0000000 --- a/.idea/render.experimental.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="RenderSettings"> - <option name="showDecorations" value="true" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="" vcs="Git" /> - </component> -</project> \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0eea5c2..2dc3749 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("com.android.application") id("org.jetbrains.kotlin.android") + id("androidx.navigation.safeargs.kotlin") } android { @@ -52,4 +53,7 @@ dependencies { implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.squareup.retrofit2:converter-gson:2.9.0") implementation("com.squareup.okhttp3:logging-interceptor:4.9.3") + implementation ("androidx.navigation:navigation-fragment-ktx:2.7.7") + implementation ("androidx.navigation:navigation-ui-ktx:2.7.7") + } \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/MainActivity.kt b/app/src/main/java/com/pbd/psi/MainActivity.kt index eee2fd0..430e228 100644 --- a/app/src/main/java/com/pbd/psi/MainActivity.kt +++ b/app/src/main/java/com/pbd/psi/MainActivity.kt @@ -1,13 +1,22 @@ package com.pbd.psi -import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.os.Bundle +import android.view.Menu +import android.view.MenuItem +import android.view.View import androidx.appcompat.app.AppCompatActivity +import androidx.navigation.fragment.NavHostFragment +import androidx.navigation.ui.AppBarConfiguration +import androidx.navigation.ui.setupActionBarWithNavController +import androidx.navigation.ui.setupWithNavController +import com.google.android.material.bottomnavigation.BottomNavigationView import com.pbd.psi.databinding.ActivityMainBinding +import com.pbd.psi.databinding.FragmentSettingsBinding import com.pbd.psi.services.BackgroundService + class MainActivity : AppCompatActivity() { companion object { const val SHARED_PREFS = "shared_prefs" @@ -17,20 +26,35 @@ class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private lateinit var sharedpreferences: SharedPreferences + private lateinit var settingsBinding: FragmentSettingsBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) + settingsBinding = FragmentSettingsBinding.inflate(layoutInflater) setContentView(binding.root) sharedpreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE) - binding.textEmail.text = sharedpreferences.getString(TOKEN, "default") - binding.textToken.text = sharedpreferences.getString(EMAIL, "default") + settingsBinding.textEmail.text = sharedpreferences.getString(TOKEN, "default") + settingsBinding.textToken.text = sharedpreferences.getString(EMAIL, "default") + + // bottom navbar + val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation) + val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment + val navController = navHostFragment.navController + bottomNavigationView.setupWithNavController(navController) + +// setSupportActionBar(findViewById(R.id.toolbar)) +// supportActionBar?.setDisplayHomeAsUpEnabled(false) // Hide back button +// supportActionBar?.setDisplayShowHomeEnabled(false) // Hide logo +// supportActionBar?.setDisplayShowTitleEnabled(true) // Show title only +// val appBarConfiguration = AppBarConfiguration(navController.graph) +// binding.toolbar.setupWithNavController(navController, appBarConfiguration) val serviceIntent = Intent(this, BackgroundService::class.java) startService(serviceIntent) - binding.btnLogout.setOnClickListener { + settingsBinding.btnLogout.setOnClickListener { with(sharedpreferences.edit()) { clear() apply() @@ -41,4 +65,11 @@ class MainActivity : AppCompatActivity() { finish() } } + + override fun onCreateOptionsMenu(menu: Menu?): Boolean { + menuInflater.inflate(R.menu.bottom_nav_menu, menu) + return true + } + + } diff --git a/app/src/main/java/com/pbd/psi/SplashActivity.kt b/app/src/main/java/com/pbd/psi/SplashActivity.kt index 6a85920..11702c9 100644 --- a/app/src/main/java/com/pbd/psi/SplashActivity.kt +++ b/app/src/main/java/com/pbd/psi/SplashActivity.kt @@ -24,7 +24,6 @@ class SplashActivity : AppCompatActivity() { private lateinit var cloud2 : ImageView private lateinit var title : TextView override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) binding= ActivitySplashBinding.inflate(layoutInflater) setContentView(binding.root) diff --git a/app/src/main/java/com/pbd/psi/ui/graph/GraphFragment.kt b/app/src/main/java/com/pbd/psi/ui/graph/GraphFragment.kt new file mode 100644 index 0000000..3c477eb --- /dev/null +++ b/app/src/main/java/com/pbd/psi/ui/graph/GraphFragment.kt @@ -0,0 +1,60 @@ +package com.pbd.psi.ui.graph + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.pbd.psi.R + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [GraphFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class GraphFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_graph, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment GraphFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + GraphFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt b/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt new file mode 100644 index 0000000..f5166de --- /dev/null +++ b/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt @@ -0,0 +1,60 @@ +package com.pbd.psi.ui.scan + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.pbd.psi.R + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [ScanFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class ScanFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_scan, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment ScanFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + ScanFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt b/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt new file mode 100644 index 0000000..6b8d83c --- /dev/null +++ b/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt @@ -0,0 +1,60 @@ +package com.pbd.psi.ui.settings + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.pbd.psi.R + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [SettingsFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class SettingsFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_settings, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment SettingsFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + SettingsFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/ui/transaction/TransactionFragment.kt b/app/src/main/java/com/pbd/psi/ui/transaction/TransactionFragment.kt new file mode 100644 index 0000000..b38f6ae --- /dev/null +++ b/app/src/main/java/com/pbd/psi/ui/transaction/TransactionFragment.kt @@ -0,0 +1,60 @@ +package com.pbd.psi.ui.transaction + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.pbd.psi.R + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [TransactionFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class TransactionFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_transaction, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment TransactionFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + TransactionFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pbd/psi/ui/twibbon/TwibbonFragment.kt b/app/src/main/java/com/pbd/psi/ui/twibbon/TwibbonFragment.kt new file mode 100644 index 0000000..7887b1c --- /dev/null +++ b/app/src/main/java/com/pbd/psi/ui/twibbon/TwibbonFragment.kt @@ -0,0 +1,60 @@ +package com.pbd.psi.ui.twibbon + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.pbd.psi.R + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [TwibbonFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class TwibbonFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_twibbon, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment TwibbonFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + TwibbonFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/baseline_camera_24.xml b/app/src/main/res/drawable/baseline_camera_24.xml new file mode 100644 index 0000000..4a77cd1 --- /dev/null +++ b/app/src/main/res/drawable/baseline_camera_24.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#000000" + 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.4,10.5l4.77,-8.26C13.47,2.09 12.75,2 12,2c-2.4,0 -4.6,0.85 -6.32,2.25l3.66,6.35 0.06,-0.1zM21.54,9c-0.92,-2.92 -3.15,-5.26 -6,-6.34L11.88,9h9.66zM21.8,10h-7.49l0.29,0.5 4.76,8.25C21,16.97 22,14.61 22,12c0,-0.69 -0.07,-1.35 -0.2,-2zM8.54,12l-3.9,-6.75C3.01,7.03 2,9.39 2,12c0,0.69 0.07,1.35 0.2,2h7.49l-1.15,-2zM2.46,15c0.92,2.92 3.15,5.26 6,6.34L12.12,15L2.46,15zM13.73,15l-3.9,6.76c0.7,0.15 1.42,0.24 2.17,0.24 2.4,0 4.6,-0.85 6.32,-2.25l-3.66,-6.35 -0.93,1.6z"/> +</vector> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2344108..1fb7e9c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,35 +5,44 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - <TextView - android:id="@+id/text_email" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginBottom="20dp" - android:text="Hello World!" - app:layout_constraintBottom_toTopOf="@+id/text_token" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> +<!-- <androidx.appcompat.widget.Toolbar--> +<!-- android:id="@+id/toolbar"--> +<!-- android:layout_width="match_parent"--> +<!-- android:layout_height="wrap_content"--> +<!-- android:background="?attr/colorPrimary"--> +<!-- android:minHeight="?attr/actionBarSize"--> +<!-- android:theme="?attr/actionBarTheme"--> +<!-- app:layout_constraintBottom_toTopOf="@+id/fragmentContainerView"--> +<!-- app:layout_constraintEnd_toEndOf="parent"--> +<!-- app:layout_constraintStart_toStartOf="parent"--> +<!-- app:layout_constraintTop_toTopOf="parent" />--> - <TextView - android:id="@+id/text_token" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Hello World!" - app:layout_constraintBottom_toTopOf="@+id/btn_logout" + <androidx.fragment.app.FragmentContainerView + android:id="@+id/fragmentContainerView" + android:name="androidx.navigation.fragment.NavHostFragment" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_marginStart="1dp" + android:layout_marginEnd="1dp" + app:defaultNavHost="true" + app:layout_constraintBottom_toTopOf="@id/bottom_navigation" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/text_email" /> + app:layout_constraintTop_toBottomOf="@+id/toolbar" + app:layout_constraintVertical_bias="0.0" + app:navGraph="@navigation/nav_graph" /> - <Button - android:id="@+id/btn_logout" + <com.google.android.material.bottomnavigation.BottomNavigationView + android:id="@+id/bottom_navigation" + app:menu="@menu/bottom_nav_menu" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Logout" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/text_token" /> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + android:background="@color/navbar_color" + /> + </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml index 4d198a2..651e3b9 100644 --- a/app/src/main/res/layout/activity_splash.xml +++ b/app/src/main/res/layout/activity_splash.xml @@ -11,6 +11,7 @@ android:layout_height="match_parent" android:scaleType="centerCrop" android:src="@drawable/prambanan" + android:contentDescription="@string/image_view_desc" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="0dp" /> @@ -19,6 +20,7 @@ android:layout_width="150dp" android:layout_height="150dp" android:src="@drawable/sun" + android:contentDescription="@string/image_view_desc" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" @@ -31,6 +33,7 @@ android:layout_width="80dp" android:layout_height="80dp" android:src="@drawable/cloud" + android:contentDescription="@string/image_view_desc" app:tint="@color/white" app:layout_constraintStart_toEndOf="@+id/sun" app:layout_constraintBottom_toBottomOf="@+id/sun" @@ -41,6 +44,7 @@ android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/cloud" + android:contentDescription="@string/image_view_desc" app:tint="@color/white" app:layout_constraintEnd_toStartOf="@+id/cloud1" app:layout_constraintStart_toStartOf="@+id/cloud1" diff --git a/app/src/main/res/layout/fragment_graph.xml b/app/src/main/res/layout/fragment_graph.xml new file mode 100644 index 0000000..fec015f --- /dev/null +++ b/app/src/main/res/layout/fragment_graph.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.graph.GraphFragment"> + + <!-- TODO: Update blank fragment layout --> + <TextView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:text="@string/graph_fragment" /> + +</FrameLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_scan.xml b/app/src/main/res/layout/fragment_scan.xml new file mode 100644 index 0000000..8395b5e --- /dev/null +++ b/app/src/main/res/layout/fragment_scan.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.scan.ScanFragment"> + + <!-- TODO: Update blank fragment layout --> + <TextView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:text="@string/scan_fragment" /> + +</FrameLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml new file mode 100644 index 0000000..8b2e590 --- /dev/null +++ b/app/src/main/res/layout/fragment_settings.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.settings.SettingsFragment"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_centerInParent="true" + android:orientation="vertical" + android:padding="20dp"> + + <!-- TODO: Update blank fragment layout --> + <TextView + android:id="@+id/text_email" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="20dp"/> + + <TextView + android:id="@+id/text_token" + android:layout_width="wrap_content" + android:layout_height="wrap_content"/> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/settings_fragment" /> + + <Button + android:id="@+id/btn_logout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/logout" /> + + </LinearLayout> +</FrameLayout> \ 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 new file mode 100644 index 0000000..77b9867 --- /dev/null +++ b/app/src/main/res/layout/fragment_transaction.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.transaction.TransactionFragment"> + + <!-- TODO: Update blank fragment layout --> + <TextView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:text="@string/transaction_fragment" /> + +</FrameLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_twibbon.xml b/app/src/main/res/layout/fragment_twibbon.xml new file mode 100644 index 0000000..4eb57b4 --- /dev/null +++ b/app/src/main/res/layout/fragment_twibbon.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.twibbon.TwibbonFragment"> + + <!-- TODO: Update blank fragment layout --> + <TextView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:text="@string/twibbon_fragment" /> + +</FrameLayout> \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml new file mode 100644 index 0000000..f39a0d2 --- /dev/null +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android"> + <item + android:id="@+id/transactionFragment" + android:title="@string/navbar_transaction" + android:icon="@drawable/baseline_receipt_24"/> + + <item + android:id="@+id/scanFragment" + android:title="@string/navbar_scan" + android:icon="@drawable/baseline_document_scanner_24"/> + + <item + android:id="@+id/twibbonFragment" + android:title="@string/navbar_twibbon" + android:icon="@drawable/baseline_camera_24" /> + + <item + android:id="@+id/graphFragment" + android:title="@string/navbar_graph" + android:icon="@drawable/baseline_pie_chart_24"/> + + <item + android:id="@+id/settingsFragment" + android:title="@string/navbar_settings" + android:icon="@drawable/baseline_settings_24" /> +</menu> \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml new file mode 100644 index 0000000..43431ae --- /dev/null +++ b/app/src/main/res/navigation/nav_graph.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<navigation 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/nav_graph" + app:startDestination="@id/transactionFragment"> + <fragment + android:id="@+id/transactionFragment" + android:name="com.pbd.psi.ui.transaction.TransactionFragment" + android:label="fragment_transaction" + tools:layout="@layout/fragment_transaction" /> + <fragment + android:id="@+id/settingsFragment" + android:name="com.pbd.psi.ui.settings.SettingsFragment" + android:label="fragment_settings" + tools:layout="@layout/fragment_settings" /> + <fragment + android:id="@+id/scanFragment" + android:name="com.pbd.psi.ui.scan.ScanFragment" + android:label="fragment_scan" + tools:layout="@layout/fragment_scan" /> + <fragment + android:id="@+id/graphFragment" + android:name="com.pbd.psi.ui.graph.GraphFragment" + android:label="fragment_graph" + tools:layout="@layout/fragment_graph" /> + <fragment + android:id="@+id/twibbonFragment" + android:name="com.pbd.psi.ui.twibbon.TwibbonFragment" + android:label="fragment_twibbon" + tools:layout="@layout/fragment_twibbon" /> +</navigation> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3359e3b..1c4dfdd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,5 +6,6 @@ <color name="colorAccentLight">#FFF455</color> <color name="black">#FF000000</color> <color name="white">#FFFFFFFF</color> - <color name="whitesmoke">#FFF5F5F5</color> + <color name="navbar_color">#D9D9D9</color> +>>>>>>> Stashed changes </resources> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a2f82a3..2353140 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,21 @@ <resources> <string name="app_name">BondoMan</string> -</resources> \ No newline at end of file + + <string name="scan_fragment">Scan Fragment</string> + <string name="transaction_fragment">Transaction Fragment</string> + <string name="graph_fragment">Graph Fragment</string> + <string name="settings_fragment">Settings Fragment</string> + <string name="twibbon_fragment">Twibbon Fragment</string> + + <string name="navbar_scan">Scan</string> + <string name="navbar_graph">Graph</string> + <string name="navbar_transaction">Transaction</string> + <string name="navbar_settings">Settings</string> + <string name="navbar_twibbon">Twibbon</string> + + <string name="logout">Logout</string> + <string name="image_view_desc">Desc</string> + <!-- TODO: Remove or change this placeholder text --> + <string name="hello_blank_fragment">Hello blank fragment</string> + +</resources> diff --git a/build.gradle.kts b/build.gradle.kts index 53f4a67..2aa9f92 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + google() + } + dependencies { + classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7") + } +} + plugins { id("com.android.application") version "8.2.2" apply false id("org.jetbrains.kotlin.android") version "1.9.22" apply false -- GitLab