From a49ca358af05640b7e9a3f1816c2c9cce5e676fa Mon Sep 17 00:00:00 2001 From: Sergey Solovyev Date: Thu, 4 Oct 2012 00:00:34 +0400 Subject: [PATCH] Changes --- calculatorpp/res/layout/help_faq_fragment.xml | 2 +- calculatorpp/res/values/text_strings.xml | 3 + calculatorpp/res/xml/preferences.xml | 372 ++++++------- .../android/calculator/CalculatorButtons.java | 487 +++++++++--------- .../calculator/CalculatorPreferences.java | 6 + .../about/CalculatorFragmentType.java | 4 +- .../model/AndroidCalculatorEngine.java | 2 +- .../plot/CalculatorPlotFragment.java | 42 +- .../android/calculator/plot/PlotUtils.java | 6 +- 9 files changed, 482 insertions(+), 442 deletions(-) diff --git a/calculatorpp/res/layout/help_faq_fragment.xml b/calculatorpp/res/layout/help_faq_fragment.xml index 859bdae3..5a54e407 100644 --- a/calculatorpp/res/layout/help_faq_fragment.xml +++ b/calculatorpp/res/layout/help_faq_fragment.xml @@ -18,7 +18,7 @@ style="?fragmentTitleStyle"/> + a:layout_height="wrap_content"> + Graph preferences + If checked complex graph will be plotted + Show complex graph \ No newline at end of file diff --git a/calculatorpp/res/xml/preferences.xml b/calculatorpp/res/xml/preferences.xml index 12fe7b25..0a3bc1fd 100644 --- a/calculatorpp/res/xml/preferences.xml +++ b/calculatorpp/res/xml/preferences.xml @@ -1,186 +1,188 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java index 142814f3..db0eeaa7 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java @@ -1,240 +1,247 @@ -package org.solovyev.android.calculator; - -import android.app.Activity; -import android.content.Context; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.preference.PreferenceManager; -import android.util.Log; -import android.view.MotionEvent; -import android.view.View; -import android.widget.Button; -import android.widget.Toast; -import jscl.AngleUnit; -import jscl.NumeralBase; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.solovyev.android.AndroidUtils; -import org.solovyev.android.calculator.model.AndroidCalculatorEngine; -import org.solovyev.android.calculator.view.AngleUnitsButton; -import org.solovyev.android.calculator.view.NumeralBasesButton; -import org.solovyev.android.view.ColorButton; -import org.solovyev.android.view.drag.DragButton; -import org.solovyev.android.view.drag.DragDirection; -import org.solovyev.android.view.drag.SimpleOnDragListener; -import org.solovyev.common.math.Point2d; - -/** - * User: serso - * Date: 9/28/12 - * Time: 12:06 AM - */ -public final class CalculatorButtons { - - private CalculatorButtons () { - } - - - public static void processButtons(boolean fixMagicFlames, - @NotNull CalculatorPreferences.Gui.Theme theme, - @NotNull View root) { - if (theme.getThemeType() == CalculatorPreferences.Gui.ThemeType.metro) { - - if (fixMagicFlames) { - // for metro themes we should turn off magic flames - AndroidUtils.processViewsOfType(root, ColorButton.class, new AndroidUtils.ViewProcessor() { - @Override - public void process(@NotNull ColorButton colorButton) { - colorButton.setDrawMagicFlame(false); - } - }); - } - } - } - - static void initMultiplicationButton(@NotNull View root) { - final View multiplicationButton = root.findViewById(R.id.multiplicationButton); - if ( multiplicationButton instanceof Button) { - ((Button) multiplicationButton).setText(CalculatorLocatorImpl.getInstance().getEngine().getMultiplicationSign()); - } - } - - - - public static void toggleEqualsButton(@Nullable SharedPreferences preferences, - @NotNull Activity activity) { - preferences = preferences == null ? PreferenceManager.getDefaultSharedPreferences(activity) : preferences; - - final boolean large = AndroidUtils.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE, activity.getResources().getConfiguration()); - - if (!large) { - if (AndroidUtils.getScreenOrientation(activity) == Configuration.ORIENTATION_PORTRAIT - || !CalculatorPreferences.Gui.autoOrientation.getPreference(preferences)) { - - final DragButton equalsButton = (DragButton)activity.findViewById(R.id.equalsButton); - if (equalsButton != null) { - if (CalculatorPreferences.Gui.showEqualsButton.getPreference(preferences)) { - equalsButton.setVisibility(View.VISIBLE); - final AndroidCalculatorDisplayView calculatorDisplayView = getCalculatorDisplayView(); - if (calculatorDisplayView != null) { - calculatorDisplayView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); - } - } else { - equalsButton.setVisibility(View.GONE); - // mobile phones - final AndroidCalculatorDisplayView calculatorDisplayView = getCalculatorDisplayView(); - if (calculatorDisplayView != null) { - calculatorDisplayView.setCompoundDrawablesWithIntrinsicBounds(activity.getResources().getDrawable(R.drawable.equals9), null, null, null); - } - } - } - } - } - } - - @Nullable - private static AndroidCalculatorDisplayView getCalculatorDisplayView() { - return (AndroidCalculatorDisplayView) CalculatorLocatorImpl.getInstance().getDisplay().getView(); - } - - /* - ********************************************************************** - * - * STATIC CLASSES - * - ********************************************************************** - */ - - static class RoundBracketsDragProcessor implements SimpleOnDragListener.DragProcessor { - @Override - public boolean processDragEvent(@NotNull DragDirection dragDirection, @NotNull DragButton dragButton, @NotNull Point2d startPoint2d, @NotNull MotionEvent motionEvent) { - final boolean result; - - if (dragDirection == DragDirection.left) { - getKeyboard().roundBracketsButtonPressed(); - result = true; - } else { - result = new DigitButtonDragProcessor(getKeyboard()).processDragEvent(dragDirection, dragButton, startPoint2d, motionEvent); - } - - return result; - } - } - - @NotNull - private static CalculatorKeyboard getKeyboard() { - return CalculatorLocatorImpl.getInstance().getKeyboard(); - } - - static class VarsDragProcessor implements SimpleOnDragListener.DragProcessor { - - @NotNull - private Context context; - - VarsDragProcessor(Context context) { - this.context = context; - } - - @Override - public boolean processDragEvent(@NotNull DragDirection dragDirection, - @NotNull DragButton dragButton, - @NotNull Point2d startPoint2d, - @NotNull MotionEvent motionEvent) { - boolean result = false; - - if (dragDirection == DragDirection.up) { - CalculatorActivityLauncher.createVar(context, CalculatorLocatorImpl.getInstance().getDisplay()); - result = true; - } - - return result; - } - } - - static class AngleUnitsChanger implements SimpleOnDragListener.DragProcessor { - - @NotNull - private final DigitButtonDragProcessor processor; - - @NotNull - private final Context context; - - AngleUnitsChanger(@NotNull Context context) { - this.context = context; - this.processor = new DigitButtonDragProcessor(CalculatorLocatorImpl.getInstance().getKeyboard()); - } - - @Override - public boolean processDragEvent(@NotNull DragDirection dragDirection, - @NotNull DragButton dragButton, - @NotNull Point2d startPoint2d, - @NotNull MotionEvent motionEvent) { - boolean result = false; - - if (dragButton instanceof AngleUnitsButton) { - if (dragDirection != DragDirection.left) { - final String directionText = ((AngleUnitsButton) dragButton).getText(dragDirection); - if (directionText != null) { - try { - - final AngleUnit angleUnits = AngleUnit.valueOf(directionText); - - final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - - AndroidCalculatorEngine.Preferences.angleUnit.putPreference(preferences, angleUnits); - - Toast.makeText(context, context.getString(R.string.c_angle_units_changed_to, angleUnits.name()), Toast.LENGTH_LONG).show(); - - result = true; - } catch (IllegalArgumentException e) { - Log.d(this.getClass().getName(), "Unsupported angle units: " + directionText); - } - } - } else if (dragDirection == DragDirection.left) { - result = processor.processDragEvent(dragDirection, dragButton, startPoint2d, motionEvent); - } - } - - return result; - } - } - - static class NumeralBasesChanger implements SimpleOnDragListener.DragProcessor { - - @NotNull - private final Context context; - - NumeralBasesChanger(@NotNull Context context) { - this.context = context; - } - - @Override - public boolean processDragEvent(@NotNull DragDirection dragDirection, - @NotNull DragButton dragButton, - @NotNull Point2d startPoint2d, - @NotNull MotionEvent motionEvent) { - boolean result = false; - - if (dragButton instanceof NumeralBasesButton) { - final String directionText = ((NumeralBasesButton) dragButton).getText(dragDirection); - if (directionText != null) { - try { - - final NumeralBase numeralBase = NumeralBase.valueOf(directionText); - - final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - AndroidCalculatorEngine.Preferences.numeralBase.putPreference(preferences, numeralBase); - - Toast.makeText(context, context.getString(R.string.c_numeral_base_changed_to, numeralBase.name()), Toast.LENGTH_LONG).show(); - - result = true; - } catch (IllegalArgumentException e) { - Log.d(this.getClass().getName(), "Unsupported numeral base: " + directionText); - } - } - } - - return result; - } - } -} +package org.solovyev.android.calculator; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.preference.PreferenceManager; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; +import jscl.AngleUnit; +import jscl.NumeralBase; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.solovyev.android.AndroidUtils; +import org.solovyev.android.calculator.model.AndroidCalculatorEngine; +import org.solovyev.android.calculator.view.AngleUnitsButton; +import org.solovyev.android.calculator.view.NumeralBasesButton; +import org.solovyev.android.view.ColorButton; +import org.solovyev.android.view.drag.DragButton; +import org.solovyev.android.view.drag.DragDirection; +import org.solovyev.android.view.drag.SimpleOnDragListener; +import org.solovyev.common.math.Point2d; + +/** + * User: serso + * Date: 9/28/12 + * Time: 12:06 AM + */ +public final class CalculatorButtons { + + private CalculatorButtons () { + } + + + public static void processButtons(boolean fixMagicFlames, + @NotNull CalculatorPreferences.Gui.Theme theme, + @NotNull View root) { + if (theme.getThemeType() == CalculatorPreferences.Gui.ThemeType.metro) { + + if (fixMagicFlames) { + // for metro themes we should turn off magic flames + AndroidUtils.processViewsOfType(root, ColorButton.class, new AndroidUtils.ViewProcessor() { + @Override + public void process(@NotNull ColorButton colorButton) { + colorButton.setDrawMagicFlame(false); + } + }); + } + } + } + + static void initMultiplicationButton(@NotNull View root) { + final View multiplicationButton = root.findViewById(R.id.multiplicationButton); + if ( multiplicationButton instanceof Button) { + ((Button) multiplicationButton).setText(CalculatorLocatorImpl.getInstance().getEngine().getMultiplicationSign()); + } + } + + + + public static void toggleEqualsButton(@Nullable SharedPreferences preferences, + @NotNull Activity activity) { + preferences = preferences == null ? PreferenceManager.getDefaultSharedPreferences(activity) : preferences; + + final boolean large = AndroidUtils.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE, activity.getResources().getConfiguration()); + + if (!large) { + if (AndroidUtils.getScreenOrientation(activity) == Configuration.ORIENTATION_PORTRAIT + || !CalculatorPreferences.Gui.autoOrientation.getPreference(preferences)) { + + final DragButton equalsButton = (DragButton)activity.findViewById(R.id.equalsButton); + if (equalsButton != null) { + if (CalculatorPreferences.Gui.showEqualsButton.getPreference(preferences)) { + equalsButton.setVisibility(View.VISIBLE); + final AndroidCalculatorDisplayView calculatorDisplayView = getCalculatorDisplayView(); + if (calculatorDisplayView != null) { + calculatorDisplayView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); + } + } else { + equalsButton.setVisibility(View.GONE); + // mobile phones + final AndroidCalculatorDisplayView calculatorDisplayView = getCalculatorDisplayView(); + if (calculatorDisplayView != null) { + calculatorDisplayView.setCompoundDrawablesWithIntrinsicBounds(activity.getResources().getDrawable(R.drawable.equals9), null, null, null); + } + } + } + } + } + } + + @Nullable + private static AndroidCalculatorDisplayView getCalculatorDisplayView() { + return (AndroidCalculatorDisplayView) CalculatorLocatorImpl.getInstance().getDisplay().getView(); + } + + /* + ********************************************************************** + * + * STATIC CLASSES + * + ********************************************************************** + */ + + static class RoundBracketsDragProcessor implements SimpleOnDragListener.DragProcessor { + @Override + public boolean processDragEvent(@NotNull DragDirection dragDirection, @NotNull DragButton dragButton, @NotNull Point2d startPoint2d, @NotNull MotionEvent motionEvent) { + final boolean result; + + if (dragDirection == DragDirection.left) { + getKeyboard().roundBracketsButtonPressed(); + result = true; + } else { + result = new DigitButtonDragProcessor(getKeyboard()).processDragEvent(dragDirection, dragButton, startPoint2d, motionEvent); + } + + return result; + } + } + + @NotNull + private static CalculatorKeyboard getKeyboard() { + return CalculatorLocatorImpl.getInstance().getKeyboard(); + } + + static class VarsDragProcessor implements SimpleOnDragListener.DragProcessor { + + @NotNull + private Context context; + + VarsDragProcessor(Context context) { + this.context = context; + } + + @Override + public boolean processDragEvent(@NotNull DragDirection dragDirection, + @NotNull DragButton dragButton, + @NotNull Point2d startPoint2d, + @NotNull MotionEvent motionEvent) { + boolean result = false; + + if (dragDirection == DragDirection.up) { + CalculatorActivityLauncher.createVar(context, CalculatorLocatorImpl.getInstance().getDisplay()); + result = true; + } + + return result; + } + } + + static class AngleUnitsChanger implements SimpleOnDragListener.DragProcessor { + + @NotNull + private final DigitButtonDragProcessor processor; + + @NotNull + private final Context context; + + AngleUnitsChanger(@NotNull Context context) { + this.context = context; + this.processor = new DigitButtonDragProcessor(CalculatorLocatorImpl.getInstance().getKeyboard()); + } + + @Override + public boolean processDragEvent(@NotNull DragDirection dragDirection, + @NotNull DragButton dragButton, + @NotNull Point2d startPoint2d, + @NotNull MotionEvent motionEvent) { + boolean result = false; + + if (dragButton instanceof AngleUnitsButton) { + if (dragDirection != DragDirection.left) { + final String directionText = ((AngleUnitsButton) dragButton).getText(dragDirection); + if (directionText != null) { + try { + + final AngleUnit angleUnits = AngleUnit.valueOf(directionText); + + final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + + final AngleUnit oldAngleUnits = AndroidCalculatorEngine.Preferences.angleUnit.getPreference(preferences); + if (oldAngleUnits != angleUnits) { + AndroidCalculatorEngine.Preferences.angleUnit.putPreference(preferences, angleUnits); + + Toast.makeText(context, context.getString(R.string.c_angle_units_changed_to, angleUnits.name()), Toast.LENGTH_LONG).show(); + } + + result = true; + } catch (IllegalArgumentException e) { + Log.d(this.getClass().getName(), "Unsupported angle units: " + directionText); + } + } + } else if (dragDirection == DragDirection.left) { + result = processor.processDragEvent(dragDirection, dragButton, startPoint2d, motionEvent); + } + } + + return result; + } + } + + static class NumeralBasesChanger implements SimpleOnDragListener.DragProcessor { + + @NotNull + private final Context context; + + NumeralBasesChanger(@NotNull Context context) { + this.context = context; + } + + @Override + public boolean processDragEvent(@NotNull DragDirection dragDirection, + @NotNull DragButton dragButton, + @NotNull Point2d startPoint2d, + @NotNull MotionEvent motionEvent) { + boolean result = false; + + if (dragButton instanceof NumeralBasesButton) { + final String directionText = ((NumeralBasesButton) dragButton).getText(dragDirection); + if (directionText != null) { + try { + + final NumeralBase numeralBase = NumeralBase.valueOf(directionText); + + final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + + final NumeralBase oldNumeralBase = AndroidCalculatorEngine.Preferences.numeralBase.getPreference(preferences); + if (oldNumeralBase != numeralBase) { + AndroidCalculatorEngine.Preferences.numeralBase.putPreference(preferences, numeralBase); + + Toast.makeText(context, context.getString(R.string.c_numeral_base_changed_to, numeralBase.name()), Toast.LENGTH_LONG).show(); + } + + result = true; + } catch (IllegalArgumentException e) { + Log.d(this.getClass().getName(), "Unsupported numeral base: " + directionText); + } + } + } + + return result; + } + } +} diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java index 0d2a418f..dd199437 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java @@ -97,6 +97,12 @@ public final class CalculatorPreferences { } } + public static class Graph { + public static final Preference showComplexGraph = new BooleanPreference("show_complex_graph", false); + + } + + static void setDefaultValues(@NotNull SharedPreferences preferences) { if (!AndroidCalculatorEngine.Preferences.groupingSeparator.isSet(preferences)) { final Locale locale = Locale.getDefault(); diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/about/CalculatorFragmentType.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/about/CalculatorFragmentType.java index 947ed850..693f660f 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/about/CalculatorFragmentType.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/about/CalculatorFragmentType.java @@ -29,10 +29,8 @@ public enum CalculatorFragmentType { variables(CalculatorVarsFragment.class, R.layout.vars_fragment, R.string.c_vars), functions(CalculatorFunctionsFragment.class, R.layout.math_entities_fragment, R.string.c_functions), operators(CalculatorOperatorsFragment.class, R.layout.math_entities_fragment, R.string.c_operators), - plotter(CalculatorPlotFragment.class, R.layout.plot_fragment, R.string.c_plot), + plotter(CalculatorPlotFragment.class, R.layout.plot_fragment, R.string.c_graph), about(CalculatorAboutFragment.class, R.layout.about_fragment, R.string.c_about), - - // todo serso: rename and inflate ad faq(CalculatorHelpFaqFragment.class, R.layout.help_faq_fragment, R.string.c_faq), hints(CalculatorHelpHintsFragment.class, R.layout.help_hints_fragment, R.string.c_hints), screens(CalculatorHelpScreensFragment.class, R.layout.help_screens_fragment, R.string.c_screens), diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java index da452259..14a8a772 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java @@ -163,7 +163,7 @@ public class AndroidCalculatorEngine implements CalculatorEngine, SharedPreferen @Override public void init() { synchronized (lock) { - calculatorEngine.init(); + reset(); } } diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/plot/CalculatorPlotFragment.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/plot/CalculatorPlotFragment.java index b3fd6a9d..b2c990c8 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/plot/CalculatorPlotFragment.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/plot/CalculatorPlotFragment.java @@ -6,9 +6,11 @@ package org.solovyev.android.calculator.plot; +import android.content.SharedPreferences; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; +import android.preference.PreferenceManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -56,7 +58,8 @@ public class CalculatorPlotFragment extends SherlockFragment implements Calculat private static final int DEFAULT_MAX_NUMBER = 10; - public static final String INPUT = "org.solovyev.android.calculator.CalculatorPlotActivity_input"; + public static final String INPUT = "plotter_input"; + private static final String PLOT_BOUNDARIES = "plot_boundaries"; public static final long EVAL_DELAY_MILLIS = 200; @@ -74,7 +77,7 @@ public class CalculatorPlotFragment extends SherlockFragment implements Calculat private Constant variable; @NotNull - private final CalculatorFragmentHelper fragmentHelper = CalculatorApplication.getInstance().createFragmentHelper(R.layout.plot_fragment, R.string.c_plot, false); + private final CalculatorFragmentHelper fragmentHelper = CalculatorApplication.getInstance().createFragmentHelper(R.layout.plot_fragment, R.string.c_graph, false); @NotNull private final Executor plotExecutor = Executors.newSingleThreadExecutor(); @@ -113,6 +116,8 @@ public class CalculatorPlotFragment extends SherlockFragment implements Calculat this.bgColor = getResources().getColor(android.R.color.transparent); prepareData(); } + + setRetainInstance(true); } private void createInputFromDisplayState(@NotNull CalculatorDisplayViewState displayState) { @@ -161,7 +166,25 @@ public class CalculatorPlotFragment extends SherlockFragment implements Calculat this.fragmentHelper.onViewCreated(this, root); - updateGraphicalView(root); + + PlotBoundaries plotBoundaries = null; + /*if ( savedInstanceState != null ) { + final Object object = savedInstanceState.getSerializable(PLOT_BOUNDARIES); + if ( object instanceof PlotBoundaries) { + plotBoundaries = ((PlotBoundaries) object); + } + }*/ + + updateGraphicalView(root, plotBoundaries); + } + + @Override + public void onSaveInstanceState(Bundle out) { + super.onSaveInstanceState(out); + + /*if (chart != null) { + out.putSerializable(PLOT_BOUNDARIES, new PlotBoundaries(chart.getRenderer())); + }*/ } @Override @@ -172,7 +195,7 @@ public class CalculatorPlotFragment extends SherlockFragment implements Calculat if ( !inputFromArgs ) { createInputFromDisplayState(CalculatorLocatorImpl.getInstance().getDisplay().getViewState()); - updateGraphicalView(getView()); + updateGraphicalView(getView(), null); } } @@ -183,11 +206,9 @@ public class CalculatorPlotFragment extends SherlockFragment implements Calculat super.onPause(); } - private void updateGraphicalView(@NotNull View root) { + private void updateGraphicalView(@NotNull View root, @Nullable PlotBoundaries plotBoundaries) { if (input != null) { - // todo serso - final Object lastNonConfigurationInstance = null;//getLastNonConfigurationInstance(); - setGraphicalView(root, lastNonConfigurationInstance instanceof PlotBoundaries ? (PlotBoundaries) lastNonConfigurationInstance : null); + setGraphicalView(root, plotBoundaries); } else { Toast.makeText(this.getActivity(), "Plot is not possible!", Toast.LENGTH_LONG).show(); } @@ -282,6 +303,9 @@ public class CalculatorPlotFragment extends SherlockFragment implements Calculat } private void updateDataSets(@NotNull final XYChart chart, long millisToWait) { + final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this.getActivity()); + final boolean showComplexGraph = CalculatorPreferences.Graph.showComplexGraph.getPreference(preferences); + pendingOperation.setObject(new Runnable() { @Override public void run() { @@ -405,7 +429,7 @@ public class CalculatorPlotFragment extends SherlockFragment implements Calculat public void run() { final View view = getView(); if (view != null) { - updateGraphicalView(view); + updateGraphicalView(view, null); } } }); diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/plot/PlotUtils.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/plot/PlotUtils.java index 565432c3..b30efbfc 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/plot/PlotUtils.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/plot/PlotUtils.java @@ -37,7 +37,7 @@ public final class PlotUtils { @NotNull Generic expression, @NotNull Constant variable, @NotNull MyXYSeries realSeries, - @NotNull MyXYSeries imagSeries, + @Nullable MyXYSeries imagSeries, boolean addExtra, int numberOfSteps) throws ArithmeticException { @@ -72,7 +72,7 @@ public final class PlotUtils { prevX = x; } - boolean needToCalculateImagY = imagSeries.needToAdd(step, x); + boolean needToCalculateImagY = imagSeries != null && imagSeries.needToAdd(step, x); if (needToCalculateImagY) { y = prepareY(c.imaginaryPart()); if (y != null) { @@ -86,7 +86,7 @@ public final class PlotUtils { } } } else { - boolean needToCalculateImagY = imagSeries.needToAdd(step, x); + boolean needToCalculateImagY = imagSeries != null && imagSeries.needToAdd(step, x); if (needToCalculateImagY) { final Complex c = calculatorExpression(expression, variable, x); Double y = prepareY(c.imaginaryPart());