86 lines
3.3 KiB
Kotlin
86 lines
3.3 KiB
Kotlin
package gq.kirmanak.mealient
|
|
|
|
import android.os.Bundle
|
|
import android.view.Menu
|
|
import android.view.MenuItem
|
|
import androidx.activity.viewModels
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import com.google.android.material.shape.CornerFamily
|
|
import com.google.android.material.shape.MaterialShapeDrawable
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import gq.kirmanak.mealient.databinding.MainActivityBinding
|
|
import gq.kirmanak.mealient.ui.auth.AuthenticationState
|
|
import gq.kirmanak.mealient.ui.auth.AuthenticationState.AUTHORIZED
|
|
import gq.kirmanak.mealient.ui.auth.AuthenticationState.UNAUTHORIZED
|
|
import gq.kirmanak.mealient.ui.auth.AuthenticationViewModel
|
|
import timber.log.Timber
|
|
|
|
@AndroidEntryPoint
|
|
class MainActivity : AppCompatActivity() {
|
|
private lateinit var binding: MainActivityBinding
|
|
private val authViewModel by viewModels<AuthenticationViewModel>()
|
|
private val authenticationState: AuthenticationState
|
|
get() = authViewModel.currentAuthenticationState
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
Timber.v("onCreate() called with: savedInstanceState = $savedInstanceState")
|
|
binding = MainActivityBinding.inflate(layoutInflater)
|
|
setContentView(binding.root)
|
|
setSupportActionBar(binding.toolbar)
|
|
supportActionBar?.setIcon(R.drawable.ic_toolbar)
|
|
setToolbarRoundCorner()
|
|
listenToAuthStatuses()
|
|
}
|
|
|
|
private fun setToolbarRoundCorner() {
|
|
Timber.v("setToolbarRoundCorner() called")
|
|
val drawables = listOf(
|
|
binding.toolbarHolder.background as? MaterialShapeDrawable,
|
|
binding.toolbar.background as? MaterialShapeDrawable,
|
|
)
|
|
Timber.d("setToolbarRoundCorner: drawables = $drawables")
|
|
val radius = resources.getDimension(R.dimen.main_activity_toolbar_corner_radius)
|
|
for (drawable in drawables) {
|
|
drawable?.apply {
|
|
shapeAppearanceModel = shapeAppearanceModel.toBuilder()
|
|
.setBottomLeftCorner(CornerFamily.ROUNDED, radius)
|
|
.build()
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun listenToAuthStatuses() {
|
|
Timber.v("listenToAuthStatuses() called")
|
|
authViewModel.authenticationState.observe(this, ::onAuthStateUpdate)
|
|
}
|
|
|
|
private fun onAuthStateUpdate(authState: AuthenticationState) {
|
|
Timber.v("onAuthStateUpdate() called with: it = $authState")
|
|
invalidateOptionsMenu()
|
|
}
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
|
Timber.v("onCreateOptionsMenu() called with: menu = $menu")
|
|
menuInflater.inflate(R.menu.main_toolbar, menu)
|
|
menu.findItem(R.id.logout).isVisible = authenticationState == AUTHORIZED
|
|
menu.findItem(R.id.login).isVisible = authenticationState == UNAUTHORIZED
|
|
return true
|
|
}
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
Timber.v("onOptionsItemSelected() called with: item = $item")
|
|
val result = when (item.itemId) {
|
|
R.id.logout -> {
|
|
authViewModel.logout()
|
|
true
|
|
}
|
|
R.id.login -> {
|
|
authViewModel.login()
|
|
true
|
|
}
|
|
else -> super.onOptionsItemSelected(item)
|
|
}
|
|
return result
|
|
}
|
|
} |