Skip to content

Commit

Permalink
signout and current logged in user info added
Browse files Browse the repository at this point in the history
  • Loading branch information
fcat97 committed Mar 27, 2023
1 parent f579868 commit 45db8de
Show file tree
Hide file tree
Showing 11 changed files with 134 additions and 27 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,5 @@ dependencies {
implementation 'com.google.code.gson:gson:2.9.0'

implementation project(':libDriveBackup')
// implementation 'com.github.fcat97:driveBackupApi:1.0.3'
// implementation 'com.github.fcat97:driveBackupApi:1.0.4'
}
31 changes: 31 additions & 0 deletions app/src/main/java/com/tos/drivebackup/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ class MainActivity : ComponentActivity() {
private lateinit var clearTerminalButton: Button
private lateinit var editText: TextInputEditText
private lateinit var terminal: TextView
private lateinit var emailTextView: TextView
private lateinit var signOutButton: Button

private val googleDriveBackupManager = GoogleDriveBackupManager(
appID = BuildConfig.APPLICATION_ID,
Expand Down Expand Up @@ -65,6 +67,8 @@ class MainActivity : ComponentActivity() {
deleteButton = findViewById(R.id.deleteButton)
editText = findViewById(R.id.edit_text)
terminal = findViewById(R.id.terminal)
emailTextView = findViewById(R.id.emailTextView)
signOutButton = findViewById(R.id.signOutButton)

createDemoBackupButton.setOnClickListener { createDemoBackup() }
downloadDemoBackupButton.setOnClickListener { downloadDemoBackup() }
Expand All @@ -86,9 +90,12 @@ class MainActivity : ComponentActivity() {
fetchFiles()
}
}
signOutButton.setOnClickListener { signOut() }
clearTerminalButton.setOnClickListener { terminalOutputLiveData.value = "" }

terminalOutputLiveData.observe(this) { terminal.text = it }

getCurrentEmail()
}

private fun startSendFlow() {
Expand Down Expand Up @@ -136,6 +143,30 @@ class MainActivity : ComponentActivity() {
printToTerminal(it)
}
}

private fun getCurrentEmail() {
googleDriveBackupManager.getCurrentUser(
onFailed = {
Log.d(TAG, "setCurrentUser failed ${it.message}")
},
currentUser = {
emailTextView.text = "${it.name}\n${it.email}"
}
)
}

private fun signOut() {
googleDriveBackupManager.signOut(
onFailed = {
printToTerminal("signOut failed ${it.message}")
Log.d(TAG, "signOut failed ${it.message}")
},
onSuccess = {
printToTerminal("signOut successful")
Log.d(TAG, "signOut successful")
}
)
}

private fun printToTerminal(msg: String?) {
val newOutput = msg + "\n\n" + (terminalOutputLiveData.value ?: "")
Expand Down
18 changes: 18 additions & 0 deletions app/src/main/res/layout/main_activity.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">

<!-- Main content -->
Expand Down Expand Up @@ -95,6 +96,23 @@
android:text="Clear Terminal"
android:layout_marginVertical="8dp"
style="@style/ButtonTheme"/>

<TextView
android:id="@+id/emailTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingVertical="12dp"
android:gravity="center_horizontal"
android:layout_gravity="center_horizontal"
tools:text="Example\nexample@gmail.com"/>

<com.google.android.material.button.MaterialButton
android:id="@+id/signOutButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sign Out"
android:layout_marginVertical="8dp"
style="@style/ThemeOverlay.Material3.Button.ElevatedButton"/>
</LinearLayout>
</ScrollView>

Expand Down
2 changes: 1 addition & 1 deletion libDriveBackup/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ afterEvaluate {
publications {
maven(MavenPublication) {
group = 'media.uqab.driveBackupApi'
version = '1.0.3'
version = '1.0.4'
artifactId = "driveBackupApi"
from components.release

Expand Down
6 changes: 3 additions & 3 deletions libDriveBackup/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@

-keep class media.uqab.libdrivebackup.model.InitializationException
-keep class media.uqab.libdrivebackup.model.UserPermissionDeniedException
-keep class media.uqab.libdrivebackup.model.FileInfo {
*;
}
-keep class media.uqab.libdrivebackup.model.NoUserFoundException
-keep class media.uqab.libdrivebackup.model.FileInfo { *;}
-keep class media.uqab.libdrivebackup.model.UserInfo { *;}
-keep class com.google.** { *;}

# Obfuscate method names
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@ import androidx.activity.ComponentActivity
import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.Lifecycle
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential
import media.uqab.libdrivebackup.model.*
import media.uqab.libdrivebackup.model.Constants
import media.uqab.libdrivebackup.model.FileInfo
import media.uqab.libdrivebackup.model.InitializationException
import media.uqab.libdrivebackup.model.UserPermissionDeniedException
import media.uqab.libdrivebackup.useCase.*
import media.uqab.libdrivebackup.useCase.GetCredential.getCredential
import media.uqab.libdrivebackup.useCase.GetOneTapSignInIntent.getSignInIntent
Expand Down Expand Up @@ -65,15 +63,6 @@ class GoogleDriveBackupManager(
*/
private var credential: GoogleAccountCredential? = null

private val accountRequestLauncher = activity.registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
val signInIntent = getSignInIntent(activity, credentialID)
consentLauncher.launch(signInIntent)
} else {
onFailed?.invoke(UserPermissionDeniedException())
}
}

/**
* Launcher for user consent
*/
Expand Down Expand Up @@ -273,6 +262,38 @@ class GoogleDriveBackupManager(
}.start()
}

fun signOut(
onFailed: ((Exception) -> Unit)?,
onSuccess: () -> Unit
) {
try {
SignOutUser.signOut(activity, credentialID)
credential = null
onSuccess()
} catch (e: Exception) {
onFailed?.invoke(e)
}
}

/**
* Get currently logged in email if present
*
* @param currentUser lambda to return current logged in email address
* @param onFailed [NoUserFoundException] will be sent if no user found
*/
fun getCurrentUser(
onFailed: ((Exception) -> Unit)?,
currentUser: (userInfo: UserInfo) -> Unit
) {
try {
val info = GetSignedInEmail.getSignedInEmail(activity)
if (info != null) currentUser(info)
else onFailed?.invoke(NoUserFoundException())
} catch (e: Exception) {
onFailed?.invoke(e)
}
}

/**
* Request for User Consent to grant access to his/her drive account.
*
Expand All @@ -295,9 +316,6 @@ class GoogleDriveBackupManager(
// set operation when operation fails
this.onFailed = onFailed

// request get contact permission
// accountRequestLauncher.launch(Manifest.permission.GET_ACCOUNTS)

// request for user permission
val signInIntent = getSignInIntent(activity, credentialID)
consentLauncher.launch(signInIntent)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package media.uqab.libdrivebackup.model

class NoUserFoundException: Exception()

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package media.uqab.libdrivebackup.model

data class UserInfo(
val email: String?,
val name: String?
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package media.uqab.libdrivebackup.useCase

import androidx.activity.ComponentActivity
import com.google.android.gms.auth.api.signin.GoogleSignIn
import media.uqab.libdrivebackup.model.UserInfo

object GetSignedInEmail {
/**
* Return already signed in email address if present.
*
* @return Signed in email if present, null otherwise
*/
fun getSignedInEmail(activity: ComponentActivity): UserInfo? {
return GoogleSignIn.getLastSignedInAccount(activity)?.let {
UserInfo(it.email, it.displayName)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
package media.uqab.libdrivebackup.useCase

import androidx.activity.ComponentActivity
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.common.api.Scope
import com.google.api.services.drive.DriveScopes

object SignOutUser {

/**
* Sign out already logged in user.
*/
fun signOut(activity: ComponentActivity, credentialID: String) {
val gso: GoogleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(credentialID)
.requestEmail()
.requestScopes(Scope(DriveScopes.DRIVE_APPDATA))
.build()

val googleSignInClient: GoogleSignInClient = GoogleSignIn.getClient(activity, gso)
googleSignInClient.signOut()
}
}

0 comments on commit 45db8de

Please sign in to comment.