diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9ec7dc746c70df12990b96a8b3272fbef8c4636b..1ca7449502eab2f7db2781d156cfab87bb4021ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,7 +21,8 @@ <activity android:name=".MainActivity" android:exported="true" - android:label="@string/app_name"> + android:label="@string/app_name" + > <intent-filter> <action android:name="android.intent.action.MAIN" /> diff --git a/app/src/main/java/pbd/tubes/exe_android/MainActivity.kt b/app/src/main/java/pbd/tubes/exe_android/MainActivity.kt index 461fdf85dafc65d5797bf5e96f886f71f0ad9d2e..612f7b82b8430c2cb03c43b8ee402e971b63ade4 100644 --- a/app/src/main/java/pbd/tubes/exe_android/MainActivity.kt +++ b/app/src/main/java/pbd/tubes/exe_android/MainActivity.kt @@ -4,20 +4,25 @@ import android.content.Context import android.content.Intent import android.net.ConnectivityManager import android.net.NetworkCapabilities +import android.content.res.Configuration import android.os.Bundle import androidx.appcompat.app.AlertDialog +import android.util.Log import androidx.appcompat.app.AppCompatActivity +import androidx.navigation.NavController import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController import com.google.android.material.bottomnavigation.BottomNavigationView +import com.google.android.material.navigation.NavigationBarView +import com.google.android.material.navigation.NavigationView +import com.google.android.material.navigationrail.NavigationRailView import pbd.tubes.exe_android.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding - // private var isFabVisible : Boolean = true private var isLoggedIn: Boolean = false @@ -36,23 +41,42 @@ class MainActivity : AppCompatActivity() { binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) - val navView: BottomNavigationView = binding.navView + val navController = findNavController(R.id.nav_host_fragment_activity_main) + when (resources.configuration.orientation){ + Configuration.ORIENTATION_LANDSCAPE -> { + binding.navViewRail?.let { + setUpNavBar(it) + } + Log.d("MyApp", "Orientation is LANDSCAPE") + } + Configuration.ORIENTATION_PORTRAIT -> { + binding.navView?.let { + setUpNavBar(it) + } + Log.d("MyApp", "Orientation is PORTRAIT") + } + else -> { + Log.d("MyApp", "What other config?") + } + } + binding.addFab.setOnClickListener { + navController.navigate(R.id.navigation_add_transaction) + } + } + private fun setUpNavBar( + navigationBarView: NavigationBarView + ){ val navController = findNavController(R.id.nav_host_fragment_activity_main) - // Passing each menu ID as a set of Ids because each - // menu should be considered as top level destinations. val appBarConfiguration = AppBarConfiguration( setOf( R.id.navigation_transactions, R.id.navigation_scan, R.id.navigation_chart, R.id.navigation_settings - ) + ), +// fallbackOnNavigateUpListener = {navController.navigateUp()} //TODO(navigate back) ) setupActionBarWithNavController(navController, appBarConfiguration) - navView.setupWithNavController(navController) - - binding.addFab.setOnClickListener { - navController.navigate(R.id.navigation_add_transaction) - } + navigationBarView.setupWithNavController(navController) } private fun isUserLoggedIn(): Boolean { val sharedPreferences = getSharedPreferences("user_session", MODE_PRIVATE) diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml new file mode 100644 index 0000000000000000000000000000000000000000..c3f3f22d34fecab03c4887a4d6e5fcafe1b5fd11 --- /dev/null +++ b/app/src/main/res/layout-land/activity_main.xml @@ -0,0 +1,47 @@ +<?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" + android:id="@+id/container" + android:layout_width="match_parent" + android:layout_height="match_parent" + > + + <com.google.android.material.navigationrail.NavigationRailView + android:id="@+id/nav_view_rail" + android:layout_width="wrap_content" + android:layout_height="0dp" + android:layout_marginStart="0dp" + android:layout_marginEnd="0dp" + android:background="?android:attr/windowBackground" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:menu="@menu/bottom_nav_menu" + /> + + <com.google.android.material.floatingactionbutton.FloatingActionButton + android:id="@+id/add_fab" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_add_24" + android:layout_marginBottom="16dp" + android:layout_marginEnd="16dp" + android:contentDescription="@string/transaction_operations_fab_text" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + android:layout_gravity="bottom|end" + /> + + <fragment + android:id="@+id/nav_host_fragment_activity_main" + android:name="androidx.navigation.fragment.NavHostFragment" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:defaultNavHost="true" + app:layout_constraintBottom_toTopOf="parent" + app:layout_constraintLeft_toRightOf="@id/nav_view_rail" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:navGraph="@navigation/mobile_navigation" /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4edc659db8eb13eb3a2b04976a01e8d091f36b06..22f25cba99e69c40c51545f53c23f7492da5185f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,19 +4,18 @@ android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingTop="?attr/actionBarSize"> + > <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="0dp" - android:layout_marginEnd="0dp" android:background="?android:attr/windowBackground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/bottom_nav_menu" /> + <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/add_fab" android:layout_width="wrap_content" diff --git a/app/src/main/res/layout/fragment_add_transaction.xml b/app/src/main/res/layout/fragment_add_transaction.xml index 98d4971e35bbb8b42d85ec5b6473a7869e2953b1..f7b8a418e836dc5e76dac32923bc34b713487009 100644 --- a/app/src/main/res/layout/fragment_add_transaction.xml +++ b/app/src/main/res/layout/fragment_add_transaction.xml @@ -1,54 +1,61 @@ <?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=".ui.transactions.AddTransactionFragment" - tools:ignore="HardcodedText" - > + tools:ignore="HardcodedText"> - <com.google.android.material.textfield.TextInputLayout - android:id="@+id/transactionNameInputLayout" - android:layout_width="wrap_content" + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="64dp" - android:minWidth="300dp" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.5" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> + android:orientation="vertical" + android:layout_gravity="center_horizontal" + > - <com.google.android.material.textfield.TextInputEditText - android:layout_width="match_parent" + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/transactionNameInputLayout" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:hint="@string/transaction_name_text" - android:singleLine="true" - android:textColorHint="@android:color/transparent" /> - </com.google.android.material.textfield.TextInputLayout> + android:layout_marginTop="8dp" + android:minWidth="300dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - <com.google.android.material.textfield.TextInputLayout - android:id="@+id/transactionNominalInputLayout" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="32dp" - android:minWidth="300dp" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.5" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/transactionNameInputLayout" - style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> + <com.google.android.material.textfield.TextInputEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/transaction_name_text" + android:singleLine="true" + android:textColorHint="@android:color/transparent" /> + </com.google.android.material.textfield.TextInputLayout> - <com.google.android.material.textfield.TextInputEditText - android:layout_width="match_parent" + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/transactionNominalInputLayout" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:hint="@string/transaction_nominal_text" - android:inputType="number" - android:singleLine="true" - android:textColorHint="@android:color/transparent" - android:value="" /> - </com.google.android.material.textfield.TextInputLayout> + android:layout_marginTop="32dp" + android:minWidth="300dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/transactionNameInputLayout" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> + + <com.google.android.material.textfield.TextInputEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/transaction_nominal_text" + android:inputType="number" + android:singleLine="true" + android:textColorHint="@android:color/transparent" + android:value="" /> + </com.google.android.material.textfield.TextInputLayout> <TextView android:id="@+id/transaction_category" @@ -57,10 +64,10 @@ android:layout_marginTop="32dp" android:text="@string/transaction_category" app:layout_constraintBottom_toTopOf="@+id/categoryRadioGroup" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.15" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/transactionNominalInputLayout"/> + app:layout_constraintEnd_toEndOf="@+id/categoryRadioGroup" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toStartOf="@+id/categoryRadioGroup" + app:layout_constraintTop_toBottomOf="@+id/transactionNominalInputLayout" /> <RadioGroup android:id="@+id/categoryRadioGroup" @@ -87,34 +94,34 @@ android:text="Pemasukan" /> </RadioGroup> - <com.google.android.material.textfield.TextInputLayout - android:id="@+id/transactionLocationInputLayout" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="32dp" - android:minWidth="300dp" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/categoryRadioGroup" - style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> - - <com.google.android.material.textfield.TextInputEditText - android:layout_width="match_parent" + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/transactionLocationInputLayout" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:hint="@string/transaction_location" - android:singleLine="true" - android:textColorHint="@android:color/transparent" /> + android:layout_marginTop="32dp" + android:minWidth="300dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/categoryRadioGroup" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> - </com.google.android.material.textfield.TextInputLayout> + <com.google.android.material.textfield.TextInputEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/transaction_location" + android:singleLine="true" + android:textColorHint="@android:color/transparent" /> - <Button - android:id="@+id/submit_button" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginBottom="64dp" - android:text="Submit" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" /> + </com.google.android.material.textfield.TextInputLayout> -</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file + <Button + android:id="@+id/submit_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="Submit" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/transactionLocationInputLayout" /> + </androidx.constraintlayout.widget.ConstraintLayout> +</ScrollView> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_edit_transaction.xml b/app/src/main/res/layout/fragment_edit_transaction.xml index 315851ab3e70018dc23135b860dcc45742dbc120..84371848763e2f0357372c8440303bf72ada6637 100644 --- a/app/src/main/res/layout/fragment_edit_transaction.xml +++ b/app/src/main/res/layout/fragment_edit_transaction.xml @@ -1,5 +1,5 @@ <?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" @@ -7,29 +7,20 @@ tools:ignore="HardcodedText" tools:context=".ui.transactions.EditTransactionFragment" > - - <TextView - android:id="@+id/FragmentTitle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="32dp" - android:text="Edit Transaction" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.15" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> - + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> <com.google.android.material.textfield.TextInputLayout android:id="@+id/transactionEditNameInputLayout" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="64dp" + android:layout_marginTop="16dp" android:minWidth="300dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> + app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" @@ -68,10 +59,10 @@ android:layout_marginTop="32dp" android:text="@string/transaction_category" app:layout_constraintBottom_toTopOf="@+id/categoryRadioGroup" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.15" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/transactionEditDateInputLayout"/> + app:layout_constraintEnd_toEndOf="@+id/categoryRadioGroup" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toStartOf="@+id/categoryRadioGroup" + app:layout_constraintTop_toBottomOf="@+id/transactionEditDateInputLayout" /> <RadioGroup android:id="@+id/categoryRadioGroup" @@ -151,15 +142,14 @@ </com.google.android.material.textfield.TextInputLayout> - <Button android:id="@+id/submit_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginBottom="64dp" + android:layout_marginTop="16dp" android:text="Submit" - app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" /> - -</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/categoryRadioGroup" /> + </androidx.constraintlayout.widget.ConstraintLayout> +</ScrollView> \ 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 index 45f242babe638ea29c459f8373782c9e9d837e04..0301c9a023044586da5a44233bc711bb37a896c0 100644 --- a/app/src/main/res/menu/bottom_nav_menu.xml +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> -<menu xmlns:android="http://schemas.android.com/apk/res/android"> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/bottom_nav_menu" + > <item android:id="@+id/navigation_transactions"