Show cursor

Change-Id: I31e99d20f3c0fa887f057b352e69969cb805016e
diff --git a/src/com/android/terminal/Terminal.java b/src/com/android/terminal/Terminal.java
index 7aa7949..b6e981e 100644
--- a/src/com/android/terminal/Terminal.java
+++ b/src/com/android/terminal/Terminal.java
@@ -58,6 +58,7 @@
         public void onDamage(int startRow, int endRow, int startCol, int endCol);
         public void onMoveRect(int destStartRow, int destEndRow, int destStartCol, int destEndCol,
                 int srcStartRow, int srcEndRow, int srcStartCol, int srcEndCol);
+        public void onMoveCursor(int posRow, int posCol, int oldPosRow, int oldPosCol, int visible);
         public void onBell();
     }
 
@@ -68,6 +69,10 @@
 
     private TerminalClient mClient;
 
+    private boolean mCursorVisible;
+    private int mCursorRow;
+    private int mCursorCol;
+
     private final TerminalCallbacks mCallbacks = new TerminalCallbacks() {
         @Override
         public int damage(int startRow, int endRow, int startCol, int endCol) {
@@ -88,6 +93,17 @@
         }
 
         @Override
+        public int moveCursor(int posRow, int posCol, int oldPosRow, int oldPosCol, int visible) {
+            mCursorVisible = (visible != 0);
+            mCursorRow = posRow;
+            mCursorCol = posCol;
+            if (mClient != null) {
+                mClient.onMoveCursor(posRow, posCol, oldPosRow, oldPosCol, visible);
+            }
+            return 1;
+        }
+
+        @Override
         public int bell() {
             if (mClient != null) {
                 mClient.onBell();
@@ -149,6 +165,18 @@
         }
     }
 
+    public boolean getCursorVisible() {
+        return mCursorVisible;
+    }
+
+    public int getCursorRow() {
+        return mCursorRow;
+    }
+
+    public int getCursorCol() {
+        return mCursorCol;
+    }
+
     public String getTitle() {
         // TODO: hook up to title passed through termprop
         return mTitle;
diff --git a/src/com/android/terminal/TerminalLineView.java b/src/com/android/terminal/TerminalLineView.java
index fff1301..11a9282 100644
--- a/src/com/android/terminal/TerminalLineView.java
+++ b/src/com/android/terminal/TerminalLineView.java
@@ -81,5 +81,13 @@
 
             col += m.run.colSize;
         }
+
+        if (mTerm.getCursorVisible() && mTerm.getCursorRow() == row) {
+            canvas.save();
+            canvas.translate(mTerm.getCursorCol() * m.charWidth, 0);
+            canvas.drawRect(0, 0, m.charWidth, m.charHeight, m.cursorPaint);
+            canvas.restore();
+        }
+
     }
 }
diff --git a/src/com/android/terminal/TerminalView.java b/src/com/android/terminal/TerminalView.java
index f6794b7..076da80 100644
--- a/src/com/android/terminal/TerminalView.java
+++ b/src/com/android/terminal/TerminalView.java
@@ -68,6 +68,7 @@
 
         final Paint bgPaint = new Paint();
         final Paint textPaint = new Paint();
+        final Paint cursorPaint = new Paint();
 
         /** Run of cells used when drawing */
         final CellRun run;
@@ -202,6 +203,11 @@
         }
 
         @Override
+        public void onMoveCursor(int posRow, int posCol, int oldPosRow, int oldPosCol, int visible) {
+            post(mDamageRunnable);
+        }
+
+        @Override
         public void onBell() {
             Log.i(TAG, "DING!");
         }
@@ -277,6 +283,8 @@
             term.setClient(mClient);
             mTermKeys.setTerminal(term);
 
+            mMetrics.cursorPaint.setColor(0xfff0f0f0);
+
             // Populate any current settings
             mRows = mTerm.getRows();
             mCols = mTerm.getCols();