From 92261c16beb9ef64fe432bed4e27462338250e64 Mon Sep 17 00:00:00 2001 From: Riccardo Binetti Date: Mon, 6 May 2013 01:46:44 +0200 Subject: [PATCH 01/26] Added player's resonators plugin --- plugins/players-resonators.user.js | 99 ++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 plugins/players-resonators.user.js diff --git a/plugins/players-resonators.user.js b/plugins/players-resonators.user.js new file mode 100644 index 00000000..63fcf280 --- /dev/null +++ b/plugins/players-resonators.user.js @@ -0,0 +1,99 @@ +// ==UserScript== +// @id iitc-plugin-players-resonators@rbino +// @name IITC plugin: Player's Resonators +// @version 0.1.3.20130505.233200 +// @namespace https://github.com/jonatkins/ingress-intel-total-conversion +// @updateURL http://ingress.rbino.com/iitc-plugin-players-resonators.user.js +// @downloadURL http://ingress.rbino.com/iitc-plugin-players-resonators.user.js +// @description The plugins finds the resonators of a given player. The input is in the sidebar. Useful for revenge. +// @include https://www.ingress.com/intel* +// @include http://www.ingress.com/intel* +// @match https://www.ingress.com/intel* +// @match http://www.ingress.com/intel* +// ==/UserScript== + +// Changelog: +// +// 0.1.3 Effective player name (with wrong capitalization) if it finds some reso +// 0.1.2 Made nickname case insensitive +// 0.1.1 Added mouseover for portal location. Dirty hack to not show mousehover when the alert is fired. +// 0.1.0 First public release + +function wrapper() { +// ensure plugin framework is there, even if iitc is not yet loaded +if(typeof window.plugin !== 'function') window.plugin = function() {}; + + +// PLUGIN START //////////////////////////////////////////////////////// + +// use own namespace for plugin +window.plugin.playersResonators = function() {}; + +window.plugin.playersResonators.findReso = function(playername) { + var s = ""; + var portalSet = {}; + var effectiveName = ""; + var nickFind = playername.toLowerCase(); + $.each(window.portals, function(ind, portal){ + var r = portal.options.details.resonatorArray.resonators; + $.each(r, function(ind, reso) { + if (!reso) return true; + var nick = getPlayerName(reso.ownerGuid); + if (nick.toLowerCase() === nickFind){ + if (!effectiveName) { + effectiveName = nick; + } + if (!portalSet.hasOwnProperty(portal.options.guid)){ + portalSet[portal.options.guid] = true; + console.log(portalSet); + var latlng = [portal.options.details.locationE6.latE6/1E6, portal.options.details.locationE6.lngE6/1E6].join(); + var guid = portal.options.guid; + var jsDoubleClick = 'window.zoomToAndShowPortal(\''+guid+'\', ['+latlng+']);return false'; + var perma = '/intel?latE6='+portal.options.details.locationE6.latE6+'&lngE6='+portal.options.details.locationE6.lngE6+'&z=17&pguid='+guid; + var a = $('',{ + "class": 'help', + text: portal.options.details.portalV2.descriptiveText.TITLE, + title: portal.options.details.portalV2.descriptiveText.ADDRESS, + href: perma, + onClick: jsDoubleClick + })[0].outerHTML; + s += a + "\n"; + } + } + }); + }); + if (s) { + fakeLinkPlayer = '' + effectiveName + '' + s = fakeLinkPlayer + " has resonators on these portals:\n\n" + s; + } else { + fakeLinkPlayer = '' + playername + '' + s = fakeLinkPlayer + " has no resonators in this range\n"; + } + alert(s); +} + +var setup = function() { + var content = '
' + ''; + $('#sidebar').append(content); + $("#playerReso").keypress(function(e) { + if((e.keyCode ? e.keyCode : e.which) !== 13) return; + var data = $(this).val(); + window.plugin.playersResonators.findReso(data); + }); +} + +// PLUGIN END ////////////////////////////////////////////////////////// + +if(window.iitcLoaded && typeof setup === 'function') { + setup(); +} else { + if(window.bootPlugins) + window.bootPlugins.push(setup); + else + window.bootPlugins = [setup]; +} +} // wrapper end +// inject code into site context +var script = document.createElement('script'); +script.appendChild(document.createTextNode('('+ wrapper +')();')); +(document.body || document.head || document.documentElement).appendChild(script); From 11f7c31ce742a4d6d2cf67c5c046a3d4eaed7326 Mon Sep 17 00:00:00 2001 From: Riccardo Binetti Date: Mon, 6 May 2013 01:58:23 +0200 Subject: [PATCH 02/26] Fixed version date time, updateurl, downloadurl and description --- plugins/players-resonators.user.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/players-resonators.user.js b/plugins/players-resonators.user.js index 63fcf280..530430de 100644 --- a/plugins/players-resonators.user.js +++ b/plugins/players-resonators.user.js @@ -1,11 +1,11 @@ // ==UserScript== // @id iitc-plugin-players-resonators@rbino // @name IITC plugin: Player's Resonators -// @version 0.1.3.20130505.233200 +// @version 0.1.3.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion -// @updateURL http://ingress.rbino.com/iitc-plugin-players-resonators.user.js -// @downloadURL http://ingress.rbino.com/iitc-plugin-players-resonators.user.js -// @description The plugins finds the resonators of a given player. The input is in the sidebar. Useful for revenge. +// @updateURL @@UPDATEURL@@ +// @downloadURL @@DOWNLOADURL@@ +// @description [@@BUILDNAME@@-@@BUILDDATE@@] The plugins finds the resonators of a given player. The input is in the sidebar. Useful for revenge. // @include https://www.ingress.com/intel* // @include http://www.ingress.com/intel* // @match https://www.ingress.com/intel* From 13bd906a9ec667edc34e8ea8695985ea96d2bfa4 Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Mon, 6 May 2013 18:46:59 +1000 Subject: [PATCH 03/26] Starting work on modifying mobile app action bar. --- .gitattributes | 22 +++++++++++++++++++ build.py | 4 ++++ mobile/res/menu/main.xml | 5 +++++ mobile/res/values/strings.xml | 1 + .../com/cradle/iitc_mobile/IITC_Mobile.java | 7 ++++++ 5 files changed, 39 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..412eeda7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/build.py b/build.py index a81bfe34..8cf81b1e 100755 --- a/build.py +++ b/build.py @@ -220,6 +220,10 @@ if buildMobile: # copy the user location script into the mobile folder. shutil.copy(os.path.join(outDir,"user-location.user.js"), "mobile/assets/user-location.user.js") # also copy plugins + try: + os.makedirs("mobile/assets/plugins") + except: + pass shutil.rmtree("mobile/assets/plugins") shutil.copytree(os.path.join(outDir,"plugins"), "mobile/assets/plugins", ignore=shutil.ignore_patterns('*.meta.js', 'force-https*')) diff --git a/mobile/res/menu/main.xml b/mobile/res/menu/main.xml index a80f271a..c7497591 100644 --- a/mobile/res/menu/main.xml +++ b/mobile/res/menu/main.xml @@ -27,4 +27,9 @@ android:showAsAction="ifRoom" android:title="@string/locate"> + + \ No newline at end of file diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index 28905280..0c8cdd72 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -3,6 +3,7 @@ IITC mobile Settings + Info Reload IITC Print Version Clear Cache diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index af353f35..8227eeef 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -223,6 +223,7 @@ public class IITC_Mobile extends Activity { public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); + this.getActionBar().setHomeButtonEnabled(true); return true; } @@ -230,6 +231,9 @@ public class IITC_Mobile extends Activity { public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { + case android.R.id.home: + iitc_view.loadUrl("javascript: window.smartphone.mapButton.click();"); + return true; case R.id.reload_button: this.loadUrl(intel_url); return true; @@ -272,6 +276,9 @@ public class IITC_Mobile extends Activity { intent.putExtra("iitc_version", iitc_view.getWebViewClient().getIITCVersion()); startActivity(intent); return true; + case R.id.info: + iitc_view.loadUrl("javascript: window.smartphone.sideButton.click();"); + return true; default: return super.onOptionsItemSelected(item); } From 7e2087da63e64edf6aad97fbef3a0f1b23735f43 Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Mon, 6 May 2013 22:31:50 +1000 Subject: [PATCH 04/26] Redesigned IITC Mobile to use ActionBar menu instead of web based tabs. --- code/chat.js | 16 ++- code/smartphone.js | 2 +- mobile/AndroidManifest.xml | 2 +- mobile/res/drawable-hdpi/action_about.png | Bin 0 -> 1629 bytes mobile/res/drawable-hdpi/action_search.png | Bin 0 -> 1764 bytes mobile/res/drawable-hdpi/action_settings.png | Bin 0 -> 1540 bytes mobile/res/drawable-hdpi/av_full_screen.png | Bin 0 -> 1810 bytes mobile/res/drawable-hdpi/content_remove.png | Bin 0 -> 1285 bytes .../device_access_location_found.png | Bin 0 -> 1784 bytes .../device_access_location_off.png | Bin 0 -> 1791 bytes .../device_access_location_searching.png | Bin 0 -> 1627 bytes mobile/res/drawable-hdpi/ic_menu_refresh.png | Bin 2025 -> 0 bytes mobile/res/drawable-hdpi/location_map.png | Bin 0 -> 2077 bytes .../res/drawable-hdpi/navigation_refresh.png | Bin 0 -> 3138 bytes mobile/res/drawable-hdpi/social_group.png | Bin 0 -> 2075 bytes mobile/res/drawable-ldpi/ic_menu_refresh.png | Bin 1695 -> 0 bytes mobile/res/drawable-mdpi/action_about.png | Bin 0 -> 1333 bytes mobile/res/drawable-mdpi/action_search.png | Bin 0 -> 1394 bytes mobile/res/drawable-mdpi/action_settings.png | Bin 0 -> 1339 bytes mobile/res/drawable-mdpi/av_full_screen.png | Bin 0 -> 1479 bytes mobile/res/drawable-mdpi/content_remove.png | Bin 0 -> 1138 bytes .../device_access_location_found.png | Bin 0 -> 1409 bytes .../device_access_location_off.png | Bin 0 -> 1383 bytes .../device_access_location_searching.png | Bin 0 -> 1312 bytes mobile/res/drawable-mdpi/ic_menu_refresh.png | Bin 1278 -> 0 bytes mobile/res/drawable-mdpi/location_map.png | Bin 0 -> 1648 bytes .../res/drawable-mdpi/navigation_refresh.png | Bin 0 -> 3033 bytes mobile/res/drawable-mdpi/social_group.png | Bin 0 -> 1594 bytes mobile/res/drawable-xhdpi/action_about.png | Bin 0 -> 2040 bytes mobile/res/drawable-xhdpi/action_help.png | Bin 0 -> 1793 bytes mobile/res/drawable-xhdpi/action_search.png | Bin 0 -> 2127 bytes mobile/res/drawable-xhdpi/av_full_screen.png | Bin 0 -> 2065 bytes mobile/res/drawable-xhdpi/content_remove.png | Bin 0 -> 1348 bytes .../device_access_location_found.png | Bin 0 -> 2204 bytes .../device_access_location_off.png | Bin 0 -> 2220 bytes .../device_access_location_searching.png | Bin 0 -> 1977 bytes mobile/res/drawable-xhdpi/ic_menu_refresh.png | Bin 2857 -> 0 bytes mobile/res/drawable-xhdpi/location_map.png | Bin 0 -> 2510 bytes .../res/drawable-xhdpi/navigation_refresh.png | Bin 0 -> 3219 bytes mobile/res/drawable-xhdpi/social_group.png | Bin 0 -> 2541 bytes mobile/res/layout/activity_main.xml | 2 +- mobile/res/menu/main.xml | 116 +++++++++++++----- mobile/res/values/strings.xml | 10 +- mobile/smartphone.css | 3 +- .../com/cradle/iitc_mobile/IITC_Mobile.java | 43 ++++++- 45 files changed, 150 insertions(+), 44 deletions(-) create mode 100644 mobile/res/drawable-hdpi/action_about.png create mode 100644 mobile/res/drawable-hdpi/action_search.png create mode 100644 mobile/res/drawable-hdpi/action_settings.png create mode 100644 mobile/res/drawable-hdpi/av_full_screen.png create mode 100644 mobile/res/drawable-hdpi/content_remove.png create mode 100644 mobile/res/drawable-hdpi/device_access_location_found.png create mode 100644 mobile/res/drawable-hdpi/device_access_location_off.png create mode 100644 mobile/res/drawable-hdpi/device_access_location_searching.png delete mode 100644 mobile/res/drawable-hdpi/ic_menu_refresh.png create mode 100644 mobile/res/drawable-hdpi/location_map.png create mode 100644 mobile/res/drawable-hdpi/navigation_refresh.png create mode 100644 mobile/res/drawable-hdpi/social_group.png delete mode 100644 mobile/res/drawable-ldpi/ic_menu_refresh.png create mode 100644 mobile/res/drawable-mdpi/action_about.png create mode 100644 mobile/res/drawable-mdpi/action_search.png create mode 100644 mobile/res/drawable-mdpi/action_settings.png create mode 100644 mobile/res/drawable-mdpi/av_full_screen.png create mode 100644 mobile/res/drawable-mdpi/content_remove.png create mode 100644 mobile/res/drawable-mdpi/device_access_location_found.png create mode 100644 mobile/res/drawable-mdpi/device_access_location_off.png create mode 100644 mobile/res/drawable-mdpi/device_access_location_searching.png delete mode 100644 mobile/res/drawable-mdpi/ic_menu_refresh.png create mode 100644 mobile/res/drawable-mdpi/location_map.png create mode 100644 mobile/res/drawable-mdpi/navigation_refresh.png create mode 100644 mobile/res/drawable-mdpi/social_group.png create mode 100644 mobile/res/drawable-xhdpi/action_about.png create mode 100644 mobile/res/drawable-xhdpi/action_help.png create mode 100644 mobile/res/drawable-xhdpi/action_search.png create mode 100644 mobile/res/drawable-xhdpi/av_full_screen.png create mode 100644 mobile/res/drawable-xhdpi/content_remove.png create mode 100644 mobile/res/drawable-xhdpi/device_access_location_found.png create mode 100644 mobile/res/drawable-xhdpi/device_access_location_off.png create mode 100644 mobile/res/drawable-xhdpi/device_access_location_searching.png delete mode 100644 mobile/res/drawable-xhdpi/ic_menu_refresh.png create mode 100644 mobile/res/drawable-xhdpi/location_map.png create mode 100644 mobile/res/drawable-xhdpi/navigation_refresh.png create mode 100644 mobile/res/drawable-xhdpi/social_group.png diff --git a/code/chat.js b/code/chat.js index a2b78797..cf10a99d 100644 --- a/code/chat.js +++ b/code/chat.js @@ -473,9 +473,7 @@ window.chat.needMoreMessages = function() { chat.requestPublic(true); } - -window.chat.chooser = function(event) { - var t = $(event.target); +window.chat.chooseAnchor = function(t) { var tt = t.text(); var mark = $('#chatinput mark'); @@ -524,6 +522,18 @@ window.chat.chooser = function(event) { chat.needMoreMessages(); } +window.chat.choose = function(name) { + $('#chat, #chatinput, #updatestatus').show(); + $('#map').css('visibility', 'hidden'); + + var t = $(''+name+''); + window.chat.chooseAnchor(t); +} + +window.chat.chooser = function(event) { + var t = $(event.target); + window.chat.chooseAnchor(t); +} // contains the logic to keep the correct scroll position. window.chat.keepScrollPosition = function(box, scrollBefore, isOldMsgs) { diff --git a/code/smartphone.js b/code/smartphone.js index 3162b6d5..5a1700ed 100644 --- a/code/smartphone.js +++ b/code/smartphone.js @@ -80,7 +80,7 @@ window.runOnSmartphonesAfterBoot = function() { if(!isSmartphone()) return; console.warn('running smartphone post boot stuff'); - chat.toggle(); + //chat.toggle(); smartphone.mapButton.click(); // disable img full view diff --git a/mobile/AndroidManifest.xml b/mobile/AndroidManifest.xml index 51f57ac3..3d8e23d4 100644 --- a/mobile/AndroidManifest.xml +++ b/mobile/AndroidManifest.xml @@ -16,7 +16,7 @@ android:allowBackup="true" android:icon="@drawable/ic_iitcm" android:label="@string/app_name" - android:theme="@style/AppTheme" > + android:theme="@style/AppTheme" android:uiOptions="splitActionBarWhenNarrow"> l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)z{tqN#L3ju$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OzjUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfY zG!Lpb1-DyFaO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zemFsXG6MtCc~2L| zkcwMxW}eL!c9b|a+az9MsZyJV3(vPlj@m&Q84Ed@G(tYUy4cLo^p~6E^}*o&x`vJl zfmfkh#90HoT{SvFY_}}&3hbHYu(j@p+SOzC4+v}Qe514b=BzaKx(zKezt2p!zc;g7 zXyw%`*|m2T$?D#7VqVyI!673dH~P%;3hM;^5@)t;FTS&C9JH?BmjAELtadEXg7No4 zZZn4^3+G1~)*mddVEz8k@XtpjxsN-90u=E7X_+|~2Wncd)-8_+nt zKsJsg_dt#H^M@u&5+&mfD_5*Lsc+ij=_to{Nbp7Dj(MkYcQ9!?O5ETOf4HM(Py1|x zWxKO3pSdj6V!XjyxSnD9gXODlN-*nn9OO82$Rwt9&S{C&CpC|4N$T@BY}FQhP_a`| z&-u{dC$CjRR?C&Ih-CYfz?Jqu>WJ*GyO!l7VCh9_6b`hiXH!Q z?<#vWKlDx0mPuyCn`1lKr)aG%V1A~1>`ln7H&?a>&kldHY75(+J6>}_o>eT)Nxtls z7}OKhCpp@$E;^Uir^tGHyJqHdroXe`M0(YWp=aOf!A9`3BzqbX+U9a>G`=KC$a( sAHJIl3^w)^1&PVosU-?Y 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 S+PXgDUn)c#CORQV&i@Df@x@jE literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-hdpi/content_remove.png b/mobile/res/drawable-hdpi/content_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..094eea589246b46e26d3cf02285f26c1abb33700 GIT binary patch literal 1285 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViu&CG&eP`1g19yq1ObbUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfX zG!Lpb1-Dy_aO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z-u2mO3IhXUxu=U` zNX4x;5!QK!97IeyTqnMNpmcm8%M>G3-WWwz*F`c-$_jIgzI(VH*9}NfITIn}t^Miq zt^CxuFJV%VoA!QA+cW?BwdPGa!e?_6*v>Ra8Zf6F;K|54eBit62Bu9MQAS0(7sOrV zFmd6sVXA&0TEJNQze)M|Ji|-NYMq;OBp)a(&?%=8T3fK(ZA-OjPsrn-ICl#d^bMbWd5M3Yv*PdK6^%G=gKVBqt7Qj zN)BD@+%+et!bv%QPyM^iQh&ccXS^D`V!EqMm&!fysN*xMLvxC}Z?AaevTWCsfY>uD z^_GXqXN1UWzHe-uzC=arVY%9>lwkirLD$Y2HE%5;kYDE~pS3yS+5Mg`)RVrhVZcwy8N_S@W-h1YJ-}%nt&gMph zFJnz{nnI(|SYgX0GHM0Q?_>t`jjd68b3?brQ0ZND>$DcsiYqtMlSwL?RD@VVDPc@;p5`lm|y^(2xo}N27HeXOJLT zC85SiHKqZ~jEZ@-zI1l22=9I=ArPBX*MbXdRT2h95 z(fgmoTDbv7crrwbr4vf3aS5*GP`E%$APN#AJZ!aHtQ&_ZC6p zSP7;~M-dG+ZNe+_)%k}Lq_BEtL1>0Z4+Wno{ z4@U1eL`J&QTgOfce(rK`){0HQxsXE^vz_>P>yv$RUWT{q-MN=*FP9vxjOCxs&)IoR zv?Sz(%>7 zR)5W+8XIS87@u>?fLax8DeC|y8`G>lQj3)12up z!Hi7=0sbOBw6%Xg2r$mKj$XZ@+B`2t#W2yu9l7!i(e#Y$+i`xZeU^LTM8p9`Gb7d@ zu&LjW?a^U?SxaqZ#?6_P$qen~me(&nWl>X`>GX!Rjvj-i0L(Mlpude<5QCYO@WY43 z7kdunFF=x?$KTJIWIdmrR_e(dnpbvGa-7*qE8BnZlI2SgAQD-%zm2@N2ubNHtFab! zIP}u0YvCQfb=A|e=f!<>d9wwtmi}tiIcAP4VAUC`*j`@0e%-4X&8o=9Q)O|^M{4Kp z?y0taaBSpohdZL{>pim3?z;Xb|IRe`;`zI}her=oG`qwPt}Q{0g_k;sjmz7hYEkap zg9q}ad!#=P3f$Z1u&V$m%^WId0Fi3#lIyHLZp_WtedB0pdKO^?=~Mx`xQ}7h0-YN@xoW*XoejJ{|VG$kL9kxU+AN zx8I|xcPH(V`HLBjt&ej5l%G&IvcpXl>*<#3wmDmqUb={tKb|gnc43Vlm!v-|8x&o! zz!{RljQDHiwNo0eD%;uL=HacUwW(Vwv4$-7`qz(g9-EH+-5OxK!bB_esq3hj|xe%#kn|HMPQy{6O_i+#18y9^iY!ZsiO`J1iTDTb!1!)a9>Pu3i5z8Zb; z4cDo2Ahuxo+Nna$6dhb^`^3$$vb&;w+fA?Xg7^EQP4-o{S@{cCzwLSU!KFWP;7qCA y({c+pr7@6S<#$#-QgJCc=x){t3xqQ|$&t3>*3c2#xpyMX|Dv#vaLH*=T+Tl*{jMtj literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-hdpi/device_access_location_off.png b/mobile/res/drawable-hdpi/device_access_location_off.png new file mode 100644 index 0000000000000000000000000000000000000000..cff8a1817ce8963d15df36a11340daeaeda00dd1 GIT binary patch literal 1791 zcmaJ?c~BEq91fRYs;Cu|qm?BfUL?C410j(JxsVhB8W3SbhL9{K!tTaoApr&rs8FAVKA85g8&^rmeq@ z_){oWp6bYGB3c^CRp2N?ZpJVSsD@-yDESPJ+XxTFAz5OTnPCSy9Tfk*qG%O&?_Ge`qIK!_wB z?Vq5crON>!u0;SJ21HjtzA)g+V!$kj!{T@YObCWRmT^dHn4RlQBF|Hs&bPBCn zL#S~KFe}Ov@DzeaBP0DM1yu7%7Snw!6In3OAlHB}12U&H4wOp&ABv)%&^khfe2(`& zg>{i>8U&OfIy^ zf37?lFmm3t*rdy4MR49&U<$I^8mjk>^aE4b`V#);Q4!qPwT?F4;~-TYUcH}sd@bqT()Fev@l zpL=BD)tmZU2WJ%^zU!;cNeX%{?aT@7Y#d2^*ic)TbK}{mCtasP`qCy_TU(~q7*FP! z-fc=MvFQMI!g;`F1mcw<}ttpk+Cji^1 zwr=kZ*+Tb(QI?a%GUxa7_-$_+i+9rot>dy+PqYRCGE@0Z2I=F~?@R{xOV zoR?owyv1vvJC?%Khrm;O*@4DO<0$49$7osZZN6TD=fu8?tw1-6Y~l-FMcV zUSlz%NsxE;{9e6nYw~D&ckWPYsvVCK{=62_SUi}NQBG942TA z->UbFZ*GgJPQ!e$uWQTzl z^#z5c$5WO~i(k?w@Hi*iI{o?S<_r0#DYNY7Yh`0oB0A@=8E?;|N2$Af7Yz($I=nkL zWBl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi;)!fzDz|h>($-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OVZUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1? zG!Lpb1-DzwaO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z);J~H$iTpK*3-o? zq~g|_nf4jMfg^Po#?G0ewT*3&%f{rT-p-=AJjd?0>I(++2)sCjf%j#ozK6YtNcE%deVvz zt+*-f?cyH=xjR^MN*VV#-`;)HG*GPkNYxdk4Z$&j;;!i;${*Zo#P_?XcD+BqZ>P=C z>BI7^OZm}?8*00bhJFlva&*(#qe9cXI43_&KeEEY?O(pQYTbJ^rPYs`PjpQ;-M>BL zfM#Lv9ETHK5kjrAuDldvKgzIsa$!x}9nt(~%?E8KI%F;WIPFo2^(tMo#ea_2bHNai z??-Yn_G?W_}n~?IW}q1oO&&}$QuWHded*rN#RXrziF`BxAE7pYcmArZ?t_A zbUMF^(aAG4N;b6#GgcoF=sRy|aq#&D+apoeSY@8I#4_DpoOOLo;R!e0l)nEd zzN(cDOHTaX#LSqQGyD4ki=;_5Pp-OY?w;7dS=d>m;8-{7QpMRs*4@WA?ez2>@6mLY z>wdX_X_CuApWOGK-UaAO?eE-o{`&#VFAg>bE0Z5I?NF_fwYqoOdH4BSau@kk6Q0iB zQ>|YY)bf+>9<%)IWpDm{+CP1P!tM*|amyGt*sdx&DHFC#HHw} zs~1j-P3l>__-ytIiEW$pygRSoS;BTREw`65=iKHtW5(Aag|71=ZZ&<*%n@}qJ+SRj z>#}=OKW%%#Z?J#9oBk-4JE1@^!H=pEUc-M;OVTkqNs-}o)v z!FzP2qkE&e)neBLE7^$bEX&h1lgiI9oVWRHh4HS-wjq<`UW&|ow`Uu|1Gx@69A^FEhT?M6BsOS&Dc=5=|~u;xc7ARb6Mw<&;$T}2W|EM literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-hdpi/ic_menu_refresh.png b/mobile/res/drawable-hdpi/ic_menu_refresh.png deleted file mode 100644 index e13315f5da34487cba048540f41fed1b14706180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2025 zcmVC5uat znCKD`O-rn~1e*Zqs>mQ}`-uB+M>R(3R zlib`te&>14^PcCt=e)rGV>;-+0-Qh)5FpSjs7Z{CvL*lm=`p~+%N;0k3FQAB~;fiEXcjqTHpih17fuZ2@p7ejxB^>xb*~`Y)Dl zHy_egQYrkH#5jM#7wqn2`0g8H-2BRlcK#z^#>_%EMFD3 z`2J4N69g;lJ6(RP{y^|M0Iv{aI#%Hv7lg0pj4%8pXY=lwBUTGoFkZ^e%^kwUznT+)Xokh1pSN;eP&-buI}tVlL1U}xUwN!yQk^6MM~X2fjUG&0S%6 z<^8k}DnG9S7(n5eDdKq=@~Y{66SX@`sT_bhZ4B=l0F){SL-&TbKY-j~Qa}NLPnM!| zy#x%T>D@Gjeq|H!T;p-xDj5KF!^Q>6XGV>*>DtDaUCc#^pzyCIFc85l8{+^|fs1Bd zYECg$V;4+l(BawL_-J;s^Ax}|j52_Mh{|M;UKDy(MeFu;9RZ)J6Tis(el1^{JrDWk zfCT9R0OF+bQ?W3EAY;AO0S7uxOBiqE)YMr51`xHUo?oU^RE;x75niGK3=wpLrfnE! zI8WplBcI@|d-m)qWRZn~5yY0N;CTZjD;MVkNv{oJ2GBzH-36)+(2Fn^nyMM{+6 z4KX78_=`RvHIAAI&6~{kmLQiKD{r+t8!X{0nK-NL$ePi<9GwNOOb_R9ZYw?q4GaSk zfDQ?UE`*kH-$wt8I!PXwsI6h;J{_J3N1mF(U|&qaTY!MTsFz=Px~`I3lnP5Il)_Io z>NqS9O~$Kd2n2Zm2ezX1M-}zTCIfG&_agcY2a2!=K~Oheuv(NNaZfCRI3=G+#fO3e z2>>7qhnU5&FC-s1T>A_uHaIJP635M0zaP2fWj+A|NN2L6s)ao$FbE8t&iP1tJWV@zi6>i5aO79Za8?!&-wMM;KR$8P1_Ry3CQWyBPBYf&h*#4 zJJQ!FH{cuAttvDPuWhJ*xqLTyNNX#j}1qrrfhV96GPZ1bT1 zNiQH*$*p1=1(-dDBnxp09g)c^HD}}5B)LWJgPc9s?{;RQ9&};_2|zKZO6>&z9XbF8 zv$9Epj)eTFeI%+bE${Y{i8<*hs^BSwbi{)W7W6tAu~o7HGhBeDuQLgP0Y`RvFUGFj zwl0P)mt^}3z!xDPg;Yc-NP2}1-uBazp(o8pWi@o35t*W1{hDqi> z4HhIIFw$eLz-u`8nbu>Eo@hBy>#tnzYtkx&q?n3&z3yP#4P(G}P3<2SXE8JYc1OPk@2IE8dH<=*@WB0VyMVrVXACSQpcJE_>Y_H;s7&G zssH)-CmXOH6R?zbhyVZpC3HntbYx+4WjbSWWnpw>05UK!F)c7LEiyP%GBP?eH##*l zEigDbFfgP}a>)Py03~!qSaf7zbY(hiZ)9m^c>ppnF)=MLF)cDUR5CI;G&edmGc7PU zIxsNR6Uub}000?uMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o00000NkvXX Hu0mjfQR<0n diff --git a/mobile/res/drawable-hdpi/location_map.png b/mobile/res/drawable-hdpi/location_map.png new file mode 100644 index 0000000000000000000000000000000000000000..e5907072f04b90d4119892dd0b37ec3a416e2beb GIT binary patch literal 2077 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 MSl>bq2X&7AABcbM^#A|> literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-hdpi/social_group.png b/mobile/res/drawable-hdpi/social_group.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf88a85bc4a268fbae72edf5a7818392e32810e GIT binary patch literal 2075 zcmaJ?c~nzZ9?pmzwke`40y_E#i;83eLQD=zNkTASD25QAwMv#32#~y(JRmGuTTls$ zh(H94fOx=Cfhi)2l_DY$ixO$4EUgF#4l)){a2Jqyp+blic0hsdyq4&ma)|31klf z+24ao^J5SRBo8WK8B2!*2@+5WFJpy&VhJl^^=6RBkjivWE=~l63^^nLmYSxBSJdL? zzarmztZ+pwi0YO4z#(FA`m6n~t6mNv{?RW#7#G=mus$e7{4Pg~jXhXif3!dv z%!>ftwbGDdBjm2G&JXmr`SnHs6;yN2PwA$0cV5h;-)(!4^29CarLG#rr4^qpaep*F z^e9OuIxu`!qsu!AkD4}+e$-wtp6(Fk+|#1> zpNX;h$kN9A2mUo>Pz$E(+=*2M9b zf2lG&V#lV1Rj_I;+_f{s*Z%I5s4}yJVy$BR2J*kUyFPonow?5qX!3H9L3y6APVMN` zgH>m4FL}Os^cA>T8LDx3yTK!B_k7^!z4@eqfU{b{w|(bF&oM0Vzr!jO=eSEz^&$49 zThA&v0fTGQYeX|el>zY`HeltAmZzs8oDy#u+c(CZv)S@}jf<7@rP6n2n}69>kn7{a zC~xEn((o|I(ffkvm>?H)k5^^ zHzx+@X;kg_@ zjN7~_PtVHIrwc}7TFX{7ZEj}5Cnr4NW+ZmcuIb*ow$4$r2AWrH)TZn(^OW^qQ_;iJ z;-4S)+P)HK?Ft8&VV?(Qj%%8J+jg(~h+#!nj1hNlxp}HKy|VjFTK&X2aszjA?N#l< zT8012H#^!kzI>N3Q)u%jr(~OFc5t7MxNII!y>PT{4RY=1zO+z|8)~EAvd%Nx|HaAA zO;C<(YWUmTy0Jz{ys-bDo0~%ZJtXj*-7s}nXWg%A?69A)C9_kle~Rp*3JkD|+lBQr z{Esl1n0cG2gsFy7U&HHp>pYLziJh>Wvs|m8_4@>vP|=ZQXDk>QDWDao6h`{Hk{++J^+qd&zQy?h|F6h`Y9kL`L<)^n%;_Aefyj> zwfmBHrlITCy*e|$^~9B<4gN0Sq=jzNmLZ@FoZp`nsQQ-M1{lmshJ7ub4lqr2buMT> zNgpR)d2lA9$>K>CX0*b6`ZK!=i5a@eiA{Fb>w-%(8Kmy6(6z0P<3+t~K0Tk7rCC%R za{49B`VM1qP(AREk)NmAl6u?bS{e(uhPJ8B_NiL}!yQbr4_r3>^r*{sSv@uMi)*>% zzLxh+(^QcVw!Jm|a31~PV1yUEJy2rb8T&{T*O9x`T&*FS`F_FF+!|MumVVvt6Zl#0 z>%AL+NcX|uJ)cCdWH-l+v@aqO2aXl0n_uy3TFr4*$`_i5`W=!hn-o)I!yUqK3J*%=^D**fgfEJN3GkU-pH^@ahNdy0S)eu&`ry zlv)3lD(Afk>H(wZEvF6C8q0?bs13V^3wjO&!TR4d(?6JAPmTKeKV|b_3IG5A literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-ldpi/ic_menu_refresh.png b/mobile/res/drawable-ldpi/ic_menu_refresh.png deleted file mode 100644 index b25dc061616a316beea1da94d8f15d2b6ed6a146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1695 zcmZ{kX*e6`7RRHtt17K3s*I&VL=#IqiK<~}1lJx-)RxFnq=Lkfn54bY8md8qs;zn% zwU$;jZ48;2#}YbXOoOUrtW|E+Zj?sdm{0e9xF62>J@5NF|L1%=S$;l9byYo8005wl z@^A}~(e$vC$E0UMM9TQ^1Q=l&xpOrN9}%v08c2sQLV04*c&XW`Ly|E zGEJ(~mTb{;kn$A)hwtRC?kr5uX6DX(l)E<1Uf4IBj9J)FWjH=seT{Ml96$S>>c@mW!u)=@-Le*TD0>D9)^=xHv}?9wl6%}Uw7I?&%8C!acu*x z`f}R!QA*Uo-z~yg)(r_24d*p8wbK8%8R^e!L6wJJ{T!p9=~#A5xsK^WOKp3>#eD5z z+Ty9>58?#k+g%pEqBOixC34s;-s_nV6QQa$TedOr%EBpr9Ua9VpGRtMKg|GJl0b3X zuPu6DVNU(BSIWM0v083h+k$MjwfcVb=ZkGYM}6R&vhILKaRK*~Af-QLLTk+%nJv=$ z@h2WU^}O+OEV)K2tm$}saL0SH^$=q-o|EW9&r_SR?f*=7FA@}4+K&&^DYKkz=LXMA zRlHm3PsGk4Mr+jgarfHGn_6d&U9(~j;NYFT^gKK$eeC5Bv7zAkLp}A?T1D*KU(d2H z1oou1Nz)0rVy}tr(9u*auC3`6-Lgwa`*!4Wm3IPX)V?un#+Y<47a=XzD>#*#$kDUA zuRN=5Vwq;cN=P=&UtIne5cA|1gj`?Q-O4k{XbS{pb(S$tP4&01jDf<-n!f0D*EPb^ zYpu9ayHRV$`=c{C2ksRql18&We-lmDA1brO_NDwMDbw@O*m_u>qUAd`3{y}!Mg;Dz zl=NzSS>k!Q)H3ah4K%{j$XOfw@%Iob3 zd85=xx!!>AVkT0CwPtJxN?WT7@<~PpXQdq98wYVI}3i-SF1Pd`}8^_ zcI#U)uYpx51jW=>o({)n(&k0BQRncXo&h7#2JliKyEH=5t7++NlUexFb^jyg=cNNv zdp+BTm(x}GtU??kN6Z%1y4;;Es2klMBz4D8U9BZXwCjv^+LeXmDAvjILb9$|HR>On zEp@*V(l)k&(~VDHa*{VOF9y#w^5NsNO+yB0jwumiyOs1UuG0-FdYGTD5pj@|y?wFQ znJ(~Ze_Ya~Q{|#PRQS(;*u_kPH#E-P;w16e-IF!#-fyMo;wG=Xt1D=BPv6qW7~>Aq zI)7Osb6NoPrDR-Vx7H1r0xL~TPhnb%Ixxd_qr=S?1P*XWR&gu8L;;BYg_}Abfqf-h z=0JroSm5iT4Yshr(n7_1^f$xyxrZ~ICT-&Gto+iJPtDX`S|hSE~P%y+M2nt0&>=3s0V2A?(0=cJCKmI>~>r_HCiShpf)1F#~ z$6n)b11Xw9Cnh5Bl%zxe#2Ok%Cx0(f$Nx)FsCXg`V3$;@Y%DXnhbE9pqNm^zi2xUZ fOd6rCl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)z|q{?!pPaw$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OecUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnrq% zG!Lpb1-DzAaO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1ze&V@(9|Hs9a!(h> zkcwMxuG@Pbc93BEux#V3ATGV5T&+r5BIaybvAa2Xd!qkIH;3T*1V*^Ul(3a!!180#)Vj_p0oz7Cu~hx8>Y4pNzahrdz@@B$NHP zrX_NU{k$z~bHKL7SG!T?&0)PM72ogOoZhHdvVd>-hebkH0`9cEE@09w;GTY=CHyFm8h`~tCa51GFuh!~{x)y7#j z`yaG?{55g|GxOEv6Svb+3s|~;KR-AjsL4?In1=DPPnHjO&30aO$(8G?sAXN>ROow5 ztFT&2bwa!Oi}tq(eIM7mu03D)vp%$^$|kN@I70b j@~k{{1EsZVJ5yV%dgYXNWc z{u&?8V;Szg2?tg^6P>nd#e|R7(kf)Htm+Bmw_;8?>QN@LJhA!GWs9z@;*0GykKc;- v=;4r8i;6$F>|0RQk@;zbOuK}Ch$S$X>PoKli8&MkD#$!t{an^LB{Ts5qQ}~& literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-mdpi/action_search.png b/mobile/res/drawable-mdpi/action_search.png new file mode 100644 index 0000000000000000000000000000000000000000..587d9e0bf392fc928947f04293ba009f7fc77b29 GIT binary patch literal 1394 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)(9*=*)zI10$-vFf5X3XIbTx5uc62i} zG&gZFgz0t3PcF?(%`1WFO+n~&!KoLN7;+1MHoK%2WtOF;xE1B+Du6w0m5JLejyTPO z>P^Az7AKr~^?{Dj2SqJXRKtXT=?BDwCtM&0p7c}mfa$#mn6M+i2Q6b@V0_}~;uunK z>&^AE+Ae`I$3E`tm@-`{zx9(?>dU1k*tm~+ZG0%dVMD+vFR`R_eQ9k~)lEW^HhtI? zB&0NvW8=gpsXg!4y8B+<@$PBQ%`+>{C%wC~^SkBqd7pQuuW?X#(4E%(*>&epCKp?W zrqiE|F7`;J9Gc@U;Ny}9H~GSBM$UJ2|47y7x^EaYbO zm=^RUfnEK@zlTwYmbEt*&h}S4{%}u`&SQ?!WlSjvv9{-n3Kw#{NfhghW2)KCHS6mc z^@8V*Jmr$4uC6fJ$dg^zU&?d@|$3_EuOa%?|q_h0a*8dJ>+>(i$vUCaNY#uTIE zul#VEs1omUHKv?ZC$?1V2%BBCKXsA7(geZX8pRvuyee!cJTgs9KN2D`QS`=`xX%9*}?nyAhK z_Nf-Z4{Ui>oBh!|a6Nmso8l+YBlF(g-ZfEwMbWdDrE^;>d8}GD@Z@>D4V>xD8CRkc zdVC*mVv&1FrpctHKHIFmo)(#Y4~A;Ho~#?e&Q2v6MQ%0zKUO`Q$Im5rVUFgn)AKHP zSBG=VuX=ZVUZK&Y$p$gc*{*!{ocg_l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)$k4*r&A`;u$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OzjUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfY zG!Lpb1-DyFaO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zzTW#wpMimKt*47) zNX4x;(`~&EJ4hU#eM=~Qh3+e*AEGP=FItrrTsY|WOZ1EJjvdw(oa_9oZXR?!=qWq3 zDc-Rl$fx$;g=0VJAIMucT~d2m6!_%<`}Cr{HsA03uk3vKyH4?Zpw1JUBJ%}HD)(!x zD6V6UWBYsX(wau*4TpZR-Y}|UE&5gYfy*j^@ysj}hnSn8^Y$O`h~hOlpeFH@&9n6n z+cyXQpRvy#C&-_`sd!|u1&Gh3b zxiZf4FKbLh*2~7ZL CljEBJ literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-mdpi/av_full_screen.png b/mobile/res/drawable-mdpi/av_full_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..6fdcd5fc4418b053eb53a0db0dd6e3d7d56ba9f8 GIT binary patch literal 1479 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVil*vQb*(aGG@$G&eP`1g19yq1OVZUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dHn$jA zS{OUInBg=Jsy7949}Q3Qz1jT3V21e%ar+~$rjqCgPCr)J(rrTR}iX zi-o?ODs=nnxbaB-G|TTVzNz}$ZtR-zWaokMe@-%!-#*j5TbXkF#hN7H2aAiQD_5vp z^U%|l^-S~5iP|;$#G90 zEFqgayuZfzEM+lh^<$iE^C__G;BIB9<-)rb%(Pgv(Ber=?BO$e-)5Y2`)E4vsnEV9 z`gayjx%U3z6tT6-zD&+%*c)|$`@#NRX+}1NQ`VxN3}&*KfQnX6S3j3^P6U1$_X9AA6!D{>-O1V0|eJyDC^?#_9aWVd(G`!pxn5HHtyB?hy%JIO7{?re4^ zxy=>PXrxrIMX-W>4j7>*6vaXxn)qO8p(L~w;Yw*^d=VlMT0s=V*_ewycrNVD%%9)y z_y3&zva{o`zj0e5!!Z7ATPjCa;JxeC(63Xe{7;vyBwZj~xQ~<-8!>SW7ZJ!BN1`DobyYg@YGptbHTGaDh`JILFc49IYYdu>7#po2~Upxm0G^7d^$; z5+Rnv^W}1xD<9yn-Ooc&6nP=UheAP$2s)!CQQV;E1ZoN?FX2>Yem*{mdiv7#=DBeLr(BgssUyB{ZPYLK|3Ue-o*P(VJAOoAwGv3JZ!79aeV>L zl_e!@q!4W9F&?Z{v9p8;c1qX+$*u?ofvl*y=~TfLJTV1#uZ@eRHN^hT;mAAysZrJ&>qq3vt&*SmMxy)?HVwt>5|Kw*#N*A@?K`5dj8%Q7oWF` vOgVUDW_-_uZ1>R1kA7S8{aE&X&*@dne`UUN{`beD-d`Y_?nqrv^qzSISl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi;#m&XQ(Amh;$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1PCvUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dR=1d2 z7#ld@HV>*d1*==YdQEV;MIY!GeNfaQMKw$an0`P^c)|s8;7LC<518JIfC>Bek$Ykc z42+*WT^vIyZoQel+n>o%;F#rsQ{DVgCIY%VT)kpWN@80)lDBNxa5O49xx4p&!_>8N zxx%*HkWl`?W!KcXZHB}OfphOCy`Q9eZujGNPq=PAnf~VNxpREGt&O{vXmp)F{p@?? z9X39T(ggM=b0s*eN)qI1sE&$m&fqgi_cyPQsBsO$y@sXGly5loZ%`i^W=D!m+*6CGK@7IHvwg6@mc zSJoD+Te$D0;EKQ^mSYF3GJ@ooA`Onew=Q6l`ZMjIp>j&|^sCndQw|7waBZ@%U^o5X zku~Kg>t2!PX+75rxDU&$_;e_9e~rA$0rB!BC+k|06<-r{1ycWsY{OZ~jAYF#(gZ}r-4r>|^` z>A9nETKbLh*2~7ZF9Rj2P literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-mdpi/device_access_location_off.png b/mobile/res/drawable-mdpi/device_access_location_off.png new file mode 100644 index 0000000000000000000000000000000000000000..56eae120b2a91a8dd0940e5848a6e615782d2b0b GIT binary patch literal 1383 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi;)!fzDz`)Ja$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yuGi22r(RHE$SnZc?2=lPS(cjOR+OKs0QR(1CN{UY zxVab@Iy>Vu52`l>r&|nMaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zK4mX9 zoq>Vzrl*TzNX4x;)9rPb17(i?*68MXwke`zf{E#iR;jG3y%!e3%L6ZNT$xS zzQBL&purAC@du6BdllH&4yxW@DEA6m%FK1-py`Q5Lj|1@mg_}VdRN~Fv)se~rVZZb&~Y<@GRdU77u#GXIFlix6GX%_w9Ide{ap>9G^Qq#-T ztF1P$v_&KwdT`MxeR{k8=SaDI=?m4re>3Qtbx`!iw&Df6B@Oxgv!?!0T)*XOptry& z9!o~a?yV*oO{_sn&a9cfu(#`ZNH^o$t3JjjpC6d@a_jb>Z)si3XSXS7EnAp2p|`1W z{iT4d0;P?b_FNa|Pk$6O`=a6Vsk1IxlunsFQT%Ph2HAd#%;S0bDv77&y((1PxNFke z4H;*fg7&^|QGLg6WqYSPy0B66c}2&u`os0_53FZkX87PBuQ1Q=l_;p_^K|udS?83{ F1OP0q^@;!h literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-mdpi/device_access_location_searching.png b/mobile/res/drawable-mdpi/device_access_location_searching.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4fb081e0986f4670deeebb6fb939043423499a GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi;&A`CY$jQvq$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1POzUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1= zG!Lpb1-DyFaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zb_(je$-uxk$HGDa14WKkuk;i?qnfD`bg|Vjeo@=GU4~L?wniVlb<#dz(=CtPk=cS5xtd*g z&Il!H%{%YCZxY|t^82+{&0l!hojhIrd|q``ea-omA8YNWF6mt=v@MXSQ20i3)*ObH zGdOh)dk1M7Fv@>enyzjvxPD=yQO*ISGfn~zB=a8foco&hfb&VBeAojvy$6o>pDpC@ zF5qM@NEbErIM5^%<1Bmaz?Tn(zrv>HpH$m+_6hfeCgl?mKhmGvzI0>Xzr<*PJCl-U zwCPrCzO#;J&WpC3*Bh*I9VOo_%-9)vw?ZoV-E;9WUhNCl8oRT6d)FSh*tmyjXH>AE zkBI7>)+QD;?tVidj$`Lu%Jd!dusMvLYTnShO4bthIQ?Y+ImVXgO9sR`YNm3~^0 zrIyV5uAJ$f*dV^FBhkBN)#nG6esKXj&!avlyBKen*&^_Fr--|*8?WvEu%2sAlVf|> z0{ePTeO%>j*>`(F%GY<961<-4r@aYSw3T^o;`bKWUjN;Gb{*?>tkr&=llJBQhx_Uu bbPq7pnR#F1tm66uDziLY{an^LB{Ts5)}Gl{ literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-mdpi/ic_menu_refresh.png b/mobile/res/drawable-mdpi/ic_menu_refresh.png deleted file mode 100644 index 30b660fdfcc1c517a22258837bd6106c4b387826..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1278 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8!2v z2N=7Z%(epwmK8Xr18D^?ZvQoBE&~G#o2QFoh{y4zQ@wMhgo+%me_nUrJl|?d@U4cI z&C66+coe3&8|36XRdu=G64uqvy3gPsOKRexV=e`a{Rv4)Jrg@vE@o)$a!^%t)N~SO zYU0djoYo}EmF%5vb>>WYe>c@^%@6#CE zbTU$6p4~e&^RwEyj?mrnmi!66`B&V!FKBP-w=aLz3G7)VeTvuj;(8RAJ`B zz8Gc=bK@mk-)r+LYpVHYL>M;)bv`Kem%1p}8+!h)=1g zJ#8(xyx?T*j`G{<=HC80`7v89!Jk+zU@nHKh@mE>g7O#ze zM_K-ukq|V^p&;x=b?SpIo?n)mDyQC`boAf){+0zSYBu!`-W|L1{oSY9UCCUrF|wyV z>8(1MbTUzsAu~v##D%wE)o(Sks5$z-ELF7J-kR2$-(Bo>w$H~gVAV4BkJWp&$?ZCL z@lb|agQ|mW;-NW9(^m)|7Mya`BExI)-;{+0KC`6{CN-?&o|jShyIFo~?Z1~^Qy=Ov zlvEwxYkMytZ}DE%m&exk?Guc7&YHBkM`Y=O1D(Fr_cuMU+%@xT)3g9d26lO;Lg$6o zmtD?sXHqG354_Ryq^^gtoAc^74df} z`j5(-xWuWcnY;L(iv1(=qt7IzIXZ%$DGBdASM!{2mqF950EOFsVk}#^@4Yjg!xpHU znjAOr#GUoeeb07sDnxni-oA-j{?v=@#ZB$g_giL9bhXo-leOGlD^s_Z;i=@`iUmsH zlea5z$bNeA^7C!W{wc*vAAVTmYizdbM>})=`~|$9mc}s5P<5YD5;UP{$17`nKAHUj zD^6d}GKu`1@c8s&@u)w3?^n({y<5_uXtCSO`>d*;`s@|o68O|Sdo#aC$kCWDb~-th*Z#}aD;4g28KgS* zlwjoSthW)N*JJF?u03?YefdA58&&V#EPS!vdH0I-ClXW~mfeml-}<$^{QJ83UwoT= zxQ_Sor2X-p^U&nwniB!<^OTr;IQEOwY;coWv16Su2h)R-y8kyS{+u~u`vnIFf#W(8 zG)`>~;c)wRdxy#->j}3_{)>k*&1A8#oAMA?G^m!iMwFx^mZVxG7o`Fz1|tJQLtO(y zT_cMSBO@ylb1PG0T>}d%1A`@gMJG`-wJDNutX$cEtjw370~qErUQ il>DSr1<%~X^wgl##FWaylc_d9MGT&#M diff --git a/mobile/res/drawable-mdpi/location_map.png b/mobile/res/drawable-mdpi/location_map.png new file mode 100644 index 0000000000000000000000000000000000000000..21de2011439aa4d2e5205504523020decc79cc8f GIT binary patch literal 1648 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 IFo%f$0VKS%G5`Po literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-mdpi/social_group.png b/mobile/res/drawable-mdpi/social_group.png new file mode 100644 index 0000000000000000000000000000000000000000..a19796c36ae2938d89ab94c169b0cbbe4844fcf8 GIT binary patch literal 1594 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy(%jg{*vZ7y$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1P0rUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfW zG!Lpb1-Dy_aq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z4tTdwmw|z4ji-xa zNX4x;)BQVq17(iC-)pRxKQGOgcVBJ4R+jGC`};7oNkAQP6Zig28{F`dyFJA1zUFnx)_x{|n_bI>D zieElrc3b(Ph>q~vN5;&&oppwCrdr>oNvN|)98Nz|_N*f`p^GDOr}w*AN2S;CE*4Vz z_VcgmF}F|e7kcC{yr1ye=DPBcV8at$bsfJKDY{KmtTFQ6v-Q`E`}31TlaI0$NI(9w z?1|5D(KXLlD{Z?MKDy;N(eY&DBaX?^FK-{2yF|-ltdES zhJMouiZ?`@Ehp?hXU+0sjgHCj2RZ=N*4k!!}4t>1n(ymtF@ae9e{ zDrrRKD#l^e}P&s%jYVh?GX^m=Pe&{y$5bD?L+e)jg0;&(sg+_O83_0pV{;L~dr z7WRs)KXPkF|CFNnDbIK+&a?%+-Y+gbb@pSXg4h3hUNQdp&iF?#fq|*&baY9{TP9Fx N?&<31vd$@?2>|ITYQO*h literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-xhdpi/action_about.png b/mobile/res/drawable-xhdpi/action_about.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee903f071bbd86118d23e3e348af5ff8190171f GIT binary patch literal 2040 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 literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-xhdpi/av_full_screen.png b/mobile/res/drawable-xhdpi/av_full_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..791240fd255052e94c008e8d5393d0b0f6175020 GIT binary patch literal 2065 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 literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-xhdpi/device_access_location_found.png b/mobile/res/drawable-xhdpi/device_access_location_found.png new file mode 100644 index 0000000000000000000000000000000000000000..52ca8ab7f3a772adb94abdc33910558ec42e2f6a GIT binary patch literal 2204 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

