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
diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java
index 3c0d9e9..8a183da 100644
--- a/src/com/android/settings/accounts/AccountSettings.java
+++ b/src/com/android/settings/accounts/AccountSettings.java
@@ -361,20 +361,9 @@
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) {
- continue;
- }
+ // Skip showing any account that does not have any of the requested authorities
+ if (!accountTypeHasAnyRequestedAuthorities(helper, accountType)) {
+ continue;
}
final CharSequence label = helper.getLabelForType(getActivity(), accountType);
if (label == null) {
@@ -418,6 +407,26 @@
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.
diff --git a/src/com/android/settings/accounts/AuthenticatorHelper.java b/src/com/android/settings/accounts/AuthenticatorHelper.java
index 6cebf5f..cc8a6d5 100644
--- a/src/com/android/settings/accounts/AuthenticatorHelper.java
+++ b/src/com/android/settings/accounts/AuthenticatorHelper.java
@@ -190,10 +190,10 @@
mEnabledAccountTypes.add(account.type);
}
}
+ buildAccountTypeToAuthoritiesMap();
if (mListeningToAccountUpdates) {
mListener.onAccountsUpdate(mUserHandle);
}
- buildAccountTypeToAuthoritiesMap();
}
@Override