Changes
| @@ -13,10 +13,7 @@ import static org.solovyev.android.calculator.CalculatorEventType.*; | ||||
| public class CalculatorDisplayImpl implements CalculatorDisplay { | ||||
|  | ||||
|     @NotNull | ||||
|     private volatile CalculatorEventData lastCalculatorEventData; | ||||
|  | ||||
|     @NotNull | ||||
|     private final Object lastCalculatorEventDataLock = new Object(); | ||||
|     private final CalculatorEventHolder lastEvent; | ||||
|  | ||||
|     @Nullable | ||||
|     private CalculatorDisplayView view; | ||||
| @@ -32,7 +29,7 @@ public class CalculatorDisplayImpl implements CalculatorDisplay { | ||||
|  | ||||
|     public CalculatorDisplayImpl(@NotNull Calculator calculator) { | ||||
|         this.calculator = calculator; | ||||
|         this.lastCalculatorEventData = CalculatorUtils.createFirstEventDataId(); | ||||
|         this.lastEvent = new CalculatorEventHolder(CalculatorUtils.createFirstEventDataId()); | ||||
|         this.calculator.addCalculatorEventListener(this); | ||||
|     } | ||||
|  | ||||
| @@ -91,9 +88,7 @@ public class CalculatorDisplayImpl implements CalculatorDisplay { | ||||
|     @Override | ||||
|     @NotNull | ||||
|     public CalculatorEventData getLastEventData() { | ||||
|         synchronized (lastCalculatorEventDataLock) { | ||||
|             return lastCalculatorEventData; | ||||
|         } | ||||
|         return lastEvent.getLastEventData(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -102,18 +97,9 @@ public class CalculatorDisplayImpl implements CalculatorDisplay { | ||||
|                                   @Nullable Object data) { | ||||
|         if (calculatorEventType.isOfType(calculation_result, calculation_failed, calculation_cancelled, conversion_result, conversion_failed)) { | ||||
|  | ||||
|             boolean processEvent = false; | ||||
|             boolean sameSequence = false; | ||||
|             final CalculatorEventHolder.Result result = lastEvent.apply(calculatorEventData); | ||||
|  | ||||
|             synchronized (lastCalculatorEventDataLock) { | ||||
|                 if (calculatorEventData.isAfter(lastCalculatorEventData)) { | ||||
|                     sameSequence = calculatorEventData.isSameSequence(lastCalculatorEventData); | ||||
|                     lastCalculatorEventData = calculatorEventData; | ||||
|                     processEvent = true; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (processEvent) { | ||||
|             if (result.isNewAfter()) { | ||||
|                 switch (calculatorEventType) { | ||||
|                     case conversion_failed: | ||||
|                         processConversationFailed((CalculatorConversionEventData) calculatorEventData, (ConversionFailure) data); | ||||
|   | ||||
| @@ -26,12 +26,16 @@ public class CalculatorEditorImpl implements CalculatorEditor { | ||||
|     @NotNull | ||||
|     private final Calculator calculator; | ||||
|  | ||||
|     @NotNull | ||||
|     private final CalculatorEventHolder lastEventHolder; | ||||
|  | ||||
|     @NotNull | ||||
|     private final CursorControlAdapter cursorControlAdapter = new CursorControlAdapter(this); | ||||
|  | ||||
|     public CalculatorEditorImpl(@NotNull Calculator calculator) { | ||||
|         this.calculator = calculator; | ||||
|         this.calculator.addCalculatorEventListener(this); | ||||
|         this.lastEventHolder = new CalculatorEventHolder(CalculatorUtils.createFirstEventDataId()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -80,6 +84,9 @@ public class CalculatorEditorImpl implements CalculatorEditor { | ||||
|     public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, | ||||
|                                   @NotNull CalculatorEventType calculatorEventType, | ||||
|                                   @Nullable Object data) { | ||||
|         final CalculatorEventHolder.Result result = lastEventHolder.apply(calculatorEventData); | ||||
|  | ||||
|         if (result.isNewAfter()) { | ||||
|             switch (calculatorEventType) { | ||||
|                 case use_history_state: | ||||
|                     final CalculatorHistoryState calculatorHistoryState = (CalculatorHistoryState)data; | ||||
| @@ -88,6 +95,7 @@ public class CalculatorEditorImpl implements CalculatorEditor { | ||||
|                     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 { | ||||
|  | ||||
|     // in seconds | ||||
|     public static final int TIMEOUT = 1000; | ||||
|     public static final int TIMEOUT = 1; | ||||
|  | ||||
|     public static void staticSetUp() throws Exception { | ||||
|         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); | ||||
|         try { | ||||
|             calculator.addCalculatorEventListener(calculatorEventListener); | ||||
|  | ||||
|             calculatorEventListener.setCalculatorEventData(calculator.evaluate(operation, expression)); | ||||
|  | ||||
|             if (latch.await(TIMEOUT, TimeUnit.SECONDS)) { | ||||
| @@ -100,6 +101,11 @@ public class CalculatorTestUtils { | ||||
|  | ||||
|                     result = displayChange.getNewValue(); | ||||
|  | ||||
|                     try { | ||||
|                         // need to sleep a little bit as await | ||||
|                         new CountDownLatch(1).await(100, TimeUnit.MILLISECONDS); | ||||
|                     } catch (InterruptedException e) { | ||||
|                     } | ||||
|                     latch.countDown(); | ||||
|                 } | ||||
|             } | ||||
|   | ||||
| @@ -1,6 +1,5 @@ | ||||
| <?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" | ||||
|           package="org.solovyev.android.calculator"> | ||||
| <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"> | ||||
|  | ||||
|     <uses-permission android:name="android.permission.VIBRATE"/> | ||||
|     <uses-permission android:name="android.permission.INTERNET"/> | ||||
| @@ -9,7 +8,7 @@ | ||||
|  | ||||
|     <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"> | ||||
|  | ||||
| @@ -21,7 +20,7 @@ | ||||
|         </activity> | ||||
|  | ||||
|         <!-- 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"/> | ||||
|  | ||||
| @@ -38,7 +37,7 @@ | ||||
|         <activity android:label="@string/c_plot_graph" android:name=".plot.CalculatorPlotActivity"/> | ||||
|  | ||||
|         <!-- 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"/> | ||||
|  | ||||
| @@ -51,11 +50,7 @@ | ||||
|             </intent-filter> | ||||
|         </receiver> | ||||
|  | ||||
|         <activity android:name="org.acra.CrashReportDialog" | ||||
|                   android:theme="@style/Theme.Sherlock.Dialog" | ||||
|                   android:launchMode="singleInstance" | ||||
|                   android:excludeFromRecents="true" | ||||
|                   android:finishOnTaskLaunch="true" /> | ||||
|         <activity android:excludeFromRecents="true" android:finishOnTaskLaunch="true" android:launchMode="singleInstance" android:name="org.acra.CrashReportDialog" android:theme="@style/Theme.Sherlock.Dialog"/> | ||||
|  | ||||
|     </application> | ||||
| </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> | ||||
|  | ||||
|                             <proguard> | ||||
|                                 <skip>true</skip> | ||||
|                                 <skip>false</skip> | ||||
|                             </proguard> | ||||
|                         </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" | ||||
| 			 a:id="@+id/pasteButton" | ||||
| 			 a:drawableTop="@drawable/kb_heart" | ||||
| 			 a:id="@+id/likeButton" | ||||
| 			 a:drawableTop="@drawable/kb_facebook" | ||||
| 			 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 | ||||
| 		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 | ||||
| 		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 | ||||
| 		Gracias a las personas que han traducido Calculadora++ a los diferentes idiomas:\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 | ||||
| 		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 | ||||
| 		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 | ||||
| 		Grazie a persone che traducono Calculator++ in diverse lingue:\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_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="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 | ||||
| 		перевести средства через \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\n | ||||
| 		Если вам понравилось приложение -\nпоставьте 5 звёздочек в\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n | ||||
| 		Спасибо тем, кто переводил Калькулятор++:\n | ||||
| 		на итальянский - Gabriele Ravanetti\n | ||||
| @@ -169,7 +168,7 @@ | ||||
|  | ||||
| 	<string name="c_release_notes_for_27"> | ||||
| 		От разработчика:\n\n | ||||
| 		Я рад сообщить, что у Калькулятора++ появился собственный форум: http://calculatorpp.com/forum/.\n | ||||
| 		Я рад сообщить, что у Калькулятора++ появился собственный форум: http://facebook.com/calculatorpp.\n | ||||
| 		Здесь вы можете найти всю последнюю информацию о приложении, узнать об известных проблемах и внести свои предложения.\n | ||||
| 		Для входа вы можете использовать аккаунт социальной сети (Facebook, Twitter или Google).\n\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_text">Вы используете Калькулятор++ некоторое время\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 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_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<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 | ||||
| 		переказати гроші через \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\n | ||||
| 		Якщо вам сподобалася програма,\n то оцініть її у 5 зірочок на\n<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n | ||||
| 		Дякую усім, хто переклав Калькулятор++ на інші мови:\n | ||||
| 		італійську - Gabriele Ravanetti\n | ||||
| @@ -168,7 +167,7 @@ | ||||
|  | ||||
| 	<string name="c_release_notes_for_27"> | ||||
| 		Від розробника:\n\n | ||||
| 		Я радий повідомити Вас, що запустив форум для Калькулятор++: http://calculatorpp.com/forum/.\n | ||||
| 		Я радий повідомити Вас, що запустив форум для Калькулятор++: http://facebook.com/calculatorpp.\n | ||||
| 		Тут ви можете знайти усю останню інформацію про програму, дізнатися про відомі проблеми та внести свої пропозиції.\n | ||||
| 		Для входу ви можете скористатися обліковим записом соціальної мережі (Facebook, Twitter or Google are supported).\n\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_text">Ви вже використовуєте Калькулятор++ деякий час \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 name="c_angle_units_changed_to">Одиниці виміру кутів змінено на \'%s\'!</string> | ||||
|   | ||||
| @@ -9,12 +9,11 @@ | ||||
| 	<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 | ||||
| 		程式網站: <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="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您可以從程式設定頁面中購買一個特別的選項\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 | ||||
| 		感謝以下 Calculator++ 的翻譯者:\n | ||||
| 		義大利文 - Gabriele Ravanetti\n | ||||
| @@ -166,7 +165,7 @@ | ||||
|  | ||||
| 	<string name="c_release_notes_for_27"> | ||||
| 		來自開發者的訊息:\n\n | ||||
| 		我很高興可以通知您, 我創立了一個 Calculator++ 的論壇: http://calculatorpp.com/forum/.\n | ||||
| 		我很高興可以通知您, 我創立了一個 Calculator++ 的論壇: http://facebook.com/calculatorpp.\n | ||||
| 		您可以在這裡找到程式最新的資訊、檢查已知問題、提報錯誤和建議新功能.\n | ||||
| 		您可以使用常用社群網站的帳號登入 (可用 Facebook, Twitter 和 Google).\n\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_text">您已使用 Calculator++ 一段時間了 \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 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_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 | ||||
| 		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 | ||||
| 		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 | ||||
| 		Thanks to people who translate Calculator++ in different languages:\n | ||||
| 		Italian - Gabriele Ravanetti\n | ||||
| @@ -168,7 +167,7 @@ | ||||
|  | ||||
| 	<string name="c_release_notes_for_27"> | ||||
| 		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 | ||||
| 		You can use your social account to login (Facebook, Twitter or Google are supported).\n\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_text">You have been using Calculator++ for some time \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 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.graphics.Color; | ||||
| import android.os.Handler; | ||||
| import android.text.Editable; | ||||
| import android.text.Html; | ||||
| import android.text.TextWatcher; | ||||
| import android.util.AttributeSet; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
| import org.solovyev.android.calculator.text.TextProcessor; | ||||
| import org.solovyev.android.calculator.view.TextHighlighter; | ||||
| import org.solovyev.android.view.AutoResizeTextView; | ||||
| import org.solovyev.common.text.StringUtils; | ||||
|  | ||||
| /** | ||||
|  * User: serso | ||||
| @@ -68,18 +65,15 @@ public class AndroidCalculatorDisplayView extends AutoResizeTextView implements | ||||
|  | ||||
|     public AndroidCalculatorDisplayView(Context context) { | ||||
|         super(context); | ||||
|         this.addTextChangedListener(new TextWatcherImpl()); | ||||
|     } | ||||
|  | ||||
|     public AndroidCalculatorDisplayView(Context context, AttributeSet attrs) { | ||||
|         super(context, attrs); | ||||
|         this.addTextChangedListener(new TextWatcherImpl()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     public AndroidCalculatorDisplayView(Context context, AttributeSet attrs, int defStyle) { | ||||
|         super(context, attrs, defStyle); | ||||
|         this.addTextChangedListener(new TextWatcherImpl()); | ||||
|     } | ||||
|  | ||||
|     /* | ||||
| @@ -163,16 +157,6 @@ public class AndroidCalculatorDisplayView extends AutoResizeTextView implements | ||||
|         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) { | ||||
|         if (!initialized) { | ||||
|             this.setOnClickListener(new CalculatorDisplayOnClickListener(context)); | ||||
| @@ -180,21 +164,4 @@ public class AndroidCalculatorDisplayView extends AutoResizeTextView implements | ||||
|             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); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         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) { | ||||
| @@ -316,8 +312,8 @@ public class CalculatorActivity extends SherlockFragmentActivity implements Shar | ||||
|     } | ||||
|  | ||||
|     @SuppressWarnings({"UnusedDeclaration"}) | ||||
|     public void donateButtonClickHandler(@NotNull View v) { | ||||
|         CalculatorApplication.showDonationDialog(this); | ||||
|     public void likeButtonClickHandler(@NotNull View v) { | ||||
|         CalculatorApplication.likeButtonPressed(this); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,16 +1,10 @@ | ||||
| package org.solovyev.android.calculator; | ||||
|  | ||||
| import android.app.AlertDialog; | ||||
| import android.content.Context; | ||||
| import android.content.DialogInterface; | ||||
| import android.content.Intent; | ||||
| import android.content.SharedPreferences; | ||||
| import android.net.Uri; | ||||
| 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 org.acra.ACRA; | ||||
| import org.acra.ReportingInteractionMode; | ||||
| @@ -25,6 +19,8 @@ import org.solovyev.android.calculator.model.AndroidCalculatorEngine; | ||||
|  * Date: 12/1/11 | ||||
|  * Time: 1:21 PM | ||||
|  */ | ||||
| /*@ReportsCrashes(formKey = "dEhDaW1nZU1qcFdsVUpiSnhON0c0ZHc6MQ", | ||||
|         mode = ReportingInteractionMode.TOAST)*/ | ||||
| @ReportsCrashes(formKey = "", | ||||
|         mailTo = "se.solovyev+programming+calculatorpp+crashes@gmail.com", | ||||
|         mode = ReportingInteractionMode.DIALOG, | ||||
| @@ -33,7 +29,15 @@ import org.solovyev.android.calculator.model.AndroidCalculatorEngine; | ||||
|         resDialogText = R.string.crash_dialog_text) | ||||
| 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_P_KEY = "org.solovyev.android.calculator_ad_free"; | ||||
| @@ -43,14 +47,25 @@ public class CalculatorApplication extends android.app.Application { | ||||
|     @NotNull | ||||
|     private static CalculatorApplication instance; | ||||
|  | ||||
|     /* | ||||
|     ********************************************************************** | ||||
|     * | ||||
|     *                           CONSTRUCTORS | ||||
|     * | ||||
|     ********************************************************************** | ||||
|     */ | ||||
|  | ||||
|     public CalculatorApplication() { | ||||
|         instance = this; | ||||
|     } | ||||
|  | ||||
|     @NotNull | ||||
|     public static CalculatorApplication getInstance() { | ||||
|         return instance; | ||||
|     } | ||||
|     /* | ||||
|     ********************************************************************** | ||||
|     * | ||||
|     *                           METHODS | ||||
|     * | ||||
|     ********************************************************************** | ||||
|     */ | ||||
|  | ||||
|     @Override | ||||
|     public void onCreate() { | ||||
| @@ -86,11 +101,10 @@ public class CalculatorApplication extends android.app.Application { | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|  | ||||
|         BillingController.registerObserver(new CalculatorBillingObserver(this)); | ||||
|  | ||||
|         // init billing controller | ||||
|         BillingController.checkBillingSupported(this); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     private void setTheme(@NotNull SharedPreferences preferences) { | ||||
| @@ -98,29 +112,6 @@ public class CalculatorApplication extends android.app.Application { | ||||
|         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 | ||||
|     public CalculatorActivityHelper createActivityHelper(int layoutResId, @NotNull String logTag) { | ||||
|        return new CalculatorActivityHelperImpl(layoutResId, logTag); | ||||
| @@ -140,4 +131,20 @@ public class CalculatorApplication extends android.app.Application { | ||||
|         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; | ||||
|  | ||||
|     @NotNull | ||||
|     private CalculatorEventData lastCalculatorEventData = CalculatorUtils.createFirstEventDataId(); | ||||
|     private final CalculatorEventHolder lastEventHolder = new CalculatorEventHolder(CalculatorUtils.createFirstEventDataId()); | ||||
|  | ||||
|     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) { | ||||
|         if (calculatorEventType.isOfType(CalculatorEventType.display_state_changed)) { | ||||
|             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); | ||||
|                     createChart(); | ||||
|  | ||||
|  | ||||
|                     uiHandler.post(new Runnable() { | ||||
|                         @Override | ||||
|                         public void run() { | ||||
| @@ -372,6 +371,7 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul | ||||
|                         } | ||||
|                     }); | ||||
|                 } | ||||
|  | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   | ||||
 Sergey Solovyev
					Sergey Solovyev