From 75d6df7789a1047e618b42bb9ca45b7250ad7157 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Thu, 5 May 2016 13:13:44 +0000
Subject: [PATCH] DesktopGui: - Remove all static log, context, and instance
 fields - Make Main class a RouterApp - Remove unused ConfigurationManager
 class - Translate tooltip, disable tooltip on linux - Use safer exec call to
 start i2p - Remove all images, use itoopie - Don't start spinner thread in
 router context - Handle various startup errors better - Synchs, finals,
 javadocs, cleanups

---
 apps/desktopgui/build.xml                     |   6 +-
 apps/desktopgui/resources/images/logo.jpg     | Bin 1105 -> 0 bytes
 apps/desktopgui/resources/images/logo.png     | Bin 34366 -> 0 bytes
 .../resources/images/logo_green.jpg           | Bin 1309 -> 0 bytes
 .../resources/images/logo_orange.jpg          | Bin 1289 -> 0 bytes
 apps/desktopgui/resources/images/logo_red.jpg | Bin 1312 -> 0 bytes
 .../i2p/desktopgui/ExternalTrayManager.java   |  17 +-
 .../i2p/desktopgui/InternalTrayManager.java   |  23 ++-
 .../src/net/i2p/desktopgui/Main.java          | 172 ++++++++++++++----
 .../src/net/i2p/desktopgui/TrayManager.java   |  78 ++++----
 .../gui/DesktopguiConfigurationFrame.java     |  13 +-
 .../desktopgui/i18n/DesktopguiTranslator.java |  17 +-
 .../i2p/desktopgui/router/RouterManager.java  |  50 +----
 .../desktopgui/util/ConfigurationManager.java | 103 -----------
 .../net/i2p/desktopgui/util/I2PDesktop.java   |   5 +-
 15 files changed, 239 insertions(+), 245 deletions(-)
 delete mode 100644 apps/desktopgui/resources/images/logo.jpg
 delete mode 100644 apps/desktopgui/resources/images/logo.png
 delete mode 100644 apps/desktopgui/resources/images/logo_green.jpg
 delete mode 100644 apps/desktopgui/resources/images/logo_orange.jpg
 delete mode 100644 apps/desktopgui/resources/images/logo_red.jpg
 delete mode 100644 apps/desktopgui/src/net/i2p/desktopgui/util/ConfigurationManager.java

diff --git a/apps/desktopgui/build.xml b/apps/desktopgui/build.xml
index 7e25f38977..3f6256b899 100644
--- a/apps/desktopgui/build.xml
+++ b/apps/desktopgui/build.xml
@@ -5,7 +5,6 @@
 	<property name="build" value="build"/>
 	<property name="dist"  location="dist"/>
 	<property name="jar" value="desktopgui.jar"/>
-	<property name="resources" value="resources"/>
 	<property name="javadoc" value="javadoc"/>
 	<property name="javac.compilerargs" value=""/>
 	<property name="javac.version" value="1.6" />
@@ -36,9 +35,6 @@
                     <pathelement location="../../router/java/build/router.jar" />
                 </classpath>
             </javac>
-            <copy todir="${build}/desktopgui/${resources}">
-                <fileset dir="${resources}" />
-            </copy>
         </target>
 
         <target name="bundle" unless="no.bundle">
@@ -76,6 +72,8 @@
 	<target name="jar" depends="compile, bundle, listChangedFiles" unless="jar.uptodate" >
 		<!-- set if unset -->
 		<property name="workspace.changes.tr" value="" />
+                <!-- ideal for linux: 24x24, but transparency doesn't work -->
+                <copy tofile="${build}/desktopgui/resources/images/logo.png" file="../../installer/resources/themes/console/images/itoopie_xsm.png" />
 		<jar basedir="${build}" excludes="messages-src/**" destfile="${dist}/${jar}">
 			<manifest>
 				<attribute name="Main-Class" value="net.i2p.desktopgui.Main"/>
