parent
b2eed7a0c3
commit
a68d93b75a
@ -104,6 +104,11 @@ public class AndroidCalculator implements Calculator, CalculatorEventListener, S
|
|||||||
return calculator.evaluate(operation, expression, sequenceId);
|
return calculator.evaluate(operation, expression, sequenceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCalculateOnFly(boolean calculateOnFly) {
|
||||||
|
calculator.setCalculateOnFly(calculateOnFly);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isCalculateOnFly() {
|
public boolean isCalculateOnFly() {
|
||||||
return calculator.isCalculateOnFly();
|
return calculator.isCalculateOnFly();
|
||||||
|
@ -39,6 +39,7 @@ import org.solovyev.android.calculator.history.CalculatorHistoryState;
|
|||||||
import org.solovyev.android.calculator.history.HistoryDragProcessor;
|
import org.solovyev.android.calculator.history.HistoryDragProcessor;
|
||||||
import org.solovyev.android.calculator.view.AngleUnitsButton;
|
import org.solovyev.android.calculator.view.AngleUnitsButton;
|
||||||
import org.solovyev.android.calculator.view.DragListenerVibrator;
|
import org.solovyev.android.calculator.view.DragListenerVibrator;
|
||||||
|
import org.solovyev.android.calculator.view.LongClickEraser;
|
||||||
import org.solovyev.android.calculator.view.NumeralBasesButton;
|
import org.solovyev.android.calculator.view.NumeralBasesButton;
|
||||||
import org.solovyev.android.calculator.view.ViewsCache;
|
import org.solovyev.android.calculator.view.ViewsCache;
|
||||||
import org.solovyev.common.math.Point2d;
|
import org.solovyev.common.math.Point2d;
|
||||||
@ -174,6 +175,11 @@ public abstract class BaseUi implements SharedPreferences.OnSharedPreferenceChan
|
|||||||
angleUnitsButton.setOnDragListener(new DragListenerVibrator(newDragListener(new CalculatorButtons.AngleUnitsChanger(activity), activity), vibrator, preferences));
|
angleUnitsButton.setOnDragListener(new DragListenerVibrator(newDragListener(new CalculatorButtons.AngleUnitsChanger(activity), activity), vibrator, preferences));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final View eraseButton = getButton(views, R.id.cpp_button_erase);
|
||||||
|
if (eraseButton != null) {
|
||||||
|
LongClickEraser.createAndAttach(eraseButton);
|
||||||
|
}
|
||||||
|
|
||||||
clearButton = getButton(views, R.id.cpp_button_clear);
|
clearButton = getButton(views, R.id.cpp_button_clear);
|
||||||
if (clearButton != null) {
|
if (clearButton != null) {
|
||||||
clearButton.setOnDragListener(new DragListenerVibrator(newDragListener(new CalculatorButtons.NumeralBasesChanger(activity), activity), vibrator, preferences));
|
clearButton.setOnDragListener(new DragListenerVibrator(newDragListener(new CalculatorButtons.NumeralBasesChanger(activity), activity), vibrator, preferences));
|
||||||
@ -292,8 +298,8 @@ public abstract class BaseUi implements SharedPreferences.OnSharedPreferenceChan
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private <T extends DragButton> T getButton(@Nonnull ViewsCache views, int buttonId) {
|
private <V extends View> V getButton(@Nonnull ViewsCache views, int buttonId) {
|
||||||
return (T) views.findViewById(buttonId);
|
return (V) views.findViewById(buttonId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -115,14 +115,12 @@ public enum CalculatorButton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onLongClick() {
|
public void onLongClick() {
|
||||||
Locator.getInstance().getNotifier().showDebugMessage("Calculator++ Widget", "Button pressed: " + onLongClickText);
|
|
||||||
if (onLongClickText != null) {
|
if (onLongClickText != null) {
|
||||||
Locator.getInstance().getKeyboard().buttonPressed(onLongClickText);
|
Locator.getInstance().getKeyboard().buttonPressed(onLongClickText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onClick() {
|
public void onClick() {
|
||||||
Locator.getInstance().getNotifier().showDebugMessage("Calculator++ Widget", "Button pressed: " + onClickText);
|
|
||||||
Locator.getInstance().getKeyboard().buttonPressed(onClickText);
|
Locator.getInstance().getKeyboard().buttonPressed(onClickText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,14 +24,12 @@ package org.solovyev.android.calculator;
|
|||||||
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import static org.solovyev.android.calculator.NumeralBaseButtons.toggleNumericDigits;
|
import static org.solovyev.android.calculator.NumeralBaseButtons.toggleNumericDigits;
|
||||||
import static org.solovyev.android.calculator.Preferences.Gui.hideNumeralBaseDigits;
|
import static org.solovyev.android.calculator.Preferences.Gui.hideNumeralBaseDigits;
|
||||||
@ -47,68 +45,55 @@ import static org.solovyev.android.calculator.model.AndroidCalculatorEngine.Pref
|
|||||||
public class CalculatorKeyboardFragment extends Fragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
public class CalculatorKeyboardFragment extends Fragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
private Preferences.Gui.Theme theme;
|
private FragmentUi ui;
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
private FragmentUi fragmentHelper;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this.getActivity());
|
final SharedPreferences preferences = App.getPreferences();
|
||||||
|
|
||||||
final Preferences.Gui.Layout layout = Preferences.Gui.getLayout(preferences);
|
final Preferences.Gui.Layout layout = Preferences.Gui.getLayout(preferences);
|
||||||
if (!layout.isOptimized()) {
|
if (!layout.isOptimized()) {
|
||||||
fragmentHelper = CalculatorApplication.getInstance().createFragmentHelper(R.layout.cpp_app_keyboard_mobile);
|
ui = CalculatorApplication.getInstance().createFragmentHelper(R.layout.cpp_app_keyboard_mobile);
|
||||||
} else {
|
} else {
|
||||||
fragmentHelper = CalculatorApplication.getInstance().createFragmentHelper(R.layout.cpp_app_keyboard);
|
ui = CalculatorApplication.getInstance().createFragmentHelper(R.layout.cpp_app_keyboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
fragmentHelper.onCreate(this);
|
ui.onCreate(this);
|
||||||
|
|
||||||
preferences.registerOnSharedPreferenceChangeListener(this);
|
preferences.registerOnSharedPreferenceChangeListener(this);
|
||||||
|
|
||||||
theme = Preferences.Gui.theme.getPreferenceNoError(preferences);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
return fragmentHelper.onCreateView(this, inflater, container);
|
return ui.onCreateView(this, inflater, container);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(View root, Bundle savedInstanceState) {
|
public void onViewCreated(View root, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(root, savedInstanceState);
|
super.onViewCreated(root, savedInstanceState);
|
||||||
|
ui.onViewCreated(this, root);
|
||||||
fragmentHelper.onViewCreated(this, root);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
this.ui.onResume(this);
|
||||||
this.fragmentHelper.onResume(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
this.fragmentHelper.onPause(this);
|
this.ui.onPause(this);
|
||||||
|
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
ui.onDestroy(this);
|
||||||
fragmentHelper.onDestroy(this);
|
App.getPreferences().unregisterOnSharedPreferenceChangeListener(this);
|
||||||
|
|
||||||
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this.getActivity());
|
|
||||||
preferences.unregisterOnSharedPreferenceChangeListener(this);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -130,21 +115,5 @@ public class CalculatorKeyboardFragment extends Fragment implements SharedPrefer
|
|||||||
CalculatorButtons.initMultiplicationButton(getView());
|
CalculatorButtons.initMultiplicationButton(getView());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private static AndroidCalculatorDisplayView getCalculatorDisplayView() {
|
|
||||||
return (AndroidCalculatorDisplayView) Locator.getInstance().getDisplay().getView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
private Calculator getCalculator() {
|
|
||||||
return Locator.getInstance().getCalculator();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
private static CalculatorKeyboard getKeyboard() {
|
|
||||||
return Locator.getInstance().getKeyboard();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,96 @@
|
|||||||
|
package org.solovyev.android.calculator.view;
|
||||||
|
|
||||||
|
import android.view.GestureDetector;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import org.solovyev.android.calculator.Calculator;
|
||||||
|
import org.solovyev.android.calculator.CalculatorEditor;
|
||||||
|
import org.solovyev.android.calculator.Locator;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
public final class LongClickEraser implements View.OnTouchListener {
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private final View view;
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private final GestureDetector gestureDetector;
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private final CalculatorEditor editor = Locator.getInstance().getEditor();
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private final Calculator calculator = Locator.getInstance().getCalculator();
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private final Eraser eraser = new Eraser();
|
||||||
|
|
||||||
|
public static void createAndAttach(@Nonnull View view) {
|
||||||
|
view.setOnTouchListener(new LongClickEraser(view));
|
||||||
|
}
|
||||||
|
|
||||||
|
private LongClickEraser(@Nonnull final View view) {
|
||||||
|
this.view = view;
|
||||||
|
this.gestureDetector = new GestureDetector(view.getContext(), new GestureDetector.SimpleOnGestureListener() {
|
||||||
|
public void onLongPress(MotionEvent e) {
|
||||||
|
eraser.start();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
|
switch (event.getAction()) {
|
||||||
|
case MotionEvent.ACTION_CANCEL:
|
||||||
|
case MotionEvent.ACTION_UP:
|
||||||
|
eraser.stop();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
gestureDetector.onTouchEvent(event);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Eraser implements Runnable {
|
||||||
|
private static final int DELAY = 500;
|
||||||
|
private long delay;
|
||||||
|
private boolean wasCalculatingOnFly;
|
||||||
|
private boolean erasing;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
editor.erase();
|
||||||
|
delay = Math.max(50, 2 * delay / 3);
|
||||||
|
view.postDelayed(this, delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void start() {
|
||||||
|
if (erasing) {
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
erasing = true;
|
||||||
|
delay = DELAY;
|
||||||
|
wasCalculatingOnFly = calculator.isCalculateOnFly();
|
||||||
|
if (wasCalculatingOnFly) {
|
||||||
|
calculator.setCalculateOnFly(false);
|
||||||
|
}
|
||||||
|
view.removeCallbacks(this);
|
||||||
|
view.post(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void stop() {
|
||||||
|
view.removeCallbacks(this);
|
||||||
|
if (!erasing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
erasing = false;
|
||||||
|
if (wasCalculatingOnFly) {
|
||||||
|
calculator.setCalculateOnFly(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -64,6 +64,8 @@ public interface Calculator extends CalculatorEventContainer, HistoryControl<Cal
|
|||||||
@Nonnull String expression,
|
@Nonnull String expression,
|
||||||
@Nonnull Long sequenceId);
|
@Nonnull Long sequenceId);
|
||||||
|
|
||||||
|
void setCalculateOnFly(boolean calculateOnFly);
|
||||||
|
|
||||||
boolean isCalculateOnFly();
|
boolean isCalculateOnFly();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -207,8 +207,14 @@ public class CalculatorImpl implements Calculator, CalculatorEventListener {
|
|||||||
Locator.getInstance().getHistory().load();
|
Locator.getInstance().getHistory().load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setCalculateOnFly(boolean calculateOnFly) {
|
public void setCalculateOnFly(boolean calculateOnFly) {
|
||||||
this.calculateOnFly = calculateOnFly;
|
if (this.calculateOnFly != calculateOnFly) {
|
||||||
|
this.calculateOnFly = calculateOnFly;
|
||||||
|
if (this.calculateOnFly) {
|
||||||
|
evaluate();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -169,7 +169,7 @@ public enum CalculatorSpecialButton {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
private static Map<String, CalculatorSpecialButton> buttonsByActionCodes = new HashMap<String, CalculatorSpecialButton>();
|
private static Map<String, CalculatorSpecialButton> buttonsByActionCodes = new HashMap<>();
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
private final String actionCode;
|
private final String actionCode;
|
||||||
|
Loading…
Reference in New Issue
Block a user