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

Commit 4903c750 authored by Nihar Thakkar's avatar Nihar Thakkar
Browse files

Allow re-authentication of Google accounts

parent d33192c9
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ class AccountSettings(
        const val KEY_SETTINGS_VERSION = "version"

        const val KEY_USERNAME = "user_name"
        private const val KEY_EMAIL_ADDRESS = "email_address"
        const val KEY_EMAIL_ADDRESS = "email_address"
        const val KEY_AUTH_STATE = "auth_state"
        const val KEY_CERTIFICATE_ALIAS = "certificate_alias"

+18 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ package at.bitfire.davdroid.ui

import android.Manifest
import android.accounts.Account
import android.accounts.AccountManager
import android.content.ContentResolver
import android.content.Context
import android.content.Intent
@@ -90,10 +91,18 @@ class AccountSettingsActivity: AppCompatActivity() {
        override fun onCreateLoader(id: Int, args: Bundle?) =
                AccountSettingsLoader(requireActivity(), args!!.getParcelable(EXTRA_ACCOUNT))

        private fun launchSetup():Boolean {
            AccountManager.get(context).addAccount(getString(R.string.google_account_type),
                    null, null, null, activity, null,
                    null)
            return true
        }

        override fun onLoadFinished(loader: Loader<Pair<ISettings, AccountSettings>>, result: Pair<ISettings, AccountSettings>?) {
            val (settings, accountSettings) = result ?: return

            // preference group: authentication
            val prefCredentials = findPreference("credentials") as Preference
            val prefUserName = findPreference("username") as EditTextPreference
            val prefPassword = findPreference("password") as EditTextPreference
            val prefCertAlias = findPreference("certificate_alias") as Preference
@@ -101,6 +110,7 @@ class AccountSettingsActivity: AppCompatActivity() {
            val credentials = accountSettings.credentials()
            when (credentials.type) {
                Credentials.Type.UsernamePassword -> {
                    prefCredentials.isVisible = false
                    prefUserName.isVisible = true
                    prefUserName.summary = credentials.userName
                    prefUserName.text = credentials.userName
@@ -120,6 +130,7 @@ class AccountSettingsActivity: AppCompatActivity() {
                    prefCertAlias.isVisible = false
                }
                Credentials.Type.ClientCertificate -> {
                    prefCredentials.isVisible = false
                    prefUserName.isVisible = false
                    prefPassword.isVisible = false

@@ -135,6 +146,13 @@ class AccountSettingsActivity: AppCompatActivity() {
                        true
                    }
                }
                Credentials.Type.OAuth -> {
                    prefCredentials.isVisible = true
                    prefCredentials.setOnPreferenceClickListener{launchSetup()}
                    prefUserName.isVisible = false
                    prefPassword.isVisible = false
                    prefCertAlias.isVisible = false
                }
            }

            // preference group: sync
+16 −2
Original line number Diff line number Diff line
@@ -183,8 +183,22 @@ class AccountDetailsFragment : Fragment(), LoaderManager.LoaderCallbacks<CreateS
        Logger.log.log(Level.INFO, "Creating Android account with initial config", arrayOf(account, userData))

        val accountManager = AccountManager.get(activity)
        if (!accountManager.addAccountExplicitly(account, config.credentials.password, userData))
        if (!accountManager.addAccountExplicitly(account, config.credentials.password, userData)) {
            if (accountType == getString(R.string.google_account_type)) {
                for (googleAccount in accountManager.getAccountsByType(getString(
                        R.string.google_account_type))) {
                    if (userData.get(AccountSettings.KEY_EMAIL_ADDRESS) == accountManager
                                    .getUserData(account, AccountSettings.KEY_EMAIL_ADDRESS)) {
                        accountManager.setUserData(googleAccount, AccountSettings.KEY_AUTH_STATE,
                                userData.getString(AccountSettings.KEY_AUTH_STATE))
                    }
                }
            }
            else {
                return false
            }
        }

        if (!config.credentials.authState?.accessToken.isNullOrEmpty()) {
            accountManager.setAuthToken(account, Constants.AUTH_TOKEN_TYPE, config.credentials.authState!!.accessToken)
        }
+3 −1
Original line number Diff line number Diff line
@@ -176,9 +176,11 @@
    <string name="settings_title">Settings: %s</string>
    <string name="settings_authentication">Authentication</string>
    <string name="settings_username">User name</string>
    <string name="settings_credentials">Credentials</string>
    <string name="settings_credentials_summary">Update username and password</string>
    <string name="settings_enter_username">Enter user name:</string>
    <string name="settings_password">Password</string>
    <string name="settings_password_summary">Update the password according to your server.</string>
    <string name="settings_password_summary">Update password according to your server</string>
    <string name="settings_enter_password">Enter your password:</string>
    <string name="settings_certificate_alias">Client certificate alias</string>
    <string name="settings_sync">Synchronization</string>
+6 −0
Original line number Diff line number Diff line
@@ -11,6 +11,12 @@

    <PreferenceCategory android:title="@string/settings_authentication">

        <Preference
            android:key="credentials"
            android:title="@string/settings_credentials"
            android:summary="@string/settings_credentials_summary"
            android:persistent="false"/>

        <EditTextPreference
            android:key="username"
            android:title="@string/settings_username"