@@ -3,44 +3,97 @@ package com.openlogin.app
33import android.content.Intent
44import android.net.Uri
55import android.os.Bundle
6+ import android.util.Log
67import android.view.View
7- import android.widget.Button
8- import android.widget.TextView
8+ import android.widget.*
99import androidx.appcompat.app.AppCompatActivity
10+ import com.google.android.material.textfield.TextInputLayout
1011import com.google.gson.Gson
11- import com.openlogin.core.AuthStateChangeListener
1212import com.openlogin.core.OpenLogin
13+ import com.openlogin.core.isEmailValid
14+ import com.openlogin.core.types.ExtraLoginOptions
15+ import com.openlogin.core.types.LoginParams
16+ import com.openlogin.core.types.OpenLoginOptions
17+ import com.openlogin.core.types.OpenLoginResponse
18+ import java8.util.concurrent.CompletableFuture
1319
14- class MainActivity : AppCompatActivity () {
20+ class MainActivity : AppCompatActivity (), AdapterView.OnItemClickListener {
1521 private lateinit var openlogin: OpenLogin
1622
23+ private val verifierList : List <LoginVerifier > = listOf (
24+ LoginVerifier (" Google" , OpenLogin .Provider .GOOGLE ),
25+ LoginVerifier (" Facebook" , OpenLogin .Provider .FACEBOOK ),
26+ LoginVerifier (" Twitch" , OpenLogin .Provider .TWITCH ),
27+ LoginVerifier (" Discord" , OpenLogin .Provider .DISCORD ),
28+ LoginVerifier (" Reddit" , OpenLogin .Provider .REDDIT ),
29+ LoginVerifier (" Apple" , OpenLogin .Provider .APPLE ),
30+ LoginVerifier (" Github" , OpenLogin .Provider .GITHUB ),
31+ LoginVerifier (" LinkedIn" , OpenLogin .Provider .LINKEDIN ),
32+ LoginVerifier (" Twitter" , OpenLogin .Provider .TWITTER ),
33+ LoginVerifier (" Line" , OpenLogin .Provider .LINE ),
34+ LoginVerifier (" Hosted Email Passwordless" , OpenLogin .Provider .EMAIL_PASSWORDLESS )
35+ )
36+
37+ private var selectedLoginProvider: OpenLogin .Provider = OpenLogin .Provider .GOOGLE
38+
1739 private val gson = Gson ()
1840
1941 private fun signIn () {
20- openlogin.login(OpenLogin .Provider .GOOGLE )
42+ val hintEmailEditText = findViewById<EditText >(R .id.etEmailHint)
43+ var extraLoginOptions : ExtraLoginOptions ? = null
44+ if (selectedLoginProvider == OpenLogin .Provider .EMAIL_PASSWORDLESS ) {
45+ val hintEmail = hintEmailEditText.text.toString()
46+ if (hintEmail.isBlank() || ! hintEmail.isEmailValid()) {
47+ Toast .makeText(this , " Please enter a valid Email." , Toast .LENGTH_LONG ).show()
48+ return
49+ }
50+ extraLoginOptions = ExtraLoginOptions (login_hint = hintEmail)
51+ }
52+
53+ val loginCompletableFuture: CompletableFuture <OpenLoginResponse > = openlogin.login(LoginParams (selectedLoginProvider, extraLoginOptions = extraLoginOptions))
54+ loginCompletableFuture.whenComplete { loginResponse, error ->
55+ if (error == null ) {
56+ reRender(loginResponse)
57+ } else {
58+ Log .d(" MainActivity_OpenLogin" , error.message ? : " Something went wrong" )
59+ }
60+
61+ }
2162 }
2263
2364 private fun signOut () {
24- openlogin.logout()
65+ val logoutCompletableFuture = openlogin.logout()
66+ logoutCompletableFuture.whenComplete { _, error ->
67+ if (error == null ) {
68+ reRender(OpenLoginResponse ())
69+ } else {
70+ Log .d(" MainActivity_OpenLogin" , error.message ? : " Something went wrong" )
71+ }
72+ }
2573 }
2674
27- private fun reRender () {
75+ private fun reRender (openLoginResponse : OpenLoginResponse ) {
2876 val contentTextView = findViewById<TextView >(R .id.contentTextView)
2977 val signInButton = findViewById<Button >(R .id.signInButton)
3078 val signOutButton = findViewById<Button >(R .id.signOutButton)
79+ val spinner = findViewById<TextInputLayout >(R .id.verifierList)
80+ val hintEmailEditText = findViewById<EditText >(R .id.etEmailHint)
3181
32- val key = openlogin.state .privKey
33- val userInfo = openlogin.state .userInfo
82+ val key = openLoginResponse .privKey
83+ val userInfo = openLoginResponse .userInfo
3484 if (key is String && key.isNotEmpty()) {
35- contentTextView.text = gson.toJson(openlogin.state )
85+ contentTextView.text = gson.toJson(openLoginResponse )
3686 contentTextView.visibility = View .VISIBLE
3787 signInButton.visibility = View .GONE
3888 signOutButton.visibility = View .VISIBLE
89+ spinner.visibility = View .GONE
90+ hintEmailEditText.visibility = View .GONE
3991 } else {
4092 contentTextView.text = getString(R .string.not_logged_in)
4193 contentTextView.visibility = View .GONE
4294 signInButton.visibility = View .VISIBLE
4395 signOutButton.visibility = View .GONE
96+ spinner.visibility = View .VISIBLE
4497 }
4598 }
4699
@@ -49,27 +102,43 @@ class MainActivity : AppCompatActivity() {
49102 setContentView(R .layout.activity_main)
50103
51104 // Configure OpenLogin
52- openlogin = OpenLogin (
53- this ,
105+ openlogin = OpenLogin (OpenLoginOptions (context = this ,
54106 clientId = getString(R .string.openlogin_project_id),
55107 network = OpenLogin .Network .MAINNET ,
56- redirectUrl = Uri .parse(" torusapp://org.torusresearch.openloginexample/redirect" ),
57- )
108+ redirectUrl = Uri .parse(" torusapp://org.torusresearch.openloginexample/redirect" )))
109+
58110 openlogin.setResultUrl(intent.data)
59- openlogin.addAuthStateChangeListener(AuthStateChangeListener {
60- reRender()
61- })
62111
63112 // Setup UI and event handlers
64113 val signInButton = findViewById<Button >(R .id.signInButton)
65114 signInButton.setOnClickListener { signIn() }
66115
67116 val signOutButton = findViewById<Button >(R .id.signOutButton)
68117 signOutButton.setOnClickListener { signOut() }
118+
119+ val spinner = findViewById<AutoCompleteTextView >(R .id.spinnerTextView)
120+ val loginVerifierList: List <String > = verifierList.map {
121+ item -> item.name
122+ }
123+ val adapter: ArrayAdapter <String > =
124+ ArrayAdapter (this , R .layout.item_dropdown, loginVerifierList)
125+ spinner.setAdapter(adapter)
126+ spinner.onItemClickListener = this
69127 }
70128
71129 override fun onNewIntent (intent : Intent ? ) {
72130 super .onNewIntent(intent)
73131 openlogin.setResultUrl(intent?.data)
74132 }
133+
134+ override fun onItemClick (p0 : AdapterView <* >? , p1 : View ? , p2 : Int , p3 : Long ) {
135+ selectedLoginProvider = verifierList[p2].loginProvider
136+
137+ val hintEmailEditText = findViewById<EditText >(R .id.etEmailHint)
138+ if (selectedLoginProvider == OpenLogin .Provider .EMAIL_PASSWORDLESS ) {
139+ hintEmailEditText.visibility = View .VISIBLE
140+ } else {
141+ hintEmailEditText.visibility = View .GONE
142+ }
143+ }
75144}
0 commit comments