From a414b10ce81f1294267b59025f726b835b31b41d Mon Sep 17 00:00:00 2001
From: str4d <str4d@mail.i2p>
Date: Tue, 8 Apr 2014 01:12:52 +0000
Subject: [PATCH] Long press to start/stop router (prevents accidental presses)

---
 TODO                                          |  3 --
 res/layout/fragment_main.xml                  |  2 +-
 res/values/strings.xml                        |  4 +--
 src/net/i2p/android/router/MainFragment.java  |  8 +++--
 .../android/router/util/LongToggleButton.java | 33 +++++++++++++++++++
 5 files changed, 41 insertions(+), 9 deletions(-)
 create mode 100644 src/net/i2p/android/router/util/LongToggleButton.java

diff --git a/TODO b/TODO
index a8ea00557..65fd88ebb 100644
--- a/TODO
+++ b/TODO
@@ -1,8 +1,5 @@
 # Required for release
 
-- Prevent accidental shutdown
-  - Add pop-up confirming router shutdown
-  - OR: make router button long-press
 - Display release notes directly on new router version
 - Text content
   - Move help content from release notes to help page
diff --git a/res/layout/fragment_main.xml b/res/layout/fragment_main.xml
index 6b796e107..8d5bc80bc 100644
--- a/res/layout/fragment_main.xml
+++ b/res/layout/fragment_main.xml
@@ -12,7 +12,7 @@
         android:scaleType="centerInside"
         android:src="@drawable/routerlogo_0" />
 
-    <ToggleButton
+    <net.i2p.android.router.util.LongToggleButton
         android:id="@+id/router_onoff_button"
         android:layout_width="match_parent"
         android:layout_height="68dp"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5a9b718e5..fe07e4b2c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -26,8 +26,8 @@
     <string name="label_browse">Browse</string>
     <string name="label_graphs">Graphs</string>
 
-    <string name="button_router_off">Press to start I2P</string>
-    <string name="button_router_on">I2P is running (press to stop)</string>
+    <string name="button_router_off">Long press to start I2P</string>
+    <string name="button_router_on">I2P is running (long press to stop)</string>
 
     <string name="first_start_title">Congratulations on getting I2P installed!</string>
     <string name="first_start_welcome"><b>Welcome to I2P!</b> Please <b>have patience</b> as I2P boots up and finds peers.</string>
diff --git a/src/net/i2p/android/router/MainFragment.java b/src/net/i2p/android/router/MainFragment.java
index fc115569e..a1e450568 100644
--- a/src/net/i2p/android/router/MainFragment.java
+++ b/src/net/i2p/android/router/MainFragment.java
@@ -26,6 +26,7 @@ import java.util.List;
 import net.i2p.android.router.R;
 import net.i2p.android.router.dialog.FirstStartDialog;
 import net.i2p.android.router.dialog.VersionDialog;
+import net.i2p.android.router.util.LongToggleButton;
 import net.i2p.android.router.util.Util;
 import net.i2p.data.DataHelper;
 import net.i2p.data.Destination;
@@ -101,10 +102,10 @@ public class MainFragment extends I2PFragmentBase {
         final ImageView lightImage = (ImageView) v.findViewById(R.id.main_lights);
         lightImage.setImageResource(R.drawable.routerlogo_0);
 
-        ToggleButton b = (ToggleButton) v.findViewById(R.id.router_onoff_button);
-        b.setOnClickListener(new View.OnClickListener() {
+        LongToggleButton b = (LongToggleButton) v.findViewById(R.id.router_onoff_button);
+        b.setOnLongClickListener(new View.OnLongClickListener() {
 
-            public void onClick(View view) {
+            public boolean onLongClick(View view) {
                 boolean on = ((ToggleButton) view).isChecked();
                 if (on) {
                     _startPressed = true;
@@ -116,6 +117,7 @@ public class MainFragment extends I2PFragmentBase {
                         updateOneShot();
                     }
                 }
+                return true;
             }
         });
 
diff --git a/src/net/i2p/android/router/util/LongToggleButton.java b/src/net/i2p/android/router/util/LongToggleButton.java
new file mode 100644
index 000000000..2db7af2dc
--- /dev/null
+++ b/src/net/i2p/android/router/util/LongToggleButton.java
@@ -0,0 +1,33 @@
+package net.i2p.android.router.util;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.ToggleButton;
+
+public class LongToggleButton extends ToggleButton {
+    public LongToggleButton(Context context) {
+        super(context);
+    }
+
+    public LongToggleButton(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public LongToggleButton(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    @Override
+    public boolean performClick() {
+        /* Cancel out toggle */
+        toggle();
+        return super.performClick();
+    }
+
+    @Override
+    public boolean performLongClick() {
+        /* When clicked, toggle the state */
+        toggle();
+        return super.performLongClick();
+    }
+}
-- 
GitLab