下面列出了android.view.View.AccessibilityDelegate#org.chromium.ui.text.SpanApplier 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private SpannableString getDescriptionText() {
return SpanApplier.applySpans(
getString(R.string.physical_web_optin_description),
new SpanInfo("<learnmore>", "</learnmore>", new ClickableSpan() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(PHYSICAL_WEB_LEARN_MORE_URL));
// Add the SESSION extra to indicate we want a Chrome custom tab. This
// allows the help page to open in the same task as the opt-in activity so
// they can share a back stack.
String session = null;
intent.putExtra(EXTRA_CUSTOM_TABS_SESSION, session);
PhysicalWebOptInActivity.this.startActivity(intent);
}
@Override
public void updateDrawState(TextPaint ds) {
// Color links but do not underline them.
ds.setColor(ds.linkColor);
}
}));
}
private void showConfirmSigninPage() {
mSignedIn = true;
updateSignedInAccountInfo();
mSigninChooseView.setVisibility(View.GONE);
mSigninConfirmationView.setVisibility(View.VISIBLE);
setButtonsEnabled(true);
setUpConfirmButton();
setPositiveButtonDisabled();
setUpUndoButton();
NoUnderlineClickableSpan settingsSpan = new NoUnderlineClickableSpan() {
@Override
public void onClick(View widget) {
mListener.onAccountSelected(getSelectedAccountName(), true);
}
};
mSigninSettingsControl.setText(
SpanApplier.applySpans(getSettingsControlDescription(mIsChildAccount),
new SpanInfo(SETTINGS_LINK_OPEN, SETTINGS_LINK_CLOSE, settingsSpan)));
}
@Override
public void setSummary(CharSequence summary) {
// If there is no link in the summary, invoke the default behavior.
String summaryString = summary.toString();
if (!summaryString.contains("<link>") || !summaryString.contains("</link>")) {
super.setSummary(summary);
return;
}
// Linkify <link></link> span.
final SpannableString summaryWithLink = SpanApplier.applySpans(summaryString,
new SpanApplier.SpanInfo("<link>", "</link>", new NoUnderlineClickableSpan() {
@Override
public void onClick(View widget) {
if (mLinkClickDelegate != null) mLinkClickDelegate.run();
}
}));
super.setSummary(summaryWithLink);
}
private SpannableString getResetText() {
final Context context = getActivity();
return SpanApplier.applySpans(
context.getString(R.string.sync_passphrase_encryption_reset_instructions),
new SpanInfo("<resetlink>", "</resetlink>", new ClickableSpan() {
@Override
public void onClick(View view) {
Uri syncDashboardUrl = Uri.parse(
context.getText(R.string.sync_dashboard_url).toString());
Intent intent = new Intent(Intent.ACTION_VIEW, syncDashboardUrl);
intent.setPackage(BuildInfo.getPackageName(context));
IntentUtils.safePutBinderExtra(
intent, CustomTabsIntent.EXTRA_SESSION, null);
context.startActivity(intent);
}
}));
}
private SpannableString getResetText() {
final Context context = getActivity();
return SpanApplier.applySpans(
context.getString(R.string.sync_passphrase_reset_instructions),
new SpanInfo("<resetlink>", "</resetlink>", new ClickableSpan() {
@Override
public void onClick(View view) {
recordPassphraseDialogDismissal(PASSPHRASE_DIALOG_RESET_LINK);
Uri syncDashboardUrl = Uri.parse(
context.getText(R.string.sync_dashboard_url).toString());
Intent intent = new Intent(Intent.ACTION_VIEW, syncDashboardUrl);
intent.setPackage(BuildInfo.getPackageName(context));
IntentUtils.safePutBinderExtra(
intent, CustomTabsIntent.EXTRA_SESSION, null);
context.startActivity(intent);
}
}));
}
private SpannableString getDescriptionText() {
return SpanApplier.applySpans(
getString(R.string.physical_web_optin_description),
new SpanInfo("<learnmore>", "</learnmore>", new ClickableSpan() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(PHYSICAL_WEB_LEARN_MORE_URL));
// Add the SESSION extra to indicate we want a Chrome custom tab. This
// allows the help page to open in the same task as the opt-in activity so
// they can share a back stack.
String session = null;
intent.putExtra(EXTRA_CUSTOM_TABS_SESSION, session);
PhysicalWebOptInActivity.this.startActivity(intent);
}
@Override
public void updateDrawState(TextPaint ds) {
// Color links but do not underline them.
ds.setColor(ds.linkColor);
}
}));
}
private void showConfirmSigninPage() {
mSignedIn = true;
updateSignedInAccountInfo();
mSigninChooseView.setVisibility(View.GONE);
mSigninConfirmationView.setVisibility(View.VISIBLE);
setButtonsEnabled(true);
setUpConfirmButton();
setUpUndoButton();
NoUnderlineClickableSpan settingsSpan = new NoUnderlineClickableSpan() {
@Override
public void onClick(View widget) {
mListener.onAccountSelected(getSelectedAccountName(), true);
RecordUserAction.record("Signin_Signin_WithAdvancedSyncSettings");
}
};
mSigninSettingsControl.setText(
SpanApplier.applySpans(getSettingsControlDescription(mIsChildAccount),
new SpanInfo(SETTINGS_LINK_OPEN, SETTINGS_LINK_CLOSE, settingsSpan)));
}
public ViewHolder(ViewGroup root, final NewTabPageManager manager) {
super(LayoutInflater.from(root.getContext())
.inflate(R.layout.new_tab_page_footer, root, false));
NoUnderlineClickableSpan link = new NoUnderlineClickableSpan() {
@Override
public void onClick(View view) {
// TODO(mvanouwerkerk): Ensure this can be activated when using TalkBack.
manager.onLearnMoreClicked();
}
};
TextView textView = (TextView) itemView.findViewById(R.id.text);
textView.setText(SpanApplier.applySpans(
root.getResources().getString(R.string.ntp_learn_more_about_suggested_content),
new SpanApplier.SpanInfo("<link>", "</link>", link)));
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
@Override
public void setSummary(CharSequence summary) {
// If there is no link in the summary, invoke the default behavior.
String summaryString = summary.toString();
if (!summaryString.contains("<link>") || !summaryString.contains("</link>")) {
super.setSummary(summary);
return;
}
// Linkify <link></link> span.
final SpannableString summaryWithLink = SpanApplier.applySpans(summaryString,
new SpanApplier.SpanInfo("<link>", "</link>", new NoUnderlineClickableSpan() {
@Override
public void onClick(View widget) {
if (mLinkClickDelegate != null) mLinkClickDelegate.run();
}
}));
super.setSummary(summaryWithLink);
}
private SpannableString getResetText() {
final Context context = getActivity();
return SpanApplier.applySpans(
context.getString(R.string.sync_passphrase_encryption_reset_instructions),
new SpanInfo("<resetlink>", "</resetlink>", new ClickableSpan() {
@Override
public void onClick(View view) {
Uri syncDashboardUrl = Uri.parse(
context.getText(R.string.sync_dashboard_url).toString());
Intent intent = new Intent(Intent.ACTION_VIEW, syncDashboardUrl);
intent.setPackage(BuildInfo.getPackageName(context));
IntentUtils.safePutBinderExtra(
intent, CustomTabsIntent.EXTRA_SESSION, null);
context.startActivity(intent);
}
}));
}
private SpannableString getResetText() {
final Context context = getActivity();
return SpanApplier.applySpans(
context.getString(R.string.sync_passphrase_reset_instructions),
new SpanInfo("<resetlink>", "</resetlink>", new ClickableSpan() {
@Override
public void onClick(View view) {
recordPassphraseDialogDismissal(PASSPHRASE_DIALOG_RESET_LINK);
Uri syncDashboardUrl = Uri.parse(
context.getText(R.string.sync_dashboard_url).toString());
Intent intent = new Intent(Intent.ACTION_VIEW, syncDashboardUrl);
intent.setPackage(BuildInfo.getPackageName(context));
IntentUtils.safePutBinderExtra(
intent, CustomTabsIntent.EXTRA_SESSION, null);
context.startActivity(intent);
}
}));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Do not allow this dialog to be reconstructed because it requires native side loaded.
if (savedInstanceState != null) {
dismiss();
return;
}
StyleSpan boldSpan = new StyleSpan(android.graphics.Typeface.BOLD);
TextView textView = (TextView) findViewById(R.id.subheader);
SpannableString description = SpanApplier.applySpans(
getContext().getString(R.string.sogou_explanation),
new SpanInfo("<link>", "</link>", mSpan), new SpanInfo("<b>", "</b>", boldSpan));
textView.setText(description);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
public ViewHolder(ViewGroup root, final SuggestionsNavigationDelegate navigationDelegate) {
super(LayoutInflater.from(root.getContext())
.inflate(R.layout.new_tab_page_footer, root, false));
NoUnderlineClickableSpan link = new NoUnderlineClickableSpan() {
@Override
public void onClick(View view) {
// TODO(mvanouwerkerk): Ensure this can be activated when using TalkBack.
navigationDelegate.navigateToHelpPage();
}
};
TextView textView = (TextView) itemView.findViewById(R.id.text);
textView.setText(SpanApplier.applySpans(
root.getResources().getString(R.string.ntp_learn_more_about_suggested_content),
new SpanApplier.SpanInfo("<link>", "</link>", link)));
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
/**
* Construct and return help message to be displayed on R.id.sad_tab_message.
* @param context Context of the resulting Sad Tab view. This is needed to load the strings.
* @param suggestionAction Action to be executed when user clicks "try these suggestions"
* or "learn more".
* @return Help message to be displayed on R.id.sad_tab_message.
*/
private static CharSequence getHelpMessage(
Context context, final Runnable suggestionAction, final boolean showSendFeedback) {
NoUnderlineClickableSpan linkSpan = new NoUnderlineClickableSpan() {
@Override
public void onClick(View view) {
SadTabViewFactory.recordEvent(showSendFeedback, SadTabEvent.HELP_LINK_CLICKED);
suggestionAction.run();
}
};
if (showSendFeedback) {
SpannableString learnMoreLink =
new SpannableString(context.getString(R.string.sad_tab_reload_learn_more));
learnMoreLink.setSpan(linkSpan, 0, learnMoreLink.length(), 0);
return learnMoreLink;
} else {
String helpMessage = context.getString(R.string.sad_tab_message) + "\n\n"
+ context.getString(R.string.sad_tab_suggestions);
return SpanApplier.applySpans(helpMessage, new SpanInfo("<link>", "</link>", linkSpan));
}
}
@Override
public void setSummary(CharSequence summary) {
// If there is no link in the summary, invoke the default behavior.
String summaryString = summary.toString();
if (!summaryString.contains("<link>") || !summaryString.contains("</link>")) {
super.setSummary(summary);
return;
}
// Linkify <link></link> span.
final SpannableString summaryWithLink = SpanApplier.applySpans(summaryString,
new SpanApplier.SpanInfo("<link>", "</link>", new NoUnderlineClickableSpan() {
@Override
public void onClick(View widget) {
if (mLinkClickDelegate != null) mLinkClickDelegate.run();
}
}));
super.setSummary(summaryWithLink);
}
@Override
public void setSummary(CharSequence summary) {
// If there is no link in the summary, invoke the default behavior.
String summaryString = summary.toString();
if (!summaryString.contains("<link>") || !summaryString.contains("</link>")) {
super.setSummary(summary);
return;
}
// Linkify <link></link> span.
final SpannableString summaryWithLink = SpanApplier.applySpans(summaryString,
new SpanApplier.SpanInfo("<link>", "</link>", new NoUnderlineClickableSpan() {
@Override
public void onClick(View widget) {
if (mLinkClickDelegate != null) mLinkClickDelegate.run();
}
}));
mHasClickableSpans = true;
super.setSummary(summaryWithLink);
}
private SpannableString getResetText() {
final Context context = getActivity();
return SpanApplier.applySpans(
context.getString(R.string.sync_passphrase_encryption_reset_instructions),
new SpanInfo("<resetlink>", "</resetlink>", new ClickableSpan() {
@Override
public void onClick(View view) {
Uri syncDashboardUrl = Uri.parse(
context.getText(R.string.sync_dashboard_url).toString());
Intent intent = new Intent(Intent.ACTION_VIEW, syncDashboardUrl);
intent.setPackage(BuildInfo.getPackageName());
IntentUtils.safePutBinderExtra(
intent, CustomTabsIntent.EXTRA_SESSION, null);
context.startActivity(intent);
}
}));
}
private SpannableString getResetText() {
final Context context = getActivity();
return SpanApplier.applySpans(
context.getString(R.string.sync_passphrase_reset_instructions),
new SpanInfo("<resetlink>", "</resetlink>", new ClickableSpan() {
@Override
public void onClick(View view) {
recordPassphraseDialogDismissal(PASSPHRASE_DIALOG_RESET_LINK);
Uri syncDashboardUrl = Uri.parse(
context.getText(R.string.sync_dashboard_url).toString());
Intent intent = new Intent(Intent.ACTION_VIEW, syncDashboardUrl);
intent.setPackage(BuildInfo.getPackageName());
IntentUtils.safePutBinderExtra(
intent, CustomTabsIntent.EXTRA_SESSION, null);
context.startActivity(intent);
}
}));
}
@VisibleForTesting
@CalledByNative
void notifyAdapterTurnedOff() {
SpannableString adapterOffMessage = SpanApplier.applySpans(
mActivity.getString(R.string.bluetooth_adapter_off),
new SpanInfo("<link>", "</link>",
new BluetoothClickableSpan(LinkType.ADAPTER_OFF, mActivity)));
SpannableString adapterOffStatus = SpanApplier.applySpans(
mActivity.getString(R.string.bluetooth_adapter_off_help),
new SpanInfo("<link>", "</link>",
new BluetoothClickableSpan(LinkType.ADAPTER_OFF_HELP, mActivity)));
mItemChooserDialog.setErrorState(adapterOffMessage, adapterOffStatus);
}
/**
* Shows the geolocation snackbar if it hasn't already been shown and the geolocation snackbar
* is currently relevant: i.e. the default search engine is Google, location is enabled
* for Chrome, the tab is not incognito, etc.
*
* @param snackbarManager The SnackbarManager used to show the snackbar.
* @param view Any view that's attached to the view hierarchy.
* @param isIncognito Whether the currently visible tab is incognito.
* @param delayMs The delay in ms before the snackbar should be shown. This is intended to
* give the keyboard time to animate in.
*/
public static void maybeShowSnackbar(final SnackbarManager snackbarManager, View view,
boolean isIncognito, int delayMs) {
final Context context = view.getContext();
if (getGeolocationSnackbarShown(context)) return;
// If in incognito mode, don't show the snackbar now, but maybe show it later.
if (isIncognito) return;
if (neverShowSnackbar(context)) {
setGeolocationSnackbarShown(context);
return;
}
Uri searchUri = Uri.parse(TemplateUrlService.getInstance().getUrlForSearchQuery("foo"));
TypefaceSpan robotoMediumSpan = new TypefaceSpan("sans-serif-medium");
String messageWithoutSpans = context.getResources().getString(
R.string.omnibox_geolocation_disclosure, "<b>" + searchUri.getHost() + "</b>");
SpannableString message = SpanApplier.applySpans(messageWithoutSpans,
new SpanInfo("<b>", "</b>", robotoMediumSpan));
String settings = context.getResources().getString(R.string.preferences);
int durationMs = DeviceClassManager.isAccessibilityModeEnabled(view.getContext())
? ACCESSIBILITY_SNACKBAR_DURATION_MS : SNACKBAR_DURATION_MS;
final GeolocationSnackbarController controller = new GeolocationSnackbarController();
final Snackbar snackbar = Snackbar
.make(message, controller, Snackbar.TYPE_ACTION, Snackbar.UMA_OMNIBOX_GEOLOCATION)
.setAction(settings, view)
.setSingleLine(false)
.setDuration(durationMs);
view.postDelayed(new Runnable() {
@Override
public void run() {
snackbarManager.dismissSnackbars(controller);
snackbarManager.showSnackbar(snackbar);
setGeolocationSnackbarShown(context);
}
}, delayMs);
}
/**
* Construct and return help message to be displayed on R.id.sad_tab_message.
* @param context Context of the resulting Sad Tab view. This is needed to load the strings.
* @param suggestionAction Action to be executed when user clicks "try these suggestions".
* @return Help message to be displayed on R.id.sad_tab_message.
*/
private static CharSequence getHelpMessage(
Context context, final OnClickListener suggestionAction) {
String helpMessage = context.getString(R.string.sad_tab_message)
+ "\n\n" + context.getString(R.string.sad_tab_suggestions);
NoUnderlineClickableSpan span = new NoUnderlineClickableSpan() {
@Override
public void onClick(View view) {
suggestionAction.onClick(view);
}
};
return SpanApplier.applySpans(helpMessage, new SpanInfo("<link>", "</link>", span));
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.other_forms_of_history_dialog, null);
// Linkify the <link></link> span in the dialog text.
TextView textView = (TextView) view.findViewById(R.id.text);
final SpannableString textWithLink = SpanApplier.applySpans(
textView.getText().toString(),
new SpanApplier.SpanInfo("<link>", "</link>", new NoUnderlineClickableSpan() {
@Override
public void onClick(View widget) {
new TabDelegate(false /* incognito */).launchUrl(
WEB_HISTORY_URL, TabLaunchType.FROM_CHROME_UI);
}
}));
textView.setText(textWithLink);
textView.setMovementMethod(LinkMovementMethod.getInstance());
// Construct the dialog.
AlertDialog dialog = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme)
.setView(view)
.setTitle(R.string.clear_browsing_data_history_dialog_title)
.setPositiveButton(
R.string.ok_got_it, this)
.create();
dialog.setCanceledOnTouchOutside(false);
return dialog;
}
private SpannableString getInstructionsText() {
final Activity activity = getActivity();
return SpanApplier.applySpans(
activity.getString(R.string.sync_custom_passphrase),
new SpanInfo("<learnmore>", "</learnmore>", new ClickableSpan() {
@Override
public void onClick(View view) {
HelpAndFeedback.getInstance(activity).show(activity,
activity.getString(R.string.help_context_change_sync_passphrase),
Profile.getLastUsedProfile(), null);
}
}));
}
@VisibleForTesting
@CalledByNative
void notifyAdapterTurnedOff() {
SpannableString adapterOffMessage = SpanApplier.applySpans(
mActivity.getString(R.string.bluetooth_adapter_off),
new SpanInfo("<link>", "</link>",
new BluetoothClickableSpan(LinkType.ADAPTER_OFF, mActivity)));
SpannableString adapterOffStatus = SpanApplier.applySpans(
mActivity.getString(R.string.bluetooth_adapter_off_help),
new SpanInfo("<link>", "</link>",
new BluetoothClickableSpan(LinkType.ADAPTER_OFF_HELP, mActivity)));
mItemChooserDialog.setErrorState(adapterOffMessage, adapterOffStatus);
}
/**
* Shows the geolocation snackbar if it hasn't already been shown and the geolocation snackbar
* is currently relevant: i.e. the default search engine is Google, location is enabled
* for Chrome, the tab is not incognito, etc.
*
* @param snackbarManager The SnackbarManager used to show the snackbar.
* @param view Any view that's attached to the view hierarchy.
* @param isIncognito Whether the currently visible tab is incognito.
* @param delayMs The delay in ms before the snackbar should be shown. This is intended to
* give the keyboard time to animate in.
*/
public static void maybeShowSnackbar(final SnackbarManager snackbarManager, View view,
boolean isIncognito, int delayMs) {
final Context context = view.getContext();
if (ChromeFeatureList.isEnabled(ChromeFeatureList.CONSISTENT_OMNIBOX_GEOLOCATION)) return;
if (getGeolocationSnackbarShown(context)) return;
// If in incognito mode, don't show the snackbar now, but maybe show it later.
if (isIncognito) return;
if (neverShowSnackbar(context)) {
setGeolocationSnackbarShown(context);
return;
}
Uri searchUri = Uri.parse(TemplateUrlService.getInstance().getUrlForSearchQuery("foo"));
TypefaceSpan robotoMediumSpan = new TypefaceSpan("sans-serif-medium");
String messageWithoutSpans = context.getResources().getString(
R.string.omnibox_geolocation_disclosure, "<b>" + searchUri.getHost() + "</b>");
SpannableString message = SpanApplier.applySpans(messageWithoutSpans,
new SpanInfo("<b>", "</b>", robotoMediumSpan));
String settings = context.getResources().getString(R.string.preferences);
int durationMs = DeviceClassManager.isAccessibilityModeEnabled(view.getContext())
? ACCESSIBILITY_SNACKBAR_DURATION_MS : SNACKBAR_DURATION_MS;
final GeolocationSnackbarController controller = new GeolocationSnackbarController();
final Snackbar snackbar = Snackbar
.make(message, controller, Snackbar.TYPE_ACTION, Snackbar.UMA_OMNIBOX_GEOLOCATION)
.setAction(settings, view)
.setSingleLine(false)
.setDuration(durationMs);
view.postDelayed(new Runnable() {
@Override
public void run() {
snackbarManager.dismissSnackbars(controller);
snackbarManager.showSnackbar(snackbar);
setGeolocationSnackbarShown(context);
}
}, delayMs);
}
/**
* Construct and return help message to be displayed on R.id.sad_tab_message.
* @param context Context of the resulting Sad Tab view. This is needed to load the strings.
* @param suggestionAction Action to be executed when user clicks "try these suggestions".
* @return Help message to be displayed on R.id.sad_tab_message.
*/
private static CharSequence getHelpMessage(
Context context, final OnClickListener suggestionAction) {
String helpMessage = context.getString(R.string.sad_tab_message)
+ "\n\n" + context.getString(R.string.sad_tab_suggestions);
NoUnderlineClickableSpan span = new NoUnderlineClickableSpan() {
@Override
public void onClick(View view) {
suggestionAction.onClick(view);
}
};
return SpanApplier.applySpans(helpMessage, new SpanInfo("<link>", "</link>", span));
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.other_forms_of_history_dialog, null);
// Linkify the <link></link> span in the dialog text.
TextView textView = (TextView) view.findViewById(R.id.text);
final SpannableString textWithLink = SpanApplier.applySpans(
textView.getText().toString(),
new SpanApplier.SpanInfo("<link>", "</link>", new NoUnderlineClickableSpan() {
@Override
public void onClick(View widget) {
new TabDelegate(false /* incognito */).launchUrl(
WEB_HISTORY_URL, TabLaunchType.FROM_CHROME_UI);
}
}));
textView.setText(textWithLink);
textView.setMovementMethod(LinkMovementMethod.getInstance());
// Construct the dialog.
AlertDialog dialog = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme)
.setView(view)
.setTitle(R.string.clear_browsing_data_history_dialog_title)
.setPositiveButton(
R.string.ok_got_it, this)
.create();
dialog.setCanceledOnTouchOutside(false);
return dialog;
}
private SpannableString getInstructionsText() {
final Activity activity = getActivity();
return SpanApplier.applySpans(
activity.getString(R.string.sync_custom_passphrase),
new SpanInfo("<learnmore>", "</learnmore>", new ClickableSpan() {
@Override
public void onClick(View view) {
HelpAndFeedback.getInstance(activity).show(activity,
activity.getString(R.string.help_context_change_sync_passphrase),
Profile.getLastUsedProfile(), null);
}
}));
}
private void addCardAndAddressOptionsSettingsView(LinearLayout parent) {
String message;
if (!mShowDataSource) {
message = mContext.getString(R.string.payments_card_and_address_settings);
} else if (ChromeSigninController.get().isSignedIn()) {
message = mContext.getString(R.string.payments_card_and_address_settings_signed_in,
ChromeSigninController.get().getSignedInAccountName());
} else {
message = mContext.getString(R.string.payments_card_and_address_settings_signed_out);
}
NoUnderlineClickableSpan settingsSpan = new NoUnderlineClickableSpan() {
@Override
public void onClick(View widget) {
mClient.onCardAndAddressSettingsClicked();
}
};
SpannableString spannableMessage = SpanApplier.applySpans(
message, new SpanInfo("BEGIN_LINK", "END_LINK", settingsSpan));
TextView view = new TextViewWithClickableSpans(mContext);
view.setText(spannableMessage);
view.setMovementMethod(LinkMovementMethod.getInstance());
ApiCompatibilityUtils.setTextAppearance(view, R.style.PaymentsUiSectionDescriptiveText);
// Add paddings instead of margin to let getMeasuredHeight return correct value for section
// resize animation.
int paddingSize = mContext.getResources().getDimensionPixelSize(
R.dimen.payments_section_large_spacing);
ApiCompatibilityUtils.setPaddingRelative(
view, paddingSize, paddingSize, paddingSize, paddingSize);
parent.addView(view);
}
@VisibleForTesting
@CalledByNative
void notifyAdapterTurnedOff() {
SpannableString adapterOffMessage = SpanApplier.applySpans(
mActivity.getString(R.string.bluetooth_adapter_off),
new SpanInfo("<link>", "</link>",
new BluetoothClickableSpan(LinkType.ADAPTER_OFF, mActivity)));
mItemChooserDialog.setErrorState(adapterOffMessage, mAdapterOffStatus);
}