jenkins-bot has submitted this change and it was merged.
Change subject: Fix vertical truncation of title and subtitle
......................................................................
Fix vertical truncation of title and subtitle
* Move subtitle from distinct TextView to title TextView with spans.
* Add AppTextView, a TextView subclass that measures it self properly
even when the line spacing is changed. Since other TextView amendments
may need to be made, it has a generic name.
* Inline LeadImagesHandler.findViewsById().
Bug: T111208
Change-Id: Ib253c84d706e492eb71ea71e589a2063fcbdaa65
---
M app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
A app/src/main/java/org/wikipedia/richtext/LeadingSpan.java
A app/src/main/java/org/wikipedia/richtext/ParagraphSpan.java
A app/src/main/java/org/wikipedia/richtext/RelativeLineHeightSpan.java
A app/src/main/java/org/wikipedia/richtext/RichTextUtil.java
M app/src/main/java/org/wikipedia/util/DimenUtil.java
A app/src/main/java/org/wikipedia/views/AppTextView.java
M app/src/main/res/layout/fragment_page.xml
A app/src/main/res/values-v19/dimens.xml
M app/src/main/res/values-v21/dimens.xml
A app/src/main/res/values-v23/dimens.xml
M app/src/main/res/values/dimens.xml
12 files changed, 362 insertions(+), 220 deletions(-)
Approvals:
Dbrant: Looks good to me, approved
jenkins-bot: Verified
diff --git
a/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
b/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
index bba378e..a60ea86 100755
--- a/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
+++ b/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
@@ -12,7 +12,11 @@
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.text.Html;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.SpannableStringBuilder;
import android.text.TextUtils;
+import android.text.style.AbsoluteSizeSpan;
import android.util.TypedValue;
import android.graphics.PointF;
import android.view.Gravity;
@@ -39,9 +43,12 @@
import org.wikipedia.bridge.CommunicationBridge;
import org.wikipedia.page.PageFragment;
import org.wikipedia.page.gallery.GalleryActivity;
-import org.wikipedia.util.ApiUtil;
+import org.wikipedia.richtext.LeadingSpan;
+import org.wikipedia.richtext.ParagraphSpan;
+import org.wikipedia.richtext.RichTextUtil;
import org.wikipedia.util.DimenUtil;
import org.wikipedia.util.GradientUtil;
+import org.wikipedia.util.StringUtil;
import org.wikipedia.views.ObservableWebView;
import org.wikipedia.views.ViewUtil;
@@ -60,11 +67,6 @@
* total screen height.
*/
private static final float IMAGES_CONTAINER_RATIO = 0.5f;
-
- /**
- * The height, in dp, that the gradient will extend above the page title.
- */
- private static final int TITLE_GRADIENT_HEIGHT_DP = 64;
/**
* Maximum height of the page title text. If the text overflows this size,
then the
@@ -107,9 +109,7 @@
private ImageView imagePlaceholder;
private ImageViewWithFace image;
- private View pageTitleContainer;
private TextView pageTitleText;
- private TextView pageDescriptionText;
private Drawable pageTitleGradient;
private int displayHeightDp;
@@ -127,7 +127,9 @@
this.bridge = bridge;
this.webView = webView;
- findViewsById(imageContainer);
+ imagePlaceholder = findView(imageContainer,
R.id.page_image_placeholder);
+ image = findView(imageContainer, R.id.page_image);
+ pageTitleText = findView(imageContainer, R.id.page_title_text);
pageTitleGradient =
GradientUtil.getCubicGradient(getColor(R.color.lead_gradient_start),
Gravity.BOTTOM);
pageTitleText.setTypeface(Typeface.create(Typeface.SERIF,
Typeface.NORMAL));
@@ -224,8 +226,6 @@
// set the page title text, and honor any HTML formatting in the title
pageTitleText.setText(Html.fromHtml(getPage().getDisplayTitle()));
- // hide the description text...
- pageDescriptionText.setVisibility(View.INVISIBLE);
// kick off the (asynchronous) laying out of the page title text
layoutPageTitle((int) (getDimension(R.dimen.titleTextSize)
@@ -246,8 +246,6 @@
if (!isFragmentAdded()) {
return;
}
- // remove padding from the title container while measuring
- pageTitleContainer.setPadding(0, 0, 0, 0);
// set the font size of the title
pageTitleText.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSizeSp);
// if we're still not being shown (if the fragment is still being
created),
@@ -305,7 +303,7 @@
// ok, we're not going to show lead images, so we need to make some
// adjustments to our layout:
// make the WebView padding be just the height of the title text,
plus a fixed offset
- titleContainerHeight = (int) ((pageTitleContainer.getHeight() /
displayDensity))
+ titleContainerHeight = (int) ((pageTitleText.getHeight() /
displayDensity))
+ DISABLED_OFFSET_DP;
imageContainer.setLayoutParams(new
LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
(int) ((titleContainerHeight) * displayDensity)));
@@ -316,22 +314,12 @@
image.setImageDrawable(null);
imagePlaceholder.setVisibility(View.GONE);
pageTitleText.setVisibility(View.INVISIBLE);
- pageDescriptionText.setVisibility(View.INVISIBLE);
// set the color of the title
pageTitleText.setTextColor(getColor(Utils.getThemedAttributeId(getActivity(),
R.attr.lead_disabled_text_color)));
- // remove bottom padding from the description
- ViewUtil.setBottomPaddingDp(pageDescriptionText, 0);
// and give it no drop shadow
pageTitleText.setShadowLayer(0, 0, 0, 0);
- // do the same for the description...
-
pageDescriptionText.setTextColor(getColor(Utils.getThemedAttributeId(getActivity(),
- R.attr.lead_disabled_text_color)));
- pageDescriptionText.setShadowLayer(0, 0, 0, 0);
- // remove any background from the title container
- pageTitleContainer.setBackgroundColor(Color.TRANSPARENT);
- // set the correct to padding on the container
- pageTitleContainer.setPadding(0, 0, 0, 0);
+ pageTitleText.setBackgroundColor(Color.TRANSPARENT);
} else {
// we're going to show the lead image, so make some adjustments to
the
// layout, in case we were previously not showing it:
@@ -343,28 +331,12 @@
image.setVisibility(View.INVISIBLE);
imagePlaceholder.setVisibility(View.VISIBLE);
pageTitleText.setVisibility(View.INVISIBLE);
- pageDescriptionText.setVisibility(View.INVISIBLE);
// set the color of the title
pageTitleText.setTextColor(getColor(R.color.lead_text_color));
- // give default padding to the description
- final int bottomPadding = 16;
- ViewUtil.setBottomPaddingDp(pageDescriptionText, bottomPadding);
// and give it a nice drop shadow!
pageTitleText.setShadowLayer(2, 1, 1,
getColor(R.color.lead_text_shadow));
- // do the same for the description...
-
pageDescriptionText.setTextColor(getColor(R.color.lead_text_color));
- pageDescriptionText.setShadowLayer(2, 1, 1,
getColor(R.color.lead_text_shadow));
// set the title container background to be a gradient
- ViewUtil.setBackgroundDrawable(pageTitleContainer,
pageTitleGradient);
- // set the correct padding on the container
- pageTitleContainer.setPadding(0, (int) (TITLE_GRADIENT_HEIGHT_DP *
displayDensity), 0, 0);
- }
-
- if (ApiUtil.hasHoneyComb()) {
- // for API >10, decrease line spacing and boost bottom padding to
account for it.
- // (in API 10, decreased line spacing cuts off the bottom of the
text)
- final float lineSpacing = 0.8f;
- pageTitleText.setLineSpacing(0, lineSpacing);
+ ViewUtil.setBackgroundDrawable(pageTitleText, pageTitleGradient);
}
final int paddingExtra = 8;
@@ -392,7 +364,6 @@
image.setImageDrawable(null);
imagePlaceholder.setVisibility(View.GONE);
pageTitleText.setVisibility(View.GONE);
- pageDescriptionText.setVisibility(View.GONE);
}
private void setWebViewPaddingTop(int padding) {
@@ -412,35 +383,22 @@
* @param description WikiData description to be shown.
*/
private void layoutWikiDataDescription(@Nullable final String description)
{
- // set the text of the description...
- pageDescriptionText.setText(description);
- // and wait for it to lay out, so that we know the height of the
description text.
- pageDescriptionText.post(new Runnable() {
- @Override
- public void run() {
- if (!isFragmentAdded()) {
- return;
- }
- // only show the description if it's two lines or less, and
nonempty,
- // and adjust title padding based on whether the description
is shown
- int bottomPadding = 0;
- if (TextUtils.isEmpty(description) ||
pageDescriptionText.getLineCount() > 2) {
- final int blankPadding = 16;
- bottomPadding += blankPadding;
- pageDescriptionText.setVisibility(View.GONE);
- } else {
- pageDescriptionText.setVisibility(View.VISIBLE);
- }
- if (ApiUtil.hasHoneyComb() && !ApiUtil.hasLollipop()) {
- // boost the title padding a bit more, because these API
versions don't
- // automatically apply correct padding when line spacing
is decreased.
- final int extraPadding = 10;
- bottomPadding += extraPadding;
- }
- ViewUtil.setBottomPaddingDp(pageTitleText, bottomPadding);
- pageTitleText.setVisibility(View.VISIBLE);
+ if (!TextUtils.isEmpty(description)) {
+ CharSequence title = pageTitleText.getText();
+ int titleLineCount = pageTitleText.getLineCount();
+
+ SpannableStringBuilder builder = new SpannableStringBuilder(title);
+ builder.append("\n");
+ builder.append(subtitleSpannable(description,
getDimensionPixelSize(R.dimen.descriptionTextSize)));
+ pageTitleText.setText(builder);
+
+ // Only show the description if it's two lines or less.
+ if ((pageTitleText.getLineCount() - titleLineCount) > 2) {
+ // Restore title.
+ pageTitleText.setText(title);
}
- });
+ }
+ pageTitleText.setVisibility(View.VISIBLE);
}
/**
@@ -507,6 +465,19 @@
image.setLayoutParams(new LinearLayout.LayoutParams(width, height));
}
+ private SpannableString subtitleSpannable(@Nullable CharSequence str, int
sizePx) {
+ final float leadingScalar =
DimenUtil.getFloat(R.dimen.lead_subtitle_leading_scalar);
+ final float paragraphScalar =
DimenUtil.getFloat(R.dimen.lead_subtitle_paragraph_scalar);
+ CharSequence nonnullStr = StringUtil.emptyIfNull(str);
+ return RichTextUtil.setSpans(new SpannableString(nonnullStr),
+ 0,
+ nonnullStr.length(),
+ Spannable.SPAN_INCLUSIVE_INCLUSIVE,
+ new AbsoluteSizeSpan(sizePx, false),
+ new LeadingSpan(leadingScalar),
+ new ParagraphSpan(paragraphScalar));
+ }
+
private void loadLeadImage() {
loadLeadImage(getLeadImageUrl());
}
@@ -542,14 +513,6 @@
anim.setFillAfter(true);
image.startAnimation(anim);
}
- }
-
- private void findViewsById(View root) {
- imagePlaceholder = findView(root, R.id.page_image_placeholder);
- image = findView(root, R.id.page_image);
- pageTitleContainer = findView(root, R.id.page_title_container);
- pageTitleText = findView(root, R.id.page_title_text);
- pageDescriptionText = findView(root, R.id.page_description_text);
}
private void forceRefreshWebView() {
@@ -600,6 +563,10 @@
return getResources().getDimension(id);
}
+ private int getDimensionPixelSize(@DimenRes int id) {
+ return getResources().getDimensionPixelSize(id);
+ }
+
@ColorInt
private int getColor(@ColorRes int id) {
return getResources().getColor(id);
diff --git a/app/src/main/java/org/wikipedia/richtext/LeadingSpan.java
b/app/src/main/java/org/wikipedia/richtext/LeadingSpan.java
new file mode 100644
index 0000000..167de56
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/richtext/LeadingSpan.java
@@ -0,0 +1,24 @@
+package org.wikipedia.richtext;
+
+import android.graphics.Paint;
+
+public class LeadingSpan extends RelativeLineHeightSpan {
+ public LeadingSpan(float scalar) {
+ super(scalar);
+ }
+
+ @Override
+ public void chooseHeight(CharSequence text,
+ int start,
+ int end,
+ int istartv,
+ int v,
+ Paint.FontMetricsInt metrics) {
+ // Don't change the state of metrics until all calculations are
performed.
+ int scaledAscender = (int) scaledAscender(metrics);
+ int scaledDescender = (int) scaledDescender(metrics);
+
+ metrics.ascent = scaledAscender;
+ metrics.descent = scaledDescender;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/wikipedia/richtext/ParagraphSpan.java
b/app/src/main/java/org/wikipedia/richtext/ParagraphSpan.java
new file mode 100644
index 0000000..4f8a8b8
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/richtext/ParagraphSpan.java
@@ -0,0 +1,23 @@
+package org.wikipedia.richtext;
+
+import android.graphics.Paint;
+
+public class ParagraphSpan extends RelativeLineHeightSpan {
+ public ParagraphSpan(float scalar) {
+ super(scalar);
+ }
+
+ @Override
+ public void chooseHeight(CharSequence text,
+ int start,
+ int end,
+ int istartv,
+ int v,
+ Paint.FontMetricsInt metrics) {
+ if (spanStart(text, start)) {
+ metrics.ascent = (int) scaledAscender(metrics);
+ } else if (spanEnd(text, end)) {
+ metrics.descent = (int) scaledDescender(metrics);
+ }
+ }
+}
\ No newline at end of file
diff --git
a/app/src/main/java/org/wikipedia/richtext/RelativeLineHeightSpan.java
b/app/src/main/java/org/wikipedia/richtext/RelativeLineHeightSpan.java
new file mode 100644
index 0000000..8ae7c29
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/richtext/RelativeLineHeightSpan.java
@@ -0,0 +1,54 @@
+package org.wikipedia.richtext;
+
+import android.graphics.Paint;
+import android.text.Spanned;
+import android.text.style.LineHeightSpan;
+
+/*package*/ abstract class RelativeLineHeightSpan implements LineHeightSpan {
+ private final float scalar;
+
+ public RelativeLineHeightSpan(float scalar) {
+ this.scalar = scalar;
+ }
+
+ protected float scaledAscender(Paint.FontMetricsInt metrics) {
+ return -ascenderHeightRatio(metrics) * scaledLineHeight(metrics);
+ }
+
+ protected float scaledDescender(Paint.FontMetricsInt metrics) {
+ return descenderHeightRatio(metrics) * scaledLineHeight(metrics);
+ }
+
+ protected float descenderHeightRatio(Paint.FontMetricsInt metrics) {
+ return 1 - ascenderHeightRatio(metrics);
+ }
+
+ protected float ascenderHeightRatio(Paint.FontMetricsInt metrics) {
+ int height = lineHeight(metrics);
+ return height == 0 ? 0 : Math.abs(metrics.ascent) / (float) height;
+ }
+
+ protected float scaledLineHeight(Paint.FontMetricsInt metrics) {
+ return lineHeight(metrics) * scalar;
+ }
+
+ protected int lineHeight(Paint.FontMetricsInt metrics) {
+ return Math.abs(metrics.ascent) + Math.abs(metrics.descent);
+ }
+
+ protected boolean spanStart(CharSequence text, int start) {
+ return spanStart((Spanned) text, start);
+ }
+
+ protected boolean spanStart(Spanned text, int start) {
+ return text.getSpanStart(this) == start;
+ }
+
+ protected boolean spanEnd(CharSequence text, int end) {
+ return spanEnd((Spanned) text, end);
+ }
+
+ protected boolean spanEnd(Spanned text, int end) {
+ return text.getSpanEnd(this) == end;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/wikipedia/richtext/RichTextUtil.java
b/app/src/main/java/org/wikipedia/richtext/RichTextUtil.java
new file mode 100644
index 0000000..221e403
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/richtext/RichTextUtil.java
@@ -0,0 +1,19 @@
+package org.wikipedia.richtext;
+
+import android.support.annotation.NonNull;
+import android.text.SpannableString;
+
+public final class RichTextUtil {
+ @NonNull public static SpannableString setSpans(@NonNull SpannableString
str,
+ int start,
+ int end,
+ int flags,
+ @NonNull Object... spans) {
+ for (Object span : spans) {
+ str.setSpan(span, start, end, flags);
+ }
+ return str;
+ }
+
+ private RichTextUtil() { }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/wikipedia/util/DimenUtil.java
b/app/src/main/java/org/wikipedia/util/DimenUtil.java
index e7f1901..4586384 100644
--- a/app/src/main/java/org/wikipedia/util/DimenUtil.java
+++ b/app/src/main/java/org/wikipedia/util/DimenUtil.java
@@ -9,6 +9,8 @@
import android.util.TypedValue;
import android.view.Display;
+import org.wikipedia.WikipediaApp;
+
public final class DimenUtil {
public static float dpToPx(float dp) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
getDisplayMetrics());
@@ -30,6 +32,10 @@
return getDisplayMetrics().density;
}
+ public static float getFloat(@DimenRes int id) {
+ return getValue(id).getFloat();
+ }
+
/** @return Dimension in dp. */
public static float getDimension(@DimenRes int id) {
return TypedValue.complexToFloat(getValue(id).data);
@@ -46,7 +52,7 @@
}
private static Resources getResources() {
- return Resources.getSystem();
+ return WikipediaApp.getInstance().getResources();
}
/**
diff --git a/app/src/main/java/org/wikipedia/views/AppTextView.java
b/app/src/main/java/org/wikipedia/views/AppTextView.java
new file mode 100644
index 0000000..c26b6e2
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/views/AppTextView.java
@@ -0,0 +1,47 @@
+package org.wikipedia.views;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+public class AppTextView extends TextView {
+ public AppTextView(Context context) {
+ this(context, null);
+ }
+
+ public AppTextView(Context context, AttributeSet attrs) {
+ this(context, attrs, android.R.attr.textViewStyle);
+ }
+
+ public AppTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public AppTextView(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ remeasureForLineSpacing();
+ }
+
+ // Ensure the descenders of the final line are not truncated. This usually
happens when
+ // lineSpacingMultiplier is less than one.
+ private void remeasureForLineSpacing() {
+ setMeasuredDimension(getMeasuredWidth(), getMeasuredHeight() +
calculateExtraDescenderSpace());
+ }
+
+ private int calculateExtraDescenderSpace() {
+ return Math.max(0, getIntrinsicLineHeight() - getLineHeight());
+ }
+
+ /** @return Line height without space multiplication and extra spacing
addition. */
+ private int getIntrinsicLineHeight() {
+ return getPaint().getFontMetricsInt(null);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_page.xml
b/app/src/main/res/layout/fragment_page.xml
index c5fd44a..8cd4949 100644
--- a/app/src/main/res/layout/fragment_page.xml
+++ b/app/src/main/res/layout/fragment_page.xml
@@ -18,167 +18,153 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
- <android.support.design.widget.CoordinatorLayout
- android:id="@+id/page_contents_container"
+ <android.support.design.widget.CoordinatorLayout
+ android:id="@+id/page_contents_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <org.wikipedia.views.ObservableWebView
+ android:id="@+id/page_web_view"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ />
- <org.wikipedia.views.ObservableWebView
- android:id="@+id/page_web_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- />
-
- <!-- dummy LinearLayout container for 2.3 support.
- Remove when we drop support for 2.3. -->
- <LinearLayout
+ <!-- dummy LinearLayout container for 2.3 support.
+ Remove when we drop support for 2.3. -->
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <FrameLayout
+ android:id="@+id/page_image_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
- <FrameLayout
- android:id="@+id/page_image_container"
+ <!-- dummy LinearLayout container for 2.3 support.
+ Remove when we drop support for 2.3. -->
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <!-- dummy LinearLayout container for 2.3 support.
- Remove when we drop support for 2.3. -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <org.wikipedia.page.leadimages.ImageViewWithFace
- android:id="@+id/page_image"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scaleType="centerCrop"
- android:visibility="invisible"/>
- </LinearLayout>
- <ImageView
- android:id="@+id/page_image_placeholder"
+ android:layout_height="match_parent">
+ <org.wikipedia.page.leadimages.ImageViewWithFace
+ android:id="@+id/page_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
- android:contentDescription="@null"/>
- <LinearLayout
- android:id="@+id/page_title_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:layout_gravity="bottom">
- <TextView
- android:id="@+id/page_title_text"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="@style/RtlAwareTextView"
- android:paddingTop="16dp"
-
android:paddingRight="@dimen/activity_horizontal_margin"
-
android:paddingLeft="@dimen/activity_horizontal_margin"/>
- <TextView
- android:id="@+id/page_description_text"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="@style/RtlAwareTextView"
- android:layout_gravity="bottom"
- android:visibility="invisible"
- android:textSize="@dimen/descriptionTextSize"
- android:paddingBottom="16dp"
-
android:paddingRight="@dimen/activity_horizontal_margin"
-
android:paddingLeft="@dimen/activity_horizontal_margin"/>
- </LinearLayout>
- </FrameLayout>
+ android:visibility="invisible"/>
+ </LinearLayout>
+ <ImageView
+ android:id="@+id/page_image_placeholder"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:scaleType="centerCrop"
+ android:contentDescription="@null"/>
+
+ <org.wikipedia.views.AppTextView
+ android:id="@+id/page_title_text"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ style="@style/RtlAwareTextView"
+ android:paddingTop="32dp"
+
android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingBottom="16dp"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+
android:lineSpacingMultiplier="@dimen/lead_title_leading_scalar" />
+ </FrameLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/bottom_content_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="-400dp"
+ android:layout_gravity="bottom"
+ android:orientation="vertical"
+ android:visibility="gone">
+
+ <LinearLayout
+ android:id="@+id/read_more_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:visibility="gone">
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+
android:textAppearance="?android:attr/textAppearanceLarge"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+
android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingBottom="16dp"
+ android:fontFamily="serif"
+ android:textSize="24sp"
+ android:text="@string/read_more_section"/>
+ <ListView
+ android:id="@+id/read_more_list"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"/>
</LinearLayout>
<LinearLayout
- android:id="@+id/bottom_content_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="-400dp"
- android:layout_gravity="bottom"
android:orientation="vertical"
- android:visibility="gone">
+ android:paddingBottom="16dp"
+ android:background="?attr/subtle_gray_color">
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="8dp"
+ android:background="@drawable/toolbar_bottom_shadow"/>
- <LinearLayout
- android:id="@+id/read_more_container"
+ <TextView
+ android:id="@+id/page_external_link"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
- android:visibility="gone">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
-
android:textAppearance="?android:attr/textAppearanceLarge"
-
android:paddingLeft="@dimen/activity_horizontal_margin"
-
android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingBottom="16dp"
- android:fontFamily="serif"
- android:textSize="24sp"
- android:text="@string/read_more_section"/>
- <ListView
- android:id="@+id/read_more_list"
- android:layout_width="match_parent"
- android:layout_height="0dp"/>
- </LinearLayout>
-
- <LinearLayout
+ android:paddingTop="8dp"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+
android:paddingRight="@dimen/activity_horizontal_margin"
+ style="?android:textAppearanceSmall"
+ android:text="@string/page_view_in_browser"
+ android:textColor="?attr/link_color"
+ android:gravity="center"/>
+ <TextView
+ android:id="@+id/page_last_updated_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:paddingTop="8dp"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+
android:paddingRight="@dimen/activity_horizontal_margin"
+ style="?android:textAppearanceSmall"
+ android:textIsSelectable="true"
+ android:textColorLink="?attr/link_color"/>
+ <TextView
+ android:id="@+id/page_license_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingBottom="16dp"
- android:background="?attr/subtle_gray_color">
- <View
- android:layout_width="match_parent"
- android:layout_height="8dp"
-
android:background="@drawable/toolbar_bottom_shadow"/>
-
- <TextView
- android:id="@+id/page_external_link"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="8dp"
-
android:paddingLeft="@dimen/activity_horizontal_margin"
-
android:paddingRight="@dimen/activity_horizontal_margin"
- style="?android:textAppearanceSmall"
- android:text="@string/page_view_in_browser"
- android:textColor="?attr/link_color"
- android:gravity="center"/>
- <TextView
- android:id="@+id/page_last_updated_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:paddingTop="8dp"
-
android:paddingLeft="@dimen/activity_horizontal_margin"
-
android:paddingRight="@dimen/activity_horizontal_margin"
- style="?android:textAppearanceSmall"
- android:textIsSelectable="true"
- android:textColorLink="?attr/link_color"/>
- <TextView
- android:id="@+id/page_license_text"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="8dp"
-
android:paddingLeft="@dimen/activity_horizontal_margin"
-
android:paddingRight="@dimen/activity_horizontal_margin"
- style="?android:textAppearanceSmall"
- android:textIsSelectable="true"
- android:textColorLink="?attr/link_color"
- android:gravity="center"/>
- </LinearLayout>
+ android:paddingTop="8dp"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+
android:paddingRight="@dimen/activity_horizontal_margin"
+ style="?android:textAppearanceSmall"
+ android:textIsSelectable="true"
+ android:textColorLink="?attr/link_color"
+ android:gravity="center"/>
</LinearLayout>
+ </LinearLayout>
- <android.support.design.widget.FloatingActionButton
- android:id="@+id/floating_toc_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- style="@style/FloatingActionButton"
- android:layout_gravity="bottom|end"
- android:src="@drawable/ic_toc"
- android:contentDescription="@string/menu_show_toc"
- app:fabSize="mini"
- app:elevation="4sp"
- app:borderWidth="0dp"
- app:backgroundTint="?attr/toc_button_color"
- app:layout_anchor="@id/bottom_content_container"
- app:layout_anchorGravity="bottom|right|end" />
+ <android.support.design.widget.FloatingActionButton
+ android:id="@+id/floating_toc_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@style/FloatingActionButton"
+ android:layout_gravity="bottom|end"
+ android:src="@drawable/ic_toc"
+ android:contentDescription="@string/menu_show_toc"
+ app:fabSize="mini"
+ app:elevation="4sp"
+ app:borderWidth="0dp"
+ app:backgroundTint="?attr/toc_button_color"
+ app:layout_anchor="@id/bottom_content_container"
+ app:layout_anchorGravity="bottom|right|end" />
- </android.support.design.widget.CoordinatorLayout>
+ </android.support.design.widget.CoordinatorLayout>
</org.wikipedia.views.SwipeRefreshLayoutWithScroll>
diff --git a/app/src/main/res/values-v19/dimens.xml
b/app/src/main/res/values-v19/dimens.xml
new file mode 100644
index 0000000..3d04ea5
--- /dev/null
+++ b/app/src/main/res/values-v19/dimens.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <item name="lead_title_leading_scalar" format="float"
type="dimen">.8</item>
+ <item name="lead_subtitle_paragraph_scalar" format="float"
type="dimen">1.1</item>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/dimens.xml
b/app/src/main/res/values-v21/dimens.xml
index 927a7ee..646954a 100644
--- a/app/src/main/res/values-v21/dimens.xml
+++ b/app/src/main/res/values-v21/dimens.xml
@@ -7,4 +7,5 @@
<dimen name="floating_action_button_margin_right">16dp</dimen>
<dimen name="floating_action_button_margin_bottom">16dp</dimen>
+ <item name="lead_subtitle_paragraph_scalar" format="float"
type="dimen">1.15</item>
</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-v23/dimens.xml
b/app/src/main/res/values-v23/dimens.xml
new file mode 100644
index 0000000..8fbe8a2
--- /dev/null
+++ b/app/src/main/res/values-v23/dimens.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <item name="lead_title_leading_scalar" format="float"
type="dimen">.95</item>
+ <item name="lead_subtitle_leading_scalar" format="float"
type="dimen">1.1</item>
+ <item name="lead_subtitle_paragraph_scalar" format="float"
type="dimen">1.15</item>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml
b/app/src/main/res/values/dimens.xml
index e3b66e0..e673751 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -59,4 +59,8 @@
<dimen name="nav_drawer_header_height">150dp</dimen>
<dimen name="shadow_thickness">3dp</dimen>
-</resources>
\ No newline at end of file
+
+ <item name="lead_title_leading_scalar" format="float"
type="dimen">.9</item>
+ <item name="lead_subtitle_leading_scalar" format="float"
type="dimen">1.35</item>
+ <item name="lead_subtitle_paragraph_scalar" format="float"
type="dimen">1.15</item>
+</resources>
--
To view, visit https://gerrit.wikimedia.org/r/239315
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ib253c84d706e492eb71ea71e589a2063fcbdaa65
Gerrit-PatchSet: 6
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits