@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";
   }
 }