From df5a30212968b712a33fd55a0c82ab2206d9ae69 Mon Sep 17 00:00:00 2001 From: Vlad Mihalachi Date: Tue, 7 Oct 2014 18:55:18 +0200 Subject: [PATCH] Some fixes --- app-pro/src/main/AndroidManifest.xml | 1 + app/src/main/AndroidManifest.xml | 1 + build/intermediates/dex-cache/cache.xml | 156 +++++++++--------- build/intermediates/model_data.bin | Bin 500768 -> 500768 bytes .../activity/BaseHomeActivity.java | 29 ++-- .../turboeditor/activity/MyApp.java | 44 +++++ .../activity/SelectFileActivity.java | 4 +- .../turboeditor/adapter/AdapterDrawer.java | 6 +- .../turboeditor/fragment/EditorFragment.java | 133 ++++++++++----- .../turboeditor/util/LineUtils.java | 8 +- .../turboeditor/util/SearchResult.java | 13 ++ .../res/layout/fragment_navigation_drawer.xml | 125 +++++++------- .../src/main/res/layout/item_drawer_list.xml | 2 +- 13 files changed, 321 insertions(+), 201 deletions(-) create mode 100644 libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MyApp.java diff --git a/app-pro/src/main/AndroidManifest.xml b/app-pro/src/main/AndroidManifest.xml index 1312ba9..82081cd 100644 --- a/app-pro/src/main/AndroidManifest.xml +++ b/app-pro/src/main/AndroidManifest.xml @@ -39,6 +39,7 @@ android:hardwareAccelerated="false" android:largeHeap="true" android:supportsRtl="true" + android:name="sharedcode.turboeditor.activity.MyApp" > diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a6f245a..8bb69d6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ android:hardwareAccelerated="false" android:largeHeap="true" android:supportsRtl="true" + android:name="sharedcode.turboeditor.activity.MyApp" > diff --git a/build/intermediates/dex-cache/cache.xml b/build/intermediates/dex-cache/cache.xml index 66f500b..85a85b9 100644 --- a/build/intermediates/dex-cache/cache.xml +++ b/build/intermediates/dex-cache/cache.xml @@ -7,6 +7,12 @@ jumboMode="false" revision="20.0.0" sha1="a18ff12a9ab5ae52fd30d42f134517997568231e"/> + + + + + + + + + + + - - - - - - - - - - - - - + + NYD zWx_Rz{=&z!(J=^?NaRjrw3t(?WK;}&bvOkYpJP67a1-vw&u*ua(XOdODZ;#U5B5Qd zImZk3k41jU(Z3E?u9(JHUd|Yew4;_U?px#f!K&H84AzgN0Z{!0&bI_*P41(4Y+7X2 zKIXjgo($$R!a$ctk`>dosTPANfjYkcZJ$VqaA`QovY4M)InX(vnC9n#F(1;F zWK@TpW0ss(j>u>i%$$oKM7v?kyV$U2D*8&cd}#TIp~aS^BjOQ1*oG^q#d!Dvc0JqA zK4$&Yvwa!ORbHAFsu<&zSjykog46?+c4`h-I;0-(3M3ni>e(;lhnv`73XRuk4wkN} z=e?|BtWF)Pqn3jwEeI7`#+>@DcPCGC;ptSw{Sn?z_~kP4G=cyfPINfO2U3fW_|kTI z&QjX47NMWu_*3+@N*~-?Nxk%=-6ehq>6E4SUvWJ3cXV2dD^xLsi$<2GiAJ{Eb2KuuyJ+M`mZAM39O0$^k}aqV&eTdNP(5Di2csk9X?*EQbQCF; z%Dzxhg7mOt1B!&g=a6{(lN1K2ky0NpMM%-=o^#>d2WVd~tw-^^>IZUCg2$7j*-)|y z&4RxN&>UD6Kxd&|aQrISfaOSD^#UqJO38#EeswkS_C=S)MT_87cSyfOn6<&`p(x^} z7Y4Dg4wHR={>@Ch)Spgu?qVi9R*L4SyLbRTx=JdrT%+!x1j#Y#)s=@qYb1V#8};mS zg0kTFV73*my^8LItlL>7T(F?Kq4_oB1x?drfUsram@*m>wSQJSS(>jdyIQ7YoyRUr zkv8-2S5cz`Z+}A;LTk9Z2CBXzBjNc(HW}{ULF0vlvHoD(jtqR>RuqX*2wW_Y;vhDe z`9kP0x)kDT&; zzK~^Peh_G6_rP_N_!ZKtNFfN$2S8{3@SSR6)P_>!l+l9rHh%=S?wgSE>0T=ja=7r6~n|b3A>?`xw z8Td900r{m<_zM{hW#RMfBBxk)rGU8=k5G)oQLyfBLW{(lGFbN(S-@Lz@IZ|af%UjZ z1FQvjJdc=<&&tTIcOcfwvkRVMf?eTybUsRQV#+rKq`l`3= z%yxQSDQ$Te#2W}q9*J|{jTk%?tP`*=tXoGOz2#Bx7*+M&XSoe^AW--zG{oT&CDt$q zRLpP@K{48h>WGwnGJ47OB|bVG>over1LnMpjyV};Phoz3*qpaf)8~rwjXj8>b21vt z1vZly_Fd};q-VWcb-)v(R_Y`!v>;fJ{fH)Td_VOZIDP}%2F^Q!q$8dvmHvyMqkCrg ztxBaiqI?I$o}Fnh9Hp1D~seJKATySpi{`S;drG^m|! zg(5(EO=%N<;vc_qciXKFtHTiVnE z%yEHcYiGD|0k?Z2J!(yW%)hUZ*5ICz!kIwZYa?E}TUzNTe|YR(NvF|nUK&N-lws7z zI2o*Zl4tRMcp~CYj3f_gvSl#OBFi8(iNu4zM?RnUzLch^khrLShU+@O(X>cZ1fNS; zTtMRmt*DrHikH|ZVf|8y_G+gD7w^ud{H<@LZ*{KMwxfX5;2X|2<3uo8rQwS89d9M+ zj^d3UkZ)C2_OH|2;Qsa9(7gXo9%$Y`dAUFF!5->PIF>+Vo*qE-or;?lSh7RvA8$@w8P$3psG%qr8#gn{y4>WQaowUO0@9GI4{_fCen^}aqfX@8t)~g9ROEd zlS6ML^u=sB4XUq7QT$Tw4HbbqLi^;AgSKiQPz&h5E&v_q9?&^Obh8i*g0l8UJzNi!1K_hFk%F3nC4Uda z;H|-|f*$#K@DhdeU0%1Ewd+yK&)IDY7{cj5n0q_h2%%%>Y*-Rb+Y3uWC`(gEAMfBW zbbJy7Y9$F(2K$5{ULQ#tdQeja!0F+1?yrGl@E=QadFpMnwkKTPJB7~nb5nE{aBC(t z#JJI!Ob-oD4X^nAP4tZIt^^;@+?C*?-S8 zXgs2vuE02Cq2uD)3oR}#{~x;VD}uQ0X%JgO`$OY7>I=p^@&q)0PtU5<4XM#s6|&E> z0)%|;P64=3fHu3H?&X38Q4%VYzy{ehM@Y~Eka7p}0--q@K+Mg7+9(Qe z;4b@s4)inS0+`_~+VqAAYzQolrd#3SL{`|7l3{nMc;By4GKlRB40IzbH54jV$WL`t z7D7@Nc2*{}V%SIc&?2^@%erB3H4F0XHm&A{I(Ee-Q&EAM5RZ!PMy8^2Jt~>`a zLggTvR@EJ1Tit8bWCYi)vIS7^HamUeC620hT;lfjP~mnd4g9yWQ9VsQub*H|Hrs|^ zhi#)#Ur)C;2M?Kk*-o?K8@hS3RsUvUVVzYB-Pvobp zSg4liBOFav;$B(BVAzVb{Bq3;ekN1)7m19!D$1ojZ~lGzf%D*E`AVNonUYhFrekh; IUalVSKRdEEW&i*H delta 7789 zcmds+dt6l27ROtA@3YVFkQr1!|9xzFYNKjN6OTw+q8Vt_3^oxnwi%u70t4bpEO^ekEW$}A7%y^m>J1i-OuOp7w4Qg zd#}CMTEFjJ>s0KCs@M}%c989U_m!US9eyWVTmRj79GXk#VN@;;E?)`ZXqu$zeo#B25M}5GITE@_}_Q2uaE6`CZT|U)r z9o@f)<6kW63^|%5Kf%5~H_UY}V*tz&*?pk5iWN^210EXB619rrbo{i6W@_6D4S3@t zxk}v(`+(Aw%r#UOScp~M(_HabJ1F2-FomROwwWXGRxYW2&Hl~2w@lE{Ub_4P>U_sF z)k7*F?;&t_r2Hq!U_Ay;A=%=wbU3Tp+pYhC!$kX}4hbNl53_Ow&HMRkJer{-YE|R? zHS2xB!n#@c5p>tQ0gvK}We|zm7bykyVY`+AZvIed>d`}VtL~v9Pz$X3wp($>X1+<7 zUm-gfq1Sac#RHn>kQC<+);WJb_*G_~de{#2oTtc9=oSq2BguH+WgdXNJCLUKu178h z;_{{>9IK8g>F!}AWLT9bIA|3eEUwLA(*YmuK+f2You378U98y2+W`)WVSx@O8vzVj z{E(k(u9~`CMYvtHl~-5L*p1A=sYPJWZ6glv+eY?rZoj?kW}XTo1f-CjpsmU*Mq6Lf z5~uAZPl`ALguA>{CrEB`%x(q@rlWi*2cr+tv%=OKy19bDI_FLs~b3zIUKKjrOFWq(tywWBRxP%|9g&Rdc6}i*}$ICY$IRATg7C8 zJ$tE{cn+?3r4?(`xcL<7klVOXe807ixF&LnoJr{^? zUSdlS?p9_XeFvVvi_z**?dAwB<`ls$z=!5T4i0ZkgRyKejl!y8h{qSpAX^kZ15pf* zU1yKr#|vN>e%q5K>QB_WMd>tHWQ1SD$;&Jih)Si{n7xjS za^!~zzl`t$FA*0KXgbxW8G=0$>ByRCLa_VuFt+YAmHITr5Fi6uy;o0MwWFSwGdG6t z(@YvHvp<6B<4)?v$Kuv3wLMy9LtiYY06$#QoiD+>mmQY|G3`y5PH}pn9AaJ~?}u71 z`B>L>QMn4H0kp(PL+E<^b`6}v*nSYIRm^RV=E2mAJ66I#Y@WiO7lYQqWq@p5byi|Y zy4)S>OQ49(Hh8ePue_(+_0o?AAWb~C7b=2qw3Qn%#41g>Swf9Cu9QA5zWW-k#rPVj zL=jR!RuU0wAjg_CP(l21jgly;!pIBYomT#fYiZ@uJFAfU+Eu~9eryc!KjPq)OAGa9 zdlV6M5BYcf7}O!=zt91(LQ*4SXFHL`3t6>vp_395i;1QsXXc9REo6vHavfqaVu)1| zOXQ@IVL^_2TIHf-j5|dJqNG=@kg0ru9+v>aqli+^1t2f4OxWC~_?CqwPMUYC-T zmz6ARQ^+0$oon>M1*!w%cp}Dy(-v4(uBcv6g=zbhM3hcyD;}6l`um_(V2KyW_?W?m zw^59Mh2)d^-qOV{aH_jv=+xS#h_dCRo9a9A>a$BbcK&gc?=f-QM%vU;?Du#6vnpOV zN0|2cw1+qDB0&-+dMMmusJ;sob@(*v5b5i5c*6*}!eL)6ZyH3$496^Rt@by+Ia&^L zXsM$siNnmA=;*`6C{Fv42I(sL_*3Bn89_(9_+Oq{jLm%q0FI22Q6^(CS{!dht)4<5 z=u7ud2-2l=#U-}PogFJ0EAx#9i18&|*?R&G-Uhu5HQK(q9gSn%6M9&M`8sT27_|&u za4Dy8E+nI^AN9ivohir7v!J}(?z|=Btv7gM&AcNT1%RoJ$t_$aPnH>VSK2N4C;u^) zc`{sb!h#EyLphc_L;GXp0BR6NQ)xQ5flFVDxX_=z#@rcI0ZlR9LZ5{&ZT_(&G~J`b zN>rJK&};{>HbE4|A0`j#PeO5ddj;L-Wqn72i@5f%^Zn9*iqSL>dv{XG#aqK^Wiwwn zU&}3t)nx2FnFfixLaNn=myqxp*xJ`f4sLaFRyd76-8yR_v33KUQd8}SxJ}g0$p$>$ zk-dS>_9MA?>l`gaOD7hm{gRcBeqYd+s?WIM=2{jC;@!6F2Z}Qekt8(7vhiB4*K^Rc ziyX!A&yYl6>c}Eo=i2Z?bhWlWH&<+pXGgeb_BqYxPC8jWVGA9=IiAeoRlV*>LTeS> z@rD4cnEd+Z>J;idd*P5zHd%i-S(}W}985 zDVkqp<8V)-`!g6a!U$Blgp7hRg#-mg9nwN{6X0`yFoBbO+TjJ+@r>^fR z0zG+6Q$6_V?V5vuyO&5vL&pE~n3{?ezt9*jco(vU-sS`9A>N=aMLpzpRF5oTSL=IA zr+SD7s&8cCv*%bZgYUfbM0FuO-mMns|Ia?&$l$3OP?sATB&6Q|NX6~DX*71as!YYj zMMRd)C)pF;3Oy5S@eb{0U>qZR{f;M?b{Rv8{D&AFW>A;+&ZKr_!N4F zH7z7>ZVyY=E@+(bu8+z1?;#sh`9FW=x( zc^qMy$FQtOebH66NO?`g3ln%taWk76>dTQ{d`OkK`)R(e5haLhowcgqVL^5EsQLqf z?CZ!fz{WrFe*7jeZEhn>G1(1;>4v8dKQZQ-({<*rd>ronC;!T!NHzi=)udv%BIE}U z18r#SSL0-#%Er6urxJrmI>aaVkfJt5@9EfPfUk7C%0%bWJi5NB>Pguq&^;-2CDMEr+w)itjhjcH{z)-=K-F*i-!=`K*>#6a~?<##>{%_-JfyEY!nrjWZvi{KPaWn)B~%v4RX lapL`>U2PM@_7{0ntKPftV)f@H^^QfgI+Q^~$y~J}^gqga!eamc diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/BaseHomeActivity.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/BaseHomeActivity.java index 657a174..8d64594 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/BaseHomeActivity.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/BaseHomeActivity.java @@ -178,22 +178,28 @@ public abstract class BaseHomeActivity extends Activity { onBackPressed(); return true; } + else if(keyCode == KeyEvent.KEYCODE_MENU){ + return false; + } + else { + if (editor == null) + editor = (EditText) findViewById(R.id.editor); + // this will happen on first key pressed on hard-keyboard only. Once myInputField + // gets the focus again, it will automatically receive further key presses. - if (editor == null) - editor = (EditText) findViewById(R.id.editor); - // this will happen on first key pressed on hard-keyboard only. Once myInputField - // gets the focus again, it will automatically receive further key presses. + try { + if (editor != null && !editor.hasFocus()) { + editor.requestFocus(); + editor.onKeyDown(keyCode, event); + return true; + } + } catch (NullPointerException ex) { - try { - if (editor != null && !editor.hasFocus()) { - editor.requestFocus(); - editor.onKeyDown(keyCode, event); } - } catch (NullPointerException ex) { - } - return true; + + return false; } @Override @@ -226,7 +232,6 @@ public abstract class BaseHomeActivity extends Activity { return super.onOptionsItemSelected(item); } - @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MyApp.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MyApp.java new file mode 100644 index 0000000..5116d24 --- /dev/null +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MyApp.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2014 Vlad Mihalachi + * + * This file is part of Turbo Editor. + * + * Turbo Editor is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Turbo Editor is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package sharedcode.turboeditor.activity; + +import android.app.Application; +import android.view.ViewConfiguration; + +import java.lang.reflect.Field; + +public class MyApp extends Application { + + @Override + public void onCreate() { + super.onCreate(); + // force to sow the overflow menu icon + try { + ViewConfiguration config = ViewConfiguration.get(this); + Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); + if(menuKeyField != null) { + menuKeyField.setAccessible(true); + menuKeyField.setBoolean(config, false); + } + } catch (Exception ex) { + // Ignore + } + } +} diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/SelectFileActivity.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/SelectFileActivity.java index 316082b..9dfd338 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/SelectFileActivity.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/SelectFileActivity.java @@ -59,9 +59,9 @@ import sharedcode.turboeditor.util.Constants; import sharedcode.turboeditor.util.RootUtils; public class SelectFileActivity extends Activity implements SearchView.OnQueryTextListener, AdapterView.OnItemClickListener, EditDialogFragment.EditDialogListener { - private String currentFolder; + private String currentFolder = PreferenceHelper.SD_CARD_ROOT; private ListView listView; - private boolean wantAFile; + private boolean wantAFile = true; private MenuItem mSearchViewMenuItem; private SearchView mSearchView; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/adapter/AdapterDrawer.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/adapter/AdapterDrawer.java index ca7fd91..957b966 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/adapter/AdapterDrawer.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/adapter/AdapterDrawer.java @@ -95,10 +95,12 @@ public class AdapterDrawer extends selectedPath = ""; } }); - if (TextUtils.equals(selectedPath, files.get(position).getAbsolutePath())) + if (TextUtils.equals(selectedPath, files.get(position).getAbsolutePath())) { hold.nameLabel.setTypeface(hold.nameLabel.getTypeface(), Typeface.BOLD); - else + } + else { hold.nameLabel.setTypeface(hold.nameLabel.getTypeface(), Typeface.NORMAL); + } } return convertView; } diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EditorFragment.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EditorFragment.java index b92bcc9..f60e3c7 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EditorFragment.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EditorFragment.java @@ -151,11 +151,15 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + String fileText = getArguments().getString("fileText"); + if(fileText == null) + fileText = ""; + setHasOptionsMenu(true); + sFilePath = getArguments().getString("filePath"); - pageSystem = new PageSystem(getActivity(), this, getArguments().getString("fileText")); + pageSystem = new PageSystem(getActivity(), this, fileText); currentEncoding = getArguments().getString("encoding"); - getArguments().remove("fileText"); } @@ -290,8 +294,18 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S if (searchingText) { MenuItem imReplace = menu.findItem(R.id.im_replace); + MenuItem imPrev = menu.findItem(R.id.im_previous_item); + MenuItem imNext = menu.findItem(R.id.im_next_item); + if (imReplace != null) - imReplace.setVisible(searchResult.isReplace); + imReplace.setVisible(searchResult.canReplaceSomething()); + + if (imPrev != null) + imPrev.setVisible(searchResult.hasPrevious()); + + if (imNext != null) + imNext.setVisible(searchResult.hasNext()); + } else { MenuItem imSave = menu.findItem(R.id.im_save); @@ -344,8 +358,9 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S } else if(i == R.id.im_goto_line){ + int min = mEditor.getLineUtils().firstReadLine(); int max = mEditor.getLineUtils().lastReadLine(); - SeekbarDialogFragment dialogFrag = SeekbarDialogFragment.newInstance(SeekbarDialogFragment.Actions.GoToLine, 0, 0, max); + SeekbarDialogFragment dialogFrag = SeekbarDialogFragment.newInstance(SeekbarDialogFragment.Actions.GoToLine, min, min, max); dialogFrag.setTargetFragment(EditorFragment.this, 0); dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); } @@ -368,6 +383,9 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S startActivity(Intent.createChooser(shareIntent, getString(R.string.share))); + } + else { + } return super.onOptionsItemSelected(item); } @@ -562,6 +580,8 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S mEditor.setSelection(searchResult.foundIndex.get(searchResult.index), searchResult.foundIndex.get(searchResult.index) + searchResult.textLength); } + + getActivity().invalidateOptionsMenu(); } public void previousResult() { @@ -584,12 +604,20 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S mEditor.setSelection(searchResult.foundIndex.get(searchResult.index), searchResult.foundIndex.get(searchResult.index) + searchResult.textLength); } + + getActivity().invalidateOptionsMenu(); } public void replaceText() { mEditor.setText(mEditor.getText().replace(searchResult.foundIndex.get(searchResult.index), searchResult.foundIndex.get(searchResult.index) + searchResult.textLength, searchResult.textToReplace)); searchResult.doneReplace(); - nextResult(); + + getActivity().invalidateOptionsMenu(); + + if(searchResult.hasNext()) + nextResult(); + else if(searchResult.hasPrevious()) + previousResult(); } //endregion @@ -712,7 +740,7 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S */ private final EditTextChangeListener mChangeListener; - int lineCount, realLine; + private int lineCount, realLine; private LineUtils lineUtils; private boolean modified = true; /** @@ -787,7 +815,27 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S @Override public boolean onKeyUp(int keyCode, KeyEvent event) { - return true; + if (event.isCtrlPressed()) { + switch (keyCode) { + case KeyEvent.KEYCODE_A: + case KeyEvent.KEYCODE_X: + case KeyEvent.KEYCODE_C: + case KeyEvent.KEYCODE_V: + case KeyEvent.KEYCODE_Z: + case KeyEvent.KEYCODE_Y: + case KeyEvent.KEYCODE_S: + return true; + default: + return false; + } + } else { + switch (keyCode) { + case KeyEvent.KEYCODE_TAB: + return true; + default: + return false; + } + } } @Override @@ -1030,67 +1078,70 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S return editable; } - firstVisibleIndex = 0; - int end = CHARS_TO_COLOR; + int end; int height = getHeight(); if(height > 0) { firstVisibleIndex = getLayout().getLineStart(getLineUtils().getFirstVisibleLine(editorInterface.getVerticalScrollView(), height, getLineCount())); - end = getLayout().getLineStart(getLineUtils().getLastVisibleLine(editorInterface.getVerticalScrollView(), height, lineCount, deviceHeight)); - //int end = firstColoredIndex + CHARS_TO_COLOR; + end = getLayout().getLineStart(getLineUtils().getLastVisibleLine(editorInterface.getVerticalScrollView(), height, getLineCount(), deviceHeight)); + } else { + firstVisibleIndex = 0; + end = CHARS_TO_COLOR; } firstColoredIndex = firstVisibleIndex - (CHARS_TO_COLOR / 5); + + // normalize if (firstColoredIndex < 0) firstColoredIndex = 0; if (end > editable.length()) end = editable.length(); - CharSequence textToHiglight = editable.subSequence(firstColoredIndex, end); + CharSequence textToHighlight = editable.subSequence(firstColoredIndex, end); if (fileExtension.contains("htm") || fileExtension.contains("xml")) { - color(Patterns.HTML_OPEN_TAGS, editable, textToHiglight, firstColoredIndex); - color(Patterns.HTML_CLOSE_TAGS, editable, textToHiglight, firstColoredIndex); - color(Patterns.HTML_ATTRS, editable, textToHiglight, firstColoredIndex); - color(Patterns.GENERAL_STRINGS, editable, textToHiglight, firstColoredIndex); - color(Patterns.XML_COMMENTS, editable, textToHiglight, firstColoredIndex); + color(Patterns.HTML_OPEN_TAGS, editable, textToHighlight, firstColoredIndex); + color(Patterns.HTML_CLOSE_TAGS, editable, textToHighlight, firstColoredIndex); + color(Patterns.HTML_ATTRS, editable, textToHighlight, firstColoredIndex); + color(Patterns.GENERAL_STRINGS, editable, textToHighlight, firstColoredIndex); + color(Patterns.XML_COMMENTS, editable, textToHighlight, firstColoredIndex); } else if (fileExtension.equals("css")) { //color(CSS_STYLE_NAME, editable); - color(Patterns.CSS_ATTRS, editable, textToHiglight, firstColoredIndex); - color(Patterns.CSS_ATTR_VALUE, editable, textToHiglight, firstColoredIndex); - color(Patterns.SYMBOLS, editable, textToHiglight, firstColoredIndex); - color(Patterns.GENERAL_COMMENTS, editable, textToHiglight, firstColoredIndex); + color(Patterns.CSS_ATTRS, editable, textToHighlight, firstColoredIndex); + color(Patterns.CSS_ATTR_VALUE, editable, textToHighlight, firstColoredIndex); + color(Patterns.SYMBOLS, editable, textToHighlight, firstColoredIndex); + color(Patterns.GENERAL_COMMENTS, editable, textToHighlight, firstColoredIndex); } else if (Arrays.asList(MimeTypes.MIME_CODE).contains(fileExtension)) { if(fileExtension.equals("lua")) - color(Patterns.LUA_KEYWORDS, editable, textToHiglight, firstColoredIndex); + color(Patterns.LUA_KEYWORDS, editable, textToHighlight, firstColoredIndex); else if(fileExtension.equals("py")) - color(Patterns.PY_KEYWORDS, editable, textToHiglight, firstColoredIndex); + color(Patterns.PY_KEYWORDS, editable, textToHighlight, firstColoredIndex); else - color(Patterns.GENERAL_KEYWORDS, editable, textToHiglight, firstColoredIndex); - color(Patterns.NUMBERS, editable, textToHiglight, firstColoredIndex); - color(Patterns.SYMBOLS, editable, textToHiglight, firstColoredIndex); - color(Patterns.GENERAL_STRINGS, editable, textToHiglight, firstColoredIndex); - color(Patterns.GENERAL_COMMENTS, editable, textToHiglight, firstColoredIndex); + color(Patterns.GENERAL_KEYWORDS, editable, textToHighlight, firstColoredIndex); + color(Patterns.NUMBERS, editable, textToHighlight, firstColoredIndex); + color(Patterns.SYMBOLS, editable, textToHighlight, firstColoredIndex); + color(Patterns.GENERAL_STRINGS, editable, textToHighlight, firstColoredIndex); + color(Patterns.GENERAL_COMMENTS, editable, textToHighlight, firstColoredIndex); if (fileExtension.equals("php")) - color(Patterns.PHP_VARIABLES, editable, textToHiglight, firstColoredIndex); + color(Patterns.PHP_VARIABLES, editable, textToHighlight, firstColoredIndex); } else if (Arrays.asList(MimeTypes.MIME_SQL).contains(fileExtension)) { - color(Patterns.SYMBOLS, editable, textToHiglight, firstColoredIndex); - color(Patterns.GENERAL_STRINGS, editable, textToHiglight, firstColoredIndex); - color(Patterns.SQL_KEYWORDS, editable, textToHiglight, firstColoredIndex); + color(Patterns.SYMBOLS, editable, textToHighlight, firstColoredIndex); + color(Patterns.GENERAL_STRINGS, editable, textToHighlight, firstColoredIndex); + color(Patterns.SQL_KEYWORDS, editable, textToHighlight, firstColoredIndex); } else { if(!fileExtension.contains("md")) - color(Patterns.GENERAL_KEYWORDS, editable, textToHiglight, firstColoredIndex); - color(Patterns.NUMBERS, editable, textToHiglight, firstColoredIndex); - color(Patterns.SYMBOLS, editable, textToHiglight, firstColoredIndex); - color(Patterns.GENERAL_STRINGS, editable, textToHiglight, firstColoredIndex); + color(Patterns.GENERAL_KEYWORDS, editable, textToHighlight, firstColoredIndex); + color(Patterns.NUMBERS, editable, textToHighlight, firstColoredIndex); + color(Patterns.SYMBOLS, editable, textToHighlight, firstColoredIndex); + color(Patterns.GENERAL_STRINGS, editable, textToHighlight, firstColoredIndex); if (fileExtension.equals("prop") || fileExtension.contains("conf") || fileExtension.contains("md")) - color(Patterns.GENERAL_COMMENTS_NO_SLASH, editable, textToHiglight, firstColoredIndex); + color(Patterns.GENERAL_COMMENTS_NO_SLASH, editable, textToHighlight, firstColoredIndex); else - color(Patterns.GENERAL_COMMENTS, editable, textToHiglight, firstColoredIndex); + color(Patterns.GENERAL_COMMENTS, editable, textToHighlight, firstColoredIndex); if(fileExtension.contains("md")) - color(Patterns.LINK, editable, textToHiglight, firstColoredIndex); + color(Patterns.LINK, editable, textToHighlight, firstColoredIndex); } return editable; @@ -1098,7 +1149,7 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S private void color(Pattern pattern, Editable allText, - CharSequence textToHiglight, + CharSequence textToHighlight, int start) { int color = 0; if (pattern.equals(Patterns.HTML_OPEN_TAGS) @@ -1128,7 +1179,7 @@ public class EditorFragment extends Fragment implements FindTextDialogFragment.S color = getResources().getColor(R.color.syntax_variable); } - m = pattern.matcher(textToHiglight); + m = pattern.matcher(textToHighlight); while (m.find()) { allText.setSpan( diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LineUtils.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LineUtils.java index 20a6e13..4472f96 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LineUtils.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LineUtils.java @@ -38,10 +38,6 @@ public class LineUtils { return scrollView.getChildAt(0).getHeight() / lineCount * line; } - public int getFirstVisibleLine(ScrollView scrollView, int lineCount){ - return getFirstVisibleLine(scrollView, scrollView.getChildAt(0).getHeight(), lineCount); - } - public int getFirstVisibleLine(ScrollView scrollView, int childHeight, int lineCount) throws ArithmeticException{ int line = (scrollView.getScrollY() * lineCount) / childHeight; if (line < 0) line = 0; @@ -108,6 +104,10 @@ public class LineUtils { return line; } + public int firstReadLine() { + return realLines[0]; + } + public int lastReadLine() { return realLines[realLines.length-1]; } diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/SearchResult.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/SearchResult.java index eb9ab22..634c805 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/SearchResult.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/SearchResult.java @@ -22,6 +22,7 @@ package sharedcode.turboeditor.util; import java.util.LinkedList; public class SearchResult { + // list of index public LinkedList foundIndex; public int textLength; public boolean isReplace; @@ -47,4 +48,16 @@ public class SearchResult { public int numberOfResults() { return foundIndex.size(); } + + public boolean hasNext() { + return index < foundIndex.size() - 1; + } + + public boolean hasPrevious() { + return index > 0; + } + + public boolean canReplaceSomething() { + return isReplace && foundIndex.size() > 0; + } } diff --git a/libraries/sharedCode/src/main/res/layout/fragment_navigation_drawer.xml b/libraries/sharedCode/src/main/res/layout/fragment_navigation_drawer.xml index 8436c90..2bf553a 100644 --- a/libraries/sharedCode/src/main/res/layout/fragment_navigation_drawer.xml +++ b/libraries/sharedCode/src/main/res/layout/fragment_navigation_drawer.xml @@ -50,7 +50,7 @@ @@ -62,7 +62,7 @@ @@ -97,12 +97,20 @@ android:textColor="@color/navigation_drawer_button_text_color_inverted"/> + + - - - - - + android:layout_height="52dp" + android:orientation="horizontal" + > + + - + + - - + - - + + + diff --git a/libraries/sharedCode/src/main/res/layout/item_drawer_list.xml b/libraries/sharedCode/src/main/res/layout/item_drawer_list.xml index 2f09282..6d87335 100644 --- a/libraries/sharedCode/src/main/res/layout/item_drawer_list.xml +++ b/libraries/sharedCode/src/main/res/layout/item_drawer_list.xml @@ -29,7 +29,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="5" - android:textSize="20sp" + android:textSize="18sp" android:paddingStart="@dimen/item_drawer_list_padding" android:paddingEnd="@dimen/item_drawer_list_padding" android:paddingLeft="@dimen/item_drawer_list_padding"