new interface implementation
This commit is contained in:
parent
d548ac1d25
commit
ef1508dcc7
@ -35,9 +35,10 @@ containing a value of this type.
|
|||||||
public static final int button=0x7f020001;
|
public static final int button=0x7f020001;
|
||||||
public static final int down=0x7f020002;
|
public static final int down=0x7f020002;
|
||||||
public static final int icon=0x7f020003;
|
public static final int icon=0x7f020003;
|
||||||
public static final int not_ok=0x7f020004;
|
public static final int light_blue_button=0x7f020004;
|
||||||
public static final int ok=0x7f020005;
|
public static final int not_ok=0x7f020005;
|
||||||
public static final int up=0x7f020006;
|
public static final int ok=0x7f020006;
|
||||||
|
public static final int up=0x7f020007;
|
||||||
}
|
}
|
||||||
public static final class id {
|
public static final class id {
|
||||||
public static final int calibrationArrowLeft=0x7f090001;
|
public static final int calibrationArrowLeft=0x7f090001;
|
||||||
@ -45,34 +46,32 @@ containing a value of this type.
|
|||||||
public static final int calibrationButtonLeft=0x7f090002;
|
public static final int calibrationButtonLeft=0x7f090002;
|
||||||
public static final int calibrationButtonRight=0x7f090003;
|
public static final int calibrationButtonRight=0x7f090003;
|
||||||
public static final int calibrationStart=0x7f090005;
|
public static final int calibrationStart=0x7f090005;
|
||||||
public static final int curlyBracketsButton=0x7f09001b;
|
public static final int divisionButton=0x7f09000f;
|
||||||
public static final int divisionButton=0x7f090011;
|
|
||||||
public static final int editText=0x7f090006;
|
public static final int editText=0x7f090006;
|
||||||
public static final int eigthDigitButton=0x7f090014;
|
public static final int eigthDigitButton=0x7f090011;
|
||||||
public static final int equalsButton=0x7f09001d;
|
public static final int equalsButton=0x7f090018;
|
||||||
public static final int fiveDigitButton=0x7f09000f;
|
public static final int eraseButton=0x7f090019;
|
||||||
public static final int fourDigitButton=0x7f09000e;
|
public static final int fiveDigitButton=0x7f09000d;
|
||||||
public static final int historyButton=0x7f09001e;
|
public static final int fourDigitButton=0x7f09000c;
|
||||||
public static final int menu_item_help=0x7f090020;
|
public static final int historyButton=0x7f09001c;
|
||||||
public static final int menu_item_settings=0x7f09001f;
|
public static final int leftButton=0x7f09001a;
|
||||||
public static final int muliplicationButton=0x7f09000c;
|
public static final int menu_item_help=0x7f09001e;
|
||||||
public static final int nineDigitButton=0x7f090015;
|
public static final int menu_item_settings=0x7f09001d;
|
||||||
public static final int oneDigitButton=0x7f090009;
|
public static final int muliplicationButton=0x7f09000b;
|
||||||
public static final int panelswitch=0x7f090008;
|
public static final int nineDigitButton=0x7f090012;
|
||||||
public static final int piButton=0x7f09001c;
|
public static final int oneDigitButton=0x7f090008;
|
||||||
public static final int plusButton=0x7f09000d;
|
public static final int plusButton=0x7f090013;
|
||||||
public static final int pointDigitButton=0x7f090016;
|
|
||||||
public static final int resultEditText=0x7f090007;
|
public static final int resultEditText=0x7f090007;
|
||||||
public static final int roundBracketsButton=0x7f090019;
|
public static final int rightButton=0x7f09001b;
|
||||||
public static final int sevenDigitButton=0x7f090013;
|
public static final int roundBracketsButton=0x7f090014;
|
||||||
|
public static final int sevenDigitButton=0x7f090010;
|
||||||
public static final int simplePad=0x7f090000;
|
public static final int simplePad=0x7f090000;
|
||||||
public static final int sixDigitButton=0x7f090010;
|
public static final int sixDigitButton=0x7f09000e;
|
||||||
public static final int sqrtButton=0x7f090017;
|
public static final int squareBracketsButton=0x7f090016;
|
||||||
public static final int squareBracketsButton=0x7f09001a;
|
public static final int subtractionButton=0x7f090017;
|
||||||
public static final int subtractionButton=0x7f090012;
|
public static final int threeDigitButton=0x7f09000a;
|
||||||
public static final int threeDigitButton=0x7f09000b;
|
public static final int twoDigitButton=0x7f090009;
|
||||||
public static final int twoDigitButton=0x7f09000a;
|
public static final int zeroDigitButton=0x7f090015;
|
||||||
public static final int zeroDigitButton=0x7f090018;
|
|
||||||
}
|
}
|
||||||
public static final class layout {
|
public static final class layout {
|
||||||
public static final int drag_button_calibration=0x7f030000;
|
public static final int drag_button_calibration=0x7f030000;
|
||||||
@ -95,10 +94,11 @@ containing a value of this type.
|
|||||||
public static final int syntax_error=0x7f060002;
|
public static final int syntax_error=0x7f060002;
|
||||||
}
|
}
|
||||||
public static final class style {
|
public static final class style {
|
||||||
public static final int button_small_style=0x7f070003;
|
public static final int button_small_style=0x7f070004;
|
||||||
public static final int button_style=0x7f070001;
|
public static final int button_style=0x7f070001;
|
||||||
|
public static final int controlButtonStyle=0x7f070003;
|
||||||
public static final int digitButtonStyle=0x7f070002;
|
public static final int digitButtonStyle=0x7f070002;
|
||||||
public static final int display_style=0x7f070004;
|
public static final int display_style=0x7f070005;
|
||||||
public static final int editTextInputStyle=0x7f070000;
|
public static final int editTextInputStyle=0x7f070000;
|
||||||
}
|
}
|
||||||
public static final class xml {
|
public static final class xml {
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<gradient android:startColor="#071622" android:endColor="#253541"
|
<gradient android:startColor="#071622" android:endColor="#253541" android:angle="90"/>
|
||||||
android:angle="90"/>
|
|
||||||
<corners android:radius="0dp" />
|
<corners android:radius="0dp" />
|
||||||
</shape>
|
</shape>
|
||||||
|
6
res/drawable/light_blue_button.xml
Normal file
6
res/drawable/light_blue_button.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<gradient android:startColor="#0f2e47" android:endColor="#3a5366" android:angle="90"/>
|
||||||
|
<corners android:radius="0dp" />
|
||||||
|
</shape>
|
@ -8,47 +8,34 @@
|
|||||||
a:background="#ff000000">
|
a:background="#ff000000">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
a:orientation="vertical"
|
|
||||||
a:layout_width="match_parent"
|
|
||||||
a:layout_height="100dp"
|
|
||||||
a:layout_weight="2">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
a:id="@+id/editText"
|
|
||||||
style="@style/editTextInputStyle"
|
|
||||||
a:maxLines="5"
|
|
||||||
a:minLines="5"
|
|
||||||
a:gravity="top|left"
|
|
||||||
a:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
a:typeface="monospace"
|
|
||||||
a:singleLine="false"/>
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
a:id="@+id/resultEditText"
|
|
||||||
style="@style/editTextInputStyle"
|
|
||||||
a:gravity="top|left"
|
|
||||||
a:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
a:minLines="1"
|
|
||||||
a:height="10dp"
|
|
||||||
a:typeface="monospace"
|
|
||||||
a:editable="false"
|
|
||||||
a:focusable="false"/>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
|
|
||||||
<org.solovyev.android.view.PanelSwitcher
|
|
||||||
a:id="@+id/panelswitch"
|
|
||||||
a:layout_width="match_parent"
|
|
||||||
a:layout_height="0dp"
|
|
||||||
a:layout_weight="5">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
a:id="@+id/simplePad"
|
|
||||||
a:layout_width="match_parent"
|
a:layout_width="match_parent"
|
||||||
a:layout_height="match_parent"
|
a:layout_height="match_parent"
|
||||||
a:orientation="vertical"
|
a:orientation="vertical"
|
||||||
a:layout_gravity="center">
|
a:layout_gravity="center">
|
||||||
|
|
||||||
|
<LinearLayout a:layout_weight="2" a:layout_width="match_parent" a:layout_height="0dp">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
a:id="@+id/editText"
|
||||||
|
style="@style/display_style"
|
||||||
|
a:singleLine="false"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
||||||
|
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
a:id="@+id/resultEditText"
|
||||||
|
style="@style/display_style"
|
||||||
|
a:gravity="right|top"
|
||||||
|
a:minLines="1"
|
||||||
|
a:maxLines="1"
|
||||||
|
a:scrollHorizontally="true"
|
||||||
|
a:scrollbars="none"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/oneDigitButton" a:text="1" calc:textUp="sin"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/oneDigitButton" a:text="1" calc:textUp="sin"
|
||||||
calc:textDown="asin" style="@style/digitButtonStyle"
|
calc:textDown="asin" style="@style/digitButtonStyle"
|
||||||
@ -67,30 +54,29 @@
|
|||||||
calc:textDown="^2" style="@style/digitButtonStyle"
|
calc:textDown="^2" style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/plusButton" a:text="+"
|
|
||||||
style="@style/digitButtonStyle"
|
|
||||||
a:onClick="digitButtonClickHandler"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/fourDigitButton" a:text="4" calc:textUp="exp"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/fourDigitButton"
|
||||||
calc:textDown="mod" style="@style/digitButtonStyle"
|
a:text="4"
|
||||||
|
calc:textUp=""
|
||||||
|
calc:textDown=""
|
||||||
|
style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/fiveDigitButton" a:text="5" calc:textUp="log"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/fiveDigitButton"
|
||||||
calc:textDown="ln" style="@style/digitButtonStyle"
|
a:text="5"
|
||||||
|
calc:textUp="ln"
|
||||||
|
style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/sixDigitButton" a:text="6" calc:textUp="!"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/sixDigitButton" a:text="6"
|
||||||
|
calc:textUp=""
|
||||||
calc:textDown="" style="@style/digitButtonStyle"
|
calc:textDown="" style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/divisionButton" a:text="/"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/divisionButton" a:text="/"
|
||||||
style="@style/digitButtonStyle"
|
calc:textUp="√"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/subtractionButton" a:text="-"
|
|
||||||
style="@style/digitButtonStyle"
|
style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
@ -106,55 +92,58 @@
|
|||||||
calc:textDown="" style="@style/digitButtonStyle"
|
calc:textDown="" style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/nineDigitButton" a:text="9" calc:textUp=""
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/nineDigitButton" a:text="9"
|
||||||
calc:textDown="" style="@style/digitButtonStyle"
|
calc:textDown="e"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
calc:textUp="π"
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/pointDigitButton" a:text="." calc:textDown=","
|
|
||||||
style="@style/digitButtonStyle"
|
style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/sqrtButton" a:text="√"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/plusButton" a:text="+"
|
||||||
style="@style/digitButtonStyle"
|
style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/zeroDigitButton" a:text="0"
|
|
||||||
style="@style/digitButtonStyle"
|
|
||||||
a:onClick="digitButtonClickHandler"/>
|
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/roundBracketsButton" a:text="()"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/roundBracketsButton" a:text="()"
|
||||||
calc:textUp="("
|
calc:textUp="("
|
||||||
calc:textDown=")" style="@style/digitButtonStyle"
|
calc:textDown=")" style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/zeroDigitButton" a:text="0"
|
||||||
|
calc:textUp="."
|
||||||
|
calc:textDown=","
|
||||||
|
style="@style/digitButtonStyle"
|
||||||
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/squareBracketsButton" a:text="[]"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/squareBracketsButton" a:text="[]"
|
||||||
calc:textUp="["
|
calc:textUp="["
|
||||||
calc:textDown="]" style="@style/digitButtonStyle"
|
calc:textDown="]" style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/curlyBracketsButton" a:text="{}"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/subtractionButton" a:text="-"
|
||||||
calc:textUp="{"
|
calc:textUp="{"
|
||||||
calc:textDown="}" style="@style/digitButtonStyle"
|
calc:textDown="}"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/piButton" a:text="π" calc:textUp="e"
|
|
||||||
style="@style/digitButtonStyle"
|
style="@style/digitButtonStyle"
|
||||||
a:onClick="digitButtonClickHandler"/>
|
a:onClick="digitButtonClickHandler"/>
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
||||||
|
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/equalsButton"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/equalsButton"
|
||||||
a:text="="
|
a:text="="
|
||||||
a:layout_width="fill_parent"
|
a:layout_width="fill_parent"
|
||||||
style="@style/digitButtonStyle"
|
style="@style/controlButtonStyle"
|
||||||
a:onClick="numericButtonClickHandler"/>
|
a:onClick="numericButtonClickHandler"/>
|
||||||
|
|
||||||
|
|
||||||
<!-- <org.solovyev.android.view.DirectionDragButton a:id="@+id/numericButton" a:text="numeric"
|
<!-- <org.solovyev.android.view.DirectionDragButton a:id="@+id/numericButton" a:text="numeric"
|
||||||
style="@style/digitButtonStyle"
|
style="@style/digitButtonStyle"
|
||||||
a:onClick="numericButtonClickHandler"/>
|
a:onClick="numericButtonClickHandler"/>
|
||||||
@ -162,11 +151,28 @@
|
|||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/simplifyButton" a:text="simplify"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/simplifyButton" a:text="simplify"
|
||||||
style="@style/digitButtonStyle"
|
style="@style/digitButtonStyle"
|
||||||
a:onClick="simplifyButtonClickHandler"/>-->
|
a:onClick="simplifyButtonClickHandler"/>-->
|
||||||
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/eraseButton"
|
||||||
|
a:text="↚"
|
||||||
|
style="@style/controlButtonStyle"
|
||||||
|
a:onClick="eraseButtonClickHandler"/>
|
||||||
|
|
||||||
<org.solovyev.android.view.DirectionDragButton a:id="@+id/historyButton" calc:textUp="undo"
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/leftButton"
|
||||||
calc:textDown="redo" style="@style/digitButtonStyle"/>
|
a:text="←"
|
||||||
|
style="@style/controlButtonStyle"
|
||||||
|
a:onClick="moveLeftButtonClickHandler"/>
|
||||||
|
|
||||||
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/rightButton"
|
||||||
|
a:text="→"
|
||||||
|
style="@style/controlButtonStyle"
|
||||||
|
a:onClick="moveRightButtonClickHandler"/>
|
||||||
|
|
||||||
|
<org.solovyev.android.view.DirectionDragButton a:id="@+id/historyButton"
|
||||||
|
a:text="clear"
|
||||||
|
calc:textUp="undo"
|
||||||
|
calc:textDown="redo"
|
||||||
|
style="@style/controlButtonStyle"
|
||||||
|
a:onClick="clearButtonClickHandler"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</org.solovyev.android.view.PanelSwitcher>
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -20,20 +20,19 @@
|
|||||||
<item name="android:background">@drawable/blue_button</item>
|
<item name="android:background">@drawable/blue_button</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="controlButtonStyle" parent="button_style"/>
|
||||||
|
|
||||||
<style name="button_small_style" parent="button_style">
|
<style name="button_small_style" parent="button_style">
|
||||||
<item name="android:textSize">30dp</item>
|
<item name="android:textSize">30dp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="display_style">
|
<style name="display_style">
|
||||||
<item name="android:textSize">40dp</item>
|
<item name="android:textSize">30dp</item>
|
||||||
<item name="android:gravity">right|center_vertical</item>
|
<!-- <item name="android:background">#000000</item>
|
||||||
<item name="android:textColor">#ffffff</item>
|
<item name="android:textColor">#ffffff</item>-->
|
||||||
<item name="android:maxLines">1</item>
|
<item name="android:gravity">left|top</item>
|
||||||
<item name="android:scrollbars">none</item>
|
|
||||||
<item name="android:scrollHorizontally">true</item>
|
|
||||||
<item name="android:layout_width">match_parent</item>
|
<item name="android:layout_width">match_parent</item>
|
||||||
<item name="android:layout_height">match_parent</item>
|
<item name="android:layout_height">match_parent</item>
|
||||||
<item name="android:padding">8dp</item>
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -8,8 +8,6 @@ import java.util.List;
|
|||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.*;
|
import android.view.*;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@ -42,7 +40,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster{
|
|||||||
private Interpreter interpreter;
|
private Interpreter interpreter;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private HistoryHelper<EditorHistoryState> historyHelper;
|
private HistoryHelper<CalculatorHistoryState> historyHelper;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private BroadcastReceiver preferencesChangesReceiver;
|
private BroadcastReceiver preferencesChangesReceiver;
|
||||||
@ -106,8 +104,8 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster{
|
|||||||
Log.e(CalculatorActivity.class.getName(), e.getMessage());
|
Log.e(CalculatorActivity.class.getName(), e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
this.historyHelper = new SimpleHistoryHelper<EditorHistoryState>();
|
this.historyHelper = new SimpleHistoryHelper<CalculatorHistoryState>();
|
||||||
this.historyHelper.addState(getCurrentHistoryState());
|
saveHistoryState();
|
||||||
|
|
||||||
this.preferencesChangesReceiver = new BroadcastReceiver() {
|
this.preferencesChangesReceiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
@ -123,6 +121,10 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster{
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveHistoryState() {
|
||||||
|
historyHelper.addState(getCurrentHistoryState());
|
||||||
|
}
|
||||||
|
|
||||||
public void elementaryButtonClickHandler(@NotNull View v) {
|
public void elementaryButtonClickHandler(@NotNull View v) {
|
||||||
eval(JsclOperation.elementary);
|
eval(JsclOperation.elementary);
|
||||||
}
|
}
|
||||||
@ -131,14 +133,46 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster{
|
|||||||
eval(JsclOperation.numeric);
|
eval(JsclOperation.numeric);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void eraseButtonClickHandler(@NotNull View v) {
|
||||||
|
editText.getText().delete(editText.getSelectionStart() - 1, editText.getSelectionStart());
|
||||||
|
saveHistoryState();
|
||||||
|
}
|
||||||
|
|
||||||
public void simplifyButtonClickHandler(@NotNull View v) {
|
public void simplifyButtonClickHandler(@NotNull View v) {
|
||||||
eval(JsclOperation.simplify);
|
eval(JsclOperation.simplify);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void moveLeftButtonClickHandler(@NotNull View v) {
|
||||||
|
if (editText.getSelectionStart() > 0) {
|
||||||
|
editText.setSelection(editText.getSelectionStart() - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void moveRightButtonClickHandler(@NotNull View v) {
|
||||||
|
if (editText.getSelectionStart() < editText.getText().length()) {
|
||||||
|
editText.setSelection(editText.getSelectionStart() + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearButtonClickHandler(@NotNull View v) {
|
||||||
|
editText.getText().clear();
|
||||||
|
resultEditText.getText().clear();
|
||||||
|
saveHistoryState();
|
||||||
|
}
|
||||||
|
|
||||||
private void eval(@NotNull JsclOperation operation) {
|
private void eval(@NotNull JsclOperation operation) {
|
||||||
try {
|
try {
|
||||||
final String preprocessedString = Preprocessor.process(String.valueOf(editText.getText()));
|
final String preprocessedString = Preprocessor.process(String.valueOf(editText.getText()));
|
||||||
resultEditText.setText(String.valueOf(interpreter.eval(Preprocessor.wrap(operation, preprocessedString))));
|
resultEditText.setText(String.valueOf(interpreter.eval(Preprocessor.wrap(operation, preprocessedString))));
|
||||||
|
|
||||||
|
// result editor might be changed (but main editor - no) => make undo and add new state with saved result
|
||||||
|
CalculatorHistoryState currentHistoryState = getCurrentHistoryState();
|
||||||
|
if (this.historyHelper.isUndoAvailable()) {
|
||||||
|
this.historyHelper.undo(currentHistoryState);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.historyHelper.addState(currentHistoryState);
|
||||||
|
|
||||||
} catch (EvalError e) {
|
} catch (EvalError e) {
|
||||||
Log.e(CalculatorActivity.class.getName(), e.getMessage());
|
Log.e(CalculatorActivity.class.getName(), e.getMessage());
|
||||||
resultEditText.setText(R.string.syntax_error);
|
resultEditText.setText(R.string.syntax_error);
|
||||||
@ -165,7 +199,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster{
|
|||||||
|
|
||||||
final HistoryAction historyAction = HistoryAction.valueOf(actionText);
|
final HistoryAction historyAction = HistoryAction.valueOf(actionText);
|
||||||
if (historyHelper.isActionAvailable(historyAction)) {
|
if (historyHelper.isActionAvailable(historyAction)) {
|
||||||
final EditorHistoryState newState = historyHelper.doAction(historyAction, getCurrentHistoryState());
|
final CalculatorHistoryState newState = historyHelper.doAction(historyAction, getCurrentHistoryState());
|
||||||
if (newState != null) {
|
if (newState != null) {
|
||||||
setCurrentHistoryState(newState);
|
setCurrentHistoryState(newState);
|
||||||
}
|
}
|
||||||
@ -200,17 +234,26 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster{
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCurrentHistoryState(@NotNull EditorHistoryState editorHistoryState) {
|
public void setCurrentHistoryState(@NotNull CalculatorHistoryState editorHistoryState) {
|
||||||
this.editText.setText(editorHistoryState.getText());
|
setValuesFromHistory(this.editText, editorHistoryState.getEditorState());
|
||||||
this.editText.setSelection(editorHistoryState.getCursorPosition(), editorHistoryState.getCursorPosition());
|
setValuesFromHistory(this.resultEditText, editorHistoryState.getResultEditorState());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setValuesFromHistory(@NotNull EditText editText, EditorHistoryState editorHistoryState) {
|
||||||
|
editText.setText(editorHistoryState.getText());
|
||||||
|
editText.setSelection(editorHistoryState.getCursorPosition());
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public EditorHistoryState getCurrentHistoryState() {
|
public CalculatorHistoryState getCurrentHistoryState() {
|
||||||
|
return new CalculatorHistoryState(getEditorHistoryState(this.editText), getEditorHistoryState(this.resultEditText));
|
||||||
|
}
|
||||||
|
|
||||||
|
private EditorHistoryState getEditorHistoryState(@NotNull EditText editorText) {
|
||||||
final EditorHistoryState result = new EditorHistoryState();
|
final EditorHistoryState result = new EditorHistoryState();
|
||||||
|
|
||||||
result.setText(String.valueOf(this.editText.getText()));
|
result.setText(String.valueOf(editorText.getText()));
|
||||||
result.setCursorPosition(this.editText.getSelectionStart());
|
result.setCursorPosition(editorText.getSelectionStart());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -241,7 +284,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster{
|
|||||||
|
|
||||||
this.editText.getText().insert(this.editText.getSelectionStart(), text);
|
this.editText.getText().insert(this.editText.getSelectionStart(), text);
|
||||||
this.editText.setSelection(this.editText.getSelectionStart() + cursorPositionOffset, this.editText.getSelectionEnd() + cursorPositionOffset);
|
this.editText.setSelection(this.editText.getSelectionStart() + cursorPositionOffset, this.editText.getSelectionEnd() + cursorPositionOffset);
|
||||||
this.historyHelper.addState(getCurrentHistoryState());
|
saveHistoryState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
package org.solovyev.android.calculator;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User: serso
|
||||||
|
* Date: 9/11/11
|
||||||
|
* Time: 12:16 AM
|
||||||
|
*/
|
||||||
|
public class CalculatorHistoryState {
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private EditorHistoryState editorState;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private EditorHistoryState resultEditorState;
|
||||||
|
|
||||||
|
public CalculatorHistoryState(@NotNull EditorHistoryState editorState, @NotNull EditorHistoryState resultEditorState) {
|
||||||
|
this.editorState = editorState;
|
||||||
|
this.resultEditorState = resultEditorState;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public EditorHistoryState getEditorState() {
|
||||||
|
return editorState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEditorState(@NotNull EditorHistoryState editorState) {
|
||||||
|
this.editorState = editorState;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public EditorHistoryState getResultEditorState() {
|
||||||
|
return resultEditorState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResultEditorState(@NotNull EditorHistoryState resultEditorState) {
|
||||||
|
this.resultEditorState = resultEditorState;
|
||||||
|
}
|
||||||
|
}
|
@ -15,10 +15,22 @@ public class Preprocessor {
|
|||||||
sb.append('(');
|
sb.append('(');
|
||||||
} else if (ch == ']' || ch == '}') {
|
} else if (ch == ']' || ch == '}') {
|
||||||
sb.append(')');
|
sb.append(')');
|
||||||
} else if (ch == ',') {
|
|
||||||
sb.append('.');
|
|
||||||
} else if (ch == 'π') {
|
} else if (ch == 'π') {
|
||||||
sb.append("pi");
|
sb.append("pi");
|
||||||
|
} else if (s.startsWith("ln", i)) {
|
||||||
|
sb.append("log");
|
||||||
|
i += 1;
|
||||||
|
} else if (s.startsWith("tg", i)) {
|
||||||
|
sb.append("tan");
|
||||||
|
i += 1;
|
||||||
|
} else if (s.startsWith("atg", i)) {
|
||||||
|
sb.append("atan");
|
||||||
|
i += 2;
|
||||||
|
} else if (s.startsWith("e(", i)) {
|
||||||
|
sb.append("exp(");
|
||||||
|
i += 1;
|
||||||
|
} else if (ch == 'e') {
|
||||||
|
sb.append("exp(1)");
|
||||||
} else if (ch == '√') {
|
} else if (ch == '√') {
|
||||||
sb.append("sqrt");
|
sb.append("sqrt");
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,144 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2008 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.solovyev.android.view;
|
|
||||||
|
|
||||||
import android.view.animation.TranslateAnimation;
|
|
||||||
import android.view.MotionEvent;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.GestureDetector;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
|
|
||||||
class PanelSwitcher extends FrameLayout {
|
|
||||||
private static final int MAJOR_MOVE = 60;
|
|
||||||
private static final int ANIM_DURATION = 400;
|
|
||||||
|
|
||||||
private GestureDetector mGestureDetector;
|
|
||||||
private int mCurrentView;
|
|
||||||
private View mChildren[] = new View[0];
|
|
||||||
|
|
||||||
private int mWidth;
|
|
||||||
private TranslateAnimation inLeft;
|
|
||||||
private TranslateAnimation outLeft;
|
|
||||||
|
|
||||||
private TranslateAnimation inRight;
|
|
||||||
private TranslateAnimation outRight;
|
|
||||||
|
|
||||||
private static final int LEFT = 1;
|
|
||||||
private static final int RIGHT = 2;
|
|
||||||
private int mPreviousMove;
|
|
||||||
|
|
||||||
public PanelSwitcher(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
mCurrentView = 0;
|
|
||||||
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
|
|
||||||
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
|
|
||||||
float velocityY) {
|
|
||||||
int dx = (int) (e2.getX() - e1.getX());
|
|
||||||
|
|
||||||
// don't accept the fling if it's too short
|
|
||||||
// as it may conflict with a button push
|
|
||||||
if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) {
|
|
||||||
if (velocityX > 0) {
|
|
||||||
moveRight();
|
|
||||||
} else {
|
|
||||||
moveLeft();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void setCurrentIndex(int current) {
|
|
||||||
mCurrentView = current;
|
|
||||||
updateCurrentView();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateCurrentView() {
|
|
||||||
for (int i = mChildren.length-1; i >= 0 ; --i) {
|
|
||||||
mChildren[i].setVisibility(i==mCurrentView ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSizeChanged(int w, int h, int oldW, int oldH) {
|
|
||||||
mWidth = w;
|
|
||||||
inLeft = new TranslateAnimation(mWidth, 0, 0, 0);
|
|
||||||
outLeft = new TranslateAnimation(0, -mWidth, 0, 0);
|
|
||||||
inRight = new TranslateAnimation(-mWidth, 0, 0, 0);
|
|
||||||
outRight = new TranslateAnimation(0, mWidth, 0, 0);
|
|
||||||
|
|
||||||
inLeft.setDuration(ANIM_DURATION);
|
|
||||||
outLeft.setDuration(ANIM_DURATION);
|
|
||||||
inRight.setDuration(ANIM_DURATION);
|
|
||||||
outRight.setDuration(ANIM_DURATION);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void onFinishInflate() {
|
|
||||||
int count = getChildCount();
|
|
||||||
mChildren = new View[count];
|
|
||||||
for (int i = 0; i < count; ++i) {
|
|
||||||
mChildren[i] = getChildAt(i);
|
|
||||||
}
|
|
||||||
updateCurrentView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onTouchEvent(MotionEvent event) {
|
|
||||||
mGestureDetector.onTouchEvent(event);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onInterceptTouchEvent(MotionEvent event) {
|
|
||||||
return mGestureDetector.onTouchEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
void moveLeft() {
|
|
||||||
// <--
|
|
||||||
if (mCurrentView < mChildren.length - 1 && mPreviousMove != LEFT) {
|
|
||||||
mChildren[mCurrentView+1].setVisibility(View.VISIBLE);
|
|
||||||
mChildren[mCurrentView+1].startAnimation(inLeft);
|
|
||||||
mChildren[mCurrentView].startAnimation(outLeft);
|
|
||||||
mChildren[mCurrentView].setVisibility(View.GONE);
|
|
||||||
|
|
||||||
mCurrentView++;
|
|
||||||
mPreviousMove = LEFT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void moveRight() {
|
|
||||||
// -->
|
|
||||||
if (mCurrentView > 0 && mPreviousMove != RIGHT) {
|
|
||||||
mChildren[mCurrentView-1].setVisibility(View.VISIBLE);
|
|
||||||
mChildren[mCurrentView-1].startAnimation(inRight);
|
|
||||||
mChildren[mCurrentView].startAnimation(outRight);
|
|
||||||
mChildren[mCurrentView].setVisibility(View.GONE);
|
|
||||||
|
|
||||||
mCurrentView--;
|
|
||||||
mPreviousMove = RIGHT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int getCurrentIndex() {
|
|
||||||
return mCurrentView;
|
|
||||||
}
|
|
||||||
}
|
|
@ -19,7 +19,7 @@ public enum MathEntityType {
|
|||||||
|
|
||||||
private static final List<Character> binaryOperations = Arrays.asList('-', '+', '*', '/', '^' );
|
private static final List<Character> binaryOperations = Arrays.asList('-', '+', '*', '/', '^' );
|
||||||
|
|
||||||
private static final List<String> functions = Arrays.asList("sin", "asin", "cos", "acos", "tg", "atg", "exp", "log", "ln", "mod", "√");
|
private static final List<String> functions = Arrays.asList("sin", "asin", "cos", "acos", "tg", "atg", "log", "ln", "mod", "√");
|
||||||
|
|
||||||
private static final List<String> groupSymbols = Arrays.asList("[]", "()", "{}");
|
private static final List<String> groupSymbols = Arrays.asList("[]", "()", "{}");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user