Index: chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java |
index 74f96a68931a37c0902e90c1839c5bf1e71ff3fb..0d0de89a8d85f11498c4b0cac97eff6afe603362 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java |
@@ -28,6 +28,7 @@ import android.os.Bundle; |
import android.os.UserManager; |
import android.preference.Preference; |
import android.preference.Preference.OnPreferenceClickListener; |
+import android.preference.PreferenceCategory; |
import android.preference.PreferenceFragment; |
import android.preference.PreferenceScreen; |
import android.support.annotation.Nullable; |
@@ -58,7 +59,6 @@ import org.chromium.chrome.browser.util.IntentUtils; |
import org.chromium.components.signin.AccountManagerHelper; |
import org.chromium.components.signin.ChromeSigninController; |
-import java.util.ArrayList; |
import java.util.HashMap; |
/** |
@@ -87,13 +87,6 @@ public class AccountManagementFragment extends PreferenceFragment |
*/ |
public static final String SHOW_GAIA_SERVICE_TYPE_EXTRA = "ShowGAIAServiceType"; |
- /** |
- * Account name preferences will be ordered sequentially, starting with this "order" value. |
- * This ensures that the account name preferences appear in the correct location in the |
- * preference fragment. See account_management_preferences.xml for details. |
- */ |
- private static final int FIRST_ACCOUNT_PREF_ORDER = 100; |
- |
/** |
* SharedPreference name for the preference that disables signing out of Chrome. |
* Signing out is forever disabled once Chrome signs the user in automatically |
@@ -106,7 +99,7 @@ public class AccountManagementFragment extends PreferenceFragment |
private static String sChildAccountId; |
private static Bitmap sCachedBadgedPicture; |
- public static final String PREF_ADD_ACCOUNT = "add_account"; |
+ public static final String PREF_ACCOUNTS_CATEGORY = "accounts_category"; |
public static final String PREF_PARENTAL_SETTINGS = "parental_settings"; |
public static final String PREF_PARENT_ACCOUNTS = "parent_accounts"; |
public static final String PREF_CHILD_CONTENT = "child_content"; |
@@ -121,8 +114,6 @@ public class AccountManagementFragment extends PreferenceFragment |
private int mGaiaServiceType; |
- private ArrayList<Preference> mAccountsListPreferences = new ArrayList<>(); |
- |
private Profile mProfile; |
private String mSignedInAccountName; |
@@ -233,7 +224,6 @@ public class AccountManagementFragment extends PreferenceFragment |
getActivity().setTitle(fullName); |
configureSignOutSwitch(); |
- configureAddAccountPreference(); |
configureChildAccountPreferences(); |
configureSyncSettings(); |
configureGoogleActivityControls(); |
@@ -331,43 +321,6 @@ public class AccountManagementFragment extends PreferenceFragment |
}); |
} |
- private void configureAddAccountPreference() { |
- ChromeBasePreference addAccount = (ChromeBasePreference) findPreference(PREF_ADD_ACCOUNT); |
- |
- if (mProfile.isChild()) { |
- getPreferenceScreen().removePreference(addAccount); |
- } else { |
- addAccount.setTitle(getResources().getString( |
- R.string.account_management_add_account_title)); |
- addAccount.setOnPreferenceClickListener(new OnPreferenceClickListener() { |
- @Override |
- public boolean onPreferenceClick(Preference preference) { |
- if (!isVisible() || !isResumed()) return false; |
- |
- AccountManagementScreenHelper.logEvent( |
- ProfileAccountManagementMetrics.ADD_ACCOUNT, |
- mGaiaServiceType); |
- |
- AccountAdder.getInstance().addAccount( |
- getActivity(), AccountAdder.ADD_ACCOUNT_RESULT); |
- |
- // Return to the last opened tab if triggered from the content area. |
- if (mGaiaServiceType != AccountManagementScreenHelper.GAIA_SERVICE_TYPE_NONE) { |
- if (isAdded()) getActivity().finish(); |
- } |
- |
- return true; |
- } |
- }); |
- addAccount.setManagedPreferenceDelegate(new ManagedPreferenceDelegate() { |
- @Override |
- public boolean isPreferenceControlledByPolicy(Preference preference) { |
- return !canAddAccounts(); |
- } |
- }); |
- } |
- } |
- |
private void configureChildAccountPreferences() { |
Preference parentAccounts = findPreference(PREF_PARENT_ACCOUNTS); |
Preference childContent = findPreference(PREF_CHILD_CONTENT); |
@@ -420,22 +373,18 @@ public class AccountManagementFragment extends PreferenceFragment |
} |
private void updateAccountsList() { |
- PreferenceScreen prefScreen = getPreferenceScreen(); |
- if (prefScreen == null) return; |
+ PreferenceCategory accountsCategory = |
+ (PreferenceCategory) findPreference(PREF_ACCOUNTS_CATEGORY); |
+ if (accountsCategory == null) return; |
- for (int i = 0; i < mAccountsListPreferences.size(); i++) { |
- prefScreen.removePreference(mAccountsListPreferences.get(i)); |
- } |
- mAccountsListPreferences.clear(); |
+ accountsCategory.removeAll(); |
+ boolean isChildAccount = mProfile.isChild(); |
Account[] accounts = AccountManagerHelper.get().getGoogleAccounts(); |
- int nextPrefOrder = FIRST_ACCOUNT_PREF_ORDER; |
- |
for (final Account account : accounts) { |
ChromeBasePreference pref = new ChromeBasePreference(getActivity()); |
pref.setTitle(account.name); |
- boolean isChildAccount = mProfile.isChild(); |
pref.setUseReducedPadding(isChildAccount); |
pref.setIcon(new BitmapDrawable(getResources(), |
isChildAccount ? getBadgedUserPicture(account.name, getResources()) : |
@@ -450,12 +399,46 @@ public class AccountManagementFragment extends PreferenceFragment |
} |
}); |
- pref.setOrder(nextPrefOrder++); |
- prefScreen.addPreference(pref); |
- mAccountsListPreferences.add(pref); |
+ accountsCategory.addPreference(pref); |
+ } |
+ |
+ if (!isChildAccount) { |
+ accountsCategory.addPreference(createAddAccountPreference()); |
} |
} |
+ private ChromeBasePreference createAddAccountPreference() { |
+ ChromeBasePreference addAccountPreference = new ChromeBasePreference(getActivity()); |
+ addAccountPreference.setIcon(R.drawable.add_circle_blue); |
+ addAccountPreference.setTitle(R.string.account_management_add_account_title); |
+ addAccountPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { |
+ @Override |
+ public boolean onPreferenceClick(Preference preference) { |
+ if (!isVisible() || !isResumed()) return false; |
+ |
+ AccountManagementScreenHelper.logEvent( |
+ ProfileAccountManagementMetrics.ADD_ACCOUNT, mGaiaServiceType); |
+ |
+ AccountAdder.getInstance().addAccount( |
+ getActivity(), AccountAdder.ADD_ACCOUNT_RESULT); |
+ |
+ // Return to the last opened tab if triggered from the content area. |
+ if (mGaiaServiceType != AccountManagementScreenHelper.GAIA_SERVICE_TYPE_NONE) { |
+ if (isAdded()) getActivity().finish(); |
+ } |
+ |
+ return true; |
+ } |
+ }); |
+ addAccountPreference.setManagedPreferenceDelegate(new ManagedPreferenceDelegate() { |
+ @Override |
+ public boolean isPreferenceControlledByPolicy(Preference preference) { |
+ return !canAddAccounts(); |
+ } |
+ }); |
+ return addAccountPreference; |
+ } |
+ |
// ProfileDownloader.Observer implementation: |
@Override |