ba? znxypT@A3XmVbZV`M@4#+#7YSx-ME4%pDP?z5hy}ogaN~fC#slUgi#n-gyDcHGeHOf zI>czU`Yf*)Ivt#9B`L&eL{rsr9<3oXn@zAvlcZ6J!37CQaS8}(K&b?jY9vaPA|(M# zk|@Cmt{O9zT2L!B!8QHPl}yU@4TA-zJ*!c|yaqL;5SRscl{9RgJQi?Ly>YH-@>rlr zxgt6kk*~G?)#?coJwLwV>%pZjuSXxX((_KxgWdIV*vVk9<5JZMgT3cou1;&nnAx!a zi?+1BU3qR=JrtO5l;760JMRe#3Eu;7Hhko)KBU>)+g_AmV2>;gIu_f*7fO1jRP5MO zbI7zl_C<9--1+X30(jH2d3_t3BfLA;c}M#z>g?xw$p^M?eaoGd+Smr|sKTxq)!vDmHsd)b^Jdzj>efxIf$Vr?=i~V&J68TOb;KzG z27(9u5Gb7MQ6#$>ZfoDZ@Iy3bH^-=t$XB|Z`<+vOOTS);bHA@#*B;cm9seY~t^xg( z|HL?>5+6Rg&s%jgp)d8eaz*441OkbY?mW4bk)^YcK< z`J86!&aaPD6wWd(k;g=+S}FBB+?BrhQr*C*TNjU9uLT!3?S0F;MeA&j8qf@k9OSa* za6GKgbrFBNyC*l!&v7+rRm61r4bGW4m*dKUv!~rDb_VuvJc3=1Bkm9V;p=yXLK-_q z^q!`w@}R4$S0pBj1i{u^uI5)I4a$jXRwC{KZU%JbGNWAOXoT@++=7`BL0FpIi z_k>bY5mm!<=J!C`nCp7F;Ken0U~YX#dbRiQg#rW1Z|}7$iScdv?b}mbr~Jos9p2A? zALlM9Ihql9pkMDH*iYX)Tc2WU>d3Dt&vQm^jm__dwi>?wZhlE`*fRc$_4B?f{0IB* ztRQ3f^uWmRl!5S2d&eP?NR-MQHho2p`0Hg9|H&h*Z=eq=w{0|YA;w*0kg zVAIv=(L6;~T4&JA@SIw>iv2IeLBH^gRFJsFA#;(VO{0))V?Ed0PnJ+tv}qw;lJM zsoaCL!I}E6E}kgAH0-8wjXSwx53#Ic7nknPk@YdB+0938M |7QRm!woyI*hWtM8 z&if2K@Fw5U`9&EJx#VyRG+%!^xvHU&TxNPX>jzJq&>bKQw)zJSO({JyV`s{&u9&su z+qyo1z1-)Yc7N!$u#=U{&r5$AJQQ#javyy3&F!q9H9XGC;}zg+F7C8{c|p#Ujj!eL bXW5|)vLfl@9nt$uzMpBTCQaR<%-`@IemDQ2 literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-xhdpi/ic_menu_refresh.png b/mobile/res/drawable-xhdpi/ic_menu_refresh.png deleted file mode 100644 index 9e9f10ee8807efe8379066f03c68309187d13c06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2857 zcmZ{mS5Om*5{4lH2SN!Tpj4$wRUp!XN$5zGE-ED?p++!tq^lD^5EP|_CcT4*atQ6B zARxUPq<5tgLXnVM&Uw2JcXs~&o88%e_I2Ye%?;Us0zf)CI(B0tJ*x}C{t+|7h10n- z*ry&Oe``)CV zZIfrUz4!3FA`6A>iuCY(Vf|JwEJzZ_qdc7_;n59L%_4Du> z<#X-Z$Hwifssj-XNlQtbobU7sS(8|#I zwathsiq8R&I&bdA^6N@fa-?qVIC;W(jx3z%Y*K^n(=y5HnXiyeDC)67+(MVQ@TM4( z0KS2;35%YjHKpKyy?EB01c(a*xpnc;eoam>bSo4FSl8p+zuJ!tfOReE?;V~tRwU4Q zv@=YuE~%nFi(W^l%nHo$f@U=-T{Ck$*$$8d+fHIA|3rcv5zQn~v~Y>BPTGlYw^5`X z4jyAOQnP^BJgRL4i?sQkysocp?7%;?x*;-d3Q6ZVbVe=T#FcZr9|{(x#j`OXd3{4VLG z%On7kI+hl2FW;T4=Eq#`x8{x3fG$6;q9{rkd)Jj?vv)>ETf6Y%@%mgOOVVoZR`0jh zdUkRL924JlJ*#Y?yIgQ#4o)E%fQ0F73yc)QwCB2kbQ_fWmb$z}&+?URxn9?n2g~1l zw5f2EZ*erINkJL%jUxSXJvUBc?*Z$#YCH7&!*{REP6fB>TXKn};VP}-b1`pGFGvqY zpI^@Y;TSF5q{5%hgbV+IMzY7ebo_C5U8`QBcIm^PhKLHppu1B|U$JQ%+@%WWM?kG2 z-Z?^&fhJSWoN}Xqp3oO~-R#Sku!`mOq;+s$yOaH~Y{pH>1Ztk|BYGC=V;6ooK>DYA z5Gwdm?8vx~kLB7s^i$|>?k%rPp7WH4f^2JzL5IAq7{N9v7JTS|ZYDh^{r3YO9o-UH zdu1o1iU1M;$LiICV98iY!9NHUuM%C*Ey&Hce-KxwnQl3tR*5$#MeQie6g4ICVCJ5O zVeQ=2!}&p+oO)87iQyt&S0Pw{Nx2wHx;q$cK1zfK88Qh0vaR!s$ie5=8YJ^Y_l0o0f0^X0j5F;`a$9b364kCY zthTx3s%LLI+GY&=j!-iBdQ|+E?=;(LUlHu{0uGxK%v1)4A^((@@+q)$JL9RL-5&#DU`AkrQ{ON&V@5%*iJhE=X7A`=FuM}})T9^g9|RyB7%GYU#`I=C@5AfG1L7kB%-*3eMrO{T1x zRH|kr1~<=sI_g+>Fq-wHhe~6)Z7? z8r{*#;$J_@{#xhP&}sN$<>+uQ;OvbQ`4y2dg!>7#r6~neG?yBBr#AjZ!T*UF z=42{qPG07yxCE(Q z0|3#j$t_C#ULRzmWa@9kdg`S#Yu}tEr6igbS5~;U^XjZHSbEUJ8~ZW5HynHWs{j0u zQ$YGg`7K>KNWDOzHRq=}3%5?eRbB za_+EJW<)GCjpO+Am99F1%Gkt27}+-*^CulI-J>TR9}S`NGMS~$t&fU94KeMe%o6YK zKS720F;E;t$Y01if&HiMk_;9L3B&%P^rLf|vr?qe6Ul0$ zMy4?N5NGlUaVR~qax;gBC$@!C93X|*8KH@8ulWo!IrKOc63MYUm301%S)voA_SH6Q zbj}_cDJy^%q&=KpC)CJ1Ol==@^1VCiE{{?G??jb!zj60=_wH8|7M{AY46HObmFtPA z38~UpZZXe1R&`Pr%*BLjb?!WQkc`o=qjU?sXNcjo+SQg(3M~1UiXCj9DI1eT3vLKa zhbRAzNj5O%5H0ciO(f1F_M5-EVukqn2&n~- z+Ke!zeCU07`N))_;Hdj9-+Ii{A9(b=;hxxRwS{LZ8L={<1{8ezxz-2qEi1rQ4&5Jx z%S2&t4GBMZRH{AohZ-hVfLX^$mWc_W&5D&&?$vZQn%rr-JdLpmHnQ}nsJHIoiznJ<=(xoG7w}DH A8UO$Q diff --git a/mobile/res/drawable-xhdpi/location_map.png b/mobile/res/drawable-xhdpi/location_map.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ce90a33e6bd7d9f6c34223550bea2bd6d6007e GIT binary patch literal 2510 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 literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-xhdpi/social_group.png b/mobile/res/drawable-xhdpi/social_group.png new file mode 100644 index 0000000000000000000000000000000000000000..32d24d2c33b8137bdcfe64212f9f7fe2c9341fd7 GIT binary patch literal 2541 zcmaJ@c{r47A07-JQwBN;eV^y~UH5(e)<52KFArx`*cuoF0#S8! zA^FI5`^8sTN%lROTU|0^ge z*$W_Y`5=Hrpv)O4D>Ptbi9lPTaF)1D00xCdA<-Bl%Gw-_!eg!RC^Ycxfy=z{nIU)| zlG8U|vYRbDOeo~xk;vHCSVXJ^g3Av@qH#DJ5`{rxFy=CZxgd@sq>0Qq0>dQ*5-4Es zSv(<&%K;V@X>@M1&=xL>^sf}yyzjCc!M8HW3WgNXct|t?wV2WpkWBvnP&WHJS|IcR z|Bm;63JWN4JP_#v3b@gHhOBWRhKsIvcp@L93AuaaX!*(@lku(`fsn>wfUYE4xJ(1VVlnYfo1LsM)>al+0?G-Ec0}VW(Kts-0@1+< zi?+5TpqIELE+d)^a)e7<=HFb)A95Fmfz6Y7CV_lb49IlibJ@Vxr17jD$AbQ$-Zw7u z$FX33$VJM6K`yrTzgoRylFiTJ@%!M)F5gEV>J25tm;O7yqGxaSX`uPy~k+=F{-%_oQ#r_n+QQN;Ejo z@RY&XSSUW}d&EI+D}F+7b;sbO$;&zkxu+ui+Pa^_X;}jUCf4b-^UZk`w|<-d*fsxA z|H+Kod6A8NewU$6{`hs%=6|f|!Map5T0=P!yLjH${KvMxDLTMI)2sIBq4zqPBD%^4;HAAt>v2H z{g4z~QQG$Nrb^}0A(G@yy-wbqbH49|jh7#`9%}1TZ(Xl~IpI7B2vUvN|9Yi}r zs%v@;UwJ7c;lLuVFl?MWfS8Fgws@~RDm)Qn55K~d_N-T zxv4GzG%l$@5@)1QZ^;l@dBK)9l0&Ln)3(@{SKhkmu<86%r83tVa8^?Q55 zRtRi=kBV2zSpYO_LpPk)9C9&>NK$HDS#qyU@+9Nu#x0)94pm?%{2kO|jzPm4Z)DyH z2_QF^r{U> zuZtK}a?vB0gcQtjuhfV{OOCr0UeJVR|1xMas=Cjn`#2HSc_F0PA$Cj0-U+G5tdSEc7V4YrD9C7z2<59|KgX#{zLb+e%4yMqk@5HTF81<^m z)J}_lpy)5%s38cBt$XAe;C+>mRRz1SvTb2=FSuo|^Dg^k&Qq;fpm$6B!Pba?AP<86 zjS{`d#B2en4$S{gEx_F^h#xa)P|>M{L{ z36tgP84{f>XEG9wE|fT^H9qi4wwgJ0(e!r0m`#L2pjM2((oRgj0kPLH2~25D@n#Tp z?D8q|fAU%p{C4=1s^VvM^38)2=RzZm+?`a>S}kL*suGq{T@6r04_sjvbCW5lnfg^a z#(}-3Ci6&ObYLHZLgilA)(|u*gWU zy6(v2$$fc>yIk7aM_x>Q@!?$?W_ZR&>Z{*P)sk3Y>U$7WHT|4hrTi8;w#-i`k3Uo0 z8yA`K3#`YWOTj(~F3-Lf<_^38L^L|djSoF?5*7HicL(88{xZRCx zY^&{?-BzaTB{zdZECd0~Y7JjLc?YK4&DQ(u3GR_k{Ku+zvEZL12kGv6l+d=yb9(Uy N%+=9@Bq0Qg{{vV@A5#DT literal 0 HcmV?d00001 diff --git a/mobile/res/layout/activity_main.xml b/mobile/res/layout/activity_main.xml index 9abfe63c..3eef9813 100644 --- a/mobile/res/layout/activity_main.xml +++ b/mobile/res/layout/activity_main.xml @@ -1,7 +1,7 @@ + android:orientation="vertical"> - - - - - - + + + + +

