From 0b100efcf0a6b8a514b95266aa0f410ed303fb08 Mon Sep 17 00:00:00 2001 From: serso Date: Wed, 3 Oct 2012 10:58:43 +0400 Subject: [PATCH] changes --- .../org/solovyev/android/AndroidUtils2.java | 35 ++ .../CalculatorActivityLauncher.java | 171 +++--- .../math/edit/CalculatorVarsFragment.java | 559 +++++++++--------- .../math/edit/VarEditDialogFragment.java | 446 +++++++------- 4 files changed, 623 insertions(+), 588 deletions(-) create mode 100644 calculatorpp/src/main/java/org/solovyev/android/AndroidUtils2.java diff --git a/calculatorpp/src/main/java/org/solovyev/android/AndroidUtils2.java b/calculatorpp/src/main/java/org/solovyev/android/AndroidUtils2.java new file mode 100644 index 00000000..9abe58ae --- /dev/null +++ b/calculatorpp/src/main/java/org/solovyev/android/AndroidUtils2.java @@ -0,0 +1,35 @@ +package org.solovyev.android; + +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import org.jetbrains.annotations.NotNull; + +/** + * User: Solovyev_S + * Date: 03.10.12 + * Time: 10:48 + */ +public final class AndroidUtils2 { + + private AndroidUtils2() { + throw new AssertionError(); + } + + public static void showDialog(@NotNull DialogFragment dialogFragment, + @NotNull String fragmentTag, + @NotNull FragmentManager fm) { + final FragmentTransaction ft = fm.beginTransaction(); + + Fragment prev = fm.findFragmentByTag(fragmentTag); + if (prev != null) { + ft.remove(prev); + } + ft.addToBackStack(null); + + // Create and show the dialog. + dialogFragment.show(ft, fragmentTag); + + } +} diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorActivityLauncher.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorActivityLauncher.java index a19c32e2..f27affcb 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorActivityLauncher.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/CalculatorActivityLauncher.java @@ -1,85 +1,86 @@ -package org.solovyev.android.calculator; - -import android.content.Context; -import android.content.Intent; -import com.actionbarsherlock.app.SherlockFragmentActivity; -import jscl.math.Generic; -import jscl.math.function.Constant; -import org.achartengine.ChartFactory; -import org.jetbrains.annotations.NotNull; -import org.solovyev.android.calculator.about.CalculatorAboutTabActivity; -import org.solovyev.android.calculator.help.CalculatorHelpTabActivity; -import org.solovyev.android.calculator.history.CalculatorHistoryFragmentActivity; -import org.solovyev.android.calculator.math.edit.*; -import org.solovyev.android.calculator.plot.CalculatorPlotActivity; -import org.solovyev.android.calculator.plot.CalculatorPlotFragment; -import org.solovyev.common.msg.MessageType; -import org.solovyev.common.text.StringUtils; - -/** - * User: serso - * Date: 11/2/11 - * Time: 2:18 PM - */ -public class CalculatorActivityLauncher { - - public static void showHistory(@NotNull final Context context) { - context.startActivity(new Intent(context, CalculatorHistoryFragmentActivity.class)); - } - - public static void showHelp(@NotNull final Context context) { - context.startActivity(new Intent(context, CalculatorHelpTabActivity.class)); - } - - public static void showSettings(@NotNull final Context context) { - context.startActivity(new Intent(context, CalculatorPreferencesActivity.class)); - } - - public static void showAbout(@NotNull final Context context) { - context.startActivity(new Intent(context, CalculatorAboutTabActivity.class)); - } - - public static void showFunctions(@NotNull final Context context) { - context.startActivity(new Intent(context, CalculatorFunctionsFragmentActivity.class)); - } - - public static void showOperators(@NotNull final Context context) { - context.startActivity(new Intent(context, CalculatorOperatorsFragmentActivity.class)); - } - - public static void showVars(@NotNull final Context context) { - context.startActivity(new Intent(context, CalculatorVarsFragmentActivity.class)); - } - - public static void plotGraph(@NotNull final Context context, @NotNull Generic generic, @NotNull Constant constant){ - final Intent intent = new Intent(); - intent.putExtra(ChartFactory.TITLE, context.getString(R.string.c_graph)); - intent.putExtra(CalculatorPlotFragment.INPUT, new CalculatorPlotFragment.Input(generic.toString(), constant.getName())); - intent.setClass(context, CalculatorPlotActivity.class); - context.startActivity(intent); - } - - public static void createVar(@NotNull final Context context, @NotNull CalculatorDisplay calculatorDisplay) { - final CalculatorDisplayViewState viewState = calculatorDisplay.getViewState(); - if (viewState.isValid() ) { - final String varValue = viewState.getText(); - if (!StringUtils.isEmpty(varValue)) { - if (CalculatorVarsFragment.isValidValue(varValue)) { - if (context instanceof SherlockFragmentActivity) { - VarEditDialogFragment.createEditVariableDialog(VarEditDialogFragment.Input.newFromValue(varValue), ((SherlockFragmentActivity) context).getSupportFragmentManager()); - } else { - final Intent intent = new Intent(context, CalculatorVarsFragmentActivity.class); - intent.putExtra(CalculatorVarsFragment.CREATE_VAR_EXTRA_STRING, varValue); - context.startActivity(intent); - } - } else { - CalculatorLocatorImpl.getInstance().getNotifier().showMessage(R.string.c_not_valid_result, MessageType.error); - } - } else { - CalculatorLocatorImpl.getInstance().getNotifier().showMessage(R.string.c_empty_var_error, MessageType.error); - } - } else { - CalculatorLocatorImpl.getInstance().getNotifier().showMessage(R.string.c_not_valid_result, MessageType.error); - } - } -} +package org.solovyev.android.calculator; + +import android.content.Context; +import android.content.Intent; +import com.actionbarsherlock.app.SherlockFragmentActivity; +import jscl.math.Generic; +import jscl.math.function.Constant; +import org.achartengine.ChartFactory; +import org.jetbrains.annotations.NotNull; +import org.solovyev.android.AndroidUtils2; +import org.solovyev.android.calculator.about.CalculatorAboutTabActivity; +import org.solovyev.android.calculator.help.CalculatorHelpTabActivity; +import org.solovyev.android.calculator.history.CalculatorHistoryFragmentActivity; +import org.solovyev.android.calculator.math.edit.*; +import org.solovyev.android.calculator.plot.CalculatorPlotActivity; +import org.solovyev.android.calculator.plot.CalculatorPlotFragment; +import org.solovyev.common.msg.MessageType; +import org.solovyev.common.text.StringUtils; + +/** + * User: serso + * Date: 11/2/11 + * Time: 2:18 PM + */ +public class CalculatorActivityLauncher { + + public static void showHistory(@NotNull final Context context) { + context.startActivity(new Intent(context, CalculatorHistoryFragmentActivity.class)); + } + + public static void showHelp(@NotNull final Context context) { + context.startActivity(new Intent(context, CalculatorHelpTabActivity.class)); + } + + public static void showSettings(@NotNull final Context context) { + context.startActivity(new Intent(context, CalculatorPreferencesActivity.class)); + } + + public static void showAbout(@NotNull final Context context) { + context.startActivity(new Intent(context, CalculatorAboutTabActivity.class)); + } + + public static void showFunctions(@NotNull final Context context) { + context.startActivity(new Intent(context, CalculatorFunctionsFragmentActivity.class)); + } + + public static void showOperators(@NotNull final Context context) { + context.startActivity(new Intent(context, CalculatorOperatorsFragmentActivity.class)); + } + + public static void showVars(@NotNull final Context context) { + context.startActivity(new Intent(context, CalculatorVarsFragmentActivity.class)); + } + + public static void plotGraph(@NotNull final Context context, @NotNull Generic generic, @NotNull Constant constant){ + final Intent intent = new Intent(); + intent.putExtra(ChartFactory.TITLE, context.getString(R.string.c_graph)); + intent.putExtra(CalculatorPlotFragment.INPUT, new CalculatorPlotFragment.Input(generic.toString(), constant.getName())); + intent.setClass(context, CalculatorPlotActivity.class); + context.startActivity(intent); + } + + public static void createVar(@NotNull final Context context, @NotNull CalculatorDisplay calculatorDisplay) { + final CalculatorDisplayViewState viewState = calculatorDisplay.getViewState(); + if (viewState.isValid() ) { + final String varValue = viewState.getText(); + if (!StringUtils.isEmpty(varValue)) { + if (CalculatorVarsFragment.isValidValue(varValue)) { + if (context instanceof SherlockFragmentActivity) { + VarEditDialogFragment.showDialog(VarEditDialogFragment.Input.newFromValue(varValue), ((SherlockFragmentActivity) context).getSupportFragmentManager()); + } else { + final Intent intent = new Intent(context, CalculatorVarsFragmentActivity.class); + intent.putExtra(CalculatorVarsFragment.CREATE_VAR_EXTRA_STRING, varValue); + context.startActivity(intent); + } + } else { + CalculatorLocatorImpl.getInstance().getNotifier().showMessage(R.string.c_not_valid_result, MessageType.error); + } + } else { + CalculatorLocatorImpl.getInstance().getNotifier().showMessage(R.string.c_empty_var_error, MessageType.error); + } + } else { + CalculatorLocatorImpl.getInstance().getNotifier().showMessage(R.string.c_not_valid_result, MessageType.error); + } + } +} diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/math/edit/CalculatorVarsFragment.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/math/edit/CalculatorVarsFragment.java index dca7a450..037eea8b 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/math/edit/CalculatorVarsFragment.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/math/edit/CalculatorVarsFragment.java @@ -1,279 +1,280 @@ -/* - * 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 - */ - -package org.solovyev.android.calculator.math.edit; - -import android.content.Context; -import android.os.Bundle; -import android.view.View; -import com.actionbarsherlock.app.SherlockFragmentActivity; -import com.actionbarsherlock.view.Menu; -import com.actionbarsherlock.view.MenuInflater; -import com.actionbarsherlock.view.MenuItem; -import jscl.math.function.IConstant; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.solovyev.android.calculator.*; -import org.solovyev.android.calculator.math.MathType; -import org.solovyev.android.menu.AMenuItem; -import org.solovyev.android.menu.LabeledMenuItem; -import org.solovyev.common.JPredicate; -import org.solovyev.common.collections.CollectionsUtils; -import org.solovyev.common.text.StringUtils; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * User: serso - * Date: 9/28/11 - * Time: 10:55 PM - */ -public class CalculatorVarsFragment extends AbstractMathEntityListFragment { - - public static final String CREATE_VAR_EXTRA_STRING = "create_var"; - - @Override - protected int getLayoutId() { - return R.layout.vars_fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - final Bundle bundle = getArguments(); - if (bundle != null) { - final String varValue = bundle.getString(CREATE_VAR_EXTRA_STRING); - if (!StringUtils.isEmpty(varValue)) { - VarEditDialogFragment.createEditVariableDialog(VarEditDialogFragment.Input.newFromValue(varValue), this.getActivity().getSupportFragmentManager()); - - // in order to stop intent for other tabs - bundle.remove(CREATE_VAR_EXTRA_STRING); - } - } - - setHasOptionsMenu(true); - } - - @Override - protected int getTitleResId() { - return R.string.c_vars; - } - - @Override - protected AMenuItem getOnClickAction() { - return LongClickMenuItem.use; - } - - @NotNull - @Override - protected List> getMenuItemsOnLongClick(@NotNull IConstant item) { - final List> result = new ArrayList>(Arrays.asList(LongClickMenuItem.values())); - - if (item.isSystem()) { - result.remove(LongClickMenuItem.edit); - result.remove(LongClickMenuItem.remove); - } - - if (StringUtils.isEmpty(CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry().getDescription(item.getName()))) { - result.remove(LongClickMenuItem.copy_description); - } - - if (StringUtils.isEmpty(item.getValue())) { - result.remove(LongClickMenuItem.copy_value); - } - - return result; - } - - @NotNull - @Override - protected MathEntityDescriptionGetter getDescriptionGetter() { - return new MathEntityDescriptionGetterImpl(CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry()); - } - - @SuppressWarnings({"UnusedDeclaration"}) - public void addVarButtonClickHandler(@NotNull View v) { - VarEditDialogFragment.createEditVariableDialog(VarEditDialogFragment.Input.newInstance(), this.getActivity().getSupportFragmentManager()); - } - - @NotNull - @Override - protected List getMathEntities() { - final List result = new ArrayList(CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry().getEntities()); - - CollectionsUtils.removeAll(result, new JPredicate() { - @Override - public boolean apply(@Nullable IConstant var) { - return var != null && CollectionsUtils.contains(var.getName(), MathType.INFINITY_JSCL, MathType.NAN); - } - }); - - return result; - } - - @Override - protected String getMathEntityCategory(@NotNull IConstant var) { - return CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry().getCategory(var); - } - - public static boolean isValidValue(@NotNull String value) { - // now every string might be constant - return true; - } - - /* - ********************************************************************** - * - * MENU - * - ********************************************************************** - */ - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.var_menu, menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - boolean result; - - switch (item.getItemId()) { - case R.id.var_menu_add_var: - VarEditDialogFragment.createEditVariableDialog(VarEditDialogFragment.Input.newInstance(), this.getActivity().getSupportFragmentManager()); - result = true; - break; - default: - result = super.onOptionsItemSelected(item); - } - - return result; - } - - @Override - public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable Object data) { - super.onCalculatorEvent(calculatorEventData, calculatorEventType, data); - - switch (calculatorEventType) { - case constant_added: - processConstantAdded((IConstant) data); - break; - - case constant_changed: - processConstantChanged((Change) data); - break; - - case constant_removed: - processConstantRemoved((IConstant) data); - break; - } - } - - private void processConstantRemoved(@NotNull final IConstant constant) { - if (this.isInCategory(constant)) { - getUiHandler().post(new Runnable() { - @Override - public void run() { - removeFromAdapter(constant); - notifyAdapter(); - } - }); - } - } - - private void processConstantChanged(@NotNull final Change change) { - final IConstant newConstant = change.getNewValue(); - if (this.isInCategory(newConstant)) { - getUiHandler().post(new Runnable() { - @Override - public void run() { - removeFromAdapter(change.getOldValue()); - addToAdapter(newConstant); - sort(); - } - }); - } - } - - private void processConstantAdded(@NotNull final IConstant constant) { - if (this.isInCategory(constant)) { - getUiHandler().post(new Runnable() { - @Override - public void run() { - addToAdapter(constant); - sort(); - } - }); - } - } - - /* - ********************************************************************** - * - * STATIC - * - ********************************************************************** - */ - - private static enum LongClickMenuItem implements LabeledMenuItem { - use(R.string.c_use) { - @Override - public void onClick(@NotNull IConstant data, @NotNull Context context) { - CalculatorLocatorImpl.getInstance().getCalculator().fireCalculatorEvent(CalculatorEventType.use_constant, data); - } - }, - - edit(R.string.c_edit) { - @Override - public void onClick(@NotNull IConstant constant, @NotNull Context context) { - VarEditDialogFragment.createEditVariableDialog(VarEditDialogFragment.Input.newFromConstant(constant), ((SherlockFragmentActivity) context).getSupportFragmentManager()); - } - }, - - remove(R.string.c_remove) { - @Override - public void onClick(@NotNull IConstant constant, @NotNull Context context) { - new MathEntityRemover(constant, null, CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry(), context, context).showConfirmationDialog(); - } - }, - - copy_value(R.string.c_copy_value) { - @Override - public void onClick(@NotNull IConstant data, @NotNull Context context) { - final String text = data.getValue(); - if (!StringUtils.isEmpty(text)) { - assert text != null; - CalculatorLocatorImpl.getInstance().getClipboard().setText(text); - } - } - }, - - copy_description(R.string.c_copy_description) { - @Override - public void onClick(@NotNull IConstant data, @NotNull Context context) { - final String text = CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry().getDescription(data.getName()); - if (!StringUtils.isEmpty(text)) { - assert text != null; - CalculatorLocatorImpl.getInstance().getClipboard().setText(text); - } - } - }; - private final int captionId; - - LongClickMenuItem(int captionId) { - this.captionId = captionId; - } - - @NotNull - @Override - public String getCaption(@NotNull Context context) { - return context.getString(captionId); - } - } -} +/* + * 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 + */ + +package org.solovyev.android.calculator.math.edit; + +import android.content.Context; +import android.os.Bundle; +import android.view.View; +import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; +import jscl.math.function.IConstant; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.solovyev.android.AndroidUtils2; +import org.solovyev.android.calculator.*; +import org.solovyev.android.calculator.math.MathType; +import org.solovyev.android.menu.AMenuItem; +import org.solovyev.android.menu.LabeledMenuItem; +import org.solovyev.common.JPredicate; +import org.solovyev.common.collections.CollectionsUtils; +import org.solovyev.common.text.StringUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * User: serso + * Date: 9/28/11 + * Time: 10:55 PM + */ +public class CalculatorVarsFragment extends AbstractMathEntityListFragment { + + public static final String CREATE_VAR_EXTRA_STRING = "create_var"; + + @Override + protected int getLayoutId() { + return R.layout.vars_fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + final Bundle bundle = getArguments(); + if (bundle != null) { + final String varValue = bundle.getString(CREATE_VAR_EXTRA_STRING); + if (!StringUtils.isEmpty(varValue)) { + VarEditDialogFragment.showDialog(VarEditDialogFragment.Input.newFromValue(varValue), this.getActivity().getSupportFragmentManager()); + + // in order to stop intent for other tabs + bundle.remove(CREATE_VAR_EXTRA_STRING); + } + } + + setHasOptionsMenu(true); + } + + @Override + protected int getTitleResId() { + return R.string.c_vars; + } + + @Override + protected AMenuItem getOnClickAction() { + return LongClickMenuItem.use; + } + + @NotNull + @Override + protected List> getMenuItemsOnLongClick(@NotNull IConstant item) { + final List> result = new ArrayList>(Arrays.asList(LongClickMenuItem.values())); + + if (item.isSystem()) { + result.remove(LongClickMenuItem.edit); + result.remove(LongClickMenuItem.remove); + } + + if (StringUtils.isEmpty(CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry().getDescription(item.getName()))) { + result.remove(LongClickMenuItem.copy_description); + } + + if (StringUtils.isEmpty(item.getValue())) { + result.remove(LongClickMenuItem.copy_value); + } + + return result; + } + + @NotNull + @Override + protected MathEntityDescriptionGetter getDescriptionGetter() { + return new MathEntityDescriptionGetterImpl(CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry()); + } + + @SuppressWarnings({"UnusedDeclaration"}) + public void addVarButtonClickHandler(@NotNull View v) { + VarEditDialogFragment.showDialog(VarEditDialogFragment.Input.newInstance(), this.getActivity().getSupportFragmentManager()); + } + + @NotNull + @Override + protected List getMathEntities() { + final List result = new ArrayList(CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry().getEntities()); + + CollectionsUtils.removeAll(result, new JPredicate() { + @Override + public boolean apply(@Nullable IConstant var) { + return var != null && CollectionsUtils.contains(var.getName(), MathType.INFINITY_JSCL, MathType.NAN); + } + }); + + return result; + } + + @Override + protected String getMathEntityCategory(@NotNull IConstant var) { + return CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry().getCategory(var); + } + + public static boolean isValidValue(@NotNull String value) { + // now every string might be constant + return true; + } + + /* + ********************************************************************** + * + * MENU + * + ********************************************************************** + */ + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.var_menu, menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + boolean result; + + switch (item.getItemId()) { + case R.id.var_menu_add_var: + VarEditDialogFragment.showDialog(VarEditDialogFragment.Input.newInstance(), this.getActivity().getSupportFragmentManager()); + result = true; + break; + default: + result = super.onOptionsItemSelected(item); + } + + return result; + } + + @Override + public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable Object data) { + super.onCalculatorEvent(calculatorEventData, calculatorEventType, data); + + switch (calculatorEventType) { + case constant_added: + processConstantAdded((IConstant) data); + break; + + case constant_changed: + processConstantChanged((Change) data); + break; + + case constant_removed: + processConstantRemoved((IConstant) data); + break; + } + } + + private void processConstantRemoved(@NotNull final IConstant constant) { + if (this.isInCategory(constant)) { + getUiHandler().post(new Runnable() { + @Override + public void run() { + removeFromAdapter(constant); + notifyAdapter(); + } + }); + } + } + + private void processConstantChanged(@NotNull final Change change) { + final IConstant newConstant = change.getNewValue(); + if (this.isInCategory(newConstant)) { + getUiHandler().post(new Runnable() { + @Override + public void run() { + removeFromAdapter(change.getOldValue()); + addToAdapter(newConstant); + sort(); + } + }); + } + } + + private void processConstantAdded(@NotNull final IConstant constant) { + if (this.isInCategory(constant)) { + getUiHandler().post(new Runnable() { + @Override + public void run() { + addToAdapter(constant); + sort(); + } + }); + } + } + + /* + ********************************************************************** + * + * STATIC + * + ********************************************************************** + */ + + private static enum LongClickMenuItem implements LabeledMenuItem { + use(R.string.c_use) { + @Override + public void onClick(@NotNull IConstant data, @NotNull Context context) { + CalculatorLocatorImpl.getInstance().getCalculator().fireCalculatorEvent(CalculatorEventType.use_constant, data); + } + }, + + edit(R.string.c_edit) { + @Override + public void onClick(@NotNull IConstant constant, @NotNull Context context) { + VarEditDialogFragment.showDialog(VarEditDialogFragment.Input.newFromConstant(constant), ((SherlockFragmentActivity) context).getSupportFragmentManager()); + } + }, + + remove(R.string.c_remove) { + @Override + public void onClick(@NotNull IConstant constant, @NotNull Context context) { + new MathEntityRemover(constant, null, CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry(), context, context).showConfirmationDialog(); + } + }, + + copy_value(R.string.c_copy_value) { + @Override + public void onClick(@NotNull IConstant data, @NotNull Context context) { + final String text = data.getValue(); + if (!StringUtils.isEmpty(text)) { + assert text != null; + CalculatorLocatorImpl.getInstance().getClipboard().setText(text); + } + } + }, + + copy_description(R.string.c_copy_description) { + @Override + public void onClick(@NotNull IConstant data, @NotNull Context context) { + final String text = CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry().getDescription(data.getName()); + if (!StringUtils.isEmpty(text)) { + assert text != null; + CalculatorLocatorImpl.getInstance().getClipboard().setText(text); + } + } + }; + private final int captionId; + + LongClickMenuItem(int captionId) { + this.captionId = captionId; + } + + @NotNull + @Override + public String getCaption(@NotNull Context context) { + return context.getString(captionId); + } + } +} diff --git a/calculatorpp/src/main/java/org/solovyev/android/calculator/math/edit/VarEditDialogFragment.java b/calculatorpp/src/main/java/org/solovyev/android/calculator/math/edit/VarEditDialogFragment.java index 1485f698..0029f311 100644 --- a/calculatorpp/src/main/java/org/solovyev/android/calculator/math/edit/VarEditDialogFragment.java +++ b/calculatorpp/src/main/java/org/solovyev/android/calculator/math/edit/VarEditDialogFragment.java @@ -1,224 +1,222 @@ -package org.solovyev.android.calculator.math.edit; - -import android.os.Bundle; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.text.Editable; -import android.text.TextWatcher; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.EditText; -import android.widget.Toast; -import jscl.math.function.IConstant; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.solovyev.android.calculator.*; -import org.solovyev.android.calculator.model.Var; - -/** - * User: Solovyev_S - * Date: 01.10.12 - * Time: 17:41 - */ -public class VarEditDialogFragment extends DialogFragment implements CalculatorEventListener { - - @NotNull - private final Input input; - - public VarEditDialogFragment() { - this(Input.newInstance()); - } - - public VarEditDialogFragment(@NotNull Input input) { - this.input = input; - } - - public static void createEditVariableDialog(@NotNull Input input, @NotNull FragmentManager fm) { - final FragmentTransaction ft = fm.beginTransaction(); - - Fragment prev = fm.findFragmentByTag("constant-editor"); - if (prev != null) { - ft.remove(prev); - } - ft.addToBackStack(null); - - // Create and show the dialog. - final DialogFragment newFragment = new VarEditDialogFragment(input); - newFragment.show(ft, "constant-editor"); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.var_edit, container, false); - } - - @Override - public void onResume() { - super.onResume(); - - CalculatorLocatorImpl.getInstance().getCalculator().addCalculatorEventListener(this); - } - - @Override - public void onPause() { - CalculatorLocatorImpl.getInstance().getCalculator().removeCalculatorEventListener(this); - - super.onPause(); - } - - @Override - public void onViewCreated(@NotNull View root, Bundle savedInstanceState) { - super.onViewCreated(root, savedInstanceState); - - final String errorMsg = this.getString(R.string.c_char_is_not_accepted); - - final EditText editName = (EditText) root.findViewById(R.id.var_edit_name); - editName.setText(input.getName()); - editName.addTextChangedListener(new 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) { - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - if (!AbstractMathEntityListFragment.acceptableChars.contains(c)) { - s.delete(i, i + 1); - Toast.makeText(getActivity(), String.format(errorMsg, c), Toast.LENGTH_SHORT).show(); - } - } - } - }); - - // show soft keyboard automatically - editName.requestFocus(); - getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - - final EditText editValue = (EditText) root.findViewById(R.id.var_edit_value); - editValue.setText(input.getValue()); - - final EditText editDescription = (EditText) root.findViewById(R.id.var_edit_description); - editDescription.setText(input.getDescription()); - - final Var.Builder varBuilder; - final IConstant constant = input.getConstant(); - if (constant != null) { - varBuilder = new Var.Builder(constant); - } else { - varBuilder = new Var.Builder(); - } - - root.findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dismiss(); - } - }); - - root.findViewById(R.id.save_button).setOnClickListener(new VarEditorSaver(varBuilder, constant, root, CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry(), this)); - - if ( constant == null ) { - // CREATE MODE - getDialog().setTitle(R.string.c_var_create_var); - - root.findViewById(R.id.remove_button).setVisibility(View.GONE); - } else { - // EDIT MODE - getDialog().setTitle(R.string.c_var_edit_var); - - root.findViewById(R.id.remove_button).setOnClickListener(new MathEntityRemover(constant, null, CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry(), getActivity(), this)); - } - } - - @Override - public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable Object data) { - switch (calculatorEventType) { - case constant_removed: - case constant_added: - case constant_changed: - if ( calculatorEventData.getSource() == this ) { - dismiss(); - } - break; - - } - } - - public static class Input { - - @Nullable - private IConstant constant; - - @Nullable - private String name; - - @Nullable - private String value; - - @Nullable - private String description; - - private Input() { - } - - @NotNull - public static Input newInstance() { - return new Input(); - } - - @NotNull - public static Input newFromConstant(@NotNull IConstant constant) { - final Input result = new Input(); - result.constant = constant; - return result; - } - - @NotNull - public static Input newFromValue(@Nullable String value) { - final Input result = new Input(); - result.value = value; - return result; - } - - @NotNull - public static Input newInstance(@Nullable IConstant constant, @Nullable String name, @Nullable String value, @Nullable String description) { - final Input result = new Input(); - result.constant = constant; - result.name = name; - result.value = value; - result.description = description; - return result; - } - - @Nullable - public IConstant getConstant() { - return constant; - } - - @Nullable - public String getName() { - return name == null ? (constant == null ? null : constant.getName()) : name; - } - - @Nullable - public String getValue() { - return value == null ? (constant == null ? null : constant.getValue()) : value; - } - - @Nullable - public String getDescription() { - return description == null ? (constant == null ? null : constant.getDescription()) : description; - } - } -} +package org.solovyev.android.calculator.math.edit; + +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.EditText; +import android.widget.Toast; +import jscl.math.function.IConstant; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.solovyev.android.AndroidUtils2; +import org.solovyev.android.calculator.*; +import org.solovyev.android.calculator.model.Var; + +/** + * User: Solovyev_S + * Date: 01.10.12 + * Time: 17:41 + */ +public class VarEditDialogFragment extends DialogFragment implements CalculatorEventListener { + + @NotNull + private final Input input; + + public VarEditDialogFragment() { + this(Input.newInstance()); + } + + public VarEditDialogFragment(@NotNull Input input) { + this.input = input; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.var_edit, container, false); + } + + @Override + public void onResume() { + super.onResume(); + + CalculatorLocatorImpl.getInstance().getCalculator().addCalculatorEventListener(this); + } + + @Override + public void onPause() { + CalculatorLocatorImpl.getInstance().getCalculator().removeCalculatorEventListener(this); + + super.onPause(); + } + + @Override + public void onViewCreated(@NotNull View root, Bundle savedInstanceState) { + super.onViewCreated(root, savedInstanceState); + + final String errorMsg = this.getString(R.string.c_char_is_not_accepted); + + final EditText editName = (EditText) root.findViewById(R.id.var_edit_name); + editName.setText(input.getName()); + editName.addTextChangedListener(new 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) { + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (!AbstractMathEntityListFragment.acceptableChars.contains(c)) { + s.delete(i, i + 1); + Toast.makeText(getActivity(), String.format(errorMsg, c), Toast.LENGTH_SHORT).show(); + } + } + } + }); + + // show soft keyboard automatically + editName.requestFocus(); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + + final EditText editValue = (EditText) root.findViewById(R.id.var_edit_value); + editValue.setText(input.getValue()); + + final EditText editDescription = (EditText) root.findViewById(R.id.var_edit_description); + editDescription.setText(input.getDescription()); + + final Var.Builder varBuilder; + final IConstant constant = input.getConstant(); + if (constant != null) { + varBuilder = new Var.Builder(constant); + } else { + varBuilder = new Var.Builder(); + } + + root.findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); + + root.findViewById(R.id.save_button).setOnClickListener(new VarEditorSaver(varBuilder, constant, root, CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry(), this)); + + if ( constant == null ) { + // CREATE MODE + getDialog().setTitle(R.string.c_var_create_var); + + root.findViewById(R.id.remove_button).setVisibility(View.GONE); + } else { + // EDIT MODE + getDialog().setTitle(R.string.c_var_edit_var); + + root.findViewById(R.id.remove_button).setOnClickListener(new MathEntityRemover(constant, null, CalculatorLocatorImpl.getInstance().getEngine().getVarsRegistry(), getActivity(), this)); + } + } + + @Override + public void onCalculatorEvent(@NotNull CalculatorEventData calculatorEventData, @NotNull CalculatorEventType calculatorEventType, @Nullable Object data) { + switch (calculatorEventType) { + case constant_removed: + case constant_added: + case constant_changed: + if ( calculatorEventData.getSource() == this ) { + dismiss(); + } + break; + + } + } + + /* + ********************************************************************** + * + * STATIC + * + ********************************************************************** + */ + + public static void showDialog(@NotNull Input input, @NotNull FragmentManager fm) { + AndroidUtils2.showDialog(new VarEditDialogFragment(input), "constant-editor", fm); + } + + public static class Input { + + @Nullable + private IConstant constant; + + @Nullable + private String name; + + @Nullable + private String value; + + @Nullable + private String description; + + private Input() { + } + + @NotNull + public static Input newInstance() { + return new Input(); + } + + @NotNull + public static Input newFromConstant(@NotNull IConstant constant) { + final Input result = new Input(); + result.constant = constant; + return result; + } + + @NotNull + public static Input newFromValue(@Nullable String value) { + final Input result = new Input(); + result.value = value; + return result; + } + + @NotNull + public static Input newInstance(@Nullable IConstant constant, @Nullable String name, @Nullable String value, @Nullable String description) { + final Input result = new Input(); + result.constant = constant; + result.name = name; + result.value = value; + result.description = description; + return result; + } + + @Nullable + public IConstant getConstant() { + return constant; + } + + @Nullable + public String getName() { + return name == null ? (constant == null ? null : constant.getName()) : name; + } + + @Nullable + public String getValue() { + return value == null ? (constant == null ? null : constant.getValue()) : value; + } + + @Nullable + public String getDescription() { + return description == null ? (constant == null ? null : constant.getDescription()) : description; + } + } +}