diff --git a/calculatorpp/res/drawable-hdpi/ab_add.png b/calculatorpp/res/drawable-hdpi/ab_add.png new file mode 100644 index 00000000..444e8a5e Binary files /dev/null and b/calculatorpp/res/drawable-hdpi/ab_add.png differ diff --git a/calculatorpp/res/drawable-hdpi/ab_settings.png b/calculatorpp/res/drawable-hdpi/ab_settings.png new file mode 100644 index 00000000..5321f828 Binary files /dev/null and b/calculatorpp/res/drawable-hdpi/ab_settings.png differ diff --git a/calculatorpp/res/drawable-ldpi/ab_add.png b/calculatorpp/res/drawable-ldpi/ab_add.png new file mode 100644 index 00000000..89620af8 Binary files /dev/null and b/calculatorpp/res/drawable-ldpi/ab_add.png differ diff --git a/calculatorpp/res/drawable-ldpi/ab_settings.png b/calculatorpp/res/drawable-ldpi/ab_settings.png new file mode 100644 index 00000000..efc2f3e4 Binary files /dev/null and b/calculatorpp/res/drawable-ldpi/ab_settings.png differ diff --git a/calculatorpp/res/drawable-mdpi/ab_add.png b/calculatorpp/res/drawable-mdpi/ab_add.png new file mode 100755 index 00000000..361c7c46 Binary files /dev/null and b/calculatorpp/res/drawable-mdpi/ab_add.png differ diff --git a/calculatorpp/res/drawable-mdpi/ab_settings.png b/calculatorpp/res/drawable-mdpi/ab_settings.png new file mode 100644 index 00000000..ccc50e66 Binary files /dev/null and b/calculatorpp/res/drawable-mdpi/ab_settings.png differ diff --git a/calculatorpp/res/drawable-xhdpi/ab_add.png b/calculatorpp/res/drawable-xhdpi/ab_add.png new file mode 100644 index 00000000..7d498a96 Binary files /dev/null and b/calculatorpp/res/drawable-xhdpi/ab_add.png differ diff --git a/calculatorpp/res/drawable-xhdpi/ab_settings.png b/calculatorpp/res/drawable-xhdpi/ab_settings.png new file mode 100644 index 00000000..02cfbad0 Binary files /dev/null and b/calculatorpp/res/drawable-xhdpi/ab_settings.png differ diff --git a/calculatorpp/res/layout/ad.xml b/calculatorpp/res/layout/ad.xml index 822165b6..6ca95ee9 100644 --- a/calculatorpp/res/layout/ad.xml +++ b/calculatorpp/res/layout/ad.xml @@ -1,6 +1,6 @@ - - - + + + diff --git a/calculatorpp/res/layout/help_faq_fragment.xml b/calculatorpp/res/layout/help_faq_fragment.xml index 5a54e407..1454d519 100644 --- a/calculatorpp/res/layout/help_faq_fragment.xml +++ b/calculatorpp/res/layout/help_faq_fragment.xml @@ -17,6 +17,8 @@ a:layout_width="match_parent" style="?fragmentTitleStyle"/> + + diff --git a/calculatorpp/res/layout/help_hints_fragment.xml b/calculatorpp/res/layout/help_hints_fragment.xml index 18947e1f..e94e1843 100644 --- a/calculatorpp/res/layout/help_hints_fragment.xml +++ b/calculatorpp/res/layout/help_hints_fragment.xml @@ -16,6 +16,8 @@ a:layout_width="match_parent" style="?fragmentTitleStyle"/> + + diff --git a/calculatorpp/res/layout/help_screens_fragment.xml b/calculatorpp/res/layout/help_screens_fragment.xml index 80a37755..15838a2b 100644 --- a/calculatorpp/res/layout/help_screens_fragment.xml +++ b/calculatorpp/res/layout/help_screens_fragment.xml @@ -16,6 +16,8 @@ a:layout_width="match_parent" style="?fragmentTitleStyle"/> + + diff --git a/calculatorpp/res/layout/history_fragment.xml b/calculatorpp/res/layout/history_fragment.xml index d46d0d7a..e3cdd7c6 100644 --- a/calculatorpp/res/layout/history_fragment.xml +++ b/calculatorpp/res/layout/history_fragment.xml @@ -11,6 +11,8 @@ a:layout_width="match_parent" style="?fragmentTitleStyle"/> + + \ No newline at end of file diff --git a/calculatorpp/res/layout/math_entities_fragment.xml b/calculatorpp/res/layout/math_entities_fragment.xml index d46d0d7a..e3cdd7c6 100644 --- a/calculatorpp/res/layout/math_entities_fragment.xml +++ b/calculatorpp/res/layout/math_entities_fragment.xml @@ -11,6 +11,8 @@ a:layout_width="match_parent" style="?fragmentTitleStyle"/> + + \ No newline at end of file diff --git a/calculatorpp/res/layout/plot_fragment.xml b/calculatorpp/res/layout/plot_fragment.xml index c5e33b55..1e2d53c5 100644 --- a/calculatorpp/res/layout/plot_fragment.xml +++ b/calculatorpp/res/layout/plot_fragment.xml @@ -11,4 +11,7 @@ a:layout_width="match_parent" style="?fragmentTitleStyle"/> + + + \ No newline at end of file diff --git a/calculatorpp/res/layout/vars_fragment.xml b/calculatorpp/res/layout/vars_fragment.xml index ee145a42..a131f1a7 100644 --- a/calculatorpp/res/layout/vars_fragment.xml +++ b/calculatorpp/res/layout/vars_fragment.xml @@ -1,22 +1,24 @@ - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/calculatorpp/res/menu/plot_menu.xml b/calculatorpp/res/menu/plot_menu.xml new file mode 100644 index 00000000..0e734ab4 --- /dev/null +++ b/calculatorpp/res/menu/plot_menu.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/calculatorpp/res/menu/var_menu.xml b/calculatorpp/res/menu/var_menu.xml index 4a338007..aa0edfc2 100644 --- a/calculatorpp/res/menu/var_menu.xml +++ b/calculatorpp/res/menu/var_menu.xml @@ -1,14 +1,15 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorActivityHelperImpl.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorActivityHelperImpl.java index db7183dc..5c2740a9 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorActivityHelperImpl.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorActivityHelperImpl.java @@ -201,11 +201,22 @@ public class CalculatorActivityHelperImpl extends AbstractCalculatorHelper imple @Override public void setFragment(@NotNull SherlockFragmentActivity activity, @NotNull CalculatorFragmentType fragmentType, @Nullable Bundle fragmentArgs, int parentViewId) { - final Fragment fragment = Fragment.instantiate(activity, fragmentType.getFragmentClass().getName(), fragmentArgs); final FragmentManager fm = activity.getSupportFragmentManager(); - final FragmentTransaction ft = fm.beginTransaction(); - ft.add(parentViewId, fragment); - ft.commit(); + + Fragment fragment = fm.findFragmentByTag(fragmentType.getFragmentTag()); + if (fragment == null) { + fragment = Fragment.instantiate(activity, fragmentType.getFragmentClass().getName(), fragmentArgs); + final FragmentTransaction ft = fm.beginTransaction(); + ft.add(parentViewId, fragment, fragmentType.getFragmentTag()); + ft.commit(); + } else { + if ( fragment.isDetached() ) { + final FragmentTransaction ft = fm.beginTransaction(); + ft.attach(fragment); + ft.commit(); + } + + } } @Override diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorFragmentHelperImpl.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorFragmentHelperImpl.java index 06c65fa9..476a9a2b 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorFragmentHelperImpl.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorFragmentHelperImpl.java @@ -9,7 +9,6 @@ import com.google.ads.AdView; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.solovyev.android.ads.AdsController; -import org.solovyev.android.calculator.plot.CalculatorPlotFragment; /** * User: serso @@ -89,11 +88,13 @@ public class CalculatorFragmentHelperImpl extends AbstractCalculatorHelper imple @Override public void onViewCreated(@NotNull Fragment fragment, @NotNull View root) { + final ViewGroup adParentView = (ViewGroup) root.findViewById(R.id.ad_parent_view); final ViewGroup mainFragmentLayout = (ViewGroup) root.findViewById(R.id.main_fragment_layout); - if (mainFragmentLayout != null) { - if (!(fragment instanceof CalculatorPlotFragment)) { - adView = AdsController.getInstance().inflateAd(fragment.getActivity(), mainFragmentLayout, R.id.main_fragment_layout); - } + + if (adParentView != null) { + adView = AdsController.getInstance().inflateAd(fragment.getActivity(), adParentView, R.id.ad_parent_view); + } else if ( mainFragmentLayout != null ) { + adView = AdsController.getInstance().inflateAd(fragment.getActivity(), mainFragmentLayout, R.id.main_fragment_layout); } processButtons(fragment.getActivity(), root); 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 c3cfa9e4..4634db5e 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 @@ -35,7 +35,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.solovyev.android.calculator.*; import org.solovyev.android.menu.ActivityMenu; -import org.solovyev.android.menu.LabeledMenuItem; +import org.solovyev.android.menu.IdentifiableMenuItem; import org.solovyev.android.menu.ListActivityMenu; import org.solovyev.android.sherlock.menu.SherlockMenuHelper; import org.solovyev.common.MutableObject; @@ -83,16 +83,16 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul @NotNull private PreparedInput preparedInput; + @Nullable + private Input input; + @NotNull private CalculatorEventData lastCalculatorEventData = CalculatorUtils.createFirstEventDataId(); private int bgColor; - @Nullable - private PlotBoundaries plotBoundaries = null; - @NotNull - private ActivityMenu fragmentMenu = ListActivityMenu.fromList(PlotMenu.class, SherlockMenuHelper.getInstance()); + private ActivityMenu fragmentMenu = ListActivityMenu.fromResource(R.menu.plot_menu, PlotMenu.class, SherlockMenuHelper.getInstance()); public CalculatorPlotFragment() { super(CalculatorApplication.getInstance().createFragmentHelper(R.layout.plot_fragment, R.string.c_graph, false)); @@ -104,25 +104,21 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul final Bundle arguments = getArguments(); - Input input = null; if (arguments != null) { input = (Input) arguments.getSerializable(INPUT); } if (input == null) { - this.preparedInput = prepareInputFromDisplay(CalculatorLocatorImpl.getInstance().getDisplay().getViewState()); this.bgColor = getResources().getColor(R.color.pane_background); } else { - this.preparedInput = prepareInput(input, true); this.bgColor = getResources().getColor(android.R.color.transparent); } - setRetainInstance(true); setHasOptionsMenu(true); } @NotNull - private static PreparedInput prepareInputFromDisplay(@NotNull CalculatorDisplayViewState displayState) { + private static PreparedInput prepareInputFromDisplay(@NotNull CalculatorDisplayViewState displayState, @Nullable Bundle savedInstanceState) { try { if (displayState.isValid() && displayState.getResult() != null) { final Generic expression = displayState.getResult(); @@ -130,7 +126,7 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul final Constant constant = CollectionsUtils.getFirstCollectionElement(CalculatorUtils.getNotSystemConstants(expression)); final Input input = new Input(expression.toString(), constant.getName()); - return prepareInput(input, false); + return prepareInput(input, false, savedInstanceState); } } } catch (RuntimeException e) { @@ -141,7 +137,7 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul } @NotNull - private static PreparedInput prepareInput(@NotNull Input input, boolean fromInputArgs) { + private static PreparedInput prepareInput(@NotNull Input input, boolean fromInputArgs, @Nullable Bundle savedInstanceState) { PreparedInput result; try { @@ -149,7 +145,12 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul final Generic expression = Expression.valueOf(preparedExpression.getExpression()); final Constant variable = new Constant(input.getVariableName()); - result = PreparedInput.newInstance(input, expression, variable, fromInputArgs); + PlotBoundaries plotBoundaries = null; + if ( savedInstanceState != null ) { + plotBoundaries = (PlotBoundaries)savedInstanceState.getSerializable(PLOT_BOUNDARIES); + } + + result = PreparedInput.newInstance(input, expression, variable, fromInputArgs, plotBoundaries); } catch (ParseException e) { result = PreparedInput.newErrorInstance(fromInputArgs); CalculatorLocatorImpl.getInstance().getNotifier().showMessage(e); @@ -174,20 +175,13 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul } @Override - public void onViewCreated(View root, Bundle savedInstanceState) { - super.onViewCreated(root, savedInstanceState); + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); - - /*if ( savedInstanceState != null ) { - final Object object = savedInstanceState.getSerializable(PLOT_BOUNDARIES); - if ( object instanceof PlotBoundaries) { - plotBoundaries = ((PlotBoundaries) object); - } - }*/ - - if (preparedInput.isFromInputArgs()) { - createChart(); - createGraphicalView(root, null); + if (input == null) { + this.preparedInput = prepareInputFromDisplay(CalculatorLocatorImpl.getInstance().getDisplay().getViewState(), savedInstanceState); + } else { + this.preparedInput = prepareInput(input, true, savedInstanceState); } } @@ -204,12 +198,8 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul public void onResume() { super.onResume(); - if (!preparedInput.isFromInputArgs()) { - this.preparedInput = prepareInputFromDisplay(CalculatorLocatorImpl.getInstance().getDisplay().getViewState()); - } - createChart(); - createGraphicalView(getView(), plotBoundaries); + createGraphicalView(getView(), this.preparedInput.getPlotBoundaries()); } private void createGraphicalView(@NotNull View root, @Nullable PlotBoundaries plotBoundaries) { @@ -342,14 +332,12 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul Toast.makeText(CalculatorPlotFragment.this.getActivity(), "Arithmetic error: " + e.getLocalizedMessage(), Toast.LENGTH_LONG).show(); } - if (pendingOperation.getObject() == this) { - uiHandler.post(new Runnable() { - @Override - public void run() { - graphicalView.repaint(); - } - }); - } + uiHandler.post(new Runnable() { + @Override + public void run() { + graphicalView.repaint(); + } + }); } }); } @@ -371,7 +359,7 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul if (calculatorEventData.isAfter(this.lastCalculatorEventData)) { this.lastCalculatorEventData = calculatorEventData; - this.preparedInput = prepareInputFromDisplay(((CalculatorDisplayChangeEventData) data).getNewValue()); + this.preparedInput = prepareInputFromDisplay(((CalculatorDisplayChangeEventData) data).getNewValue(), null); createChart(); @@ -380,7 +368,7 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul public void run() { final View view = getView(); if (view != null) { - createGraphicalView(view, null); + createGraphicalView(view, preparedInput.getPlotBoundaries()); } } }); @@ -389,11 +377,6 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul } } - /*@Override - public Object onRetainNonConfigurationInstance() { - return new PlotBoundaries(chart.getRenderer()); - }*/ - /* public void zoomInClickHandler(@NotNull View v) { this.graphicalView.zoomIn(); @@ -444,25 +427,26 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul ********************************************************************** */ - private static enum PlotMenu implements LabeledMenuItem { + private static enum PlotMenu implements IdentifiableMenuItem { - preferences(R.string.c_settings) { + preferences(R.id.menu_plot_settings) { @Override public void onClick(@NotNull MenuItem data, @NotNull Context context) { context.startActivity(new Intent(context, CalculatorPlotPreferenceActivity.class)); } }; - private final int captionResId; + private final int itemId; - private PlotMenu(int captionResId) { - this.captionResId = captionResId; + private PlotMenu(int itemId) { + this.itemId = itemId; } + @NotNull @Override - public String getCaption(@NotNull Context context) { - return context.getString(captionResId); + public Integer getItemId() { + return itemId; } } @@ -507,17 +491,21 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul private boolean fromInputArgs; + @Nullable + private PlotBoundaries plotBoundaries = null; + private PreparedInput() { } @NotNull - public static PreparedInput newInstance(@NotNull Input input, @NotNull Generic expression, @NotNull Constant variable, boolean fromInputArgs) { + public static PreparedInput newInstance(@NotNull Input input, @NotNull Generic expression, @NotNull Constant variable, boolean fromInputArgs, @Nullable PlotBoundaries plotBoundaries) { final PreparedInput result = new PreparedInput(); result.input = input; result.expression = expression; result.variable = variable; result.fromInputArgs = fromInputArgs; + result.plotBoundaries = plotBoundaries; return result; } @@ -548,6 +536,11 @@ public class CalculatorPlotFragment extends CalculatorFragment implements Calcul return expression; } + @Nullable + public PlotBoundaries getPlotBoundaries() { + return plotBoundaries; + } + @Nullable public Constant getVariable() { return variable;