summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/accounts
diff options
context:
space:
mode:
authorAlexandra Gherghina <alexgherghina@google.com>2014-09-03 14:17:35 +0100
committerAlexandra Gherghina <alexgherghina@google.com>2014-09-05 16:46:54 +0100
commitaf0d9540c26ee1cf79606dc524dbfd70342d2b06 (patch)
treef5af9786e97721f8e42f079585ec8ea16aa238a6 /src/com/android/settings/accounts
parent1e0ea452635fb3e8fbac733567489a38ee3ed635 (diff)
downloadpackages_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')
-rw-r--r--src/com/android/settings/accounts/AccountPreferenceBase.java27
-rw-r--r--src/com/android/settings/accounts/AccountSettings.java24
-rw-r--r--src/com/android/settings/accounts/AuthenticatorHelper.java32
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);
+ }
+ }
}