Directly go to account sync screen if there's only one account for that type.

Bug: 6629330
Change-Id: Ieb2bad131b1580a6b75d970c9a0ea9980580f66d
This commit is contained in:
Amith Yamasani
2012-06-07 17:03:20 -07:00
parent ffa6f6e3e2
commit 3882c2e215
2 changed files with 37 additions and 12 deletions

View File

@@ -439,22 +439,37 @@ public class Settings extends PreferenceActivity
List<Header> accountHeaders = new ArrayList<Header>(accountTypes.length); List<Header> accountHeaders = new ArrayList<Header>(accountTypes.length);
for (String accountType : accountTypes) { for (String accountType : accountTypes) {
CharSequence label = mAuthenticatorHelper.getLabelForType(this, accountType); CharSequence label = mAuthenticatorHelper.getLabelForType(this, accountType);
Account[] accounts = AccountManager.get(this).getAccountsByType(accountType);
boolean skipToAccount = accounts.length == 1
&& !mAuthenticatorHelper.hasAccountPreferences(accountType);
Header accHeader = new Header(); Header accHeader = new Header();
accHeader.title = label; accHeader.title = label;
if (accHeader.extras == null) { if (accHeader.extras == null) {
accHeader.extras = new Bundle(); accHeader.extras = new Bundle();
} }
if (skipToAccount) {
accHeader.breadCrumbTitleRes = R.string.account_sync_settings_title;
accHeader.breadCrumbShortTitleRes = R.string.account_sync_settings_title;
accHeader.fragment = AccountSyncSettings.class.getName();
accHeader.fragmentArguments = new Bundle();
// Need this for the icon
accHeader.extras.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE, accountType); accHeader.extras.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE, accountType);
accHeader.extras.putParcelable(AccountSyncSettings.ACCOUNT_KEY, accounts[0]);
accHeader.fragmentArguments.putParcelable(AccountSyncSettings.ACCOUNT_KEY,
accounts[0]);
} else {
accHeader.breadCrumbTitle = label; accHeader.breadCrumbTitle = label;
accHeader.breadCrumbShortTitle = label; accHeader.breadCrumbShortTitle = label;
accHeader.fragment = ManageAccountsSettings.class.getName(); accHeader.fragment = ManageAccountsSettings.class.getName();
accHeader.fragmentArguments = new Bundle(); accHeader.fragmentArguments = new Bundle();
accHeader.extras.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE, accountType);
accHeader.fragmentArguments.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE, accHeader.fragmentArguments.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE,
accountType); accountType);
if (!isMultiPane()) { if (!isMultiPane()) {
accHeader.fragmentArguments.putString(ManageAccountsSettings.KEY_ACCOUNT_LABEL, accHeader.fragmentArguments.putString(ManageAccountsSettings.KEY_ACCOUNT_LABEL,
label.toString()); label.toString());
} }
}
accountHeaders.add(accHeader); accountHeaders.add(accHeader);
} }
@@ -642,8 +657,8 @@ public class Settings extends PreferenceActivity
//$FALL-THROUGH$ //$FALL-THROUGH$
case HEADER_TYPE_NORMAL: case HEADER_TYPE_NORMAL:
if (header.extras != null && header.extras.containsKey( if (header.extras != null
ManageAccountsSettings.KEY_ACCOUNT_TYPE)) { && header.extras.containsKey(ManageAccountsSettings.KEY_ACCOUNT_TYPE)) {
String accType = header.extras.getString( String accType = header.extras.getString(
ManageAccountsSettings.KEY_ACCOUNT_TYPE); ManageAccountsSettings.KEY_ACCOUNT_TYPE);
ViewGroup.LayoutParams lp = holder.icon.getLayoutParams(); ViewGroup.LayoutParams lp = holder.icon.getLayoutParams();

View File

@@ -124,4 +124,14 @@ public class AuthenticatorHelper {
public AuthenticatorDescription getAccountTypeDescription(String accountType) { public AuthenticatorDescription getAccountTypeDescription(String accountType) {
return mTypeToAuthDescription.get(accountType); return mTypeToAuthDescription.get(accountType);
} }
public boolean hasAccountPreferences(final String accountType) {
if (containsAccountType(accountType)) {
AuthenticatorDescription desc = getAccountTypeDescription(accountType);
if (desc != null && desc.accountPreferencesId != 0) {
return true;
}
}
return false;
}
} }