+ + + + + + + + + + + - - + + + android:title="@string/action_settings"> + + + + + + + + + + + - - \ No newline at end of file diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index 0c8cdd72..8cb7e05d 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -3,7 +3,6 @@ IITC mobile Settings - Info Reload IITC Print Version Clear Cache @@ -46,5 +45,12 @@ If enabled, all IITC sources will be loaded from external storage of the Android device. Please copy all sources from $IITC_folder/build/mobile/ to /sdcard/IITC_Mobile/dev/. IITC source - + + Chat + Map + Full + Compact + Public + Faction + Info \ No newline at end of file diff --git a/mobile/smartphone.css b/mobile/smartphone.css index 804f6a29..a1f89fdd 100644 --- a/mobile/smartphone.css +++ b/mobile/smartphone.css @@ -30,6 +30,7 @@ body { #chatcontrols { height: 38px; width: 100%; + display: hidden; } /* hide shrink button */ @@ -52,7 +53,6 @@ body { #chat { left:0; right:0; - top:37px !important; bottom:30px; width: auto; } @@ -74,7 +74,6 @@ body { } #scrollwrapper { - top: 36px; bottom: 0; max-height: none !important; width: 100% !important; diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index 8227eeef..9a598aa1 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -3,7 +3,6 @@ package com.cradle.iitc_mobile; import java.io.IOException; import com.cradle.iitc_mobile.R; - import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; @@ -14,6 +13,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.StrictMode; import android.preference.PreferenceManager; +import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -40,16 +40,23 @@ public class IITC_Mobile extends Activity { private LocationListener loc_listener = null; private boolean keyboad_open = false; private boolean fullscreen_mode = false; + private ActionBar actionBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // TODO build an async task for url.openStream() in IITC_WebViewClient StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); - setContentView(R.layout.activity_main); + setContentView(R.layout.activity_main); iitc_view = (IITC_WebView) findViewById(R.id.iitc_webview); + actionBar = this.getActionBar(); + actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_USE_LOGO | ActionBar.DISPLAY_SHOW_TITLE); + actionBar.setTitle(getString(R.string.menu_map)); + actionBar.setHomeButtonEnabled(true); + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); listener = new OnSharedPreferenceChangeListener() { @Override @@ -193,7 +200,7 @@ public class IITC_Mobile extends Activity { // leave fullscreen mode if it is enabled if (fullscreen_mode) { // get back action bar - this.getActionBar().show(); + actionBar.show(); // show notification bar again WindowManager.LayoutParams attrs = getWindow().getAttributes(); attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN; @@ -223,7 +230,7 @@ public class IITC_Mobile extends Activity { public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); - this.getActionBar().setHomeButtonEnabled(true); + return true; } @@ -233,9 +240,15 @@ public class IITC_Mobile extends Activity { switch (item.getItemId()) { case android.R.id.home: iitc_view.loadUrl("javascript: window.smartphone.mapButton.click();"); + actionBar.setTitle(getString(R.string.menu_map)); + return true; + case R.id.menu_map: + iitc_view.loadUrl("javascript: window.smartphone.mapButton.click();"); + actionBar.setTitle(getString(R.string.menu_map)); return true; case R.id.reload_button: this.loadUrl(intel_url); + actionBar.setTitle(getString(R.string.menu_map)); return true; // clear cache case R.id.cache_clear: @@ -269,15 +282,33 @@ public class IITC_Mobile extends Activity { // get the users current location and focus it on map case R.id.locate: iitc_view.loadUrl("javascript: window.map.locate({setView : true, maxZoom: 13});"); + actionBar.setTitle(getString(R.string.menu_map)); return true; // start settings activity - case R.id.settings: + case R.id.action_settings: Intent intent = new Intent(this, IITC_Settings.class); intent.putExtra("iitc_version", iitc_view.getWebViewClient().getIITCVersion()); startActivity(intent); return true; - case R.id.info: + case R.id.menu_info: iitc_view.loadUrl("javascript: window.smartphone.sideButton.click();"); + actionBar.setTitle(getString(R.string.menu_info)); + return true; + case R.id.menu_full: + iitc_view.loadUrl("javascript: window.chat.choose('full');"); + actionBar.setTitle(getString(R.string.menu_full)); + return true; + case R.id.menu_compact: + iitc_view.loadUrl("javascript: window.chat.choose('compact');"); + actionBar.setTitle(getString(R.string.menu_compact)); + return true; + case R.id.menu_public: + iitc_view.loadUrl("javascript: window.chat.choose('public');"); + actionBar.setTitle(getString(R.string.menu_public)); + return true; + case R.id.menu_faction: + iitc_view.loadUrl("javascript: window.chat.choose('faction');"); + actionBar.setTitle(getString(R.string.menu_faction)); return true; default: return super.onOptionsItemSelected(item); From d064e17c06053c62634921e45f8e27b5ef27c7e4 Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Mon, 6 May 2013 22:55:16 +1000 Subject: [PATCH 05/26] Fixed a focus bug with locate button and added Exit menu option. --- mobile/res/menu/main.xml | 10 ++++++++-- mobile/res/values/strings.xml | 1 + mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java | 4 ++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/mobile/res/menu/main.xml b/mobile/res/menu/main.xml index 6df399c1..20de94d0 100644 --- a/mobile/res/menu/main.xml +++ b/mobile/res/menu/main.xml @@ -85,11 +85,17 @@ - + + + \ No newline at end of file diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index 8cb7e05d..8fd875cd 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -53,4 +53,5 @@ Public Faction Info + Exit \ No newline at end of file diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index 9a598aa1..f34e1fab 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -281,6 +281,7 @@ public class IITC_Mobile extends Activity { return true; // get the users current location and focus it on map case R.id.locate: + iitc_view.loadUrl("javascript: window.smartphone.mapButton.click();"); iitc_view.loadUrl("javascript: window.map.locate({setView : true, maxZoom: 13});"); actionBar.setTitle(getString(R.string.menu_map)); return true; @@ -310,6 +311,9 @@ public class IITC_Mobile extends Activity { iitc_view.loadUrl("javascript: window.chat.choose('faction');"); actionBar.setTitle(getString(R.string.menu_faction)); return true; + case R.id.menu_exit: + super.onBackPressed(); + return true; default: return super.onOptionsItemSelected(item); } From 7248b17ea8f264554b1145bc1e3e542bc349d38a Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Mon, 6 May 2013 23:08:44 +0100 Subject: [PATCH 06/26] refresh improvements - cancel existing refrest timer on start zoom/drag - add a manual refresh option into the status box when idle --- code/boot.js | 4 ++-- code/request_handling.js | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/boot.js b/code/boot.js index c08acf8b..69f89549 100644 --- a/code/boot.js +++ b/code/boot.js @@ -236,8 +236,8 @@ window.setupMap = function() { map.on('moveend zoomend', function() { window.mapRunsUserAction = false }); // update map hooks - map.on('movestart zoomstart', window.requests.abort); - map.on('moveend zoomend', function() { console.log('map moveend'); window.startRefreshTimeout(ON_MOVE_REFRESH*1000) }); + map.on('movestart zoomstart', function() { window.requests.abort(); window.startRefreshTimeout(-1); }); + map.on('moveend zoomend', function() { window.startRefreshTimeout(ON_MOVE_REFRESH*1000) }); window.addResumeFunction(window.requestData); window.requests.addRefreshFunction(window.requestData); diff --git a/code/request_handling.js b/code/request_handling.js index 84617d54..8b6c3ce7 100644 --- a/code/request_handling.js +++ b/code/request_handling.js @@ -38,6 +38,7 @@ window.requests.abort = function() { // gives user feedback about pending operations. Draws current status // to website. Updates info in layer chooser. window.renderUpdateStatus = function() { + var t = 'map status: '; if(mapRunsUserAction) t += 'paused during interaction'; @@ -48,7 +49,7 @@ window.renderUpdateStatus = function() { else if(window.requests._quickRefreshPending) t += 'refreshing...'; else - t += 'Up to date.'; + t += 'Up to date. '; if(renderLimitReached()) t += ' RENDER LIMIT ' @@ -82,6 +83,8 @@ window.startRefreshTimeout = function(override) { // status bar window.renderUpdateStatus(); if(refreshTimeout) clearTimeout(refreshTimeout); + if(override == -1) return; //don't set a new timeout + var t = 0; if(override) { window.requests._quickRefreshPending = true; From e34fd27e9ef2d3165505a21f8f6bfbeb5b086390 Mon Sep 17 00:00:00 2001 From: Riccardo Binetti Date: Tue, 7 May 2013 01:05:19 +0200 Subject: [PATCH 07/26] Added focus link in the toolbox. Some renaming. Removed div to use sidebar style. --- plugins/players-resonators.user.js | 39 +++++++++++++++++------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/plugins/players-resonators.user.js b/plugins/players-resonators.user.js index 530430de..7e6186cd 100644 --- a/plugins/players-resonators.user.js +++ b/plugins/players-resonators.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @id iitc-plugin-players-resonators@rbino // @name IITC plugin: Player's Resonators -// @version 0.1.3.@@DATETIMEVERSION@@ +// @version 0.1.4.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -12,12 +12,15 @@ // @match http://www.ingress.com/intel* // ==/UserScript== -// Changelog: -// -// 0.1.3 Effective player name (with wrong capitalization) if it finds some reso -// 0.1.2 Made nickname case insensitive -// 0.1.1 Added mouseover for portal location. Dirty hack to not show mousehover when the alert is fired. -// 0.1.0 First public release +/********************************************************************************************************* +* Changelog: +* +* 0.1.4 Added focus link in the toolbox. Some renaming. Removed div to use sidebar style. +* 0.1.3 Effective player name (with wrong capitalization) if it finds some reso +* 0.1.2 Made nickname case insensitive +* 0.1.1 Added mouseover for portal location. Dirty hack to not show mousehover when the alert is fired. +* 0.1.0 First public release +*********************************************************************************************************/ function wrapper() { // ensure plugin framework is there, even if iitc is not yet loaded @@ -32,30 +35,31 @@ window.plugin.playersResonators = function() {}; window.plugin.playersResonators.findReso = function(playername) { var s = ""; var portalSet = {}; - var effectiveName = ""; - var nickFind = playername.toLowerCase(); + var effectiveNick = ""; + // Assuming there can be no agents with same nick with different lower/uppercase + var nickToFind = playername.toLowerCase(); $.each(window.portals, function(ind, portal){ var r = portal.options.details.resonatorArray.resonators; $.each(r, function(ind, reso) { if (!reso) return true; var nick = getPlayerName(reso.ownerGuid); - if (nick.toLowerCase() === nickFind){ - if (!effectiveName) { - effectiveName = nick; + if (nick.toLowerCase() === nickToFind){ + if (!effectiveNick) { + effectiveNick = nick; } if (!portalSet.hasOwnProperty(portal.options.guid)){ portalSet[portal.options.guid] = true; console.log(portalSet); var latlng = [portal.options.details.locationE6.latE6/1E6, portal.options.details.locationE6.lngE6/1E6].join(); var guid = portal.options.guid; - var jsDoubleClick = 'window.zoomToAndShowPortal(\''+guid+'\', ['+latlng+']);return false'; + var zoomPortal = 'window.zoomToAndShowPortal(\''+guid+'\', ['+latlng+']);return false'; var perma = '/intel?latE6='+portal.options.details.locationE6.latE6+'&lngE6='+portal.options.details.locationE6.lngE6+'&z=17&pguid='+guid; var a = $('',{ "class": 'help', text: portal.options.details.portalV2.descriptiveText.TITLE, title: portal.options.details.portalV2.descriptiveText.ADDRESS, href: perma, - onClick: jsDoubleClick + onClick: zoomPortal })[0].outerHTML; s += a + "\n"; } @@ -63,18 +67,19 @@ window.plugin.playersResonators.findReso = function(playername) { }); }); if (s) { - fakeLinkPlayer = '' + effectiveName + '' + // Showing the playername as a "fake" link to avoid the auto-mouseover effect on the first portal + fakeLinkPlayer = '' + effectiveNick + '' s = fakeLinkPlayer + " has resonators on these portals:\n\n" + s; } else { - fakeLinkPlayer = '' + playername + '' s = fakeLinkPlayer + " has no resonators in this range\n"; } alert(s); } var setup = function() { - var content = '
' + ''; + var content = ''; $('#sidebar').append(content); + $('#toolbox').append(' Player\'s Reso'); $("#playerReso").keypress(function(e) { if((e.keyCode ? e.keyCode : e.which) !== 13) return; var data = $(this).val(); From 8eb65c57641df56f76e705a14d13cd78c4bea2b6 Mon Sep 17 00:00:00 2001 From: Riccardo Binetti Date: Tue, 7 May 2013 01:18:08 +0200 Subject: [PATCH 08/26] Fixed wrong name if no reso found --- plugins/players-resonators.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/players-resonators.user.js b/plugins/players-resonators.user.js index 7e6186cd..28c03791 100644 --- a/plugins/players-resonators.user.js +++ b/plugins/players-resonators.user.js @@ -71,7 +71,7 @@ window.plugin.playersResonators.findReso = function(playername) { fakeLinkPlayer = '' + effectiveNick + '' s = fakeLinkPlayer + " has resonators on these portals:\n\n" + s; } else { - s = fakeLinkPlayer + " has no resonators in this range\n"; + s = playername + " has no resonators in this range\n"; } alert(s); } From d97b78fafb4899c62b445c158eb58508ce52a1c4 Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Tue, 7 May 2013 12:34:23 +1000 Subject: [PATCH 09/26] Removed various drawables and fixed chat scroll bug. --- .../drawable-hdpi/device_access_location_off.png | Bin 1791 -> 0 bytes .../device_access_location_searching.png | Bin 1627 -> 0 bytes .../drawable-mdpi/device_access_location_off.png | Bin 1383 -> 0 bytes .../device_access_location_searching.png | Bin 1312 -> 0 bytes mobile/res/drawable-xhdpi/action_help.png | Bin 1793 -> 0 bytes .../device_access_location_off.png | Bin 2220 -> 0 bytes .../device_access_location_searching.png | Bin 1977 -> 0 bytes mobile/smartphone.css | 1 + 8 files changed, 1 insertion(+) delete mode 100644 mobile/res/drawable-hdpi/device_access_location_off.png delete mode 100644 mobile/res/drawable-hdpi/device_access_location_searching.png delete mode 100644 mobile/res/drawable-mdpi/device_access_location_off.png delete mode 100644 mobile/res/drawable-mdpi/device_access_location_searching.png delete mode 100644 mobile/res/drawable-xhdpi/action_help.png delete mode 100644 mobile/res/drawable-xhdpi/device_access_location_off.png delete mode 100644 mobile/res/drawable-xhdpi/device_access_location_searching.png diff --git a/mobile/res/drawable-hdpi/device_access_location_off.png b/mobile/res/drawable-hdpi/device_access_location_off.png deleted file mode 100644 index cff8a1817ce8963d15df36a11340daeaeda00dd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1791 zcmaJ?c~BEq91fRYs;Cu|qm?BfUL?C410j(JxsVhB8W3SbhL9{K!tTaoApr&rs8FAVKA85g8&^rmeq@ z_){oWp6bYGB3c^CRp2N?ZpJVSsD@-yDESPJ+XxTFAz5OTnPCSy9Tfk*qG%O&?_Ge`qIK!_wB z?Vq5crON>!u0;SJ21HjtzA)g+V!$kj!{T@YObCWRmT^dHn4RlQBF|Hs&bPBCn zL#S~KFe}Ov@DzeaBP0DM1yu7%7Snw!6In3OAlHB}12U&H4wOp&ABv)%&^khfe2(`& zg>{i>8U&OfIy^ zf37?lFmm3t*rdy4MR49&U<$I^8mjk>^aE4b`V#);Q4!qPwT?F4;~-TYUcH}sd@bqT()Fev@l zpL=BD)tmZU2WJ%^zU!;cNeX%{?aT@7Y#d2^*ic)TbK}{mCtasP`qCy_TU(~q7*FP! z-fc=MvFQMI!g;`F1mcw<}ttpk+Cji^1 zwr=kZ*+Tb(QI?a%GUxa7_-$_+i+9rot>dy+PqYRCGE@0Z2I=F~?@R{xOV zoR?owyv1vvJC?%Khrm;O*@4DO<0$49$7osZZN6TD=fu8?tw1-6Y~l-FMcV zUSlz%NsxE;{9e6nYw~D&ckWPYsvVCK{=62_SUi}NQBG942TA z->UbFZ*GgJPQ!e$uWQTzl z^#z5c$5WO~i(k?w@Hi*iI{o?S<_r0#DYNY7Yh`0oB0A@=8E?;|N2$Af7Yz($I=nkL zWBl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi;)!fzDz|h>($-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OVZUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1? zG!Lpb1-DzwaO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z);J~H$iTpK*3-o? zq~g|_nf4jMfg^Po#?G0ewT*3&%f{rT-p-=AJjd?0>I(++2)sCjf%j#ozK6YtNcE%deVvz zt+*-f?cyH=xjR^MN*VV#-`;)HG*GPkNYxdk4Z$&j;;!i;${*Zo#P_?XcD+BqZ>P=C z>BI7^OZm}?8*00bhJFlva&*(#qe9cXI43_&KeEEY?O(pQYTbJ^rPYs`PjpQ;-M>BL zfM#Lv9ETHK5kjrAuDldvKgzIsa$!x}9nt(~%?E8KI%F;WIPFo2^(tMo#ea_2bHNai z??-Yn_G?W_}n~?IW}q1oO&&}$QuWHded*rN#RXrziF`BxAE7pYcmArZ?t_A zbUMF^(aAG4N;b6#GgcoF=sRy|aq#&D+apoeSY@8I#4_DpoOOLo;R!e0l)nEd zzN(cDOHTaX#LSqQGyD4ki=;_5Pp-OY?w;7dS=d>m;8-{7QpMRs*4@WA?ez2>@6mLY z>wdX_X_CuApWOGK-UaAO?eE-o{`&#VFAg>bE0Z5I?NF_fwYqoOdH4BSau@kk6Q0iB zQ>|YY)bf+>9<%)IWpDm{+CP1P!tM*|amyGt*sdx&DHFC#HHw} zs~1j-P3l>__-ytIiEW$pygRSoS;BTREw`65=iKHtW5(Aag|71=ZZ&<*%n@}qJ+SRj z>#}=OKW%%#Z?J#9oBk-4JE1@^!H=pEUc-M;OVTkqNs-}o)v z!FzP2qkE&e)neBLE7^$bEX&h1lgiI9oVWRHh4HS-wjq<`UW&|ow`Uu|1Gx@69A^FEhT?M6BsOS&Dc=5=|~u;xc7ARb6Mw<&;$T}2W|EM diff --git a/mobile/res/drawable-mdpi/device_access_location_off.png b/mobile/res/drawable-mdpi/device_access_location_off.png deleted file mode 100644 index 56eae120b2a91a8dd0940e5848a6e615782d2b0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1383 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi;)!fzDz`)Ja$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yuGi22r(RHE$SnZc?2=lPS(cjOR+OKs0QR(1CN{UY zxVab@Iy>Vu52`l>r&|nMaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zK4mX9 zoq>Vzrl*TzNX4x;)9rPb17(i?*68MXwke`zf{E#iR;jG3y%!e3%L6ZNT$xS zzQBL&purAC@du6BdllH&4yxW@DEA6m%FK1-py`Q5Lj|1@mg_}VdRN~Fv)se~rVZZb&~Y<@GRdU77u#GXIFlix6GX%_w9Ide{ap>9G^Qq#-T ztF1P$v_&KwdT`MxeR{k8=SaDI=?m4re>3Qtbx`!iw&Df6B@Oxgv!?!0T)*XOptry& z9!o~a?yV*oO{_sn&a9cfu(#`ZNH^o$t3JjjpC6d@a_jb>Z)si3XSXS7EnAp2p|`1W z{iT4d0;P?b_FNa|Pk$6O`=a6Vsk1IxlunsFQT%Ph2HAd#%;S0bDv77&y((1PxNFke z4H;*fg7&^|QGLg6WqYSPy0B66c}2&u`os0_53FZkX87PBuQ1Q=l_;p_^K|udS?83{ F1OP0q^@;!h diff --git a/mobile/res/drawable-mdpi/device_access_location_searching.png b/mobile/res/drawable-mdpi/device_access_location_searching.png deleted file mode 100644 index 4f4fb081e0986f4670deeebb6fb939043423499a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi;&A`CY$jQvq$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1POzUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1= zG!Lpb1-DyFaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zb_(je$-uxk$HGDa14WKkuk;i?qnfD`bg|Vjeo@=GU4~L?wniVlb<#dz(=CtPk=cS5xtd*g z&Il!H%{%YCZxY|t^82+{&0l!hojhIrd|q``ea-omA8YNWF6mt=v@MXSQ20i3)*ObH zGdOh)dk1M7Fv@>enyzjvxPD=yQO*ISGfn~zB=a8foco&hfb&VBeAojvy$6o>pDpC@ zF5qM@NEbErIM5^%<1Bmaz?Tn(zrv>HpH$m+_6hfeCgl?mKhmGvzI0>Xzr<*PJCl-U zwCPrCzO#;J&WpC3*Bh*I9VOo_%-9)vw?ZoV-E;9WUhNCl8oRT6d)FSh*tmyjXH>AE zkBI7>)+QD;?tVidj$`Lu%Jd!dusMvLYTnShO4bthIQ?Y+ImVXgO9sR`YNm3~^0 zrIyV5uAJ$f*dV^FBhkBN)#nG6esKXj&!avlyBKen*&^_Fr--|*8?WvEu%2sAlVf|> z0{ePTeO%>j*>`(F%GY<961<-4r@aYSw3T^o;`bKWUjN;Gb{*?>tkr&=llJBQhx_Uu bbPq7pnR#F1tm66uDziLY{an^LB{Ts5)}Gl{ diff --git a/mobile/res/drawable-xhdpi/action_help.png b/mobile/res/drawable-xhdpi/action_help.png deleted file mode 100644 index 243704869415096feda6d981bf0588d5e2aaf807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1793 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

ba? znxypT@A3XmVbZV`M@4#+#7YSx-ME4%pDP?z5hy}ogaN~fC#slUgi#n-gyDcHGeHOf zI>czU`Yf*)Ivt#9B`L&eL{rsr9<3oXn@zAvlcZ6J!37CQaS8}(K&b?jY9vaPA|(M# zk|@Cmt{O9zT2L!B!8QHPl}yU@4TA-zJ*!c|yaqL;5SRscl{9RgJQi?Ly>YH-@>rlr zxgt6kk*~G?)#?coJwLwV>%pZjuSXxX((_KxgWdIV*vVk9<5JZMgT3cou1;&nnAx!a zi?+1BU3qR=JrtO5l;760JMRe#3Eu;7Hhko)KBU>)+g_AmV2>;gIu_f*7fO1jRP5MO zbI7zl_C<9--1+X30(jH2d3_t3BfLA;c}M#z>g?xw$p^M?eaoGd+Smr|sKTxq)!vDmHsd)b^Jdzj>efxIf$Vr?=i~V&J68TOb;KzG z27(9u5Gb7MQ6#$>ZfoDZ@Iy3bH^-=t$XB|Z`<+vOOTS);bHA@#*B;cm9seY~t^xg( z|HL?>5+6Rg&s%jgp)d8eaz*441OkbY?mW4bk)^YcK< z`J86!&aaPD6wWd(k;g=+S}FBB+?BrhQr*C*TNjU9uLT!3?S0F;MeA&j8qf@k9OSa* za6GKgbrFBNyC*l!&v7+rRm61r4bGW4m*dKUv!~rDb_VuvJc3=1Bkm9V;p=yXLK-_q z^q!`w@}R4$S0pBj1i{u^uI5)I4a$jXRwC{KZU%JbGNWAOXoT@++=7`BL0FpIi z_k>bY5mm!<=J!C`nCp7F;Ken0U~YX#dbRiQg#rW1Z|}7$iScdv?b}mbr~Jos9p2A? zALlM9Ihql9pkMDH*iYX)Tc2WU>d3Dt&vQm^jm__dwi>?wZhlE`*fRc$_4B?f{0IB* ztRQ3f^uWmRl!5S2d&eP?NR-MQHho2p`0Hg9|H&h*Z=eq=w{0|YA;w*0kg zVAIv=(L6;~T4&JA@SIw>iv2IeLBH^gRFJsFA#;(VO{0))V?Ed0PnJ+tv}qw;lJM zsoaCL!I}E6E}kgAH0-8wjXSwx53#Ic7nknPk@YdB+0938M |7QRm!woyI*hWtM8 z&if2K@Fw5U`9&EJx#VyRG+%!^xvHU&TxNPX>jzJq&>bKQw)zJSO({JyV`s{&u9&su z+qyo1z1-)Yc7N!$u#=U{&r5$AJQQ#javyy3&F!q9H9XGC;}zg+F7C8{c|p#Ujj!eL bXW5|)vLfl@9nt$uzMpBTCQaR<%-`@IemDQ2 diff --git a/mobile/smartphone.css b/mobile/smartphone.css index a1f89fdd..28fc34aa 100644 --- a/mobile/smartphone.css +++ b/mobile/smartphone.css @@ -53,6 +53,7 @@ body { #chat { left:0; right:0; + top: 1px !important; bottom:30px; width: auto; } From 0f1c22cdc1cec4b5065e465a6bc01cc109849656 Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Tue, 7 May 2013 04:53:27 +0100 Subject: [PATCH 10/26] remove range circles when closing portal details --- code/portal_detail_display.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/code/portal_detail_display.js b/code/portal_detail_display.js index 205b80c5..0f02d879 100644 --- a/code/portal_detail_display.js +++ b/code/portal_detail_display.js @@ -95,9 +95,16 @@ window.setPortalIndicators = function(d) { ).addTo(map); else portalAccessIndicator.setLatLng(coord); - } +window.clearPortalIndicators = function() { + if(portalRangeIndicator) map.removeLayer(portalRangeIndicator); + portalRangeIndicator = null; + if(portalAccessIndicator) map.removeLayer(portalAccessIndicator); + portalAccessIndicator = null; +} + + // highlights portal with given GUID. Automatically clears highlights // on old selection. Returns false if the selected portal changed. // Returns true if it’s still the same portal that just needs an @@ -123,4 +130,5 @@ window.unselectOldPortal = function() { if(oldPortal) portalResetColor(oldPortal); selectedPortal = null; $('#portaldetails').html(''); + clearPortalIndicators(); } From 0108d1b49c44d05a63b6ae759b32e0d7bfd45136 Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Tue, 7 May 2013 14:09:30 +1000 Subject: [PATCH 11/26] Added debug menu option and started tidying up 'window' handling --- code/chat.js | 7 ++-- code/debugging.js | 17 +++++++--- code/smartphone.js | 8 ----- code/window_management.js | 30 ++++++++++++++++++ .../alerts_and_states_warning.png | Bin 0 -> 1618 bytes .../alerts_and_states_warning.png | Bin 0 -> 1362 bytes mobile/res/drawable-xhdpi/action_settings.png | Bin 0 -> 1641 bytes .../alerts_and_states_warning.png | Bin 0 -> 1813 bytes mobile/res/menu/main.xml | 7 ++-- mobile/res/values/strings.xml | 2 +- .../com/cradle/iitc_mobile/IITC_Mobile.java | 21 ++++++------ 11 files changed, 62 insertions(+), 30 deletions(-) create mode 100644 code/window_management.js create mode 100644 mobile/res/drawable-hdpi/alerts_and_states_warning.png create mode 100644 mobile/res/drawable-mdpi/alerts_and_states_warning.png create mode 100644 mobile/res/drawable-xhdpi/action_settings.png create mode 100644 mobile/res/drawable-xhdpi/alerts_and_states_warning.png diff --git a/code/chat.js b/code/chat.js index cf10a99d..7f0a2c64 100644 --- a/code/chat.js +++ b/code/chat.js @@ -522,10 +522,11 @@ window.chat.chooseAnchor = function(t) { chat.needMoreMessages(); } -window.chat.choose = function(name) { - $('#chat, #chatinput, #updatestatus').show(); +window.chat.show = function(name) { + if (!window.isSmartphone) $('#updatestatus').show(); + $('#chat, #chatinput').show(); $('#map').css('visibility', 'hidden'); - + var t = $(''+name+''); window.chat.chooseAnchor(t); } diff --git a/code/debugging.js b/code/debugging.js index 8c40a155..49091d72 100644 --- a/code/debugging.js +++ b/code/debugging.js @@ -48,16 +48,23 @@ window.debug.console = function() { $('#debugconsole').text(); } -window.debug.console.create = function() { - if($('#debugconsole').length) return; - $('#chatcontrols').append('debug'); - $('#chatcontrols a:last').click(function() { +window.debug.console.show = function() { + $('#scrollwrapper, #updatestatus').hide(); + // not displaying the map causes bugs in Leaflet + $('#map').css('visibility', 'hidden'); + $('#chat, #chatinput').show(); + window.debug.console.create(); $('#chatinput mark').css('cssText', 'color: #bbb !important').text('debug:'); $('#chat > div').hide(); $('#debugconsole').show(); $('#chatcontrols .active').removeClass('active'); $(this).addClass('active'); - }); +} + +window.debug.console.create = function() { + if($('#debugconsole').length) return; + $('#chatcontrols').append('debug'); + $('#chatcontrols a:last').click(window.debug.console.show); $('#chat').append('

