Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3419)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/payments/ui/SectionUiUtils.java

Issue 2775403002: [Payments] Preview available payment options when no option is selected (Closed)
Patch Set: update string descriptions Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/payments/ui/SectionUiUtils.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/SectionUiUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/SectionUiUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..2980cc7095ab37fa98a42c5111e8a0b64da5d376
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/SectionUiUtils.java
@@ -0,0 +1,104 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.payments.ui;
+
+import android.content.Context;
+import android.text.Layout;
+import android.text.TextPaint;
+import android.view.View;
+import android.widget.TextView;
+
+import org.chromium.chrome.R;
+
+import javax.annotation.Nullable;
+
+/**
+ * Utility functions for PaymentRequestSection.
+ * This class is not supposed to be instantiated.
+ */
+public class SectionUiUtils {
+ /** Avoid instantiation by accident. */
+ private SectionUiUtils() {}
+
+ /**
+ * Show the section summary in the view in a single line. This is called when there is no
+ * selected item in the section.
+ *
+ * @param context The context.
+ * @param section The section to summarize.
+ * @param view The view to display the summary.
+ */
+ public static void showSectionSummaryInTextViewInSingeLine(
+ final Context context, final SectionInformation section, final TextView view) {
+ int optionCount = section.getSize();
+ if (optionCount == 0) {
+ view.setText(null);
+ return;
+ }
+
+ // Listen for layout event to check whether the string can be fit in a single line and
+ // manually elide the string in the middle if necessary.
+ if (view.getLayout() == null && optionCount > 1) {
+ view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+ @Override
+ public void onLayoutChange(View v, int left, int top, int right, int bottom,
+ int oldLeft, int oldTop, int oldRight, int oldBottom) {
+ if (section.getSelectedItem() != null) {
+ view.removeOnLayoutChangeListener(this);
+ return;
+ }
+
+ Layout layout = view.getLayout();
+ if (layout.getEllipsisCount(0) > 0) {
+ String summary = getSectionSummaryForPreviewInASingleLine(
+ context, section, layout, view.getPaint());
+ view.setText(summary);
+ }
+ }
+ });
+ }
+
+ String summary = SectionUiUtils.getSectionSummaryForPreviewInASingleLine(
+ context, section, view.getLayout(), view.getPaint());
+ view.setText(summary);
+ }
+
+ private static String getSectionSummaryForPreviewInASingleLine(Context context,
+ SectionInformation section, @Nullable Layout layout, @Nullable TextPaint paint) {
+ int optionCount = section.getSize();
+ assert optionCount != 0;
+
+ // If there is only one option in the section, return the summary of that option in a single
+ // line, let the TextView automatically elide it at the end.
+ // If there are more than one options in the section, then the returned string pattern is
gone 2017/04/10 23:19:03 Move lines 75-77 to line 85. Closer to what it ac
gogerald1 2017/04/11 00:20:28 Done.
+ // "<summary of the first option>... and N more". N+1 is the total number of options in the
+ // section. If layout or paint is null, return the summary string without shrink. Otherwise,
gone 2017/04/10 23:19:03 nit: without shrinking. or return the full summary
gogerald1 2017/04/11 00:20:28 Done.
+ // check and shrink "<summary of the first option>" so as to make the entire summary string
+ // fits in a single line.
+ PaymentOption option = section.getItem(0);
+ String labelSeparator = context.getString(R.string.autofill_address_summary_separator);
+ String optionSummary = option.getPreviewString(labelSeparator, -1);
+ int moreOptionCount = optionCount - 1;
+ if (moreOptionCount == 0) return optionSummary;
+
+ // Append string to indicate how many more options in the given section.
+ int resId = section.getPreviewStringResourceId();
+ assert resId > 0;
+ String summary = context.getResources().getQuantityString(
+ resId, moreOptionCount, optionSummary, moreOptionCount);
+ if (paint == null || layout == null) {
+ return summary;
+ }
+
+ int ellipsizedWidth = layout.getEllipsizedWidth();
+ while (Layout.getDesiredWidth(summary, paint) > ellipsizedWidth) {
gone 2017/04/10 23:19:03 Explain why this while loop terminates. There's n
gogerald1 2017/04/11 00:20:28 Done.
+ optionSummary = option.getPreviewString(labelSeparator, optionSummary.length());
+ summary = context.getResources().getQuantityString(
+ resId, moreOptionCount, optionSummary, moreOptionCount);
+ }
+
+ return summary;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698