summaryrefslogtreecommitdiffstats
path: root/src/com/android/calculator2/CalculatorText.java
diff options
context:
space:
mode:
authorJustin Klaassen <justinklaassen@google.com>2015-05-28 17:55:20 -0700
committerJustin Klaassen <justinklaassen@google.com>2015-05-29 16:19:59 -0700
commit4459516a2c116ddf80725d6a96a69186ccddc329 (patch)
tree7c606670ae5740cb05d08f4150a5ba2d44a28f05 /src/com/android/calculator2/CalculatorText.java
parent721ec84263a26b859c57eb9fb4eb66939fe94272 (diff)
downloadandroid_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.java59
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();