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
This commit is contained in:
Alexandra Gherghina
2014-09-24 11:29:48 +01:00
parent 3156e38f5e
commit 7f279cef11
2 changed files with 24 additions and 15 deletions

View File

@@ -361,20 +361,9 @@ public class AccountSettings extends SettingsPreferenceFragment
for (int i = 0; i < accountTypes.length; i++) { for (int i = 0; i < accountTypes.length; i++) {
final String accountType = accountTypes[i]; final String accountType = accountTypes[i];
if (mAuthoritiesCount > 0) { // Skip showing any account that does not have any of the requested authorities
// Skip showing any account that does not have any of the requested authorities if (!accountTypeHasAnyRequestedAuthorities(helper, accountType)) {
final ArrayList<String> authoritiesForType = helper.getAuthoritiesForAccountType( continue;
accountType);
boolean show = false;
for (int j = 0; j < mAuthoritiesCount; j++) {
if (authoritiesForType.contains(mAuthorities[j])) {
show = true;
break;
}
}
if (!show) {
continue;
}
} }
final CharSequence label = helper.getLabelForType(getActivity(), accountType); final CharSequence label = helper.getLabelForType(getActivity(), accountType);
if (label == null) { if (label == null) {
@@ -418,6 +407,26 @@ public class AccountSettings extends SettingsPreferenceFragment
return accountTypePreferences; 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 { private class AccountPreference extends Preference implements OnPreferenceClickListener {
/** /**
* Title of the tile that is shown to the user. * Title of the tile that is shown to the user.

View File

@@ -190,10 +190,10 @@ final public class AuthenticatorHelper extends BroadcastReceiver {
mEnabledAccountTypes.add(account.type); mEnabledAccountTypes.add(account.type);
} }
} }
buildAccountTypeToAuthoritiesMap();
if (mListeningToAccountUpdates) { if (mListeningToAccountUpdates) {
mListener.onAccountsUpdate(mUserHandle); mListener.onAccountsUpdate(mUserHandle);
} }
buildAccountTypeToAuthoritiesMap();
} }
@Override @Override