@Override public void onBackPressed() { if (mDisplayView.isExpanded()) { mDisplayView.collapse(); } else if (mPadViewPager != null && mPadViewPager.isExpanded()) { mPadViewPager.collapse(); } else { super.onBackPressed(); } }
protected void initialize(Bundle savedInstanceState) { // Rebuild constants. If the user changed their locale, it won't kill the app // but it might change a decimal point from . to , Constants.rebuildConstants(); mDisplayView = (DisplayOverlay) findViewById(R.id.display); mDisplayView.setFade(findViewById(R.id.history_fade)); mDisplayForeground = (ViewGroup) findViewById(R.id.the_clear_animation); mFormulaEditText = (CalculatorEditText) findViewById(R.id.formula); mResultEditText = (CalculatorEditText) findViewById(R.id.result); mPadViewPager = (CalculatorPadView) findViewById(R.id.pad_pager); mDeleteButton = findViewById(R.id.del); mClearButton = findViewById(R.id.clr); mEqualButton = (EqualsImageButton) findViewById(R.id.pad_numeric).findViewById(R.id.eq); if (mEqualButton == null || mEqualButton.getVisibility() != View.VISIBLE) { mEqualButton = (EqualsImageButton) findViewById(R.id.pad_operator).findViewById(R.id.eq); } mTokenizer = new CalculatorExpressionTokenizer(this); mEvaluator = new CalculatorExpressionEvaluator(mTokenizer); setState( CalculatorState.values()[ savedInstanceState.getInt(KEY_CURRENT_STATE, CalculatorState.INPUT.ordinal())]); mFormulaEditText.setSolver(mEvaluator.getSolver()); mResultEditText.setSolver(mEvaluator.getSolver()); mFormulaEditText.setText( mTokenizer.getLocalizedExpression( savedInstanceState.getString(KEY_CURRENT_EXPRESSION, ""))); mFormulaEditText.addTextChangedListener(mFormulaTextWatcher); mFormulaEditText.setOnKeyListener(mFormulaOnKeyListener); mFormulaEditText.setOnTextSizeChangeListener(this); mDeleteButton.setOnLongClickListener(this); mResultEditText.setEnabled(false); findViewById(R.id.lparen).setOnLongClickListener(this); findViewById(R.id.rparen).setOnLongClickListener(this); findViewById(R.id.fun_sin).setOnLongClickListener(this); findViewById(R.id.fun_cos).setOnLongClickListener(this); findViewById(R.id.fun_tan).setOnLongClickListener(this); // Disable IME for this application getWindow() .setFlags( WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); Button dot = (Button) findViewById(R.id.dec_point); dot.setText(String.valueOf(Constants.DECIMAL_POINT)); }
@Override public void onEvaluate(String expr, String result, int errorResourceId) { if (mCurrentState == CalculatorState.INPUT || mCurrentState == CalculatorState.GRAPHING) { if (result == null || Solver.equal(result, expr)) { mResultEditText.setText(null); } else { mResultEditText.setText(result); } } else if (errorResourceId != INVALID_RES_ID) { onError(errorResourceId); } else if (saveHistory(expr, result, true)) { mDisplayView.scrollToMostRecent(); onResult(result); } else if (mCurrentState == CalculatorState.EVALUATE) { // The current expression cannot be evaluated -> return to the input state. setState(CalculatorState.INPUT); } invalidateEqualsButton(); }
@Override protected void onResume() { super.onResume(); // Load up to date history mPersist = new Persist(this); mPersist.load(); mHistory = mPersist.getHistory(); incrementGroupId(); // When history is open, the display is saved as a Display Entry. Cache it if it exists. HistoryEntry displayEntry = null; if (mHistoryAdapter != null) { displayEntry = mHistoryAdapter.getDisplayEntry(); } // Create a new History Adapter (with the up-to-date history) mHistoryAdapter = new HistoryAdapter(this, mEvaluator.getSolver(), mHistory); mHistoryAdapter.setOnItemClickListener( new HistoryAdapter.OnItemClickListener() { @Override public void onItemClick(final HistoryEntry entry) { mDisplayView.collapse( new AnimationFinishedListener() { @Override public void onAnimationFinished() { mFormulaEditText.setText(entry.getFormula()); } }); } }); mHistoryAdapter.setOnItemLongclickListener( new HistoryAdapter.OnItemLongClickListener() { @Override public void onItemLongClick(HistoryEntry entry) { Clipboard.copy(getBaseContext(), entry.getResult()); } }); // Restore the Display Entry (if it existed) if (displayEntry != null) { mHistoryAdapter.setDisplayEntry(displayEntry.getFormula(), displayEntry.getResult()); } // Observe! Set! Typical adapter stuff. mHistory.setObserver( new History.Observer() { @Override public void notifyDataSetChanged() { mHistoryAdapter.notifyDataSetChanged(); } }); mDisplayView.setAdapter(mHistoryAdapter); mDisplayView.attachToRecyclerView( new ItemTouchHelper( new ItemTouchHelper.SimpleCallback( ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { @Override public boolean onMove( RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { return false; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { if (viewHolder.getAdapterPosition() < mHistory.getEntries().size()) { HistoryEntry item = mHistory.getEntries().get(viewHolder.getAdapterPosition()); mHistory.remove(item); mHistoryAdapter.notifyItemRemoved(viewHolder.getAdapterPosition()); } } })); mDisplayView.scrollToMostRecent(); }