Start AddAccountActivity implementation
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
package gq.kirmanak.mealient.ui.addaccount
|
||||
|
||||
import android.os.Bundle
|
||||
import android.os.PersistableBundle
|
||||
import androidx.activity.viewModels
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import gq.kirmanak.mealient.R
|
||||
|
||||
@AndroidEntryPoint
|
||||
class AddAccountActivity : AppCompatActivity() {
|
||||
|
||||
private val viewModel by viewModels<AddAccountViewModel>()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
|
||||
super.onCreate(savedInstanceState, persistentState)
|
||||
supportActionBar?.title = getString(R.string.app_name)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package gq.kirmanak.mealient.ui.addaccount
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import by.kirich1409.viewbindingdelegate.viewBinding
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import gq.kirmanak.mealient.R
|
||||
import gq.kirmanak.mealient.data.network.NetworkError
|
||||
import gq.kirmanak.mealient.databinding.FragmentAuthenticationBinding
|
||||
import gq.kirmanak.mealient.extensions.checkIfInputIsEmpty
|
||||
import kotlinx.coroutines.launch
|
||||
import timber.log.Timber
|
||||
|
||||
@AndroidEntryPoint
|
||||
class AddAccountFragment : Fragment(R.layout.fragment_authentication) {
|
||||
|
||||
private val binding by viewBinding(FragmentAuthenticationBinding::bind)
|
||||
private val viewModel by activityViewModels<AddAccountViewModel>()
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
Timber.v("onViewCreated() called with: view = $view, savedInstanceState = $savedInstanceState")
|
||||
binding.button.setOnClickListener { onLoginClicked() }
|
||||
}
|
||||
|
||||
private fun onLoginClicked(): Unit = with(binding) {
|
||||
Timber.v("onLoginClicked() called")
|
||||
|
||||
val email: String = emailInput.checkIfInputIsEmpty(
|
||||
inputLayout = emailInputLayout,
|
||||
lifecycleOwner = viewLifecycleOwner,
|
||||
stringId = R.string.fragment_authentication_email_input_empty,
|
||||
) ?: return
|
||||
|
||||
val pass: String = passwordInput.checkIfInputIsEmpty(
|
||||
inputLayout = passwordInputLayout,
|
||||
lifecycleOwner = viewLifecycleOwner,
|
||||
stringId = R.string.fragment_authentication_password_input_empty,
|
||||
trim = false,
|
||||
) ?: return
|
||||
|
||||
button.isClickable = false
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
onAuthenticationResult(viewModel.authenticate(email, pass))
|
||||
}
|
||||
}
|
||||
|
||||
private fun onAuthenticationResult(result: Result<Unit>) {
|
||||
Timber.v("onAuthenticationResult() called with: result = $result")
|
||||
if (result.isSuccess) {
|
||||
TODO("Implement authentication success")
|
||||
}
|
||||
|
||||
binding.passwordInputLayout.error = when (result.exceptionOrNull()) {
|
||||
is NetworkError.Unauthorized -> getString(R.string.fragment_authentication_credentials_incorrect)
|
||||
else -> null
|
||||
}
|
||||
|
||||
binding.button.isClickable = true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package gq.kirmanak.mealient.ui.addaccount
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import gq.kirmanak.mealient.data.auth.AuthRepo
|
||||
import gq.kirmanak.mealient.extensions.runCatchingExceptCancel
|
||||
import timber.log.Timber
|
||||
|
||||
@HiltViewModel
|
||||
class AddAccountViewModel(
|
||||
private val authRepo: AuthRepo,
|
||||
) : ViewModel() {
|
||||
|
||||
suspend fun authenticate(username: String, password: String) = runCatchingExceptCancel {
|
||||
Timber.v("authenticate() called with: username = $username, password = $password")
|
||||
authRepo.authenticate(username, password)
|
||||
}.onFailure {
|
||||
Timber.e(it, "authenticate: can't authenticate")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user