Merge "Use dimens to specify styling for display formula and result." into ub-calculator-euler
diff --git a/res/layout/dialog_message.xml b/res/layout/dialog_message.xml
index 67e6089..233849e 100644
--- a/res/layout/dialog_message.xml
+++ b/res/layout/dialog_message.xml
@@ -15,13 +15,12 @@
limitations under the License.
-->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingBottom="20dip"
- android:paddingEnd="16dip"
- android:paddingStart="20dip"
- android:paddingTop="20dip"
+ android:padding="20dip"
+ android:ellipsize="none"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textIsSelectable="true" />
diff --git a/res/layout/display_one_line.xml b/res/layout/display_one_line.xml
index c016b15..11760fb 100644
--- a/res/layout/display_one_line.xml
+++ b/res/layout/display_one_line.xml
@@ -39,7 +39,7 @@
android:overScrollMode="never"
android:scrollbars="none">
- <com.android.calculator2.CalculatorText
+ <com.android.calculator2.CalculatorFormula
android:id="@+id/formula"
style="@style/DisplayTextStyle.Formula"
android:layout_width="wrap_content"
diff --git a/res/layout/display_two_line.xml b/res/layout/display_two_line.xml
index 3735a85..55e6f7b 100644
--- a/res/layout/display_two_line.xml
+++ b/res/layout/display_two_line.xml
@@ -33,7 +33,7 @@
android:overScrollMode="never"
android:scrollbars="none">
- <com.android.calculator2.CalculatorText
+ <com.android.calculator2.CalculatorFormula
android:id="@+id/formula"
style="@style/DisplayTextStyle.Formula"
android:layout_width="wrap_content"
diff --git a/res/values/attr.xml b/res/values/attr.xml
index cfefc9d..825fc9f 100644
--- a/res/values/attr.xml
+++ b/res/values/attr.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android">
- <declare-styleable name="CalculatorText">
+ <declare-styleable name="CalculatorFormula">
<attr name="minTextSize" format="dimension" />
<attr name="maxTextSize" format="dimension" />
<attr name="stepTextSize" format="dimension" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index fd916a7..50c4535 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -250,9 +250,9 @@
<string name="text_copied_toast">Text copied</string>
<!-- Dialog message when a computation is cancelled by the user. [CHAR_LIMIT=NONE] -->
- <string name="cancelled">Computation cancelled</string>
+ <string name="cancelled">Computation cancelled.</string>
<!-- Dialog message when a computation times out. [CHAR_LIMIT=NONE] -->
- <string name="timeout">Timed out. Value may be infinite or undefined.</string>
+ <string name="timeout">Value may be infinite or undefined.</string>
<!--
Button label to allow future computations with a longer timeout.
@@ -285,4 +285,8 @@
<string name="title_history">History</string>
<!-- Action bar navigate up description in history page. [CHAR_LIMIT=40] -->
<string name="desc_navigate_up">Navigate up</string>
+
+ <!-- Title for alert dialog when calculation takes too long (timeout). [CHAR_LIMIT=30] -->
+ <string name="dialog_timeout">Timeout</string>
+
</resources>
diff --git a/src/com/android/calculator2/AlertDialogFragment.java b/src/com/android/calculator2/AlertDialogFragment.java
index 47f482f..e098022 100644
--- a/src/com/android/calculator2/AlertDialogFragment.java
+++ b/src/com/android/calculator2/AlertDialogFragment.java
@@ -23,6 +23,7 @@
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
import android.view.LayoutInflater;
import android.widget.TextView;
@@ -47,16 +48,36 @@
private static final String KEY_MESSAGE = NAME + "_message";
private static final String KEY_BUTTON_NEGATIVE = NAME + "_button_negative";
private static final String KEY_BUTTON_POSITIVE = NAME + "_button_positive";
+ private static final String KEY_TITLE = NAME + "_title";
+
+ /**
+ * Convenience method for creating and showing a DialogFragment with the given message and
+ * title.
+ *
+ * @param activity originating Activity
+ * @param title resource id for the title string
+ * @param message resource id for the displayed message string
+ * @param positiveButtonLabel label for second button, if any. If non-null, activity must
+ * implement AlertDialogFragment.OnClickListener to respond.
+ */
+ public static void showMessageDialog(Activity activity, @StringRes int title,
+ @StringRes int message, @StringRes int positiveButtonLabel) {
+ showMessageDialog(activity, title != 0 ? activity.getString(title) : null,
+ activity.getString(message),
+ positiveButtonLabel != 0 ? activity.getString(positiveButtonLabel) : null);
+ }
/**
* Create and show a DialogFragment with the given message.
+ *
* @param activity originating Activity
+ * @param title displayed title, if any
* @param message displayed message
* @param positiveButtonLabel label for second button, if any. If non-null, activity must
* implement AlertDialogFragment.OnClickListener to respond.
*/
- public static void showMessageDialog(Activity activity, CharSequence message,
- @Nullable CharSequence positiveButtonLabel) {
+ public static void showMessageDialog(Activity activity, @Nullable CharSequence title,
+ CharSequence message, @Nullable CharSequence positiveButtonLabel) {
final AlertDialogFragment dialogFragment = new AlertDialogFragment();
final Bundle args = new Bundle();
args.putCharSequence(KEY_MESSAGE, message);
@@ -64,6 +85,7 @@
if (positiveButtonLabel != null) {
args.putCharSequence(KEY_BUTTON_POSITIVE, positiveButtonLabel);
}
+ args.putCharSequence(KEY_TITLE, title);
dialogFragment.setArguments(args);
dialogFragment.show(activity.getFragmentManager(), null /* tag */);
}
@@ -78,11 +100,11 @@
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final LayoutInflater inflater = LayoutInflater.from(builder.getContext());
- final TextView textView = (TextView) inflater.inflate(
+ final TextView messageView = (TextView) inflater.inflate(
R.layout.dialog_message, null /* root */);
- textView.setText(args.getCharSequence(KEY_MESSAGE));
+ messageView.setText(args.getCharSequence(KEY_MESSAGE));
+ builder.setView(messageView);
- builder.setView(textView);
builder.setNegativeButton(args.getCharSequence(KEY_BUTTON_NEGATIVE), null /* listener */);
final CharSequence positiveButtonLabel = args.getCharSequence(KEY_BUTTON_POSITIVE);
@@ -90,6 +112,8 @@
builder.setPositiveButton(positiveButtonLabel, this);
}
+ builder.setTitle(args.getCharSequence(KEY_TITLE));
+
return builder.create();
}
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index e884de5..b730425 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -67,7 +67,7 @@
import android.widget.TextView;
import android.widget.Toolbar;
-import com.android.calculator2.CalculatorText.OnTextSizeChangeListener;
+import com.android.calculator2.CalculatorFormula.OnTextSizeChangeListener;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -77,9 +77,8 @@
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
-public class Calculator extends Activity
- implements OnTextSizeChangeListener, OnLongClickListener, CalculatorText.OnPasteListener,
- AlertDialogFragment.OnClickListener {
+public class Calculator extends Activity implements OnTextSizeChangeListener, OnLongClickListener,
+ CalculatorFormula.OnPasteListener, AlertDialogFragment.OnClickListener {
/**
* Constant for an invalid resource id.
@@ -178,7 +177,7 @@
private CalculatorDisplay mDisplayView;
private TextView mModeView;
- private CalculatorText mFormulaText;
+ private CalculatorFormula mFormulaText;
private CalculatorResult mResultText;
private HorizontalScrollView mFormulaContainer;
private DragLayout mDragLayout;
@@ -229,7 +228,7 @@
mDisplayView = (CalculatorDisplay) findViewById(R.id.display);
mModeView = (TextView) findViewById(R.id.mode);
- mFormulaText = (CalculatorText) findViewById(R.id.formula);
+ mFormulaText = (CalculatorFormula) findViewById(R.id.formula);
mResultText = (CalculatorResult) findViewById(R.id.result);
mFormulaContainer = (HorizontalScrollView) findViewById(R.id.formula_container);
@@ -420,7 +419,7 @@
@Override
public void onActionModeStarted(ActionMode mode) {
super.onActionModeStarted(mode);
- if (mode.getTag() == CalculatorText.TAG_ACTION_MODE) {
+ if (mode.getTag() == CalculatorFormula.TAG_ACTION_MODE) {
mFormulaContainer.scrollTo(mFormulaText.getRight(), 0);
}
}
@@ -1094,13 +1093,14 @@
.commit();
}
- private void displayMessage(String s) {
- AlertDialogFragment.showMessageDialog(this, s, null);
+ private void displayMessage(String title, String message) {
+ AlertDialogFragment.showMessageDialog(this, title, message, null);
}
private void displayFraction() {
UnifiedReal result = mEvaluator.getResult();
- displayMessage(KeyMaps.translateResult(result.toNiceString()));
+ displayMessage(getString(R.string.menu_fraction),
+ KeyMaps.translateResult(result.toNiceString()));
}
// Display full result to currently evaluated precision
@@ -1112,7 +1112,7 @@
} else {
msg += res.getString(R.string.approximate);
}
- displayMessage(msg);
+ displayMessage(getString(R.string.menu_leading), msg);
}
/**
diff --git a/src/com/android/calculator2/CalculatorText.java b/src/com/android/calculator2/CalculatorFormula.java
similarity index 94%
rename from src/com/android/calculator2/CalculatorText.java
rename to src/com/android/calculator2/CalculatorFormula.java
index 52b4d13..88f677c 100644
--- a/src/com/android/calculator2/CalculatorText.java
+++ b/src/com/android/calculator2/CalculatorFormula.java
@@ -37,9 +37,9 @@
import android.widget.TextView;
/**
- * TextView adapted for Calculator display.
+ * TextView adapted for displaying the formula and allowing pasting.
*/
-public class CalculatorText extends AlignedTextView implements MenuItem.OnMenuItemClickListener,
+public class CalculatorFormula extends AlignedTextView implements MenuItem.OnMenuItemClickListener,
ClipboardManager.OnPrimaryClipChangedListener {
public static final String TAG_ACTION_MODE = "ACTION_MODE";
@@ -60,26 +60,26 @@
private OnPasteListener mOnPasteListener;
private OnTextSizeChangeListener mOnTextSizeChangeListener;
- public CalculatorText(Context context) {
+ public CalculatorFormula(Context context) {
this(context, null /* attrs */);
}
- public CalculatorText(Context context, AttributeSet attrs) {
+ public CalculatorFormula(Context context, AttributeSet attrs) {
this(context, attrs, 0 /* defStyleAttr */);
}
- public CalculatorText(Context context, AttributeSet attrs, int defStyleAttr) {
+ public CalculatorFormula(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mClipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
final TypedArray a = context.obtainStyledAttributes(
- attrs, R.styleable.CalculatorText, defStyleAttr, 0);
+ attrs, R.styleable.CalculatorFormula, defStyleAttr, 0);
mMaximumTextSize = a.getDimension(
- R.styleable.CalculatorText_maxTextSize, getTextSize());
+ R.styleable.CalculatorFormula_maxTextSize, getTextSize());
mMinimumTextSize = a.getDimension(
- R.styleable.CalculatorText_minTextSize, getTextSize());
- mStepTextSize = a.getDimension(R.styleable.CalculatorText_stepTextSize,
+ R.styleable.CalculatorFormula_minTextSize, getTextSize());
+ mStepTextSize = a.getDimension(R.styleable.CalculatorFormula_stepTextSize,
(mMaximumTextSize - mMinimumTextSize) / 3);
a.recycle();
@@ -311,7 +311,7 @@
createPasteMenu(inflater, contextMenu);
mContextMenu = contextMenu;
for(int i = 0; i < contextMenu.size(); i++) {
- contextMenu.getItem(i).setOnMenuItemClickListener(CalculatorText.this);
+ contextMenu.getItem(i).setOnMenuItemClickListener(CalculatorFormula.this);
}
}
});
diff --git a/src/com/android/calculator2/CalculatorResult.java b/src/com/android/calculator2/CalculatorResult.java
index d81d0d0..e14c8d2 100644
--- a/src/com/android/calculator2/CalculatorResult.java
+++ b/src/com/android/calculator2/CalculatorResult.java
@@ -768,7 +768,7 @@
int result;
synchronized(mWidthLock) {
result = (int) Math.floor(mWidthConstraint / mCharWidth);
- // We can apparently finish evaluating before onMeasure in CalculatorText has been
+ // We can apparently finish evaluating before onMeasure in CalculatorFormula has been
// called, in which case we get 0 or -1 as the width constraint.
}
if (result <= 0) {
diff --git a/src/com/android/calculator2/Evaluator.java b/src/com/android/calculator2/Evaluator.java
index 89a3e72..fe2862c 100644
--- a/src/com/android/calculator2/Evaluator.java
+++ b/src/com/android/calculator2/Evaluator.java
@@ -224,14 +224,7 @@
}
private void displayCancelledMessage() {
- new AlertDialog.Builder(mCalculator)
- .setMessage(R.string.cancelled)
- .setPositiveButton(R.string.dismiss,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface d, int which) { }
- })
- .create()
- .show();
+ AlertDialogFragment.showMessageDialog(mCalculator, 0, R.string.cancelled, 0);
}
// Timeout handling.
@@ -280,8 +273,8 @@
private final int QUICK_MAX_RESULT_BITS = 50000;
private void displayTimeoutMessage() {
- AlertDialogFragment.showMessageDialog(mCalculator, mCalculator.getString(R.string.timeout),
- (mLongTimeout ? null : mCalculator.getString(R.string.ok_remove_timeout)));
+ AlertDialogFragment.showMessageDialog(mCalculator, R.string.dialog_timeout,
+ R.string.timeout, mLongTimeout ? 0 : R.string.ok_remove_timeout);
}
public void setLongTimeOut() {