Skip to content
Snippets Groups Projects
Commit 2e1dd7db authored by Nigel Sahl's avatar Nigel Sahl
Browse files

update: rotating screen

parent 8db46aab
Branches
Tags
No related merge requests found
package com.example.nerbos
import android.content.Intent
import android.content.res.Configuration
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import com.example.nerbos.databinding.ActivityMainBinding
......@@ -14,9 +16,22 @@ import com.example.nerbos.service.TokenCheckService
class MainActivity : AppCompatActivity() {
private val fragments = mapOf(
R.id.transaction to TransactionFragment(),
R.id.scan to ScanFragment(),
R.id.statistic to StatisticFragment(),
R.id.user to UserFragment()
)
private val fragmentTitles = mapOf(
R.id.transaction to R.string.navbar_transaction,
R.id.scan to R.string.navbar_scan,
R.id.statistic to R.string.navbar_statistic,
R.id.user to R.string.navbar_user
)
private var selectedItemId: Int = R.id.transaction
internal lateinit var binding: ActivityMainBinding
internal lateinit var networkManager: NetworkManager
private var currentFragmentId: Int = R.id.transaction
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -30,60 +45,41 @@ class MainActivity : AppCompatActivity() {
val serviceIntent = Intent(this, TokenCheckService::class.java)
startService(serviceIntent)
supportActionBar?.title = getString(R.string.navbar_transaction)
replaceFragment(TransactionFragment())
binding.bottomNavigationView.setOnItemSelectedListener {
currentFragmentId = it.itemId // Store the selected fragment ID
when (it.itemId) {
R.id.transaction -> {
replaceFragment(TransactionFragment())
supportActionBar?.title = getString(R.string.navbar_transaction)
}
R.id.scan -> {
replaceFragment(ScanFragment())
supportActionBar?.title = getString(R.string.navbar_scan)
}
R.id.statistic -> {
replaceFragment(StatisticFragment())
supportActionBar?.title = getString(R.string.navbar_statistic)
}
R.id.user -> {
replaceFragment(UserFragment())
supportActionBar?.title = getString(R.string.navbar_user)
}
}
true
// Restore the selected item if there is a saved instance
if (savedInstanceState != null) {
selectedItemId = savedInstanceState.getInt(getString(R.string.selected_item_id))
}
}
fun getCurrentFragmentId(): Int {
return currentFragmentId
}
setupNavigation()
fun getFragmentFromId(id: Int): Fragment {
return when (id) {
R.id.transaction -> TransactionFragment()
R.id.scan -> ScanFragment()
R.id.statistic -> StatisticFragment()
R.id.user -> UserFragment()
else -> TransactionFragment()
}
// Set selected item
selectMenuItem(selectedItemId)
}
fun getTitleFromId(id: Int): Int {
return when (id) {
R.id.transaction -> R.string.navbar_transaction
R.id.scan -> R.string.navbar_scan
R.id.statistic -> R.string.navbar_statistic
R.id.user -> R.string.navbar_user
else -> R.string.navbar_transaction
private fun setupNavigation() {
if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
binding.bottomNavigationView?.setOnItemSelectedListener { item ->
selectMenuItem(item.itemId)
true
}
binding.bottomNavigationView?.selectedItemId = selectedItemId
} else {
binding.navigationView?.setNavigationItemSelectedListener { item ->
selectMenuItem(item.itemId)
true
}
binding.navigationView?.setCheckedItem(selectedItemId)
}
}
fun showActionBarAndNavBar() {
supportActionBar?.show()
binding.bottomNavigationView.visibility = android.view.View.VISIBLE
private fun selectMenuItem(itemId: Int) {
val item = binding.bottomNavigationView?.menu?.findItem(itemId)
?: binding.navigationView?.menu?.findItem(itemId)
item?.let {
supportActionBar?.title = it.title
replaceFragment(fragments[itemId]!!)
selectedItemId = itemId
}
}
internal fun replaceFragment(fragment: Fragment) {
......@@ -93,8 +89,30 @@ class MainActivity : AppCompatActivity() {
fragmentTransaction.commit()
}
override fun onSaveInstanceState(outState: Bundle) {
outState.putInt(getString(R.string.selected_item_id), selectedItemId)
super.onSaveInstanceState(outState)
}
override fun onDestroy() {
super.onDestroy()
networkManager.unregisterNetworkCallback()
}
}
\ No newline at end of file
fun getCurrentFragmentId(): Int {
return selectedItemId
}
fun getFragmentFromId(id: Int): Fragment {
return fragments[id] ?: TransactionFragment()
}
fun getTitleFromId(id: Int): Int {
return fragmentTitles[id] ?: R.string.navbar_transaction
}
fun showActionBarAndNavBar() {
supportActionBar?.show()
binding.bottomNavigationView?.visibility ?: View.VISIBLE
}
}
......@@ -75,7 +75,8 @@ class Authentication(private val context: Context) {
fun getEmail(): String {
val sharedPreferences : SharedPreferences =
context.getSharedPreferences(context.getString(R.string.preferences), Context.MODE_PRIVATE)
return sharedPreferences.getString(context.getString(R.string.email), "") ?: ""
// if no email in shared preferences, return default value
return sharedPreferences.getString(context.getString(R.string.email), "13521000@std.stei.itb.ac.id") ?: ""
}
fun getNim(): Int {
......
......@@ -69,7 +69,7 @@ class NetworkManager(private val context: Context) {
private fun hideActionBarAndNavBar(mainActivity: MainActivity) {
mainActivity.supportActionBar?.hide()
mainActivity.binding.bottomNavigationView.visibility = View.GONE
mainActivity.binding.bottomNavigationView?.visibility ?: View.GONE
}
fun handleCloseButtonClick() {
......
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/primary_bg"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/primary_bg"
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="40dp"
android:background="@color/header_bg"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:titleTextColor="@color/white">
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/navigationView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/appBarLayout">
</FrameLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationView"
android:layout_width="78dp"
android:layout_height="0dp"
android:background="@color/primary_bg"
app:elevation="1dp"
app:itemBackground="@color/navbar_bg"
app:itemIconTint="@color/navbar_icon"
app:itemTextColor="@color/navbar_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintTop_toBottomOf="@+id/appBarLayout"
app:layout_constraintVertical_bias="1.0"
app:menu="@menu/bottom_navbar">
</com.google.android.material.navigation.NavigationView>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.NerbOS" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Base application theme. -->
<!-- <style name="Base.Theme.NerbOS" parent="Theme.Material3.DayNight.NoActionBar">-->
<!-- <style name="Base.Theme.NerbOS" parent="Theme.MaterialComponents.DayNight.NoActionBar">-->
<!-- <style name="Base.Theme.NerbOS" parent="Theme.Material3.Dark.NoActionBar">-->
<style name="Base.Theme.NerbOS" parent="Theme.Material3.Dark.NoActionBar">
<!-- Customize your dark theme here. -->
<!-- Customize your light theme here. -->
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
......
......@@ -6,6 +6,7 @@
<string name="navbar_scan">Scan</string>
<string name="navbar_statistic">Statistics</string>
<string name="navbar_user">User</string>
<string name="selected_item_id">selectedItemId</string>
<string name="login_title">Login</string>
<string name="login_description">Insert login details</string>
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment