changes
This commit is contained in:
@@ -25,6 +25,8 @@ import org.solovyev.android.calculator.math.MathType;
|
||||
import org.solovyev.android.calculator.model.AndroidVarsRegistry;
|
||||
import org.solovyev.android.calculator.model.CalculatorEngine;
|
||||
import org.solovyev.android.calculator.model.Var;
|
||||
import org.solovyev.common.utils.CollectionsUtils;
|
||||
import org.solovyev.common.utils.Finder;
|
||||
import org.solovyev.common.utils.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -52,7 +54,14 @@ public class CalculatorVarsActivity extends ListActivity {
|
||||
|
||||
setContentView(R.layout.vars);
|
||||
|
||||
adapter = new VarsArrayAdapter(this, R.layout.var, R.id.var_text, new ArrayList<Var>(CalculatorEngine.instance.getVarsRegister().getEntities()));
|
||||
final List<Var> vars = new ArrayList<Var>(CalculatorEngine.instance.getVarsRegister().getEntities());
|
||||
CollectionsUtils.removeAll(vars, new Finder<Var>() {
|
||||
@Override
|
||||
public boolean isFound(@Nullable Var var) {
|
||||
return var != null && CollectionsUtils.contains(var.getName(), MathType.INFINITY_JSCL, MathType.NAN);
|
||||
}
|
||||
});
|
||||
adapter = new VarsArrayAdapter(this, R.layout.var, R.id.var_text, vars);
|
||||
setListAdapter(adapter);
|
||||
|
||||
final ListView lv = getListView();
|
||||
@@ -261,9 +270,9 @@ public class CalculatorVarsActivity extends ListActivity {
|
||||
createEditVariableDialog(editedInstance, name, value, description);
|
||||
} else {
|
||||
if ( editedInstance == null ) {
|
||||
CalculatorVarsActivity.this.adapter.add(varsRegistry.add(null, varBuilder));
|
||||
CalculatorVarsActivity.this.adapter.add(varsRegistry.add(varBuilder));
|
||||
} else {
|
||||
final Var newInstance = varsRegistry.add(editedInstance.getName(), varBuilder);
|
||||
final Var newInstance = varsRegistry.add(varBuilder);
|
||||
CalculatorVarsActivity.this.adapter.remove(editedInstance);
|
||||
CalculatorVarsActivity.this.adapter.add(newInstance);
|
||||
}
|
||||
|
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.solovyev.android.calculator.math;
|
||||
|
||||
import jscl.math.function.Constant;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.solovyev.android.calculator.StartsWithFinder;
|
||||
@@ -107,6 +108,11 @@ public enum MathType {
|
||||
public List<String> getTokens() {
|
||||
return CalculatorEngine.instance.getVarsRegister().getNames();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getSubstituteFromJscl(@NotNull String match) {
|
||||
return Constant.INF_CONST2.getName().equals(match) ? MathType.INFINITY : super.getSubstituteFromJscl(match);
|
||||
}
|
||||
},
|
||||
|
||||
text(1200, false, false) {
|
||||
|
@@ -71,8 +71,8 @@ public class AndroidFunctionsRegistryImpl implements AndroidFunctionsRegistry {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Function add(@Nullable String name, @NotNull IBuilder<? extends Function> IBuilder) {
|
||||
return functionsRegistry.add(name, IBuilder);
|
||||
public Function add(@NotNull IBuilder<? extends Function> IBuilder) {
|
||||
return functionsRegistry.add(IBuilder);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -37,79 +37,71 @@ class AndroidVarsRegistryImpl implements AndroidVarsRegistry {
|
||||
this.mathRegistry = mathRegistry;
|
||||
}
|
||||
|
||||
private boolean initialized = false;
|
||||
|
||||
public synchronized void init(@Nullable Context context, @Nullable SharedPreferences preferences) {
|
||||
|
||||
if (!initialized) {
|
||||
|
||||
if (context != null && preferences != null) {
|
||||
final String value = preferences.getString(context.getString(R.string.p_calc_vars), null);
|
||||
if (value != null) {
|
||||
final Serializer serializer = new Persister();
|
||||
try {
|
||||
final Vars vars = serializer.read(Vars.class, value);
|
||||
for (Var var : vars.getVars()) {
|
||||
if (!contains(var.getName())) {
|
||||
add(null, new Var.Builder(var));
|
||||
}
|
||||
if (context != null && preferences != null) {
|
||||
final String value = preferences.getString(context.getString(R.string.p_calc_vars), null);
|
||||
if (value != null) {
|
||||
final Serializer serializer = new Persister();
|
||||
try {
|
||||
final Vars vars = serializer.read(Vars.class, value);
|
||||
for (Var var : vars.getVars()) {
|
||||
if (!contains(var.getName())) {
|
||||
add(new Var.Builder(var));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (String systemVarName : MathType.constants) {
|
||||
|
||||
final Var.Builder builder;
|
||||
final Integer varDescription;
|
||||
|
||||
if (systemVarName.equals(MathType.E)) {
|
||||
builder = new Var.Builder(systemVarName, Math.E);
|
||||
varDescription = R.string.c_e_description;
|
||||
} else if (systemVarName.equals(MathType.PI)) {
|
||||
builder = new Var.Builder(systemVarName, Math.PI);
|
||||
varDescription = R.string.c_pi_description;
|
||||
} else if (systemVarName.equals(MathType.C)) {
|
||||
builder = new Var.Builder(systemVarName, MathType.C_VALUE);
|
||||
varDescription = R.string.c_c_description;
|
||||
} else if (systemVarName.equals(MathType.G)) {
|
||||
builder = new Var.Builder(systemVarName, MathType.G_VALUE);
|
||||
varDescription = R.string.c_g_description;
|
||||
/* } else if (systemVarName.equals(MathType.H)) {
|
||||
builder = new Var.Builder(systemVarName, MathType.H_VALUE);
|
||||
varDescription = R.string.c_h_description;*/
|
||||
} else if (systemVarName.equals(MathType.H_REDUCED)) {
|
||||
builder = new Var.Builder(systemVarName, MathType.H_REDUCED_VALUE);
|
||||
varDescription = R.string.c_h_reduced_description;
|
||||
} else if (systemVarName.equals(MathType.IMAGINARY_NUMBER)) {
|
||||
builder = new Var.Builder(systemVarName, MathType.IMAGINARY_NUMBER_JSCL);
|
||||
varDescription = R.string.c_i_description;
|
||||
} else if (systemVarName.equals(MathType.NAN)) {
|
||||
builder = new Var.Builder(systemVarName, MathType.NAN);
|
||||
varDescription = R.string.c_nan_description;
|
||||
} else if (systemVarName.equals(MathType.INFINITY)) {
|
||||
builder = new Var.Builder(systemVarName, MathType.INFINITY_JSCL);
|
||||
varDescription = R.string.c_infinity_description;
|
||||
} else {
|
||||
throw new IllegalArgumentException(systemVarName + " is not supported yet!");
|
||||
}
|
||||
|
||||
builder.setSystem(true);
|
||||
|
||||
if (context != null) {
|
||||
builder.setDescription(context.getString(varDescription));
|
||||
}
|
||||
|
||||
if (!contains(systemVarName)) {
|
||||
add(null, builder);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
initialized = true;
|
||||
|
||||
for (String systemVarName : MathType.constants) {
|
||||
|
||||
final Var.Builder builder;
|
||||
final Integer varDescription;
|
||||
|
||||
if (systemVarName.equals(MathType.E)) {
|
||||
builder = createBuilder(systemVarName, String.valueOf(Math.E));
|
||||
varDescription = R.string.c_e_description;
|
||||
} else if (systemVarName.equals(MathType.PI)) {
|
||||
builder = createBuilder(systemVarName, String.valueOf(Math.PI));
|
||||
varDescription = R.string.c_pi_description;
|
||||
} else if (systemVarName.equals(MathType.C)) {
|
||||
builder = createBuilder(systemVarName, String.valueOf(MathType.C_VALUE));
|
||||
varDescription = R.string.c_c_description;
|
||||
} else if (systemVarName.equals(MathType.G)) {
|
||||
builder = createBuilder(systemVarName, String.valueOf(MathType.G_VALUE));
|
||||
varDescription = R.string.c_g_description;
|
||||
/* } else if (systemVarName.equals(MathType.H)) {
|
||||
builder = new Var.Builder(systemVarName, MathType.H_VALUE);
|
||||
varDescription = R.string.c_h_description;*/
|
||||
} else if (systemVarName.equals(MathType.H_REDUCED)) {
|
||||
builder = createBuilder(systemVarName, String.valueOf(MathType.H_REDUCED_VALUE));
|
||||
varDescription = R.string.c_h_reduced_description;
|
||||
} else if (systemVarName.equals(MathType.IMAGINARY_NUMBER)) {
|
||||
builder = createBuilder(systemVarName, MathType.IMAGINARY_NUMBER_JSCL);
|
||||
varDescription = R.string.c_i_description;
|
||||
} else if (systemVarName.equals(MathType.NAN)) {
|
||||
builder = createBuilder(systemVarName, MathType.NAN);
|
||||
varDescription = R.string.c_nan_description;
|
||||
} else if (systemVarName.equals(MathType.INFINITY)) {
|
||||
builder = createBuilder(systemVarName, MathType.INFINITY_JSCL);
|
||||
varDescription = R.string.c_infinity_description;
|
||||
} else {
|
||||
throw new IllegalArgumentException(systemVarName + " is not supported yet!");
|
||||
}
|
||||
|
||||
builder.setSystem(true);
|
||||
|
||||
if (context != null) {
|
||||
builder.setDescription(context.getString(varDescription));
|
||||
}
|
||||
|
||||
add(builder);
|
||||
}
|
||||
|
||||
|
||||
/*Log.d(AndroidVarsRegistry.class.getName(), vars.size() + " variables registered!");
|
||||
for (Var var : vars) {
|
||||
@@ -117,6 +109,19 @@ class AndroidVarsRegistryImpl implements AndroidVarsRegistry {
|
||||
}*/
|
||||
}
|
||||
|
||||
private Var.Builder createBuilder(@NotNull String varName, @NotNull String varValue) {
|
||||
final Var.Builder result;
|
||||
|
||||
final IConstant varFromRegistry = mathRegistry.get(varName);
|
||||
if (varFromRegistry == null) {
|
||||
result = new Var.Builder(varName, varValue);
|
||||
} else {
|
||||
result = new Var.Builder(varFromRegistry);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void save(@NotNull Context context) {
|
||||
final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
@@ -163,8 +168,8 @@ class AndroidVarsRegistryImpl implements AndroidVarsRegistry {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Var add(@Nullable String name, @NotNull IBuilder<? extends Var> IBuilder) {
|
||||
IConstant result = mathRegistry.add(name, IBuilder);
|
||||
public Var add(@NotNull IBuilder<? extends Var> IBuilder) {
|
||||
IConstant result = mathRegistry.add(IBuilder);
|
||||
if (result instanceof Var) {
|
||||
return (Var) result;
|
||||
} else if (result != null) {
|
||||
|
@@ -26,7 +26,6 @@ import org.solovyev.common.utils.StringUtils;
|
||||
@Root
|
||||
public class Var implements IConstant {
|
||||
|
||||
@NotNull
|
||||
@Transient
|
||||
private Integer id;
|
||||
|
||||
@@ -82,7 +81,9 @@ public class Var implements IConstant {
|
||||
|
||||
this.system = iConstant.isSystem();
|
||||
this.description = iConstant.getDescription();
|
||||
this.id = iConstant.getId();
|
||||
if (iConstant.isIdDefined()) {
|
||||
this.id = iConstant.getId();
|
||||
}
|
||||
}
|
||||
|
||||
public Builder(@NotNull String name, @NotNull Double value) {
|
||||
@@ -145,6 +146,9 @@ public class Var implements IConstant {
|
||||
this.value = that.getValue();
|
||||
this.description = that.getDescription();
|
||||
this.system = that.isSystem();
|
||||
if (that.isIdDefined()) {
|
||||
this.id = that.getId();
|
||||
}
|
||||
} else {
|
||||
throw new IllegalArgumentException("Trying to make a copy of unsupported type: " + o.getClass());
|
||||
}
|
||||
@@ -184,6 +188,11 @@ public class Var implements IConstant {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIdDefined() {
|
||||
return this.id != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(@NotNull Integer id) {
|
||||
this.id = id;
|
||||
|
Reference in New Issue
Block a user