diff options
author | Justin Klaassen <justinklaassen@google.com> | 2015-05-28 17:55:20 -0700 |
---|---|---|
committer | Justin Klaassen <justinklaassen@google.com> | 2015-05-29 16:19:59 -0700 |
commit | 4459516a2c116ddf80725d6a96a69186ccddc329 (patch) | |
tree | 7c606670ae5740cb05d08f4150a5ba2d44a28f05 /src/com/android/calculator2/CalculatorText.java | |
parent | 721ec84263a26b859c57eb9fb4eb66939fe94272 (diff) | |
download | android_packages_apps_ExactCalculator-4459516a2c116ddf80725d6a96a69186ccddc329.tar.gz android_packages_apps_ExactCalculator-4459516a2c116ddf80725d6a96a69186ccddc329.tar.bz2 android_packages_apps_ExactCalculator-4459516a2c116ddf80725d6a96a69186ccddc329.zip |
Polish display and evaluate animation
Bug: 20915670
Bug: 21489377
- Adjust font metrics across all supported device configurations to
support font scaling and min touch size requirements.
- Support proper font scaling for non-scrollable results when performing
the evaluate animation.
- Remove restriction for only using 4/5 of the width of the result
display (NOTE: the result's textSize must match the formula's
minTextSize).
- Add AlignedTextView base class to ensure formula/result padding is
based on the displayed text's ascent/baseline.
Change-Id: Id53e9bdc6e699fb05fdf331a6a472ecc170edf38
Diffstat (limited to 'src/com/android/calculator2/CalculatorText.java')
-rw-r--r-- | src/com/android/calculator2/CalculatorText.java | 59 |
1 files changed, 21 insertions, 38 deletions
diff --git a/src/com/android/calculator2/CalculatorText.java b/src/com/android/calculator2/CalculatorText.java index 1b16bca..c6f38ae 100644 --- a/src/com/android/calculator2/CalculatorText.java +++ b/src/com/android/calculator2/CalculatorText.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 The Android Open Source Project + * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,39 +16,31 @@ package com.android.calculator2; -import android.content.ClipboardManager; import android.content.ClipData; +import android.content.ClipboardManager; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Paint; -import android.graphics.Paint.FontMetricsInt; -import android.graphics.Rect; import android.net.Uri; -import android.os.Parcelable; -import android.text.method.ScrollingMovementMethod; import android.text.TextPaint; +import android.text.method.ScrollingMovementMethod; import android.util.AttributeSet; -import android.util.Log; import android.util.TypedValue; import android.view.ActionMode; -import android.view.GestureDetector; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.view.MotionEvent; import android.view.View; import android.widget.TextView; /** * TextView adapted for Calculator display. */ - -public class CalculatorText extends TextView implements View.OnLongClickListener{ +public class CalculatorText extends AlignedTextView implements View.OnLongClickListener { private ActionMode mActionMode; - private final ActionMode.Callback mPasteActionModeCallback = - new ActionMode.Callback() { + private final ActionMode.Callback mPasteActionModeCallback = new ActionMode.Callback() { @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { @@ -109,9 +101,8 @@ public class CalculatorText extends TextView implements View.OnLongClickListener private final float mMinimumTextSize; private final float mStepTextSize; - // Temporary objects for use in layout methods. + // Temporary paint for use in layout methods. private final Paint mTempPaint = new TextPaint(); - private final Rect mTempRect = new Rect(); private int mWidthConstraint = -1; private OnTextSizeChangeListener mOnTextSizeChangeListener; @@ -146,7 +137,6 @@ public class CalculatorText extends TextView implements View.OnLongClickListener setMovementMethod(ScrollingMovementMethod.getInstance()); setTextSize(TypedValue.COMPLEX_UNIT_PX, mMaximumTextSize); - setMinHeight(getLineHeight() + getCompoundPaddingBottom() + getCompoundPaddingTop()); } @Override @@ -159,8 +149,13 @@ public class CalculatorText extends TextView implements View.OnLongClickListener protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - mWidthConstraint = - MeasureSpec.getSize(widthMeasureSpec) - getPaddingLeft() - getPaddingRight(); + // Prevent shrinking/resizing with our variable textSize. + if (!isLaidOut()) { + setMinHeight(getLineHeight() + getCompoundPaddingBottom() + getCompoundPaddingTop()); + } + + mWidthConstraint = MeasureSpec.getSize(widthMeasureSpec) + - getPaddingLeft() - getPaddingRight(); setTextSize(TypedValue.COMPLEX_UNIT_PX, getVariableTextSize(getText().toString())); } @@ -170,7 +165,6 @@ public class CalculatorText extends TextView implements View.OnLongClickListener protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { super.onTextChanged(text, start, lengthBefore, lengthAfter); - final int textLength = text.length(); setTextSize(TypedValue.COMPLEX_UNIT_PX, getVariableTextSize(text.toString())); } @@ -188,6 +182,14 @@ public class CalculatorText extends TextView implements View.OnLongClickListener mOnTextSizeChangeListener = listener; } + public float getMinimumTextSize() { + return mMinimumTextSize; + } + + public float getMaximumTextSize() { + return mMaximumTextSize; + } + public float getVariableTextSize(String text) { if (mWidthConstraint < 0 || mMaximumTextSize <= mMinimumTextSize) { // Not measured, bail early. @@ -212,25 +214,6 @@ public class CalculatorText extends TextView implements View.OnLongClickListener return lastFitTextSize; } - @Override - public int getCompoundPaddingTop() { - // Measure the top padding from the capital letter height of the text instead of the top, - // but don't remove more than the available top padding otherwise clipping may occur. - getPaint().getTextBounds("H", 0, 1, mTempRect); - - final FontMetricsInt fontMetrics = getPaint().getFontMetricsInt(); - final int paddingOffset = -(fontMetrics.ascent + mTempRect.height()); - return super.getCompoundPaddingTop() - Math.min(getPaddingTop(), paddingOffset); - } - - @Override - public int getCompoundPaddingBottom() { - // Measure the bottom padding from the baseline of the text instead of the bottom, but don't - // remove more than the available bottom padding otherwise clipping may occur. - final FontMetricsInt fontMetrics = getPaint().getFontMetricsInt(); - return super.getCompoundPaddingBottom() - Math.min(getPaddingBottom(), fontMetrics.descent); - } - public boolean stopActionMode() { if (mActionMode != null) { mActionMode.finish(); |