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

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

fix: ocClient is not clearing from cache after logout

As AccountRemovedReceiver is called after the account removed, the
account is not retrieving in the receiver, so client is not clearing. To
resove this, we can now remove the client via the account name only.
parent 24a31235
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -218,7 +218,7 @@ dependencies {
    implementation "commons-httpclient:commons-httpclient:3.1@jar" // remove after entire switch to lib v2
    implementation 'org.apache.jackrabbit:jackrabbit-webdav:2.13.5' // remove after entire switch to lib v2
    implementation 'com.google.code.gson:gson:2.10.1'
    implementation("foundation.e:Nextcloud-Android-Library:1.0.1-alpha") {
    implementation("foundation.e:Nextcloud-Android-Library:1.0.5-alpha") {
        exclude group: 'com.gitlab.bitfireAT', module: 'dav4jvm'
        exclude group: 'org.ogce', module: 'xpp3' // unused in Android and brings wrong Junit version
        exclude group: 'com.squareup.okhttp3'
+4 −22
Original line number Diff line number Diff line
@@ -16,16 +16,12 @@

package at.bitfire.davdroid.receiver

import android.accounts.Account
import android.accounts.AccountManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import at.bitfire.davdroid.log.Logger
import at.bitfire.davdroid.syncadapter.AccountUtils
import com.owncloud.android.lib.common.OwnCloudAccount
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException

class AccountRemovedReceiver : BroadcastReceiver() {

@@ -38,32 +34,18 @@ class AccountRemovedReceiver : BroadcastReceiver() {
            return
        }

        val account = getAccount(context, intent) ?: return
        val accountName = getAccountName(context, intent) ?: return

        val ownCloudClientManager = OwnCloudClientManagerFactory.getDefaultSingleton()
        try {
            val ocAccount = OwnCloudAccount(account, context)
            ownCloudClientManager.removeClientFor(ocAccount)
        } catch (e: AccountNotFoundException) {
            Logger.log.warning("exception thrown as account not found. Mostly because not NC account. ${e.localizedMessage}")
        }
        ownCloudClientManager.removeClientForByName(accountName)
    }

    private fun getAccount(context: Context, intent: Intent): Account? {
    private fun getAccountName(context: Context, intent: Intent): String? {
        val accountType = intent.extras?.getString(AccountManager.KEY_ACCOUNT_TYPE)
        if (accountType !in AccountUtils.getMainAccountTypes(context)) {
            return null
        }

        val accountName = intent.extras?.getString(AccountManager.KEY_ACCOUNT_NAME) ?: return null

        val accounts = AccountManager.get(context).getAccountsByType(accountType)
        for (account in accounts) {
            if (account.name == accountName) {
                return account
            }
        }

        return null
        return intent.extras?.getString(AccountManager.KEY_ACCOUNT_NAME)
    }
}