From 161802cf9d9ad243aa1ed915639e534ed820512b Mon Sep 17 00:00:00 2001 From: Rolzad73 Date: Wed, 3 Aug 2016 16:01:43 -0400 Subject: [PATCH 1/8] minor Android tweaks - removed ads reference no longer used in manifest - removed redundant android:debuggable attribute - cleared EGL debug warning log spamming issue #581 --- projects/mtg/Android/AndroidManifest.xml | 4 +--- projects/mtg/Android/src/org/libsdl/app/SDLActivity.java | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/projects/mtg/Android/AndroidManifest.xml b/projects/mtg/Android/AndroidManifest.xml index 3a4255c1c..534f3b8bb 100644 --- a/projects/mtg/Android/AndroidManifest.xml +++ b/projects/mtg/Android/AndroidManifest.xml @@ -4,15 +4,13 @@ - + - - diff --git a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java index 4c4d166ba..0b8f093d8 100644 --- a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java +++ b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java @@ -1207,7 +1207,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK { EGL10 egl = (EGL10) EGLContext.getEGL(); - egl.eglWaitNative(EGL10.EGL_NATIVE_RENDERABLE, null); + egl.eglWaitNative(EGL10.EGL_CORE_NATIVE_ENGINE, null); // drawing here From 066dd866b1163730b94240059b75a9b629d51b91 Mon Sep 17 00:00:00 2001 From: Rolzad73 Date: Wed, 3 Aug 2016 20:36:34 -0400 Subject: [PATCH 2/8] - reverting debuggable attribute removal --- projects/mtg/Android/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/mtg/Android/AndroidManifest.xml b/projects/mtg/Android/AndroidManifest.xml index 534f3b8bb..543d9f775 100644 --- a/projects/mtg/Android/AndroidManifest.xml +++ b/projects/mtg/Android/AndroidManifest.xml @@ -5,7 +5,7 @@ - + From 62a6ddf3cab72a0802a482f4809c948511173bb0 Mon Sep 17 00:00:00 2001 From: Rolzad73 Date: Thu, 4 Aug 2016 08:02:32 -0400 Subject: [PATCH 3/8] - update android gitignore - update android launcher icons --- projects/mtg/Android/.gitignore | 1 + .../mtg/Android/res/drawable-hdpi/icon.png | Bin 8722 -> 7270 bytes .../mtg/Android/res/drawable-ldpi/icon.png | Bin 2862 -> 2227 bytes .../mtg/Android/res/drawable-mdpi/icon.png | Bin 4511 -> 3574 bytes 4 files changed, 1 insertion(+) diff --git a/projects/mtg/Android/.gitignore b/projects/mtg/Android/.gitignore index 5a9b113aa..fb2d02061 100644 --- a/projects/mtg/Android/.gitignore +++ b/projects/mtg/Android/.gitignore @@ -1,3 +1,4 @@ /gen /bin +/libs diff --git a/projects/mtg/Android/res/drawable-hdpi/icon.png b/projects/mtg/Android/res/drawable-hdpi/icon.png index 5332e9cf43b71f5fe209eb2193be8af07fd4ffb3..f38502e79b18412158be8d897945b907c8feec56 100644 GIT binary patch literal 7270 zcmV-s9GT;ZP)4q#?=#%#4c$+zp4A$>!e2nz!S z90vo&u7p2QajKG(lS*Z%#FPsRc0xuuBN<%fU}8Wsl0dW2+^z1G)RWY$9$&xdPUoDx z_sSpp+}q9I!0T4G|M9L;wd&pB?7hz3-}=_KzH{NP#{YN7U-kt4f+3uk+vr~f!ZN?d zoWf^*Vj`z98h{#T)sq;_CNYo!SjbXn1KNO2B9dB2J1`Bf0%i;t15FD}Kyr~O0m)$^ zjeob3uu?!4;OPA!{NZ8v;mLwfVv9H`jGaq1WU~#D=&*COhRYW|khCx-SoJWHaLI9MaEU~7b znHz?~IS>dzNfQGo&MV$4S!PJA;5}4Tz#`a3b15`6nd?i|?bMZWMijQP@m zES;GAonPj|A8b?hx6{6;q*}Lz=F9uq@vZ2Y3Q(MkD5;sJ9L$3X;se1MoC_q@P`Lo! zV2m(3SF& zVtCU7s=p6Z02!>f)tKLVugK?jY&_T8{Leqig%=(sl&>KoWT~JCHU`H4emUzkKl?2| zHfk^dAxQ)gVQ#)e0|c)aBNRoT+jTTD!*J+H6GKsW^4t&thzPA_g7@_?N(`#ty;4}36}_51!Plj(cdxVt{X*ubI&hcX+HPgKgH&YUS-&yV_~Vn z2d%FM7TN;W0aMFa?y`3fK)2^eZJ=^7C{q(D)(XQS9wii-O^b+76rTPd25B(x_@GR7 z5(dM7_exO)COdH&aR(``3N#y*ps;U$muDVra>?FRl)HDb6`ogUUnFwt7p?u;qOdl6 z?)`lF)9dlY^Yj%$fQe3mHNvp)h_Q%>t%Gwu@H{`~QCoh16w*W(4n6HwLSo`B@?Oa^ zLz)PxP?P~L-o)%uB6Ce$7Ao1lQhBFzD@KIP`Sd38Uof0~jNi!sDQ!&;b@%1{N(p zKoT!HIgt{)Vy)nV;zK-My@AIVA+ZvJKp?R~6_m+|h&j}EInN9}MEo%#U?R}ZEtEX` zeaGg#t8foI#M2A&+zuQ8K5NW7uY#L)UbN1B_)E7jGxI7%zl$}(L?=Zx&cg@A`+yNa zD@Pi+R=(WjE;~RYtjN>2iyFpKlracJ;W1W76Tvx+>E412;mp^Tx~gjo-T&JUyumH(#PZCmB~(uDg;%WtLIV&DXr6Z zryT*jBH)~orouyyEwOUv29moT;>o$=92DW*!0YV>7Y+*E5>y|6SqG%81XNiuonj4$ zF<29KOPUz6H1el3wUm9uAoOBz0w?9+H#$J!HQ05O+3 zKe&~>-+P>cUw&f6Z9#77hCq@ky@7+Ev|5&`@HCqV)<$d_(T5O}EHMnd!^hx^cG1s0 zmJ=ZT^AP^g%F?abeE+l8u1b=XA_fr=lf)fik_5F03rRxto7d33QmIOZ_aTx>BEUNr z5Qz)9{vtpu6y{ivSb$cHQ<>G*7Dh}|1vo*a`mk%(PJ0V`{P|Eh8FVF;CvuU z4OJB>LkRH(q=`fxmBwuNQ%cS=vV-Wtt6vY{gDu#wB7_g5@WITO546h2I4=cm2KHQg z5%2ooI()GYYru%XSgA>%FgsU~Cc?vyblJRfHN89U;hR;(Uf_$swskXn`s*J@+%_r# zrE{#ic`dJe^B^4W;a#K;twu}`?N)*+R5kW_ryw8*iH!iSCyv&c#UKUOgF`*l9l)ef zy?%&~gg8j3sb<^NO_PXNCw z!p>IChrap=rdlsilmQ=h#5&8p9t7&mH-6%?r_d=dod{8PEC<{f5 zp^9-D;n2@LmS1YbQ2_<;YzX0t-uvIWDun;G4z%?vZ)fx79(fuGWSSb+e#IP`5VcRn}z~&hMlM^ZZ zVT2S_Xyh@yBXxOUg%p9ZqBsSBKAix0;6>mdaKOTzj~VmceN!#-p3huPzk7sU-(l)+ zuUt&$)*6m46dZbDn$8cN;fZdSKLu_9&IR&M-^AO05vsDwun1ID0ENY+iXG3Cv<@#4 zL};{y5F+k08~I%zDMES^q)0LWnKL&p5=*H%u*O&_~}P%Y8z zI}jl#bbFq%iu`2vt9{nJ)S>&rR&ED|z^?;)vV`~jQO1JOuUTHMq5{fb~(Mc(*s4oSL8BIhGBdF?#B%ZY$1i%#{A3YZ~ulx90 z$yv+Xknjys35XKdIBahc>Hcd?J5=pFhxiuIfbby*TU$Br|E;SC?szP*6^hc2cfhV) z16J)BaIoL!1!|UOVyUC5^!l-^fOw3nGO7xrwn$Y4Gz3KCl+yfZ1?U2icWn}R%j#RN zqmdn^-Ac$(Ls>=z(VCdWiZU>KrGsqU&b>tNx(1GSz-<2PO|Sy6lEkXq8evd4 zjy`WmcJ1XMk=QO##iqjX`I5>h?N)-dhQu23++wYa3u+Oek)PfnIjv8>L*&=zvLwCX zwk^1FDQ1%@R?%5%C|%sm`(Eoa{Yu5`@mU@KMD@sfARL%(%MBmeh&2U+!sDtyzwcOF zs;FGxwSxmz?-v%1&vHNGf|JBB)}AUCC`->^7-bgc6(6GDrb>O>MvWHWZ0(>FR=r*1 z!^6wgvu;zIoJc$(vEGVzFa+4M)zRL4i06Rg5H`T}O>oZC%~vovF%KGrGh>BDo{(6f z-AXvLJJ8s3h^Iqf0enG(p(KgZmimG|C`l@{E-nlP0p}HCAXI`0%0RW`Y#y=eL_XnF zJC}U;3X1+whJ}whQ67s@=M^Kc)UPmm5~{-oxgS7v|1Uv$$Qrr+BU>2s=I9SSRiy;4 zh#_(tuM~R)cjPEfM!|nyP<;tvCuEE}^>I#2JX&QH#@&*#3WO@4Wkon4b)5MC2_)Bv z+&VwilJl>g#^5lu?CO0~2&uWr;Ufjp2Mdl2hwK8)RKNdbk(cQ9ZVpsEiV=m!9iafdRoLaS*<$A}OV=K{8tf`jU5HP}xnKy6rkiOBWl z$_=buUD54(Di^UQN}jQ54*_QPE9vXAYz3U^{Azf8C9GQguFa%okwFm>`omO>f z<2x@vv`ed*kY^T@T8D|^ShHa%_6Nf8Ikt(Qs?WYf$1=8-2f0TVTslr@`7yDIr8XM`}_xQXq>m zV1mF>pFSw6&%`+41n^F=CJJJs&klx;)W&8(ujlG6N>u69d&(0SbjAcTi0jTTg&W-Z zl{6P5maj9ayS2D4n^u6P_>QbV*>wIH2E?vBa5PDc+YB?ivr4W>1 zp|qO`R)kPhIH*wF3Ag}#h4GP8h2sk)op$73!!qEV(r!fwq;i3(Qqtuv@^k{!f%WHz zZ1h)eAWixNr`SX=hIm&sDtnWigoDS1B=ZC2RT;qUb4BtTI>{BQX=DYil$sW3Et5w6 z=zs#eZ$7#juF2qtCRK*)?>?0D*D2ZPp#yeWf;b=R)N zR|CRHE$7O`;CLSuzy4An9Xb|O)vIowff<2pX7e@)3+JLZo&iKQJkp>OE72b$G6arKi%dIfXm$*Z+{Wf%fMF3^ z#A0Opxs@|HzAdbTR>Da*t0w}HrG~*U5L6i!0q4Qk6K(I4#j;cFtS&o1=ZLJ6nHE{* z==L4Gz9&f{i%x9aaZL<^fvcfZajIRQZ|d^Nn3%DuO2=wo+oWOt@m>CzhKrNLD-JYW;Jc$wP#+=NU?7XPVN(b6LO~{*R zG+7M;y?(URl$9q}b+y8f|_M9U|5UMxu=- zsSOdMa^#f2=TrhT8r~~et<)WxEAc*1`8b)So{M6+5mua&;ifI?VPy)dK(Sbj zO$#AJ{W^}ws*@yQ%Jhny^qNW5z|5s0@313(kHAu|LRA?K{aEH`He$M;ohxelU6fC1 z7INk>Xf#H~fKmI`mujxyR5?$(m7vb%W>7$8%~)$(6392h(W{B6KVri zVx#E4uv8ITV9f{C;S!Pei`*9KY&KFbMCxlAVWOSjyvBA>^8^JEZ&6i>*yubv0TPKB zE6d{K<`+tWMgwN_DtdYYN0u7e*GzyF`!10WEWiN)KRDW>S(`XTpqX2|uQ^aHn^+?l zBdor3itPH8Tq<(a#Uh(EPpORC!p=W-v zq&=B%@R1&vw8rYGXuw9u80m*uQc-r z*jZ+48=TU}4S8zFYOTmS$Mt{jD(uHEp-c>O&&|?mr}aXW{vh`7gT~JfhMwUtjA?+X zvhueHA;_Jr? zRFzgE8GEN=6ED7&Sizctcl^!GT=un_dF?P*lT*3a!kL;#;zDaz#$+cQXS30wdws{s z4Fk&IJR-u(ihSI?&GIPsS`#ywjtW&B$K%X1X@CQ&&kSK{{+XlLGzwf%+=@-Rpi!c+;{!19h&mT3M7wFno}*#m>Gm87 z3Cy(H&m{HQpCpk{5%RHGWMHt#bmqVzEWX#`BEIF#ya zDT)fi=T+~Q*L%$G?naTT&Q^JCc>%!~Gxq0Xsj1sCG4m{S9aR-mvT8Iz6-5|705ce# z*ik{_ZW#&j@$YdHG#XJsnCwI>OA@KAelf7~ixp1oNmD;d2CBzH_}{sR-}l|uu!+Hl z;A(BBtaY8LipQ*S@jqW1Eth(ZiB1yrnmT~qhuSjZqng;Zq*kzXNt0N^a2T*QI$tUm z1-7CHC*1wSELyp!2t2=iffw$aVCCVGqoBRBC71ymhNpI`Ztp&LnBMVX+=fXKgLl!D znrG3HlBI?`jkXrmm|fDO-e-ndB#U;sk*%(N!jn8TH1mi%qvtLv7qgnRLc5*NAH*6o z)cQ}i=lI@3bMzlx%f`E3;FTRa_z$3^s;j5JtU%eH{g$5`AzG4~*ABzY!^u=uTs{>i zTAzPZegvRL!IN6rv$Y%%>c^Ep#%6Q2Wk^v4G}<{(sSTNR2~!mD zJMzr(?A8T#KeU2Ne|VHbk3Ye`4}p8)92M0gA%w32yMP6j`TYDT2MFLGym$qCsQq&H z-1NGYOsr~*C5U!AsjVn6!=-5?dy8F9o>`m=+;QJL`HLG_bN^2KLwh)ML}^~$q|-`b zk2{N*O95Z+suO8GI>_$(!7TRqjhu7O)9l){i{B?Y9cl~C))2zK1a=TN(>6}h#?N?w z0u%>e_l?NM20NA#xn?C3wan1#ds1t#wK_PcQ+catdG+-k58o$Tx?>9W?R$Cj*fGkg z;+%b5W_Ja8>reqlnz+qr3(RsYAaasWan1j8*)MX3q?frv=G_PAx-{FWs#>!YHMqtM)UG_b)g3XW5 za^#W6_@B=4C%|LC>fm+#p)S?SL5|NP%&gBN8&)tDoQt*A-u-mRGfeGRS$1!v2sNo4NRu) zScve*lk=2Mt>fJLp68X9cJejgDPrC&RgXTY`oH?ByWcd|zu0Uo%zkH>zNkSnkAR$5 z;nAmOIr#W0wmfl|!%sZPzX^f+sp+xmp%B7XfbS9e`P+%U##7eq--rMK_-9ogSf_f! zhJ*bLz3s?u555_>Nl|$2xM!YKFK!_F&VxL2^a#H%!V#jKP*oodA$%#oqpzqw`I73c z%Lc=%CU*3ihxQ9g=Ll(2_`#zKG`4MG=I$rizI!)+Km?a)nbsFV2>*f@lttoW5_6}! zus13|I9Pm2_32V|;^NuGi`zSkq`SMx?mY>6wX0ND@hmWvMLruP8rY)JD@IA%uSgJVAtymxw+f zCH{oY6$U1LLFA(!G3FDit?l%^=exlFWqhOts(QPs-bsx4ZXyvpt=|kfdA!j9g81tO zR{@im$S2ktb6X3VuMBqjO0bCBOOkmR*V}AQMTs;&S{gTT5 z5W>F(o+j>=9l+5ydNFU<5j$xV#Klf}*fFoVZB`^NU;?OA_4{@D-A`Q5R-pe=zQ@(C zn*d=^^>GJ_0+XuxysG{YF(?bb3&8vtSj!pxiLN&Bw*Y2{R=+7?<8PKIpua|Bw?7Z{ zKNq-!6ThC|h=lJjF-XfIf6EzXGC-s6UjeKo1}Gs0XCD!7mNPP<%VUO!F$ald!|Al% zf95#T0Xq3Q^=}|7zhL~aF|td%VL<#><21(q1LDk?@r=XEb^rhX07*qoM6N<$f?~$Y Ar2qf` literal 8722 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 diff --git a/projects/mtg/Android/res/drawable-ldpi/icon.png b/projects/mtg/Android/res/drawable-ldpi/icon.png index 16ebfc68ed3a671013652f8decdb64da79593f59..0d8fd16acc9f36bba952ac99a5e6982b26bce93d 100644 GIT binary patch delta 2200 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%0Dr-|P1zVrlp;2l5&O(1Mz{9hjpFcYbB%O~ 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 delta 4502 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 From dd5635d9cddd18bd0a2678bdff98424316cc38ff Mon Sep 17 00:00:00 2001 From: Rolzad73 Date: Thu, 4 Aug 2016 08:32:17 -0400 Subject: [PATCH 4/8] - only minor whitespace formatting Android --- .../src/net/wagic/utils/DeckImporter.java | 175 +++++++++--------- .../src/net/wagic/utils/StorageOptions.java | 157 ++++++++-------- .../src/org/libsdl/app/SDLActivity.java | 8 +- 3 files changed, 169 insertions(+), 171 deletions(-) diff --git a/projects/mtg/Android/src/net/wagic/utils/DeckImporter.java b/projects/mtg/Android/src/net/wagic/utils/DeckImporter.java index 55bfe3dd6..74aeaafe0 100644 --- a/projects/mtg/Android/src/net/wagic/utils/DeckImporter.java +++ b/projects/mtg/Android/src/net/wagic/utils/DeckImporter.java @@ -11,14 +11,13 @@ import android.util.Log; public class DeckImporter { - public static String importDeck( File f, String mypath, String activePath ) { String message = ""; String deck = ""; String deckname = ""; - String prefix = "#SB:"; - int cardcount = 0; + String prefix = "#SB:"; + int cardcount = 0; if(f.exists() && !f.isDirectory()) { deckname = f.getName(); @@ -36,91 +35,86 @@ public class DeckImporter while (scanner.hasNext()) { String line = scanner.nextLine(); - line = line.trim(); - if (!line.equals("") && cardcount < 61) // don't write out blank lines - { - String[] slines = line.split("\\s+"); - String arranged = ""; - for(int idx = 1; idx < slines.length; idx++) - { - arranged += slines[idx] + " "; - } - if ((isNumeric(slines[0])) && arranged != null) - { - if (slines[1] != null && slines[1].startsWith("[")) - { - arranged = arranged.substring(5); - slines[1] = slines[1].replaceAll("\\[", "").replaceAll("\\]",""); - deck += arranged + " (" + renameSet(slines[1]) + ") * " + slines[0] + "\n"; - } - else - { - deck += arranged + "(*) * " + slines[0] + "\n"; - } - cardcount += Integer.parseInt(slines[0]); - } - } - } - File profile = new File(activePath+"/Res/settings/options.txt"); - if(profile.exists() && !profile.isDirectory()) - { - String profileName = getActiveProfile(profile); - if(profileName != "Missing!") - { - File rootProfiles = new File(activePath+"/Res/profiles/"+profileName); - if(rootProfiles.exists() && rootProfiles.isDirectory()) - { - //save deck - int countdeck = 1; - File[] files = rootProfiles.listFiles(); - for (int i = 0; i < files.length; i++) - {//check if there is available deck... - if(files[i].getName().startsWith("deck")) - countdeck++; - } - File toSave = new File(rootProfiles+"/deck"+countdeck+".txt"); - try - { - FileOutputStream fop = new FileOutputStream(toSave); - - // if file doesn't exists, then create it - if (!toSave.exists()) { - toSave.createNewFile(); - } - // get the content in bytes - byte[] contentInBytes = deck.getBytes(); - fop.write(contentInBytes); - fop.flush(); - fop.close(); - message = "Import Deck Success!\n"+cardcount+" total cards in this deck\n\n"+deck; - } - catch (IOException e) - { - message = e.getMessage(); - } - } - else - { - message = "Missing Folder!"; - } - } - } - else - { - message = "Invalid Profile!"; - } - } - else - { - message = "No errors, and file EMPTY"; - } - } - catch(IOException e) - { - message = e.getMessage(); - } - } - return message; + line = line.trim(); + if (!line.equals("") && cardcount < 61) // don't write out blank lines + { + String[] slines = line.split("\\s+"); + String arranged = ""; + for (int idx = 1; idx < slines.length; idx++) + { + arranged += slines[idx] + " "; + } + if ((isNumeric(slines[0])) && arranged != null) + { + if (slines[1] != null && slines[1].startsWith("[")) + { + arranged = arranged.substring(5); + slines[1] = slines[1].replaceAll("\\[", "").replaceAll("\\]", ""); + deck += arranged + " (" + renameSet(slines[1]) + ") * " + slines[0] + "\n"; + } else + { + deck += arranged + "(*) * " + slines[0] + "\n"; + } + cardcount += Integer.parseInt(slines[0]); + } + } + } + File profile = new File(activePath + "/Res/settings/options.txt"); + if (profile.exists() && !profile.isDirectory()) + { + String profileName = getActiveProfile(profile); + if (profileName != "Missing!") + { + File rootProfiles = new File(activePath + "/Res/profiles/" + profileName); + if (rootProfiles.exists() && rootProfiles.isDirectory()) + { + //save deck + int countdeck = 1; + File[] files = rootProfiles.listFiles(); + for (int i = 0; i < files.length; i++) + {//check if there is available deck... + if (files[i].getName().startsWith("deck")) + countdeck++; + } + File toSave = new File(rootProfiles + "/deck" + countdeck + ".txt"); + try + { + FileOutputStream fop = new FileOutputStream(toSave); + + // if file doesn't exists, then create it + if (!toSave.exists()) + { + toSave.createNewFile(); + } + // get the content in bytes + byte[] contentInBytes = deck.getBytes(); + fop.write(contentInBytes); + fop.flush(); + fop.close(); + message = "Import Deck Success!\n" + cardcount + " total cards in this deck\n\n" + deck; + } catch (IOException e) + { + message = e.getMessage(); + } + } else + { + message = "Missing Folder!"; + } + } + } else + { + message = "Invalid Profile!"; + } + } else + { + message = "No errors, and file EMPTY"; + } + } catch (IOException e) + { + message = e.getMessage(); + } + } + return message; } private static boolean isNumeric(String input) @@ -135,7 +129,7 @@ public class DeckImporter } return true; } - + private static String getActiveProfile(File mypath) { String name = ""; @@ -158,7 +152,7 @@ public class DeckImporter } return name; } - + private static String renameSet(String set) { if (set == "") @@ -278,5 +272,4 @@ public class DeckImporter else return set; } - } diff --git a/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java b/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java index 622e89bad..ce2c37c7c 100644 --- a/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java +++ b/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java @@ -310,84 +310,95 @@ public class StorageOptions * * @return true if the device is rooted, false otherwise. */ - public static boolean isRooted() { - - // get from build info - String buildTags = android.os.Build.TAGS; - if (buildTags != null && buildTags.contains("test-keys")) { - return true; - } - - // check if /system/app/Superuser.apk is present - try { - File file = new File("/system/app/Superuser.apk"); - if (file.exists()) { - return true; - } - } - catch (Exception e1) { - // ignore - } - try { - File file = new File("/system/app/Superuser/Superuser.apk"); - if (file.exists()) { - return true; - } - } - catch (Exception e1) { - // ignore - } - //SuperSU - try { - File file = new File("/system/app/SuperSU.apk"); - if (file.exists()) { - return true; - } - } - catch (Exception e1) { - // ignore - } - try { - File file = new File("/system/app/SuperSU/SuperSU.apk"); - if (file.exists()) { - return true; - } - } - catch (Exception e1) { - // ignore - } - // try executing commands - return canExecuteCommand("/system/xbin/which su") - || canExecuteCommand("/system/bin/which su") || canExecuteCommand("which su"); - } - - // executes a command on the system - private static boolean canExecuteCommand(String command) { - boolean executedSuccesfully; - try { - Runtime.getRuntime().exec(command); - executedSuccesfully = true; - } - catch (Exception e) { - executedSuccesfully = false; - } - - return executedSuccesfully; - } - - private static boolean findForcemount(){ - try + public static boolean isRooted() { - File file = new File(System.getenv("EXTERNAL_STORAGE")+"/forcemount"); - if (file.exists()) + // get from build info + String buildTags = android.os.Build.TAGS; + if (buildTags != null && buildTags.contains("test-keys")) { return true; } - } - catch (Exception e1) + + // check if /system/app/Superuser.apk is present + try + { + File file = new File("/system/app/Superuser.apk"); + if (file.exists()) + { + return true; + } + } catch (Exception e1) + { + // ignore + } + try + { + File file = new File("/system/app/Superuser/Superuser.apk"); + if (file.exists()) + { + return true; + } + } catch (Exception e1) + { + // ignore + } + //SuperSU + try + { + File file = new File("/system/app/SuperSU.apk"); + if (file.exists()) + { + return true; + } + } catch (Exception e1) + { + // ignore + } + try + { + File file = new File("/system/app/SuperSU/SuperSU.apk"); + if (file.exists()) + { + return true; + } + } catch (Exception e1) + { + // ignore + } + // try executing commands + return canExecuteCommand("/system/xbin/which su") + || canExecuteCommand("/system/bin/which su") || canExecuteCommand("which su"); + } + + // executes a command on the system + private static boolean canExecuteCommand(String command) { + boolean executedSuccesfully; + try + { + Runtime.getRuntime().exec(command); + executedSuccesfully = true; + } catch (Exception e) + { + executedSuccesfully = false; + } + + return executedSuccesfully; + } + + private static boolean findForcemount() + { + try + { + File file = new File(System.getenv("EXTERNAL_STORAGE") + "/forcemount"); + if (file.exists()) + { + return true; + } + } catch (Exception e1) + { + return false; + } return false; } - return false; - } } diff --git a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java index 0b8f093d8..64b2a95b4 100644 --- a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java +++ b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java @@ -14,8 +14,6 @@ import java.net.URLConnection; import java.util.ArrayList; import java.util.Scanner; - - import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLContext; @@ -1096,7 +1094,6 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK try { - EGL10 egl = (EGL10) EGLContext.getEGL(); EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); @@ -1162,7 +1159,6 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK EGL10 egl = (EGL10) EGLContext.getEGL(); if (mEGLSurface != null) { - /* * Unbind and destroy the old EGL surface, if there is one. */ @@ -1197,7 +1193,6 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK // EGL buffer flip public void flipEGL() { - if (!mSurfaceValid) { createSurface(this.getHolder()); @@ -1223,7 +1218,6 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK Log.e("SDL", s.toString()); } } - } // Key events @@ -1234,6 +1228,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) return false; + if (event.getAction() == KeyEvent.ACTION_DOWN) { // Log.d("SDL", "key down: " + keyCode); @@ -1252,7 +1247,6 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK // Touch events public boolean onTouch(View v, MotionEvent event) { - for (int index = 0; index < event.getPointerCount(); ++index) { int action = event.getActionMasked(); From b601a549d07c71f3980397baadee322c7c269aed Mon Sep 17 00:00:00 2001 From: Rolzad73 Date: Thu, 4 Aug 2016 11:26:41 -0400 Subject: [PATCH 5/8] - added option for Android x86 build types --- JGE/Dependencies/SDL/src/atomic/SDL_spinlock.c | 7 +++++++ projects/mtg/Android/jni/Application.mk | 1 + 2 files changed, 8 insertions(+) diff --git a/JGE/Dependencies/SDL/src/atomic/SDL_spinlock.c b/JGE/Dependencies/SDL/src/atomic/SDL_spinlock.c index f74de81c7..07c26308a 100644 --- a/JGE/Dependencies/SDL/src/atomic/SDL_spinlock.c +++ b/JGE/Dependencies/SDL/src/atomic/SDL_spinlock.c @@ -77,6 +77,13 @@ SDL_AtomicTryLock(SDL_SpinLock *lock) : "=&r" (result) : "r" (1), "r" (lock) : "cc", "memory"); return (result == 0); +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + int result; + __asm__ __volatile__( + "lock ; xchgl %0, (%1)\n" + : "=r" (result) : "r" (lock), "0" (1) : "cc", "memory"); + return (result == 0); + #else /* Need CPU instructions for spinlock here! */ __need_spinlock_implementation__ diff --git a/projects/mtg/Android/jni/Application.mk b/projects/mtg/Android/jni/Application.mk index 01804bb30..53a2e0f9d 100644 --- a/projects/mtg/Android/jni/Application.mk +++ b/projects/mtg/Android/jni/Application.mk @@ -1,6 +1,7 @@ APP_PROJECT_PATH := $(call my-dir)/.. APP_CPPFLAGS += -frtti -fexceptions APP_ABI := armeabi armeabi-v7a +#APP_ABI := x86 # mainly for emulators APP_STL := gnustl_static APP_MODULES := libpng libjpeg main SDL From 77dfd51b28e2ee0d94f6be718c2886a0704f99d0 Mon Sep 17 00:00:00 2001 From: Rolzad73 Date: Thu, 4 Aug 2016 13:15:49 -0400 Subject: [PATCH 6/8] - Android debug logging organization --- .../src/net/wagic/utils/StorageOptions.java | 13 +-- .../src/org/libsdl/app/SDLActivity.java | 100 +++++++++--------- 2 files changed, 56 insertions(+), 57 deletions(-) diff --git a/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java b/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java index ce2c37c7c..acac6faea 100644 --- a/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java +++ b/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java @@ -14,6 +14,7 @@ import android.util.Log; public class StorageOptions { + private static final String TAG = StorageOptions.class.getCanonicalName(); private static ArrayList mMounts = new ArrayList(); private static ArrayList mVold = new ArrayList(); @@ -77,11 +78,11 @@ public class StorageOptions } catch (FileNotFoundException fnfex) { // if proc/mount doesn't exist we just use - Log.i(StorageOptions.class.getCanonicalName(), fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point"); + Log.i(TAG, fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point"); mMounts.add(defaultMountPoint); } catch (Exception e) { - Log.e(StorageOptions.class.getCanonicalName(), e.getMessage() + ": unknown exception while reading mounts file"); + Log.e(TAG, e.getMessage() + ": unknown exception while reading mounts file"); mMounts.add(defaultMountPoint); } } @@ -111,11 +112,11 @@ public class StorageOptions } catch (FileNotFoundException fnfex) { // if proc/mount doesn't exist we just use - Log.i(StorageOptions.class.getCanonicalName(), fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point"); + Log.i(TAG, fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point"); mMounts.add(defaultMountPoint); } catch (Exception e) { - Log.e(StorageOptions.class.getCanonicalName(), e.getMessage() + ": unknown exception while reading mounts file"); + Log.e(TAG, e.getMessage() + ": unknown exception while reading mounts file"); mMounts.add(defaultMountPoint); } } @@ -144,11 +145,11 @@ public class StorageOptions } catch (FileNotFoundException fnfex) { // if vold.fstab doesn't exist we use the value gathered from the Environment - Log.i(StorageOptions.class.getCanonicalName(), fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point"); + Log.i(TAG, fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point"); mMounts.add(defaultMountPoint); } catch (Exception e) { - Log.e(StorageOptions.class.getCanonicalName(), e.getMessage() + ": unknown exception while reading mounts file"); + Log.e(TAG, e.getMessage() + ": unknown exception while reading mounts file"); mMounts.add(defaultMountPoint); } } diff --git a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java index 64b2a95b4..7c07936f0 100644 --- a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java +++ b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java @@ -66,12 +66,11 @@ import android.widget.FrameLayout.LayoutParams; */ public class SDLActivity extends Activity implements OnKeyListener { + private static final String TAG = SDLActivity.class.getCanonicalName(); + //import deck globals - public ArrayList myresult = new ArrayList(); - public String myclickedItem = ""; - - // TAG used for debugging in DDMS - public static String TAG = Activity.class.getCanonicalName(); + public ArrayList myresult = new ArrayList(); + public String myclickedItem = ""; // Main components private static SDLActivity mSingleton; @@ -350,7 +349,7 @@ public class SDLActivity extends Activity implements OnKeyListener updateStorageLocations(); } catch (Exception ioex) { - Log.e("SDL", "An error occurred in setting up the storage locations."); + Log.e(TAG, "An error occurred in setting up the storage locations."); } } @@ -495,7 +494,7 @@ public class SDLActivity extends Activity implements OnKeyListener @Override protected void onCreate(Bundle savedInstanceState) { - // Log.v("SDL", "onCreate()"); + //Log.d(TAG, "onCreate()"); super.onCreate(savedInstanceState); // So we can call stuff from static callbacks @@ -530,7 +529,7 @@ public class SDLActivity extends Activity implements OnKeyListener @Override protected void onPause() { - // Log.v("SDL", "onPause()"); + // Log.d(TAG, "onPause()"); super.onPause(); SDLActivity.nativePause(); } @@ -538,7 +537,7 @@ public class SDLActivity extends Activity implements OnKeyListener @Override protected void onResume() { - // Log.v("SDL", "onResume()"); + // Log.d(TAG, "onResume()"); super.onResume(); SDLActivity.nativeResume(); } @@ -546,8 +545,7 @@ public class SDLActivity extends Activity implements OnKeyListener @Override public void onDestroy() { - // Log.v("SDL", "onDestroy()"); - + // Log.d(TAG, "onDestroy()"); super.onDestroy(); mSurface.onDestroy(); } @@ -658,7 +656,7 @@ public class SDLActivity extends Activity implements OnKeyListener int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT; int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1); - // Log.v("SDL", "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + ((float)sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer"); + // Log.d(TAG, "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + ((float)sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer"); // Let the user pick a larger buffer if they really want -- but ye // gods they probably shouldn't, the minimums are horrifyingly high @@ -669,7 +667,7 @@ public class SDLActivity extends Activity implements OnKeyListener audioStartThread(); - // Log.v("SDL", "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + ((float)mAudioTrack.getSampleRate() / 1000f) + + // Log.d(TAG, "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + ((float)mAudioTrack.getSampleRate() / 1000f) + // "kHz, " + desiredFrames + " frames buffer"); if (is16Bit) @@ -717,7 +715,7 @@ public class SDLActivity extends Activity implements OnKeyListener } } else { - Log.w("SDL", "SDL audio: error return from write(short)"); + Log.w(TAG, "SDL audio: error return from write(short)"); return; } } @@ -742,7 +740,7 @@ public class SDLActivity extends Activity implements OnKeyListener } } else { - Log.w("SDL", "SDL audio: error return from write(short)"); + Log.w(TAG, "SDL audio: error return from write(short)"); return; } } @@ -757,11 +755,11 @@ public class SDLActivity extends Activity implements OnKeyListener mAudioThread.join(); } catch (Exception e) { - Log.v("SDL", "Problem stopping audio thread: " + e); + Log.e(TAG, "Problem stopping audio thread: " + e); } mAudioThread = null; - // Log.v("SDL", "Finished waiting for audio thread"); + // Log.d(TAG, "Finished waiting for audio thread"); } if (mAudioTrack != null) @@ -773,7 +771,7 @@ public class SDLActivity extends Activity implements OnKeyListener class DownloadFileAsync extends AsyncTask { - final String TAG1 = DownloadFileAsync.class.getCanonicalName(); + private final String TAG = DownloadFileAsync.class.getCanonicalName(); @Override protected void onPreExecute() @@ -792,7 +790,6 @@ public class SDLActivity extends Activity implements OnKeyListener try { - // // Prepare the sdcard folders in order to download the resource file // @@ -813,7 +810,7 @@ public class SDLActivity extends Activity implements OnKeyListener conexion.connect(); int lengthOfFile = conexion.getContentLength(); - // Log.d("Wagic - " + TAG1, " Length of file: " + lengthOfFile); + // Log.d(TAG, " Length of file: " + lengthOfFile); input = new BufferedInputStream(url.openStream()); // create a File object for the output file @@ -836,8 +833,8 @@ public class SDLActivity extends Activity implements OnKeyListener { String errorMessage = "An error happened while downloading the resources. It could be that our server is temporarily down, that your device is not connected to a network, or that we cannot write to " + mSingleton.getSystemStorageLocation() + ". Please check your phone settings and try again. For more help please go to http://wagic.net"; mSingleton.downloadError(errorMessage); - Log.e(TAG1, errorMessage); - Log.e(TAG1, e.getMessage()); + Log.e(TAG, errorMessage); + Log.e(TAG, e.getMessage()); } return Long.valueOf(totalBytes); @@ -847,7 +844,7 @@ public class SDLActivity extends Activity implements OnKeyListener { if (progress[0] != mProgressDialog.getProgress()) { - // Log.d("Wagic - " + TAG1, "current progress : " + progress[0]); + // Log.d(TAG, "current progress : " + progress[0]); mProgressDialog.setProgress(progress[0]); } } @@ -920,6 +917,7 @@ public class SDLActivity extends Activity implements OnKeyListener */ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnKeyListener, View.OnTouchListener, SensorEventListener { + private static final String TAG = SDLSurface.class.getCanonicalName(); // This is what SDL runs in. It invokes SDL_main(), eventually private Thread mSDLThread; @@ -959,7 +957,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK SDLActivity.nativeQuit(); - Log.v("SDL", "SDL thread terminated"); + Log.d(TAG, "SDL thread terminated"); // On exit, tear everything down for a fresh restart next time. System.exit(0); @@ -986,7 +984,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK // Called when we have a valid drawing surface public void surfaceCreated(SurfaceHolder holder) { - Log.v("SDL", "surfaceCreated()"); + //Log.d(TAG, "surfaceCreated()"); enableSensor(Sensor.TYPE_ACCELEROMETER, true); } @@ -1006,18 +1004,18 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK mSDLThread.join(); } catch (Exception e) { - Log.v("SDL", "Problem stopping thread: " + e); + Log.e(TAG, "Problem stopping thread: " + e); } mSDLThread = null; - // Log.v("SDL", "Finished waiting for SDL thread"); + // Log.d(TAG, "Finished waiting for SDL thread"); } } // Called when we lose the surface public void surfaceDestroyed(SurfaceHolder holder) { - Log.v("SDL", "surfaceDestroyed()"); + Log.d(TAG, "surfaceDestroyed()"); synchronized (mSemSurface) { mSurfaceValid = false; @@ -1029,51 +1027,51 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK // Called when the surface is resized public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - Log.d("SDL", "surfaceChanged()"); + Log.d(TAG, "surfaceChanged()"); int sdlFormat = 0x85151002; // SDL_PIXELFORMAT_RGB565 by default switch (format) { case PixelFormat.A_8: - Log.d("SDL", "pixel format A_8"); + Log.d("TAG", "pixel format A_8"); break; case PixelFormat.LA_88: - Log.d("SDL", "pixel format LA_88"); + Log.d("TAG", "pixel format LA_88"); break; case PixelFormat.L_8: - Log.d("SDL", "pixel format L_8"); + Log.d("TAG", "pixel format L_8"); break; case PixelFormat.RGBA_4444: - Log.d("SDL", "pixel format RGBA_4444"); + Log.d("TAG", "pixel format RGBA_4444"); sdlFormat = 0x85421002; // SDL_PIXELFORMAT_RGBA4444 break; case PixelFormat.RGBA_5551: - Log.d("SDL", "pixel format RGBA_5551"); + Log.d(TAG, "pixel format RGBA_5551"); sdlFormat = 0x85441002; // SDL_PIXELFORMAT_RGBA5551 break; case PixelFormat.RGBA_8888: - Log.d("SDL", "pixel format RGBA_8888"); + Log.d(TAG, "pixel format RGBA_8888"); sdlFormat = 0x86462004; // SDL_PIXELFORMAT_RGBA8888 break; case PixelFormat.RGBX_8888: - Log.d("SDL", "pixel format RGBX_8888"); + Log.d(TAG, "pixel format RGBX_8888"); sdlFormat = 0x86262004; // SDL_PIXELFORMAT_RGBX8888 break; case PixelFormat.RGB_332: - Log.d("SDL", "pixel format RGB_332"); + Log.d(TAG, "pixel format RGB_332"); sdlFormat = 0x84110801; // SDL_PIXELFORMAT_RGB332 break; case PixelFormat.RGB_565: - Log.d("SDL", "pixel format RGB_565"); + Log.d(TAG, "pixel format RGB_565"); sdlFormat = 0x85151002; // SDL_PIXELFORMAT_RGB565 break; case PixelFormat.RGB_888: - Log.d("SDL", "pixel format RGB_888"); + Log.d(TAG, "pixel format RGB_888"); // Not sure this is right, maybe SDL_PIXELFORMAT_RGB24 instead? sdlFormat = 0x86161804; // SDL_PIXELFORMAT_RGB888 break; default: - Log.d("SDL", "pixel format unknown " + format); + Log.d(TAG, "pixel format unknown " + format); break; } SDLActivity.onNativeResize(width, height, sdlFormat); @@ -1090,7 +1088,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK // EGL functions public boolean initEGL(int majorVersion, int minorVersion) { - Log.d("SDL", "Starting up OpenGL ES " + majorVersion + "." + minorVersion); + Log.d(TAG, "Starting up OpenGL ES " + majorVersion + "." + minorVersion); try { @@ -1119,7 +1117,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK int[] num_config = new int[1]; if (!egl.eglChooseConfig(dpy, configSpec, configs, 1, num_config) || num_config[0] == 0) { - Log.e("SDL", "No EGL config available"); + Log.e(TAG, "No EGL config available"); return false; } mEGLConfig = configs[0]; @@ -1127,7 +1125,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK EGLContext ctx = egl.eglCreateContext(dpy, mEGLConfig, EGL10.EGL_NO_CONTEXT, null); if (ctx == EGL10.EGL_NO_CONTEXT) { - Log.e("SDL", "Couldn't create context"); + Log.e(TAG, "Couldn't create context"); return false; } @@ -1141,10 +1139,10 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK } catch (Exception e) { - Log.e("SDL", e + ""); + Log.e(TAG, e + ""); for (StackTraceElement s : e.getStackTrace()) { - Log.e("SDL", s.toString()); + Log.e(TAG, s.toString()); } } @@ -1172,7 +1170,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK mEGLSurface = egl.eglCreateWindowSurface(mEGLDisplay, mEGLConfig, holder, null); if (mEGLSurface == EGL10.EGL_NO_SURFACE) { - Log.e("SDL", "Couldn't create surface"); + Log.e(TAG, "Couldn't create surface"); return false; } @@ -1181,7 +1179,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK */ if (!egl.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext)) { - Log.e("SDL", "Couldn't make context current"); + Log.e(TAG, "Couldn't make context current"); return false; } @@ -1212,10 +1210,10 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK } catch (Exception e) { - Log.e("SDL", "flipEGL(): " + e); + Log.e(TAG, "flipEGL(): " + e); for (StackTraceElement s : e.getStackTrace()) { - Log.e("SDL", s.toString()); + Log.e(TAG, s.toString()); } } } @@ -1231,12 +1229,12 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, View.OnK if (event.getAction() == KeyEvent.ACTION_DOWN) { - // Log.d("SDL", "key down: " + keyCode); + // Log.d(TAG, "key down: " + keyCode); SDLActivity.onNativeKeyDown(keyCode); return true; } else if (event.getAction() == KeyEvent.ACTION_UP) { - // Log.d("SDL", "key up: " + keyCode); + // Log.d(TAG, "key up: " + keyCode); SDLActivity.onNativeKeyUp(keyCode); return true; } From 0c4e72ece201c3518f42c4b7ab0553b85f58ee5b Mon Sep 17 00:00:00 2001 From: Rolzad73 Date: Thu, 4 Aug 2016 14:53:52 -0400 Subject: [PATCH 7/8] - attempt to fix storage location list issue on Android 4.3+ --- .../src/net/wagic/utils/StorageOptions.java | 30 ++++++++++++------- .../src/org/libsdl/app/SDLActivity.java | 2 -- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java b/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java index acac6faea..8ab6d2090 100644 --- a/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java +++ b/projects/mtg/Android/src/net/wagic/utils/StorageOptions.java @@ -149,7 +149,7 @@ public class StorageOptions mMounts.add(defaultMountPoint); } catch (Exception e) { - Log.e(TAG, e.getMessage() + ": unknown exception while reading mounts file"); + Log.e(TAG, e.getMessage() + ": unknown exception while reading vold.fstab file"); mMounts.add(defaultMountPoint); } } @@ -175,15 +175,18 @@ public class StorageOptions { /* * Sometimes the two lists of mount points will be different. We only want those mount points that are in both list. - * + * * Compare the two lists together and remove items that are not in both lists. */ - for (int i = 0; i < mMounts.size(); i++) + if (mVold.size() > 0) { - String mount = mMounts.get(i); - if (!mVold.contains(mount)) - mMounts.remove(i--); + for (int i = 0; i < mMounts.size(); i++) + { + String mount = mMounts.get(i); + if (!mVold.contains(mount)) + mMounts.remove(i--); + } } // don't need this anymore, clear the vold list to reduce memory @@ -205,9 +208,10 @@ public class StorageOptions if (!root.exists() || !root.isDirectory() || !root.canWrite()) mMounts.remove(i--); } - + if (t == 0 && Build.VERSION.SDK_INT >= 16 && findForcemount()) - {//if none is found lets force it for Jellybean and above... + { + //if none is found lets force it for Jellybean and above... if (System.getenv("EXTERNAL_STORAGE") != null) { File root = new File(System.getenv("EXTERNAL_STORAGE")); @@ -225,7 +229,7 @@ public class StorageOptions } } } - + if (System.getenv("SECONDARY_STORAGE") != null) { File root = new File(System.getenv("SECONDARY_STORAGE")); @@ -248,6 +252,7 @@ public class StorageOptions private static void setProperties() { + Log.d(TAG, "setProperties()"); /* * At this point all the paths in the list should be valid. Build the public properties. */ @@ -269,7 +274,8 @@ public class StorageOptions else { for (String path : mMounts) - { // TODO: /mnt/sdcard is assumed to always mean internal storage. Use this comparison until there is a better way to do this + { + // TODO: /mnt/sdcard is assumed to always mean internal storage. Use this comparison until there is a better way to do this if ("/mnt/sdcard".equalsIgnoreCase(path)) mLabels.add("Built-in Storage"); else @@ -389,6 +395,7 @@ public class StorageOptions private static boolean findForcemount() { + Log.d(TAG, "findForcemount()"); try { File file = new File(System.getenv("EXTERNAL_STORAGE") + "/forcemount"); @@ -396,8 +403,9 @@ public class StorageOptions { return true; } - } catch (Exception e1) + } catch (Exception e) { + Log.w(TAG, e.getMessage()); return false; } return false; diff --git a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java index 7c07936f0..56b644caa 100644 --- a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java +++ b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java @@ -500,8 +500,6 @@ public class SDLActivity extends Activity implements OnKeyListener // So we can call stuff from static callbacks mSingleton = this; mContext = this.getApplicationContext(); - // get the current version of the app to set the core filename - String versionCodeString = getApplicationCode(); RES_FILENAME = getResourceName(); StorageOptions.determineStorageOptions(); From be98e0b543de3e2b04db9c3f6e3c3065c7bd4fdc Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 6 Aug 2016 01:40:21 -0500 Subject: [PATCH 8/8] Update CardGui.cpp Disabled temporary... --- projects/mtg/src/CardGui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index dd4db8ff7..de3779fae 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -1152,13 +1152,13 @@ void CardGui::RenderBig(MTGCard* card, const Pos& pos, bool thumb, bool noborder { MTGCard * fcard = MTGCollection()->getCardByName(kcard->name); quad = WResourceManager::Instance()->RetrieveCard(fcard); - } + }/* if (kcard->hasCopiedToken && !quad.get()) { MTGCard * tcard = MTGCollection()->getCardById(abs(kcard->copiedID)); quad = thumb ? WResourceManager::Instance()->RetrieveCardToken(tcard, RETRIEVE_THUMB, 1, abs(kcard->copiedID)) : WResourceManager::Instance()->RetrieveCardToken(tcard, RETRIEVE_NORMAL, 1, abs(kcard->copiedID)); - } + }*///temporary disabled this so it will not crash, this must be called when ingame -kevlahnota if (quad.get()) { if (quad->mHeight < quad->mWidth)