From 1c6651bd4bdcb99ffbbdc8cc72965f2aa440a990 Mon Sep 17 00:00:00 2001 From: serso Date: Mon, 2 May 2016 13:57:29 +0200 Subject: [PATCH] Move grouping separator preference to Output section --- .../solovyev/android/calculator/Engine.java | 14 ++++---- .../android/calculator/Preferences.java | 8 +++-- .../android/calculator/history/History.java | 26 ++++++++++----- .../preferences/NumberFormatPreference.java | 4 +-- .../calculator/history/HistoryTest.java | 32 ++++++++++++++----- 5 files changed, 57 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/org/solovyev/android/calculator/Engine.java b/app/src/main/java/org/solovyev/android/calculator/Engine.java index dae12ad4..2820e4a0 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Engine.java +++ b/app/src/main/java/org/solovyev/android/calculator/Engine.java @@ -174,13 +174,15 @@ public class Engine implements SharedPreferences.OnSharedPreferenceChangeListene } final SharedPreferences.Editor editor = preferences.edit(); if (oldVersion == 0) { - migratePreference(preferences, Preferences.groupingSeparator, "org.solovyev.android.calculator.CalculatorActivity_calc_grouping_separator", editor); + migratePreference(preferences, Preferences.Output.separator, "org.solovyev.android.calculator.CalculatorActivity_calc_grouping_separator", editor); migratePreference(preferences, Preferences.multiplicationSign, "org.solovyev.android.calculator.CalculatorActivity_calc_multiplication_sign", editor); migratePreference(preferences, Preferences.numeralBase, "org.solovyev.android.calculator.CalculatorActivity_numeral_bases", editor); migratePreference(preferences, Preferences.angleUnit, "org.solovyev.android.calculator.CalculatorActivity_angle_units", editor); migratePreference(preferences, Preferences.Output.precision, "org.solovyev.android.calculator.CalculatorModel_result_precision", editor); migratePreference(preferences, Preferences.Output.scientificNotation, "calculation.output.science_notation", editor); migratePreference(preferences, Preferences.Output.round, "org.solovyev.android.calculator.CalculatorModel_round_result", editor); + } else if (oldVersion == 1) { + migratePreference(preferences, Preferences.Output.separator, "engine.groupingSeparator", editor); } Preferences.version.putDefault(editor); editor.apply(); @@ -211,7 +213,7 @@ public class Engine implements SharedPreferences.OnSharedPreferenceChangeListene mathEngine.setScienceNotation(Preferences.Output.scientificNotation.getPreference(preferences)); mathEngine.setRoundResult(Preferences.Output.round.getPreference(preferences)); - final String groupingSeparator = Preferences.groupingSeparator.getPreference(preferences); + final String groupingSeparator = Preferences.Output.separator.getPreference(preferences); if (TextUtils.isEmpty(groupingSeparator)) { mathEngine.setUseGroupingSeparator(false); } else { @@ -260,16 +262,13 @@ public class Engine implements SharedPreferences.OnSharedPreferenceChangeListene } public static class Preferences { - // todo serso: move to Output - public static final StringPreference groupingSeparator = StringPreference.of("engine.groupingSeparator", String.valueOf(JsclMathEngine.GROUPING_SEPARATOR_DEFAULT)); public static final StringPreference multiplicationSign = StringPreference.of("engine.multiplicationSign", "×"); public static final StringPreference numeralBase = StringPreference.ofTypedValue("engine.numeralBase", "dec", EnumMapper.of(NumeralBase.class)); public static final StringPreference angleUnit = StringPreference.ofTypedValue("engine.angleUnit", "deg", EnumMapper.of(AngleUnit.class)); - public static final Preference version = IntegerPreference.of("engine.version", 1); + public static final Preference version = IntegerPreference.of("engine.version", 2); private static final List preferenceKeys = new ArrayList<>(); static { - preferenceKeys.add(groupingSeparator.getKey()); preferenceKeys.add(multiplicationSign.getKey()); preferenceKeys.add(numeralBase.getKey()); preferenceKeys.add(angleUnit.getKey()); @@ -277,6 +276,7 @@ public class Engine implements SharedPreferences.OnSharedPreferenceChangeListene preferenceKeys.add(Output.scientificNotation.getKey()); preferenceKeys.add(Output.round.getKey()); preferenceKeys.add(Output.notation.getKey()); + preferenceKeys.add(Output.separator.getKey()); } @Nonnull @@ -290,6 +290,8 @@ public class Engine implements SharedPreferences.OnSharedPreferenceChangeListene public static final BooleanPreference scientificNotation = BooleanPreference.of("engine.output.scientificNotation", false); public static final BooleanPreference round = BooleanPreference.of("engine.output.round", true); public static final StringPreference notation = StringPreference.ofEnum("engine.output.notation", Notation.dec, Notation.class); + public static final StringPreference separator = StringPreference.of("engine.output.separator", String.valueOf(JsclMathEngine.GROUPING_SEPARATOR_DEFAULT)); + } } } diff --git a/app/src/main/java/org/solovyev/android/calculator/Preferences.java b/app/src/main/java/org/solovyev/android/calculator/Preferences.java index 0622d50e..ceb7629a 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Preferences.java +++ b/app/src/main/java/org/solovyev/android/calculator/Preferences.java @@ -53,6 +53,8 @@ import java.util.EnumMap; import java.util.Locale; import java.util.Map; +import jscl.JsclMathEngine; + import static org.solovyev.android.prefs.IntegerPreference.DEF_VALUE; public final class Preferences { @@ -108,7 +110,7 @@ public final class Preferences { } private static void setInitialDefaultValues(@Nonnull Application application, @Nonnull SharedPreferences preferences, @Nonnull SharedPreferences.Editor editor) { - if (!Engine.Preferences.groupingSeparator.isSet(preferences)) { + if (!Engine.Preferences.Output.separator.isSet(preferences)) { final Locale locale = Locale.getDefault(); if (locale != null) { final DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(locale); @@ -117,10 +119,10 @@ public final class Preferences { if (index >= 0) { groupingSeparator = MathType.grouping_separator.getTokens().get(index); } else { - groupingSeparator = " "; + groupingSeparator = String.valueOf(JsclMathEngine.GROUPING_SEPARATOR_DEFAULT); } - Engine.Preferences.groupingSeparator.putPreference(editor, groupingSeparator); + Engine.Preferences.Output.separator.putPreference(editor, groupingSeparator); } } diff --git a/app/src/main/java/org/solovyev/android/calculator/history/History.java b/app/src/main/java/org/solovyev/android/calculator/history/History.java index e4b90a9f..16d5fbac 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/History.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/History.java @@ -27,22 +27,26 @@ import android.content.SharedPreferences; import android.os.Handler; import android.support.annotation.NonNull; import android.text.TextUtils; + import com.google.common.base.Strings; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; + import org.json.JSONArray; import org.json.JSONException; import org.solovyev.android.Check; -import org.solovyev.android.calculator.*; +import org.solovyev.android.calculator.AppModule; +import org.solovyev.android.calculator.Calculator; +import org.solovyev.android.calculator.Display; +import org.solovyev.android.calculator.DisplayState; +import org.solovyev.android.calculator.Editor; +import org.solovyev.android.calculator.EditorState; import org.solovyev.android.calculator.Engine.Preferences; +import org.solovyev.android.calculator.ErrorReporter; +import org.solovyev.android.calculator.Runnables; import org.solovyev.android.calculator.json.Json; import org.solovyev.android.io.FileSystem; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -51,6 +55,12 @@ import java.util.LinkedList; import java.util.List; import java.util.concurrent.Executor; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + import static android.text.TextUtils.isEmpty; @Singleton @@ -302,7 +312,7 @@ public class History { final List result = new LinkedList<>(); - final String groupingSeparator = Preferences.groupingSeparator.getPreference(preferences); + final String separator = Preferences.Output.separator.getPreference(preferences); final List states = recent.asList(); final int statesCount = states.size(); @@ -312,7 +322,7 @@ public class History { final HistoryState newerState = states.get(i); final String olderText = olderState.editor.getTextString(); final String newerText = newerState.editor.getTextString(); - if (streak >= MAX_INTERMEDIATE_STREAK || !isIntermediate(olderText, newerText, groupingSeparator)) { + if (streak >= MAX_INTERMEDIATE_STREAK || !isIntermediate(olderText, newerText, separator)) { result.add(0, olderState); streak = 0; } else { diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/NumberFormatPreference.java b/app/src/main/java/org/solovyev/android/calculator/preferences/NumberFormatPreference.java index d5ecf45f..e4cbaee7 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/NumberFormatPreference.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/NumberFormatPreference.java @@ -71,7 +71,7 @@ public class NumberFormatPreference extends DialogPreference { separatorAdapter = makeSeparatorAdapter(); separatorSpinner.setAdapter(separatorAdapter); - separatorSpinner.setSelection(indexOf(separatorAdapter, Engine.Preferences.groupingSeparator.getPreference(preferences))); + separatorSpinner.setSelection(indexOf(separatorAdapter, Output.separator.getPreference(preferences))); } @Override @@ -83,7 +83,7 @@ public class NumberFormatPreference extends DialogPreference { final SharedPreferences.Editor editor = getSharedPreferences().edit(); Output.precision.putPreference(editor, precisionSeekBar.getCurrentTick()); Output.notation.putPreference(editor, notationAdapter.getItem(notationSpinner.getSelectedItemPosition()).item); - Engine.Preferences.groupingSeparator.putPreference(editor, separatorAdapter.getItem(separatorSpinner.getSelectedItemPosition()).item); + Output.separator.putPreference(editor, separatorAdapter.getItem(separatorSpinner.getSelectedItemPosition()).item); editor.apply(); } diff --git a/app/src/test/java/org/solovyev/android/calculator/history/HistoryTest.java b/app/src/test/java/org/solovyev/android/calculator/history/HistoryTest.java index 0e9eef5d..3768d2f4 100644 --- a/app/src/test/java/org/solovyev/android/calculator/history/HistoryTest.java +++ b/app/src/test/java/org/solovyev/android/calculator/history/HistoryTest.java @@ -25,7 +25,9 @@ package org.solovyev.android.calculator.history; import android.content.SharedPreferences; import android.os.Handler; import android.os.Looper; + import com.squareup.otto.Bus; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -35,19 +37,33 @@ import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.solovyev.android.CalculatorTestRunner; -import org.solovyev.android.calculator.*; +import org.solovyev.android.calculator.BuildConfig; +import org.solovyev.android.calculator.Display; +import org.solovyev.android.calculator.DisplayState; +import org.solovyev.android.calculator.Editor; +import org.solovyev.android.calculator.EditorState; +import org.solovyev.android.calculator.Engine; +import org.solovyev.android.calculator.ErrorReporter; import org.solovyev.android.calculator.json.Json; import org.solovyev.android.io.FileSystem; -import javax.annotation.Nonnull; import java.io.File; import java.util.List; -import static org.junit.Assert.*; +import javax.annotation.Nonnull; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.*; -import static org.solovyev.android.calculator.Engine.Preferences.groupingSeparator; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import static org.solovyev.android.calculator.Tests.sameThreadExecutor; import static org.solovyev.android.calculator.jscl.JsclOperation.numeric; @@ -106,8 +122,8 @@ public class HistoryTest { @Test public void testRecentHistoryShouldTakeIntoAccountGroupingSeparator() throws Exception { - when(history.preferences.contains(eq(groupingSeparator.getKey()))).thenReturn(true); - when(history.preferences.getString(eq(groupingSeparator.getKey()), anyString())).thenReturn(" "); + when(history.preferences.contains(eq(Engine.Preferences.Output.separator.getKey()))).thenReturn(true); + when(history.preferences.getString(eq(Engine.Preferences.Output.separator.getKey()), anyString())).thenReturn(" "); addState("1"); addState("12"); addState("123"); @@ -119,7 +135,7 @@ public class HistoryTest { assertEquals("12 345", states.get(0).editor.getTextString()); history.clearRecent(); - when(history.preferences.getString(eq(groupingSeparator.getKey()), anyString())).thenReturn("'"); + when(history.preferences.getString(eq(Engine.Preferences.Output.separator.getKey()), anyString())).thenReturn("'"); addState("1"); addState("12"); addState("123");