From 605efb9400a4f42145fcc74e73052562dc5bfa33 Mon Sep 17 00:00:00 2001 From: Mikhail Kulesh Date: Wed, 5 Oct 2022 23:26:50 +0200 Subject: [PATCH] #126 Allow insert an operator before selected term: implemented --- .../micromath/formula/FormulaBase.java | 20 ++++--- .../micromath/formula/FormulaTerm.java | 19 ++++++- .../mkulesh/micromath/formula/TermField.java | 2 +- .../mkulesh/micromath/plots/PlotFunction.java | 51 ++++++++++++------ .../properties/DocumentProperties.java | 3 ++ .../mkulesh/micromath/utils/ViewUtils.java | 4 +- .../micromath/widgets/ContextMenuHandler.java | 43 +++++++++++++-- .../micromath/widgets/FormulaChangeIf.java | 10 ++++ .../main/res/drawable-hdpi/ic_add_after.png | Bin 732 -> 306 bytes .../main/res/drawable-hdpi/ic_add_before.png | Bin 729 -> 300 bytes .../main/res/drawable-hdpi/ic_add_left.png | Bin 746 -> 323 bytes .../main/res/drawable-hdpi/ic_add_right.png | Bin 739 -> 328 bytes .../main/res/drawable-mdpi/ic_add_after.png | Bin 511 -> 220 bytes .../main/res/drawable-mdpi/ic_add_before.png | Bin 530 -> 218 bytes .../main/res/drawable-mdpi/ic_add_left.png | Bin 512 -> 229 bytes .../main/res/drawable-mdpi/ic_add_right.png | Bin 515 -> 226 bytes .../main/res/drawable-xhdpi/ic_add_after.png | Bin 918 -> 298 bytes .../main/res/drawable-xhdpi/ic_add_before.png | Bin 884 -> 288 bytes .../main/res/drawable-xhdpi/ic_add_left.png | Bin 893 -> 322 bytes .../main/res/drawable-xhdpi/ic_add_right.png | Bin 920 -> 317 bytes .../main/res/drawable-xxhdpi/ic_add_after.png | Bin 1384 -> 390 bytes .../res/drawable-xxhdpi/ic_add_before.png | Bin 1348 -> 383 bytes .../main/res/drawable-xxhdpi/ic_add_left.png | Bin 1385 -> 416 bytes .../main/res/drawable-xxhdpi/ic_add_right.png | Bin 1406 -> 430 bytes .../res/drawable-xxxhdpi/ic_add_after.png | Bin 1770 -> 484 bytes .../res/drawable-xxxhdpi/ic_add_before.png | Bin 1679 -> 486 bytes .../main/res/drawable-xxxhdpi/ic_add_left.png | Bin 1793 -> 531 bytes .../res/drawable-xxxhdpi/ic_add_right.png | Bin 1802 -> 541 bytes app/src/main/res/layout/formula_equation.xml | 2 + app/src/main/res/layout/formula_result.xml | 1 + app/src/main/res/layout/image_fragment.xml | 1 + app/src/main/res/layout/plot_contour.xml | 6 +++ app/src/main/res/layout/plot_function.xml | 6 +++ .../res/layout/plot_function_add_func.xml | 1 + app/src/main/res/layout/text_fragment.xml | 1 + app/src/main/res/menu/context_menu.xml | 5 ++ app/src/main/res/values/attrs.xml | 1 + images/icons/convert_file.sh | 3 +- images/icons/ic_add_after.svg | 47 +--------------- images/icons/ic_add_before.svg | 42 +-------------- images/icons/ic_add_left.svg | 42 +-------------- images/icons/ic_add_right.svg | 42 +-------------- 42 files changed, 151 insertions(+), 201 deletions(-) diff --git a/app/src/main/java/com/mkulesh/micromath/formula/FormulaBase.java b/app/src/main/java/com/mkulesh/micromath/formula/FormulaBase.java index 6b10c8df..1020c0d7 100644 --- a/app/src/main/java/com/mkulesh/micromath/formula/FormulaBase.java +++ b/app/src/main/java/com/mkulesh/micromath/formula/FormulaBase.java @@ -120,14 +120,6 @@ public FormulaBase(FormulaList formulaList, LinearLayout layout, int termDepth) * Primitives *--------------------------------------------------------*/ - /** - * Procedure checks whether this formula is a root formula - */ - public boolean isRootFormula() - { - return getBaseType() != BaseType.TERM; - } - /** * Getter for parent list of formulas */ @@ -521,6 +513,18 @@ public boolean enableDetails() return false; } + @Override + public boolean isRootFormula() + { + return getBaseType() != BaseType.TERM; + } + + @Override + public void setInsertBefore(boolean insertBefore) + { + formulaList.getDocumentSettings().insertBefore = insertBefore; + } + /*--------------------------------------------------------* * Read/write interface *--------------------------------------------------------*/ diff --git a/app/src/main/java/com/mkulesh/micromath/formula/FormulaTerm.java b/app/src/main/java/com/mkulesh/micromath/formula/FormulaTerm.java index adfa2908..19d6d8c9 100644 --- a/app/src/main/java/com/mkulesh/micromath/formula/FormulaTerm.java +++ b/app/src/main/java/com/mkulesh/micromath/formula/FormulaTerm.java @@ -376,6 +376,21 @@ protected void initializeMainLayout() } } + public TermField getInsertionRefTerm() + { + if (getTerms().size() == 2) + { + // put whole text into the term that depends on "insertBefore" flag + return formulaRoot.getFormulaList().getDocumentSettings().insertBefore ? + getTerms().get(1) : getTerms().get(0); + } + else + { + // put whole text into the first term + return getArgumentTerm(); + } + } + protected boolean splitIntoTerms(final String src, final TermTypeIf t, boolean pasteFromClipboard) { if (src == null || src.isEmpty() || (t != null && t.getLowerCaseName().equals(src.toLowerCase(Locale.ENGLISH)))) @@ -401,8 +416,8 @@ protected boolean splitIntoTerms(final String src, final TermTypeIf t, boolean p } if (sepPosition < 0) { - // no separator found: put whole text into the first term - final TermField term = getArgumentTerm(); + // no separator found: + final TermField term = getInsertionRefTerm(); if (term != null) { term.setText(src); diff --git a/app/src/main/java/com/mkulesh/micromath/formula/TermField.java b/app/src/main/java/com/mkulesh/micromath/formula/TermField.java index 2f4fb55a..5ea615cf 100644 --- a/app/src/main/java/com/mkulesh/micromath/formula/TermField.java +++ b/app/src/main/java/com/mkulesh/micromath/formula/TermField.java @@ -1028,7 +1028,7 @@ public void addOperatorCode(String code, final Object extPar) if (isTerm() && !term.getTerms().isEmpty() && savedState != null) { - final TermField tf = term.getArgumentTerm(); + final TermField tf = term.getInsertionRefTerm(); if (tf != null && tf.getEditText() != null && tf.getEditText().isConversionEnabled()) { tf.readFromBundle(savedState, "savedState"); diff --git a/app/src/main/java/com/mkulesh/micromath/plots/PlotFunction.java b/app/src/main/java/com/mkulesh/micromath/plots/PlotFunction.java index cc2b1f54..4d3167c9 100644 --- a/app/src/main/java/com/mkulesh/micromath/plots/PlotFunction.java +++ b/app/src/main/java/com/mkulesh/micromath/plots/PlotFunction.java @@ -334,7 +334,7 @@ public boolean onNewTerm(TermField owner, String s, boolean requestFocus) } // create and prepare new function - Function2D f = ownerFunc.addNewAfter(); + Function2D f = ownerFunc.addNewFunction(getFormulaList().getDocumentSettings().insertBefore); if (f == null) { return true; @@ -708,7 +708,7 @@ private void ensureFunctionsNumber(int number) } while (functions.size() < number) { - functions.add(ownerFunc.addNewAfter()); + functions.add(ownerFunc.addNewFunction(false)); } reIndexTerms(); updateTextSize(); @@ -803,7 +803,6 @@ private class Function2D implements FunctionIf private LinearLayout xLayout = null; private TermField x = null; - private CustomTextView xSeparator = null; private LinearLayout yLayout = null; private TermField y = null; private CustomTextView settingsView = null; @@ -902,7 +901,7 @@ void initializePrimaryY() settingsView.prepare(CustomTextView.SymbolType.HOR_LINE, getFormulaList().getActivity(), PlotFunction.this); } - Function2D addNewAfter() + Function2D addNewFunction(final boolean insertBefore) { int xViewIndex = ViewUtils.getViewIndex(xDataLayout, xLayout); int yViewIndex = ViewUtils.getViewIndex(yDataLayout, settingsView); @@ -920,8 +919,17 @@ Function2D addNewAfter() final String tag = (String) t.getTag(); if (Y_FUNCTION_TAG.equals(tag) && t instanceof LinearLayout) { - f.initializeY((LinearLayout) t, terms.indexOf(y) + 1); - yDataLayout.addView(t, ++yViewIndex); + final int idx = insertBefore ? terms.indexOf(y) : terms.indexOf(y) + 1; + f.initializeY((LinearLayout) t, idx); + if (insertBefore) + { + yViewIndex--; + } + else + { + yViewIndex++; + } + yDataLayout.addView(t, yViewIndex); } else if (Y_SETTINGS_TAG.equals(tag) && t instanceof CustomTextView) { @@ -932,14 +940,23 @@ else if (Y_SETTINGS_TAG.equals(tag) && t instanceof CustomTextView) } else if (X_SEPARATOR_TAG.equals(tag) && t instanceof CustomTextView) { - f.xSeparator = (CustomTextView) t; - f.xSeparator.setText(getContext().getResources().getString(R.string.formula_term_separator)); - xDataLayout.addView(t, ++xViewIndex); + final CustomTextView xSeparator = (CustomTextView) t; + xSeparator.setText(getContext().getResources().getString(R.string.formula_term_separator)); + if (!insertBefore) + { + xViewIndex++; + } + xDataLayout.addView(t, xViewIndex); } else if (X_FUNCTION_TAG.equals(tag) && t instanceof LinearLayout) { - f.initializeX((LinearLayout) t, terms.indexOf(x) + 1); - xDataLayout.addView(t, ++xViewIndex); + final int idx = insertBefore ? terms.indexOf(x) : terms.indexOf(x) + 1; + f.initializeX((LinearLayout) t, idx); + if (!insertBefore) + { + xViewIndex++; + } + xDataLayout.addView(t, xViewIndex); } } return f; @@ -949,18 +966,22 @@ void erase() { terms.remove(x); terms.remove(y); - xDataLayout.removeView(xLayout); removeSeparator(); + xDataLayout.removeView(xLayout); yDataLayout.removeView(settingsView); yDataLayout.removeView(yLayout); } void removeSeparator() { - if (xSeparator != null) + for (int i = 1; i < xDataLayout.getChildCount(); i++) { - xDataLayout.removeView(xSeparator); - xSeparator = null; + if (xDataLayout.getChildAt(i) == xLayout && + X_SEPARATOR_TAG.equals(xDataLayout.getChildAt(i - 1).getTag())) + { + xDataLayout.removeViewAt(i - 1); + break; + } } } diff --git a/app/src/main/java/com/mkulesh/micromath/properties/DocumentProperties.java b/app/src/main/java/com/mkulesh/micromath/properties/DocumentProperties.java index 9342cbe1..3b66b1a7 100644 --- a/app/src/main/java/com/mkulesh/micromath/properties/DocumentProperties.java +++ b/app/src/main/java/com/mkulesh/micromath/properties/DocumentProperties.java @@ -75,6 +75,9 @@ public class DocumentProperties private ScaledDimensions scaledDimensions = null; public boolean redefineAllowed = true; + // flag that controls term insertion mode: not saved in state, set from the context menu + public boolean insertBefore = false; + /** * Default constructor */ diff --git a/app/src/main/java/com/mkulesh/micromath/utils/ViewUtils.java b/app/src/main/java/com/mkulesh/micromath/utils/ViewUtils.java index 2f9e2bff..d56efbc9 100644 --- a/app/src/main/java/com/mkulesh/micromath/utils/ViewUtils.java +++ b/app/src/main/java/com/mkulesh/micromath/utils/ViewUtils.java @@ -248,7 +248,9 @@ public static void invalidateLayout(View v, final LinearLayout l) public static void updateMenuIconColor(Context context, MenuItem m) { CompatUtils.setDrawableColorAttr(context, m.getIcon(), - m.isEnabled() ? R.attr.colorMicroMathIcon : R.attr.colorPrimaryDark); + m.isEnabled() ? + (m.isChecked() ? R.attr.colorAccent : R.attr.colorMicroMathIcon) + : R.attr.colorPrimaryDark); } /** diff --git a/app/src/main/java/com/mkulesh/micromath/widgets/ContextMenuHandler.java b/app/src/main/java/com/mkulesh/micromath/widgets/ContextMenuHandler.java index c7dada5e..3b706719 100644 --- a/app/src/main/java/com/mkulesh/micromath/widgets/ContextMenuHandler.java +++ b/app/src/main/java/com/mkulesh/micromath/widgets/ContextMenuHandler.java @@ -20,6 +20,8 @@ import android.view.MenuItem; import android.view.View; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.view.ActionMode; @@ -33,6 +35,7 @@ public class ContextMenuHandler { enum Type { + INSERT_BEFORE(R.id.context_menu_insert_before), EXPAND(R.id.context_menu_expand), CUT(R.id.context_menu_cut), COPY(R.id.context_menu_copy), @@ -55,6 +58,7 @@ int getResId() private final Context context; private FormulaChangeIf formulaChangeIf = null; private androidx.appcompat.view.ActionMode actionMode = null; + private Menu contextMenu = null; private View actionModeOwner = null; public ContextMenuHandler(Context context) @@ -68,6 +72,7 @@ public ContextMenuHandler(Context context) public void initialize(TypedArray a) { + enabled[Type.INSERT_BEFORE.ordinal()] = a.getBoolean(R.styleable.CustomViewExtension_contextMenuInsertBefore, true); enabled[Type.EXPAND.ordinal()] = a.getBoolean(R.styleable.CustomViewExtension_contextMenuExpand, true); enabled[Type.CUT.ordinal()] = a.getBoolean(R.styleable.CustomViewExtension_contextMenuCut, true); enabled[Type.COPY.ordinal()] = a.getBoolean(R.styleable.CustomViewExtension_contextMenuCopy, true); @@ -115,6 +120,7 @@ public boolean onCreateActionMode(ActionMode mode, Menu menu) @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + contextMenu = menu; return false; // Return false if nothing is done } @@ -124,7 +130,7 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { if (formulaChangeIf != null) { - if (processMenu(item.getItemId())) + if (processMenu(item)) { mode.finish(); } @@ -137,9 +143,11 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) public void onDestroyActionMode(ActionMode mode) { actionMode = null; + contextMenu = null; if (formulaChangeIf != null) { formulaChangeIf.finishActionMode(actionModeOwner); + formulaChangeIf.setInsertBefore(false); } } }; @@ -148,6 +156,7 @@ public void startActionMode(AppCompatActivity activity, View actionModeOwner, Fo { this.actionModeOwner = actionModeOwner; this.formulaChangeIf = formulaChangeIf; + formulaChangeIf.setInsertBefore(false); ArrayList list = null; if (this.actionModeOwner != null && this.actionModeOwner instanceof CustomEditText) @@ -166,10 +175,26 @@ public void startActionMode(AppCompatActivity activity, View actionModeOwner, Fo actionMode = activity.startSupportActionMode(actionModeCallback); } - private boolean processMenu(int itemId) + @Nullable MenuItem getMenuItem(Type t) { - switch (itemId) + return contextMenu != null ? contextMenu.findItem(t.getResId()) : null; + } + + private boolean processMenu(final @NonNull MenuItem item) + { + switch (item.getItemId()) + { + case R.id.context_menu_insert_before: { + final MenuItem m = getMenuItem(Type.INSERT_BEFORE); + if (m != null) + { + m.setChecked(!m.isChecked()); + formulaChangeIf.setInsertBefore(m.isChecked()); + ViewUtils.updateMenuIconColor(context, m); + } + return false; + } case R.id.context_menu_expand: FormulaChangeIf newIf = formulaChangeIf.onExpandSelection(actionModeOwner); if (newIf != null) @@ -178,6 +203,18 @@ private boolean processMenu(int itemId) formulaChangeIf.onTermSelection(null, true, null); actionModeOwner = null; } + else + { + item.setVisible(false); + } + if (newIf == null || newIf.isRootFormula()) + { + final MenuItem m = getMenuItem(Type.INSERT_BEFORE); + if (m != null) + { + m.setVisible(false); + } + } return false; case R.id.context_menu_cut: if (actionModeOwner != null && actionModeOwner instanceof CustomEditText) diff --git a/app/src/main/java/com/mkulesh/micromath/widgets/FormulaChangeIf.java b/app/src/main/java/com/mkulesh/micromath/widgets/FormulaChangeIf.java index 0853ea7e..7f46f6ff 100644 --- a/app/src/main/java/com/mkulesh/micromath/widgets/FormulaChangeIf.java +++ b/app/src/main/java/com/mkulesh/micromath/widgets/FormulaChangeIf.java @@ -85,4 +85,14 @@ public interface FormulaChangeIf * Procedure returns whether the object details view is enabled for this formula */ boolean enableDetails(); + + /** + * Procedure checks whether this formula is a root formula + */ + boolean isRootFormula(); + + /** + * Procedure sets the flag that a new term shall be added before existing term + */ + void setInsertBefore(boolean insertBefore); } diff --git a/app/src/main/res/drawable-hdpi/ic_add_after.png b/app/src/main/res/drawable-hdpi/ic_add_after.png index 02cb00a1c7666e9976530afae24021af88a4a9fd..f78a85347e8f7c411e88b57e1638fa42f5f88578 100644 GIT binary patch delta 243 zcmVcfVXVB(~)wvrDDk)-AiX-fdZh~q)NyTE=kdrpm^f_z|8 zUy_)L3BHV{;OhjRcFcm*vXqqBvXr-M!EV_eCTI^TXbNo4EGWl}lA!*NBD4{6)&O4k zs^%)wTH`NPSFKo_Q6>)Sxp1*R%l;j@oa_Wi;|B*F8yaF$KR14C!i@$JN2kg|Id0K1 t+JY8q+dcq>C`Af5*gKSv>;xIbF$1|POxDU9!rcG>002ovPDHLkV1kFud@z2z#AZ>FI z5J^QBHkOu(YEoT^l9mch2oh6+W z;Dh3Z`$^2X!`z1aa+$>2@wSA2fSXucChoU#cw8bl4Jg3jM6PyxDdSrh_t9Jl=xCY1 zEI

