diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java index 8556c2ef7..cbf8dd009 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java @@ -170,6 +170,7 @@ public class WebMail extends HttpServlet private static final String RC_PROP_THEME = "routerconsole.theme"; private static final String RC_PROP_UNIVERSAL_THEMING = "routerconsole.universal.theme"; + private static final String RC_PROP_FORCE_MOBILE_CONSOLE = "routerconsole.forceMobileConsole"; private static final String CONFIG_THEME = "theme"; private static final String DEFAULT_THEME = "light"; @@ -324,6 +325,7 @@ public class WebMail extends HttpServlet public ArrayList attachments; public boolean reallyDelete; String themePath, imgPath; + boolean isMobile; SessionObject() @@ -1183,6 +1185,36 @@ public class WebMail extends HttpServlet } return sessionObject; } + /** + * Copied from net.i2p.router.web.CSSHelper + * @since 0.9.7 + */ + private static boolean isMobile(String ua) { + return + // text + (ua.startsWith("Lynx") || ua.startsWith("w3m") || + ua.startsWith("ELinks") || ua.startsWith("Links") || + ua.startsWith("Dillo") || + // mobile + // http://www.zytrax.com/tech/web/mobile_ids.html + // Android tablet UAs don't have "Mobile" in them + (ua.contains("Android") && ua.contains("Mobile")) || + ua.contains("iPhone") || + ua.contains("iPod") || ua.contains("iPad") || + ua.contains("Kindle") || ua.contains("Mobile") || + ua.contains("Nintendo Wii") || + ua.contains("Opera Mini") || ua.contains("Opera Mobi") || + ua.contains("Palm") || + ua.contains("PLAYSTATION") || ua.contains("Playstation") || + ua.contains("Profile/MIDP-") || ua.contains("SymbianOS") || + ua.contains("Windows CE") || ua.contains("Windows Phone") || + ua.startsWith("BlackBerry") || ua.startsWith("DoCoMo") || + ua.startsWith("Nokia") || ua.startsWith("OPWV-SDK") || + ua.startsWith("MOT-") || ua.startsWith("SAMSUNG-") || + ua.startsWith("nook") || ua.startsWith("SCH-") || + ua.startsWith("SEC-") || ua.startsWith("SonyEricsson") || + ua.startsWith("Vodafone")); + } /** * * @param httpRequest @@ -1210,6 +1242,8 @@ public class WebMail extends HttpServlet theme = DEFAULT_THEME; } } + boolean forceMobileConsole = ctx.getBooleanProperty(RC_PROP_FORCE_MOBILE_CONSOLE); + boolean isMobile = (forceMobileConsole || isMobile(httpRequest.getHeader("User-Agent"))); httpRequest.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); @@ -1232,6 +1266,7 @@ public class WebMail extends HttpServlet sessionObject.showAttachment = null; sessionObject.themePath = "/themes/susimail/" + theme + '/'; sessionObject.imgPath = sessionObject.themePath + "images/"; + sessionObject.isMobile = isMobile; processStateChangeButtons( sessionObject, request ); @@ -1290,8 +1325,12 @@ public class WebMail extends HttpServlet "\n" + "\n" + "susimail - " + subtitle + "\n" + - "\n" + - "\n\n" + + "\n" ); + if (sessionObject.isMobile ) { + out.println( "\n" + + "\n" ); + } + out.println( "\n\n" + "

\"Susimail\"
 

\n" + "
" ); @@ -1635,7 +1674,7 @@ public class WebMail extends HttpServlet button( DELETE, _("Delete") ) + spacer + button( REFRESH, _("Check Mail") ) + spacer + button( RELOAD, _("Reload Config") ) + spacer + - button( LOGOUT, _("Logout") ) + "\n" + + button( LOGOUT, _("Logout") ) + "
\n" + "\n" + thSpacer + "" + thSpacer + "" + diff --git a/history.txt b/history.txt index 906ed0382..42015de2c 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,6 @@ +2013-07-11 str4d + * susimail: Improvements to layout in mobile browsers + 2013-07-06 zzz * TunnelPool: Don't reuse peers for exploratory tunnels diff --git a/installer/resources/themes/susimail/dark/mobile.css b/installer/resources/themes/susimail/dark/mobile.css new file mode 100644 index 000000000..2bfa5c548 --- /dev/null +++ b/installer/resources/themes/susimail/dark/mobile.css @@ -0,0 +1,13 @@ +#mailbox tr, #mailbox td { + display: block; +} + +#mailbox th { + position: absolute; + top: -9999px; + left: -9999px; +} + +#mailbox .optbox { + float: left; +} diff --git a/installer/resources/themes/susimail/light/mobile.css b/installer/resources/themes/susimail/light/mobile.css new file mode 100644 index 000000000..2bfa5c548 --- /dev/null +++ b/installer/resources/themes/susimail/light/mobile.css @@ -0,0 +1,13 @@ +#mailbox tr, #mailbox td { + display: block; +} + +#mailbox th { + position: absolute; + top: -9999px; + left: -9999px; +} + +#mailbox .optbox { + float: left; +}

" + sortHeader( SORT_SENDER, _("Sender"), sessionObject.imgPath ) + "" + sortHeader( SORT_SUBJECT, _("Subject"), sessionObject.imgPath ) + "