protected boolean saveHistory(String expr, String result, boolean ensureResult) { if (mHistory == null) { return false; } expr = cleanExpression(expr); if (!ensureResult || (!TextUtils.isEmpty(expr) && !TextUtils.isEmpty(result) && !Solver.equal(expr, result) && (mHistory.current() == null || !mHistory.current().getFormula().equals(expr)))) { mHistory.enter(expr, result); return true; } return false; }
protected void incrementGroupId() { mHistory.incrementGroupId(); }
@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(); }