p96S~;b=@Ie8*z89u*FMdG{Xx1=w6BZ-2sXPdR|N^1^SyXB6SZi(#B2K%*SM=$ zljVhnY=^KI#x;!7(Y(#vo!AufOX_%R-Ycw0nRQ<6hk61_6ZzVNl{$!XU|Xw!5d}=t z2$cN$q#4g5+e7JBMOk&$05q!j8fZly-r=OmokXf~xK;(wN9>GjdF;Yj98yKAkp-&L z?8i5T3(@F_!SrI|-&!<_T7@k}pYX!{juGJx#Ul}T-Si7H1pN0&F#Os80000jAr3%T%;g5VNK=!uZr1RSgmDN>yvxK~z|U#n?}X4sjgE@z?Y0L+pWwv?;b68TF6-paPtX=D}*5NnP&OZALc6Vl;Pfhci`F(!Pdw$>FpYKe`NHt(9 zniQ|!cv-HxIjc@EP{!hFpoV&oBvh_{2CBPCn31@iglSctL2N7vsDhoi6qRdfVNo!I zfpitS@H53T7r%-Gg4@`U;+c;h#o!DB!QK?lJoFX7f?=TL*q`Dl5~w#G$cL&bI`I*k zBcOM}Y|B%FcoPGyNmTS<54vyxtI>l2oD&9lUO*j$wPz4R(Q!0kD&a&_K9cZ%5U$GQ~G*Th~ioHEIQw>7f7ra=w5XGP%n^JG0-)24ppo; z{}~W6Hh7idZN>V$fl7&T1qX$-rx9z>9F=?URG0||a2Qkah9hjG?dVr~TE4&*AtmWd z@l0qPO7>6-ZV6ijp+{Ck1Y^h>vFWKWDonSKCN(2XUyQB~J%I5}$(!jn{RbHbOYPN_Ym z|7Y6wVQQ8zWn4D?uw4{3=FD}>*n8+bX66AySgkw80Q3b*^8iWy54t0St`(DoaL&dC ztiz(n_fYuD_Bs!sT57^cJQgy1;YZ6BoYa5NLh0L02U_xih=?xaI)LeTOWcqqpAC8Q-Z^b3%`P%!?K8t8!=aE~ae zRKPV-BoYWtC80rH}feU<%V1(7!YW^e_E) zKsDHrv(I7xv;3 zrbqaWnxQP9kJyffLg=DY5@Mf6y%|7_Sc9jrFlC@;IiY%FAD|sLS`AQ)#tQ>~_<>zQ zs0LDHn~-G#ktMfg;|o?K&u#dfa(DvQV}W9_tPaa@CwabwD=B*mK1KLNT-v`7_L{T~ zr|SK}!jDo`+BaaOFxm!uz=H&4C_PJT^Mo}uBa)}D^2Jmf6Gk{xjGqXpJ(Nx*ZFb^S zM*rbTAC9CQw&Go?!TpqNT}9`A;|9;LvN{r{v9p80kTv55rj4-Q?gXqo^=>?_;(awh zgcJX+zo&4x87h}__|C~b<8o<3#-EJ@=y777gpEbOl(4yq{);h3*ch)B0aSyx!lkOM z!q$tINqv&AL#MR~`>_@0i+~|4>PF!f_-L4R--fU+Nq(D(f+2(~dRI+<)LjHfS+#hL zg}7W{dyNB0y;TTLS}mz|h3b&_Eb9?2^M$E|)8fN+Qn(itu6^>)&^t^S4H!cDpUDCA zS@;%IxY7sYbs==igzr2h;cQ!tRhXZ&>%v;uSCPWigoC&z-28sx4K854Fq@;MKc(2v Vb=M_(Pyhe`07*qoM6N;tV1hO4L)icT diff --git a/app/src/main/res/drawable-hdpi/ic_add_right.png b/app/src/main/res/drawable-hdpi/ic_add_right.png index e05ed8f00170534c8463af607fdbaff470341909..0d3c1d0fc9ee7ea6a3987a447e88614da7437af5 100644 GIT binary patch delta 265 zcmV+k0rvjm1;_%BBoYa5NLh0L02USltO3V=E&czaR->}&QQu7GQh*SCLfcXGgC$6_sv{dv8Gk#s`dZf z7*(=6Lq!RtXpC~*&q9k(g*2*=M(oD;^c8VQEcz=QLulahV%*1;sT9E*tY|E}?3ALAh%A&+ z@>VQm<0Y>%3lmaADUqa@Xbg|VxlePu^Ss>qJa=r&ub#T+p8xsX?>+aN^FQY);0Si2 zRd&6@D*VFI20hC9gPsw%*@V#qd_X^cCN=>B1xzV60aMmU6r1!YtC*KjZW;!vr(vLa z8V0JT{}QMh@6!ekB~S_XuwGcrU;Im;KZ$ZbZethr<1*%jW&T56GIR0}qL;%Zc$ zjBT;{FE|@3ug0ZHM%CWpE1nAD;T3*Yi91*YaB(8;PTIHX6Q*Su?ix;E6lP+Kuq%9x zMc5;Zld}3$*3?9~Ck+rBj!eH`6ON)+<=*H<2d+frH<(?;_fVqkva~>DwF{f}vcaQR z-MWPNabYUgQdcbguCQlLtr_@#lz3<@pc0PN@LL*-`-Zt$UNFM*q+VNL)Ygv4M6wgdXZ_79g&o&=bw*TOJ@~wFoPE@O*>w%4_V6 zuG7EjqzgWR(JCM* zeFJS08x`^b5fMd5tkesNQSn;Lh?{ZmZsaOy{KGOc=gj&1pB;*^j#>lXT2o1YT8X|C z&5b&E4DjFqzBlOquPJIp56UL%E;y)vWDc*wd_YTo*02e? zSjNvNTf;XD;cb+4V;CJ7+jjz2Fpc?o+5HhXD8dL%6WNr|noFV0xu{?tlXz27!SBR& zEUsU$U6fr)SRTnW%w=o_W9F-PR^*(2o1!DMM|rQn*Cz>~d8i2GjSEweH%-;3-^EMe s@9vB8JD~%gu_F+_BebQx$fyhzSB9-^$C>D6GXMYp07*qoM6N<$f*u#q4FCWD diff --git a/app/src/main/res/drawable-mdpi/ic_add_before.png b/app/src/main/res/drawable-mdpi/ic_add_before.png index 01044110dcb55e7f3b9ab5936937eef5985d4719..afeb78cc6193014aed42908e21ae3e238a740220 100644 GIT binary patch delta 154 zcmbQla*J_-iV$akM`SSr1K(i~W;~w1B4whRdM!h`r;B5VM`v<^MCJo~5ntTNhl;p;T0+8yBWVYdwIuis_iu=7(B=$M zvHLPvv&hmZh)?xe4p0;8^s^oh>}NjW;o({AdNhH7!SACv_ttIUeGEY0>FVdQ&MBb@ E09i#hhyVZp delta 469 zcmV;`0V@950g?oeBq9WJLP=Bz2nYy#2xN!=000SaNLh0L00&|K00&|LIC`1ekv1oP z0gp*UK~zYIt<^ni6j2lg;3wnwfsjVjGC=|X8xe&dHa1GIu@ccf{)gxf*w|Vau~Don zY;3ht6q5V_i6ZJYNhC!~B*|iAE$&$y*05pk%nQRg_nbTLd**(e8SxL}xQ0S=_)#T0 z*)TbrE-Qm=tcPFVL=y@n?n+Bj#q%bA$a@0MFol^){4;%~({0@I9?2#JP z!%@-=?n+D5k2=+N(Jk;D@32v`+I?{->_?o!x4!&k=?k-4Nbki(?BWU9(&n~*L+~oz zXYzMO!kNZPjA9P=rK5TeTeyRZI6kDnhZ1Kh#9Mvw z`5f{>>Y!T(%-f84Spr{ibAZSwX5`yB0#%ITvDBM7VdtfvPd5GnjO=khw9PSL00000 LNkvXXu0mjfMa0zb diff --git a/app/src/main/res/drawable-mdpi/ic_add_left.png b/app/src/main/res/drawable-mdpi/ic_add_left.png index e03b0abc2e198ff446d719c5b966c4f469acd75a..116fc85900feb49fb2854e96fb92126a696cb91f 100644 GIT binary patch delta 166 zcmV;X09pTl1myvcBoYa5NLh0L01m?d01m?e$8V@)kwzzf0CGu0K~zYIV_+C*z?*@A z;Ryo+!+#<$S>Q2|hLddpF`7}-Fp+B$v0&(1z=A~#7JiI)^bsA21L6Z>0MWiJb}_wuV`SvlY#hJZI}Q6#Jn>n UU{CvA0000907*qoM6N<$f(S4^vH$=8 delta 451 zcmV;!0X+WY0e}RMBq9WJLP=Bz2nYy#2xN!=000SaNLh0L00&|K00&|LIC`1ekv1oP z0ewkCK~zYI?bNYLS5XuP@Q+W2ARIJl5!4(U#VrM)MHIxrARO!8aA*_}2Pa9~T%{(L zK$jXs5htezG!&8wTz)N?r4ILskDvK__dOl^!r{Gp-nrlJIrp4*n=pyT(r}Iqtm0`x z{B~A?95QqylEYwDg1i#`3*3vq9v+~7E!qg?F^+?x%`FK6zp#Mjxc-aRm_u*T=9CIr zbL8+IL+DS~E5nb1nD)B$1U{sYr{X2{@d{_Sz)DQ)qR5(W^4&luX0VBe7{(ubMbEvJ z5%CDWv5WQFvd&w+$-P*{5l-WCxh~5S?BEmn5)#_FdKp74s?J8=Y+Tncn%lI0isuRB z2vhU~Z-sIE7h3VobtT7GDK!M7>`gi*}TZv7Np*_$flnQ$xqEQqVcxJm+F@S=f8 tEq*_$B9KQnmT)LE{!loUuDg&HUIG@IU{n@U=eYm?002ovPDHLkV1iBk%>DoX diff --git a/app/src/main/res/drawable-mdpi/ic_add_right.png b/app/src/main/res/drawable-mdpi/ic_add_right.png index 32c75eb05ff2f2e35ee1ce35da8f5f866d80e5b2..fc18fc66bfcfd2e25105095b4a9d0c90a4c68712 100644 GIT binary patch delta 163 zcmZo>dBiwDMToP&BeIx*f$uN~Gak=hkuuRuy`CZ8)5S5wqcb@{!ta5-;15G)=4N$W z-5=)<9Qe=?#H|t9%rxUf>Ddz-8(6y~JQI6d<&`%*X!y|}*e$^`;f-~U*aW5xksUh6 zEEF7FxE%QW)=cy{8`2`mvofS5^!^2XEwZ5J0iVFUfJtSk2ziDG zsS?D(kYXzvLBtfIAQ(}Ljga_-~>NX z{BQM4ntkdRz+uYv6VrcM0o=zdKF6%Z;2$u7-XuAFRqW#vPSK7Rc$nfRv56<~-ItY3 zi*Skc;|(5Q938^`eZ&D?V%a%;8=hDca`}J_~5WFy7}mmW0NxVkfRuu#RUKifi2%K~D^N z9yvEoa1!T25ArZ39K~CsMK~?f!b#%h3J!}1z_Q;bGONioEEWk~##?-Ez^g`HA%R^? w<%m?HeZPo65}jDWp3wL`VOw$;ho}**0ai3>j2$E~t^fc407*qoM6N<$f=0K>3;+NC diff --git a/app/src/main/res/drawable-xhdpi/ic_add_after.png b/app/src/main/res/drawable-xhdpi/ic_add_after.png index a9847f3d34ed6e086c7a0eac714c4f0e4781a59c..7fb203251ce57c1ee1398e949d78cb4377c0d655 100644 GIT binary patch delta 235 zcmVkV9ZBN2)R&_y>YfliG2Cis8QMZ*;4H6$sO0KjQg7`p{(($udP9!`${ zZjm*R4Qn8k?gI>gnr!F5lkR7L0B!_uEA2v8Nt=iJ+LQU4_0#J>X$DS}4gAtEQnZ(J z(fnpIU1v#7+i23Aq=V)ub2mOo8f%&d{>jppV2j$X&bM@b5);6U0B)by8Cw4%HTBT_ l3=qJLlh};_ZUg|}bqBh`TI)4cB7gt@002ovPDHLkV1iLjXQ}`I delta 860 zcmV-i1Ec(^0+t7mBq9WJLP=Bz2nYy#2xN!=000SaNLh0L01m_e01m_fl`9S#kv1oP z0~1L^K~!jg?b=O<97Pz$@!yUEW)l;$MuLt(1jQIoya<9A5WT7~deDO)=*^QJH0VW8 zP!JXMCLV+!L_rTZd5nh$MpXR3h>D8Yuxn7`YD^4C-0@H~q_?-frn`6B;QXQJ?&_+y z-lw~(>aCigKKI}Vh8?A!v2&_{fO%Yh(x84D%r_A*Y|V`Z^tyJSDH8!*GZD}=69HW_ z5zsYF1kAVQMSbSZYf$+|+=2_*@nvj|;NgziZjZcR?h0(j^y;}XHh*J(o`CzYb`_ne z%Za>Bd@eW-Yya27=zoHVfUcPc=$dn0K)>ML863h-_zlNn{u<0+fUDwlUFPtAF>b@U zItKFIz*l%r2q~V$M?&zlfCG3LTVt6IaH>Yz-{U0S#V0sg!$xK-v<8piQQ=7!aSYGl zb=-{272Ew1Td+H}H-{a}rWd-L?Vt+DYfLYmp8>t&oVzSE23Qx6&DLkK3e;A#*uY&W-m=-!yp5ZD2 zhC*M->(u9CPeI*LTEyey3V5=_XjK8jXe-S|ykEijWO_x#VSYyV{@N1oyQQ6ffX~Ks zew5x(GEDbzS9Gc^Hb$Fo#OqT+=S*^kFcc^G2ixK?N#VM^AC18u!i1H7#bWCGhn#Yo zgokmvvjTpNDM{9E3v>9c$k{x;jRs$=Q#r*8(bhL5<({_ubJ?b8TgSYE6)DynFwkfiC11?VGy{hI;Umpi?H69X1k1VdoU-5js zFf3-VDIO0NwE0Nt`VgLfD)qF02bGV<JMDP(tH!_1dmLJm1E@KG z+CMr&-fgPZ(EJTJfSM<4xm=jg`#m63Z?k~UBRAclX#~28*l(K bvtxS$;SYVkEN?1J00000NkvXXu0mjfGJIgA delta 826 zcmV-A1I7HH0`vxuBq9WJLP=Bz2nYy#2xN!=000SaNLh0L01m_e01m_fl`9S#kv1oP z0`W;iK~!jg)!I*N6lEC4@egZ*Ew&a!B9!_sA%vTW2^SNuc#$A?6JzD>k)Rh%FeXOB zi4zCzaTs^1ApV&O_9cbx3Q%{G2OD(h%^j>c-RsPU|<;d0EQy<*CO>J z!T|3ZhHw}=3fTUJZ}edRb2y8=IkqF|nVo#2JzdeC}Q;8=r)y805c(qc0`soR* zVK%)vD9kXe<$dhOo#cMHa+wAB$fM$?k!Gte<2o*9`W(hmn|@W5CA^i2`Ld;P1<$qw zxkFg+QWk3zpO#-!G1Dy#pJ>lhnd`d6H_=Q7@p?ws1DuEiuo|hajWmG8Ox*?iQG=GQ zNCUW-sXJGPkZwr>m=)eBLUK2MFr)$ejPuF$?=@-Zifk%zGWi^>LrAw|1DL_rLb@<8 zJkfGLE1U^^RiN(`{3#@W!zJtbU%Y|muoXve1~;%QoQ7Q&0(=+SFoutlwmKHGM;OL& z+$+#|1;>&;uL_evEvZDxZhYUy@ac@rc$@Y)ydaF9TNR1FjYC=S6Zj>6Vw@L1GwD0o z`i)e@2rfm06%C+?AJjCUKX{C&P6B8qzA9y#FvFA;!2QH$B{YOx&3K7Ex6164dd-lq zA0{kHcO!NiE!VMxZ@chiyou9g2rR-+!lTbS)GET~iLW0^@KuNgcJ;vTL=SwnrB^?2 zY~-7iL&JZ!lV#BhpKTd`!n|x+iGC$Ln|DcONn9j>|(m=o%qvQ5in-$yaDpsfzPG&)n@dcy3Lq?ZZjsJ+l&e5HocMT9Kv8lpD%`;FT!4oYsYac0ncy>b1M4P@f~j9 zdu;|!904!!3Ja9yRYTY$i2W7gBlwQ82A<;+<-rePS?2GcNWl|Nz|4~NI=;kzY@r^A zx^cu3Fsr1!2di*3g0B(Ogo2|T29=KhY{q{$(Wb8v)NoRJBC1A!FbZ4oV;g>wa#)z_ zb?n2Lrt`)zBy6*P=d`tRMByCXU{`iN6AyBnt-+C)0%Gk5(}b4;4FR`>c|V-b@nd>;fWlJfxL?!U?=`jJqMp+dv;F|TblYW#KjiuwsPDP z@~iilj?+1vn}>Z$PWwg0Pvft%KG%hXos53m$qB9%0rl+O898=WX6@g9rV5X@f9Vr=$y?9VJ1HMnFBY)yx5Wl`wXF!VVKlz$5Q=rwQ1TGI+vvSheCu zBcPtygt;PCUwQOmY4-gI9v1X_Gwl1#f__s4flKfc{u24go5wZbSBsIW@6Bu_slM{4 zN%YT20-L#{%7v0on+7$11^Gmqq_CMwFD_vo)?s-;zlB2W3zLMTERU(#=cQNyw!&KR zx6w5niXD6`-GeMSH6d;OA)?LQf{2b1E15f^yf#S64BRaUtkrb7WBY#*{X$ASS^?)( zzh3MZ6NNIdYGF4P>^5DTHf1GVpHOoy!+h_mt-H94quKE|Wq?%{yajOyawY^wLBaq4 N002ovPDHLkV1kODjQIcn diff --git a/app/src/main/res/drawable-xhdpi/ic_add_right.png b/app/src/main/res/drawable-xhdpi/ic_add_right.png index b0891691cb444c7ff8775f8bcb84a26a49adf763..10d6031cc33fb8d6c1c7bf9c0bde87b09d1093f2 100644 GIT binary patch delta 254 zcmV3K~!jg?U_vq!Y~j< zU&Xx_(6wjRjce~DLVJO_awAPiV163=J;*N1?C@F*II1hSDpHWJ9@Sh2_BVQcBP`hIkufCRFs zxdT?SkPEwENWhEQgi8Ac_=5x_kWJ)22j^LJ)dQ#GYybcN07*qoM6N<$ Ef};F#`v3p{ delta 862 zcmV-k1EKuA0+L&k;C&f(RhyUUuX>h7xUIrJBbu6|wr z-~0bwzxwxk)m``!2l0V?c!cdZfra>g96dQ{SMw6*y3migIg9sW9@b-W&f3)smgJv2 z^hU2mCJ&QK1$R(59RuyAW1!u1478h$fp*g|&~CHfmNd=->NFK5PM>6>#-)*b_Y9RZR3SJhei@_H0lq0Q?n1sKou6>4O%_cuXs4#gMcoJ#G=~7$!&*P(JlP8qJ zv}#k2fpVl-%|skgDY4&ba?TIatx|iR2@9ws-o?&uk8s^A!Qd((;SyE~6=nb%aSX4U z$~wjkVPy8_ptUd3x-JZV&K!KGz>QP4;{Kr-!rujG*HF~Ryi30%A4!KtUt32|UDm=?cVt9plC9edtuvz|PbYqKh2Q#(ihpZ4v!ZLPmj+%P}6D=jL z#oX`G7juQtr?M$&bUEFt&GZV3ta=SxRNscCPf%Pwg3PC diff --git a/app/src/main/res/drawable-xxhdpi/ic_add_after.png b/app/src/main/res/drawable-xxhdpi/ic_add_after.png index cbfbbd6d8e60ac63ef09609af34217ab5b68c79d..d71f06b8930bc73966158e4057d49cce43d60e3b 100644 GIT binary patch delta 328 zcmaFC)y6zQMToP&BeIx*LB|V(8Oy6md?&i8*E0%xx;TbZ%z1mmu&>F1!R=vu@|KTm zafSU$!!J%c*ZksJ-o_~hx|KD0-g{@L^qe`ZazJI0if2&!)dM@-51L->-CS4nVSTbf z0vHB-5?MXff1?l^69mp~$`<>`8*1RE9xh;j0wt;f|M+ft|D(QkP3{EC-s0ERhFhA} zDgXHx^yOTs#)ZNr>6xp8PrB|_@%=Zw;H>-PlxQIhPrj+{S+^|rrObY!ep2;hE!*U( zuRGK&w-;;0Sx!^{W)7sf&&@udF;C8y=sBZ delta 1330 zcmV-21M1NW3&Miz0$n7c=qap+ppvL4L_#Qt z9xBN4QW8ByC3Y_`qw7PKMMM&0b)eKPUMez8@N!NMYYraIIeXULGked>(fx%DGqczF zumAq-wby^G|Jp+_jKON`LC+98_Fz?i^*RdSnKrn{JdPC|c`H+8CngnSyP51NN}!&C z>^7ZBs~u=}N`WGj0!1hVicks^p%f@WDNuw`pa`Wv5lVp~lmbO41&UA#6rmI-LQw+k zD#&iL*;$l8>k6{lY+fnK@E9SdJCt+MD;1cNK5j^pa_zu$j89qqc;FDWV{d1Fioy#q zqga31lEc_AEK+DXE@*-??MMX^Vo_{jGdyWyq5_@h6UoYnEbF+QZon59iF0wD z`g`kO9Kpxc&oAO$;pQzAZcuK-1R5!fQ@3LY&dgx@MbWMZ{t+# z$IbXmxPfDHXa~AuUGiGIQ*C@gM&lE4C2qy{cuNp_N=7?<*^hTIziMxPeD(JcxJl?m z>o5(Y8)&DOKa--^NUX(cLRPUqtAyUy|5!Ch*=cwkPvUEQRj0Fm;SF4m^#<-Z48s~c zB#8H0o$d5;7@G$h7f!;PxU|6r`g4yknBF3cS>tOLKZb5$FkXt~k+Kg8LE;W!{2QLx zQ~tv?AzB~9D10csZ?rOh!SKoybvMW!Z94H>3fp~;_k^3BD{E6W-iSawcr1fYV})_2 zo(;gwa{Nogq6`f;Dp0o&0AfrQ#;itmNxOt8Nkfblp1EcT)FVWkT9IZJe#l_2*71ih zr^`%l6uV8BS2U9uSe$TfE;h;G&R3a?PjGeCik(7uUXqg|Sy^I#U~im(W%xFs&P*X1 zCb3QEd4qA6uvGdkgOBFP-evQ6#Cnf8S)9eg5qpnhv{#b~uE^719W2aPKK4q=-}O2& z7@fkxvzP6-FGansgx{ZcbP-vLCmbE~E=p0pFR`$_HKV;KU5<9oEqNPHU`wAif67?* zQ^}84x5n0b1E^?!{eMfdwBLbqYMlQDzc=R2u~g)<>TQH9uer^_DK*Z&+@LQ5sNg`} zMl-TML)pt}oI8LQ8uVoV6|H||H%t51)j0Q*koC-!PGQuaRsDW4ZcI_HOUUi?XSUjt zxL!`~^EqwQnJRfovO~57a3+>(?L=`|NsDA{Pr?ioOnTn7%X(by|l$nIP6V5Hg z`}w&ukPaci-ijWS_VHSuQ2+7NS6L^OYC}&K-B1E6Qj}SY8~Xj$BMc4q=k8GgW3(n8 zG%DiP9Q@m_-fp#{Sz$CYqu3*!QM?%c^eNwsmxSC-%V<_kdUXvSI)nt?zG~UScvYLc z&^|(lDn$x^^pUXdHW;&oU5`V;F6jf>@NW>~go`Lbpbre(iWw%PKCTgZ&L#5OIxdV+ zYCmrE2((6W&l$2Tk}bL=MXNMhJVTbz!YnrHWO6I+6c6QXP1d)v<_S6E`8Zq1&5RTF ou=faWacmNnFJI>8X6yJL+-|mR&*?Bx00000NkvWtM6N<$g8k8GDgXcg diff --git a/app/src/main/res/drawable-xxhdpi/ic_add_before.png b/app/src/main/res/drawable-xxhdpi/ic_add_before.png index 0dd561835436acacef5ec57041c106d7760ee3c8..15ae5576eae2ade126ee6bfddda3d7631e44dc28 100644 GIT binary patch delta 321 zcmX@Y^`B{iiV$akM`SSrgN_#nGnQAC_)c_FuV>`(ba4!+nDh3AVcsDF2DgXuEk}a< z4v1=A&#^ujdxFo|)?k9o)m9b0_mlUiC~cZ=BcVP?Wowq{SC+2q^Pf*X-#)L3sW@FB z0SOu$b6oRY;D?TWY_m0o1Qhzz%?+rydr^y-5ea%us{e9rn`fWrzR4v&_s+_wEJ@X! zpPKuBlYh~?gNx!!{Ze~Fw{iCu%dgB*mrXbLx$)RSwF~EY)a8F~Lc%fD|`X0@nwPV?eALpD^-oYL2 dIZ0*ZFlcCBq9WJLP=Bz2nYy#2xN!=000SaNLh0L02UeJ0_K!p;STyLNCCbeWO*0UQ+N-I%X+HeU@s6|SoH^&**_pZb?gxf@ z?mctn_nYs|nKSd7IopGoOMx4K`9M#9f&87oF<>0nF~^YcJYXfzNB4*WPy-eKb0b5> z0buUT`x7jSOaj%NxDhUOlR#b1tUv~41u`%zkb#=v{2#z^;DjOHg}`-IJPM2&Z~@t4 zoa2Z{c}xI*)4>9*1h!Cpyt5Se*_uaz5drT4E0C5@g+bs5@V_mmLL%v;zX5K4!F)TV zF#wzd{A2I9}dHXI6#v~kd1!1@wp z491^bBTzr^eu*-=t_8gUTwbD#e&AfXM4%;O&eELm)22eR0X)>wM zWf>W!Nbg@v_^z0>lsx9MLKRzq-zx~zF(d;0gR~Z%_Z<2XJo?z?FmP7Ivb^6KwvsxM z{!y#s2udf_t*8QR*Us&7=tr=q0u3Y0D&c@*UxGvxXfN=s@;z-*+I8sR4s}pyT6OIT zbb&qqevOakJN6|=bb(HP0BhspOC0;sR(uNl(8Bcx2w)6jDW!4|(n&9%w&7%U9{~@OA8!gd<+1{4O;018cbS66 zfYm^6Tvji#q;xWXN*7JWnZyvVzeOYafcup)9|DdBQ28QhN0u;uX9I8NT(~*oy3IM) zyh<}{duJPn)Bu*J4F>ywkAOR})T_udz#`xgB!+z-B2&B3g_2*ub~_Tq69BMb7bT zKbHuZRr}_F^{+=l8Ybo`$H6agZ=ifI zsg-btp4QDkovaZ7UwZc8E6?_GiIBLfud&D&vf(pWBBYsb@??LbC%c77!W~)YmFwW+jMGAEEVdE2+!TfjYZ*z4m%$WHrKmT>pbCQCe3sZ(ut$1bE#>z!U? z`%w1%)TKxa`6gt8R6lS&a$6ok{%gYsGJOepgj|$U#h^(}|D;es00000NkvXXu0mjf Dpao$I diff --git a/app/src/main/res/drawable-xxhdpi/ic_add_left.png b/app/src/main/res/drawable-xxhdpi/ic_add_left.png index 36da9d7f5f3225e2c1942d1e4e8d2d91854b90d4..52e6f1038a06bfd82cf08ad541868fd835581022 100644 GIT binary patch delta 354 zcmaFKwSakoiV$akM`SSrgN_#nGnQAC_)c_FuV>Wtba4!+nDh3wVIGsA1nWcbmQB3o z54t*npXxPoY3T`7X-wj3Op845uk+btjqn)-?RhJti$VdG0?OyHfDu RH4hnpz|+;wWt~$(69Bg-j>7-| delta 1331 zcmV-312_`i0nv~Nn{aGRzg%*N>P#Y$BUqg>Z(5$M1P=* z$mk+cGQ}{mFuExS`U|CzcvE3TL}H{VWfG=kbjs3Bh3DGUi}P1*aEmJdKGMtbSfprXyHX!9dAQG^6IziKTkMNtKcv=z01A zrO+2Bg}y*3^aVe!<;DN3L}@Hei(v@u-gT@j95ssM2)PN4nO{o}ZxgZd*_f<0J++q>jf zDn$!4y@R^LLXg+-8gA^CQ|(ZsKm$0TgL*gNBfNvFy6jgfMG7=1W-i)gw`j9|zz1UX zrErSs=J(6?cx@4l@E&Ybk~kE9BhWvh2g@SR1PoyT&dI~6b}2%jS_6G*hB~wG99|Z8 zP-#?fAZHt$_F%V)M)~3Hx|59xcI0ehEM5Fl_zWL*&z)>k@Tq7N59VZ}CeUDFspg!A zdE#+9qN#`h-$>oIPb4Rdq-<+N*2z#CW%JkyVOoRH?{HT2+=>(je-#3MznN0*uoh@; zoxv|~a^1O!_&mkQ*?1(SOfFkd1I1bcy&jhtO^_nSNw#55!LOd-T{fq5JeEi7BleZ_25$(fTbwH`J+Rke(yMW( z$?+j2iPUQX?Gmw{Mt;J7DFyq2?BB{9TrI*6Gex^FS&WwVVyhULzmH8i8%M0er47fn z;EWEgHCFbtQ)mG9;#=7oxNW#k_T1~s8?JMp>ci5E_PenyPjhx5c8<}=F5Hkopwk-a z*IraN8Jizjwx6+5LI&{Bcp>2et6J1sl~Csyj8By(Y#*wtcUK#KbqZw)Hb_>u6M;tX zHjZh-hu^B@4=Q#E!vARO#U|k`T#=K#>%{a;(w#KksEBLD;IT9s1zIUTacV5UlL_aK z6Cw?Zg)F5~FVI5VS&-d_aD9t&weEbm{G*+z)C3xk{Ib|>#)&vkvtDAJ7*Z@L(4Usn z1iC}ES%+>gUGq7A_A5oe{?B6FX--9an~O`b-)Q#|yd(nkJwZjhKFlo1{+YP2`gx-G zvR*04m!?!iuTm!StNWwyahZ-ZqqbhP#x9Y$l}4-H;xs7@|#0+U8=WA~r{?xk9TiYmKDv!w?aqBc5)NFe+hyST-R78-xOxBldKaq-v z^_Ddj*`|lyyP8oExB1GF?5`-vZrjwt9c#pEMv?3kuO>ZBO`yNT99EGmmS5Um*QgJ< zz9H_UB3LbdW;lAD#-RP(BJDpT5^Tq7LEU`fD pSn*i?f^Wpn{H@dDBjk4Z4`gKmrH;3{c>n+a07*p#PDHLkV1nD=kk|kK diff --git a/app/src/main/res/drawable-xxhdpi/ic_add_right.png b/app/src/main/res/drawable-xxhdpi/ic_add_right.png index c97d3f39aec60529cfc796f3d6561877bb48ff69..59cff68882e9c596e9ecb82e80bda17f35b3f91e 100644 GIT binary patch delta 368 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 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_add_before.png b/app/src/main/res/drawable-xxxhdpi/ic_add_before.png index 5f5482fcbdd5c9b5904c25a60f7f6e4b7b37c42c..985f0ac97adfe5891283d35e84afcf51a0da021e 100644 GIT binary patch delta 425 zcmeC@ea1XNMToP&BeIx*!I}?*8P9B6*gVlqy`Hhy)5S5QV$R!JXMGPFFt~rTmtQo! z%XLBY0TqJ)L5^jOnm3l%icNLiso*Fx=|J&^-=20yyM*jjgXXGDQt_M=RqPUffZ_L{ zkCAsT8`d(eHD)-&V8DEUhXIALLF${YSGDzi-dN`O3^N!L*cv1m(!h-RhN~Z}A1wc) zw&tY-R0u8yW_SW^nbjCNX}8LH&ux}9i*qY;?5`!weNuE}mzeG(8@0;S50+)i?pERV zJjb@~<90F6IISHAclJE@k$JeXY4)t!JLI=qijO#Y{oI6&-bH~?ckFgA+;02)<>tvM z=1V_WkTF((jIjb_j1?ebtN%a`iY4I7P{$f}zs3-yOsL^cZCdMGJ5%(CfZ#2ii2)T?;%43~R7uG%dh?)4)97 z9*uT?bRVq%btnT4uoAcf*ssa%T=#KAqfI06wt^l9t_A+lV7DTG1MJga&shA;&~?D& zz@CJ5j{v5+&-W&@Wi&zkfOmoOfu9rDEdfWl&+UC6gjyZ3&wz7)9SLk7?LJxoLI~># z4Y* zkv>B$?0uk`aio*`3NYk<^Il~9CQ2GbI%_kK-g8i%tJAy^6M3KL0^I0-Dc6R~0r>OW z*(k?Npbhy{N2&bh1Im}E{sui(<6I{KZz`P6q%;cj6VT8(Euw*4ga_%~j?5W5!1{pq zk4NqaSyx2XX&9L^|DUB13tm~H;=L?K+WsF0y!UzzErO$s3k(P@T%$3~aBH$Is`A`3r~l(^+rs zwpNSAk^rv&e}v>4K<)S65)rQe10nfdLYkHq&3Fa)G9=#{X**I>{K2`u0f+gH{fl(G zMl_w%(PYO6{7uC70`h!;zRI`w@C)!xK%TD~;Yd;O3$TIeo9(WD2KiD*`~vJo#`e7= z4O6s)5HuzEtnc+$BOECzK?1A;zW2P=v0%eegCGIMfk!;A4{wk!g``$s)*2=U(&jbD z7mJUJkWSN}X1kdW0p}@&?HBX|vNW{^cmepce%(f90@?n??!Z!q4&WQ);zk7}fC8RHsbp@rJHbklX8<6pTpnAp@AoB)6X+ebYLr6T4 zmz6oFq_omrpgXMMOUR8es=+xSw&p0XAZ!`& zD=AF@9I88iYeuq_{0gug!&^m*NmfB=3*fju8b@U??3PTuh{nxXJCGI~NbfA~-++Ct zuSQWucE_4pFJlg92hPjd3Ei{+7X%#t6!mx@|74B-y{(G&T7gr2$9jdFrG7`JfEHsm^kth?qpF>_TZn;zovgOzk-|6?OLulM^sut8?$yK0vj-Jy>g`=@LZ-|L?dXQI%6mS zpOD{wpP+3RJ|zkHo|Ipz?J9FlANdoYU*q-V9vhgI1D2B?0aj?evL?a?=VnX^c#7-< zSgrelnw3>FUVw)wK$BC2Uf?g%7hs6w|65}$$0E(aI5*NLsgDA-cH+>B1j_2F_-z!Z zlckFivZ8%0@kUWckd^m~vA^|+E1&}jZCr#dY-!L99LZ#)#W3&-@GUZ#vIY1614lLE Z@*h0hu-(E_0I&c6002ovPDHLkV1nB!`g#BW diff --git a/app/src/main/res/drawable-xxxhdpi/ic_add_left.png b/app/src/main/res/drawable-xxxhdpi/ic_add_left.png index 3888dba4f842ec8ad02a1db708d62ca8533ada48..c3d367e67076be9a92fd7ff7c60a506c27c9635e 100644 GIT binary patch literal 531 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9GAd?3ttX4}GMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=E75JY5_^D(1Ys>*#gZfx+!z z{KT@w>KE@FT3jLL$nsUMYx)NB4;-Z{Uo5&EFuCN**_3>s+%s={#xuhsk$h8%if#|1kM>Zo}~p!a&mZmHnF@z5=UiDGT$= z;ycYzHOkk&FnC!lWH&ghchb_fgOl%EVK-x)^}2uGtF5wZbmf}Fjxrc9AK+myW;lbL zagJ+`TlV$ms~>SSNHU}`%wSAl12ZBzKR4VmDZTd)B7WmSxx>qB&EWX;NB^$cypsv4 z3aZ?!M9$!Ac}4E`mf28qZV0_+-=XjE7}LykUophtmckhk-M^d4JoWf&-tSvr|ILqo z!4ffMo6F2E?uJe}|DoRh>f8Gfxsz=!Hov&5b<+EX|M!d93sP6Bd|&y$U`xex&%DWd oQvVB2o%i7#lLs((XFX$Izoco_aq+zGzzAjVboFyt=akR{0FSNF^8f$< delta 1742 zcmV;<1~K`Q1c45aBq9WJLP=Bz2nYy#2xN!=000SaNLh0L03C+_03C+`kLB@Ykv1oP z27XCIK~#90?VW9i6;&9=e|LN-cXhQ7H(^T>>DVAcp=E^vWkXOiFn`t`TzfFw$pvssE`Vcl0UVQm3*eYs z0LSD4I3^dsF}VPa$pvssE`Vcl0UVPH;Fw$h$K(PyCKtdlxd4vI1#nC*fMYbR2Y(6t z5|XEYL=#lw34`w%53Dw@l{%UPI0>9F$k!W^{%lD4MZm`>xcHz;fG+>_6<~SU=RKGS zQ;p|=SAk1`oxs%z?O8*U0Nwt7>op7v6iX5`Rs_}{7k@f(@h2y+XB{m9oJK+nL4Kt+ zI0M`dya!wlYzHp1WZN2A1SmB>9&m{TdnbT4ugBXd(H{@i*W` zTtALk~?&m6G44@v5{{FWs z&LZOgNOlhZSP9$;>;XPZXsaf8z){CObd|lgF$jARnY3GH!B*;cz*o4f1tkHRkXg#4 z%mnTNz6N$%u$L+x@^s;U7Nq;;LI@jO&>*Y**Nql!);$Z68)v1X9r=L_l^#6KA9N99nL|BY|6x#S{~Y z$Xah0=lQSy#PF#mXc3@?=oe`(5=&H#(t3c}J&?2r5SJH1(o3W4T!55lqk7FLrH!qD zFR{qF0DZvLD(OdmkTTi|b+Jy;CCLUP>|-`C3%DHVdyhf(YC8rTM`At?B0ZPg^w0m> zUXC`6b(O;5#IMDk(=R*nZAWTWir@n@1-w)wFKkHlBvkeP>TSkFzX#1^7C&tEvQ!7iFcvW5}*it65{hX zWX-r6^YsLkEFu0yN>hL$)dy<}{5-3o6;~ho(JR2W4Babw19=1~O0P*BHs(vx6rf1| z$hMqjiN;{n# zifAJf%qRIgO)chvibzCW-7ywB&(hXnGOoc&i4{@m1+}?$#DJ~HtZiLU8V782>V+Ab zTsx2^1!QGOYZG*Uj4wHwpm|aL9&4pk&UW;F39!Rr`P7ruz^uAr8F~a*VYOr#B5T39 zbw>f&aom*vbrIihgEiD%fM*y6UCt;hMgpJG7N7&TFO?G10aqg3!8kWklVdx>u(uP3 z#Ymv6tqXsEVKm6HMFF@2c$avys6EK`Wb??|`otHY5eaQ<1!f=vxn}w!ExLfefS-{e k#gyI1CVF)@s~MO70UsJ6>ZR;nN&o-=07*qoM6N<$f;4U!lmGw# diff --git a/app/src/main/res/drawable-xxxhdpi/ic_add_right.png b/app/src/main/res/drawable-xxxhdpi/ic_add_right.png index bd97da2b369f55a1f74b59070213bb9ee67d99ab..c440f1838e1007cbf1619649463cb08fbca147d8 100644 GIT binary patch literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9GAd?3ttX4}GMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=E8`JY5_^D(1Ys8|!u0LBj3f z_50r9i}DUn-67|=GS970w2Qld^P2aW!jH(*`8Mmt)yC3m^O^E2P zK5*&FzVrzuagxc5Bs1_t#d^`$?Xi`phX`wxs-22WQ% Jmvv4FO#o3H(F*_o delta 1751 zcmbW2X*|@60*3#yS#NeVwh;|w-x+4fHqM|dW9)Nk<{Y8OX%Is)gJe6#xKT3)8CjB4 zvZd%6%Mp$#Bq>+MR>D|1Ze}c<)BSco-}m=>KRjQakMCOn%~xO}^`Qx_o+O#?Nt21l z1pq+y5+O7J0CaNxTTs!`*12N);|!@BPj?p*yib@kkoTh3yz;)Off(RUWIooFs^svqen>$$%J1dHxU)`t>LVh)upjUgOqlY`c z@;+>VQ3LWqxCQg)E(XB*ANs!l&+4>Xfho0vOqdW)t*>ByFrh*0PqEwd{^!7IC{vYx zoF9aIbAaRNE<@7^!+ELd!m~WcRN<-h5NT5e-tZptl#Ik)_JdpEX>umX#U}G= z5g_8<%LOVy5c`UI4j=`vNk(_Z{bHapAZbLzzsu(imejX}#Oj?31!j0_upqq~7_TgH z9+8$Vg>(Mcz^yy^2YBrbD#@WqY8is43lWfxHQqLdd_6X=Gnw3Ce5J*dZ#c1@$#^jM z1_xkZU75QTClO+BH0YVK^0$f0i88wxryY5eB>M!AhuHgqV|p9g)^dp?6qd*`#Av*r2S zQ3ELI2|AGnl0%bYZ0eu9e*r9zM z@v>LcKvuP7&BO@`RPIdl#bm(t84`HlZyEL!H}`4U)3be(NXXX<5}#HEl?QQ{#xm(m_IP!@)7B;ZDL>kYqP;GUS191R}qye)AKHj3G;bI-DzGOfv)Xn$)AyMh^u^($-yCwJY_lS97{5 zz;N&X2(?`XlIPiO@eER0nN`1I<0WO{^OEGbBQT%JqMAz_xirb7##FSkwW`;S4*nYV zCtmq2{(q8#F~8ygV<99{(WWA$Z>J5AywVCG5%qm z=BJd&G=HD*S_-2AzZYie@krCkz!^j@t$LAm$2y>A-D)xJ^2>zfw+n`_6M(Ol`D<%f zS&>$|MqcNr;>|-KxeNTM+#`bsBJ}#?m>co5HebEwEOROAWf<3Rk)dDmS2~~pok-DT%T!z5 z7@&qT&s^vhXck~v|A5TOk^^m2SeE_=NIix#NTU~#AGE0c6MYRNv_lFoZMNXI!Qyn2 zaoSkbqXFEEWAJJIcJoFYfHRk1z_RHgB?E=N- z#biMZ*DdL~ex#NWZ5UoyBVYF;^UQYqo{h_tT$t#+^7m1wZtu%)(%q~Ju$Ty$e-A2K zWEc0h2DyY=R@Rp~jqelF8Mhx3>&j6DVN)u+*Axly)uq!T!)o$`B47t@7J41d8hXmr zm+oSrL5IuC{en_57h&`ar|9?T7z;?R{YRqxDKmE(1 zYM))KVmXD@4T7E=mDKoq_!sF91(=DS;gSFk&|9zrIG~vIZ diff --git a/app/src/main/res/menu/context_menu.xml b/app/src/main/res/menu/context_menu.xml index 1df82373..28a02b32 100644 --- a/app/src/main/res/menu/context_menu.xml +++ b/app/src/main/res/menu/context_menu.xml @@ -18,6 +18,11 @@ xmlns:tools="http://schemas.android.com/tools" tools:ignore="AlwaysShowAction"> + + diff --git a/images/icons/convert_file.sh b/images/icons/convert_file.sh index 453e2059..243958a2 100755 --- a/images/icons/convert_file.sh +++ b/images/icons/convert_file.sh @@ -3,5 +3,4 @@ NAME1=${1%.svg} TARGET="../../app/src/main/res/drawable-"${2}"/"${NAME1:2}".png" echo Converting to ${1} to png and plains SVG -inkscape --vacuum-defs --export-plain-svg=${1} ${1} -inkscape --export-png ${TARGET} -w ${3} -h ${3} ${1} +inkscape --export-type=png -w ${3} -h ${3} ${1} -o ${TARGET} \ No newline at end of file diff --git a/images/icons/ic_add_after.svg b/images/icons/ic_add_after.svg index 501e60da..5c333f7c 100644 --- a/images/icons/ic_add_after.svg +++ b/images/icons/ic_add_after.svg @@ -1,46 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - + \ No newline at end of file diff --git a/images/icons/ic_add_before.svg b/images/icons/ic_add_before.svg index 8dab5fba..fdbfd885 100644 --- a/images/icons/ic_add_before.svg +++ b/images/icons/ic_add_before.svg @@ -1,41 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - + \ No newline at end of file diff --git a/images/icons/ic_add_left.svg b/images/icons/ic_add_left.svg index aa77e32f..0597e6c0 100644 --- a/images/icons/ic_add_left.svg +++ b/images/icons/ic_add_left.svg @@ -1,41 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - + \ No newline at end of file diff --git a/images/icons/ic_add_right.svg b/images/icons/ic_add_right.svg index aada19f7..e35d5e93 100644 --- a/images/icons/ic_add_right.svg +++ b/images/icons/ic_add_right.svg @@ -1,41 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - + \ No newline at end of file