whitewind664/sdp

View on GitHub
app/src/main/java/com/github/gogetters/letsgo/activities/LoginActivity.kt

Summary

Maintainability
A
0 mins
Test Coverage
F
47%
package com.github.gogetters.letsgo.activities

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.firebase.ui.auth.AuthUI
import com.firebase.ui.auth.IdpResponse
import com.github.gogetters.letsgo.cache.Cache
import com.github.gogetters.letsgo.database.Authentication
import com.github.gogetters.letsgo.database.user.FirebaseUserBundle
import com.github.gogetters.letsgo.database.user.FirebaseUserBundleProvider

class LoginActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (Authentication.getCurrentUser() == null) {
            createSignInIntent()
        }
    }

    fun createSignInIntent() {
        // Choose authentication providers
        val providers = arrayListOf(
                AuthUI.IdpConfig.EmailBuilder().build(),
//                AuthUI.IdpConfig.PhoneBuilder().build(),
//                AuthUI.IdpConfig.GoogleBuilder().build(),
//                AuthUI.IdpConfig.FacebookBuilder().build(),
//                AuthUI.IdpConfig.TwitterBuilder().build()
        )

        // Create and launch sign-in intent
        val intent: Intent = AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(providers)
            .setIsSmartLockEnabled(false)
            .setAlwaysShowSignInMethodScreen(true)
            .build()
        startActivityForResult(
                intent,
                RC_SIGN_IN)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == RC_SIGN_IN) {
            val response = IdpResponse.fromResultIntent(data)

            if (resultCode == Activity.RESULT_OK) {
                // Successfully signed in -> store it properly on firebase
                val user = Authentication.getCurrentUser()!!
                val userBundle = FirebaseUserBundle(user)
                val letsGoUser = userBundle.getUser()
                letsGoUser.requireUserExists().addOnFailureListener {
                    // this means that the user does not yet exist
                    letsGoUser.uploadUserData()
                }

                val sharedPref = getSharedPreferences(Cache.PREF_ID, Context.MODE_PRIVATE)
                val cachedUid = Cache.readStoredUid(getSharedPreferences(Cache.PREF_ID, Context.MODE_PRIVATE))

                if (cachedUid != null && user.uid != cachedUid) {
                    sharedPref.edit().clear().apply()
                }

                val intent = Intent(this, ProfileActivity::class.java)
                intent.putExtra("UserBundleProvider", FirebaseUserBundleProvider)
                startActivity(intent)
            } else {
                startActivity(Intent(this, MainActivity::class.java))
                // Sign in failed. If response is null the user canceled the
                // sign-in flow using the back button. Otherwise check
                // response.getError().getErrorCode() and handle the error.
                // ...
            }
        }
    }

    companion object {
        private const val RC_SIGN_IN = 123
    }
}