'); } diff --git a/code/smartphone.js b/code/smartphone.js index 5a1700ed..c6693c1c 100644 --- a/code/smartphone.js +++ b/code/smartphone.js @@ -34,14 +34,6 @@ window.runOnSmartphonesBeforeBoot = function() { + ''); } - // this also matches the expand button, but it is hidden via CSS - $('#chatcontrols a').click(function() { - $('#scrollwrapper, #updatestatus').hide(); - // not displaying the map causes bugs in Leaflet - $('#map').css('visibility', 'hidden'); - $('#chat, #chatinput').show(); - }); - window.smartphone.mapButton = $('map').click(function() { $('#chat, #chatinput, #scrollwrapper').hide(); $('#map').css('visibility', 'visible'); diff --git a/code/window_management.js b/code/window_management.js new file mode 100644 index 00000000..2927aa4f --- /dev/null +++ b/code/window_management.js @@ -0,0 +1,30 @@ +// created to start cleaning up "window" interaction +// +window.show = function(id) { + switch(id) { + case 'full': + window.chat.show('full'); + break; + case 'compact': + window.chat.show('compact'); + break; + case 'public': + window.chat.show('public'); + break; + case 'faction': + window.chat.show('faction'); + break; + case 'debug': + window.debug.console.show(); + break; + case 'map': + window.smartphone.mapButton.click(); + break; + case 'info': + window.smartphone.sideButton.click(); + break; + default: + window.smartphone.mapButton.Click(); + break; + } +} diff --git a/mobile/res/drawable-hdpi/alerts_and_states_warning.png b/mobile/res/drawable-hdpi/alerts_and_states_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..1fefdd8bd8a8c674bd81ffb2bca82ae9acb6673b GIT binary patch literal 1618 zcmaJYsQ9`mnfX%L(4Fsk?B;}P# zt5fR~wD_W+wU(;j+mWQ>XjPyp>QsCXTOFqrB~u;IVznCt><{hE+`adHbI$o5_c+p1 z7fs^L-~j+IDLF}#!S1Mc1#sDa7Ux+lyG>`b+00ThpDEMRIG{9=c{rF%=nL=+TyHF2 za~6*WfC;lrnb}OXZi(DL60qKjfo%lEvH>7|fsN7|ig5}1(YSx zp*l*97n+hPXnbi!YNny0*dQ}P3lhM1o17IOa7GW>h!V3!Zc{)bx^njH4I>aZ0%3|3 z(5s@db?Km*q;XIJqp=25ih)uwjEPa1ST+w7q8N%`LIjPA#Zb8DOp+`an__w)$&i*pk^JXpB*2lT<)$~*A{J>-q3W%Aqg>+~YZ>9H-^xYU zVi51s{^zO3Lacwh$8qDbmvQUkX4daCYwS%mU$p`N=Tx#rnQ7}AXhmboz-Rza6~1PJ8slEs#Apm}j^1 zpqAq~y{8J?vZ{BtENR_X!V`HuEh!Za#)}4rd$y&7)%2`_Lj+FVKF(f1uzfFQB~|$g zqKpm|s1~Mn*@ui$WPW+KQ|XC_xIH-Np8AyNOJAM(u-!LNxuyQEn_KHD4eq&y+}goC z^_5!B(E$+^8MH_~=qYb_xv7HN>YCt5yW@Y29|jzD-WT%1I0CotKM8F?_B3});im3t z*zTz6ng5)$TNg_v)Vf4eoh!zE2)=U7IIqtAVj|zU{y@Ny?#aY~N1aZ=+`uOPs86zX zxrgz0C|-R225yA@_PwuLD!#8@KRG8W>?Akgv5>3TrQlNF!TTx0J9q!Ew%=CLT)^3! zn<8rNcuKTqasG^Op>ysD9z;1pr+KOa8vM_=p1^&-=7&Gh1{SUr)bN}6*NcMZ<~GXu z<3MM@$LF;Z8+=8%f|gYm?#kLq_IIB>;dkW5hsStLdzkWvbEJKx=D=&Rwyh7Ux_Zxq zJZtWly3KfK;#A)$^hc}DtDQdZ%SqK;8#_W%VkG-q#MxQB9J4)qAZhdcfXaTTefF(L z+`l)7cYD24y^(WT_P3hXc;@c@H4gvqTK~rAcynvckB>zMKU@AZFQ!g$Y(r6B(DdlY zOFjEm40qgZJg3U*q@};_3_1OcquscUPo&Cty)9o#hoc^Dzw~VL9k^}h%SF9KpC9Uf z?`Y17psvc}D+_g`{PFOvX=h&Gl;szX@@JyoY(ha z7mPha%Mrnjs?_j=;R}}?mDZUjhl;=0>d3%nUA3-Ey76t3kD;ctNv;j@WO=yHV}HwU n^W^zu`z%`IzHgoi(2{R{xf+Eh)OD%bumGAd+p literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-mdpi/alerts_and_states_warning.png b/mobile/res/drawable-mdpi/alerts_and_states_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..a39f97d4ae7cb75ea89dd4f0b747cf285174bde1 GIT binary patch literal 1362 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViq$=TJ&!pY3k$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1POzUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1= zG!Lpb1-DyFaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z{{3gSF#`kR5l9ku9 zT7rXLUX~1=zr8`pg4I@jqwO)V=c)<^?X+vW^o=EMKe%y$>72vKPq#Q{Tg3RspB6ga zCNzQddP2^}?z8IbWuAR@n|m$IUhi66Su^Qwv-F3z1rt^-J6SS&M(78gd1-2m2#f0elF{r5}E+$0qRl! literal 0 HcmV?d00001 diff --git a/mobile/res/drawable-xhdpi/action_settings.png b/mobile/res/drawable-xhdpi/action_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..09b01483454788c435acf715c57d92fc0ead0a7c GIT binary patch literal 1641 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 + android:title="@string/menu_debug"> diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index 8fd875cd..3e4f40a2 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -53,5 +53,5 @@ Public Faction Info - Exit + Debug \ No newline at end of file diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index f34e1fab..a08acf7b 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -239,11 +239,11 @@ public class IITC_Mobile extends Activity { // Handle item selection switch (item.getItemId()) { case android.R.id.home: - iitc_view.loadUrl("javascript: window.smartphone.mapButton.click();"); + iitc_view.loadUrl("javascript: window.show('map');"); actionBar.setTitle(getString(R.string.menu_map)); return true; case R.id.menu_map: - iitc_view.loadUrl("javascript: window.smartphone.mapButton.click();"); + iitc_view.loadUrl("javascript: window.show('map');"); actionBar.setTitle(getString(R.string.menu_map)); return true; case R.id.reload_button: @@ -281,7 +281,7 @@ public class IITC_Mobile extends Activity { return true; // get the users current location and focus it on map case R.id.locate: - iitc_view.loadUrl("javascript: window.smartphone.mapButton.click();"); + iitc_view.loadUrl("javascript: window.show('map');"); iitc_view.loadUrl("javascript: window.map.locate({setView : true, maxZoom: 13});"); actionBar.setTitle(getString(R.string.menu_map)); return true; @@ -292,27 +292,28 @@ public class IITC_Mobile extends Activity { startActivity(intent); return true; case R.id.menu_info: - iitc_view.loadUrl("javascript: window.smartphone.sideButton.click();"); + iitc_view.loadUrl("javascript: window.show('info');"); actionBar.setTitle(getString(R.string.menu_info)); return true; case R.id.menu_full: - iitc_view.loadUrl("javascript: window.chat.choose('full');"); + iitc_view.loadUrl("javascript: window.show('full');"); actionBar.setTitle(getString(R.string.menu_full)); return true; case R.id.menu_compact: - iitc_view.loadUrl("javascript: window.chat.choose('compact');"); + iitc_view.loadUrl("javascript: window.show('compact');"); actionBar.setTitle(getString(R.string.menu_compact)); return true; case R.id.menu_public: - iitc_view.loadUrl("javascript: window.chat.choose('public');"); + iitc_view.loadUrl("javascript: window.show('public');"); actionBar.setTitle(getString(R.string.menu_public)); return true; case R.id.menu_faction: - iitc_view.loadUrl("javascript: window.chat.choose('faction');"); + iitc_view.loadUrl("javascript: window.show('faction');"); actionBar.setTitle(getString(R.string.menu_faction)); return true; - case R.id.menu_exit: - super.onBackPressed(); + case R.id.menu_debug: + iitc_view.loadUrl("javascript: window.show('debug')"); + actionBar.setTitle(getString(R.string.menu_debug)); return true; default: return super.onOptionsItemSelected(item); From 1a701e5a325c36f65e0aacc9e25c58758b68848c Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Tue, 7 May 2013 15:21:05 +1000 Subject: [PATCH 12/26] Further bugfixes related to chat/debug. --- code/chat.js | 2 +- code/debugging.js | 2 +- code/smartphone.js | 7 +++---- code/window_management.js | 2 +- mobile/smartphone.css | 9 ++++++++- mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java | 2 +- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/code/chat.js b/code/chat.js index 7f0a2c64..8ce22b2c 100644 --- a/code/chat.js +++ b/code/chat.js @@ -480,7 +480,7 @@ window.chat.chooseAnchor = function(t) { var input = $('#chatinput input'); $('#chatcontrols .active').removeClass('active'); - t.addClass('active'); + $("#chatcontrols a:contains('" + tt + "')").addClass('active'); $('#chat > div').hide(); diff --git a/code/debugging.js b/code/debugging.js index 49091d72..7ddaa5de 100644 --- a/code/debugging.js +++ b/code/debugging.js @@ -58,7 +58,7 @@ window.debug.console.show = function() { $('#chat > div').hide(); $('#debugconsole').show(); $('#chatcontrols .active').removeClass('active'); - $(this).addClass('active'); + $("#chatcontrols a:contains('debug')").addClass('active'); } window.debug.console.create = function() { diff --git a/code/smartphone.js b/code/smartphone.js index c6693c1c..cdbabc4f 100644 --- a/code/smartphone.js +++ b/code/smartphone.js @@ -38,8 +38,8 @@ window.runOnSmartphonesBeforeBoot = function() { $('#chat, #chatinput, #scrollwrapper').hide(); $('#map').css('visibility', 'visible'); $('#updatestatus').show(); - $('.active').removeClass('active'); - $(this).addClass('active'); + $('#chatcontrols a .active').removeClass('active'); + $("#chatcontrols a:contains('map')").addClass('active'); }); window.smartphone.sideButton = $('info').click(function() { @@ -47,7 +47,7 @@ window.runOnSmartphonesBeforeBoot = function() { $('#map').css('visibility', 'hidden'); $('#scrollwrapper').show(); $('.active').removeClass('active'); - $(this).addClass('active'); + $("#chatcontrols a:contains('info')").addClass('active'); }); $('#chatcontrols').append(smartphone.mapButton).append(smartphone.sideButton); @@ -72,7 +72,6 @@ window.runOnSmartphonesAfterBoot = function() { if(!isSmartphone()) return; console.warn('running smartphone post boot stuff'); - //chat.toggle(); smartphone.mapButton.click(); // disable img full view diff --git a/code/window_management.js b/code/window_management.js index 2927aa4f..c210961b 100644 --- a/code/window_management.js +++ b/code/window_management.js @@ -24,7 +24,7 @@ window.show = function(id) { window.smartphone.sideButton.click(); break; default: - window.smartphone.mapButton.Click(); + window.smartphone.mapButton.click(); break; } } diff --git a/mobile/smartphone.css b/mobile/smartphone.css index 28fc34aa..97e70ee6 100644 --- a/mobile/smartphone.css +++ b/mobile/smartphone.css @@ -67,8 +67,15 @@ body { width: 77px; } +#chatcontrols a.active { + border-color: #FFCE00; + border-bottom-width:0px; + font-weight:bold +} - +#chatcontrols a.active + a { + border-left-color: #FFCE00 +} #sidebartoggle { display: none !important; diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index a08acf7b..9db2f61c 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -313,7 +313,7 @@ public class IITC_Mobile extends Activity { return true; case R.id.menu_debug: iitc_view.loadUrl("javascript: window.show('debug')"); - actionBar.setTitle(getString(R.string.menu_debug)); + actionBar.setTitle(getString(R.string.menu_debug)); return true; default: return super.onOptionsItemSelected(item); From 822b7df00ae7a4945a55bdcdefae62afe35cb0bd Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Tue, 7 May 2013 15:40:15 +1000 Subject: [PATCH 13/26] Changed various action items to "ifRoom" so they aren't forced. Will be better on smaller displays. --- mobile/res/menu/main.xml | 74 +++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 42 deletions(-) diff --git a/mobile/res/menu/main.xml b/mobile/res/menu/main.xml index 06d7bdb8..390b957b 100644 --- a/mobile/res/menu/main.xml +++ b/mobile/res/menu/main.xml @@ -4,21 +4,21 @@ android:id="@+id/menu_map" android:icon="@drawable/location_map" android:orderInCategory="20" - android:showAsAction="always" + android:showAsAction="ifRoom" android:title="@string/menu_map"> + + + + - - - - - - - - - - - - - + + + + \ No newline at end of file From 4f2cb4f6bb6e872a1a0a3be06b193344d25e2bc8 Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Tue, 7 May 2013 15:45:41 +1000 Subject: [PATCH 14/26] Removed Setting for Desktop mode. It's not compatible now. If folks really want to they can still use it via a browser. --- mobile/res/values/strings.xml | 2 -- mobile/res/xml/preferences.xml | 5 ----- mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java | 9 ++------- 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index 3e4f40a2..7b991044 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -34,8 +34,6 @@ Misc Plugins Available plugins - Force desktop mode - Nice for tablets, looks awful on smartphones Display user location Show users position on map Force https diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml index c667e8f0..278cb821 100644 --- a/mobile/res/xml/preferences.xml +++ b/mobile/res/xml/preferences.xml @@ -12,11 +12,6 @@ - Date: Tue, 7 May 2013 15:59:26 +1000 Subject: [PATCH 15/26] Hide zoom control on mobile version. --- code/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/boot.js b/code/boot.js index 69f89549..6ec417fb 100644 --- a/code/boot.js +++ b/code/boot.js @@ -156,7 +156,7 @@ window.setupMap = function() { window.map = new L.Map('map', $.extend(getPosition(), - {zoomControl: true} + {zoomControl: !window.isSmartphone()} )); var addLayers = {}; From 084494bec00efce006f586e58a903787dd2c4322 Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Tue, 7 May 2013 17:22:07 +1000 Subject: [PATCH 16/26] Zoom control is now only disabled on multitouch capable devices by default and can be forced on again via a preference. --- code/boot.js | 4 +++- mobile/res/values/strings.xml | 2 ++ mobile/res/xml/preferences.xml | 7 ++++++- mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java | 2 -- .../com/cradle/iitc_mobile/IITC_WebViewClient.java | 11 +++++++++++ 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/code/boot.js b/code/boot.js index 6ec417fb..0539fa42 100644 --- a/code/boot.js +++ b/code/boot.js @@ -3,6 +3,8 @@ // created a basic framework. All of these functions should only ever // be run once. +// Used to disable on multitouch devices +window.showZoom = true; window.setupBackButton = function() { var c = window.isSmartphone() @@ -156,7 +158,7 @@ window.setupMap = function() { window.map = new L.Map('map', $.extend(getPosition(), - {zoomControl: !window.isSmartphone()} + {zoomControl: window.showZoom} )); var addLayers = {}; diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index 7b991044..b8c76f70 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -34,6 +34,8 @@ Misc Plugins Available plugins + Show zoom control + Shows +/- buttons even on multitouch capable devices. Display user location Show users position on map Force https diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml index 278cb821..3e1efe86 100644 --- a/mobile/res/xml/preferences.xml +++ b/mobile/res/xml/preferences.xml @@ -12,12 +12,17 @@ + - + Date: Tue, 7 May 2013 17:33:26 +1000 Subject: [PATCH 17/26] Fix status div showing above chat. --- code/chat.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/chat.js b/code/chat.js index 8ce22b2c..3f0fd91b 100644 --- a/code/chat.js +++ b/code/chat.js @@ -523,7 +523,9 @@ window.chat.chooseAnchor = function(t) { } window.chat.show = function(name) { - if (!window.isSmartphone) $('#updatestatus').show(); + window.isSmartphone + ? $('#updatestatus').hide() + : $('#updatestatus').show(); $('#chat, #chatinput').show(); $('#map').css('visibility', 'hidden'); From 935e9ab68831665713f25cba4fbac6dda399b750 Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Tue, 7 May 2013 18:15:41 +1000 Subject: [PATCH 18/26] Fixed style overriding css to hide chat control tabs. --- code/chat.js | 2 -- mobile/smartphone.css | 2 +- mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java | 3 +-- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/code/chat.js b/code/chat.js index 3f0fd91b..5cd57996 100644 --- a/code/chat.js +++ b/code/chat.js @@ -518,8 +518,6 @@ window.chat.chooseAnchor = function(t) { elm.scrollTop(elm.data('needsScrollTop')); elm.data('needsScrollTop', null); } - - chat.needMoreMessages(); } window.chat.show = function(name) { diff --git a/mobile/smartphone.css b/mobile/smartphone.css index 97e70ee6..a196e850 100644 --- a/mobile/smartphone.css +++ b/mobile/smartphone.css @@ -30,7 +30,7 @@ body { #chatcontrols { height: 38px; width: 100%; - display: hidden; + display: none !important; } /* hide shrink button */ diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index 9aaabd2e..be3b54f7 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -32,7 +32,6 @@ public class IITC_Mobile extends Activity { private IITC_WebView iitc_view; private boolean back_button_pressed = false; - private boolean desktop = false; private OnSharedPreferenceChangeListener listener; private String intel_url = "https://www.ingress.com/intel"; private boolean user_loc = false; @@ -45,7 +44,7 @@ public class IITC_Mobile extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + // TODO build an async task for url.openStream() in IITC_WebViewClient StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); From 4906b57f158f1501b54629ebb0112d47218bf347 Mon Sep 17 00:00:00 2001 From: Jon Benson Date: Tue, 7 May 2013 19:05:50 +1000 Subject: [PATCH 19/26] Hopefully fix whitespace issues. --- code/chat.js | 6 +-- code/debugging.js | 2 +- code/window_management.js | 52 +++++++++---------- mobile/res/values/strings.xml | 2 +- mobile/res/xml/preferences.xml | 8 +-- .../com/cradle/iitc_mobile/IITC_Mobile.java | 50 +++++++++--------- .../iitc_mobile/IITC_WebViewClient.java | 8 +-- 7 files changed, 64 insertions(+), 64 deletions(-) diff --git a/code/chat.js b/code/chat.js index 5cd57996..bfc53859 100644 --- a/code/chat.js +++ b/code/chat.js @@ -521,9 +521,9 @@ window.chat.chooseAnchor = function(t) { } window.chat.show = function(name) { - window.isSmartphone - ? $('#updatestatus').hide() - : $('#updatestatus').show(); + window.isSmartphone + ? $('#updatestatus').hide() + : $('#updatestatus').show(); $('#chat, #chatinput').show(); $('#map').css('visibility', 'hidden'); diff --git a/code/debugging.js b/code/debugging.js index 7ddaa5de..e1d92d56 100644 --- a/code/debugging.js +++ b/code/debugging.js @@ -53,7 +53,7 @@ window.debug.console.show = function() { // not displaying the map causes bugs in Leaflet $('#map').css('visibility', 'hidden'); $('#chat, #chatinput').show(); - window.debug.console.create(); + window.debug.console.create(); $('#chatinput mark').css('cssText', 'color: #bbb !important').text('debug:'); $('#chat > div').hide(); $('#debugconsole').show(); diff --git a/code/window_management.js b/code/window_management.js index c210961b..8da89133 100644 --- a/code/window_management.js +++ b/code/window_management.js @@ -1,30 +1,30 @@ // created to start cleaning up "window" interaction // window.show = function(id) { - switch(id) { - case 'full': - window.chat.show('full'); - break; - case 'compact': - window.chat.show('compact'); - break; - case 'public': - window.chat.show('public'); - break; - case 'faction': - window.chat.show('faction'); - break; - case 'debug': - window.debug.console.show(); - break; - case 'map': - window.smartphone.mapButton.click(); - break; - case 'info': - window.smartphone.sideButton.click(); - break; - default: - window.smartphone.mapButton.click(); - break; - } + switch(id) { + case 'full': + window.chat.show('full'); + break; + case 'compact': + window.chat.show('compact'); + break; + case 'public': + window.chat.show('public'); + break; + case 'faction': + window.chat.show('faction'); + break; + case 'debug': + window.debug.console.show(); + break; + case 'map': + window.smartphone.mapButton.click(); + break; + case 'info': + window.smartphone.sideButton.click(); + break; + default: + window.smartphone.mapButton.click(); + break; + } } diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index b8c76f70..beaddd48 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -45,7 +45,7 @@ If enabled, all IITC sources will be loaded from external storage of the Android device. Please copy all sources from $IITC_folder/build/mobile/ to /sdcard/IITC_Mobile/dev/. IITC source - + Chat Map Full diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml index 3e1efe86..5cd6e03d 100644 --- a/mobile/res/xml/preferences.xml +++ b/mobile/res/xml/preferences.xml @@ -13,16 +13,16 @@ android:key="pref_about_cat" android:title="@string/pref_ui_cat"> - + Date: Tue, 7 May 2013 19:36:02 +1000 Subject: [PATCH 20/26] Formatted files via Eclipse to hopefully have correct spacing/ident. --- .../IITC_AboutDialogPreference.java | 26 +- .../cradle/iitc_mobile/IITC_JSInterface.java | 11 +- .../com/cradle/iitc_mobile/IITC_Mobile.java | 251 ++++++++++-------- .../com/cradle/iitc_mobile/IITC_Settings.java | 23 +- .../iitc_mobile/IITC_SettingsFragment.java | 33 ++- .../com/cradle/iitc_mobile/IITC_WebView.java | 21 +- .../iitc_mobile/IITC_WebViewClient.java | 126 +++++---- 7 files changed, 281 insertions(+), 210 deletions(-) diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_AboutDialogPreference.java b/mobile/src/com/cradle/iitc_mobile/IITC_AboutDialogPreference.java index 23d98de1..9e33ed50 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_AboutDialogPreference.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_AboutDialogPreference.java @@ -10,7 +10,7 @@ import android.text.method.LinkMovementMethod; import android.util.AttributeSet; import android.widget.TextView; -public class IITC_AboutDialogPreference extends DialogPreference{ +public class IITC_AboutDialogPreference extends DialogPreference { private Context context; @@ -20,11 +20,10 @@ public class IITC_AboutDialogPreference extends DialogPreference{ } /* - * start a little about-dialog - * srsly...I found no better way for clickable links in a TextView then - * using Html.fromHtml...Linkify is just broken and does not understand - * html href tags...so let's tag the @string/about_msg with CDATA and - * use Html.fromHtml(...) for clickable hrefs with tags. + * start a little about-dialog srsly...I found no better way for clickable + * links in a TextView then using Html.fromHtml...Linkify is just broken and + * does not understand html href tags...so let's tag the @string/about_msg + * with CDATA and use Html.fromHtml(...) for clickable hrefs with tags. */ @Override protected void onPrepareDialogBuilder(Builder builder) { @@ -32,14 +31,13 @@ public class IITC_AboutDialogPreference extends DialogPreference{ String about_msg = context.getText(R.string.pref_about_msg).toString(); message.setText(Html.fromHtml(about_msg)); message.setMovementMethod(LinkMovementMethod.getInstance()); - builder.setView(message) - .setTitle(R.string.about) - .setIcon(android.R.drawable.ic_dialog_info) - .setNeutralButton(R.string.close, new OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); + builder.setView(message).setTitle(R.string.about) + .setIcon(android.R.drawable.ic_dialog_info) + .setNeutralButton(R.string.close, new OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); super.onPrepareDialogBuilder(builder); } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java b/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java index 782ffd74..4f7510ef 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java @@ -21,7 +21,8 @@ public class IITC_JSInterface { // send geo intent for navigation apps like gmaps or waze etc... @JavascriptInterface public void intentPosLink(String lat, String lng, String portal_name) { - String uri = "geo:" + lat + "," + lng + "?q=" + lat + "," + lng + portal_name; + String uri = "geo:" + lat + "," + lng + "?q=" + lat + "," + lng + + portal_name; Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri)); context.startActivity(intent); @@ -30,9 +31,11 @@ public class IITC_JSInterface { // copy link to specific portal to android clipboard @JavascriptInterface public void copy(String s) { - ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + ClipboardManager clipboard = (ClipboardManager) context + .getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("Copied Text ", s); - clipboard.setPrimaryClip(clip); - Toast.makeText(context, "copied to clipboard", Toast.LENGTH_SHORT).show(); + clipboard.setPrimaryClip(clip); + Toast.makeText(context, "copied to clipboard", Toast.LENGTH_SHORT) + .show(); } } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index df44503a..afde5558 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -46,70 +46,87 @@ public class IITC_Mobile extends Activity { super.onCreate(savedInstanceState); // TODO build an async task for url.openStream() in IITC_WebViewClient - StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); + StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() + .permitAll().build(); StrictMode.setThreadPolicy(policy); setContentView(R.layout.activity_main); iitc_view = (IITC_WebView) findViewById(R.id.iitc_webview); actionBar = this.getActionBar(); - actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_USE_LOGO | ActionBar.DISPLAY_SHOW_TITLE); + actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME + | ActionBar.DISPLAY_USE_LOGO | ActionBar.DISPLAY_SHOW_TITLE); actionBar.setTitle(getString(R.string.menu_map)); actionBar.setHomeButtonEnabled(true); - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); + SharedPreferences sharedPref = PreferenceManager + .getDefaultSharedPreferences(this); listener = new OnSharedPreferenceChangeListener() { @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + public void onSharedPreferenceChanged( + SharedPreferences sharedPreferences, String key) { if (key.equals("pref_user_loc")) - user_loc = sharedPreferences.getBoolean("pref_user_loc", false); + user_loc = sharedPreferences.getBoolean("pref_user_loc", + false); IITC_Mobile.this.loadUrl(intel_url); } }; sharedPref.registerOnSharedPreferenceChangeListener(listener); - // we need this one to prevent location updates to javascript when keyboard is open + // we need this one to prevent location updates to javascript when + // keyboard is open // it closes on updates - iitc_view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - Rect r = new Rect(); - //r will be populated with the coordinates of your view that area still visible. - iitc_view.getWindowVisibleDisplayFrame(r); + iitc_view.getViewTreeObserver().addOnGlobalLayoutListener( + new OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + Rect r = new Rect(); + // r will be populated with the coordinates of your view + // that area still visible. + iitc_view.getWindowVisibleDisplayFrame(r); - int screenHeight = iitc_view.getRootView().getHeight(); - int heightDiff = screenHeight - (r.bottom - r.top); - boolean visible = heightDiff > screenHeight / 3; - if (visible == true) { - Log.d("iitcm", "Open Keyboard..."); - IITC_Mobile.this.keyboad_open = true; - } else { - Log.d("iitcm", "Close Keyboard..."); - IITC_Mobile.this.keyboad_open = false; - } - } - }); + int screenHeight = iitc_view.getRootView().getHeight(); + int heightDiff = screenHeight - (r.bottom - r.top); + boolean visible = heightDiff > screenHeight / 3; + if (visible == true) { + Log.d("iitcm", "Open Keyboard..."); + IITC_Mobile.this.keyboad_open = true; + } else { + Log.d("iitcm", "Close Keyboard..."); + IITC_Mobile.this.keyboad_open = false; + } + } + }); // Acquire a reference to the system Location Manager - loc_mngr = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); + loc_mngr = (LocationManager) this + .getSystemService(Context.LOCATION_SERVICE); // Define a listener that responds to location updates loc_listener = new LocationListener() { public void onLocationChanged(Location location) { - // Called when a new location is found by the network location provider. - drawMarker(location); + // Called when a new location is found by the network location + // provider. + drawMarker(location); } - public void onStatusChanged(String provider, int status, Bundle extras) {} + public void onStatusChanged(String provider, int status, + Bundle extras) { + } - public void onProviderEnabled(String provider) {} + public void onProviderEnabled(String provider) { + } - public void onProviderDisabled(String provider) {} - }; + public void onProviderDisabled(String provider) { + } + }; user_loc = sharedPref.getBoolean("pref_user_loc", false); if (user_loc == true) { - // Register the listener with the Location Manager to receive location updates - loc_mngr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, loc_listener); - loc_mngr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, loc_listener); + // Register the listener with the Location Manager to receive + // location updates + loc_mngr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, + 0, 0, loc_listener); + loc_mngr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, + loc_listener); } // load new iitc web view with ingress intel page @@ -125,8 +142,7 @@ public class IITC_Mobile extends Activity { Log.d("iitcm", "loading url..."); this.loadUrl(url); } - } - else { + } else { this.loadUrl(intel_url); } } @@ -142,9 +158,12 @@ public class IITC_Mobile extends Activity { iitc_view.updateCaching(); if (user_loc == true) { - // Register the listener with the Location Manager to receive location updates - loc_mngr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, loc_listener); - loc_mngr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, loc_listener); + // Register the listener with the Location Manager to receive + // location updates + loc_mngr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, + 0, 0, loc_listener); + loc_mngr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, + loc_listener); } } @@ -152,25 +171,32 @@ public class IITC_Mobile extends Activity { protected void onStop() { ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); + NetworkInfo mobile = conMan + .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI); // check if Mobile or Wifi module is available..then handle states - // TODO: theory...we do not have to check for a Wifi module...every android device should have one + // TODO: theory...we do not have to check for a Wifi module...every + // android device should have one if (mobile != null) { Log.d("iitcm", "mobile internet module detected...check states"); - if (mobile.getState() == NetworkInfo.State.CONNECTED || mobile.getState() == NetworkInfo.State.CONNECTING) { - Log.d("iitcm", "connected to mobile net...abort all running requests"); + if (mobile.getState() == NetworkInfo.State.CONNECTED + || mobile.getState() == NetworkInfo.State.CONNECTING) { + Log.d("iitcm", + "connected to mobile net...abort all running requests"); // cancel all current requests iitc_view.loadUrl("javascript: window.requests.abort()"); // set idletime to maximum...no need for more iitc_view.loadUrl("javascript: window.idleTime = 999"); - } else if (wifi.getState() == NetworkInfo.State.CONNECTED || wifi.getState() == NetworkInfo.State.CONNECTING) { - iitc_view.loadUrl("javascript: window.idleTime = 999"); + } else if (wifi.getState() == NetworkInfo.State.CONNECTED + || wifi.getState() == NetworkInfo.State.CONNECTING) { + iitc_view.loadUrl("javascript: window.idleTime = 999"); } } else { - Log.d("iitcm", "no mobile internet module detected...check wifi state"); - if (wifi.getState() == NetworkInfo.State.CONNECTED || wifi.getState() == NetworkInfo.State.CONNECTING) { + Log.d("iitcm", + "no mobile internet module detected...check wifi state"); + if (wifi.getState() == NetworkInfo.State.CONNECTED + || wifi.getState() == NetworkInfo.State.CONNECTING) { iitc_view.loadUrl("javascript: window.idleTime = 999"); } } @@ -218,7 +244,7 @@ public class IITC_Mobile extends Activity { new Handler().postDelayed(new Runnable() { @Override public void run() { - back_button_pressed=false; + back_button_pressed = false; } }, 500); } @@ -235,85 +261,90 @@ public class IITC_Mobile extends Activity { public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { - case android.R.id.home: + case android.R.id.home : iitc_view.loadUrl("javascript: window.show('map');"); actionBar.setTitle(getString(R.string.menu_map)); return true; - case R.id.menu_map: + case R.id.menu_map : iitc_view.loadUrl("javascript: window.show('map');"); actionBar.setTitle(getString(R.string.menu_map)); return true; - case R.id.reload_button: - this.loadUrl(intel_url); + case R.id.reload_button : + this.loadUrl(intel_url); actionBar.setTitle(getString(R.string.menu_map)); - return true; - // clear cache - case R.id.cache_clear: - iitc_view.clearHistory(); - iitc_view.clearFormData(); - iitc_view.clearCache(true); - return true; - // toggle fullscreen - case R.id.toggle_fullscreen: - if (!this.fullscreen_mode) { - // get rid of action bar - this.getActionBar().hide(); - // hide notification bar - WindowManager.LayoutParams attrs = getWindow().getAttributes(); - attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN; - this.getWindow().setAttributes(attrs); - this.fullscreen_mode = true; - // show a little toast for the user - Toast.makeText(this, "Press back button to exit fullscreen", Toast.LENGTH_SHORT).show(); - } - else { - // get back action bar - this.getActionBar().show(); - // show notification bar again - WindowManager.LayoutParams attrs = getWindow().getAttributes(); - attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN; - this.getWindow().setAttributes(attrs); - this.fullscreen_mode = false; - } - return true; - // get the users current location and focus it on map - case R.id.locate: + return true; + // clear cache + case R.id.cache_clear : + iitc_view.clearHistory(); + iitc_view.clearFormData(); + iitc_view.clearCache(true); + return true; + // toggle fullscreen + case R.id.toggle_fullscreen : + if (!this.fullscreen_mode) { + // get rid of action bar + this.getActionBar().hide(); + // hide notification bar + WindowManager.LayoutParams attrs = getWindow() + .getAttributes(); + attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN; + this.getWindow().setAttributes(attrs); + this.fullscreen_mode = true; + // show a little toast for the user + Toast.makeText(this, + "Press back button to exit fullscreen", + Toast.LENGTH_SHORT).show(); + } else { + // get back action bar + this.getActionBar().show(); + // show notification bar again + WindowManager.LayoutParams attrs = getWindow() + .getAttributes(); + attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN; + this.getWindow().setAttributes(attrs); + this.fullscreen_mode = false; + } + return true; + // get the users current location and focus it on map + case R.id.locate : iitc_view.loadUrl("javascript: window.show('map');"); - iitc_view.loadUrl("javascript: window.map.locate({setView : true, maxZoom: 13});"); + iitc_view + .loadUrl("javascript: window.map.locate({setView : true, maxZoom: 13});"); actionBar.setTitle(getString(R.string.menu_map)); - return true; - // start settings activity - case R.id.action_settings: - Intent intent = new Intent(this, IITC_Settings.class); - intent.putExtra("iitc_version", iitc_view.getWebViewClient().getIITCVersion()); - startActivity(intent); - return true; - case R.id.menu_info: + return true; + // start settings activity + case R.id.action_settings : + Intent intent = new Intent(this, IITC_Settings.class); + intent.putExtra("iitc_version", iitc_view.getWebViewClient() + .getIITCVersion()); + startActivity(intent); + return true; + case R.id.menu_info : iitc_view.loadUrl("javascript: window.show('info');"); - actionBar.setTitle(getString(R.string.menu_info)); + actionBar.setTitle(getString(R.string.menu_info)); return true; - case R.id.menu_full: + case R.id.menu_full : iitc_view.loadUrl("javascript: window.show('full');"); - actionBar.setTitle(getString(R.string.menu_full)); + actionBar.setTitle(getString(R.string.menu_full)); return true; - case R.id.menu_compact: + case R.id.menu_compact : iitc_view.loadUrl("javascript: window.show('compact');"); - actionBar.setTitle(getString(R.string.menu_compact)); + actionBar.setTitle(getString(R.string.menu_compact)); return true; - case R.id.menu_public: + case R.id.menu_public : iitc_view.loadUrl("javascript: window.show('public');"); - actionBar.setTitle(getString(R.string.menu_public)); + actionBar.setTitle(getString(R.string.menu_public)); return true; - case R.id.menu_faction: + case R.id.menu_faction : iitc_view.loadUrl("javascript: window.show('faction');"); - actionBar.setTitle(getString(R.string.menu_faction)); + actionBar.setTitle(getString(R.string.menu_faction)); return true; - case R.id.menu_debug: + case R.id.menu_debug : iitc_view.loadUrl("javascript: window.show('debug')"); - actionBar.setTitle(getString(R.string.menu_debug)); + actionBar.setTitle(getString(R.string.menu_debug)); return true; - default: - return super.onOptionsItemSelected(item); + default : + return super.onOptionsItemSelected(item); } } @@ -330,7 +361,7 @@ public class IITC_Mobile extends Activity { // Force mobile view. // New actions are not compatible with desktop mode private String addUrlParam(String url) { - return (url + "?vp=m"); + return (url + "?vp=m"); } // inject the iitc-script and load the intel url @@ -348,9 +379,9 @@ public class IITC_Mobile extends Activity { // should avoid gps glitches if (loc.getAccuracy() < 100) { if (keyboad_open == false) { - iitc_view.loadUrl("javascript: " + - "window.plugin.userLocation.updateLocation( " + - loc.getLatitude() + ", " + loc.getLongitude() + ");"); + iitc_view.loadUrl("javascript: " + + "window.plugin.userLocation.updateLocation( " + + loc.getLatitude() + ", " + loc.getLongitude() + ");"); } } } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Settings.java b/mobile/src/com/cradle/iitc_mobile/IITC_Settings.java index 8813b2a7..f019e2ac 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Settings.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Settings.java @@ -28,18 +28,21 @@ public class IITC_Settings extends Activity { ArrayList asset_list = new ArrayList(); ArrayList asset_values = new ArrayList(); - for (int i = 0; i < asset_array.length ; i++) { + for (int i = 0; i < asset_array.length; i++) { // find user plugin name for user readable entries Scanner s = null; String src = ""; try { - s = new Scanner(am.open("plugins/" + asset_array[i])).useDelimiter("\\A"); + s = new Scanner(am.open("plugins/" + asset_array[i])) + .useDelimiter("\\A"); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } - if (s != null) src = s.hasNext() ? s.next() : ""; - String header = src.substring(src.indexOf("==UserScript=="), src.indexOf("==/UserScript==")); + if (s != null) + src = s.hasNext() ? s.next() : ""; + String header = src.substring(src.indexOf("==UserScript=="), + src.indexOf("==/UserScript==")); // remove new line comments and replace with space // this way we get double spaces instead of newline + double slash header = header.replace("\n//", " "); @@ -48,7 +51,8 @@ public class IITC_Settings extends Activity { String plugin_name = "not found"; for (int j = 0; j < attributes.length; j++) { // search for name and use the value - if (attributes[j].equals("@name")) plugin_name = attributes[j+1]; + if (attributes[j].equals("@name")) + plugin_name = attributes[j + 1]; } asset_list.add(plugin_name); // real value @@ -56,13 +60,14 @@ public class IITC_Settings extends Activity { } Bundle bundle = getIntent().getExtras(); - bundle.putStringArray("ASSETS", (String[]) asset_list.toArray(new String[0])); - bundle.putStringArray("ASSETS_VAL", (String[]) asset_values.toArray(new String[0])); + bundle.putStringArray("ASSETS", + (String[]) asset_list.toArray(new String[0])); + bundle.putStringArray("ASSETS_VAL", + (String[]) asset_values.toArray(new String[0])); settings.setArguments(bundle); // Display the fragment as the main content. getFragmentManager().beginTransaction() - .replace(android.R.id.content, settings) - .commit(); + .replace(android.R.id.content, settings).commit(); } } \ No newline at end of file diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_SettingsFragment.java b/mobile/src/com/cradle/iitc_mobile/IITC_SettingsFragment.java index 5a68f307..3859a5f4 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_SettingsFragment.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_SettingsFragment.java @@ -23,20 +23,21 @@ public class IITC_SettingsFragment extends PreferenceFragment { addPreferencesFromResource(R.xml.preferences); - //plugins + // plugins MultiSelectListPreference pref_plugins = (MultiSelectListPreference) findPreference("pref_plugins"); pref_plugins.setEntries(getArguments().getStringArray("ASSETS")); - pref_plugins.setEntryValues(getArguments().getStringArray("ASSETS_VAL")); + pref_plugins + .setEntryValues(getArguments().getStringArray("ASSETS_VAL")); // set build version ListPreference pref_build_version = (ListPreference) findPreference("pref_build_version"); PackageManager pm = getActivity().getPackageManager(); String version = "unknown"; try { - PackageInfo info = pm.getPackageInfo(getActivity().getPackageName(), 0); + PackageInfo info = pm.getPackageInfo( + getActivity().getPackageName(), 0); version = info.versionName; - } - catch (NameNotFoundException e) { + } catch (NameNotFoundException e) { e.printStackTrace(); } pref_build_version.setSummary(version); @@ -47,16 +48,20 @@ public class IITC_SettingsFragment extends PreferenceFragment { // set iitc source EditTextPreference pref_iitc_source = (EditTextPreference) findPreference("pref_iitc_source"); - pref_iitc_source.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - preference.setSummary((CharSequence) newValue); - // TODO: update iitc_version when iitc source has changed - return true; - } - }); + pref_iitc_source + .setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, + Object newValue) { + preference.setSummary((CharSequence) newValue); + // TODO: update iitc_version when iitc source has + // changed + return true; + } + }); // first init of summary - String pref_iitc_source_sum = (String) pref_iitc_source.getSummary() + pref_iitc_source.getText(); + String pref_iitc_source_sum = (String) pref_iitc_source.getSummary() + + pref_iitc_source.getText(); pref_iitc_source.setSummary(pref_iitc_source_sum); } } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java index ba705db9..ba63e570 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java @@ -28,8 +28,10 @@ public class IITC_WebView extends WebView { settings.setAllowFileAccess(true); settings.setGeolocationEnabled(true); settings.setAppCacheEnabled(true); - settings.setDatabasePath(this.getContext().getApplicationInfo().dataDir + "/databases/"); - settings.setAppCachePath(this.getContext().getCacheDir().getAbsolutePath()); + settings.setDatabasePath(this.getContext().getApplicationInfo().dataDir + + "/databases/"); + settings.setAppCachePath(this.getContext().getCacheDir() + .getAbsolutePath()); // use cache if on mobile network...saves traffic this.js_interface = new IITC_JSInterface(c); this.addJavascriptInterface(js_interface, "android"); @@ -38,7 +40,8 @@ public class IITC_WebView extends WebView { // allow access by default this.setWebChromeClient(new WebChromeClient() { @Override - public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { + public void onGeolocationPermissionsShowPrompt(String origin, + GeolocationPermissions.Callback callback) { callback.invoke(origin, true, false); } }); @@ -65,13 +68,15 @@ public class IITC_WebView extends WebView { iitc_init(context); } - //---------------------------------------------------------------- + + // ---------------------------------------------------------------- @Override public void loadUrl(String url) { if (!url.startsWith("javascript:")) { // force https if enabled in settings - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext()); + SharedPreferences sharedPref = PreferenceManager + .getDefaultSharedPreferences(getContext()); if (sharedPref.getBoolean("pref_force_https", true)) url = url.replace("http://", "https://"); else @@ -90,8 +95,7 @@ public class IITC_WebView extends WebView { } public void updateCaching() { - if (!this.isConnectedToWifi()) - { + if (!this.isConnectedToWifi()) { Log.d("iitcm", "not connected to wifi...load tiles from cache"); settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); } else { @@ -101,7 +105,8 @@ public class IITC_WebView extends WebView { } private boolean isConnectedToWifi() { - ConnectivityManager conMan = (ConnectivityManager) getContext().getSystemService( Context.CONNECTIVITY_SERVICE ); + ConnectivityManager conMan = (ConnectivityManager) getContext() + .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return wifi.getState() == NetworkInfo.State.CONNECTED; } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java index 59a16c6a..9a32366f 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java @@ -26,8 +26,10 @@ import java.util.Set; public class IITC_WebViewClient extends WebViewClient { private static final ByteArrayInputStream style = new ByteArrayInputStream( - "body, #dashboard_container, #map_canvas { background: #000 !important; }".getBytes()); - private static final ByteArrayInputStream empty = new ByteArrayInputStream("".getBytes()); + "body, #dashboard_container, #map_canvas { background: #000 !important; }" + .getBytes()); + private static final ByteArrayInputStream empty = new ByteArrayInputStream( + "".getBytes()); private WebResourceResponse iitcjs; private String js = null; @@ -36,10 +38,11 @@ public class IITC_WebViewClient extends WebViewClient { public IITC_WebViewClient(Context c) { this.context = c; - this.iitc_path = Environment.getExternalStorageDirectory().getPath() + "/IITC_Mobile/"; + this.iitc_path = Environment.getExternalStorageDirectory().getPath() + + "/IITC_Mobile/"; try { loadIITC_JS(c); - } catch(IOException e) { + } catch (IOException e) { e.printStackTrace(); } } @@ -47,7 +50,8 @@ public class IITC_WebViewClient extends WebViewClient { public String getIITCVersion() { String header = ""; if (js != null) - header = js.substring(js.indexOf("==UserScript=="), js.indexOf("==/UserScript==")); + header = js.substring(js.indexOf("==UserScript=="), + js.indexOf("==/UserScript==")); // remove new line comments header = header.replace("\n//", ""); // get a list of key-value @@ -55,35 +59,46 @@ public class IITC_WebViewClient extends WebViewClient { String iitc_version = "not found"; for (int i = 0; i < attributes.length; i++) { // search for version and use the value - if (attributes[i].equals("@version")) iitc_version = attributes[i+1]; + if (attributes[i].equals("@version")) + iitc_version = attributes[i + 1]; } return iitc_version; } public void loadIITC_JS(Context c) throws java.io.IOException { // You are able to load the script from external source - // if a http address is given, use script from this address. else use the local script - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(c); + // if a http address is given, use script from this address. else use + // the local script + SharedPreferences sharedPref = PreferenceManager + .getDefaultSharedPreferences(c); String iitc_source = sharedPref.getString("pref_iitc_source", "local"); String js = ""; - // if developer mode are enabled, load all iitc script from external storage + // if developer mode are enabled, load all iitc script from external + // storage if (sharedPref.getBoolean("pref_dev_checkbox", false)) { - js = this.fileToString(iitc_path + "dev/total-conversion-build.user.js", false); + js = this.fileToString(iitc_path + + "dev/total-conversion-build.user.js", false); if (js.equals("false")) { - Toast.makeText(context, "File " + iitc_path + - "dev/total-conversion-build.user.js not found. " + - "Disable developer mode or add iitc files " + - "to the dev folder.", Toast.LENGTH_LONG).show(); + Toast.makeText( + context, + "File " + + iitc_path + + "dev/total-conversion-build.user.js not found. " + + "Disable developer mode or add iitc files " + + "to the dev folder.", Toast.LENGTH_LONG) + .show(); return; } else { - Toast.makeText(context, "Developer mode enabled", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, "Developer mode enabled", + Toast.LENGTH_SHORT).show(); } } else { // load iitc script from web or asset folder if (iitc_source.contains("http")) { URL url = new URL(iitc_source); - js = new Scanner(url.openStream(), "UTF-8").useDelimiter("\\A").next(); + js = new Scanner(url.openStream(), "UTF-8").useDelimiter("\\A") + .next(); } else { js = this.fileToString("total-conversion-build.user.js", true); } @@ -92,15 +107,14 @@ public class IITC_WebViewClient extends WebViewClient { this.js = js; PackageManager pm = context.getPackageManager(); - boolean hasMultitouch = - pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH); + boolean hasMultitouch = pm + .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH); boolean forcedZoom = sharedPref.getBoolean("pref_user_zoom", false); - if (hasMultitouch && !forcedZoom) { - js = js.replace("window.showZoom = true;", "window.showZoom = false;"); + if (hasMultitouch && !forcedZoom) { + js = js.replace("window.showZoom = true;", + "window.showZoom = false;"); } - - // need to wrap the mobile iitc.js version in a document ready. IITC // expects to be injected after the DOM has been loaded completely. // Since the mobile client injects IITC by replacing the gen_dashboard @@ -108,17 +122,15 @@ public class IITC_WebViewClient extends WebViewClient { // so it boots correctly. js = "$(document).ready(function(){" + js + "});"; - iitcjs = new WebResourceResponse( - "text/javascript", - "UTF-8", - new ByteArrayInputStream(js.getBytes()) - ); + iitcjs = new WebResourceResponse("text/javascript", "UTF-8", + new ByteArrayInputStream(js.getBytes())); }; // enable https @Override - public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { - handler.proceed() ; + public void onReceivedSslError(WebView view, SslErrorHandler handler, + SslError error) { + handler.proceed(); }; // plugins should be loaded after the main script is injected @@ -127,7 +139,8 @@ public class IITC_WebViewClient extends WebViewClient { super.onPageFinished(view, url); // get the plugin preferences - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences sharedPref = PreferenceManager + .getDefaultSharedPreferences(context); Set plugin_list = sharedPref.getStringSet("pref_plugins", null); boolean dev_enabled = sharedPref.getBoolean("pref_dev_checkbox", true); @@ -135,10 +148,11 @@ public class IITC_WebViewClient extends WebViewClient { if (plugin_list != null) { String[] plugin_array = plugin_list.toArray(new String[0]); - for(int i = 0; i < plugin_list.size(); i++) { + for (int i = 0; i < plugin_list.size(); i++) { Log.d("iitcm", "adding plugin " + plugin_array[i]); if (dev_enabled) - this.loadJS(iitc_path + "dev/plugins/" + plugin_array[i], false, view); + this.loadJS(iitc_path + "dev/plugins/" + plugin_array[i], + false, view); else this.loadJS("plugins/" + plugin_array[i], true, view); } @@ -153,20 +167,21 @@ public class IITC_WebViewClient extends WebViewClient { File[] files = directory.listFiles(); if (files != null) { for (int i = 0; i < files.length; ++i) { - if(this.loadJS(files[i].toString(), false, view)) - Log.d("iitcm", "loading additional plugin " + files[i].toString()); + if (this.loadJS(files[i].toString(), false, view)) + Log.d("iitcm", + "loading additional plugin " + files[i].toString()); } } } public void enableTracking(WebView view, boolean dev_enabled) { Log.d("iitcm", "enable tracking..."); - // load plugin from external storage if dev mode are enabled - if (dev_enabled) - this.loadJS(iitc_path + "dev/user-location.user.js", false, view); - else - // load plugin from asset folder - this.loadJS("user-location.user.js", true, view); + // load plugin from external storage if dev mode are enabled + if (dev_enabled) + this.loadJS(iitc_path + "dev/user-location.user.js", false, view); + else + // load plugin from asset folder + this.loadJS("user-location.user.js", true, view); } // read a file into a string @@ -174,7 +189,7 @@ public class IITC_WebViewClient extends WebViewClient { // if asset == true use the asset manager to open file public String fileToString(String file, boolean asset) { Scanner s = null; - String src= ""; + String src = ""; if (!asset) { File js_file = new File(file); try { @@ -196,7 +211,8 @@ public class IITC_WebViewClient extends WebViewClient { } } - if (s != null) src = s.hasNext() ? s.next() : ""; + if (s != null) + src = s.hasNext() ? s.next() : ""; return src; } @@ -208,21 +224,24 @@ public class IITC_WebViewClient extends WebViewClient { String js = fileToString(file, asset); if (js.equals("false")) return false; - else view.loadUrl("javascript:" + js); + else + view.loadUrl("javascript:" + js); return true; } - // Check every external resource if it’s okay to load it and maybe replace it + // Check every external resource if it’s okay to load it and maybe replace + // it // with our own content. This is used to block loading Niantic resources // which aren’t required and to inject IITC early into the site. // via http://stackoverflow.com/a/8274881/1684530 @Override - public WebResourceResponse shouldInterceptRequest (final WebView view, String url) { - if(url.contains("/css/common.css")) { + public WebResourceResponse shouldInterceptRequest(final WebView view, + String url) { + if (url.contains("/css/common.css")) { return new WebResourceResponse("text/css", "UTF-8", style); - } else if(url.contains("gen_dashboard.js")) { + } else if (url.contains("gen_dashboard.js")) { return this.iitcjs; - } else if(url.contains("/css/ap_icons.css") + } else if (url.contains("/css/ap_icons.css") || url.contains("/css/map_icons.css") || url.contains("/css/misc_icons.css") || url.contains("/css/style_full.css") @@ -241,13 +260,18 @@ public class IITC_WebViewClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.contains("ingress.com") || url.contains("appengine.google.com")) { // reload iitc if a poslink is clicked inside the app - if (url.contains("intel?ll=") || (url.contains("latE6") && url.contains("lngE6"))) { - Log.d("iitcm", "should be an internal clicked position link...reload script for: " + url); + if (url.contains("intel?ll=") + || (url.contains("latE6") && url.contains("lngE6"))) { + Log.d("iitcm", + "should be an internal clicked position link...reload script for: " + + url); ((IITC_Mobile) context).loadUrl(url); } return false; } else { - Log.d("iitcm", "no ingress intel link, start external app to load url: " + url); + Log.d("iitcm", + "no ingress intel link, start external app to load url: " + + url); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); context.startActivity(intent); return true; From 9edcdaac3db258dbdbf84c80479e2a6c50dd4cbc Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Tue, 7 May 2013 11:53:41 +0200 Subject: [PATCH 21/26] bump version number and fixed about string since the app is not completely my work anymore --- mobile/AndroidManifest.xml | 4 ++-- mobile/res/values/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mobile/AndroidManifest.xml b/mobile/AndroidManifest.xml index 3d8e23d4..8249bf42 100644 --- a/mobile/AndroidManifest.xml +++ b/mobile/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="18" + android:versionName="0.3.6" > Ingress Intel Total Conversion Mobile

