Changes
@ -13,10 +13,7 @@ import static org.solovyev.android.calculator.CalculatorEventType.*;
|
|||||||
public class CalculatorDisplayImpl implements CalculatorDisplay {
|
public class CalculatorDisplayImpl implements CalculatorDisplay {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private volatile CalculatorEventData lastCalculatorEventData;
|
private final CalculatorEventHolder lastEvent;
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private final Object lastCalculatorEventDataLock = new Object();
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private CalculatorDisplayView view;
|
private CalculatorDisplayView view;
|
||||||
@ -32,7 +29,7 @@ public class CalculatorDisplayImpl implements CalculatorDisplay {
|
|||||||
|
|
||||||
public CalculatorDisplayImpl(@NotNull Calculator calculator) {
|
public CalculatorDisplayImpl(@NotNull Calculator calculator) {
|
||||||
this.calculator = calculator;
|
this.calculator = calculator;
|
||||||
this.lastCalculatorEventData = CalculatorUtils.createFirstEventDataId();
|
this.lastEvent = new CalculatorEventHolder(CalculatorUtils.createFirstEventDataId());
|
||||||
this.calculator.addCalculatorEventListener(this);
|
this.calculator.addCalculatorEventListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,9 +88,7 @@ public class CalculatorDisplayImpl implements CalculatorDisplay {
|
|||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public CalculatorEventData getLastEventData() {
|
public CalculatorEventData getLastEventData() {
|
||||||
synchronized (lastCalculatorEventDataLock) {
|
return lastEvent.getLastEventData();
|
||||||
return lastCalculatorEventData;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -102,18 +97,9 @@ public class CalculatorDisplayImpl implements CalculatorDisplay {
|
|||||||
@Nullable Object data) {
|
@Nullable Object data) {
|
||||||
if (calculatorEventType.isOfType(calculation_result, calculation_failed, calculation_cancelled, conversion_result, conversion_failed)) {
|
if (calculatorEventType.isOfType(calculation_result, calculation_failed, calculation_cancelled, conversion_result, conversion_failed)) {
|
||||||
|
|
||||||
boolean processEvent = false;
|
final CalculatorEventHolder.Result result = lastEvent.apply(calculatorEventData);
|
||||||
boolean sameSequence = false;
|
|
||||||
|
|
||||||
synchronized (lastCalculatorEventDataLock) {
|
if (result.isNewAfter()) {
|
||||||
if (calculatorEventData.isAfter(lastCalculatorEventData)) {
|
|
||||||
sameSequence = calculatorEventData.isSameSequence(lastCalculatorEventData);
|
|
||||||
lastCalculatorEventData = calculatorEventData;
|
|
||||||
processEvent = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (processEvent) {
|
|
||||||
switch (calculatorEventType) {
|
switch (calculatorEventType) {
|
||||||
case conversion_failed:
|
case conversion_failed:
|
||||||
processConversationFailed((CalculatorConversionEventData) calculatorEventData, (ConversionFailure) data);
|
processConversationFailed((CalculatorConversionEventData) calculatorEventData, (ConversionFailure) data);
|
||||||
|
@ -26,12 +26,16 @@ public class CalculatorEditorImpl implements CalculatorEditor {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private final Calculator calculator;
|
private final Calculator calculator;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private final CalculatorEventHolder lastEventHolder;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final CursorControlAdapter cursorControlAdapter = new CursorControlAdapter(this);
|
private final CursorControlAdapter cursorControlAdapter = new CursorControlAdapter(this);
|
||||||
|
|
||||||
public CalculatorEditorImpl(@NotNull Calculator calculator) {
|
public CalculatorEditorImpl(@NotNull Calculator calculator) {
|
||||||
this.calculator = calculator;
|
this.calculator = calculator;
|
||||||
this.calculator.addCalculatorEventListener(this);
|
this.calculator.addCalculatorEventListener(this);
|
||||||
|
this.lastEventHolder = new CalculatorEventHolder(CalculatorUtils.createFirstEventDataId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -80,12 +84,16 @@ public class CalculatorEditorImpl implements CalculatorEditor {
|
|||||||
public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData,
|
public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData,
|
||||||
@NotNull CalculatorEventType calculatorEventType,
|
@NotNull CalculatorEventType calculatorEventType,
|
||||||
@Nullable Object data) {
|
@Nullable Object data) {
|
||||||
switch (calculatorEventType) {
|
final CalculatorEventHolder.Result result = lastEventHolder.apply(calculatorEventData);
|
||||||
case use_history_state:
|
|
||||||
final CalculatorHistoryState calculatorHistoryState = (CalculatorHistoryState)data;
|
if (result.isNewAfter()) {
|
||||||
final EditorHistoryState editorState = calculatorHistoryState.getEditorState();
|
switch (calculatorEventType) {
|
||||||
this.setText(StringUtils.getNotEmpty(editorState.getText(), ""), editorState.getCursorPosition());
|
case use_history_state:
|
||||||
break;
|
final CalculatorHistoryState calculatorHistoryState = (CalculatorHistoryState)data;
|
||||||
|
final EditorHistoryState editorState = calculatorHistoryState.getEditorState();
|
||||||
|
this.setText(StringUtils.getNotEmpty(editorState.getText(), ""), editorState.getCursorPosition());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
package org.solovyev.android.calculator;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User: serso
|
||||||
|
* Date: 10/9/12
|
||||||
|
* Time: 9:59 PM
|
||||||
|
*/
|
||||||
|
public class CalculatorEventHolder {
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private volatile CalculatorEventData lastEventData;
|
||||||
|
|
||||||
|
public CalculatorEventHolder(@NotNull CalculatorEventData lastEventData) {
|
||||||
|
this.lastEventData = lastEventData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public synchronized CalculatorEventData getLastEventData() {
|
||||||
|
return lastEventData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public synchronized Result apply(@NotNull CalculatorEventData newEventData) {
|
||||||
|
final Result result = new Result(lastEventData, newEventData);
|
||||||
|
|
||||||
|
if (result.isNewAfter()) {
|
||||||
|
this.lastEventData = newEventData;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Result {
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private final CalculatorEventData lastEventData;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private final CalculatorEventData newEventData;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private Boolean after = null;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private Boolean sameSequence = null;
|
||||||
|
|
||||||
|
public Result(@NotNull CalculatorEventData lastEventData,
|
||||||
|
@NotNull CalculatorEventData newEventData) {
|
||||||
|
this.lastEventData = lastEventData;
|
||||||
|
this.newEventData = newEventData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNewAfter() {
|
||||||
|
if (after == null) {
|
||||||
|
after = newEventData.isAfter(lastEventData);
|
||||||
|
}
|
||||||
|
return after;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSameSequence() {
|
||||||
|
if (sameSequence == null) {
|
||||||
|
sameSequence = newEventData.isSameSequence(lastEventData);
|
||||||
|
}
|
||||||
|
return sameSequence;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
public class CalculatorTestUtils {
|
public class CalculatorTestUtils {
|
||||||
|
|
||||||
// in seconds
|
// in seconds
|
||||||
public static final int TIMEOUT = 1000;
|
public static final int TIMEOUT = 1;
|
||||||
|
|
||||||
public static void staticSetUp() throws Exception {
|
public static void staticSetUp() throws Exception {
|
||||||
CalculatorLocatorImpl.getInstance().init(new CalculatorImpl(), newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class));
|
CalculatorLocatorImpl.getInstance().init(new CalculatorImpl(), newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class));
|
||||||
@ -53,6 +53,7 @@ public class CalculatorTestUtils {
|
|||||||
final TestCalculatorEventListener calculatorEventListener = new TestCalculatorEventListener(latch);
|
final TestCalculatorEventListener calculatorEventListener = new TestCalculatorEventListener(latch);
|
||||||
try {
|
try {
|
||||||
calculator.addCalculatorEventListener(calculatorEventListener);
|
calculator.addCalculatorEventListener(calculatorEventListener);
|
||||||
|
|
||||||
calculatorEventListener.setCalculatorEventData(calculator.evaluate(operation, expression));
|
calculatorEventListener.setCalculatorEventData(calculator.evaluate(operation, expression));
|
||||||
|
|
||||||
if (latch.await(TIMEOUT, TimeUnit.SECONDS)) {
|
if (latch.await(TIMEOUT, TimeUnit.SECONDS)) {
|
||||||
@ -95,11 +96,16 @@ public class CalculatorTestUtils {
|
|||||||
@Override
|
@Override
|
||||||
public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable Object data) {
|
public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable Object data) {
|
||||||
if ( this.calculatorEventData != null && calculatorEventData.isSameSequence(this.calculatorEventData) ) {
|
if ( this.calculatorEventData != null && calculatorEventData.isSameSequence(this.calculatorEventData) ) {
|
||||||
if ( calculatorEventType == CalculatorEventType.display_state_changed ) {
|
if (calculatorEventType == CalculatorEventType.display_state_changed) {
|
||||||
final CalculatorDisplayChangeEventData displayChange = (CalculatorDisplayChangeEventData)data;
|
final CalculatorDisplayChangeEventData displayChange = (CalculatorDisplayChangeEventData) data;
|
||||||
|
|
||||||
result = displayChange.getNewValue();
|
result = displayChange.getNewValue();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// need to sleep a little bit as await
|
||||||
|
new CountDownLatch(1).await(100, TimeUnit.MILLISECONDS);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
latch.countDown();
|
latch.countDown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" android:versionCode="81" android:versionName="1.3.2"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" android:versionCode="87" android:versionName="1.3.2" package="org.solovyev.android.calculator">
|
||||||
package="org.solovyev.android.calculator">
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
@ -9,7 +8,7 @@
|
|||||||
|
|
||||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8"/>
|
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8"/>
|
||||||
|
|
||||||
<application android:debuggable="true" android:hardwareAccelerated="false" android:icon="@drawable/icon" android:label="@string/c_app_name" android:name=".CalculatorApplication" android:theme="@style/metro_blue_theme">
|
<application android:debuggable="false" android:hardwareAccelerated="false" android:icon="@drawable/icon" android:label="@string/c_app_name" android:name=".CalculatorApplication" android:theme="@style/metro_blue_theme">
|
||||||
|
|
||||||
<activity android:label="@string/c_app_name" android:name=".CalculatorActivity" android:windowSoftInputMode="adjustPan">
|
<activity android:label="@string/c_app_name" android:name=".CalculatorActivity" android:windowSoftInputMode="adjustPan">
|
||||||
|
|
||||||
@ -21,7 +20,7 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<!-- settings must use action bar icon-->
|
<!-- settings must use action bar icon-->
|
||||||
<activity android:label="@string/c_app_settings" android:icon="@drawable/icon_action_bar" android:name=".CalculatorPreferencesActivity"/>
|
<activity android:icon="@drawable/icon_action_bar" android:label="@string/c_app_settings" android:name=".CalculatorPreferencesActivity"/>
|
||||||
|
|
||||||
<activity android:label="@string/c_history" android:name=".history.CalculatorHistoryActivity"/>
|
<activity android:label="@string/c_history" android:name=".history.CalculatorHistoryActivity"/>
|
||||||
|
|
||||||
@ -38,7 +37,7 @@
|
|||||||
<activity android:label="@string/c_plot_graph" android:name=".plot.CalculatorPlotActivity"/>
|
<activity android:label="@string/c_plot_graph" android:name=".plot.CalculatorPlotActivity"/>
|
||||||
|
|
||||||
<!-- settings must use action bar icon-->
|
<!-- settings must use action bar icon-->
|
||||||
<activity android:label="@string/c_settings" android:icon="@drawable/icon_action_bar" android:name=".plot.CalculatorPlotPreferenceActivity"/>
|
<activity android:icon="@drawable/icon_action_bar" android:label="@string/c_settings" android:name=".plot.CalculatorPlotPreferenceActivity"/>
|
||||||
|
|
||||||
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.ads.AdActivity"/>
|
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.ads.AdActivity"/>
|
||||||
|
|
||||||
@ -51,11 +50,7 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
<activity android:name="org.acra.CrashReportDialog"
|
<activity android:excludeFromRecents="true" android:finishOnTaskLaunch="true" android:launchMode="singleInstance" android:name="org.acra.CrashReportDialog" android:theme="@style/Theme.Sherlock.Dialog"/>
|
||||||
android:theme="@style/Theme.Sherlock.Dialog"
|
|
||||||
android:launchMode="singleInstance"
|
|
||||||
android:excludeFromRecents="true"
|
|
||||||
android:finishOnTaskLaunch="true" />
|
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
BIN
calculatorpp/misc/res/kb_facebook.png
Normal file
After Width: | Height: | Size: 745 B |
BIN
calculatorpp/misc/res/kb_facebook_icon.png
Normal file
After Width: | Height: | Size: 940 B |
@ -295,7 +295,7 @@
|
|||||||
</manifest>
|
</manifest>
|
||||||
|
|
||||||
<proguard>
|
<proguard>
|
||||||
<skip>true</skip>
|
<skip>false</skip>
|
||||||
</proguard>
|
</proguard>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
||||||
|
BIN
calculatorpp/res/drawable-hdpi/kb_facebook.png
Normal file
After Width: | Height: | Size: 473 B |
BIN
calculatorpp/res/drawable-large-hdpi/kb_facebook.png
Normal file
After Width: | Height: | Size: 458 B |
BIN
calculatorpp/res/drawable-ldpi/kb_facebook.png
Normal file
After Width: | Height: | Size: 386 B |
BIN
calculatorpp/res/drawable-mdpi/kb_facebook.png
Normal file
After Width: | Height: | Size: 458 B |
BIN
calculatorpp/res/drawable-xhdpi/kb_facebook.png
Normal file
After Width: | Height: | Size: 645 B |
BIN
calculatorpp/res/drawable-xlarge-hdpi/kb_facebook.png
Normal file
After Width: | Height: | Size: 645 B |
@ -7,7 +7,7 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<org.solovyev.android.view.ColorButton xmlns:a="http://schemas.android.com/apk/res/android"
|
<org.solovyev.android.view.ColorButton xmlns:a="http://schemas.android.com/apk/res/android"
|
||||||
a:id="@+id/pasteButton"
|
a:id="@+id/likeButton"
|
||||||
a:drawableTop="@drawable/kb_heart"
|
a:drawableTop="@drawable/kb_facebook"
|
||||||
style="?controlImageButtonStyle"
|
style="?controlImageButtonStyle"
|
||||||
a:onClick="donateButtonClickHandler"/>
|
a:onClick="likeButtonClickHandler"/>
|
@ -1,19 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
|
||||||
~ For more information, please, contact se.solovyev@gmail.com
|
|
||||||
~ or visit http://se.solovyev.org
|
|
||||||
-->
|
|
||||||
|
|
||||||
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
|
|
||||||
a:layout_width="fill_parent"
|
|
||||||
a:layout_height="fill_parent">
|
|
||||||
|
|
||||||
<TextView a:id="@+id/donateText"
|
|
||||||
style="@style/about_style"
|
|
||||||
a:layout_width="fill_parent"
|
|
||||||
a:text="@string/c_donate_text"
|
|
||||||
a:layout_height="fill_parent"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -12,7 +12,7 @@
|
|||||||
Este programa es Open Source:\nTodo el código fuente puede encontrarse en\n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
Este programa es Open Source:\nTodo el código fuente puede encontrarse en\n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
||||||
Para más información, por favor,\ncontacte con el autor al mail\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n
|
Para más información, por favor,\ncontacte con el autor al mail\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n
|
||||||
o visite\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
o visite\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
||||||
Si desea apoyar el proyecto,\npuede hacer una donación vía\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">\nhttp://paypal.com</a>\n\n
|
Si desea apoyar el proyecto\n\n
|
||||||
Si le gusta la aplicación\nvalórela con 5 estrellas en\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
Si le gusta la aplicación\nvalórela con 5 estrellas en\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
||||||
Gracias a las personas que han traducido Calculadora++ a los diferentes idiomas:\n
|
Gracias a las personas que han traducido Calculadora++ a los diferentes idiomas:\n
|
||||||
Español - Jordi Luna\n
|
Español - Jordi Luna\n
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
|
||||||
~ For more information, please, contact se.solovyev@gmail.com
|
|
||||||
~ or visit http://se.solovyev.org
|
|
||||||
-->
|
|
||||||
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<string name="c_donate">Donar</string>
|
|
||||||
|
|
||||||
<string name="c_donate_text" formatted="false">Puede dar las gracias por mail al autor de este programa\n\n
|
|
||||||
<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n\n
|
|
||||||
donar dinero a través de\n\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
o evaluar el programa con 5 estrellas en\n\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n
|
|
||||||
</string>
|
|
||||||
|
|
||||||
</resources>
|
|
@ -12,7 +12,7 @@
|
|||||||
Questo programma è open source:\ntutto il codice può essere trovato su\n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
Questo programma è open source:\ntutto il codice può essere trovato su\n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
||||||
Per ulteriori informazioni contatta\nl\'autore via email\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>
|
Per ulteriori informazioni contatta\nl\'autore via email\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>
|
||||||
\no visita\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
\no visita\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
||||||
Se vuoi aiutare il progetto\npuoi effettuare una donazione via\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
Se vuoi aiutare il progetto\n\n
|
||||||
Se ti piace l\'applicazione\nvota 5 stelle nel\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
Se ti piace l\'applicazione\nvota 5 stelle nel\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
||||||
Grazie a persone che traducono Calculator++ in diverse lingue:\n
|
Grazie a persone che traducono Calculator++ in diverse lingue:\n
|
||||||
Italiano - Gabriele Ravanetti\n
|
Italiano - Gabriele Ravanetti\n
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
|
||||||
~ For more information, please, contact se.solovyev@gmail.com
|
|
||||||
~ or visit http://se.solovyev.org
|
|
||||||
-->
|
|
||||||
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<string name="c_donate">Dona</string>
|
|
||||||
|
|
||||||
<string name="c_donate_text">Puoi ringraziare l\'autore di questo programma per email\n\n
|
|
||||||
<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n\n
|
|
||||||
o donando su\n\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
oppure votando l\'applicazione con 5 stelle nell\'\n\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>
|
|
||||||
</string>
|
|
||||||
|
|
||||||
</resources>
|
|
@ -9,12 +9,11 @@
|
|||||||
<string name="c_about">О программе</string>
|
<string name="c_about">О программе</string>
|
||||||
|
|
||||||
<string name="c_about_content">Copyright (c) 2009-2011\n\n<b>Программа создана\nserso aka se.solovyev</b>\n\n
|
<string name="c_about_content">Copyright (c) 2009-2011\n\n<b>Программа создана\nserso aka se.solovyev</b>\n\n
|
||||||
Сайт приложения: <a href="http://calculatorpp.com/forum/">http://calculatorpp.com/forum/</a>\n\n
|
Сайт приложения: <a href="http://facebook.com/calculatorpp">http://facebook.com/calculatorpp</a>\n\n
|
||||||
Эта программа с открытыми исходным кодом:\nон может быть найден на \n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
Эта программа с открытыми исходным кодом:\nон может быть найден на \n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
||||||
За подробной информацией, пожалуйста,\nобращайтесь на почту\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n
|
За подробной информацией, пожалуйста,\nобращайтесь на почту\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n
|
||||||
или посетите сайт \n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
или посетите сайт \n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
||||||
Если вы хотите поддержать проект материально\nвы можете купить специальную опцию из настроек приложения\n
|
Если вы хотите поддержать проект материально\nвы можете купить специальную опцию из настроек приложения\n\n
|
||||||
перевести средства через \n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
Если вам понравилось приложение -\nпоставьте 5 звёздочек в\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
Если вам понравилось приложение -\nпоставьте 5 звёздочек в\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
||||||
Спасибо тем, кто переводил Калькулятор++:\n
|
Спасибо тем, кто переводил Калькулятор++:\n
|
||||||
на итальянский - Gabriele Ravanetti\n
|
на итальянский - Gabriele Ravanetti\n
|
||||||
@ -169,7 +168,7 @@
|
|||||||
|
|
||||||
<string name="c_release_notes_for_27">
|
<string name="c_release_notes_for_27">
|
||||||
От разработчика:\n\n
|
От разработчика:\n\n
|
||||||
Я рад сообщить, что у Калькулятора++ появился собственный форум: http://calculatorpp.com/forum/.\n
|
Я рад сообщить, что у Калькулятора++ появился собственный форум: http://facebook.com/calculatorpp.\n
|
||||||
Здесь вы можете найти всю последнюю информацию о приложении, узнать об известных проблемах и внести свои предложения.\n
|
Здесь вы можете найти всю последнюю информацию о приложении, узнать об известных проблемах и внести свои предложения.\n
|
||||||
Для входа вы можете использовать аккаунт социальной сети (Facebook, Twitter или Google).\n\n
|
Для входа вы можете использовать аккаунт социальной сети (Facebook, Twitter или Google).\n\n
|
||||||
1. Добавлены кнопки управления масштаб на графике\n
|
1. Добавлены кнопки управления масштаб на графике\n
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
|
||||||
~ For more information, please, contact se.solovyev@gmail.com
|
|
||||||
~ or visit http://se.solovyev.org
|
|
||||||
-->
|
|
||||||
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<string name="c_donate">Пожертвовать</string>
|
|
||||||
|
|
||||||
<string name="c_donate_text">Вы можете отблагодарить автора по почте\n\n
|
|
||||||
<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n\n
|
|
||||||
купить специальную опцию из настроек приложения\n\n
|
|
||||||
пожертвовать денег через\n\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
или поставить 5 звёздочек в\n\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>
|
|
||||||
</string>
|
|
||||||
|
|
||||||
</resources>
|
|
@ -190,7 +190,7 @@
|
|||||||
<string name="c_feedback_title">Отзыв</string>
|
<string name="c_feedback_title">Отзыв</string>
|
||||||
<string name="c_feedback_text">Вы используете Калькулятор++ некоторое время\n
|
<string name="c_feedback_text">Вы используете Калькулятор++ некоторое время\n
|
||||||
и для нас важно узнать ваше мнение о приложении.\n\n
|
и для нас важно узнать ваше мнение о приложении.\n\n
|
||||||
Пожалуйста, оцените Калькулятор++ \nна <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>,\n оставьте комментарий или \nобсудите приложение \nна нашем <a href="http://calculatorpp.com/forum/">форуме</a>
|
Пожалуйста, оцените Калькулятор++ \nна <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>,\n оставьте комментарий или \nобсудите приложение \nв <a href="http://facebook.com/calculatorpp">Facebook</a>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<string name="c_notespp_announce_text">Хорошие новости - я только что выпустил новое приложение под Андроид под названием <a href="https://play.google.com/store/apps/details?id=org.solovyev.android.notes">Заметки++</a>.\n
|
<string name="c_notespp_announce_text">Хорошие новости - я только что выпустил новое приложение под Андроид под названием <a href="https://play.google.com/store/apps/details?id=org.solovyev.android.notes">Заметки++</a>.\n
|
||||||
|
@ -9,12 +9,11 @@
|
|||||||
<string name="c_about">Про програму</string>
|
<string name="c_about">Про програму</string>
|
||||||
|
|
||||||
<string name="c_about_content">Copyright (c) 2009-2011\n\n<b>Створено serso aka se.solovyev</b>\n\n
|
<string name="c_about_content">Copyright (c) 2009-2011\n\n<b>Створено serso aka se.solovyev</b>\n\n
|
||||||
Сайт програми: <a href="http://calculatorpp.com/forum/">http://calculatorpp.com/forum/</a>\n\n
|
Сайт програми: <a href="http://facebook.com/calculatorpp">http://facebook.com/calculatorpp</a>\n\n
|
||||||
Ця програма з відкритим вихідним кодом:\nйого можна знайти на \n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
Ця програма з відкритим вихідним кодом:\nйого можна знайти на \n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
||||||
За детальною інформацією, будь ласка, звертайтеся до автора на пошту\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>
|
За детальною інформацією, будь ласка, звертайтеся до автора на пошту\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>
|
||||||
\nабо відвідайте сайт\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
\nабо відвідайте сайт\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
||||||
Якщо хочете підтримати проект фінансово,\nто ви можете купити спеціальну опцію у налаштуваннях програми\n
|
Якщо хочете підтримати проект фінансово,\nто ви можете купити спеціальну опцію у налаштуваннях програми\n\n
|
||||||
переказати гроші через \n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
Якщо вам сподобалася програма,\n то оцініть її у 5 зірочок на\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
Якщо вам сподобалася програма,\n то оцініть її у 5 зірочок на\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
||||||
Дякую усім, хто переклав Калькулятор++ на інші мови:\n
|
Дякую усім, хто переклав Калькулятор++ на інші мови:\n
|
||||||
італійську - Gabriele Ravanetti\n
|
італійську - Gabriele Ravanetti\n
|
||||||
@ -168,7 +167,7 @@
|
|||||||
|
|
||||||
<string name="c_release_notes_for_27">
|
<string name="c_release_notes_for_27">
|
||||||
Від розробника:\n\n
|
Від розробника:\n\n
|
||||||
Я радий повідомити Вас, що запустив форум для Калькулятор++: http://calculatorpp.com/forum/.\n
|
Я радий повідомити Вас, що запустив форум для Калькулятор++: http://facebook.com/calculatorpp.\n
|
||||||
Тут ви можете знайти усю останню інформацію про програму, дізнатися про відомі проблеми та внести свої пропозиції.\n
|
Тут ви можете знайти усю останню інформацію про програму, дізнатися про відомі проблеми та внести свої пропозиції.\n
|
||||||
Для входу ви можете скористатися обліковим записом соціальної мережі (Facebook, Twitter or Google are supported).\n\n
|
Для входу ви можете скористатися обліковим записом соціальної мережі (Facebook, Twitter or Google are supported).\n\n
|
||||||
1. Додано кнопки управління масштабом на графіку\n
|
1. Додано кнопки управління масштабом на графіку\n
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
|
||||||
~ For more information, please, contact se.solovyev@gmail.com
|
|
||||||
~ or visit http://se.solovyev.org
|
|
||||||
-->
|
|
||||||
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<string name="c_donate">Пожертви</string>
|
|
||||||
|
|
||||||
<string name="c_donate_text">Ви можете подякувати автору цієї програми по пошті\n\n
|
|
||||||
<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n\n
|
|
||||||
купити спеціальну опцію у налаштуваннях програми\n\n
|
|
||||||
пожертвувати гроші через \n\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
або оцінити її у 5 зірочок на \n\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>
|
|
||||||
</string>
|
|
||||||
|
|
||||||
</resources>
|
|
@ -190,7 +190,7 @@
|
|||||||
<string name="c_feedback_title">Зворотній зв’язок</string>
|
<string name="c_feedback_title">Зворотній зв’язок</string>
|
||||||
<string name="c_feedback_text">Ви вже використовуєте Калькулятор++ деякий час \n
|
<string name="c_feedback_text">Ви вже використовуєте Калькулятор++ деякий час \n
|
||||||
і для нас важливо знати вашу думку про програму.\n\n
|
і для нас важливо знати вашу думку про програму.\n\n
|
||||||
Будь ласка, оцініть Калькулятор++ \nна <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>,\n залиште коментар або \nобговоріть програму \nна нашому <a href="http://calculatorpp.com/forum/">форумі</a>
|
Будь ласка, оцініть Калькулятор++ \nна <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>,\n залиште коментар або \nобговоріть програму \nна <a href="http://facebook.com/calculatorpp">Facebook</a>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<string name="c_angle_units_changed_to">Одиниці виміру кутів змінено на \'%s\'!</string>
|
<string name="c_angle_units_changed_to">Одиниці виміру кутів змінено на \'%s\'!</string>
|
||||||
|
@ -9,12 +9,11 @@
|
|||||||
<string name="c_about">關於</string>
|
<string name="c_about">關於</string>
|
||||||
|
|
||||||
<string name="c_about_content">Copyright (c) 2009-2011\n\n<b>Created by serso aka se.solovyev</b>\n\n
|
<string name="c_about_content">Copyright (c) 2009-2011\n\n<b>Created by serso aka se.solovyev</b>\n\n
|
||||||
程式網站: <a href="http://calculatorpp.com/forum/">http://calculatorpp.com/forum/</a>\n\n
|
程式網站: <a href="http://facebook.com/calculatorpp">http://facebook.com/calculatorpp</a>\n\n
|
||||||
此程式為開放源碼軟體:\n原始碼位於\n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
此程式為開放源碼軟體:\n原始碼位於\n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
||||||
如果您需要更多資訊\n請寄信至作者信箱\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>
|
如果您需要更多資訊\n請寄信至作者信箱\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>
|
||||||
\n或是造訪\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
\n或是造訪\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
||||||
如果您想要支持此專案\n\n您可以從程式設定頁面中購買一個特別的選項\n\n
|
如果您想要支持此專案\n\n您可以從程式設定頁面中購買一個特別的選項\n\n
|
||||||
捐款到\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
如果您喜歡這個程式\n請在 <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a> 中將它評等為五顆星\n\n
|
如果您喜歡這個程式\n請在 <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a> 中將它評等為五顆星\n\n
|
||||||
感謝以下 Calculator++ 的翻譯者:\n
|
感謝以下 Calculator++ 的翻譯者:\n
|
||||||
義大利文 - Gabriele Ravanetti\n
|
義大利文 - Gabriele Ravanetti\n
|
||||||
@ -166,7 +165,7 @@
|
|||||||
|
|
||||||
<string name="c_release_notes_for_27">
|
<string name="c_release_notes_for_27">
|
||||||
來自開發者的訊息:\n\n
|
來自開發者的訊息:\n\n
|
||||||
我很高興可以通知您, 我創立了一個 Calculator++ 的論壇: http://calculatorpp.com/forum/.\n
|
我很高興可以通知您, 我創立了一個 Calculator++ 的論壇: http://facebook.com/calculatorpp.\n
|
||||||
您可以在這裡找到程式最新的資訊、檢查已知問題、提報錯誤和建議新功能.\n
|
您可以在這裡找到程式最新的資訊、檢查已知問題、提報錯誤和建議新功能.\n
|
||||||
您可以使用常用社群網站的帳號登入 (可用 Facebook, Twitter 和 Google).\n\n
|
您可以使用常用社群網站的帳號登入 (可用 Facebook, Twitter 和 Google).\n\n
|
||||||
1. 在繪圖介面上顯示縮放按鈕\n
|
1. 在繪圖介面上顯示縮放按鈕\n
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
|
||||||
~ For more information, please, contact se.solovyev@gmail.com
|
|
||||||
~ or visit http://se.solovyev.org
|
|
||||||
-->
|
|
||||||
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<string name="c_donate">捐款</string>
|
|
||||||
|
|
||||||
<string name="c_donate_text">您可以向此程式的作者表達謝意, 透過 e-mail:\n\n
|
|
||||||
<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n\n
|
|
||||||
購買設定選單中的選項\n\n
|
|
||||||
透過以下連結捐款\n\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
或是將此程式評等為五顆星:\n\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>
|
|
||||||
</string>
|
|
||||||
|
|
||||||
</resources>
|
|
@ -190,7 +190,7 @@
|
|||||||
<string name="c_feedback_title">回饋</string>
|
<string name="c_feedback_title">回饋</string>
|
||||||
<string name="c_feedback_text">您已使用 Calculator++ 一段時間了 \n
|
<string name="c_feedback_text">您已使用 Calculator++ 一段時間了 \n
|
||||||
我們很希望可以瞭解您對這個軟體的意見.\n\n
|
我們很希望可以瞭解您對這個軟體的意見.\n\n
|
||||||
請在 <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a> 上評等 Calculator++,\n 留下評論訊息 \n或是在 <a href="http://calculatorpp.com/forum/">我們的論壇</a> 上討論.
|
請在 <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a> 上評等 Calculator++,\n 留下評論訊息 \n或是在 <a href="http://facebook.com/calculatorpp">Facebook</a> 上討論.
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<string name="c_notespp_announce_text">好消息 - 我剛發行了一個新的 Android 應用程式, 叫做 <a href="https://play.google.com/store/apps/details?id=org.solovyev.android.notes">Notes++</a>.\n
|
<string name="c_notespp_announce_text">好消息 - 我剛發行了一個新的 Android 應用程式, 叫做 <a href="https://play.google.com/store/apps/details?id=org.solovyev.android.notes">Notes++</a>.\n
|
||||||
|
@ -9,12 +9,11 @@
|
|||||||
<string name="c_about">About</string>
|
<string name="c_about">About</string>
|
||||||
|
|
||||||
<string name="c_about_content">Copyright (c) 2009-2011\n\n<b>Created by serso aka se.solovyev</b>\n\n
|
<string name="c_about_content">Copyright (c) 2009-2011\n\n<b>Created by serso aka se.solovyev</b>\n\n
|
||||||
Application web site: <a href="http://calculatorpp.com/forum/">http://calculatorpp.com/forum/</a>\n\n
|
Application web site: <a href="http://facebook.com/calculatorpp">http://facebook.com/calculatorpp</a>\n\n
|
||||||
This program is open source:\nall source code can be found on\n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
This program is open source:\nall source code can be found on\n<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
||||||
For more information please\ncontact the author by email\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>
|
For more information please\ncontact the author by email\n<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>
|
||||||
\nor visit\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
\nor visit\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
||||||
If you want to support the project\n\nyou can buy a special option from application preferences\n\n
|
If you want to support the project\n\nyou can buy a special option from application preferences\n\n
|
||||||
donate money via\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
If you like the application\nrank it with 5 stars in\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
If you like the application\nrank it with 5 stars in\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
||||||
Thanks to people who translate Calculator++ in different languages:\n
|
Thanks to people who translate Calculator++ in different languages:\n
|
||||||
Italian - Gabriele Ravanetti\n
|
Italian - Gabriele Ravanetti\n
|
||||||
@ -168,7 +167,7 @@
|
|||||||
|
|
||||||
<string name="c_release_notes_for_27">
|
<string name="c_release_notes_for_27">
|
||||||
Note from developer:\n\n
|
Note from developer:\n\n
|
||||||
I\'m glad to inform you that I\'ve started a forum for Calculator++: http://calculatorpp.com/forum/.\n
|
I\'m glad to inform you that I\'ve started a forum for Calculator++: http://facebook.com/calculatorpp.\n
|
||||||
Here you can find latest information about application, check for known issues, submit bugs or suggest new features.\n
|
Here you can find latest information about application, check for known issues, submit bugs or suggest new features.\n
|
||||||
You can use your social account to login (Facebook, Twitter or Google are supported).\n\n
|
You can use your social account to login (Facebook, Twitter or Google are supported).\n\n
|
||||||
1. Zoom buttons on graph plotter\n
|
1. Zoom buttons on graph plotter\n
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
|
||||||
~ For more information, please, contact se.solovyev@gmail.com
|
|
||||||
~ or visit http://se.solovyev.org
|
|
||||||
-->
|
|
||||||
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<string name="c_donate">Donate</string>
|
|
||||||
|
|
||||||
<string name="c_donate_text">You can thank the author of this program by email\n\n
|
|
||||||
<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n\n
|
|
||||||
buying a special option from application preferences\n\n
|
|
||||||
donating money via\n\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n\n
|
|
||||||
or setting 5 stars in\n\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>
|
|
||||||
</string>
|
|
||||||
|
|
||||||
</resources>
|
|
@ -190,7 +190,7 @@
|
|||||||
<string name="c_feedback_title">Feedback</string>
|
<string name="c_feedback_title">Feedback</string>
|
||||||
<string name="c_feedback_text">You have been using Calculator++ for some time \n
|
<string name="c_feedback_text">You have been using Calculator++ for some time \n
|
||||||
and it\'s important for us to know your opinion about application.\n\n
|
and it\'s important for us to know your opinion about application.\n\n
|
||||||
Please rate Calculator++ \non <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>,\n leave a comment or \ndiscuss application \non our <a href="http://calculatorpp.com/forum/">forum</a>
|
Please rate Calculator++ \non <a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>,\n leave a comment or \ndiscuss application \non <a href="http://facebook.com/calculatorpp">Facebook</a>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<string name="c_notespp_announce_text">Good news - I just released new application for Android called <a href="https://play.google.com/store/apps/details?id=org.solovyev.android.notes">Notes++</a>.\n
|
<string name="c_notespp_announce_text">Good news - I just released new application for Android called <a href="https://play.google.com/store/apps/details?id=org.solovyev.android.notes">Notes++</a>.\n
|
||||||
|
@ -8,16 +8,13 @@ package org.solovyev.android.calculator;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.Editable;
|
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.TextWatcher;
|
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.solovyev.android.calculator.text.TextProcessor;
|
import org.solovyev.android.calculator.text.TextProcessor;
|
||||||
import org.solovyev.android.calculator.view.TextHighlighter;
|
import org.solovyev.android.calculator.view.TextHighlighter;
|
||||||
import org.solovyev.android.view.AutoResizeTextView;
|
import org.solovyev.android.view.AutoResizeTextView;
|
||||||
import org.solovyev.common.text.StringUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User: serso
|
* User: serso
|
||||||
@ -68,18 +65,15 @@ public class AndroidCalculatorDisplayView extends AutoResizeTextView implements
|
|||||||
|
|
||||||
public AndroidCalculatorDisplayView(Context context) {
|
public AndroidCalculatorDisplayView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
this.addTextChangedListener(new TextWatcherImpl());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AndroidCalculatorDisplayView(Context context, AttributeSet attrs) {
|
public AndroidCalculatorDisplayView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
this.addTextChangedListener(new TextWatcherImpl());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AndroidCalculatorDisplayView(Context context, AttributeSet attrs, int defStyle) {
|
public AndroidCalculatorDisplayView(Context context, AttributeSet attrs, int defStyle) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
this.addTextChangedListener(new TextWatcherImpl());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -163,16 +157,6 @@ public class AndroidCalculatorDisplayView extends AutoResizeTextView implements
|
|||||||
resizeText();
|
resizeText();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void handleTextChange(Editable s) {
|
|
||||||
synchronized (lock) {
|
|
||||||
if (!viewStateChange) {
|
|
||||||
// external text change => need to notify display
|
|
||||||
// todo serso: implement
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized void init(@NotNull Context context) {
|
public synchronized void init(@NotNull Context context) {
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
this.setOnClickListener(new CalculatorDisplayOnClickListener(context));
|
this.setOnClickListener(new CalculatorDisplayOnClickListener(context));
|
||||||
@ -180,21 +164,4 @@ public class AndroidCalculatorDisplayView extends AutoResizeTextView implements
|
|||||||
this.initialized = true;
|
this.initialized = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class TextWatcherImpl implements TextWatcher {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterTextChanged(Editable s) {
|
|
||||||
handleTextChange(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -130,10 +130,6 @@ public class CalculatorActivity extends SherlockFragmentActivity implements Shar
|
|||||||
dialogShown = showSpecialWindow(preferences, CalculatorPreferences.Gui.feedbackWindowShown, R.layout.feedback, R.id.feedbackText, context);
|
dialogShown = showSpecialWindow(preferences, CalculatorPreferences.Gui.feedbackWindowShown, R.layout.feedback, R.id.feedbackText, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dialogShown) {
|
|
||||||
dialogShown = showSpecialWindow(preferences, CalculatorPreferences.Gui.notesppAnnounceShown, R.layout.notespp_announce, R.id.notespp_announce, context);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean showSpecialWindow(@NotNull SharedPreferences preferences, @NotNull Preference<Boolean> specialWindowShownPref, int layoutId, int textViewId, @NotNull Context context) {
|
private static boolean showSpecialWindow(@NotNull SharedPreferences preferences, @NotNull Preference<Boolean> specialWindowShownPref, int layoutId, int textViewId, @NotNull Context context) {
|
||||||
@ -316,8 +312,8 @@ public class CalculatorActivity extends SherlockFragmentActivity implements Shar
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"UnusedDeclaration"})
|
@SuppressWarnings({"UnusedDeclaration"})
|
||||||
public void donateButtonClickHandler(@NotNull View v) {
|
public void likeButtonClickHandler(@NotNull View v) {
|
||||||
CalculatorApplication.showDonationDialog(this);
|
CalculatorApplication.likeButtonPressed(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,16 +1,10 @@
|
|||||||
package org.solovyev.android.calculator;
|
package org.solovyev.android.calculator;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.text.method.LinkMovementMethod;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import net.robotmedia.billing.BillingController;
|
import net.robotmedia.billing.BillingController;
|
||||||
import org.acra.ACRA;
|
import org.acra.ACRA;
|
||||||
import org.acra.ReportingInteractionMode;
|
import org.acra.ReportingInteractionMode;
|
||||||
@ -25,6 +19,8 @@ import org.solovyev.android.calculator.model.AndroidCalculatorEngine;
|
|||||||
* Date: 12/1/11
|
* Date: 12/1/11
|
||||||
* Time: 1:21 PM
|
* Time: 1:21 PM
|
||||||
*/
|
*/
|
||||||
|
/*@ReportsCrashes(formKey = "dEhDaW1nZU1qcFdsVUpiSnhON0c0ZHc6MQ",
|
||||||
|
mode = ReportingInteractionMode.TOAST)*/
|
||||||
@ReportsCrashes(formKey = "",
|
@ReportsCrashes(formKey = "",
|
||||||
mailTo = "se.solovyev+programming+calculatorpp+crashes@gmail.com",
|
mailTo = "se.solovyev+programming+calculatorpp+crashes@gmail.com",
|
||||||
mode = ReportingInteractionMode.DIALOG,
|
mode = ReportingInteractionMode.DIALOG,
|
||||||
@ -33,7 +29,15 @@ import org.solovyev.android.calculator.model.AndroidCalculatorEngine;
|
|||||||
resDialogText = R.string.crash_dialog_text)
|
resDialogText = R.string.crash_dialog_text)
|
||||||
public class CalculatorApplication extends android.app.Application {
|
public class CalculatorApplication extends android.app.Application {
|
||||||
|
|
||||||
private static final String paypalDonateUrl = "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted";
|
/*
|
||||||
|
**********************************************************************
|
||||||
|
*
|
||||||
|
* CONSTANTS
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static final String FACEBOOK_APP_URL = "http://www.facebook.com/calculatorpp";
|
||||||
|
|
||||||
public static final String AD_FREE_PRODUCT_ID = "ad_free";
|
public static final String AD_FREE_PRODUCT_ID = "ad_free";
|
||||||
public static final String AD_FREE_P_KEY = "org.solovyev.android.calculator_ad_free";
|
public static final String AD_FREE_P_KEY = "org.solovyev.android.calculator_ad_free";
|
||||||
@ -43,14 +47,25 @@ public class CalculatorApplication extends android.app.Application {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private static CalculatorApplication instance;
|
private static CalculatorApplication instance;
|
||||||
|
|
||||||
|
/*
|
||||||
|
**********************************************************************
|
||||||
|
*
|
||||||
|
* CONSTRUCTORS
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
public CalculatorApplication() {
|
public CalculatorApplication() {
|
||||||
instance = this;
|
instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
/*
|
||||||
public static CalculatorApplication getInstance() {
|
**********************************************************************
|
||||||
return instance;
|
*
|
||||||
}
|
* METHODS
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
@ -86,11 +101,10 @@ public class CalculatorApplication extends android.app.Application {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
BillingController.registerObserver(new CalculatorBillingObserver(this));
|
BillingController.registerObserver(new CalculatorBillingObserver(this));
|
||||||
|
|
||||||
// init billing controller
|
// init billing controller
|
||||||
BillingController.checkBillingSupported(this);
|
BillingController.checkBillingSupported(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setTheme(@NotNull SharedPreferences preferences) {
|
private void setTheme(@NotNull SharedPreferences preferences) {
|
||||||
@ -98,29 +112,6 @@ public class CalculatorApplication extends android.app.Application {
|
|||||||
setTheme(theme.getThemeId());
|
setTheme(theme.getThemeId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showDonationDialog(@NotNull final Context context) {
|
|
||||||
final LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
|
|
||||||
final View view = layoutInflater.inflate(R.layout.donate, null);
|
|
||||||
|
|
||||||
final TextView donate = (TextView) view.findViewById(R.id.donateText);
|
|
||||||
donate.setMovementMethod(LinkMovementMethod.getInstance());
|
|
||||||
|
|
||||||
final AlertDialog.Builder builder = new AlertDialog.Builder(context)
|
|
||||||
.setCancelable(true)
|
|
||||||
.setNegativeButton(R.string.c_cancel, null)
|
|
||||||
.setPositiveButton(R.string.c_donate, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
final Intent i = new Intent(Intent.ACTION_VIEW);
|
|
||||||
i.setData(Uri.parse(paypalDonateUrl));
|
|
||||||
context.startActivity(i);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.setView(view);
|
|
||||||
|
|
||||||
builder.create().show();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public CalculatorActivityHelper createActivityHelper(int layoutResId, @NotNull String logTag) {
|
public CalculatorActivityHelper createActivityHelper(int layoutResId, @NotNull String logTag) {
|
||||||
return new CalculatorActivityHelperImpl(layoutResId, logTag);
|
return new CalculatorActivityHelperImpl(layoutResId, logTag);
|
||||||
@ -140,4 +131,20 @@ public class CalculatorApplication extends android.app.Application {
|
|||||||
return new CalculatorFragmentHelperImpl(layoutId, titleResId, listenersOnCreate);
|
return new CalculatorFragmentHelperImpl(layoutId, titleResId, listenersOnCreate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
**********************************************************************
|
||||||
|
*
|
||||||
|
* STATIC
|
||||||
|
*
|
||||||
|
**********************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static CalculatorApplication getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void likeButtonPressed(@NotNull final Context context) {
|
||||||
|
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(FACEBOOK_APP_URL)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,50 @@
|
|||||||
|
package org.solovyev.android.calculator;
|
||||||
|
|
||||||
|
import android.app.PendingIntent;
|
||||||
|
import android.util.Log;
|
||||||
|
import net.robotmedia.billing.IBillingObserver;
|
||||||
|
import net.robotmedia.billing.ResponseCode;
|
||||||
|
import net.robotmedia.billing.model.Transaction;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User: serso
|
||||||
|
* Date: 10/10/12
|
||||||
|
* Time: 12:27 AM
|
||||||
|
*/
|
||||||
|
class LoggingBillingObserver implements IBillingObserver {
|
||||||
|
@Override
|
||||||
|
public void onCheckBillingSupportedResponse(boolean supported) {
|
||||||
|
Log.d("CalculatorppBilling", "onCheckBillingSupportedResponse");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPurchaseIntentOK(@NotNull String productId, @NotNull PendingIntent purchaseIntent) {
|
||||||
|
Log.d("CalculatorppBilling", "onPurchaseIntentOK");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPurchaseIntentFailure(@NotNull String productId, @NotNull ResponseCode responseCode) {
|
||||||
|
Log.d("CalculatorppBilling", "onPurchaseIntentFailure");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPurchaseStateChanged(@NotNull String productId, @NotNull Transaction.PurchaseState state) {
|
||||||
|
Log.d("CalculatorppBilling", "onPurchaseStateChanged");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPurchaseResponse(@NotNull String productId, @NotNull ResponseCode response) {
|
||||||
|
Log.d("CalculatorppBilling", "onRequestPurchaseResponse");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTransactionsRestored() {
|
||||||
|
Log.d("CalculatorppBilling", "onTransactionsRestored");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onErrorRestoreTransactions(@NotNull ResponseCode responseCode) {
|
||||||
|
Log.d("CalculatorppBilling", "onErrorRestoreTransactions");
|
||||||
|
}
|
||||||
|
}
|
@ -87,7 +87,7 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul
|
|||||||
private Input input;
|
private Input input;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private CalculatorEventData lastCalculatorEventData = CalculatorUtils.createFirstEventDataId();
|
private final CalculatorEventHolder lastEventHolder = new CalculatorEventHolder(CalculatorUtils.createFirstEventDataId());
|
||||||
|
|
||||||
private int bgColor;
|
private int bgColor;
|
||||||
|
|
||||||
@ -355,13 +355,12 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul
|
|||||||
public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable final Object data) {
|
public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable final Object data) {
|
||||||
if (calculatorEventType.isOfType(CalculatorEventType.display_state_changed)) {
|
if (calculatorEventType.isOfType(CalculatorEventType.display_state_changed)) {
|
||||||
if (!preparedInput.isFromInputArgs()) {
|
if (!preparedInput.isFromInputArgs()) {
|
||||||
if (calculatorEventData.isAfter(this.lastCalculatorEventData)) {
|
|
||||||
this.lastCalculatorEventData = calculatorEventData;
|
|
||||||
|
|
||||||
|
final CalculatorEventHolder.Result result = this.lastEventHolder.apply(calculatorEventData);
|
||||||
|
if (result.isNewAfter()) {
|
||||||
this.preparedInput = prepareInputFromDisplay(((CalculatorDisplayChangeEventData) data).getNewValue(), null);
|
this.preparedInput = prepareInputFromDisplay(((CalculatorDisplayChangeEventData) data).getNewValue(), null);
|
||||||
createChart();
|
createChart();
|
||||||
|
|
||||||
|
|
||||||
uiHandler.post(new Runnable() {
|
uiHandler.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@ -372,6 +371,7 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|