Introducing an explicit delete mode: clear vs. backspace

Also, fixing bug: 3360891

Change-Id: I5faa0553d549d7e931c655f3920b82bb91563678
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index e6993a2..56744c7 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -24,15 +24,16 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
-import android.widget.Button;
 
-public class Calculator extends Activity implements PanelSwitcher.Listener {
+public class Calculator extends Activity implements PanelSwitcher.Listener, Logic.Listener {
     EventListener mListener = new EventListener();
     private CalculatorDisplay mDisplay;
     private Persist mPersist;
     private History mHistory;
     private Logic mLogic;
     private PanelSwitcher mPanelSwitcher;
+    private View mClearButton;
+    private View mBackspaceButton;
 
     private static final int CMD_CLEAR_HISTORY  = 1;
     private static final int CMD_BASIC_PANEL    = 2;
@@ -53,11 +54,25 @@
         setContentView(R.layout.main);
 
         mPersist = new Persist(this);
+        mPersist.load();
+
         mHistory = mPersist.history;
 
         mDisplay = (CalculatorDisplay) findViewById(R.id.display);
 
-        mLogic = new Logic(this, mHistory, mDisplay, (Button) findViewById(R.id.equal));
+        mClearButton = findViewById(R.id.clear);
+        mClearButton.setOnClickListener(mListener);
+        mClearButton.setOnLongClickListener(mListener);
+
+        mBackspaceButton = findViewById(R.id.del);
+        mBackspaceButton.setOnClickListener(mListener);
+        mBackspaceButton.setOnLongClickListener(mListener);
+
+        mLogic = new Logic(this, mHistory, mDisplay);
+        mLogic.setListener(this);
+
+        mLogic.setDeleteMode(mPersist.getDeleteMode());
+
         HistoryAdapter historyAdapter = new HistoryAdapter(this, mHistory, mLogic);
         mHistory.setObserver(historyAdapter);
 
@@ -101,10 +116,16 @@
         setOnClickListener(R.id.factorial);
         setOnClickListener(R.id.sqrt);
 
-        View view;
-        if ((view = findViewById(R.id.del)) != null) {
-            view.setOnClickListener(mListener);
-            view.setOnLongClickListener(mListener);
+        updateDeleteMode();
+    }
+
+    private void updateDeleteMode() {
+        if (mLogic.getDeleteMode() == Logic.DELETE_MODE_BACKSPACE) {
+            mClearButton.setVisibility(View.GONE);
+            mBackspaceButton.setVisibility(View.VISIBLE);
+        } else {
+            mClearButton.setVisibility(View.VISIBLE);
+            mBackspaceButton.setVisibility(View.GONE);
         }
     }
 
@@ -180,6 +201,7 @@
     public void onPause() {
         super.onPause();
         mLogic.updateHistory();
+        mPersist.setDeleteMode(mLogic.getDeleteMode());
         mPersist.save();
     }
 
@@ -204,4 +226,9 @@
     public void onChange() {
         invalidateOptionsMenu();
     }
+
+    @Override
+    public void onDeleteModeChange() {
+        updateDeleteMode();
+    }
 }