public void checkInput(int buttonId) { switch (buttonId) { case BUTTON_INDEX_0: // 0 zeroClick(); break; case BUTTON_INDEX_POINT: // . pointClick(); break; case BUTTON_INDEX_EQUAL: // = evaluateClick(); break; case BUTTON_INDEX_DIV: // / case BUTTON_INDEX_MUL: // * case BUTTON_INDEX_ADD: // + symbloClick(buttonId); break; case BUTTON_INDEX_SUB: // - subClick(); break; case BUTTON_INDEX_DEL: // DEL deleteClick(); break; case BUTTON_INDEX_CLEAR: // CLR entity.setFormula(""); break; default: entity.setFormula(entity.getFormula() + buttonValues[buttonId]); break; } }
public void subClick() { while (entity.getFormula().length() > 0 && ".+−".indexOf(entity.getFormula().charAt(entity.getFormula().length() - 1)) != -1) { entity.setFormula(entity.getFormula().substring(0, entity.getFormula().length() - 1)); } entity.setFormula(entity.getFormula() + "-"); }
public void symbloClick(int buttonId) { while (entity.getFormula().length() > 0 && ".+−÷×".indexOf(entity.getFormula().charAt(entity.getFormula().length() - 1)) != -1) { entity.setFormula(entity.getFormula().substring(0, entity.getFormula().length() - 1)); } if (entity.getFormula().length() > 0) { entity.setFormula(entity.getFormula() + buttonValues[buttonId]); } }
public void evaluateClick() { if (entity.getFormula().equals("")) return; isEvalClick = true; int res = evaluate(entity.getFormula()); if (res == NAN) { entity.setFormula(""); entity.getView().setTextViewText(R.id.widget_result, getText(R.string.error_nan)); } else if (res == RESULT) { entity.setFormula(entity.getResult()); entity.getView().setTextViewText(R.id.widget_formula, entity.getResult()); } else { entity.setFormula(""); entity.getView().setTextViewText(R.id.widget_formula, getText(R.string.error_syntax)); entity.getView().setTextViewText(R.id.widget_result, ""); } AppWidgetManager.getInstance(this).updateAppWidget(entity.getViewId(), entity.getView()); }
public void pointClick() { if (entity.getFormula().equalsIgnoreCase("")) { entity.setFormula("0."); } else { int pointLastIndex = entity.getFormula().lastIndexOf("."); int subLastIndex = entity.getFormula().lastIndexOf("−"); // - int addLastIndex = entity.getFormula().lastIndexOf("+"); // + int divLastIndex = entity.getFormula().lastIndexOf("÷"); // ÷ int mulLastIndex = entity.getFormula().lastIndexOf("×"); // × int maxIndex = Math.max(divLastIndex, mulLastIndex); maxIndex = Math.max(maxIndex, addLastIndex); maxIndex = Math.max(maxIndex, subLastIndex); if (maxIndex == -1 && pointLastIndex == -1) { entity.setFormula(entity.getFormula() + "."); } if (pointLastIndex < maxIndex) { if (maxIndex == entity.getFormula().length() - 1) { entity.setFormula(entity.getFormula() + "0."); } else { entity.setFormula(entity.getFormula() + "."); } } } }
@Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub super.onStart(intent, startId); Log.i(TAG, "intent=" + intent); if (intent == null) { return; } int widgetId = intent.getIntExtra("widgetId", -1); if (widgetId == -1) { return; } entity = queryEntityById(widgetId); if (entity != null) {} if (entity == null) { return; } if (mTokenizer == null) { mTokenizer = new CalculatorExpressionTokenizer(this); } if (mSymbols == null) { mSymbols = new Symbols(); } Uri data = intent.getData(); if (data != null) { int index = Integer.parseInt(data.getSchemeSpecificPart()); if (isEvalClick) { if (index <= BUTTON_INDEX_9) { entity.setFormula(""); } isEvalClick = false; } checkInput(index); if (index == BUTTON_INDEX_EQUAL) return; } if (entity.getView() != null) { int res = evaluate(entity.getFormula()); entity.getView().setTextViewText(R.id.widget_formula, entity.getFormula()); if (res == RESULT) { entity.getView().setTextViewText(R.id.widget_result, entity.getResult()); } else { entity.getView().setTextViewText(R.id.widget_result, ""); } AppWidgetManager.getInstance(this).updateAppWidget(widgetId, entity.getView()); } }
@Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // TODO Auto-generated method stub super.onUpdate(context, appWidgetManager, appWidgetIds); Log.i(TAG, "onUpdate"); Intent service = new Intent(context, CalculatorAppWidgetService.class); context.startService(service); for (int i = 0; i < appWidgetIds.length; i++) { RemoteViews view = new RemoteViews(context.getPackageName(), R.layout.widget_main); if (appWidgetIds[appWidgetIds.length - 1] > theMaxWidgetID) { theMaxWidgetID = appWidgetIds[appWidgetIds.length - 1]; CalculatorWidgetEntity entity = new CalculatorWidgetEntity(); entity.setView(view); entity.setViewId(appWidgetIds[i]); entity.setFormula(""); entity.setResult(""); mEntities.add(entity); } updateWidget(context, view, appWidgetIds[i]); appWidgetManager.updateAppWidget(appWidgetIds, view); } }
public int evaluate(String expr) { if (expr.equalsIgnoreCase("")) { return EMPTY; } entity.setFormula(mTokenizer.getLocalizedExpression(expr)); expr = mTokenizer.getNormalizedExpression(expr); while (expr.length() > 0 && ".+-/*".indexOf(expr.charAt(expr.length() - 1)) != -1) { expr = expr.substring(0, expr.length() - 1); } try { double result = mSymbols.eval(expr); if (Double.isNaN(result)) { return NAN; // "NaN"; } else { entity.setResult( mTokenizer.getLocalizedExpression( Util.doubleToString(result, MAX_DIGITS, ROUNDING_DIGITS))); return RESULT; // "result"; } } catch (SyntaxException e) { return SYNTAX; // "syntax"; } }
public void deleteClick() { if (entity.getFormula().length() > 0) { entity.setFormula(entity.getFormula().substring(0, entity.getFormula().length() - 1)); } }
public void zeroClick() { entity.setFormula(entity.getFormula() + "0"); }