reader/android: adds local CSV logging of gestures

* Logs gesture events to a local CSV file
* Removes GA tracking for now
* Adds a root .editorconfig

Change-Id: If8f683f8935666494344f64014d7b9403bcd5ea9
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..9f04b04
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,17 @@
+# EditorConfig is awesome: http://EditorConfig.org
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+
+[Makefile]
+indent_style = tab
+
+[*.java]
+indent_style = space
+indent_size = 4
+
+[*.{js,json,css,html}]
+indent_style = space
+indent_size = 2
\ No newline at end of file
diff --git a/android/app/src/main/java/io/v/android/apps/reader/BaseReaderActivity.java b/android/app/src/main/java/io/v/android/apps/reader/BaseReaderActivity.java
index 688cef9..d2d74e2 100644
--- a/android/app/src/main/java/io/v/android/apps/reader/BaseReaderActivity.java
+++ b/android/app/src/main/java/io/v/android/apps/reader/BaseReaderActivity.java
@@ -71,15 +71,9 @@
     }
 
     private void initTracker() {
-        // Obtain the shared Tracker instance.
-        ReaderApplication application = (ReaderApplication) getApplication();
-        mTracker = application.getDefaultTracker();
-
-        if (mTracker != null) {
-            mGestureListener = new GestureListener(mTracker, DeviceInfoFactory.getDeviceId(this));
-            mGestureDetector = new GestureDetectorCompat(this, mGestureListener);
-            mGestureDetector.setOnDoubleTapListener(mGestureListener);
-        }
+        mGestureListener = new GestureListener(this, DeviceInfoFactory.getDeviceId(this));
+        mGestureDetector = new GestureDetectorCompat(this, mGestureListener);
+        mGestureDetector.setOnDoubleTapListener(mGestureListener);
     }
 
     @Override
@@ -93,4 +87,5 @@
 
         return super.dispatchTouchEvent(ev);
     }
+
 }
diff --git a/android/app/src/main/java/io/v/android/apps/reader/GestureListener.java b/android/app/src/main/java/io/v/android/apps/reader/GestureListener.java
index a7bc6e1..5aba732 100644
--- a/android/app/src/main/java/io/v/android/apps/reader/GestureListener.java
+++ b/android/app/src/main/java/io/v/android/apps/reader/GestureListener.java
@@ -4,12 +4,17 @@
 
 package io.v.android.apps.reader;
 
+import android.util.Log;
 import android.view.GestureDetector;
 import android.view.MotionEvent;
 import android.view.ScaleGestureDetector;
+import android.content.Context;
 
-import com.google.android.gms.analytics.HitBuilders;
-import com.google.android.gms.analytics.Tracker;
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.File;
+import java.io.IOException;
+import java.sql.Timestamp;
 
 /**
  * Gesture listener implementation for sending gesture events to the Google Analytics tracker.
@@ -18,23 +23,50 @@
 public class GestureListener implements GestureDetector.OnGestureListener,
         GestureDetector.OnDoubleTapListener, ScaleGestureDetector.OnScaleGestureListener {
 
+    private static final String TAG = GestureListener.class.getSimpleName();
     private static final String CATEGORY = "Touch Gesture";
+    private static BufferedWriter buffer;
 
-    private final Tracker mTracker;
-    private final String mLabel;
+    private final String mDeviceId;
 
-    public GestureListener(Tracker tracker, String label) {
-        mTracker = tracker;
-        mLabel = label;
+    public GestureListener(Context context, String deviceId) {
+        mDeviceId = deviceId;
+
+        if (buffer == null) {
+            File directory = context.getFilesDir();
+            String basename = String.format("reader-%s.log", now());
+            File file = new File(directory, basename);
+
+            try {
+                buffer = new BufferedWriter(new FileWriter(file));
+                buffer.write("DEVICE ID");
+                buffer.write(",");
+                buffer.write("ACTION");
+                buffer.write(",");
+                buffer.write("TIMESTAMP");
+                buffer.newLine();
+                buffer.flush();
+            } catch (IOException e) {
+                handleException(e);
+            }
+        }
     }
 
     private void send(String action) {
-        mTracker.send(new HitBuilders.EventBuilder()
-                .setCustomDimension(1, Long.toString(System.currentTimeMillis()))
-                .setCategory(CATEGORY)
-                .setAction(action)
-                .setLabel(mLabel)
-                .build());
+        try {
+            buffer.write(mDeviceId);
+            buffer.write(",");
+            buffer.write(action);
+            buffer.write(",");
+            buffer.write(now().toString());
+            buffer.newLine();
+        } catch (IOException e) {
+            handleException(e);
+        }
+    }
+
+    private Timestamp now() {
+        return new Timestamp(System.currentTimeMillis());
     }
 
     @Override
@@ -105,4 +137,8 @@
     public void onScaleEnd(ScaleGestureDetector detector) {
         send("ScaleEnd");
     }
+
+    private static void handleException(Exception e) {
+        Log.e(TAG, e.getMessage(), e);
+    }
 }