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

Commit 9b370d06 authored by cketti's avatar cketti
Browse files

Add code to remove references to LocalStore when deleting accounts

parent 01336944
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -125,11 +125,7 @@ public class Preferences {
            accountsInOrder.remove(account);
        }

        try {
            Store.removeRemoteInstance(account);
        } catch (Exception e) {
            Log.e(K9.LOG_TAG, "Failed to reset remote store for account " + account.getUuid(), e);
        }
        Store.removeAccount(account);

        account.delete(this);

+28 −1
Original line number Diff line number Diff line
@@ -7,8 +7,10 @@ import java.util.concurrent.ConcurrentHashMap;

import android.app.Application;
import android.content.Context;
import android.util.Log;

import com.fsck.k9.Account;
import com.fsck.k9.K9;
import com.fsck.k9.mail.store.ImapStore;
import com.fsck.k9.mail.store.LocalStore;
import com.fsck.k9.mail.store.Pop3Store;
@@ -111,13 +113,38 @@ public abstract class Store {
        }
    }

    public static void removeAccount(Account account) {
        try {
            removeRemoteInstance(account);
        } catch (Exception e) {
            Log.e(K9.LOG_TAG, "Failed to reset remote store for account " + account.getUuid(), e);
        }

        try {
            removeLocalInstance(account);
        } catch (Exception e) {
            Log.e(K9.LOG_TAG, "Failed to reset local store for account " + account.getUuid(), e);
        }
    }

    /**
     * Release reference to a local mail store instance.
     *
     * @param account
     *         {@link Account} instance that is used to get the local mail store instance.
     */
    private static void removeLocalInstance(Account account) {
        String accountUuid = account.getUuid();
        sLocalStores.remove(accountUuid);
    }

    /**
     * Release reference to a remote mail store instance.
     *
     * @param account
     *         {@link Account} instance that is used to get the remote mail store instance.
     */
    public synchronized static void removeRemoteInstance(Account account) {
    private synchronized static void removeRemoteInstance(Account account) {
        String uri = account.getStoreUri();

        if (uri.startsWith("local")) {