New architecture
This commit is contained in:
parent
f03c2496a6
commit
bb2bf70cc2
@ -27,6 +27,8 @@ public interface Calculator extends CalculatorEventContainer, HistoryControl<Cal
|
||||
|
||||
void evaluate();
|
||||
|
||||
void evaluate(@NotNull Long sequenceId);
|
||||
|
||||
void simplify();
|
||||
|
||||
@NotNull
|
||||
|
@ -165,7 +165,7 @@ public class CalculatorEngineImpl implements CalculatorEngine {
|
||||
|
||||
@Override
|
||||
public void softReset() {
|
||||
// do nothing
|
||||
CalculatorLocatorImpl.getInstance().getCalculator().fireCalculatorEvent(CalculatorEventType.engine_preferences_changed, null);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -17,6 +17,10 @@ public enum CalculatorEventType {
|
||||
**********************************************************************
|
||||
*/
|
||||
|
||||
|
||||
// @NotNull CalculatorEditorViewState
|
||||
manual_calculation_requested,
|
||||
|
||||
// @NotNull org.solovyev.android.calculator.CalculatorInput
|
||||
calculation_started,
|
||||
|
||||
@ -54,7 +58,17 @@ public enum CalculatorEventType {
|
||||
editor_state_changed,
|
||||
|
||||
// @NotNull CalculatorDisplayChangeEventData
|
||||
display_state_changed;
|
||||
display_state_changed,
|
||||
|
||||
/*
|
||||
**********************************************************************
|
||||
*
|
||||
* ENGINE
|
||||
*
|
||||
**********************************************************************
|
||||
*/
|
||||
|
||||
engine_preferences_changed;
|
||||
|
||||
public boolean isOfType(@NotNull CalculatorEventType... types) {
|
||||
for (CalculatorEventType type : types) {
|
||||
|
@ -96,12 +96,23 @@ public class CalculatorImpl implements Calculator, CalculatorEventListener {
|
||||
|
||||
@Override
|
||||
public void evaluate() {
|
||||
this.evaluate(JsclOperation.numeric, getEditor().getViewState().getText());
|
||||
final CalculatorEditorViewState viewState = getEditor().getViewState();
|
||||
fireCalculatorEvent(CalculatorEventType.manual_calculation_requested, viewState);
|
||||
this.evaluate(JsclOperation.numeric, viewState.getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void evaluate(@NotNull Long sequenceId) {
|
||||
final CalculatorEditorViewState viewState = getEditor().getViewState();
|
||||
fireCalculatorEvent(CalculatorEventType.manual_calculation_requested, viewState, sequenceId);
|
||||
this.evaluate(JsclOperation.numeric, viewState.getText(), sequenceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void simplify() {
|
||||
this.evaluate(JsclOperation.simplify, getEditor().getViewState().getText());
|
||||
final CalculatorEditorViewState viewState = getEditor().getViewState();
|
||||
fireCalculatorEvent(CalculatorEventType.manual_calculation_requested, viewState);
|
||||
this.evaluate(JsclOperation.simplify, viewState.getText());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@ -335,15 +346,21 @@ public class CalculatorImpl implements Calculator, CalculatorEventListener {
|
||||
|
||||
@Override
|
||||
public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable Object data) {
|
||||
if (calculatorEventType == CalculatorEventType.editor_state_changed) {
|
||||
final CalculatorEditorChangeEventData changeEventData = (CalculatorEditorChangeEventData) data;
|
||||
|
||||
final String newText = changeEventData.getNewState().getText();
|
||||
final String oldText = changeEventData.getOldState().getText();
|
||||
switch (calculatorEventType) {
|
||||
case editor_state_changed:
|
||||
final CalculatorEditorChangeEventData changeEventData = (CalculatorEditorChangeEventData) data;
|
||||
|
||||
if (!newText.equals(oldText)) {
|
||||
evaluate(JsclOperation.numeric, changeEventData.getNewState().getText(), calculatorEventData.getSequenceId());
|
||||
}
|
||||
final String newText = changeEventData.getNewState().getText();
|
||||
final String oldText = changeEventData.getOldState().getText();
|
||||
|
||||
if (!newText.equals(oldText)) {
|
||||
evaluate(JsclOperation.numeric, changeEventData.getNewState().getText(), calculatorEventData.getSequenceId());
|
||||
}
|
||||
break;
|
||||
case engine_preferences_changed:
|
||||
evaluate(calculatorEventData.getSequenceId());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import static org.solovyev.android.calculator.CalculatorEventType.display_state_changed;
|
||||
import static org.solovyev.android.calculator.CalculatorEventType.editor_state_changed;
|
||||
import static org.solovyev.android.calculator.CalculatorEventType.manual_calculation_requested;
|
||||
|
||||
/**
|
||||
* User: Solovyev_S
|
||||
@ -179,7 +180,7 @@ public class CalculatorHistoryImpl implements CalculatorHistory {
|
||||
public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData,
|
||||
@NotNull CalculatorEventType calculatorEventType,
|
||||
@Nullable Object data) {
|
||||
if (calculatorEventType.isOfType(editor_state_changed, display_state_changed)) {
|
||||
if (calculatorEventType.isOfType(editor_state_changed, display_state_changed, manual_calculation_requested)) {
|
||||
|
||||
if (calculatorEventData.isAfter(this.lastEventDataId)) {
|
||||
final boolean sameSequence = calculatorEventData.isSameSequence(this.lastEventDataId);
|
||||
@ -188,6 +189,9 @@ public class CalculatorHistoryImpl implements CalculatorHistory {
|
||||
this.lastEventDataId = calculatorEventData;
|
||||
|
||||
switch (calculatorEventType) {
|
||||
case manual_calculation_requested:
|
||||
lastEditorViewState = (CalculatorEditorViewState) data;
|
||||
break;
|
||||
case editor_state_changed:
|
||||
final CalculatorEditorChangeEventData editorChangeData = (CalculatorEditorChangeEventData) data;
|
||||
lastEditorViewState = editorChangeData.getNewState();
|
||||
|
@ -118,6 +118,11 @@ public class AndroidCalculator implements Calculator {
|
||||
calculator.evaluate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void evaluate(@NotNull Long sequenceId) {
|
||||
calculator.evaluate(sequenceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void simplify() {
|
||||
calculator.simplify();
|
||||
|
@ -186,9 +186,6 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
roundBracketsButton.setOnDragListener(new OnDragListenerVibrator(newOnDragListener(new RoundBracketsDragProcessor(), dragPreferences), vibrator, preferences));
|
||||
}
|
||||
|
||||
|
||||
getEngine().softReset();
|
||||
|
||||
initMultiplicationButton();
|
||||
|
||||
fixThemeParameters(true);
|
||||
|
@ -39,7 +39,7 @@ import java.util.List;
|
||||
* Time: 11:38 PM
|
||||
*/
|
||||
|
||||
public class AndroidCalculatorEngine implements CalculatorEngine {
|
||||
public class AndroidCalculatorEngine implements CalculatorEngine, SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
|
||||
private static final String GROUPING_SEPARATOR_P_KEY = "org.solovyev.android.calculator.CalculatorActivity_calc_grouping_separator";
|
||||
|
||||
@ -104,6 +104,9 @@ public class AndroidCalculatorEngine implements CalculatorEngine {
|
||||
|
||||
public AndroidCalculatorEngine(@NotNull Application application) {
|
||||
this.context = application;
|
||||
|
||||
PreferenceManager.getDefaultSharedPreferences(application).registerOnSharedPreferenceChangeListener(this);
|
||||
|
||||
this.lock = new Object();
|
||||
|
||||
final JsclMathEngine engine = JsclMathEngine.instance;
|
||||
@ -274,4 +277,12 @@ public class AndroidCalculatorEngine implements CalculatorEngine {
|
||||
return calculatorEngine.getMultiplicationSign();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||
if ( Preferences.getPreferenceKeys().contains(key) ) {
|
||||
this.softReset();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user