Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29b6ef55 authored by Fahim Salam Chowdhury's avatar Fahim Salam Chowdhury 👽
Browse files

5113-Redirect_to_app_after_google_auth_complete

parent 65a26d03
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
/*
 * Copyright MURENA SAS 2022
 * Copyright ECORP SAS 2022
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
@@ -26,13 +27,13 @@ object MailAccountSyncHelper {
    private const val MAIL_RECEIVER_CLASS = "com.fsck.k9.account.AccountSyncReceiver"
    private const val ACTION_PREFIX = "foundation.e.accountmanager.account."

    fun accountLoggedIn(applicationContext : Context?) {
    fun onAccountLoggedIn(applicationContext : Context?) {
        val intent = getIntent()
        intent.action = ACTION_PREFIX + "create"
        applicationContext?.sendBroadcast(intent)
    }

    fun accountLoggedOut(applicationContext: Context?, email: String?) {
    fun onAccountLoggedOut(applicationContext: Context?, email: String?) {
        email?.let {
            if (!it.contains("@")) {
                return@let
+2 −2
Original line number Diff line number Diff line
@@ -259,7 +259,7 @@ open class LocalAddressBook(
            try {
                if (it.result) {
                    Handler(Looper.getMainLooper()).post {
                        MailAccountSyncHelper.accountLoggedOut(context.applicationContext, email)
                        MailAccountSyncHelper.onAccountLoggedOut(context.applicationContext, email)
                    }
                }
            } catch (e: Exception) {
@@ -273,7 +273,7 @@ open class LocalAddressBook(
            try {
                if (it.result.getBoolean(AccountManager.KEY_BOOLEAN_RESULT)) {
                    Handler(Looper.getMainLooper()).post {
                        MailAccountSyncHelper.accountLoggedOut(context.applicationContext, email)
                        MailAccountSyncHelper.onAccountLoggedOut(context.applicationContext, email)
                    }
                }
            } catch (e: Exception) {
+7 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import at.bitfire.davdroid.R
import at.bitfire.davdroid.db.AppDatabase
import at.bitfire.davdroid.log.Logger
@@ -139,6 +140,12 @@ class GoogleAccountAuthenticatorService : Service(), OnAccountsUpdateListener {
                LoginActivity.SETUP_ACCOUNT_PROVIDER_TYPE,
                LoginActivity.ACCOUNT_PROVIDER_GOOGLE
            )

            options?.let {
                intent.putExtra(LoginActivity.OPEN_APP_PACKAGE_AFTER_AUTH, it.getString(LoginActivity.OPEN_APP_PACKAGE_AFTER_AUTH))
                intent.putExtra(LoginActivity.OPEN_APP_ACTIVITY_AFTER_AUTH, it.getString(LoginActivity.OPEN_APP_ACTIVITY_AFTER_AUTH))
            }

            val bundle = Bundle(1)
            bundle.putParcelable(AccountManager.KEY_INTENT, intent)
            return bundle
+2 −2
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ class AccountActivity: AppCompatActivity() {
            try {
                if (future.result)
                    Handler(Looper.getMainLooper()).post {
                        MailAccountSyncHelper.accountLoggedOut(applicationContext, email)
                        MailAccountSyncHelper.onAccountLoggedOut(applicationContext, email)
                        finish()
                    }
            } catch (e: Exception) {
@@ -154,7 +154,7 @@ class AccountActivity: AppCompatActivity() {
            try {
                if (future.result.getBoolean(AccountManager.KEY_BOOLEAN_RESULT))
                    Handler(Looper.getMainLooper()).post {
                        MailAccountSyncHelper.accountLoggedOut(applicationContext, email)
                        MailAccountSyncHelper.onAccountLoggedOut(applicationContext, email)
                        finish()
                    }
            } catch (e: Exception) {
+22 −2
Original line number Diff line number Diff line
@@ -8,12 +8,14 @@ import android.accounts.Account
import android.accounts.AccountAuthenticatorResponse
import android.accounts.AccountManager
import android.app.Activity
import android.content.ComponentName
import android.content.ContentResolver
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.provider.CalendarContract
import android.text.Editable
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -38,7 +40,6 @@ import at.bitfire.davdroid.resource.TaskUtils
import at.bitfire.davdroid.settings.AccountSettings
import at.bitfire.davdroid.settings.SettingsManager
import at.bitfire.davdroid.syncadapter.AccountUtils
import at.bitfire.davdroid.ui.account.AccountActivity
import at.bitfire.vcard4android.GroupMethod
import com.google.android.material.snackbar.Snackbar
import dagger.hilt.android.AndroidEntryPoint
@@ -154,7 +155,6 @@ class AccountDetailsFragment : Fragment() {
                ).observe(viewLifecycleOwner, Observer { success ->
                    if (success) {
                        Toast.makeText(context, R.string.message_account_added_successfully, Toast.LENGTH_LONG).show()
                        MailAccountSyncHelper.accountLoggedIn(context?.applicationContext)
                        requireActivity().setResult(Activity.RESULT_OK)
                        requireActivity().finish()

@@ -174,6 +174,8 @@ class AccountDetailsFragment : Fragment() {
                            intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, getString(R.string.eelo_account_type))
                            requireActivity().startService(intent)
                        }

                        handlePostAuthOperations()
                    }
                })
            }
@@ -182,6 +184,24 @@ class AccountDetailsFragment : Fragment() {
        return v.root
    }

    private fun handlePostAuthOperations() {
        val packageToBeOpened = requireActivity().intent.getStringExtra(LoginActivity.OPEN_APP_PACKAGE_AFTER_AUTH)
        val activityToBeOpened = requireActivity().intent.getStringExtra(LoginActivity.OPEN_APP_ACTIVITY_AFTER_AUTH)
        openApp(packageToBeOpened, activityToBeOpened)
        MailAccountSyncHelper.onAccountLoggedIn(context?.applicationContext)
    }

    private fun openApp(packageToBeOpened: String?, activityToBeOpened: String?) {
        if (!TextUtils.isEmpty(packageToBeOpened) && !TextUtils.isEmpty(activityToBeOpened)) {
            val intent = Intent(Intent.ACTION_MAIN)
            intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
            intent.component = ComponentName(packageToBeOpened!!, activityToBeOpened!!)
            requireActivity().applicationContext.startActivity(intent)
        }
    }

    @HiltViewModel
    class AccountDetailsModel @Inject constructor(
Loading