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

Commit 7f279cef authored by Alexandra Gherghina's avatar Alexandra Gherghina
Browse files

Add null check for sync authorities of an account type

This protects against a potential NPE if there are no sync authorities for
an account of a given type.

Bug: 17612697
Change-Id: Ifd34b5b7692cbcc8de78d353eedd284e499f954e
parent 3156e38f
Loading
Loading
Loading
Loading
+23 −14
Original line number Diff line number Diff line
@@ -361,21 +361,10 @@ public class AccountSettings extends SettingsPreferenceFragment

        for (int i = 0; i < accountTypes.length; i++) {
            final String accountType = accountTypes[i];
            if (mAuthoritiesCount > 0) {
            // Skip showing any account that does not have any of the requested authorities
                final ArrayList<String> authoritiesForType = helper.getAuthoritiesForAccountType(
                        accountType);
                boolean show = false;
                for (int j = 0; j < mAuthoritiesCount; j++) {
                    if (authoritiesForType.contains(mAuthorities[j])) {
                        show = true;
                        break;
                    }
                }
                if (!show) {
            if (!accountTypeHasAnyRequestedAuthorities(helper, accountType)) {
                continue;
            }
            }
            final CharSequence label = helper.getLabelForType(getActivity(), accountType);
            if (label == null) {
                continue;
@@ -418,6 +407,26 @@ public class AccountSettings extends SettingsPreferenceFragment
        return accountTypePreferences;
    }

    private boolean accountTypeHasAnyRequestedAuthorities(AuthenticatorHelper helper,
            String accountType) {
        if (mAuthoritiesCount == 0) {
            // No authorities required
            return true;
        }
        final ArrayList<String> authoritiesForType = helper.getAuthoritiesForAccountType(
                accountType);
        if (authoritiesForType == null) {
            Log.d(TAG, "No sync authorities for account type: " + accountType);
            return false;
        }
        for (int j = 0; j < mAuthoritiesCount; j++) {
            if (authoritiesForType.contains(mAuthorities[j])) {
                return true;
            }
        }
        return false;
    }

    private class AccountPreference extends Preference implements OnPreferenceClickListener {
        /**
         * Title of the tile that is shown to the user.
+1 −1
Original line number Diff line number Diff line
@@ -190,10 +190,10 @@ final public class AuthenticatorHelper extends BroadcastReceiver {
                mEnabledAccountTypes.add(account.type);
            }
        }
        buildAccountTypeToAuthoritiesMap();
        if (mListeningToAccountUpdates) {
            mListener.onAccountsUpdate(mUserHandle);
        }
        buildAccountTypeToAuthoritiesMap();
    }

    @Override