Implement showing logout menu option

This commit is contained in:
Kirill Kamakin
2021-11-14 10:39:25 +03:00
parent 641106260d
commit 07484113d5
3 changed files with 49 additions and 0 deletions

View File

@@ -1,14 +1,21 @@
package gq.kirmanak.mealie package gq.kirmanak.mealie
import android.os.Bundle import android.os.Bundle
import android.view.Menu
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import gq.kirmanak.mealie.databinding.MainActivityBinding import gq.kirmanak.mealie.databinding.MainActivityBinding
import gq.kirmanak.mealie.ui.auth.AuthenticationViewModel
import kotlinx.coroutines.flow.collectLatest
import timber.log.Timber import timber.log.Timber
@AndroidEntryPoint @AndroidEntryPoint
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
private lateinit var binding: MainActivityBinding private lateinit var binding: MainActivityBinding
private val authViewModel by viewModels<AuthenticationViewModel>()
private var isAuthenticated = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@@ -16,5 +23,34 @@ class MainActivity : AppCompatActivity() {
binding = MainActivityBinding.inflate(layoutInflater) binding = MainActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
setSupportActionBar(binding.toolbar) setSupportActionBar(binding.toolbar)
listenToAuthStatuses()
}
private fun listenToAuthStatuses() {
Timber.v("listenToAuthStatuses() called")
lifecycleScope.launchWhenCreated {
authViewModel.authenticationStatuses().collectLatest {
changeAuthStatus(it)
}
}
}
private fun changeAuthStatus(it: Boolean) {
Timber.v("changeAuthStatus() called with: it = $it")
if (isAuthenticated == it) return
isAuthenticated = it
invalidateOptionsMenu()
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
Timber.v("onCreateOptionsMenu() called with: menu = $menu")
menuInflater.inflate(R.menu.main_toolbar, menu)
return true
}
override fun onPrepareOptionsMenu(menu: Menu): Boolean {
Timber.v("onPrepareOptionsMenu() called with: menu = $menu")
menu.findItem(R.id.logout).isVisible = isAuthenticated
return true
} }
} }

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/logout"
android:contentDescription="@string/menu_main_toolbar_content_description_logout"
android:title="@string/menu_main_toolbar_logout"
app:showAsAction="never" />
</menu>

View File

@@ -5,4 +5,6 @@
<string name="fragment_authentication_input_hint_url">Url</string> <string name="fragment_authentication_input_hint_url">Url</string>
<string name="fragment_authentication_button_login">Login</string> <string name="fragment_authentication_button_login">Login</string>
<string name="content_description_view_holder_recipe_image">Picture of the cooked meal</string> <string name="content_description_view_holder_recipe_image">Picture of the cooked meal</string>
<string name="menu_main_toolbar_content_description_logout">"Logout"</string>
<string name="menu_main_toolbar_logout">Logout</string>
</resources> </resources>