Index: chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestBottomBar.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestBottomBar.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestBottomBar.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..63c6fda0d99da1985546664dcb598bdc2b6cdb92 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentRequestBottomBar.java |
@@ -0,0 +1,76 @@ |
+// 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.util.AttributeSet; |
+import android.view.View; |
+import android.view.View.MeasureSpec; |
+import android.widget.LinearLayout; |
+ |
+import org.chromium.chrome.R; |
+ |
+/** This class represents a bar to display at the bottom of the payment request UI. */ |
+public class PaymentRequestBottomBar extends LinearLayout { |
+ public PaymentRequestBottomBar(Context context, AttributeSet attrs) { |
+ super(context, attrs); |
+ } |
+ |
+ @Override |
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { |
+ // Views layout_width must be set to match_parent. |
+ assert MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY; |
+ |
+ View logoWithName = findViewById(R.id.logo_name); |
gone
2017/02/17 23:17:10
Cache the views in onFinishInflate() so you're not
gogerald1
2017/02/20 15:18:36
Done.
|
+ measureChild(logoWithName, widthMeasureSpec, heightMeasureSpec); |
+ int logoWithNameWidth = logoWithName.getMeasuredWidth(); |
+ |
+ View logo = findViewById(R.id.logo); |
+ measureChild(logo, widthMeasureSpec, heightMeasureSpec); |
+ int logoWidth = logo.getMeasuredWidth(); |
+ |
+ View primaryButton = findViewById(R.id.button_primary); |
+ measureChild(primaryButton, widthMeasureSpec, heightMeasureSpec); |
+ int primaryButtonWidth = primaryButton.getMeasuredWidth(); |
+ |
+ View secondaryButton = findViewById(R.id.button_secondary); |
+ measureChild(secondaryButton, widthMeasureSpec, heightMeasureSpec); |
+ int secondaryButtonWidth = secondaryButton.getMeasuredWidth(); |
+ |
+ int blankSpaceWidth = 0; |
+ int totolWidth = MeasureSpec.getSize(widthMeasureSpec); |
gone
2017/02/17 23:17:11
totalWidth
gogerald1
2017/02/20 15:18:36
Done.
|
+ int widthWithoutLogo = |
+ primaryButtonWidth + secondaryButtonWidth + getPaddingLeft() + getPaddingRight(); |
gone
2017/02/17 23:17:11
This calculation doesn't account for the margins d
gogerald1
2017/02/20 15:18:36
Done.
|
+ if (widthWithoutLogo + logoWithNameWidth <= totolWidth) { |
+ logo.setVisibility(View.GONE); |
+ logoWithName.setVisibility(View.VISIBLE); |
+ blankSpaceWidth = totolWidth - widthWithoutLogo - logoWithNameWidth; |
+ } else if (widthWithoutLogo + logoWidth <= totolWidth) { |
+ logo.setVisibility(View.VISIBLE); |
+ logoWithName.setVisibility(View.GONE); |
+ blankSpaceWidth = totolWidth - widthWithoutLogo - logoWidth; |
+ } else { |
+ logoWithName.setVisibility(View.GONE); |
+ logo.setVisibility(View.GONE); |
+ blankSpaceWidth = totolWidth - widthWithoutLogo; |
+ assert false |
+ : "Screen width is expected to fit the two buttons plus the logo at least."; |
gone
2017/02/17 23:17:11
1) Asserting here isn't helpful; the fallback case
gogerald1
2017/02/20 15:18:36
Done. Thought negative would be considered as zero
|
+ } |
+ |
+ // Sets the space width. |
+ View space = findViewById(R.id.space); |
+ space.getLayoutParams().width = blankSpaceWidth; |
+ measureChild(space, MeasureSpec.makeMeasureSpec(blankSpaceWidth, MeasureSpec.EXACTLY), |
+ heightMeasureSpec); |
+ |
+ // Note that logoWithName and logo must have the same height. |
+ int measuredHeight = getPaddingTop() + getPaddingBottom() |
+ + Math.max(logoWithName.getMeasuredHeight(), |
gone
2017/02/17 23:17:11
Pull out the max height calculation. The indentat
gogerald1
2017/02/20 15:18:36
Done.
|
+ Math.max(primaryButton.getMeasuredHeight(), |
+ secondaryButton.getMeasuredHeight())); |
+ int measuredHeightSpec = MeasureSpec.makeMeasureSpec(measuredHeight, MeasureSpec.EXACTLY); |
+ setMeasuredDimension(widthMeasureSpec, measuredHeightSpec); |
+ } |
+} |