- by cradle

+ by cradle and contributors

Icon by Giuseppe Lucido

IITC Mobile is an optimized mobile browser for the Ingress Intel Total Conversion (IITC) userscript by breunigs. From 87c0c54a2686cd0678c3cbc10351c21d93bcdc84 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Tue, 7 May 2013 12:01:20 +0200 Subject: [PATCH 22/26] don't hide actionbar in fullscreen since we don't have iitc-tabs for control --- mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index afde5558..0ab3510b 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -222,8 +222,6 @@ public class IITC_Mobile extends Activity { public void onBackPressed() { // leave fullscreen mode if it is enabled if (fullscreen_mode) { - // get back action bar - actionBar.show(); // show notification bar again WindowManager.LayoutParams attrs = getWindow().getAttributes(); attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN; @@ -282,8 +280,6 @@ public class IITC_Mobile extends Activity { // toggle fullscreen case R.id.toggle_fullscreen : if (!this.fullscreen_mode) { - // get rid of action bar - this.getActionBar().hide(); // hide notification bar WindowManager.LayoutParams attrs = getWindow() .getAttributes(); @@ -295,8 +291,6 @@ public class IITC_Mobile extends Activity { "Press back button to exit fullscreen", Toast.LENGTH_SHORT).show(); } else { - // get back action bar - this.getActionBar().show(); // show notification bar again WindowManager.LayoutParams attrs = getWindow() .getAttributes(); From e2f8c7c5cf4240fb035996bf9c34bf9d0c07041c Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Tue, 7 May 2013 16:01:23 +0200 Subject: [PATCH 23/26] enable portals, fields and links per default --- code/boot.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/boot.js b/code/boot.js index 0539fa42..fcc04011 100644 --- a/code/boot.js +++ b/code/boot.js @@ -171,20 +171,20 @@ window.setupMap = function() { var t = (i === 0 ? 'Unclaimed' : 'Level ' + i) + ' Portals'; addLayers[t] = portalsLayers[i]; // Store it in hiddenLayer to remove later - if(!isLayerGroupDisplayed(t)) hiddenLayer.push(portalsLayers[i]); + if(!isLayerGroupDisplayed(t, true)) hiddenLayer.push(portalsLayers[i]); } fieldsLayer = L.layerGroup([]); map.addLayer(fieldsLayer, true); addLayers['Fields'] = fieldsLayer; // Store it in hiddenLayer to remove later - if(!isLayerGroupDisplayed('Fields')) hiddenLayer.push(fieldsLayer); + if(!isLayerGroupDisplayed('Fields', true)) hiddenLayer.push(fieldsLayer); linksLayer = L.layerGroup([]); map.addLayer(linksLayer, true); addLayers['Links'] = linksLayer; // Store it in hiddenLayer to remove later - if(!isLayerGroupDisplayed('Links')) hiddenLayer.push(linksLayer); + if(!isLayerGroupDisplayed('Links', true)) hiddenLayer.push(linksLayer); window.layerChooser = new L.Control.Layers({ 'MapQuest OSM': views[0], From 0eaf076a750f621d3c408d454df788d1a6d65578 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Tue, 7 May 2013 19:41:37 +0200 Subject: [PATCH 24/26] made action bar optional in fullscreen mode (see #216) --- mobile/res/values/strings.xml | 6 ++++-- mobile/res/xml/preferences.xml | 11 ++++++++--- mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index d1fd5f71..9316a1f0 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -34,10 +34,12 @@ Misc Plugins Available plugins - Show zoom control - Shows +/- buttons even on multitouch capable devices. Display user location Show users position on map + Show zoom control + Shows +/- buttons even on multitouch capable devices. + Hide Action Bar in fullscreen mode + Nice for screenshots. Note: IITCM cannot be controlled without Action Bar. Force https Disabling may improve performance Developer options diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml index 5cd6e03d..f986bc1e 100644 --- a/mobile/res/xml/preferences.xml +++ b/mobile/res/xml/preferences.xml @@ -12,15 +12,20 @@ + diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index 0ab3510b..03f8cdf4 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -39,6 +39,7 @@ public class IITC_Mobile extends Activity { private LocationListener loc_listener = null; private boolean keyboad_open = false; private boolean fullscreen_mode = false; + private boolean fullscreen_actionbar = false; private ActionBar actionBar; @Override @@ -58,6 +59,7 @@ public class IITC_Mobile extends Activity { actionBar.setTitle(getString(R.string.menu_map)); actionBar.setHomeButtonEnabled(true); + // do something if user changed something in the settings SharedPreferences sharedPref = PreferenceManager .getDefaultSharedPreferences(this); listener = new OnSharedPreferenceChangeListener() { @@ -67,6 +69,12 @@ public class IITC_Mobile extends Activity { if (key.equals("pref_user_loc")) user_loc = sharedPreferences.getBoolean("pref_user_loc", false); + if (key.equals("pref_fullscreen_actionbar")) { + fullscreen_actionbar =sharedPreferences.getBoolean("pref_fullscreen_actionbar", + false); + if (fullscreen_mode) + IITC_Mobile.this.getActionBar().hide(); + } IITC_Mobile.this.loadUrl(intel_url); } }; @@ -222,6 +230,8 @@ public class IITC_Mobile extends Activity { public void onBackPressed() { // leave fullscreen mode if it is enabled if (fullscreen_mode) { + if (fullscreen_actionbar) + this.getActionBar().show(); // show notification bar again WindowManager.LayoutParams attrs = getWindow().getAttributes(); attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN; @@ -280,6 +290,8 @@ public class IITC_Mobile extends Activity { // toggle fullscreen case R.id.toggle_fullscreen : if (!this.fullscreen_mode) { + if (fullscreen_actionbar) + this.getActionBar().hide(); // hide notification bar WindowManager.LayoutParams attrs = getWindow() .getAttributes(); @@ -291,6 +303,8 @@ public class IITC_Mobile extends Activity { "Press back button to exit fullscreen", Toast.LENGTH_SHORT).show(); } else { + if (fullscreen_actionbar) + this.getActionBar().show(); // show notification bar again WindowManager.LayoutParams attrs = getWindow() .getAttributes(); From f3fae16fe668b88bc8a0b642830f2e1fb3fa1353 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Tue, 7 May 2013 20:28:17 +0200 Subject: [PATCH 25/26] set fetch dev-mode default value to false --- mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java index 9a32366f..f606d5ac 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java @@ -142,7 +142,7 @@ public class IITC_WebViewClient extends WebViewClient { SharedPreferences sharedPref = PreferenceManager .getDefaultSharedPreferences(context); Set plugin_list = sharedPref.getStringSet("pref_plugins", null); - boolean dev_enabled = sharedPref.getBoolean("pref_dev_checkbox", true); + boolean dev_enabled = sharedPref.getBoolean("pref_dev_checkbox", false); // iterate through all enabled plugins and load them if (plugin_list != null) { From 6e72f516e6d808e667079ccc2e19fecde9cae1f5 Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Tue, 7 May 2013 22:04:34 +0200 Subject: [PATCH 26/26] load actionbar setting onCreate too (see #216) --- mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index 03f8cdf4..47deeccc 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -137,6 +137,8 @@ public class IITC_Mobile extends Activity { loc_listener); } + fullscreen_actionbar = sharedPref.getBoolean("pref_fullscreen_actionbar", false); + // load new iitc web view with ingress intel page Intent intent = getIntent(); String action = intent.getAction();