From 42649e02eabddc7edb62030b42a47e8060bcc1cf Mon Sep 17 00:00:00 2001
From: str4d <str4d@mail.i2p>
Date: Fri, 6 Dec 2013 02:20:32 +0000
Subject: [PATCH] Replaced logo with status images, combined start and stop
 buttons

---
 res/drawable/start_router_icon.png            | Bin 1938 -> 0 bytes
 res/drawable/stop_router_icon.png             | Bin 1946 -> 0 bytes
 res/layout-land/fragment_main.xml             |  56 ++++++++++++
 res/layout/fragment_main.xml                  |  80 +++++++-----------
 res/values/strings.xml                        |   3 +
 .../android/router/fragment/MainFragment.java |  56 ++++--------
 6 files changed, 109 insertions(+), 86 deletions(-)
 delete mode 100644 res/drawable/start_router_icon.png
 delete mode 100644 res/drawable/stop_router_icon.png
 create mode 100644 res/layout-land/fragment_main.xml

diff --git a/res/drawable/start_router_icon.png b/res/drawable/start_router_icon.png
deleted file mode 100644
index 0fbe32818406471c6358d778d02605a4fc8dce3a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1938
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
Y0D~i}*sSzW{Qv*}07*qoM6N<$g1mB}9RL6T

