Modify account settings for better locale resolution
Bug: 16282173 Change-Id: I2ab861464cdbbb1c1b0a5a7231f960d8ed9e90c6
This commit is contained in:
@@ -184,6 +184,11 @@ public class SettingsActivity extends Activity
|
|||||||
* that fragment.
|
* that fragment.
|
||||||
*/
|
*/
|
||||||
public static final String EXTRA_SHOW_FRAGMENT_TITLE = ":settings:show_fragment_title";
|
public static final String EXTRA_SHOW_FRAGMENT_TITLE = ":settings:show_fragment_title";
|
||||||
|
/**
|
||||||
|
* The package name used to resolve the title resource id.
|
||||||
|
*/
|
||||||
|
public static final String EXTRA_SHOW_FRAGMENT_TITLE_RES_PACKAGE_NAME =
|
||||||
|
":settings:show_fragment_title_res_package_name";
|
||||||
public static final String EXTRA_SHOW_FRAGMENT_TITLE_RESID =
|
public static final String EXTRA_SHOW_FRAGMENT_TITLE_RESID =
|
||||||
":settings:show_fragment_title_resid";
|
":settings:show_fragment_title_resid";
|
||||||
public static final String EXTRA_SHOW_FRAGMENT_AS_SHORTCUT =
|
public static final String EXTRA_SHOW_FRAGMENT_AS_SHORTCUT =
|
||||||
@@ -657,7 +662,23 @@ public class SettingsActivity extends Activity
|
|||||||
if (initialTitleResId > 0) {
|
if (initialTitleResId > 0) {
|
||||||
mInitialTitle = null;
|
mInitialTitle = null;
|
||||||
mInitialTitleResId = initialTitleResId;
|
mInitialTitleResId = initialTitleResId;
|
||||||
|
|
||||||
|
final String initialTitleResPackageName = intent.getStringExtra(
|
||||||
|
EXTRA_SHOW_FRAGMENT_TITLE_RES_PACKAGE_NAME);
|
||||||
|
if (initialTitleResPackageName != null) {
|
||||||
|
try {
|
||||||
|
Context authContext = createPackageContextAsUser(initialTitleResPackageName,
|
||||||
|
0 /* flags */, new UserHandle(UserHandle.myUserId()));
|
||||||
|
mInitialTitle = authContext.getResources().getText(mInitialTitleResId);
|
||||||
|
setTitle(mInitialTitle);
|
||||||
|
mInitialTitleResId = -1;
|
||||||
|
return;
|
||||||
|
} catch (NameNotFoundException e) {
|
||||||
|
Log.w(LOG_TAG, "Could not find package" + initialTitleResPackageName);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
setTitle(mInitialTitleResId);
|
setTitle(mInitialTitleResId);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
mInitialTitleResId = -1;
|
mInitialTitleResId = -1;
|
||||||
final String initialTitle = intent.getStringExtra(EXTRA_SHOW_FRAGMENT_TITLE);
|
final String initialTitle = intent.getStringExtra(EXTRA_SHOW_FRAGMENT_TITLE);
|
||||||
|
@@ -590,16 +590,52 @@ public final class Utils {
|
|||||||
* @param title String to display for the title of this set of preferences.
|
* @param title String to display for the title of this set of preferences.
|
||||||
*/
|
*/
|
||||||
public static void startWithFragment(Context context, String fragmentName, Bundle args,
|
public static void startWithFragment(Context context, String fragmentName, Bundle args,
|
||||||
Fragment resultTo, int resultRequestCode, int titleResId, CharSequence title) {
|
Fragment resultTo, int resultRequestCode, int titleResId,
|
||||||
|
CharSequence title) {
|
||||||
startWithFragment(context, fragmentName, args, resultTo, resultRequestCode,
|
startWithFragment(context, fragmentName, args, resultTo, resultRequestCode,
|
||||||
titleResId, title, false /* not a shortcut */);
|
null /* titleResPackageName */, titleResId, title, false /* not a shortcut */);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start a new instance of the activity, showing only the given fragment.
|
||||||
|
* When launched in this mode, the given preference fragment will be instantiated and fill the
|
||||||
|
* entire activity.
|
||||||
|
*
|
||||||
|
* @param context The context.
|
||||||
|
* @param fragmentName The name of the fragment to display.
|
||||||
|
* @param args Optional arguments to supply to the fragment.
|
||||||
|
* @param resultTo Option fragment that should receive the result of the activity launch.
|
||||||
|
* @param resultRequestCode If resultTo is non-null, this is the request code in which
|
||||||
|
* to report the result.
|
||||||
|
* @param titleResPackageName Optional package name for the resource id of the title.
|
||||||
|
* @param titleResId resource id for the String to display for the title of this set
|
||||||
|
* of preferences.
|
||||||
|
* @param title String to display for the title of this set of preferences.
|
||||||
|
*/
|
||||||
|
public static void startWithFragment(Context context, String fragmentName, Bundle args,
|
||||||
|
Fragment resultTo, int resultRequestCode, String titleResPackageName, int titleResId,
|
||||||
|
CharSequence title) {
|
||||||
|
startWithFragment(context, fragmentName, args, resultTo, resultRequestCode,
|
||||||
|
titleResPackageName, titleResId, title, false /* not a shortcut */);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void startWithFragment(Context context, String fragmentName, Bundle args,
|
public static void startWithFragment(Context context, String fragmentName, Bundle args,
|
||||||
Fragment resultTo, int resultRequestCode, int titleResId, CharSequence title,
|
Fragment resultTo, int resultRequestCode, int titleResId,
|
||||||
boolean isShortcut) {
|
CharSequence title, boolean isShortcut) {
|
||||||
Intent intent = onBuildStartFragmentIntent(context, fragmentName, args, titleResId,
|
Intent intent = onBuildStartFragmentIntent(context, fragmentName, args,
|
||||||
title, isShortcut);
|
null /* titleResPackageName */, titleResId, title, isShortcut);
|
||||||
|
if (resultTo == null) {
|
||||||
|
context.startActivity(intent);
|
||||||
|
} else {
|
||||||
|
resultTo.startActivityForResult(intent, resultRequestCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void startWithFragment(Context context, String fragmentName, Bundle args,
|
||||||
|
Fragment resultTo, int resultRequestCode, String titleResPackageName, int titleResId,
|
||||||
|
CharSequence title, boolean isShortcut) {
|
||||||
|
Intent intent = onBuildStartFragmentIntent(context, fragmentName, args, titleResPackageName,
|
||||||
|
titleResId, title, isShortcut);
|
||||||
if (resultTo == null) {
|
if (resultTo == null) {
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
} else {
|
} else {
|
||||||
@@ -608,9 +644,20 @@ public final class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void startWithFragmentAsUser(Context context, String fragmentName, Bundle args,
|
public static void startWithFragmentAsUser(Context context, String fragmentName, Bundle args,
|
||||||
int titleResId, CharSequence title, boolean isShortcut, UserHandle userHandle) {
|
int titleResId, CharSequence title, boolean isShortcut,
|
||||||
Intent intent = onBuildStartFragmentIntent(context, fragmentName, args, titleResId,
|
UserHandle userHandle) {
|
||||||
title, isShortcut);
|
Intent intent = onBuildStartFragmentIntent(context, fragmentName, args,
|
||||||
|
null /* titleResPackageName */, titleResId, title, isShortcut);
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||||
|
context.startActivityAsUser(intent, userHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void startWithFragmentAsUser(Context context, String fragmentName, Bundle args,
|
||||||
|
String titleResPackageName, int titleResId, CharSequence title, boolean isShortcut,
|
||||||
|
UserHandle userHandle) {
|
||||||
|
Intent intent = onBuildStartFragmentIntent(context, fragmentName, args, titleResPackageName,
|
||||||
|
titleResId, title, isShortcut);
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||||
context.startActivityAsUser(intent, userHandle);
|
context.startActivityAsUser(intent, userHandle);
|
||||||
@@ -625,6 +672,7 @@ public final class Utils {
|
|||||||
* @param context The Context.
|
* @param context The Context.
|
||||||
* @param fragmentName The name of the fragment to display.
|
* @param fragmentName The name of the fragment to display.
|
||||||
* @param args Optional arguments to supply to the fragment.
|
* @param args Optional arguments to supply to the fragment.
|
||||||
|
* @param titleResPackageName Optional package name for the resource id of the title.
|
||||||
* @param titleResId Optional title resource id to show for this item.
|
* @param titleResId Optional title resource id to show for this item.
|
||||||
* @param title Optional title to show for this item.
|
* @param title Optional title to show for this item.
|
||||||
* @param isShortcut tell if this is a Launcher Shortcut or not
|
* @param isShortcut tell if this is a Launcher Shortcut or not
|
||||||
@@ -632,11 +680,14 @@ public final class Utils {
|
|||||||
* fragment.
|
* fragment.
|
||||||
*/
|
*/
|
||||||
public static Intent onBuildStartFragmentIntent(Context context, String fragmentName,
|
public static Intent onBuildStartFragmentIntent(Context context, String fragmentName,
|
||||||
Bundle args, int titleResId, CharSequence title, boolean isShortcut) {
|
Bundle args, String titleResPackageName, int titleResId, CharSequence title,
|
||||||
|
boolean isShortcut) {
|
||||||
Intent intent = new Intent(Intent.ACTION_MAIN);
|
Intent intent = new Intent(Intent.ACTION_MAIN);
|
||||||
intent.setClass(context, SubSettings.class);
|
intent.setClass(context, SubSettings.class);
|
||||||
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, fragmentName);
|
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, fragmentName);
|
||||||
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
|
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
|
||||||
|
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RES_PACKAGE_NAME,
|
||||||
|
titleResPackageName);
|
||||||
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, titleResId);
|
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, titleResId);
|
||||||
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, title);
|
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, title);
|
||||||
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SHORTCUT, isShortcut);
|
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SHORTCUT, isShortcut);
|
||||||
|
@@ -369,6 +369,8 @@ public class AccountSettings extends SettingsPreferenceFragment
|
|||||||
if (label == null) {
|
if (label == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
final String titleResPackageName = helper.getPackageForType(accountType);
|
||||||
|
final int titleResId = helper.getLabelIdForType(accountType);
|
||||||
|
|
||||||
final Account[] accounts = AccountManager.get(getActivity())
|
final Account[] accounts = AccountManager.get(getActivity())
|
||||||
.getAccountsByTypeAsUser(accountType, userHandle);
|
.getAccountsByTypeAsUser(accountType, userHandle);
|
||||||
@@ -382,7 +384,8 @@ public class AccountSettings extends SettingsPreferenceFragment
|
|||||||
fragmentArguments.putParcelable(EXTRA_USER, userHandle);
|
fragmentArguments.putParcelable(EXTRA_USER, userHandle);
|
||||||
|
|
||||||
accountTypePreferences.add(new AccountPreference(getActivity(), label,
|
accountTypePreferences.add(new AccountPreference(getActivity(), label,
|
||||||
AccountSyncSettings.class.getName(), fragmentArguments,
|
titleResPackageName, titleResId, AccountSyncSettings.class.getName(),
|
||||||
|
fragmentArguments,
|
||||||
helper.getDrawableForType(getActivity(), accountType)));
|
helper.getDrawableForType(getActivity(), accountType)));
|
||||||
} else {
|
} else {
|
||||||
final Bundle fragmentArguments = new Bundle();
|
final Bundle fragmentArguments = new Bundle();
|
||||||
@@ -392,7 +395,8 @@ public class AccountSettings extends SettingsPreferenceFragment
|
|||||||
fragmentArguments.putParcelable(EXTRA_USER, userHandle);
|
fragmentArguments.putParcelable(EXTRA_USER, userHandle);
|
||||||
|
|
||||||
accountTypePreferences.add(new AccountPreference(getActivity(), label,
|
accountTypePreferences.add(new AccountPreference(getActivity(), label,
|
||||||
ManageAccountsSettings.class.getName(), fragmentArguments,
|
titleResPackageName, titleResId, ManageAccountsSettings.class.getName(),
|
||||||
|
fragmentArguments,
|
||||||
helper.getDrawableForType(getActivity(), accountType)));
|
helper.getDrawableForType(getActivity(), accountType)));
|
||||||
}
|
}
|
||||||
helper.preloadDrawableForType(getActivity(), accountType);
|
helper.preloadDrawableForType(getActivity(), accountType);
|
||||||
@@ -434,6 +438,17 @@ public class AccountSettings extends SettingsPreferenceFragment
|
|||||||
*/
|
*/
|
||||||
private final CharSequence mTitle;
|
private final CharSequence mTitle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packange name used to resolve the resources of the title shown to the user in the new
|
||||||
|
* fragment.
|
||||||
|
*/
|
||||||
|
private final String mTitleResPackageName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resource id of the title shown to the user in the new fragment.
|
||||||
|
*/
|
||||||
|
private final int mTitleResId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Full class name of the fragment to display when this tile is
|
* Full class name of the fragment to display when this tile is
|
||||||
* selected.
|
* selected.
|
||||||
@@ -447,10 +462,13 @@ public class AccountSettings extends SettingsPreferenceFragment
|
|||||||
*/
|
*/
|
||||||
private final Bundle mFragmentArguments;
|
private final Bundle mFragmentArguments;
|
||||||
|
|
||||||
public AccountPreference(Context context, CharSequence title, String fragment,
|
public AccountPreference(Context context, CharSequence title, String titleResPackageName,
|
||||||
Bundle fragmentArguments, Drawable icon) {
|
int titleResId, String fragment, Bundle fragmentArguments,
|
||||||
|
Drawable icon) {
|
||||||
super(context);
|
super(context);
|
||||||
mTitle = title;
|
mTitle = title;
|
||||||
|
mTitleResPackageName = titleResPackageName;
|
||||||
|
mTitleResId = titleResId;
|
||||||
mFragment = fragment;
|
mFragment = fragment;
|
||||||
mFragmentArguments = fragmentArguments;
|
mFragmentArguments = fragmentArguments;
|
||||||
setWidgetLayoutResource(R.layout.account_type_preference);
|
setWidgetLayoutResource(R.layout.account_type_preference);
|
||||||
@@ -464,8 +482,9 @@ public class AccountSettings extends SettingsPreferenceFragment
|
|||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
if (mFragment != null) {
|
if (mFragment != null) {
|
||||||
Utils.startWithFragment(
|
Utils.startWithFragment(getContext(), mFragment, mFragmentArguments,
|
||||||
getContext(), mFragment, mFragmentArguments, null, 0, 0, mTitle);
|
null /* resultTo */, 0 /* resultRequestCode */, mTitleResPackageName,
|
||||||
|
mTitleResId, null /* title */);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@@ -147,6 +147,33 @@ final public class AuthenticatorHelper extends BroadcastReceiver {
|
|||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the package associated with a particular account type. If none found, return null.
|
||||||
|
* @param accountType the type of account
|
||||||
|
* @return the package name or null if one cannot be found.
|
||||||
|
*/
|
||||||
|
public String getPackageForType(final String accountType) {
|
||||||
|
if (mTypeToAuthDescription.containsKey(accountType)) {
|
||||||
|
AuthenticatorDescription desc = mTypeToAuthDescription.get(accountType);
|
||||||
|
return desc.packageName;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the resource id of the label associated with a particular account type. If none found,
|
||||||
|
* return -1.
|
||||||
|
* @param accountType the type of account
|
||||||
|
* @return a resource id for the label or -1 if none found;
|
||||||
|
*/
|
||||||
|
public int getLabelIdForType(final String accountType) {
|
||||||
|
if (mTypeToAuthDescription.containsKey(accountType)) {
|
||||||
|
AuthenticatorDescription desc = mTypeToAuthDescription.get(accountType);
|
||||||
|
return desc.labelId;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates provider icons. Subclasses should call this in onCreate()
|
* Updates provider icons. Subclasses should call this in onCreate()
|
||||||
* and update any UI that depends on AuthenticatorDescriptions in onAuthDescriptionsUpdated().
|
* and update any UI that depends on AuthenticatorDescriptions in onAuthDescriptionsUpdated().
|
||||||
|
Reference in New Issue
Block a user