diff --git a/apps/desktopgui/resources/images/logo.jpg b/apps/desktopgui/resources/images/logo.jpg
deleted file mode 100644
index f1b5ccfc8728618281387d7a4b8ed11dedb8f39e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1105
zcmex=<NpH&0WUXCHwH#VMur521O|rxw;7y4JVr_Y$Ph~OgZ2JDz#z!MAi^NY%&5e`
zB*@4t$oT&VgA@Y;BP$~VGGJxr;N)Wde}q9_fPs;PiHVVsg^L-YfR&krjh%^uk&{74
zSVUA(P)tfWJR)-Pv>BJL-S~fmL6VVykrkp6O0qIAGBLCKKf<6a$jHdR$jrjT46}@p
zNsw7ck%7f9P}osPxp3nDTMRtRj0{YI%z_N|3?A3>4lceFx4+u*=F0g|w>Yz+XI<WK
z(Mmo}@$0im*K^rdJjx2$u;u(Y*N*;q8aXvS#o|SiW|{<q@kh6x$=8!i`OhG(X=z)2
zZ`wcUzhN)c(`3`WZjroq_SH_=zNM$arIxz2nM%p`*m;`tKUdE&>}lN=_wSaxDx*U0
zWRJoIwV7K&)%_)PU&n5IF}r+WZRv~SWzyMZ@+Yrk*DjU1r!8_YXZC924NLWw1nv;=
z7rlJYReHOjn#w_={$O99b~c}hdWBz%PtOyzlG$teJNJ9v;rp_;?i5T5PqXHf+P+}d
z$2Ca@BI92Ag(og9nx1y?$E=GYs~=R<`mkhk{gaal_)?Hzyu3*HNN2?4#XQUp=en15
zyxP6u+*MBB1JCEITBs&ddE7PME3JCUg=s2Gjrp~inF|%H)hc%_wK!+@Yt0J#4C@Ww
zW6r<Vx|>{TYjM?T)5rcx(;~}eWqLQ%9=Wh#!6dhdsgg@#&uqzdPU7!Ox|MLu%E#l;
zQt1VcuWgf5o_g)ik6pZfEmzpTuG{^eVO^!~UB!~AiDfrehXrq%z2AJX=_<jkE891G
zePzj6sg`OxsePUH=dK&hURE2Nk2d*C={+Ub)uoijsQW<u;BAp_DI0?Y*KX(k#Q*B^
zr`xiBzsEoQwAOrAl2)m3iL1R*yw0g*{Kw*g;v9>fH)e+?iw9Ok&s;VCO4v+=Hf@u<
z^_K4WGHjJcuf=vA`MfsW<Xdds*WG6mQ*S)dz4=DFYt@ejGOJE8+_-FTnd$A1n|4M8
z5!so7OJ+SiG-JVhmhk5{K2Kk)V-fVX<<Qn^C;RV+v`6jDzP7C-&{)%5ZQ`tHU$b(Y
ziUd*?yM0XCwOeHy=LZkYqNF>2HB-;|%B^pgd3-Kz9X~(Eo1W)6Pd>ags{Qqi-?`4$
zNBv}lkJ_t4RX(5Ut0r0<zWaCg(u<rt%%NYNJH7akvMylFC0Ci|YumdOTT{I`L^y-<
z0*g2L{rrBFg+=7B&g7FOKV7@*%U^$eK4t3ffa>o*oR|M+IFQ%>i}~>3<G0m2?GLY5
RwQAL#RZruye!l*H698CJregpA

diff --git a/apps/desktopgui/resources/images/logo.png b/apps/desktopgui/resources/images/logo.png
deleted file mode 100644
index ad89a98643d2fd0a323a9beadd1a70f05de9d159..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 34366
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
L{an^LB{Ts5mrPb^

diff --git a/apps/desktopgui/resources/images/logo_green.jpg b/apps/desktopgui/resources/images/logo_green.jpg
deleted file mode 100644
index d558efcea3a319fdea21fd624fe5b72813d37918..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1309
zcmex=<NpH&0WUXCHwH#VMur521O|rxw;7y4JVr_Y$Ph~OgZ2JDz#z!MAi^NY%&5e`
zB*@4t$oT&VgCqk36Eh<NGGJ%n;9~uMgh5Aufsuuofr){Ig&iW#%EZjV#>mdWz$qjm
zDk&xv9uYZl+KkKBuKz#6APVv_L>ZK1<NSYwL0*u786<<Sgo&Ajm645Ih(TCH^#3ge
z9%e=cCP8LF2787*v$_|Q-h5~NCiY2n^AD%<n@m&Bb-G+>K3Zh9t2eg6>&we+Dl*%7
zq{KXhm9#Fj+tda~Yw)`6oBbucpYzu=E|-L&*w%_yfAi1o?S1{c?Raw4%g*2KF&^uS
z-t|jl=!9pQdEYJBIPLhMc{4twxh#v!Zqs&cciq%yb4PvJjKi}^Pu}^@5OP<Cd*V*>
z8+<=3+1bPcc3qgUF8tG{#Yx8tEY8lbjZoeso%uc4c}84J>696l`FArov#2keUM#M0
zW`20Ie`Nl;750~G{V#6N|GRM0>*-b77F}*CJ$I%-s_lr?+(of7HkU;n@Ca-=QZ}7s
z#xGe9*KHwIZ}S3|M&y*u-n(9Tb+P-=mzl4;KYHJO$Gcl3aM|rm`6VCHKTGA8?w9qs
zb#doc_T@J&bs3yJd_1LNor|WeD}zt({>kx2Gc&V%KgRNWdv>==<4W$$@SOtB|1<R4
z@4Vl)_}0a3UCx(YzjT#&_9#WBbCt_lmo71%iSwuQZND@-@^7U6;yGVGzdm(zu~xN+
z-@a{g^Cz3EQ43C+&80bQ^`?c#%0Gs%o#38!NOHp_$qOHsp6L}0o^E@@sp!$)8-LCJ
zGw@{H|CYFV|K&dpzwUfpn)+VWG+EbviO#J1p&{R+4RWkDF>pR_m(^uj9Y5>uhN8F~
zyz6+j+Hm~odZTQ->X=Gz;+7qICbYe7`g2kL=JD&>-@aP=XYPLn_0E0PpZ+tLzJ5}i
zeRiwQ=}S?brN8#p^zy$-Ilq?I=IHCn{|x><oy<(^?cwu(OCJ6HzMQ4n$iIKj@v~Mp
zZEk+fjW+r+ZBlI9@@TbxAt&dCytTRd>L*CcN+z(D?{<u}?|${Cov5l^B;;!IY@a)S
zL2}7%*)_gTu2$|X-W@G(b%T%dVB%R#jTbIE&NMDwldkBTXWerw&Cs(~wZHLd@=2-d
zw<6d27x8W|Juh4^*Xs$V$|Si%`tkWP{_;(Smb0jS`Z@8!`K>*th1^Qmi<V8DKYhxp
z;3-cd!ua_mR-gFka+%ljvs`7!vq}C|t&g6q{UEi{Iwa5}?XjxrjceC7IqEO;miYKy
zDy24Uzv@$=A1nQ5em=F_WLo7FeQ^_c##NKIx(mDI83o1mre>=M{Sw)5&-SrT|Jt+K
z@1^UCXE0sORX%ekd0qB#U%ev{9$ad#Tq2iEXOlQOq0s32pQTHmI>>XG1>L%E{h+Mm
z;fkm^QFr#w)Zc0EWoiFQx}g5<9vhqB>7fx9e5dz&e=1H9ikW$HU5ddemh(3pZ6-}x
z?jbC3Oki#DxtTM|=O?|dT5PteaN&Gox%Q`NCsc%<KifIsuz}!Y4)sYvK|(5r&A=)r
Kf>c)jzX<@HH4?u7

diff --git a/apps/desktopgui/resources/images/logo_orange.jpg b/apps/desktopgui/resources/images/logo_orange.jpg
deleted file mode 100644
index d131f21b6297f0955632ab353844db0c4a8c587f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1289
zcmex=<NpH&0WUXCHwH#VMur521O|rxw;7y4JVr_Y$Ph~OgZ2JDz#z!MAi^NY%&5e`
zB*@4t$oT&VgCqk36Eh<NGT>lg=VJYTgh5Aufsuuofsv7g8!FAp%)-Xb$i%_PAS5gq
zE+Q(W965E`j4M~K|3AVY!N|bG3{?lA*f<ziIR77EP!R;lFfp>g<(ZfnSy<VG1lff}
z6d6Q0lvMuTV&GwBWMC3x7G$tzNYnh+xsJE+d{XQtIlc!!L#IZ1XLp1;9jI3eKeIU5
z!+)N1p39xB9UJmJ!~{h|439Jl{!rpqn=ZSg_DqKxcSdY$?+GK9kJqNoH~nVbe@;HV
z``w)SjBst1r?*@@53IS?;;p`M)6-Hh(_bD2HRsqh`)Bk>%ANBwxs?+h{=z5dKFfoO
zd9MU&Do@^X(x1#c$?Bc9%33K`Wv{iHYgINI|D49!-5PnyV^_h2>ZW(MR%QM!TQ^;T
zbEi}0ws@UQ^X|%vZfi}g{hBg)iPi4K66bz9o#eOcy>#V8*Qax7Y62IhxcNNuijB11
zak+y*?A75YNy+%bEvMrR7=;TwBUvT|+f2<f(rbQ@8M|#Aqw#5vt#V=V>1MZAUt9a@
z!tH(C>~&X{&3Sci$JTZ0YBd-)tcWo*{`!4U%;esu7xcr^Y;D%X)HS^hJ%4+lx6`vp
z+vguG$h)|9VpP+?2+7DC>#E(m`rZbeiRQXyBiM7uQtrj?z^J|F-SQ8}*)B1e5_d#8
z&Wrc;$t|nHex1C#A*ayd^EO@4Yhg#l7u{XBDu~79jU;=%^yZuYo`_zY)GvNi`|$gR
zt!#f+2kyW4E3PK<$Fa%fPpwsTzAsS;T^lK|D<D;I^^N26Pq0gCozj*s+q0!?wU6s@
zH?Qd|wMR-PPM=uJ=WgzQFMsp5tUP@yhaZLo@+TAT&yxCAzj}{2`_;2^7G6JAIIs5U
zitEXFPq_<ISEWuho#Ht4t<@&>RR^v;j1*?`Qf+>`<ZH42kMGBSGF$vRm#H7F_VmcE
z`5X(E_J7DS+ZLUroV#vA*DUiVr!G%TYnkM<o7IOQ#nV_?s?xH4iNo9a<$?vX3SP>r
z@p*AV<n`}^YWb>(k}?ts`|p0yTWubY@Kf-b&ur6BHs9M~HC?`2FV=oNv+DRM%~g|9
zq>iq$*xsI0>|mj~p!jjZ_ib_f2MhfVPWmoUdXZ1?SZt@l&#s+!bw9Vn>h>D1yImb&
zE7vo*y<>Zb>Eox2*Hr%$^ZaTG{k3P7-AS&b(5p*)<tEulxD@_fmj1EEF8may`GlCs
zHIr++pQ~&$Ne#C>b#m4DX*)M7Chtwv+xh!K?Su`1l@T0AFS`6Z{X#E|Ax+n{I9>X>
z;Y-H7Pg0Mvw8ZY-R+Z_d)0X$2p?-}O<D*%c)0AhLeG|HCQn<Lb>`+8-s`<T-zrF81
z{<MFJz0>Xc@8<QpFZP*k)ynl%W9ybxE7C-x7ISSaJt#8M>C#Nr7C}LguM(evjqQt#
ye;6(mTwZ$p%i?e1YbMO?p1%Kj?lXf0LZ#huk7oriDYB#mGbtI`DJj|izX<?B0QT+x

diff --git a/apps/desktopgui/resources/images/logo_red.jpg b/apps/desktopgui/resources/images/logo_red.jpg
deleted file mode 100644
index c1a60b8bbe680066069f5db62318055542c75958..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1312
zcmex=<NpH&0WUXCHwH#VMur521O|rxw;7y4JVr_Y$Ph~OgZ2JDz#z!MAi^NY%&5e`
zB*@4t$oT&VgA@Y;BP$~VGGJrp;N)WYe}q9xfPs;PiHVVsofRt2%FM#X&cwmU$si&m
zDkdovK0R{A)oVBYA7PMWWME=OF^7$VnT3_}{}BddL9i4PGXoPd#2hAOMiy2!K_Lcq
zVGa>dCBy%>7<iZ&8JGl_1sUuavRCjPUd@r2_AX9LKK^dS8J$!2JYAeKp3Hn1>Y``B
z@bti^BL^N@HZdlx)^p(r;n6I1ylq=$=ydef_P+fSmERwcGpgKT7xBIKz^c;aWxt+X
zNY^oQ>oLy1=6C6eZce{va^ux?%chwq`RxjLv3lB0ezRL_C5$_K);8>{SpH5zpkzS}
z`x>2B@k`bo>3cD6>9^F4Y^@8Gw59XcIxg7gI@ME7)%d0L=?;?wr&SuOv>q9%pQ|ud
z37xJrAyZr^r&;V>%w}I!@xRVDL-rlc6WO1&ojYUFhV9!fa;LX1d|4Qvox0*jzs2=Q
zPnNQsIc?PWF|y6oLb`aNc80{x><fV>y3UDf`5bw$o6#`zyuR1v<_VuK8kxkZ+!lGW
zRdZd*^wouCT$k5K&iy^DAv~-%u>WR#r(v<6TwPiA_QwWAZ~rqWdDi<~&6l4n`Xc#D
z#m!q*vrVhIW5f-YPK;-_R@)VP^7D?c=<NKJFJfHhXa8w>d6U0*;?EetyYqKXS}k_7
zbc_7jou<;#TiC8X_t|;zZJt9}aQH*xDO<Y5WE3Y$ZcgiWTs~>Oz^1elZhWE+^=y;0
zo^DpnS^ezw<>fD)de`0En*3wF(tn1KTDLRSy35tv#BM$gwGC$4EnztETJEDGOLh39
zas`E6dNv#pnbp$AJGEGT!rtDEM!#$VFMQj%`mNT-Nw0d&2h{uBkNnS&;alfA?>|Gr
zC%?GmH=<0K{&GA2jrI=YF5}yJqnfdgP1aCQ?V1md4v(yWOOlJRp&Z-vdwbbGeD8a$
zQxsb!{Jfg$>y_>Hud`;?TzML_(O>SU)n4UWUoPIdlsI?#wXHK;T0$}wb_dr?F4)+g
z&TH6kO6!f)e})So3npu>;1+UX<v4apVfM|En4BdhC0+UxZaq2Kmn9N%DZ-|}aeWk1
z)-{Jfkz<9;YkquQH1n<SET+SZIai`Y7k+rnWHhs-@kBJ^txZ}R4tz)wd~_$_#JQV-
zQrlPa1T^dHEIOMPbnu+l!c*RlX6=xZlV?lI@aiyL(Wrj;lj6#l)VO6j^5+r@6<-}v
zb6?-j78LmJvhhd%&3C?C3tg~Vwms<U3+80Uycedk#20S8=((|g?<VhzR8zgh_8In7
zr&+|OGPHQw#=QTYRC35zr7hcT)l1n}$>}GHr+c*Wcjk01IdNjD%mJ^KqC&M>%>Dw;
z6(36~zKphToo1;zyC=Hf<>{r<C*KeAPrje=<^0F1xBqo~`0zPsp=gS(>9c^TKO2J5
zLKbuy&TNRNYB+M{%o!K=nKS4Awr3~{+q+iVs+yZOS38A0+u4Wh?`t)NrHm2Vv!oM`
UXfZ@gmIzW%5;Ra2l>dJd0LYl~jsO4v

diff --git a/apps/desktopgui/src/net/i2p/desktopgui/ExternalTrayManager.java b/apps/desktopgui/src/net/i2p/desktopgui/ExternalTrayManager.java
index 2a3a16b63e..e15e5c08b5 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/ExternalTrayManager.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/ExternalTrayManager.java
@@ -8,14 +8,21 @@ import java.awt.event.ActionListener;
 
 import javax.swing.SwingWorker;
 
+import net.i2p.I2PAppContext;
 import net.i2p.desktopgui.router.RouterManager;
-import net.i2p.util.Log;
 
-public class ExternalTrayManager extends TrayManager {
+/**
+ *  When started before the router, e.g. with
+ *  java -cp i2p.jar:desktopgui.jar net.i2p.desktopgui.Main
+ *
+ *  No access to context, very limited abilities.
+ *  Not fully supported.
+ */
+class ExternalTrayManager extends TrayManager {
 	
-    private final static Log log = new Log(ExternalTrayManager.class);
-
-    protected ExternalTrayManager() {}
+    public ExternalTrayManager(I2PAppContext ctx) {
+        super(ctx);
+    }
 
     @Override
     public PopupMenu getMainMenu() {
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/InternalTrayManager.java b/apps/desktopgui/src/net/i2p/desktopgui/InternalTrayManager.java
index 1cb464308c..90017c0353 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/InternalTrayManager.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/InternalTrayManager.java
@@ -11,13 +11,24 @@ import net.i2p.desktopgui.gui.DesktopguiConfigurationFrame;
 import net.i2p.desktopgui.router.RouterManager;
 import net.i2p.desktopgui.util.BrowseException;
 import net.i2p.desktopgui.util.I2PDesktop;
+import net.i2p.router.RouterContext;
 import net.i2p.util.Log;
 
-public class InternalTrayManager extends TrayManager {
+/**
+ *  java -cp i2p.jar:desktopgui.jar net.i2p.desktopgui.Main
+ *
+ *  Full access to router context.
+ */
+class InternalTrayManager extends TrayManager {
 	
-	private final static Log log = new Log(InternalTrayManager.class);
+    private final RouterContext _context;
+    private final Log log;
 
-    protected InternalTrayManager() {}
+    public InternalTrayManager(RouterContext ctx) {
+        super(ctx);
+        _context = ctx;
+        log = ctx.logManager().getLog(InternalTrayManager.class);
+    }
 
     @Override
     public PopupMenu getMainMenu() {
@@ -56,7 +67,7 @@ public class InternalTrayManager extends TrayManager {
 
                     @Override
                     protected Object doInBackground() throws Exception {
-                        new DesktopguiConfigurationFrame().setVisible(true);
+                        new DesktopguiConfigurationFrame(_context).setVisible(true);
                         return null;
                     }
 
@@ -73,7 +84,7 @@ public class InternalTrayManager extends TrayManager {
 
                     @Override
                     protected Object doInBackground() throws Exception {
-                        RouterManager.restart();
+                        RouterManager.restart(_context);
                         return null;
                     }
                     
@@ -91,7 +102,7 @@ public class InternalTrayManager extends TrayManager {
                     
                     @Override
                     protected Object doInBackground() throws Exception {
-                        RouterManager.shutDown();
+                        RouterManager.shutDown(_context);
                         return null;
                     }
                     
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/Main.java b/apps/desktopgui/src/net/i2p/desktopgui/Main.java
index c07e03f446..4592ae7b16 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/Main.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/Main.java
@@ -7,8 +7,15 @@ package net.i2p.desktopgui;
 import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 import javax.swing.UnsupportedLookAndFeelException;
+
+import net.i2p.I2PAppContext;
+import net.i2p.app.ClientAppManager;
+import net.i2p.app.ClientAppState;
+import static net.i2p.app.ClientAppState.*;
 import net.i2p.desktopgui.router.RouterManager;
 import net.i2p.desktopgui.util.*;
+import net.i2p.router.RouterContext;
+import net.i2p.router.app.RouterApp;
 import net.i2p.util.Log;
 import net.i2p.util.Translate;
 import net.i2p.util.I2PProperties.I2PPropertyCallback;
@@ -16,22 +23,57 @@ import net.i2p.util.I2PProperties.I2PPropertyCallback;
 /**
  * The main class of the application.
  */
-public class Main {
-    
-    ///Manages the lifetime of the tray icon.
-    private TrayManager trayManager = null;
-    private final static Log log = new Log(Main.class);
+public class Main implements RouterApp {
+
+    private final I2PAppContext _appContext;
+    private final RouterContext _context;
+    private final ClientAppManager _mgr;
+    private final Log log;
+    private ClientAppState _state = UNINITIALIZED;
+    private TrayManager _trayManager;
 
+    /**
+     *  @since 0.9.26
+     */
+    public Main(RouterContext ctx, ClientAppManager mgr, String args[]) {
+        _appContext = _context = ctx;
+        _mgr = mgr;
+        log = _appContext.logManager().getLog(Main.class);
+        _state = INITIALIZED;
+    }
+
+    /**
+     *  @since 0.9.26
+     */
+    public Main() {
+        _appContext = I2PAppContext.getGlobalContext();
+        if (_appContext instanceof RouterContext)
+            _context = (RouterContext) _appContext;
+        else
+            _context = null;
+        _mgr = null;
+        log = _appContext.logManager().getLog(Main.class);
+        _state = INITIALIZED;
+    }
+    
     /**
      * Start the tray icon code (loads tray icon in the tray area).
-     * @throws Exception 
+     * @throws AWTException on startup error, including systray not supported 
      */
-    public void startUp() throws Exception {
-        trayManager = TrayManager.getInstance();
+    private synchronized void startUp() throws Exception {
+        final TrayManager trayManager;
+        if (_context != null)
+            trayManager = new InternalTrayManager(_context);
+        else
+            trayManager = new ExternalTrayManager(_appContext);
         trayManager.startManager();
+        _trayManager = trayManager;
+        changeState(RUNNING);
+        if (_mgr != null)
+            _mgr.register(this);
         
-        if(RouterManager.inI2P()) {
-            RouterManager.getRouterContext().addPropertyCallback(new I2PPropertyCallback() {
+        if (_context != null) {
+            _context.addPropertyCallback(new I2PPropertyCallback() {
 
                 @Override
                 public void propertyChanged(String arg0, String arg1) {
@@ -45,26 +87,36 @@ public class Main {
     }
     
     public static void main(String[] args) {
-        beginStartup(args);
+        Main main = new Main();
+        main.beginStartup(args);
     }
 
     /**
      * Main method launching the application.
+     *
+     * @param args unused
      */
-    public static void beginStartup(String[] args) {
-        try {
-            String headless = System.getProperty("java.awt.headless");
-            boolean isHeadless = Boolean.parseBoolean(headless);
-            if(isHeadless) {
-            	log.warn("Headless environment: not starting desktopgui!");
-                return;
-            }
-        }
-        catch(Exception e) {
+    private void beginStartup(String[] args) {
+        changeState(STARTING);
+        String headless = System.getProperty("java.awt.headless");
+        boolean isHeadless = Boolean.parseBoolean(headless);
+        if (isHeadless) {
+        	log.warn("Headless environment: not starting desktopgui!");
+            changeState(START_FAILED, "Headless environment: not starting desktopgui!", null);
             return;
         }
         try {
-            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+            //UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels();
+            //for (int i = 0; i < lafs.length; i++) {
+            //    System.out.println("LAF " + i + ": " + lafs[i].getName() + ' ' + lafs[i].getClassName());
+            //}
+            String laf = UIManager.getSystemLookAndFeelClassName();
+            //System.out.println("Default: " + laf);
+            UIManager.setLookAndFeel(laf);
+            //laf = UIManager.getCrossPlatformLookAndFeelClassName();
+            //System.out.println("Cross-Platform: " + laf);
+            //UIManager.setLookAndFeel(laf);
+            //UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
         } catch (ClassNotFoundException ex) {
             log.log(Log.ERROR, null, ex);
         } catch (InstantiationException ex) {
@@ -73,23 +125,28 @@ public class Main {
             log.log(Log.ERROR, null, ex);
         } catch (UnsupportedLookAndFeelException ex) {
             log.log(Log.ERROR, null, ex);
+        } catch (Error ex) {
+            // on permissions error (different user)
+            // Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
+            log.log(Log.ERROR, "No permissions? Different user?", ex);
+            changeState(START_FAILED, "No permissions? Different user?", new RuntimeException(ex));
+            return;
         }
         
-        ConfigurationManager.getInstance().loadArguments(args);
-        
-        final Main main = new Main();
+        // TODO process args with getopt if needed
         
-        main.launchForeverLoop();
+        if (_context == null)
+            launchForeverLoop();
         //We'll be doing GUI work, so let's stay in the event dispatcher thread.
         SwingUtilities.invokeLater(new Runnable() {
 
             @Override
             public void run() {
                 try {
-                    main.startUp();
-                }
-                catch(Exception e) {
+                    startUp();
+                } catch(Exception e) {
                     log.error("Failed while running desktopgui!", e);
+                    changeState(START_FAILED, "Failed while running desktopgui!", e);
                 }
                 
             }
@@ -102,7 +159,7 @@ public class Main {
      * Avoids the app terminating because no Window is opened anymore.
      * More info: http://java.sun.com/javase/6/docs/api/java/awt/doc-files/AWTThreadIssues.html#Autoshutdown
      */
-    public void launchForeverLoop() {
+    private static void launchForeverLoop() {
        Runnable r = new Runnable() {
             public void run() {
                 try {
@@ -114,9 +171,60 @@ public class Main {
                 }
             }
         };
-        Thread t = new Thread(r);
+        Thread t = new Thread(r, "DesktopGUI spinner");
         t.setDaemon(false);
         t.start();
     }
-    
+
+    /////// ClientApp methods
+
+    /** @since 0.9.26 */
+    public synchronized void startup() {
+        beginStartup(null);
+    }
+
+    /** @since 0.9.26 */
+    public synchronized void shutdown(String[] args) {
+        if (_state == STOPPED)
+            return;
+        changeState(STOPPING);
+        if (_trayManager != null)
+            _trayManager.stopManager();
+        changeState(STOPPED);
+    }
+
+    /** @since 0.9.26 */
+    public synchronized ClientAppState getState() {
+        return _state;
+    }
+
+    /** @since 0.9.26 */
+    public String getName() {
+        return "desktopgui";
+    }
+
+    /** @since 0.9.26 */
+    public String getDisplayName() {
+        return "Desktop GUI";
+    }
+
+    /////// end ClientApp methods
+
+    /** @since 0.9.26 */
+    private void changeState(ClientAppState state) {
+        changeState(state, null, null);
+    }
+
+    /** @since 0.9.26 */
+    private synchronized void changeState(ClientAppState state, String msg, Exception e) {
+        _state = state;
+        if (_mgr != null)
+            _mgr.notify(this, state, msg, e);
+        if (_context == null) {
+            if (msg != null)
+                System.out.println(state + ": " + msg);
+            if (e != null)
+                e.printStackTrace();
+        }
+    }
 }
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/TrayManager.java b/apps/desktopgui/src/net/i2p/desktopgui/TrayManager.java
index 227050735c..ac0242dd67 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/TrayManager.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/TrayManager.java
@@ -8,58 +8,65 @@ import java.awt.Toolkit;
 import java.awt.TrayIcon;
 import java.net.URL;
 
+import net.i2p.I2PAppContext;
 import net.i2p.desktopgui.i18n.DesktopguiTranslator;
-import net.i2p.desktopgui.router.RouterManager;
-import net.i2p.util.Log;
+import net.i2p.util.SystemVersion;
 
 /**
  * Manages the tray icon life.
  */
-public abstract class TrayManager {
+abstract class TrayManager {
 
-    private static TrayManager instance = null;
+    protected final I2PAppContext _appContext;
     ///The tray area, or null if unsupported
-    protected SystemTray tray = null;
+    protected SystemTray tray;
     ///Our tray icon, or null if unsupported
-    protected TrayIcon trayIcon = null;
-    private final static Log log = new Log(TrayManager.class);
-    
+    protected TrayIcon trayIcon;
+
     /**
      * Instantiate tray manager.
      */
-    protected TrayManager() {}
-    
-    protected static TrayManager getInstance() {
-        if(instance == null) {
-            boolean inI2P = RouterManager.inI2P();
-            if(inI2P) {
-                instance = new InternalTrayManager();
-            }
-            else {
-                instance = new ExternalTrayManager();
-            }
-        }
-        return instance;
+    protected TrayManager(I2PAppContext ctx) {
+        _appContext = ctx;
     }
-
+    
     /**
      * Add the tray icon to the system tray and start everything up.
      */
-    protected void startManager() {
+    public synchronized void startManager()  throws AWTException {
         if(SystemTray.isSupported()) {
+            // TODO figure out how to get menu to pop up on left-click
+            // left-click does nothing by default
+            // MouseListener, MouseEvent, ...
             tray = SystemTray.getSystemTray();
-            trayIcon = new TrayIcon(getTrayImage(), "I2P", getMainMenu());
+            // Windows typically has tooltips; Linux (at least Ubuntu) doesn't
+            String tooltip = SystemVersion.isWindows() ? _t("I2P: Right-click for menu") : null;
+            trayIcon = new TrayIcon(getTrayImage(), tooltip, getMainMenu());
             trayIcon.setImageAutoSize(true); //Resize image to fit the system tray
-            try {
-                tray.add(trayIcon);
-            } catch (AWTException e) {
-                log.log(Log.WARN, "Problem creating system tray icon!", e);
-            }
+            tray.add(trayIcon);
+            // 16x16 on Windows, 24x24 on Linux, but that will probably vary
+            //System.out.println("Tray icon size is " + trayIcon.getSize());
+        } else {
+            throw new AWTException("SystemTray not supported");
+        }
+    }
+
+    /**
+     * Remove the tray icon from the system tray
+     *
+     * @since 0.9.26
+     */
+    public synchronized void stopManager() {
+        if (tray != null && trayIcon != null) {
+            tray.remove(trayIcon);
+            tray = null;
+            trayIcon = null;
         }
     }
     
-    protected void languageChanged() {
-        trayIcon.setPopupMenu(getMainMenu());
+    public synchronized void languageChanged() {
+        if (trayIcon != null)
+            trayIcon.setPopupMenu(getMainMenu());
     }
     
     /**
@@ -71,14 +78,17 @@ public abstract class TrayManager {
     /**
      * Get tray icon image from the desktopgui resources in the jar file.
      * @return image used for the tray icon
+     * @throws AWTException if image not found
      */
-    private Image getTrayImage() {
+    private Image getTrayImage() throws AWTException {
         URL url = getClass().getResource("/desktopgui/resources/images/logo.png");
+        if (url == null)
+            throw new AWTException("cannot load tray image");
         Image image = Toolkit.getDefaultToolkit().getImage(url);
         return image;
     }
     
-    protected static String _t(String s) {
-        return DesktopguiTranslator._t(s);
+    protected String _t(String s) {
+        return DesktopguiTranslator._t(_appContext, s);
     }
 }
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java b/apps/desktopgui/src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java
index a697c5779f..98e513eb37 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java
@@ -13,8 +13,10 @@ package net.i2p.desktopgui.gui;
 
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
 import net.i2p.desktopgui.i18n.DesktopguiTranslator;
 import net.i2p.desktopgui.router.RouterManager;
+import net.i2p.router.RouterContext;
 
 /**
  *
@@ -22,9 +24,12 @@ import net.i2p.desktopgui.router.RouterManager;
  */
 public class DesktopguiConfigurationFrame extends javax.swing.JFrame {
 
+    private final RouterContext _context;
+
     /** Creates new form ConfigurationFrame */
-    public DesktopguiConfigurationFrame() {
+    public DesktopguiConfigurationFrame(RouterContext ctx) {
         initComponents();
+        _context = ctx;
     }
 
     /** This method is called from within the constructor to
@@ -98,8 +103,8 @@ public class DesktopguiConfigurationFrame extends javax.swing.JFrame {
         configureDesktopgui();
     }//GEN-LAST:event_okButtonMouseReleased
 
-    protected static String _t(String s) {
-        return DesktopguiTranslator._t(s);
+    private String _t(String s) {
+        return DesktopguiTranslator._t(_context, s);
     }
 
     private void configureDesktopgui() {
@@ -114,7 +119,7 @@ public class DesktopguiConfigurationFrame extends javax.swing.JFrame {
             System.out.println("Enabling desktopgui");
         }
         try {
-            RouterManager.getRouterContext().router().saveConfig(property, value);
+            _context.router().saveConfig(property, value);
         } catch (Exception ex) {
             Logger.getLogger(DesktopguiConfigurationFrame.class.getName()).log(Level.SEVERE, null, ex);
         }
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/i18n/DesktopguiTranslator.java b/apps/desktopgui/src/net/i2p/desktopgui/i18n/DesktopguiTranslator.java
index 3778c4ad93..9fae60ed14 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/i18n/DesktopguiTranslator.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/i18n/DesktopguiTranslator.java
@@ -7,20 +7,11 @@ public class DesktopguiTranslator {
     
     private static final String BUNDLE_NAME = "net.i2p.desktopgui.messages";
     
-    private static I2PAppContext ctx;
-    
-    private static I2PAppContext getRouterContext() {
-        if(ctx == null) {
-            ctx = I2PAppContext.getCurrentContext();
-        }
-        return ctx;
-    }
-    
-    public static String _t(String s) {
-        return Translate.getString(s, getRouterContext(), BUNDLE_NAME);
+    public static String _t(I2PAppContext ctx, String s) {
+        return Translate.getString(s, ctx, BUNDLE_NAME);
     }
 
-    public static String _t(String s, Object o) {
-        return Translate.getString(s, o, getRouterContext(), BUNDLE_NAME);
+    public static String _t(I2PAppContext ctx, String s, Object o) {
+        return Translate.getString(s, o, ctx, BUNDLE_NAME);
     }
 }
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/router/RouterManager.java b/apps/desktopgui/src/net/i2p/desktopgui/router/RouterManager.java
index 82b36938ac..9267bcef08 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/router/RouterManager.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/router/RouterManager.java
@@ -16,29 +16,9 @@ import net.i2p.util.Log;
  */
 public class RouterManager {
 	
-	private final static Log log = new Log(RouterManager.class);
-	private static I2PAppContext context = I2PAppContext.getCurrentContext();
-	
-	public static I2PAppContext getAppContext() {
-		return context;
-	}
-	
-	public static RouterContext getRouterContext() throws Exception {
-		if(context.isRouterContext()) {
-			return (RouterContext) context;
-		}
-		else {
-			throw new Exception("No RouterContext available!");
-		}
-	}
-	
-	private static Router getRouter() {
-		try {
-			return getRouterContext().router();
-		} catch (Exception e) {
-	        log.error("Failed to get router. Why did we request it if no RouterContext is available?", e);
-            return null;
-        }
+    /** @return non-null */
+    private static I2PAppContext getAppContext() {
+        return I2PAppContext.getGlobalContext();
     }
     
     /**
@@ -53,9 +33,10 @@ public class RouterManager {
             //TODO: set/get PID
             String separator = System.getProperty("file.separator");
             String location = getAppContext().getBaseDir().getAbsolutePath();
-            
-            Runtime.getRuntime().exec(location + separator + "i2psvc " + location + separator + "wrapper.config");
+            String[] args = new String[] { location + separator + "i2psvc", location + separator + "wrapper.config" };
+            Runtime.getRuntime().exec(args);
         } catch (IOException e) {
+            Log log = getAppContext().logManager().getLog(RouterManager.class);
             log.log(Log.WARN, "Failed to start I2P", e);
         }
     }
@@ -63,17 +44,14 @@ public class RouterManager {
     /**
      * Restart the running I2P instance.
      */
-    public static void restart() {
-        if(inI2P()) {
-            getRouter().restart();
-        }
+    public static void restart(RouterContext ctx) {
+        ctx.router().restart();
     }
 
     /**
      * Stop the running I2P instance.
      */
-    public static void shutDown() {
-        if(inI2P()) {
+    public static void shutDown(RouterContext ctx) {
             Thread t = new Thread(new Runnable() {
 
                 @Override
@@ -83,14 +61,6 @@ public class RouterManager {
                 
             });
             t.start();
-            getRouter().shutdown(Router.EXIT_HARD);
-        }
-    }
-    
-    /**
-     * Check if we are running inside I2P.
-     */
-    public static boolean inI2P() {
-        return context.isRouterContext();
+            ctx.router().shutdown(Router.EXIT_HARD);
     }
 }
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/util/ConfigurationManager.java b/apps/desktopgui/src/net/i2p/desktopgui/util/ConfigurationManager.java
deleted file mode 100644
index cc0516bd61..0000000000
--- a/apps/desktopgui/src/net/i2p/desktopgui/util/ConfigurationManager.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package net.i2p.desktopgui.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Manage the configuration of desktopgui.
- * @author mathias
- *
- */
-public class ConfigurationManager {
-	
-	private static ConfigurationManager instance;
-	///Configurations with a String as value
-	private Map<String, String> stringConfigurations = new HashMap<String, String>();
-	///Configurations with a Boolean as value
-	private Map<String, Boolean> booleanConfigurations = new HashMap<String, Boolean>();
-
-	private ConfigurationManager() {}
-	
-	public static ConfigurationManager getInstance() {
-		if(instance == null) {
-			instance = new ConfigurationManager();
-		}
-		return instance;
-	}
-	
-	/**
-	 * Collects arguments of the form --word, --word=otherword and -blah
-	 * to determine user parameters.
-	 * @param args Command line arguments to the application
-	 */
-	public void loadArguments(String[] args) {
-		for(int i=0; i<args.length; i++) {
-			String arg = args[i];
-			if(arg.startsWith("--")) {
-				arg = arg.substring(2);
-				if(arg.length() < 1) {
-					continue;
-				}
-				int equals = arg.indexOf('=');
-				if(equals != -1 && equals < arg.length() - 1) { //String configuration
-					loadStringConfiguration(arg, equals);
-				}
-				else { //Boolean configuration
-					loadBooleanConfiguration(arg);
-				}
-			}
-			else if(arg.startsWith("-")) { //Boolean configuration
-				loadBooleanConfiguration(arg);
-			}
-		}
-	}
-	
-	/**
-	 * Add a boolean configuration.
-	 * @param arg The key we wish to add as a configuration.
-	 */
-	public void loadBooleanConfiguration(String arg) {
-		booleanConfigurations.put(arg, Boolean.TRUE);
-	}
-	
-	/**
-	 * Add a String configuration which consists a key and a value.
-	 * @param arg String of the form substring1=substring2.
-	 * @param equalsPosition Position of the '=' element.
-	 */
-	public void loadStringConfiguration(String arg, int equalsPosition) {
-		String key = arg.substring(0, equalsPosition);
-		String value = arg.substring(equalsPosition+1);
-		stringConfigurations.put(key, value);
-	}
-	
-	/**
-	 * Check if a specific boolean configuration exists.
-	 * @param arg The key for the configuration.
-	 * @param defaultValue If the configuration is not found, we use a default value.
-	 * @return The value of a configuration: true if found, defaultValue if not found.
-	 */
-	public boolean getBooleanConfiguration(String arg, boolean defaultValue) {
-		Boolean value = booleanConfigurations.get("startWithI2P");
-		System.out.println(value);
-		if(value != null) {
-			return value;
-		}
-		return defaultValue;
-	}
-	
-	/**
-	 * Get a specific String configuration.
-	 * @param arg The key for the configuration.
-	 * @param defaultValue If the configuration is not found, we use a default value.
-	 * @return The value of the configuration, or the defaultValue.
-	 */
-	public String getStringConfiguration(String arg, String defaultValue) {
-		String value = stringConfigurations.get(arg);
-		System.out.println(value);
-		if(value != null) {
-			return value;
-		}
-		return defaultValue;
-	}
-}
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/util/I2PDesktop.java b/apps/desktopgui/src/net/i2p/desktopgui/util/I2PDesktop.java
index 6ddfc4a970..696088cfb6 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/util/I2PDesktop.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/util/I2PDesktop.java
@@ -3,12 +3,9 @@ package net.i2p.desktopgui.util;
 import java.awt.Desktop;
 import java.awt.Desktop.Action;
 import java.net.URI;
-import net.i2p.util.Log;
 
 public class I2PDesktop {
     
-    private final static Log log = new Log(I2PDesktop.class);
-    
     public static void browse(String url) throws BrowseException {
         if(Desktop.isDesktopSupported()) {
             Desktop desktop = Desktop.getDesktop();
@@ -27,4 +24,4 @@ public class I2PDesktop {
             throw new BrowseException();
         }
     }
-}
\ No newline at end of file
+}
-- 
GitLab