diff --git a/res/drawable/stop_router_icon.png b/res/drawable/stop_router_icon.png
deleted file mode 100644
index 9253d673240423740ba66e0d9c62d6bb228ff7c1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1946
zcmV;L2W9w)P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU(JV``BRCwB?R|{}d)fxWIeeW)Lu)8cx
z!tydi<q-tzKpTsX8Et_Y+o?0o=zutCwS%?H(5YpNbvi{H(~*jf4&y+f!QiVc6(f$o
z5CsQ_fe<2)CM1N!B;>J%-E2Z$d++Uk?%v>K*$t7N$v?S!&OPV<&i6krGffkGFvegH
zc4X7?JN;==xe*%y__~Sf4EqH-f{C&vc~9(CX=ZrLU39jTWL_E?8vcoP)2#>=Zm<s*
z#sMHkqC)R)LS4za9{S<F9so;Ok~vwG%q8yZTVRf~AzJe!T}z2yFO_n01X9KVxN~1b
zOIb0BcAk0+;~YsDP((~ueL?7b=OKvcM1Yn809UTVq$T%^-y`(ZyQr)>y>s``Z)#}q
z@(lxU%b2YZ0ORs8KqTctDh71GFyNZ{8w_+dqOrX6{6obR#kBA($;fyBBpR2!^l1Kc
zLD3+kd7)o!B<EB~6cRZ>BrsEe;=2c;D;KT%-@qfURdMP&?Ax0+!hkS0m{y>AgD{O4
z%;6Auw8~vO3Hvc}4KI|yGPEDuioJ(xH#BziHPK2WPR)(^fTStN^-Rel0!cXxGJ%qW
zD8u^Gf-4biIfZkT2TrctR#W<Ys80nz_PWJ;HQy8%gBLCOL3Cejf7|Q5cYz7%_-0=b
z?kYO+Yg*_e8N~M-iC2>~3AbvKa!5yrZcoYu$suG4CV;7vA^Df0X-_dW{i}90?Q18A
z#;N%~02D6H$`lk8vd2dZbdWA`K#Bk+$PN*q1_}{6`7w?jtt{Dgp!rLi`WS9tI87k@
zY(XGb^W|6$2D8sfsaIn(ufT5qq7-wowN<A!{diTXB*g?`OO!D0x8*6*vJ-%qm+kub
zgq&IAMo|heB+r1R2t87b{54w$2v7bjNm@4Jks}6h;or~E?{d$004SPd-tO{K2<l<m
z`;+D=7{hHax?59(x(SiYCU}=1{NKa4(A0b=#X;8qkUa`p;0^>SibLdY%9Z#xlUBrp
z2^ODYk_STOVnoiJz?UCx`QrXRS3f&ebT|P>g2-Ir#B89i9U{^#kGIOP9)m$*8fMaz
z%tUT$2Ik77qA(Aw2e+f-owApn-`?;~J3<Ch0bq`PAaH8)(oU0lfVd*tnxt6G2x89a
z^)Mn8S34!+kx49RB6_Pk(NtQE&izLydL;-lMGRFnT@XI+XKeig6}1(Kv~k@|02Aro
z43ddXfa?l_OP+iF4}Y07I}heS({}*4|4F3WrJ(+mGIW%k!Sof&;LD#6$>Xt{Qy&~a
z&)L&xEkA&0Z|~Ooj@CZyOw)+~xYu!Sl^p=IioX^dTlB=nEYWNwHU_VlfYT0_jI%`_
zAbhd|xBYG{MjFmw=&M7Bbzh9zbW#?y#dku!c^*!`{U*YlUEA(ER{PW_2(H^1<UC9+
zk#vp9ibehr|IGX>(W6><CZ32SE4C?S5dAue(Bbo#|I8W;?%9Q*{U4G4M2UfPOZfBP
zzW-ow_fE`x{3)bmW<I`S;j99uBaPK-iR<pq+BkXsQedbXR@VVrcv|*ML(@O@W9Bb^
zf!Lu>VRW@o-=b0LAk(rG7ye9hdS@Gk%gZqBrz?=9h#Q?Oj|IRrX>#^z&y1OL`QGnB
zkB6r_2jTh(bRDRKFW`sXSP!NXs{`chm-|WjZ0Wb=_?q5Whl#!nsDi*5aE;XwStc%B
zd&_eF?8S6@N=k<9Hxik`m5p%SF_i6idvCU;Ef?CFKoN+HPpZev`H=^12Wx2@4FlzR
z3@Aab^6cdKKeE!Y#k@qIU0JyB=?;9hed|XnUp@CKqi{py5`~<0{i?^`315om7Kaa{
zVnEB8b6WvZX_-O^B6ZkqADZ`WN9p?qUoP6!{4Q@im@H6k2t!QIK;OgnPz{U46W3K-
zQi39X;O`jW@HMp~833W|k9lhXbC;0q$%d3#VX8Ru_YL^?Py<(9V)uPouc4m^4-78y
zXVT%SmON#%_(zXGkrN6>&>PdMoC!%vdiyCq_|t?LR25@%dxPQZdw;_-uU9_w`I%mB
zXddMK{E&U!k<9^5cS*qSC$E=bm_{-JsA$G5-F&ed`?|ufIV<BeUGWPKPMH<_;Zl{C
z+L24$IPuntSo_9tuDp`gTW#gM^BH*aeEZ>s-u^vRwe@sEnLa3}o2G_Flod<(GoRyY
z{2l%--{Y(e*EFSf&q>?pTUY?Sy9Jdcn?nWbYktMS+dbcqgFfDT_N+W!SF~eco~YM+
zy&`w|RQQPvNcOSh6QNKD4HsHa*Ax9@bya;4-{WjtS;EI@`tjoY2(Ns@F*9<<3$@E_
z<sqB4L<{qJok5bbYHHw)!YuF8K1s|s9Toc9m|nBzV$YV6mM-49wK?1N#99FRuxTV-
zo9b3u`B<&CXx9+Fhpvwa_MH9cgg*O>9{bFc#b`7^j25I}d&7A8d}i-)*=I0E*D`F|
gd?Z;p{+|E?0GNWomJ-P~B>(^b07*qoM6N<$f<8U7CjbBd

diff --git a/res/layout-land/fragment_main.xml b/res/layout-land/fragment_main.xml
new file mode 100644
index 000000000..882c0f6bd
--- /dev/null
+++ b/res/layout-land/fragment_main.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="horizontal"
+    android:baselineAligned="false" >
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical" >
+
+        <ImageView
+            android:id="@+id/main_lights"
+            android:src="@drawable/routerled_r"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:scaleType="centerInside"
+            android:contentDescription="@string/desc_i2p_logo" />
+
+        <ToggleButton
+            android:id="@+id/router_onoff_button"
+            android:layout_width="match_parent"
+            android:layout_height="68dp"
+            android:textOff="@string/button_router_off"
+            android:textOn="@string/button_router_on" />
+    </LinearLayout>
+
+    <ScrollView
+        android:layout_width="0dp"
+        android:layout_height="fill_parent"
+        android:layout_weight="2"
+        android:fillViewport="true"
+        android:padding="10dp"
+        android:scrollbarStyle="outsideInset" >
+
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical" >
+
+            <TextView
+                android:id="@+id/textView4"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/label_statistics"
+                android:textAppearance="?android:attr/textAppearanceLarge" />
+
+            <TextView
+                android:id="@+id/main_status_text"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content" />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/fragment_main.xml b/res/layout/fragment_main.xml
index 695f74454..92df3c01d 100644
--- a/res/layout/fragment_main.xml
+++ b/res/layout/fragment_main.xml
@@ -1,63 +1,47 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    >
+    android:orientation="vertical" >
 
     <ImageView
-        android:contentDescription="@string/desc_i2p_logo"
+        android:id="@+id/main_lights"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:src="@drawable/i2plogo" />
+        android:contentDescription="@string/desc_i2p_logo"
+        android:scaleType="centerInside"
+        android:src="@drawable/routerled_r" />
 
-    <Button
-        android:id="@+id/router_start_button"
+    <ToggleButton
+        android:id="@+id/router_onoff_button"
         android:layout_width="match_parent"
         android:layout_height="68dp"
-        android:text="@string/action_router_start"
-        android:drawableLeft="@drawable/start_router_icon" />
+        android:textOff="@string/button_router_off"
+        android:textOn="@string/button_router_on" />
 
-    <Button
-        android:id="@+id/router_quit_button"
-        android:layout_width="match_parent"
-        android:layout_height="68dp"
-        android:text="@string/action_router_stop"
-        android:drawableLeft="@drawable/stop_router_icon" />
-<!--
-<Button
-    android:id="@+id/router_stop_button"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:text="OLD STOP"
-    android:drawableLeft="@drawable/stop_router_icon" />
--->
-
-<ScrollView
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:fillViewport="true"
-    android:padding="10dp"
-    android:scrollbarStyle="outsideInset"
-    >
-<LinearLayout
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    >
+    <ScrollView
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:fillViewport="true"
+        android:padding="10dp"
+        android:scrollbarStyle="outsideInset" >
 
-    <TextView
-        android:id="@+id/textView4"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/label_statistics"
-        android:textAppearance="?android:attr/textAppearanceLarge" />
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical" >
 
-    <TextView
-        android:id="@+id/main_status_text"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content" />
+            <TextView
+                android:id="@+id/textView4"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/label_statistics"
+                android:textAppearance="?android:attr/textAppearanceLarge" />
 
-</LinearLayout>
-</ScrollView>
-</LinearLayout>
+            <TextView
+                android:id="@+id/main_status_text"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content" />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 061e3d296..18653b227 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -29,6 +29,9 @@
     <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="drawer_open">Open nav</string>
     <string name="drawer_close">Close nav</string>
     <string name="action_search">Search</string>
diff --git a/src/net/i2p/android/router/fragment/MainFragment.java b/src/net/i2p/android/router/fragment/MainFragment.java
index 8dd16a920..374776390 100644
--- a/src/net/i2p/android/router/fragment/MainFragment.java
+++ b/src/net/i2p/android/router/fragment/MainFragment.java
@@ -1,12 +1,14 @@
 package net.i2p.android.router.fragment;
 
 import android.app.Activity;
+import android.graphics.drawable.AnimationDrawable;
 import android.os.Bundle;
 import android.os.Handler;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.Button;
+import android.widget.ToggleButton;
+import android.widget.ImageView;
 import android.widget.TextView;
 import java.text.DecimalFormat;
 import net.i2p.android.router.R;
@@ -78,32 +80,26 @@ public class MainFragment extends I2PFragmentBase {
                              Bundle savedInstanceState) {
         View v = inflater.inflate(R.layout.fragment_main, container, false);
 
-        Button b;
+        final ImageView lightImage = (ImageView) v.findViewById(R.id.main_lights);
+        lightImage.setImageResource(R.drawable.routerled_r);
 
-        /*
-         * hidden, unused b = (Button) v.findViewById(R.id.router_stop_button);
-         * b.setOnClickListener(new View.OnClickListener() { public void
-         * onClick(View view) { RouterService svc = _routerService; if (svc !=
-         * null && _isBound) { setPref(PREF_AUTO_START, false);
-         * svc.manualStop(); updateOneShot(); } } });
-         */
-
-        b = (Button) v.findViewById(R.id.router_start_button);
+        ToggleButton b = (ToggleButton) v.findViewById(R.id.router_onoff_button);
         b.setOnClickListener(new View.OnClickListener() {
 
             public void onClick(View view) {
-                _startPressed = true;
-                mCallback.onStartRouterClicked();
-                updateOneShot();
-            }
-        });
-
-        b = (Button) v.findViewById(R.id.router_quit_button);
-        b.setOnClickListener(new View.OnClickListener() {
-
-            public void onClick(View view) {
-                if(mCallback.onStopRouterClicked()) {
+                boolean on = ((ToggleButton) view).isChecked();
+                if (on) {
+                    _startPressed = true;
+                    lightImage.setImageResource(R.drawable.routerled_ry);
+                    ((AnimationDrawable) lightImage.getDrawable()).start();
+                    mCallback.onStartRouterClicked();
                     updateOneShot();
+                } else {
+                    if(mCallback.onStopRouterClicked()) {
+                        lightImage.setImageResource(R.drawable.routerled_ry);
+                        ((AnimationDrawable) lightImage.getDrawable()).start();
+                        updateOneShot();
+                    }
                 }
             }
         });
@@ -152,7 +148,6 @@ public class MainFragment extends I2PFragmentBase {
     private class OneShotUpdate implements Runnable {
 
         public void run() {
-            updateVisibility();
             updateStatus();
         }
     }
@@ -163,7 +158,6 @@ public class MainFragment extends I2PFragmentBase {
         private final int delay = 1000;
         private final int toloop = delay / 500;
         public void run() {
-            updateVisibility();
             if(counter++ % toloop == 0) {
                 updateStatus();
             }
@@ -172,20 +166,6 @@ public class MainFragment extends I2PFragmentBase {
         }
     }
 
-    private void updateVisibility() {
-        boolean showStart = mCallback.shouldShowStart();
-        Button start = (Button) getActivity().findViewById(R.id.router_start_button);
-        start.setVisibility(showStart ? View.VISIBLE : View.INVISIBLE);
-
-        boolean showStop = mCallback.shouldShowStop();
-        // Old stop but leave in memory. Always hide for now.
-        // Button stop = (Button) findViewById(R.id.router_stop_button);
-        // stop.setVisibility( /* showStop ? View.VISIBLE : */ View.INVISIBLE);
-
-        Button quit = (Button) getActivity().findViewById(R.id.router_quit_button);
-        quit.setVisibility(showStop ? View.VISIBLE : View.INVISIBLE);
-    }
-
     public boolean onBackPressed() {
         RouterContext ctx = getRouterContext();
         // RouterService svc = _routerService; Which is better to use?!
-- 
GitLab