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

Commit cd66b4a9 authored by Jason Monk's avatar Jason Monk Committed by Daniel Sandler
Browse files

Cache account prefs so we don't lose a11y focus

Fixes: 28767151
Change-Id: I876712c42b02bb2efaaa492ad951ad42935ecb32
parent aa56eef3
Loading
Loading
Loading
Loading
+10 −14
Original line number Diff line number Diff line
@@ -154,6 +154,7 @@ public class AccountSyncSettings extends AccountPreferenceBase {
        super.onCreate(icicle);
        setPreferenceScreen(null);
        addPreferencesFromResource(R.xml.account_sync_settings);
        getPreferenceScreen().setOrderingAsAdded(false);
        setAccessibilityTitle();

        setHasOptionsMenu(true);
@@ -234,8 +235,13 @@ public class AccountSyncSettings extends AccountPreferenceBase {
    }

    private void addSyncStateSwitch(Account account, String authority) {
        SyncStateSwitchPreference item =
                new SyncStateSwitchPreference(getPrefContext(), account, authority);
        SyncStateSwitchPreference item = (SyncStateSwitchPreference) getCachedPreference(authority);
        if (item == null) {
            item = new SyncStateSwitchPreference(getPrefContext(), account, authority);
            getPreferenceScreen().addPreference(item);
        } else {
            item.setup(account, authority);
        }
        item.setPersistent(false);
        final ProviderInfo providerInfo = getPackageManager().resolveContentProviderAsUser(
                authority, 0, mUserHandle.getIdentifier());
@@ -250,7 +256,6 @@ public class AccountSyncSettings extends AccountPreferenceBase {
        String title = getString(R.string.sync_item_title, providerLabel);
        item.setTitle(title);
        item.setKey(authority);
        mSwitches.add(item);
    }

    @Override
@@ -529,14 +534,10 @@ public class AccountSyncSettings extends AccountPreferenceBase {
            }
        }

        for (int i = 0, n = mSwitches.size(); i < n; i++) {
            getPreferenceScreen().removePreference(mSwitches.get(i));
        }
        mSwitches.clear();

        if (Log.isLoggable(TAG, Log.VERBOSE)) {
            Log.d(TAG, "looking for sync adapters that match account " + mAccount);
        }
        cacheRemoveAllPrefs(getPreferenceScreen());
        for (int j = 0, m = authorities.size(); j < m; j++) {
            final String authority = authorities.get(j);
            // We could check services here....
@@ -549,11 +550,7 @@ public class AccountSyncSettings extends AccountPreferenceBase {
                addSyncStateSwitch(mAccount, authority);
            }
        }

        Collections.sort(mSwitches);
        for (int i = 0, n = mSwitches.size(); i < n; i++) {
            getPreferenceScreen().addPreference(mSwitches.get(i));
        }
        removeCachedPrefs(getPreferenceScreen());
    }

    /**
@@ -562,7 +559,6 @@ public class AccountSyncSettings extends AccountPreferenceBase {
    @Override
    protected void onAuthDescriptionsUpdated() {
        super.onAuthDescriptionsUpdated();
        getPreferenceScreen().removeAll();
        if (mAccount != null) {
            mProviderIcon.setImageDrawable(getDrawableForType(mAccount.type));
            mProviderId.setText(getLabelForType(mAccount.type));
+5 −0
Original line number Diff line number Diff line
@@ -51,8 +51,13 @@ public class SyncStateSwitchPreference extends SwitchPreference {

    public SyncStateSwitchPreference(Context context, Account account, String authority) {
        super(context, null, 0, R.style.SyncSwitchPreference);
        setup(account, authority);
    }

    public void setup(Account account, String authority) {
        mAccount = account;
        mAuthority = authority;
        notifyChanged();
    }

    @Override