From 72f08ab8f35368351179ae9c6dfd0b3ee0ef15fe Mon Sep 17 00:00:00 2001 From: ubulem Date: Fri, 22 Apr 2016 19:26:56 +0300 Subject: [PATCH] latest changes --- build/android/AndroidManifest.xml.template | 1 - build/android/res/drawable/background.png | Bin 0 -> 7388 bytes build/android/res/drawable/bg.xml | 4 + .../res/drawable/custom_progress_bar.xml | 7 +- build/android/res/layout/activity_main.xml | 2 +- build/android/res/values-ru/strings.xml | 2 - build/android/res/values-v21/styles.xml | 10 ++ build/android/res/values/strings.xml | 4 +- build/android/res/values/styles.xml | 3 - .../src/mobi/MultiCraft/GameActivity.java | 29 +++--- .../mobi/MultiCraft/InputDialogActivity.java | 25 ++++- .../src/mobi/MultiCraft/MainActivity.java | 96 ++---------------- .../src/mobi/MultiCraft/Transliteration.java | 72 +++++++++++++ .../src/mobi/MultiCraft/UnzipService.java | 27 +++-- 14 files changed, 155 insertions(+), 127 deletions(-) create mode 100644 build/android/res/drawable/background.png create mode 100644 build/android/res/drawable/bg.xml create mode 100644 build/android/res/values-v21/styles.xml create mode 100644 build/android/src/mobi/MultiCraft/Transliteration.java diff --git a/build/android/AndroidManifest.xml.template b/build/android/AndroidManifest.xml.template index c19c92458..3b882ffe8 100644 --- a/build/android/AndroidManifest.xml.template +++ b/build/android/AndroidManifest.xml.template @@ -49,7 +49,6 @@ *mwl?U+qMJ6>#yu@o_V;jsa0b&stkdTlBLK4~qNFbpN5D2jdVZeBI;w<)f9M2@F zRLzT-Z#UI*e*M&`F)v!rz0d9Coc~$-bgT8B*N>I^eeajA#`c!gkKQh8UGJ0!{U4M& z-S3vIb34kPFC8e)M|PJl$M=;lqHV^zwVwFB_k*(0yRBS5_D1>rbbI;J%z^Uf%LmKX z(dSETY+w28;_mYK=-%>tcz0Pl*H#`4Y%dRE?z=tPYFj_E%{q1co2P#3S=YXC`ggvY zyV7&*@M~qZ<2U8nvA4?g&NuvC->;nft$yaI@9+1%|HAs{z7ae<9oiYZY%gD2+*>|A zzti`+?tkApSy~qSV-WvE0PrZ7GqDMMem1xup4o5}s4|OLEi__-q$c4K)zQAx)XD* z2196=ZhyHPp4k6VS*{ERI3WOiZp8ObhIjq%t<%57V1gLy@2@m}9BY~P z?wNP33xG<)PxHsh=NI>s&!SJufZqp^|9%r{T(Ql#itxE9Sfj#AR z5V3Upt-A1!^GD5LVqns!n76G0_sLj0iD>2rVx4z0+P#Xq&#!r9An@dc3ZQpy#{iwNO`11c3UI1}#VpTJ3Ky zi``)wvm=Qyg+i81oI- zR63eIcS0EY0MMMX9j^rlp=E6^S6W5_fD~r@9%CDyvmAnMAz-=dgYqc<=9KJ1`K;9JG)L*)~+6q%#TEN#>6H#-tW!ONi%z zsViGXWS#i#P&m|Znp@X~%k8PN<=*^wdAK;08c=RtJXt0Bx9gpaYG3IrpN{U8Q=o-P zV?3jWc|#)!Y4c5VEW&He(U-(?#kL`P@T*w~DwJ?eK?%ft*2Hw+*y2waqLVytrG~w@?i2aT9B`NQQ zjsGSbX84K8&Z??6rU%RNct7T;D9>NV{e6+6+spA$Z`v0L)uHm2NUC`2Plk4*4bYr# zF!$@~z-EJKbkR&n65+6Q>-%kUaBta&Q2lslKLMLx0t5*DCi8-=HMlcW@pp}1 z=-EwLRFU+BUr#=Ox@#P3rQ_>hJ`=QieNE0l^?}X|&8?C8blWSkMJ>#72Pa+gg+B$; zgpyeya6L8J>wC)rBtV6M@L(_!oCsf=E3;*F;%vDYD!Ul=3Oxhw_6T|JMtrsC8zy06 z#Ki9vp?R4g$uP~!3?2=)m4^d60)*|xlXlGihJNW2 z0)UqY1fZN{XwM<$Op7u!Y8g)PLJ0NQ`tHi1svh@afz9#GvOYgm*00Z$kJlE;{76rE zezmWBztn>`gQySNAraE%Gc05Q1U3u@fk~vK#(R#Dq&YXC4dV!| zr`#CWS8n$0ua0^x;OwWpjR{EKQy-&#s*-KioW*@!3QeC&~D{o0I@ZUA=!X+(aXRjLY9d zUyA~rv!kLmSZv%T3xVdZKn?FHPlon{Gd) zns7i11Bc7v#6Y=w^Ozk`m5XJm zYlry=fF@uVeV&<<$Xqc`L**~t*~EF@m;ewE!=d?1eYPUJkuD9%Fv;<;SCbpZhI1E2 zwWzx2K-Fl2KG2p2Sk#kK^qcUNnn7Zuh+z4J@CpEPNz<1GI?B?>>2iB6K)AD5HY2sZ zd1b6zy3kcF^>t>5CIHMc2WuNIX9(b zIjGFq^ve*0SbGPH0?jx;dGaT@%e-{>tuh(;dgc-{O+tepK>D0j9AU3YZsEi`)iQ8U1)L*l-^yg5np3z!$?D&tpz(WzjX^d~~{@^xxS@|h=?gQPGm z1r|oF0bC%MXQs0OL{-RMWBTB0<{)Kb&}Sb50FpMhaZTpAc(VMk*j0YKF%VAtm<*8* z;FXV(FvbyRLBzBBOiVI9d&h%&)=58|JgjeIYe13~3yX&kF2hqx@H?s2Hr~-}u{k=n z4g?wm0PB+&0GXOZi4bUyh=LJjHW$TFdlb7q%**|ar=d(zZo~Pe?*S^Ohv7d(NSAY< zQ)Fvpri5TN$oU|S%3v^yq8cE)uW73IJso|f4wS9YgH58*Uz3@XJn%>(KzOOK^B{O4 zBzEPWW0H|v z{o&H#ri>Pi6Ev}W9zpEVGk!cEZev`=WD=8Sjjn2gv5zKCl&#tR@?>ee+@I;u-=4se zKcN9Y#k_eVZLNh=QpOyqA)XWCC^@P0>PljWwqBOcWqDyruc+`=5XLG1ua@~J)@Fs- zGn?o_tLzcXVJ>})m&>&LkqM?FLL}8RkS6dE93+B-mxuk^8{)5>l`O@k=~8(dVM%iG zVD@~ZsGZbL6A8p$pkk0$&&m-;gc%zcT9D;9u^b=(%<`ASiRP(0FxQ%f(_9)hNnnRw z=L<+ZO;t0GzO;alflDa-1T(21v`C(llb&)yKu8svKKP1qIOdy5ZnU+tyMo{y)e&wk zPDZ(FG1^kuxHeX9&P_%NJ!&!0Aj1!aG0q$iT~+U&%bn$~*N!F#7^G$TA=0yg_Dz`C zU&5}xm}tYiJj57bTJlx>!&D?RsWq6+2qcH`JyT&m$vS=m!1uF<8x7EONMdOLY1vm> zkO{EET1XfOz%KPfOukSaEzgt(OEcwRY@p^ZoGSAt-!~Qm#@iJFfmcVM%@8Koqe2MA z*&^pe3#G}V6l0Cq4uo0({xv&`Gg2=h=g1OX*; z0**DA$AFNVH2_|o2BlBX_vx^3Yg5yNVN(2SYUJn?pUI2eVHAV9$aV8GMvg(MJ_#;Z0}#{X^ZFh@!-)LOq-yQxP!8QG6kzta?RTPF{6^5E3^G#4nGskO7f>T?CK zmG-@S{LQTEmxZuF9sI^tGAHZ1XIB;&NrzNypb!=ITfMQCp(x8-8Owzw??nev zNG$+D(9zTq&24Qe4NX>G%wfGQYfS;P1Tk)(od1l=aO$`8ff@*OR zB56N*uLE!l;z4=eA6Cvr>nlGke#D!bm{c$T1jJw#7!{a|%``0!KdmF|$^tQI4lOIf z%p?K+GUoIhJ*4^VT;v^bfMPE8?&&uUlx6}7$l3TI>*+(Yj3HP&6JCp|S=fv8q?ws% zCS?xZQzeHMKdqjLy+hpx$oM#@jLX^!r^~?0A|xR4e1Wq|f5V1J*;w;14gSI0Ks8=8 zvJqo~x6Zt$;3`C;4bze~%%W2i(X4|9K1d@d8j(9gfYzd@A2L>_{UiV{fB-=RZidHy z)}+a4i~I$EOq_A}h3#}|lXYl;tuPP}jaYWhP7{dC=!`YT(~-S24t>rYm;u`Kq3&pu z?_)4a@0>6*vyR9lEXzs(FDI$=w|s$`FI3iNlTe$irs#tRX9ip0^fpJ@sSgBYdx!*r zJ{fOc06+r_^)sJS9Qy;21{frjJHm9xS#QXU4&zTJ;~0PXSX2Bs(^Pf&2y1Kl8fOh5 zmIF1v?*Kw8a6AEL2LIt^!BXzV=M_EK>)nKJT-4L zs~)Hbb53ie$q3>Utr-$*<^Tdsp;5p9Z~}DiLhR+Ij+Lz_;*uf>i%tnf)-E$~0)VDg zp^wueNtU%`y)A0PwlZ8o0kn%{(;gb5fqxF>m?`v;yMpz;02Cl=&}dH4UyN^22Ng5NxFQ1$zNPG#?Yk zyfhe%O%xzGFR3&Dd`Fx{H5DJy1oD{)4^;v}9+8s}Ey>avPmlSr0Mc<5=~G2an3n{X z;yaL5Blqwgq2|k7oHhN9snj?PXi{tYe<4tW;?MN+Ig>0j>6^}$RshO-?^;w78mm1! z^X^R?CLTsebt0p?+36dJ7$z`Sna{9e4h_L3&f-TpIF~DwzDN)e4qEeq)#52}+fMVn za;s;1Sqd81ENL0bjul3zH)#SR3%HUtDRCaLr5S(YoOsbI?cF0kfB#AOx4ADjc35ND!s>w?tjTSYY&&T$Bb*600oGp)L z&y}r+R5bK?9IOb>oPH~hmFADVY11PGt%&D=2}zO!J7TjIlc&1_NY&Cq3p05lGyjGqrPn3_Nc5(kgTLp4C?+2LR#_4xRm5sRoSr^Rw08^w-B20nW z(-6$7tFa?S&N(s*+RolF3@ zS)UNX%pre}WzvXDz+#^fj`&hnc`|*nJXn~h^@^=1+B{ufDw}hIXwEHj69q75g8~uE z+o@$;&7#y-c$1u1fcjHqKp?DnHYY|vqEU!zZjW|wRQl8mFO#CR$+KnUY-m{T5$6Da z$kIEo(!)!Isdnz)?E%olJORfU=fzG@$JM;1j2BwuXnk|_YFV9(RLINW0+Yzpls#iUn>&Vl0vp487CpS9ExBK?-qz@$axd(1 zHO~9yhfV<@eF+~!>gI7S>DmnYCYZcUMkB>_k%dn{TP9vv5(_YshbH@69_y=To=bzr z%W^ncLNs5CG!RDhsD{CLRK_DO_wH)E^~r4{gfUKuiD+VKhMxNTuNxn6Fw|FJmB+VO zYL8ZvsFj)Fvav8#pNmsNh@ItJ0^0xYM;nX%EIgP^i>WvB-LTAlOL@c>}V3>5YY8;L+yMUe>WOl9s=KUBpGy$R{KSQF^$P^(KNT^NDKCAJrWQgb7e%p%2qM_zR__`~4rX zF{SaW+?Y^WED0fbl5tlM^N@FSl_OL2WfnkSTGZ5&zW`2n=@VsnYOpMh_LPO8)8+cv z{pCt;M?{Y%)Y^Kh-~a**>_6`adSXTc0;T{!n`vim!GVBgx63s95V=hjUR&P=F?nT- zEm0?+AT)1ZS{xB+!+e27h0Z*zz&MYsKZY?$Gnfky0IX3*{jYX5q4Vz0;j$cefEK&r zlJuFqZliO&9I1I?y~ZRlB>%VW)o7Wdk!+U2yd$L41U%3_j+l9lga%mOZq$6}Xpx$$ zB3Z)+fXT$xOolL>+hyM!Pf_R9FqzE6^dX@PR~Bbl7S09$pfMwAj_|t!yP8b!WV0zE z1dMnx$y`&ZO_L@&??Z{2KQd3DCeKNtk-Ksz5tDy(oB7yWC zZ%mQ^t?gM)n_7t=BG_6MAOJv(I77tA7y$qX?;LWD9Sk23DX$#i{^0&{`%Iu4m706! zm9KZFFX0rMWG3SIk2m_u^EgufZm|c${ELvsyDO5~aOD|ZUVgGSpgm%`cQi2lggt-y zfVw;U=gM*a3&aPA001BeHN~cgJ9!9@G`IrSLO@=8$XM$$5Wb5v7PDDQly7TUdtYL= z=i;_k>>u3CRi;|+-wgm~@Oe>5t4`@W5$Uz_>S}66?g6qg zgLzxDCu4`oPrrdqAed|V=sV@ok)XAAJ3ml`N2tc;9b}T`n3)Qiz8c@3dyBj*-NZ^L zK_}D7v@PDA9b4FwRR6KqX+aG5XDWR$FE&d)NQkOpJ~Pap-`dh&Gd?RvoSM&ee4gwU z)0ih10+E}bBOP)c#b=IhZD79e4_dS}Yn~jkdGZjZ% z2CFm^82=_qq{TFZi4Z&=K*gzAA|-Fn>nee6Qz!w9wA8>nvSLFf;cYRW@%cs*ukA2h zUdU5tjVa`X%9OU^X-Znl>NM$5UpH5y-+LG#7$8WbXjX!1p1ggE2WFJ#0KQ9z2#{82 zKAWdWgfOZTe*gr7d3yv~X!Ybfyes4@ipHdh$BrJY{l)`6~2Q=I?pT zl{+X4WUV07KYpwEwHB(?><%>mSQr4t00rX~&;KsFJ=t3xEKWy#Zo&T$10bbl4NPY< zNBE=t*3A+&^+kO8658Wwel+LqPs58SW&H#ycY=A)BkCAm*Kc8*1QB8Zww0F^X#_&3 zJoVR_bGq1_#l1kNG9OaFP@WFapmoee;bZ=INbGz^S(_UxpKPp_+f%*PQB);;w#}zt zo`wOK2C!diWlq8@^Tf)ADUaW2ED2-$g+va>`eK+i5rmePz|;lM-@+UsG8L6sWogP} z!k$eHpfp=l8sJ}8*r^+)2sKZh2&H-W$E)?psPv3=m1j4vl>75z<;G~Ye`lkrX=-6o zZJ3w5uzM!vyUkOkwE8M#3AHL!0Jj+fLWZ;#%rZ;mc{y8n6_sd$=7kKPaot9H@!UA1`%8v9Y-}$Dvt>BUSaGsw9ShJR#Ef0FtNv)Gm+65r=SUo=0No zV2uMr{@)_veFnm6Y@cuTHlf;D_5(b>@hJc~fG4e>0mhpr|HA~p*8e~L_*KG<9|pz% O0000 + \ No newline at end of file diff --git a/build/android/res/drawable/custom_progress_bar.xml b/build/android/res/drawable/custom_progress_bar.xml index 29bc3c858..ec233f276 100644 --- a/build/android/res/drawable/custom_progress_bar.xml +++ b/build/android/res/drawable/custom_progress_bar.xml @@ -1,14 +1,13 @@ - + android:endColor="#808080" + android:startColor="#808080" /> diff --git a/build/android/res/layout/activity_main.xml b/build/android/res/layout/activity_main.xml index 26280d297..a910225b9 100644 --- a/build/android/res/layout/activity_main.xml +++ b/build/android/res/layout/activity_main.xml @@ -2,7 +2,7 @@ android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#000000"> + android:background="@drawable/bg"> Загрузка… Загрузка MultiCraft Осталось меньше минуты… - Закрыть Недостаточно места для распаковки.\nОсвободите пространство в памяти устройства! - OK Для корректной работы, игре требуется разрешение записывать в память устройтсва. \ No newline at end of file diff --git a/build/android/res/values-v21/styles.xml b/build/android/res/values-v21/styles.xml new file mode 100644 index 000000000..2417cf7ba --- /dev/null +++ b/build/android/res/values-v21/styles.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/build/android/res/values/strings.xml b/build/android/res/values/strings.xml index 5497f6dfa..bad627b69 100644 --- a/build/android/res/values/strings.xml +++ b/build/android/res/values/strings.xml @@ -2,7 +2,7 @@ MultiCraft - 1.1.2.2 + 1.1.3 312077575425 @@ -10,11 +10,9 @@ Loading… Loading MultiCraft Less than 1 minute… - Close Not enough space for unpack game data.\nPlease free some space on the storage memory! - OK Game need permission to write files to storage memory. diff --git a/build/android/res/values/styles.xml b/build/android/res/values/styles.xml index 8835e1bbc..a127de09a 100644 --- a/build/android/res/values/styles.xml +++ b/build/android/res/values/styles.xml @@ -3,11 +3,8 @@ \ No newline at end of file diff --git a/build/android/src/mobi/MultiCraft/GameActivity.java b/build/android/src/mobi/MultiCraft/GameActivity.java index 59c1b64a5..ddd4c7f98 100644 --- a/build/android/src/mobi/MultiCraft/GameActivity.java +++ b/build/android/src/mobi/MultiCraft/GameActivity.java @@ -9,16 +9,12 @@ import android.view.WindowManager; public class GameActivity extends NativeActivity { static { - - System.loadLibrary("vorbis"); System.loadLibrary("gmp"); - System.loadLibrary("ssl"); - System.loadLibrary("crypto"); System.loadLibrary("multicraft"); } - private int m_MessagReturnCode; - private String m_MessageReturnValue; + private int messageReturnCode; + private String messageReturnValue; public static native void putMessageBoxResult(String text); @@ -27,8 +23,9 @@ public class GameActivity extends NativeActivity { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // startAd(this, true); - m_MessagReturnCode = -1; - m_MessageReturnValue = ""; + messageReturnCode = -1; + messageReturnValue = ""; + makeFullScreen(); } @@ -69,10 +66,10 @@ public class GameActivity extends NativeActivity { if (requestCode == 101) { if (resultCode == RESULT_OK) { String text = data.getStringExtra("text"); - m_MessagReturnCode = 0; - m_MessageReturnValue = text; + messageReturnCode = 0; + messageReturnValue = text; } else { - m_MessagReturnCode = 1; + messageReturnCode = 1; } } } @@ -89,17 +86,17 @@ public class GameActivity extends NativeActivity { params.putInt("editType", editType); intent.putExtras(params); startActivityForResult(intent, 101); - m_MessageReturnValue = ""; - m_MessagReturnCode = -1; + messageReturnValue = ""; + messageReturnCode = -1; } public int getDialogState() { - return m_MessagReturnCode; + return messageReturnCode; } public String getDialogValue() { - m_MessagReturnCode = -1; - return m_MessageReturnValue; + messageReturnCode = -1; + return messageReturnValue; } public float getDensity() { diff --git a/build/android/src/mobi/MultiCraft/InputDialogActivity.java b/build/android/src/mobi/MultiCraft/InputDialogActivity.java index 341fb9e31..823dddd3f 100644 --- a/build/android/src/mobi/MultiCraft/InputDialogActivity.java +++ b/build/android/src/mobi/MultiCraft/InputDialogActivity.java @@ -1,30 +1,38 @@ package mobi.MultiCraft; +import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.text.InputType; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnKeyListener; +import android.view.inputmethod.InputMethodManager; import android.widget.EditText; public class InputDialogActivity extends Activity { private AlertDialog alertDialog; + @SuppressLint("InflateParams") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle b = getIntent().getExtras(); int editType = b.getInt("editType"); - AlertDialog.Builder builder = new AlertDialog.Builder(this); + final AlertDialog.Builder builder = new AlertDialog.Builder(this); LayoutInflater inflater = this.getLayoutInflater(); View dialogView = inflater.inflate(R.layout.dialog, null); builder.setView(dialogView); final EditText editText = (EditText) dialogView.findViewById(R.id.editText); + final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); if (editType == 3) { editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); } else { @@ -34,23 +42,34 @@ public class InputDialogActivity extends Activity { @Override public boolean onKey(View view, int KeyCode, KeyEvent event) { if (KeyCode == KeyEvent.KEYCODE_ENTER) { + imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); pushResult(editText.getText().toString()); return true; } return false; } }); - alertDialog = builder.create(); alertDialog.show(); + alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + pushResult(editText.getText().toString()); + setResult(Activity.RESULT_CANCELED); + alertDialog.dismiss(); + finish(); + } + }); } public void pushResult(String text) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP && text.matches(".*[А-я].*")) { + text = Transliteration.toLatin(text); + } Intent resultData = new Intent(); resultData.putExtra("text", text); setResult(Activity.RESULT_OK, resultData); alertDialog.dismiss(); finish(); } - } \ No newline at end of file diff --git a/build/android/src/mobi/MultiCraft/MainActivity.java b/build/android/src/mobi/MultiCraft/MainActivity.java index 8d7e8a7c4..6dee623b9 100644 --- a/build/android/src/mobi/MultiCraft/MainActivity.java +++ b/build/android/src/mobi/MultiCraft/MainActivity.java @@ -24,7 +24,6 @@ import android.widget.ProgressBar; import android.widget.Toast; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -46,17 +45,10 @@ public class MainActivity extends Activity { public final static String NOMEDIA = ".nomedia"; private final static int REQUEST_STORAGE = 0; private ProgressDialog mProgressDialog; - private String oldDataFolder = "/MultiCraft"; private String dataFolder = "/Android/data/mobi.MultiCraft/files/"; private String unzipLocation = Environment.getExternalStorageDirectory() + dataFolder; - private String oldUnzipLocation = Environment.getExternalStorageDirectory() + oldDataFolder; - private String oldWorldLocation = oldUnzipLocation + "/worlds"; - private String oldGamesLocation = oldUnzipLocation + "/games/MultiCraft_game"; - private String newWorldLocation = unzipLocation + "/worlds"; - private String newGamesLocation = unzipLocation + "/games/MultiCraft_game"; private ProgressBar mProgressBar; private Utilities util; - private boolean isCopyOld = false; private BroadcastReceiver myReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -66,11 +58,7 @@ public class MainActivity extends Activity { mProgressBar.setProgress(progress); } else { util.createNomedia(); - if (isCopyOld) { - new CopyFolderTask().execute(new String[]{oldWorldLocation, newWorldLocation}, new String[]{oldGamesLocation, newGamesLocation}); - } else { - runGame(); - } + runGame(); } } }; @@ -103,6 +91,14 @@ public class MainActivity extends Activity { } } + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus) { + makeFullScreen(); + } + } + @Override protected void onDestroy() { super.onDestroy(); @@ -237,29 +233,6 @@ public class MainActivity extends Activity { } - private class CopyFolderTask extends AsyncTask { - - @Override - protected Void doInBackground(String[]... params) { - for (String[] p : params) { - File src = new File(p[0]); - File dest = new File(p[1]); - try { - util.copyDirectory(src, dest); - } catch (IOException e) { - Log.e(TAG, "copy failed: " + e.getMessage()); - } - } - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - util.deleteFiles(oldUnzipLocation); - runGame(); - } - } - private class CopyZip extends AsyncTask { String[] zips; @@ -317,17 +290,6 @@ public class MainActivity extends Activity { private class Utilities { - /* - * private void createLangFile() { PrintWriter writer; try { writer = - * new PrintWriter(unzipLocation + "lang.txt", "UTF-8"); if - * ("Russian".equals(Locale.getDefault().getDisplayLanguage())) { - * writer.println("ru"); } else { writer.println("en"); } - * writer.close(); } catch (Exception e) { Log.e(TAG, - * e.getLocalizedMessage()); } - * - * } - */ - private void createDataFolder() { File folder = new File(unzipLocation); if (!(folder.exists())) @@ -371,13 +333,9 @@ public class MainActivity extends Activity { } public void checkVersion() { - if (isFolderEmpty(oldUnzipLocation) && isFolderEmpty(unzipLocation)) { + if (isFolderEmpty(unzipLocation)) { saveSettings(TAG_BUILD_NUMBER, getString(R.string.ver)); startDeletion(true); - } else if (!isFolderEmpty(oldUnzipLocation)) { - saveSettings(TAG_BUILD_NUMBER, getString(R.string.ver)); - isCopyOld = true; - startDeletion(true); } else if (getBuildNumber().equals(getString(R.string.ver))) { runGame(); } else { @@ -386,40 +344,6 @@ public class MainActivity extends Activity { } } - public void copyDirectory(File sourceLocation, File targetLocation) - throws IOException { - - if (sourceLocation.isDirectory()) { - if (!targetLocation.exists() && !targetLocation.mkdirs()) { - throw new IOException("Cannot create dir " + targetLocation.getAbsolutePath()); - } - - String[] children = sourceLocation.list(); - for (String aChildren : children) { - copyDirectory(new File(sourceLocation, aChildren), - new File(targetLocation, aChildren)); - } - } else { - // make sure the directory we plan to store the recording in exists - File directory = targetLocation.getParentFile(); - if (directory != null && !directory.exists() && !directory.mkdirs()) { - throw new IOException("Cannot create dir " + directory.getAbsolutePath()); - } - - InputStream in = new FileInputStream(sourceLocation); - OutputStream out = new FileOutputStream(targetLocation); - - // Copy the bits from in stream to out stream - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); - } - } - private void deleteFiles(String path) { File file = new File(path); if (file.exists()) { diff --git a/build/android/src/mobi/MultiCraft/Transliteration.java b/build/android/src/mobi/MultiCraft/Transliteration.java new file mode 100644 index 000000000..27ceeb1bb --- /dev/null +++ b/build/android/src/mobi/MultiCraft/Transliteration.java @@ -0,0 +1,72 @@ +package mobi.MultiCraft; + +public class Transliteration { + + private static final String[] CHAR_TABLE = new String[81]; + private static final char START_CHAR = 'Ё'; + + + static { + CHAR_TABLE['А' - START_CHAR] = "A"; + CHAR_TABLE['Б' - START_CHAR] = "B"; + CHAR_TABLE['В' - START_CHAR] = "V"; + CHAR_TABLE['Г' - START_CHAR] = "G"; + CHAR_TABLE['Д' - START_CHAR] = "D"; + CHAR_TABLE['Е' - START_CHAR] = "E"; + CHAR_TABLE['Ё' - START_CHAR] = "E"; + CHAR_TABLE['Ж' - START_CHAR] = "ZH"; + CHAR_TABLE['З' - START_CHAR] = "Z"; + CHAR_TABLE['И' - START_CHAR] = "I"; + CHAR_TABLE['Й' - START_CHAR] = "J"; + CHAR_TABLE['К' - START_CHAR] = "K"; + CHAR_TABLE['Л' - START_CHAR] = "L"; + CHAR_TABLE['М' - START_CHAR] = "M"; + CHAR_TABLE['Н' - START_CHAR] = "N"; + CHAR_TABLE['О' - START_CHAR] = "O"; + CHAR_TABLE['П' - START_CHAR] = "P"; + CHAR_TABLE['Р' - START_CHAR] = "R"; + CHAR_TABLE['С' - START_CHAR] = "TS"; + CHAR_TABLE['Т' - START_CHAR] = "T"; + CHAR_TABLE['У' - START_CHAR] = "U"; + CHAR_TABLE['Ф' - START_CHAR] = "F"; + CHAR_TABLE['Х' - START_CHAR] = "H"; + CHAR_TABLE['Ц' - START_CHAR] = "C"; + CHAR_TABLE['Ч' - START_CHAR] = "CH"; + CHAR_TABLE['Ш' - START_CHAR] = "SH"; + CHAR_TABLE['Щ' - START_CHAR] = "SHCH"; + CHAR_TABLE['Ъ' - START_CHAR] = ""; + CHAR_TABLE['Ы' - START_CHAR] = "Y"; + CHAR_TABLE['Ь' - START_CHAR] = ""; + CHAR_TABLE['Э' - START_CHAR] = "E"; + CHAR_TABLE['Ю' - START_CHAR] = "U"; + CHAR_TABLE['Я' - START_CHAR] = "YA"; + + for (int i = 0; i < CHAR_TABLE.length; i++) { + char idx = (char) ((char) i + START_CHAR); + char lower = new String(new char[]{idx}).toLowerCase().charAt(0); + if (CHAR_TABLE[i] != null) { + CHAR_TABLE[lower - START_CHAR] = CHAR_TABLE[i].toLowerCase(); + } + } + } + + /** + * Переводит русский текст в транслит. В результирующей строке + * каждая русская буква будет заменена на соответствующую английскую. + * Не русские символы останутся прежними. + */ + public static String toLatin(String text) { + char charBuffer[] = text.toCharArray(); + StringBuilder sb = new StringBuilder(text.length()); + for (char symbol : charBuffer) { + int i = symbol - START_CHAR; + if (i >= 0 && i < CHAR_TABLE.length) { + String replace = CHAR_TABLE[i]; + sb.append(replace == null ? symbol : replace); + } else { + sb.append(symbol); + } + } + return sb.toString(); + } +} diff --git a/build/android/src/mobi/MultiCraft/UnzipService.java b/build/android/src/mobi/MultiCraft/UnzipService.java index 0ad0d8723..d3add5abe 100644 --- a/build/android/src/mobi/MultiCraft/UnzipService.java +++ b/build/android/src/mobi/MultiCraft/UnzipService.java @@ -29,7 +29,7 @@ public class UnzipService extends IntentService { super("mobi.MultiCraft.UnzipService"); } - private void _dirChecker(String dir, String unzipLocation) { + private void isDir(String dir, String unzipLocation) { File f = new File(unzipLocation + dir); if (!f.isDirectory()) { @@ -48,11 +48,9 @@ public class UnzipService extends IntentService { mNotifyManager.notify(id, mBuilder.build()); int per = 0; + int size = getSummarySize(file); for (String f : file) { try { - - ZipFile zipSize = new ZipFile(f); - try { FileInputStream fin = new FileInputStream(f); ZipInputStream zin = new ZipInputStream(fin); @@ -60,10 +58,10 @@ public class UnzipService extends IntentService { while ((ze = zin.getNextEntry()) != null) { if (ze.isDirectory()) { per++; - _dirChecker(ze.getName(), location); + isDir(ze.getName(), location); } else { per++; - int progress = 100 * per / zipSize.size(); + int progress = 100 * per / size; // send update publishProgress(progress); FileOutputStream f_out = new FileOutputStream(location + ze.getName()); @@ -79,7 +77,7 @@ public class UnzipService extends IntentService { } zin.close(); } catch (FileNotFoundException e) { - Log.e(TAG, e.getMessage(), e.fillInStackTrace()); + Log.e(TAG, e.getMessage()); } } catch (IOException e) { Log.e(TAG, e.getLocalizedMessage()); @@ -93,10 +91,23 @@ public class UnzipService extends IntentService { sendBroadcast(intentUpdate); } + private int getSummarySize(String[] zips) { + int size = 0; + for (String z : zips) { + try { + ZipFile zipSize = new ZipFile(z); + size += zipSize.size(); + } catch (IOException e) { + Log.e(TAG, e.getLocalizedMessage()); + } + } + return size; + } + @Override public void onDestroy() { super.onDestroy(); mNotifyManager.cancel(id); publishProgress(-1); } -} +} \ No newline at end of file