From d00d1ef52a3c16397a9d01b777ae3f51f911ceac Mon Sep 17 00:00:00 2001 From: Sergey Solovyev Date: Tue, 13 Sep 2011 15:15:21 +0400 Subject: [PATCH] preferences + asyn result calculation --- .../calculator/CalculatorActivity.java | 11 +++++- .../android/calculator/CalculatorView.java | 35 ++++++++++++------ .../DragButtonCalibrationActivity.java | 8 ++-- .../org/solovyev/android/view/DragButton.java | 15 ++++++++ src/misc/stats.ods | Bin 0 -> 19622 bytes 5 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 src/misc/stats.ods diff --git a/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java b/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java index 88cf20e0..99deefe5 100644 --- a/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java +++ b/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java @@ -37,6 +37,9 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster { @NotNull private CalculatorModel calculator; + @NotNull + private BroadcastReceiver preferencesChangesReceiver; + /** * Called when the activity is first created. */ @@ -112,7 +115,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster { onDragListeners.add(toPositionOnDragListener); - final BroadcastReceiver preferencesChangesReceiver = new BroadcastReceiver() { + preferencesChangesReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -128,6 +131,12 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster { registerReceiver(preferencesChangesReceiver, new IntentFilter(DragButtonCalibrationActivity.INTENT_ACTION)); } + @Override + protected void onDestroy() { + unregisterReceiver(preferencesChangesReceiver); + super.onDestroy(); + } + @SuppressWarnings({"UnusedDeclaration"}) public void elementaryButtonClickHandler(@NotNull View v) { throw new UnsupportedOperationException("Not implemented yet!"); diff --git a/src/main/java/org/solovyev/android/calculator/CalculatorView.java b/src/main/java/org/solovyev/android/calculator/CalculatorView.java index 7344eec5..314016bb 100644 --- a/src/main/java/org/solovyev/android/calculator/CalculatorView.java +++ b/src/main/java/org/solovyev/android/calculator/CalculatorView.java @@ -2,6 +2,7 @@ package org.solovyev.android.calculator; import android.app.Activity; import android.content.Context; +import android.os.Handler; import android.text.ClipboardManager; import android.text.InputType; import android.view.View; @@ -15,6 +16,8 @@ import org.jetbrains.annotations.Nullable; import org.solovyev.util.StringUtils; import org.solovyev.util.math.MathEntityType; +import java.util.Date; + /** * User: serso * Date: 9/12/11 @@ -96,19 +99,31 @@ public class CalculatorView implements CursorControl{ final String editorStateAfter = this.editor.getText().toString(); if (!editorStateBefore.equals(editorStateAfter)) { - try { - evaluate(editorStateAfter); - } catch (EvalError evalError) { - // actually nothing shall be logged while text operations are done - } + // actually nothing shall be logged while text operations are done + evaluate(editorStateAfter, false); saveHistoryState(); } } - private void evaluate(@Nullable String expression) throws EvalError { + private void evaluate(@Nullable final String expression, final boolean showError) { if (!StringUtils.isEmpty(expression)) { - display.setText(calculator.evaluate(JsclOperation.numeric, expression)); + + final TextView localDisplay = display; + final Activity localActivity = activity; + + new Handler().post(new Runnable() { + @Override + public void run() { + try { + localDisplay.setText(calculator.evaluate(JsclOperation.numeric, expression)); + } catch (EvalError evalError) { + if (showError) { + Toast.makeText(localActivity, R.string.syntax_error, Toast.LENGTH_SHORT).show(); + } + } + } + }); } } @@ -121,11 +136,7 @@ public class CalculatorView implements CursorControl{ } public void evaluate() { - try { - evaluate(editor.getText().toString()); - } catch (EvalError evalError) { - Toast.makeText(this.activity, R.string.syntax_error, Toast.LENGTH_SHORT).show(); - } + evaluate(editor.getText().toString(), true); } public void processButtonAction(@Nullable final String text) { diff --git a/src/main/java/org/solovyev/android/calculator/DragButtonCalibrationActivity.java b/src/main/java/org/solovyev/android/calculator/DragButtonCalibrationActivity.java index a2efa2b2..35edec09 100644 --- a/src/main/java/org/solovyev/android/calculator/DragButtonCalibrationActivity.java +++ b/src/main/java/org/solovyev/android/calculator/DragButtonCalibrationActivity.java @@ -216,12 +216,12 @@ public class DragButtonCalibrationActivity extends Activity { } break; case distance: - defaultMin = 60f; - defaultMax = 140f; + defaultMin = 50f; + defaultMax = 150f; break; case duration: - defaultMin = 100f; - defaultMax = 300f; + defaultMin = 40f; + defaultMax = 1000f; break; default: defaultMin = DEFAULT_VALUE; diff --git a/src/main/java/org/solovyev/android/view/DragButton.java b/src/main/java/org/solovyev/android/view/DragButton.java index f1347fe3..282e9c92 100644 --- a/src/main/java/org/solovyev/android/view/DragButton.java +++ b/src/main/java/org/solovyev/android/view/DragButton.java @@ -1,5 +1,7 @@ package org.solovyev.android.view; +import android.os.Handler; +import android.widget.Button; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.solovyev.util.math.Point2d; @@ -76,6 +78,19 @@ public class DragButton extends ColorButton { // prevent on click action setPressed(false); } + + + if (v instanceof Button) { + final Button button = (Button)v; + + button.setEnabled(false); + + new Handler().postDelayed(new Runnable() { + public void run() { + button.setEnabled(true); + } + }, 500); + } } startPoint = null; diff --git a/src/misc/stats.ods b/src/misc/stats.ods new file mode 100644 index 0000000000000000000000000000000000000000..42771d33f1c93803f6c102c9be05d66cec3d77fd GIT binary patch literal 19622 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 JUgQDd0RU%5%hUh> literal 0 HcmV?d00001