Clean up calculator
BUG: 13340961
Change-Id: Idb1bdc8f49cf66e8a1412a9eaa3458b85f5c5124
diff --git a/src/com/android/calculator2/CalculatorEditText.java b/src/com/android/calculator2/CalculatorEditText.java
index 4facf13..75e7b43 100644
--- a/src/com/android/calculator2/CalculatorEditText.java
+++ b/src/com/android/calculator2/CalculatorEditText.java
@@ -16,8 +16,6 @@
package com.android.calculator2;
-import com.google.common.collect.ImmutableMap;
-
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
@@ -39,15 +37,20 @@
import com.android.calculator2.R;
-public class CalculatorEditText extends EditText {
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+public class CalculatorEditText extends EditText {
private static final String LOG_TAG = "Calculator2";
private static final int CUT = 0;
private static final int COPY = 1;
private static final int PASTE = 2;
+
+ private static Map<String, String> sReplacementTable;
+ private static String[] sOperators;
+
private String[] mMenuItemsStrings;
- private ImmutableMap<String, String> sReplacementTable;
- private String[] sOperators;
public CalculatorEditText(Context context) {
this(context, null);
@@ -55,6 +58,7 @@
public CalculatorEditText(Context context, AttributeSet attrs) {
super(context, attrs);
+
setCustomSelectionActionModeCallback(new NoTextSelectionMode());
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
setCursorVisible(false);
@@ -62,23 +66,26 @@
@Override
public boolean onTouchEvent(MotionEvent event) {
- if (event.getActionMasked() == MotionEvent.ACTION_UP) {
+ if (event.getActionMasked() == MotionEvent.ACTION_UP) {
// Hack to prevent keyboard and insertion handle from showing.
- cancelLongPress();
+ cancelLongPress();
}
+
return super.onTouchEvent(event);
}
@Override
public boolean performLongClick() {
showContextMenu();
+
return true;
}
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
- String mathText = mathParse(getText().toString());
+
+ final String mathText = mathParse(getText().toString());
// Parse the string into something more "mathematical" sounding.
if (!TextUtils.isEmpty(mathText)) {
event.getText().clear();
@@ -90,6 +97,7 @@
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
+
info.setText(mathParse(getText().toString()));
}
@@ -109,63 +117,63 @@
}
}
}
+
return parsedText;
}
private synchronized void initializeReplacementTable() {
if (sReplacementTable == null) {
- ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
- Resources res = getContext().getResources();
- sOperators = res.getStringArray(R.array.operators);
- String[] descs = res.getStringArray(R.array.operatorDescs);
- int pos = 0;
- for (String key : sOperators) {
- builder.put(key, descs[pos]);
- pos++;
+ final Resources res = getContext().getResources();
+ final String[] descs = res.getStringArray(R.array.operatorDescs);
+ final String[] ops = res.getStringArray(R.array.operators);
+ final HashMap<String, String> table = new HashMap<String, String>();
+ final int len = ops.length;
+ for (int i = 0; i < len; i++) {
+ table.put(ops[i], descs[i]);
}
- sReplacementTable = builder.build();
- }
- }
- private class MenuHandler implements MenuItem.OnMenuItemClickListener {
- public boolean onMenuItemClick(MenuItem item) {
- return onTextContextMenuItem(item.getTitle());
+ sOperators = ops;
+ sReplacementTable = Collections.unmodifiableMap(table);
}
}
public boolean onTextContextMenuItem(CharSequence title) {
- boolean handled = false;
if (TextUtils.equals(title, mMenuItemsStrings[CUT])) {
cutContent();
- handled = true;
- } else if (TextUtils.equals(title, mMenuItemsStrings[COPY])) {
+ return true;
+ } else if (TextUtils.equals(title, mMenuItemsStrings[COPY])) {
copyContent();
- handled = true;
- } else if (TextUtils.equals(title, mMenuItemsStrings[PASTE])) {
+ return true;
+ } else if (TextUtils.equals(title, mMenuItemsStrings[PASTE])) {
pasteContent();
- handled = true;
+ return true;
}
- return handled;
+
+ return false;
}
@Override
public void onCreateContextMenu(ContextMenu menu) {
- MenuHandler handler = new MenuHandler();
if (mMenuItemsStrings == null) {
- Resources resources = getResources();
+ final Resources resources = getResources();
mMenuItemsStrings = new String[3];
mMenuItemsStrings[CUT] = resources.getString(android.R.string.cut);
mMenuItemsStrings[COPY] = resources.getString(android.R.string.copy);
mMenuItemsStrings[PASTE] = resources.getString(android.R.string.paste);
}
- for (int i = 0; i < mMenuItemsStrings.length; i++) {
+
+ final MenuHandler handler = new MenuHandler();
+ final int len = mMenuItemsStrings.length;
+ for (int i = 0; i < len; i++) {
menu.add(Menu.NONE, i, i, mMenuItemsStrings[i]).setOnMenuItemClickListener(handler);
}
+
if (getText().length() == 0) {
menu.getItem(CUT).setVisible(false);
menu.getItem(COPY).setVisible(false);
}
- ClipData primaryClip = getPrimaryClip();
+
+ final ClipData primaryClip = getPrimaryClip();
if (primaryClip == null || primaryClip.getItemCount() == 0
|| !canPaste(primaryClip.getItemAt(0).coerceToText(getContext()))) {
menu.getItem(PASTE).setVisible(false);
@@ -173,61 +181,67 @@
}
private void setPrimaryClip(ClipData clip) {
- ClipboardManager clipboard = (ClipboardManager) getContext().
- getSystemService(Context.CLIPBOARD_SERVICE);
+ final ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(
+ Context.CLIPBOARD_SERVICE);
clipboard.setPrimaryClip(clip);
}
private void copyContent() {
final Editable text = getText();
- int textLength = text.length();
+ final int textLength = text.length();
setSelection(0, textLength);
- ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(
- Context.CLIPBOARD_SERVICE);
- clipboard.setPrimaryClip(ClipData.newPlainText(null, text));
- Toast.makeText(getContext(), R.string.text_copied_toast, Toast.LENGTH_SHORT).show();
+ setPrimaryClip(ClipData.newPlainText(null, text));
setSelection(textLength);
+
+ Toast.makeText(getContext(), R.string.text_copied_toast, Toast.LENGTH_SHORT).show();
}
private void cutContent() {
final Editable text = getText();
- int textLength = text.length();
+ final int textLength = text.length();
setSelection(0, textLength);
setPrimaryClip(ClipData.newPlainText(null, text));
- ((Editable) getText()).delete(0, textLength);
+ getText().delete(0, textLength);
setSelection(0);
}
private ClipData getPrimaryClip() {
- ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(
+ final ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(
Context.CLIPBOARD_SERVICE);
return clipboard.getPrimaryClip();
}
private void pasteContent() {
- ClipData clip = getPrimaryClip();
+ final ClipData clip = getPrimaryClip();
if (clip != null) {
- for (int i = 0; i < clip.getItemCount(); i++) {
- CharSequence paste = clip.getItemAt(i).coerceToText(getContext());
+ final int len = clip.getItemCount();
+ for (int i = 0; i < len; i++) {
+ final CharSequence paste = clip.getItemAt(i).coerceToText(getContext());
if (canPaste(paste)) {
- ((Editable) getText()).insert(getSelectionEnd(), paste);
+ getText().insert(getSelectionEnd(), paste);
}
}
}
}
private boolean canPaste(CharSequence paste) {
- boolean canPaste = true;
try {
Float.parseFloat(paste.toString());
+ return true;
} catch (NumberFormatException e) {
Log.e(LOG_TAG, "Error turning string to integer. Ignoring paste.", e);
- canPaste = false;
+ return false;
}
- return canPaste;
}
- class NoTextSelectionMode implements ActionMode.Callback {
+ private class MenuHandler implements MenuItem.OnMenuItemClickListener {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ return onTextContextMenuItem(item.getTitle());
+ }
+ }
+
+ private class NoTextSelectionMode implements ActionMode.Callback {
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
@@ -241,7 +255,8 @@
}
@Override
- public void onDestroyActionMode(ActionMode mode) {}
+ public void onDestroyActionMode(ActionMode mode) {
+ }
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {