diff options
author | Alexandra Gherghina <alexgherghina@google.com> | 2014-09-03 14:17:35 +0100 |
---|---|---|
committer | Alexandra Gherghina <alexgherghina@google.com> | 2014-09-05 16:46:54 +0100 |
commit | af0d9540c26ee1cf79606dc524dbfd70342d2b06 (patch) | |
tree | f5af9786e97721f8e42f079585ec8ea16aa238a6 /src/com/android/settings/accounts | |
parent | 1e0ea452635fb3e8fbac733567489a38ee3ed635 (diff) | |
download | packages_apps_Settings-af0d9540c26ee1cf79606dc524dbfd70342d2b06.zip packages_apps_Settings-af0d9540c26ee1cf79606dc524dbfd70342d2b06.tar.gz packages_apps_Settings-af0d9540c26ee1cf79606dc524dbfd70342d2b06.tar.bz2 |
Obeying Settings.EXTRA_AUTHORITIES extra for SYNC_SETTINGS
Bug: 17188306
Change-Id: I00481c6c4f346b6f4037554296735f4323cbbcfb
Diffstat (limited to 'src/com/android/settings/accounts')
3 files changed, 55 insertions, 28 deletions
diff --git a/src/com/android/settings/accounts/AccountPreferenceBase.java b/src/com/android/settings/accounts/AccountPreferenceBase.java index 28da591..bb60871 100644 --- a/src/com/android/settings/accounts/AccountPreferenceBase.java +++ b/src/com/android/settings/accounts/AccountPreferenceBase.java @@ -17,15 +17,10 @@ package com.android.settings.accounts; -import com.google.android.collect.Maps; - import android.accounts.AuthenticatorDescription; import android.app.Activity; -import android.app.ActivityManagerNative; -import android.app.IActivityManager; import android.content.ContentResolver; import android.content.Context; -import android.content.SyncAdapterType; import android.content.SyncStatusObserver; import android.content.pm.PackageManager; import android.content.res.Resources; @@ -45,7 +40,6 @@ import com.android.settings.Utils; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; class AccountPreferenceBase extends SettingsPreferenceFragment implements AuthenticatorHelper.OnAccountsUpdateListener { @@ -59,7 +53,6 @@ class AccountPreferenceBase extends SettingsPreferenceFragment private UserManager mUm; private Object mStatusChangeListenerHandle; - private HashMap<String, ArrayList<String>> mAccountTypeToAuthorities = null; protected AuthenticatorHelper mAuthenticatorHelper; protected UserHandle mUserHandle; @@ -136,25 +129,7 @@ class AccountPreferenceBase extends SettingsPreferenceFragment }; public ArrayList<String> getAuthoritiesForAccountType(String type) { - if (mAccountTypeToAuthorities == null) { - mAccountTypeToAuthorities = Maps.newHashMap(); - SyncAdapterType[] syncAdapters = ContentResolver.getSyncAdapterTypesAsUser( - mUserHandle.getIdentifier()); - for (int i = 0, n = syncAdapters.length; i < n; i++) { - final SyncAdapterType sa = syncAdapters[i]; - ArrayList<String> authorities = mAccountTypeToAuthorities.get(sa.accountType); - if (authorities == null) { - authorities = new ArrayList<String>(); - mAccountTypeToAuthorities.put(sa.accountType, authorities); - } - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.d(TAG, "added authority " + sa.authority + " to accountType " - + sa.accountType); - } - authorities.add(sa.authority); - } - } - return mAccountTypeToAuthorities.get(type); + return mAuthenticatorHelper.getAuthoritiesForAccountType(type); } /** diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java index 9bcef13..f057cbf 100644 --- a/src/com/android/settings/accounts/AccountSettings.java +++ b/src/com/android/settings/accounts/AccountSettings.java @@ -57,6 +57,7 @@ import java.util.List; import static android.content.Intent.EXTRA_USER; import static android.os.UserManager.DISALLOW_MODIFY_ACCOUNTS; +import static android.provider.Settings.EXTRA_AUTHORITIES; /** * Settings screen for the account types on the device. @@ -83,6 +84,8 @@ public class AccountSettings extends SettingsPreferenceFragment private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver = new ManagedProfileBroadcastReceiver(); private Preference mProfileNotAvailablePreference; + private String[] mAuthorities; + private int mAuthoritiesCount = 0; /** * Holds data related to the accounts belonging to one profile. @@ -114,7 +117,10 @@ public class AccountSettings extends SettingsPreferenceFragment public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mUm = (UserManager) getSystemService(Context.USER_SERVICE); - mProfileNotAvailablePreference = new Preference(getActivity()); + mAuthorities = getActivity().getIntent().getStringArrayExtra(EXTRA_AUTHORITIES); + if (mAuthorities != null) { + mAuthoritiesCount = mAuthorities.length; + } setHasOptionsMenu(true); } @@ -190,6 +196,7 @@ public class AccountSettings extends SettingsPreferenceFragment if (preference == profileData.addAccountPreference) { Intent intent = new Intent(ADD_ACCOUNT_ACTION); intent.putExtra(EXTRA_USER, profileData.userInfo.getUserHandle()); + intent.putExtra(EXTRA_AUTHORITIES, mAuthorities); startActivity(intent); return true; } @@ -353,6 +360,21 @@ 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) { + continue; + } + } final CharSequence label = helper.getLabelForType(getActivity(), accountType); if (label == null) { continue; diff --git a/src/com/android/settings/accounts/AuthenticatorHelper.java b/src/com/android/settings/accounts/AuthenticatorHelper.java index 7ea2f12..51ece2b 100644 --- a/src/com/android/settings/accounts/AuthenticatorHelper.java +++ b/src/com/android/settings/accounts/AuthenticatorHelper.java @@ -16,13 +16,17 @@ package com.android.settings.accounts; +import com.google.android.collect.Maps; + import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AuthenticatorDescription; import android.content.BroadcastReceiver; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.SyncAdapterType; import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.drawable.Drawable; @@ -52,6 +56,7 @@ final public class AuthenticatorHelper extends BroadcastReceiver { private AuthenticatorDescription[] mAuthDescs; private ArrayList<String> mEnabledAccountTypes = new ArrayList<String>(); private Map<String, Drawable> mAccTypeIconCache = new HashMap<String, Drawable>(); + private HashMap<String, ArrayList<String>> mAccountTypeToAuthorities = Maps.newHashMap(); private final UserHandle mUserHandle; private final UserManager mUm; @@ -69,7 +74,8 @@ final public class AuthenticatorHelper extends BroadcastReceiver { mUm = userManager; mUserHandle = userHandle; mListener = listener; - // This guarantees that the helper is ready to use once constructed + // This guarantees that the helper is ready to use once constructed: the account types and + // authorities are initialized onAccountsUpdated(null); } @@ -187,6 +193,7 @@ final public class AuthenticatorHelper extends BroadcastReceiver { if (mListeningToAccountUpdates) { mListener.onAccountsUpdate(mUserHandle); } + buildAccountTypeToAuthoritiesMap(); } @Override @@ -215,4 +222,27 @@ final public class AuthenticatorHelper extends BroadcastReceiver { mListeningToAccountUpdates = false; } } + + public ArrayList<String> getAuthoritiesForAccountType(String type) { + return mAccountTypeToAuthorities.get(type); + } + + private void buildAccountTypeToAuthoritiesMap() { + mAccountTypeToAuthorities.clear(); + SyncAdapterType[] syncAdapters = ContentResolver.getSyncAdapterTypesAsUser( + mUserHandle.getIdentifier()); + for (int i = 0, n = syncAdapters.length; i < n; i++) { + final SyncAdapterType sa = syncAdapters[i]; + ArrayList<String> authorities = mAccountTypeToAuthorities.get(sa.accountType); + if (authorities == null) { + authorities = new ArrayList<String>(); + mAccountTypeToAuthorities.put(sa.accountType, authorities); + } + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.d(TAG, "Added authority " + sa.authority + " to accountType " + + sa.accountType); + } + authorities.add(sa.authority); + } + } } |