Skip to content

Commit

Permalink
Merge pull request #1018 from anselmoalexandre/160523-provide-authent…
Browse files Browse the repository at this point in the history
…ication-viewmodel-fix

[160523] Provide authentication view-model - Bug fix
  • Loading branch information
jumaallan committed May 16, 2023
2 parents 8b0f751 + 495105e commit 5b735dc
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 3 deletions.
6 changes: 5 additions & 1 deletion app/src/main/java/com/hover/stax/home/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import android.content.Intent
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.NavDirections
import com.google.android.gms.auth.api.signin.GoogleSignIn
Expand Down Expand Up @@ -60,6 +61,7 @@ class MainActivity : AbstractGoogleAuthActivity(), BiometricChecker.AuthListener
val loginViewModel: LoginViewModel by viewModels()
return loginViewModel
}

lateinit var navHelper: NavHelper

private val transferViewModel: TransferViewModel by viewModels()
Expand Down Expand Up @@ -98,6 +100,8 @@ class MainActivity : AbstractGoogleAuthActivity(), BiometricChecker.AuthListener
navHelper.setUpNav()
}

override fun provideAuthenticationViewModel(): LoginViewModel = loginViewModel

fun checkPermissionsAndNavigate(navDirections: NavDirections) {
navHelper.checkPermissionsAndNavigate(navDirections)
}
Expand Down Expand Up @@ -138,7 +142,7 @@ class MainActivity : AbstractGoogleAuthActivity(), BiometricChecker.AuthListener
}
}

fun signIn() = loginForResult.launch(loginViewModel.signInClient.signInIntent)
fun signInUser() = loginForResult.launch(loginViewModel.signInClient.signInIntent)

private val loginForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ package com.hover.stax.login

import android.content.Intent
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.material.snackbar.Snackbar
import com.google.android.play.core.appupdate.AppUpdateInfo
import com.google.android.play.core.appupdate.AppUpdateManager
Expand All @@ -41,6 +44,8 @@ abstract class AbstractGoogleAuthActivity :
AppCompatActivity(),
StaxGoogleLoginInterface {

private lateinit var loginViewModel: LoginViewModel

protected abstract fun provideLoginViewModel(): LoginViewModel

private lateinit var staxGoogleLoginInterface: StaxGoogleLoginInterface
Expand All @@ -51,6 +56,11 @@ abstract class AbstractGoogleAuthActivity :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

loginViewModel = provideAuthenticationViewModel()

initGoogleAuth()
setLoginObserver()

updateManager = AppUpdateManagerFactory.create(this)

if (!BuildConfig.DEBUG) checkForUpdates()
Expand All @@ -75,6 +85,36 @@ abstract class AbstractGoogleAuthActivity :
this.staxGoogleLoginInterface = staxGoogleLoginInterface
}

abstract fun provideAuthenticationViewModel(): LoginViewModel

private fun initGoogleAuth() {
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.google_server_client_id)).requestEmail().build()
loginViewModel.signInClient = GoogleSignIn.getClient(this, gso)
}

private fun setLoginObserver() = with(loginViewModel) {
error.observe(this@AbstractGoogleAuthActivity) {
it?.let { staxGoogleLoginInterface.googleLoginFailed() }
}

googleUser.observe(this@AbstractGoogleAuthActivity) {
it?.let { staxGoogleLoginInterface.googleLoginSuccessful() }
}
}

fun signIn() = loginForResult.launch(loginViewModel.signInClient.signInIntent)

private val loginForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
loginViewModel.signIntoGoogle(result.data)
} else {
Timber.e("Google sign in failed")
staxGoogleLoginInterface.googleLoginFailed()
}
}

private fun checkForUpdates() {
val updateInfoTask = updateManager.appUpdateInfo

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package com.hover.stax.onboarding

import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.hover.sdk.permissions.PermissionHelper
Expand All @@ -33,7 +34,9 @@ import com.hover.stax.utils.NavUtil
import com.hover.stax.utils.UIHelper
import com.hover.stax.core.Utils
import com.hover.stax.login.LoginViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class OnBoardingActivity : AbstractGoogleAuthActivity() {

private lateinit var binding: OnboardingLayoutBinding
Expand All @@ -42,6 +45,8 @@ class OnBoardingActivity : AbstractGoogleAuthActivity() {
TODO("Not yet implemented")
}

private val loginViewModel: LoginViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
UIHelper.setFullscreenView(this)
super.onCreate(savedInstanceState)
Expand All @@ -55,6 +60,8 @@ class OnBoardingActivity : AbstractGoogleAuthActivity() {
setGoogleLoginInterface(this)
}

override fun provideAuthenticationViewModel(): LoginViewModel = loginViewModel

private fun setupNavigation() {
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_onboarding) as NavHostFragment
navController = navHostFragment.navController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ class BountyApplicationFragment : Fragment(), View.OnClickListener {
private fun startGoogleSignIn() {
logAnalyticsEvent(getString(R.string.clicked_bounty_email_continue_btn), requireContext())
updateProgress(0)
(activity as MainActivity).signIn()
(activity as MainActivity).signInUser()
}

// TODO - delete me
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ import com.hover.stax.login.LoginViewModel
import com.hover.stax.utils.NavUtil
import com.hover.stax.utils.UIHelper
import com.hover.stax.views.StaxDialog
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class WelcomeFragment : Fragment() {

// TODO - FIX THIS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ class SettingsFragment : Fragment() {
private fun startGoogleLogin() {
binding.staxSupport.contactCard.showProgressIndicator()
optInMarketing = true
(requireActivity() as MainActivity).signIn()
(requireActivity() as MainActivity).signInUser()
}

private fun marketingOptIn(optedIn: Boolean) {
Expand Down

0 comments on commit 5b735dc

Please sign in to comment.