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

Commit f2c35009 authored by dev-12's avatar dev-12
Browse files

Merge branch '3705-a15-account-removed-fixes' into 'main'

provide a way to listen for account remove callback from background; unify permissions across adding and removing account.

See merge request !178
parents 695a1ccd 827a3e59
Loading
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -29,10 +29,6 @@
    <uses-permission android:name="android.permission.READ_CALENDAR"/>
    <uses-permission android:name="android.permission.WRITE_CALENDAR"/>

    <!-- permission to use to be notified about account being added -->
    <permission android:name="foundation.e.accountmanager.permission.ADD_ACCOUNT"
        android:protectionLevel="signature" />

    <!-- permission for broadcast related to account changes event (added/removed) -->
    <permission
        android:name="foundation.e.accountmanager.permission.ACCOUNT_EVENTS"
+21 −20
Original line number Diff line number Diff line
@@ -17,34 +17,35 @@

package at.bitfire.davdroid

import android.content.ComponentName
import android.accounts.AccountManager
import android.content.Context
import android.content.Intent

object MailAccountSyncHelper {
object AccountSyncHelper {

    private const val MAIL_PACKAGE = "foundation.e.mail"
    private const val MAIL_RECEIVER_CLASS = "com.fsck.k9.account.AccountSyncReceiver"
    private const val ACTION_PREFIX = "foundation.e.accountmanager.account."
    private const val ACCOUNT_EVENTS_PERMISSION = "foundation.e.accountmanager.permission.ACCOUNT_EVENTS"
    private const val ACTION_PREFIX = "foundation.e.accountmanager.action"
    const val ACCOUNT_EVENTS_PERMISSION = "foundation.e.accountmanager.permission.ACCOUNT_EVENTS"
    const val ACTION_ACCOUNT_REMOVED = "$ACTION_PREFIX.ACCOUNT_REMOVED"
    const val ACTION_ACCOUNT_ADDED = "$ACTION_PREFIX.ACCOUNT_ADDED"

    fun syncMailAccounts(applicationContext: Context?) {
        val intent = getIntent()
        intent.action = ACTION_PREFIX + "create"
        applicationContext?.sendBroadcast(intent, ACCOUNT_EVENTS_PERMISSION)
    fun notifyAccountAdded(context: Context, accountName: String) {
        val intent = Intent(ACTION_ACCOUNT_ADDED).apply {
            addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
            val accountType = context.getString(R.string.eelo_account_type)
            putExtra(AccountManager.KEY_ACCOUNT_NAME, accountName)
            putExtra(AccountManager.KEY_ACCOUNT_TYPE, accountType)
        }

    fun notifyAccountRemoved(context: Context, accountRemovedIntent: Intent) {
        val intent = getIntent()
        intent.action = ACTION_PREFIX + "removed"
        intent.putExtras(accountRemovedIntent)
        context.sendBroadcast(intent, ACCOUNT_EVENTS_PERMISSION)
    }

    private fun getIntent() : Intent {
        val intent = Intent()
        intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
        intent.component = ComponentName(MAIL_PACKAGE, MAIL_RECEIVER_CLASS)
        return intent
    fun notifyAccountRemoved(context: Context, accountRemovedIntent: Intent) {
        context.sendBroadcast(
            Intent(ACTION_ACCOUNT_REMOVED).apply {
                addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
                putExtras(accountRemovedIntent)
            },
            ACCOUNT_EVENTS_PERMISSION
        )
    }

}
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import android.accounts.AccountManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import at.bitfire.davdroid.MailAccountSyncHelper
import at.bitfire.davdroid.AccountSyncHelper
import at.bitfire.davdroid.settings.AccountSettings
import at.bitfire.davdroid.syncadapter.AccountUtils
import at.bitfire.davdroid.ui.signout.OpenIdEndSessionActivity
@@ -44,7 +44,7 @@ class AccountRemovedReceiver : BroadcastReceiver() {
            context = context,
            accountName = accountName
        )
        MailAccountSyncHelper.notifyAccountRemoved(context.applicationContext, intent)
        AccountSyncHelper.notifyAccountRemoved(context.applicationContext, intent)
    }

    private fun clearOidcSession(
+2 −2
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import android.accounts.Account
import android.content.ContentProviderClient
import android.content.Context
import android.content.SyncResult
import at.bitfire.davdroid.MailAccountSyncHelper
import at.bitfire.davdroid.AccountSyncHelper
import at.bitfire.davdroid.network.HttpClient

class MailSyncer (context: Context): Syncer(context) {
@@ -32,6 +32,6 @@ class MailSyncer (context: Context): Syncer(context) {
        provider: ContentProviderClient,
        syncResult: SyncResult
    ) {
        MailAccountSyncHelper.syncMailAccounts(context.applicationContext)
        AccountSyncHelper.notifyAccountAdded(context.applicationContext, account.name)
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceGroup
import androidx.preference.SwitchPreferenceCompat
import at.bitfire.davdroid.InvalidAccountException
import at.bitfire.davdroid.MailAccountSyncHelper
import at.bitfire.davdroid.AccountSyncHelper
import at.bitfire.davdroid.R
import at.bitfire.davdroid.db.Credentials
import at.bitfire.davdroid.log.Logger
@@ -574,7 +574,7 @@ class SettingsActivity: AppCompatActivity() {
            accountSettings?.credentials(credentials)
            clearOwnCloudData()
            reload()
            MailAccountSyncHelper.syncMailAccounts(getApplication())
            AccountSyncHelper.notifyAccountAdded(getApplication(), account.name)
        }

        private fun clearOwnCloudData() {
Loading