diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 8f00030d59afb017d0955c2cfcd5c2b931225207..0000000000000000000000000000000000000000 --- 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 ff8a25ab6ab262d953536113a754d09086d19df6..0000000000000000000000000000000000000000 --- 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 b589d56e9f285d8cfdc6c270853a5d439021a278..0000000000000000000000000000000000000000 --- 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 0c0c3383890637b4721df1f49d0b229e55c0f361..0000000000000000000000000000000000000000 --- 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 0897082f7512e48e89310db81b5455d997417505..0000000000000000000000000000000000000000 --- 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 8d81632f83e01c6cdfe9759af2796ebb50e9fdcf..0000000000000000000000000000000000000000 --- 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 f8051a6f973e69a86e6f07f1a1c87f17a31c7235..0000000000000000000000000000000000000000 --- 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 8978d23db569daa721cb26dde7923f4c673d1fc9..0000000000000000000000000000000000000000 --- 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 8ec256a5d290bffdb16a99dd3db0d613792739d5..0000000000000000000000000000000000000000 --- 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 35eb1ddfbbc029bcab630581847471d7f238ec53..0000000000000000000000000000000000000000 --- 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 0eea5c21009113bfa5212a6a2ddd729d2a79d55e..2dc3749e9fc9099f2590a9f94bb919d3a1f18c6f 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 eee2fd0e04053fcd81c680007f17d4b0f5a3c068..430e22844106c28b44f17142afb3b3ba62476eba 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 6a85920a4d9ddf2e75a4527ffeba94fb4d988f96..11702c94aa8eadb4b8b72c2c11f5657682553330 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 0000000000000000000000000000000000000000..3c477eb3873798cb239ac2f73f726e583db304b8 --- /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 0000000000000000000000000000000000000000..f5166de942227f98b01871c1b63621def478f40a --- /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 0000000000000000000000000000000000000000..6b8d83cba2b14e6c262f9707da6bf42bf3534aa9 --- /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 0000000000000000000000000000000000000000..b38f6ae30d2d82bf75a4d692bd64bfb0bf99d192 --- /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 0000000000000000000000000000000000000000..7887b1ccb681a6352e0343d0e8395f99bd77a9a9 --- /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 0000000000000000000000000000000000000000..4a77cd137a401d10d61fc63788985ec66386be35 --- /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 234410817876177e7766f2a8a9a52213c5aa5f33..1fb7e9cc660c9a18efbd749f09ac7f5c509cac50 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 4d198a29f4ea2c17779342b6fb607b16f0f86874..651e3b99dc62698e18940c93e964187c12ceef7b 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 0000000000000000000000000000000000000000..fec015fd7dee2c9a5a0f602058a63891f4dcd661 --- /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 0000000000000000000000000000000000000000..8395b5e2faaa80e976111f92c95490157974961e --- /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 0000000000000000000000000000000000000000..8b2e590001b2fc3b55ce2c73b38cd614a1bcab7f --- /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 0000000000000000000000000000000000000000..77b9867a1be170eb43d103ba0c3a40edfa43c414 --- /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 0000000000000000000000000000000000000000..4eb57b4e3a68b95d64ba3d6425db51e131f6267e --- /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 0000000000000000000000000000000000000000..f39a0d2d3a24dfde0a8036e9236deb0906246da0 --- /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 0000000000000000000000000000000000000000..43431aeb16bc0529fd5ba5be7de594a4ebd89492 --- /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 3359e3b169b1015d27a3767ed1ad382180bc6049..1c4dfdd7b852a7c24f701e5ee1f7c0fc111b0317 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 a2f82a3383e61c6c547033b6d0cb420f9be0298f..2353140fb3c8093ae893204a2ee74ed0968ab0f5 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 53f4a67287fcc572dab6ad907bddc40aa4efbfa6..2aa9f9282ca430d41820dc71fa6f9006406e7c0e 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