Add handling for account tiles for specific account type.
- List individual account instead of account type under User & account screen. - Add handling to move account tiles with specific account type from top level account dashboard to inside the corresponding account preference. - Rename settings.accounts.AccountPreference to settings.accounts.AccountTypePreference to make it less confused with settings.AccountPreference Bug: 31801423 Test: make RunSettingsRoboTests Change-Id: Iebe70a3c4230e8d979344f142a5c2a60945e552e
This commit is contained in:
@@ -26,6 +26,7 @@ import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
@@ -47,6 +48,7 @@ import com.android.settings.core.PreferenceController;
|
||||
import com.android.settings.core.lifecycle.LifecycleObserver;
|
||||
import com.android.settings.core.lifecycle.events.OnPause;
|
||||
import com.android.settings.core.lifecycle.events.OnResume;
|
||||
import com.android.settings.dashboard.DashboardFeatureProvider;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.search.Index;
|
||||
import com.android.settings.search.SearchIndexableRaw;
|
||||
@@ -86,6 +88,7 @@ public class AccountPreferenceController extends PreferenceController
|
||||
private boolean mIAEnabled;
|
||||
private int mAccountProfileOrder = ORDER_ACCOUNT_PROFILES;
|
||||
private AccountRestrictionHelper mHelper;
|
||||
private DashboardFeatureProvider mDashboardFeatureProvider;
|
||||
|
||||
/**
|
||||
* Holds data related to the accounts belonging to one profile.
|
||||
@@ -132,8 +135,9 @@ public class AccountPreferenceController extends PreferenceController
|
||||
if (mAuthorities != null) {
|
||||
mAuthoritiesCount = mAuthorities.length;
|
||||
}
|
||||
mIAEnabled = FeatureFactory.getFactory(mContext).getDashboardFeatureProvider(mContext)
|
||||
.isEnabled();
|
||||
mDashboardFeatureProvider =
|
||||
FeatureFactory.getFactory(mContext).getDashboardFeatureProvider(mContext);
|
||||
mIAEnabled = mDashboardFeatureProvider.isEnabled();
|
||||
mHelper = helper;
|
||||
}
|
||||
|
||||
@@ -250,11 +254,6 @@ public class AccountPreferenceController extends PreferenceController
|
||||
}
|
||||
|
||||
private void updateUi() {
|
||||
if (!mIAEnabled) {
|
||||
// Load the preferences from an XML resource
|
||||
mParent.addPreferencesFromResource(R.xml.account_settings);
|
||||
}
|
||||
|
||||
if (!isAvailable()) {
|
||||
// This should not happen
|
||||
Log.e(TAG, "We should not be showing settings for a managed profile");
|
||||
@@ -264,6 +263,11 @@ public class AccountPreferenceController extends PreferenceController
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mIAEnabled) {
|
||||
// Load the preferences from an XML resource
|
||||
mParent.addPreferencesFromResource(R.xml.account_settings);
|
||||
}
|
||||
|
||||
if (mUm.isLinkedUser()) {
|
||||
// Restricted user or similar
|
||||
UserInfo userInfo = mUm.getUserInfo(UserHandle.myUserId());
|
||||
@@ -400,7 +404,7 @@ public class AccountPreferenceController extends PreferenceController
|
||||
private void updateAccountTypes(ProfileData profileData) {
|
||||
profileData.preferenceGroup.removeAll();
|
||||
if (profileData.userInfo.isEnabled()) {
|
||||
final ArrayList<AccountPreference> preferences = getAccountTypePreferences(
|
||||
final ArrayList<AccountTypePreference> preferences = getAccountTypePreferences(
|
||||
profileData.authenticatorHelper, profileData.userInfo.getUserHandle());
|
||||
final int count = preferences.size();
|
||||
for (int i = 0; i < count; i++) {
|
||||
@@ -430,11 +434,11 @@ public class AccountPreferenceController extends PreferenceController
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<AccountPreference> getAccountTypePreferences(AuthenticatorHelper helper,
|
||||
private ArrayList<AccountTypePreference> getAccountTypePreferences(AuthenticatorHelper helper,
|
||||
UserHandle userHandle) {
|
||||
final String[] accountTypes = helper.getEnabledAccountTypes();
|
||||
final ArrayList<AccountPreference> accountTypePreferences =
|
||||
new ArrayList<AccountPreference>(accountTypes.length);
|
||||
final ArrayList<AccountTypePreference> accountTypePreferences =
|
||||
new ArrayList<AccountTypePreference>(accountTypes.length);
|
||||
|
||||
for (int i = 0; i < accountTypes.length; i++) {
|
||||
final String accountType = accountTypes[i];
|
||||
@@ -453,17 +457,40 @@ public class AccountPreferenceController extends PreferenceController
|
||||
.getAccountsByTypeAsUser(accountType, userHandle);
|
||||
final boolean skipToAccount = accounts.length == 1
|
||||
&& !helper.hasAccountPreferences(accountType);
|
||||
final Drawable icon = helper.getDrawableForType(mContext, accountType);
|
||||
final Context prefContext = mParent.getPreferenceManager().getContext();
|
||||
|
||||
if (skipToAccount) {
|
||||
if (mIAEnabled) {
|
||||
// Add a preference row for each individual account
|
||||
for (Account account : accounts) {
|
||||
final ArrayList<String> auths =
|
||||
helper.getAuthoritiesForAccountType(account.type);
|
||||
if (!AccountRestrictionHelper.showAccount(mAuthorities, auths)) {
|
||||
continue;
|
||||
}
|
||||
final Bundle fragmentArguments = new Bundle();
|
||||
fragmentArguments.putParcelable(AccountDetailDashboardFragment.KEY_ACCOUNT,
|
||||
account);
|
||||
fragmentArguments.putString(AccountDetailDashboardFragment.KEY_ACCOUNT_TYPE,
|
||||
accountType);
|
||||
fragmentArguments.putString(AccountDetailDashboardFragment.KEY_ACCOUNT_LABEL,
|
||||
label.toString());
|
||||
fragmentArguments.putInt(AccountDetailDashboardFragment.KEY_ACCOUNT_TITLE_RES,
|
||||
titleResId);
|
||||
fragmentArguments.putParcelable(EXTRA_USER, userHandle);
|
||||
accountTypePreferences.add(new AccountTypePreference(
|
||||
prefContext, account.name, titleResPackageName, titleResId, label,
|
||||
AccountDetailDashboardFragment.class.getName(), fragmentArguments, icon));
|
||||
}
|
||||
} else if (skipToAccount) {
|
||||
final Bundle fragmentArguments = new Bundle();
|
||||
fragmentArguments.putParcelable(AccountSyncSettings.ACCOUNT_KEY,
|
||||
accounts[0]);
|
||||
fragmentArguments.putParcelable(EXTRA_USER, userHandle);
|
||||
|
||||
accountTypePreferences.add(new AccountPreference(
|
||||
mParent.getPreferenceManager().getContext(), label, titleResPackageName,
|
||||
titleResId, AccountSyncSettings.class.getName(), fragmentArguments,
|
||||
helper.getDrawableForType(mContext, accountType)));
|
||||
accountTypePreferences.add(new AccountTypePreference(
|
||||
prefContext, label, titleResPackageName,
|
||||
titleResId, AccountSyncSettings.class.getName(), fragmentArguments, icon));
|
||||
} else {
|
||||
final Bundle fragmentArguments = new Bundle();
|
||||
fragmentArguments.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE, accountType);
|
||||
@@ -471,18 +498,23 @@ public class AccountPreferenceController extends PreferenceController
|
||||
label.toString());
|
||||
fragmentArguments.putParcelable(EXTRA_USER, userHandle);
|
||||
|
||||
accountTypePreferences.add(new AccountPreference(
|
||||
mParent.getPreferenceManager().getContext(), label, titleResPackageName,
|
||||
titleResId, ManageAccountsSettings.class.getName(), fragmentArguments,
|
||||
helper.getDrawableForType(mContext, accountType)));
|
||||
accountTypePreferences.add(new AccountTypePreference(
|
||||
|
||||
prefContext, label, titleResPackageName,
|
||||
titleResId, ManageAccountsSettings.class.getName(), fragmentArguments, icon));
|
||||
}
|
||||
helper.preloadDrawableForType(mContext, accountType);
|
||||
}
|
||||
// Sort by label
|
||||
Collections.sort(accountTypePreferences, new Comparator<AccountPreference>() {
|
||||
Collections.sort(accountTypePreferences, new Comparator<AccountTypePreference>() {
|
||||
@Override
|
||||
public int compare(AccountPreference t1, AccountPreference t2) {
|
||||
return t1.getitle().toString().compareTo(t2.getitle().toString());
|
||||
public int compare(AccountTypePreference t1, AccountTypePreference t2) {
|
||||
int result = 0;
|
||||
if (mIAEnabled) {
|
||||
result = t1.getSummary().toString().compareTo(t2.getSummary().toString());
|
||||
}
|
||||
return result != 0
|
||||
? result : t1.getTitle().toString().compareTo(t2.getTitle().toString());
|
||||
}
|
||||
});
|
||||
return accountTypePreferences;
|
||||
|
||||
Reference in New Issue
Block a user