coding-blocks/CBOnlineApp

View on GitHub
app/src/main/java/com/codingblocks/cbonlineapp/auth/SocialLoginFragment.kt

Summary

Maintainability
A
2 hrs
Test Coverage
package com.codingblocks.cbonlineapp.auth

import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.CookieManager
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.fragment.app.Fragment
import com.codingblocks.cbonlineapp.BuildConfig
import com.codingblocks.cbonlineapp.R
import kotlinx.android.synthetic.main.fragment_social_login.*
import org.koin.androidx.viewmodel.ext.android.sharedViewModel

class SocialLoginFragment : Fragment() {

    val vm by sharedViewModel<AuthViewModel>()

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? = inflater.inflate(R.layout.fragment_social_login, container, false)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        CookieManager.getInstance().apply {
            removeAllCookies {
            }
        }
        val web: WebView = webview
        web.settings.javaScriptEnabled = true
        web.settings.setSupportMultipleWindows(true)
        web.settings.userAgentString =
            "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36"
        web.loadUrl("${BuildConfig.OAUTH_URL}?redirect_uri=${BuildConfig.REDIRECT_URI}&response_type=code&client_id=${BuildConfig.CLIENT_ID}")
        web.webViewClient = object : WebViewClient() {

            var authComplete = false

            override fun onPageFinished(view: WebView, url: String) {
                super.onPageFinished(view, url)

                if (url.contains("code=") && !authComplete) {
                    val grantCode = Uri.parse(url).getQueryParameter("code")
                    if (grantCode != null) {
                        vm.fetchToken(grantCode)
                    }
                    authComplete = true
                } else if (url.contains("error=access_denied")) {
                    authComplete = true
                    web.visibility = View.GONE
                }
            }
        }
        web.visibility = View.VISIBLE
    }
}