From 675626bc7728a797d3fd0f3276d855cf5eece471 Mon Sep 17 00:00:00 2001 From: serso Date: Tue, 8 Mar 2016 23:08:05 +0100 Subject: [PATCH] DirectionDragImageButton --- .../calculator/keyboard/BaseKeyboardUi.java | 40 +++++------ .../calculator/keyboard/KeyboardUi.java | 21 +++--- .../dragbutton/DirectionDragImageButton.java | 63 ++++++++++++++++++ .../views/dragbutton/DirectionTextView.java | 23 ++++--- .../android/views/dragbutton/DragButton.java | 4 +- .../views/dragbutton/DragImageButton.java | 52 +++++++++++++++ .../android/views/dragbutton/DragView.java | 9 +++ .../drawable-hdpi/ic_history_white_48dp.png | Bin 0 -> 870 bytes .../drawable-mdpi/ic_history_white_48dp.png | Bin 0 -> 604 bytes .../drawable-xhdpi/ic_history_white_48dp.png | Bin 0 -> 1190 bytes .../drawable-xxhdpi/ic_history_white_48dp.png | Bin 0 -> 1822 bytes .../ic_history_white_48dp.png | Bin 0 -> 2333 bytes .../res/layout/cpp_app_button_history.xml | 11 ++- 13 files changed, 172 insertions(+), 51 deletions(-) create mode 100644 app/src/main/java/org/solovyev/android/views/dragbutton/DirectionDragImageButton.java create mode 100644 app/src/main/java/org/solovyev/android/views/dragbutton/DragImageButton.java create mode 100644 app/src/main/java/org/solovyev/android/views/dragbutton/DragView.java create mode 100644 app/src/main/res/drawable-hdpi/ic_history_white_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_history_white_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_history_white_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_history_white_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_history_white_48dp.png diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java index 31f00dc4..15ad4181 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java @@ -12,33 +12,18 @@ import android.util.TypedValue; import android.view.View; import android.widget.ImageView; import android.widget.TextView; - -import org.solovyev.android.calculator.ActivityLauncher; -import org.solovyev.android.calculator.App; -import org.solovyev.android.calculator.BaseActivity; -import org.solovyev.android.calculator.Calculator; -import org.solovyev.android.calculator.Editor; -import org.solovyev.android.calculator.Keyboard; -import org.solovyev.android.calculator.Preferences; -import org.solovyev.android.calculator.PreferredPreferences; +import org.solovyev.android.calculator.*; import org.solovyev.android.calculator.buttons.CppSpecialButton; import org.solovyev.android.views.Adjuster; -import org.solovyev.android.views.dragbutton.DirectionDragButton; -import org.solovyev.android.views.dragbutton.DirectionDragListener; -import org.solovyev.android.views.dragbutton.DragButton; -import org.solovyev.android.views.dragbutton.DragDirection; -import org.solovyev.android.views.dragbutton.DragEvent; - -import java.util.ArrayList; -import java.util.List; +import org.solovyev.android.views.dragbutton.*; import javax.annotation.Nonnull; import javax.inject.Inject; +import java.util.ArrayList; +import java.util.List; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; -import static android.view.HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING; -import static android.view.HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING; -import static android.view.HapticFeedbackConstants.KEYBOARD_TAP; +import static android.view.HapticFeedbackConstants.*; import static org.solovyev.android.calculator.App.cast; import static org.solovyev.android.calculator.Preferences.Gui.Layout.simple; import static org.solovyev.android.calculator.Preferences.Gui.Layout.simple_mobile; @@ -53,7 +38,7 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer public static final float IMAGE_SCALE_ERASE = 0.4f; @NonNull - private final List dragButtons = new ArrayList<>(); + private final List dragButtons = new ArrayList<>(); @NonNull protected final DirectionDragListener listener; @Inject @@ -125,6 +110,17 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer button.setOnClickListener(this); } + protected final void prepareButton(@Nullable DirectionDragImageButton button) { + if (button == null) { + return; + } + dragButtons.add(button); + button.setVibrateOnDrag(keyboard.isVibrateOnKeypress()); + prepareButton((ImageView) button); + button.setOnDragListener(listener); + button.setTypeface(typeface); + } + protected final void prepareButton(@Nullable DirectionDragButton button) { if (button == null) { return; @@ -173,7 +169,7 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { if (Preferences.Gui.vibrateOnKeypress.isSameKey(key)) { final boolean vibrate = Preferences.Gui.vibrateOnKeypress.getPreference(preferences); - for (DragButton dragButton : dragButtons) { + for (DragView dragButton : dragButtons) { dragButton.setVibrateOnDrag(vibrate); } } diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/KeyboardUi.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/KeyboardUi.java index 9bb312a0..5b5d63c7 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/KeyboardUi.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/KeyboardUi.java @@ -10,7 +10,10 @@ import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageButton; - +import butterknife.Bind; +import butterknife.ButterKnife; +import jscl.AngleUnit; +import jscl.NumeralBase; import org.solovyev.android.calculator.ActivityLauncher; import org.solovyev.android.calculator.Engine; import org.solovyev.android.calculator.R; @@ -18,23 +21,15 @@ import org.solovyev.android.calculator.buttons.CppSpecialButton; import org.solovyev.android.calculator.history.History; import org.solovyev.android.calculator.view.AngleUnitsButton; import org.solovyev.android.views.dragbutton.DirectionDragButton; +import org.solovyev.android.views.dragbutton.DirectionDragImageButton; import org.solovyev.android.views.dragbutton.DragButton; import org.solovyev.android.views.dragbutton.DragDirection; import javax.annotation.Nonnull; import javax.inject.Inject; -import butterknife.Bind; -import butterknife.ButterKnife; -import jscl.AngleUnit; -import jscl.NumeralBase; - -import static org.solovyev.android.calculator.Engine.Preferences.angleUnit; -import static org.solovyev.android.calculator.Engine.Preferences.multiplicationSign; -import static org.solovyev.android.calculator.Engine.Preferences.numeralBase; -import static org.solovyev.android.views.dragbutton.DragDirection.down; -import static org.solovyev.android.views.dragbutton.DragDirection.left; -import static org.solovyev.android.views.dragbutton.DragDirection.up; +import static org.solovyev.android.calculator.Engine.Preferences.*; +import static org.solovyev.android.views.dragbutton.DragDirection.*; public class KeyboardUi extends BaseKeyboardUi { @@ -74,7 +69,7 @@ public class KeyboardUi extends BaseKeyboardUi { @Bind(R.id.cpp_button_functions) DirectionDragButton functionsButton; @Bind(R.id.cpp_button_history) - DirectionDragButton historyButton; + DirectionDragImageButton historyButton; @Bind(R.id.cpp_button_multiplication) DirectionDragButton multiplicationButton; @Bind(R.id.cpp_button_plus) diff --git a/app/src/main/java/org/solovyev/android/views/dragbutton/DirectionDragImageButton.java b/app/src/main/java/org/solovyev/android/views/dragbutton/DirectionDragImageButton.java new file mode 100644 index 00000000..37eb9298 --- /dev/null +++ b/app/src/main/java/org/solovyev/android/views/dragbutton/DirectionDragImageButton.java @@ -0,0 +1,63 @@ +package org.solovyev.android.views.dragbutton; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Typeface; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.text.TextPaint; +import android.util.AttributeSet; +import android.widget.TextView; + +import javax.annotation.Nonnull; + +public class DirectionDragImageButton extends DragImageButton { + private final DirectionTextView textView = new DirectionTextView(); + private final TextPaint baseTextPaint = new TextPaint(); + + public DirectionDragImageButton(Context context) { + super(context); + init(null); + } + + public DirectionDragImageButton(Context context, AttributeSet attrs) { + super(context, attrs); + init(attrs); + } + + public DirectionDragImageButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(attrs); + } + + public DirectionDragImageButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(attrs); + } + + private void init(@Nullable AttributeSet attrs) { + final TextView view = new TextView(getContext(), attrs); + baseTextPaint.set(view.getPaint()); + textView.init(this, attrs, baseTextPaint); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + textView.draw(canvas); + } + + @Nonnull + protected DirectionTextView.Text getText(@NonNull DragDirection direction) { + return textView.getText(direction); + } + + public void setTypeface(@Nonnull Typeface newTypeface) { + final Typeface oldTypeface = baseTextPaint.getTypeface(); + if(oldTypeface == newTypeface) { + return; + } + baseTextPaint.setTypeface(newTypeface); + textView.setBaseTextPaint(baseTextPaint); + } +} diff --git a/app/src/main/java/org/solovyev/android/views/dragbutton/DirectionTextView.java b/app/src/main/java/org/solovyev/android/views/dragbutton/DirectionTextView.java index 87d08e74..9923c6a8 100644 --- a/app/src/main/java/org/solovyev/android/views/dragbutton/DirectionTextView.java +++ b/app/src/main/java/org/solovyev/android/views/dragbutton/DirectionTextView.java @@ -12,9 +12,7 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.TextView; - import com.google.common.base.Strings; - import org.solovyev.android.Check; import org.solovyev.android.calculator.R; @@ -178,25 +176,32 @@ public class DirectionTextView { private void calculatePosition() { paint.getTextBounds(value, 0, value.length(), bounds); + + final int paddingLeft = padding; + final int paddingRight = padding; + final int paddingTop = padding; + final int paddingBottom = padding; + final int verticalPaddings = 0; + switch (direction) { case up: case down: - position.x = view.getWidth() - view.getPaddingLeft() - padding - bounds.width(); + position.x = view.getWidth() - paddingLeft - bounds.width(); if (direction == DragDirection.up) { - position.y = view.getPaddingTop() + padding + bounds.height(); + position.y = paddingTop + bounds.height(); } else { - position.y = view.getHeight() - view.getPaddingBottom() - padding; + position.y = view.getHeight() - paddingBottom; } break; case left: case right: if (direction == DragDirection.left) { - position.x = view.getPaddingLeft() + padding; + position.x = paddingLeft; } else { - position.x = view.getWidth() - view.getPaddingLeft() - padding - bounds.width(); + position.x = view.getWidth() - paddingRight - bounds.width(); } - final int availableHeight = view.getHeight() - view.getPaddingTop() - view.getPaddingBottom(); - position.y = view.getPaddingTop() + padding + availableHeight / 2 + bounds.height() / 2; + final int availableHeight = view.getHeight() - verticalPaddings; + position.y = paddingTop + availableHeight / 2 + bounds.height() / 2; break; } } diff --git a/app/src/main/java/org/solovyev/android/views/dragbutton/DragButton.java b/app/src/main/java/org/solovyev/android/views/dragbutton/DragButton.java index 1c721ef7..d0d8049b 100644 --- a/app/src/main/java/org/solovyev/android/views/dragbutton/DragButton.java +++ b/app/src/main/java/org/solovyev/android/views/dragbutton/DragButton.java @@ -9,7 +9,7 @@ import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.Button; -public class DragButton extends Button { +public class DragButton extends Button implements DragView { @NonNull private final DragGestureDetector dragDetector = new DragGestureDetector(this); @@ -41,10 +41,12 @@ public class DragButton extends Button { return super.onTouchEvent(event); } + @Override public void setOnDragListener(@Nullable DragListener listener) { dragDetector.setListener(listener); } + @Override public void setVibrateOnDrag(boolean vibrateOnDrag) { dragDetector.setVibrateOnDrag(vibrateOnDrag); } diff --git a/app/src/main/java/org/solovyev/android/views/dragbutton/DragImageButton.java b/app/src/main/java/org/solovyev/android/views/dragbutton/DragImageButton.java new file mode 100644 index 00000000..9413ce51 --- /dev/null +++ b/app/src/main/java/org/solovyev/android/views/dragbutton/DragImageButton.java @@ -0,0 +1,52 @@ +package org.solovyev.android.views.dragbutton; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.widget.ImageButton; + +public class DragImageButton extends ImageButton implements DragView { + @NonNull + private final DragGestureDetector dragDetector = new DragGestureDetector(this); + + public DragImageButton(Context context) { + super(context); + } + + public DragImageButton(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public DragImageButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public DragImageButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (dragDetector.onTouchEvent(event)) { + final MotionEvent cancelEvent = DragGestureDetector.makeCancelEvent(event); + super.onTouchEvent(cancelEvent); + cancelEvent.recycle(); + return true; + } + return super.onTouchEvent(event); + } + + public void setOnDragListener(@Nullable DragListener listener) { + dragDetector.setListener(listener); + } + + public void setVibrateOnDrag(boolean vibrateOnDrag) { + dragDetector.setVibrateOnDrag(vibrateOnDrag); + } +} diff --git a/app/src/main/java/org/solovyev/android/views/dragbutton/DragView.java b/app/src/main/java/org/solovyev/android/views/dragbutton/DragView.java new file mode 100644 index 00000000..bb2804c3 --- /dev/null +++ b/app/src/main/java/org/solovyev/android/views/dragbutton/DragView.java @@ -0,0 +1,9 @@ +package org.solovyev.android.views.dragbutton; + +import android.support.annotation.Nullable; + +public interface DragView { + void setOnDragListener(@Nullable DragListener listener); + + void setVibrateOnDrag(boolean vibrateOnDrag); +} diff --git a/app/src/main/res/drawable-hdpi/ic_history_white_48dp.png b/app/src/main/res/drawable-hdpi/ic_history_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1358a129cf1877b517c7c58bbf225e8b1d75cf75 GIT binary patch literal 870 zcmV-s1DX7ZP)Td!M-)H8VR$Gkd1qU+gtLP*j;rCX*q@ zA>7LcbYT(;Sj}n{Fp18*&pjMW?ypTbflrxFHS_p{k-<1X@YM1gx*LDK7CTRCYI z`^ystGKQo}(jW9C*m|(3Qebm>VQWo!3DA{fPP0;?h2GdYrMs1Fqu5jd*qkxguJnJi zW@0R3e+A+oR$xq{UOu=T+g+-HKRl957LJ5n-aJUV~z~xq(|kAZTN!q04!%0B`^@)?VRw zk%4TTa(0qAi`gwk4!~p%OR;yxk#u3K9Dr3kNqlF^n_ifHN6F5`3&s zqbsX1VlI}!6)Yjd zVlGr%>`oWbYR_(pj~v%99bZ$qOn)94xswUF8pln4!J9>nlWYFPIfoB9nwTa?(T5p7I1ejafh>h-1P?V2A6s0J}i^@GDwxDiNC*@ zOcHHv{~vp~(hG)s=_fz=(xB&DX7~8#EOepm%4~M71yP^V&8afwq^QFRPs#O&WziZN z4UrT+aD&6Gx7cDE9N|VEDJ1%=Yi)iOz%L$dd^zpuQNIG1%1&5e5Ws}}q6r6>2GDD1 z>GarL<0`= zE8v`H#&*EN5m|x6~GOhr87?B-Fd;+*M%6J}dL#@CqfM=tO zA;96a0!IS+ql_;B>uUuz0zQv2egZ766<7lJG5$!0W;*^Ja8Pa_B`W3aTK60A}7&N@-^J)Tfm5;;}6^lcqSUrQ8Ay`*{c8^k3OIQbHD%W zOuD0tZJA6algVT0>V@V9RKBR+{L?Q`q(p zRZ0izF&Y;-o##1( z0V;w49Lfu{Q%EN#$Q>@AkU3n#kO&Xo>zGS^InH$V>F2kUE2&mQ)Nl>W1rkn>eH?&K zKF_m?VxpFp$fuJ%>_2&y64uHYN{Dl4BWw|?+kNhjB5Vp9$^tfF8ezXsC0lrkus^7k zCDb#Du!rnj8p8fyxGZ7>qX^qc$x+D!f~HU_%cy5ML8B;FQd~<=D;vrIHldB6OO*^m zSVYhna)fgUn#TYo!7T(muafXTDjBa3biLxEnt7O(u!_@wdYUoKqEc~jDnVCDwgXID zN6-n1i!U(ErrLQxKjvZjSn<$E(6y3_024Q0%CU;#;4)0@3`r$m7#)}{P#nA)e*U-$ zF!2(mHxwP^v|>6WwSdDhHPcs7u_dNX`ll8!2p`ktii)!_eJQyNF!62T)1QYh-I;2@ zJ(%uSRJ?)d)Kmk`!1Su3;#W-Dr5dm!rk@lQvoO`A8qk1gx}u^L(~wjHhGA+}RQQ<6 zQw^xV)TKi3NWx1$z-EG{g3Mti;Gs#ZEO^SgsE@d%6K94X&d2j@#rSw(l@GQ+Yup&ecH^%g(~3TfwA4rhRhU@%AU3Y`?v!Lf3SU0Fae9elyvoW!=& z(vLn=FpLIv$b1$c{34N5wWHOmdCX-3%FC{OU%;if}-T(jq07*qoM6N<$ Ef>mlWoB#j- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_history_white_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_history_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5af97d008bbfc4f58f4db24378b32ccd2ea8ba1c GIT binary patch literal 1822 zcmV+(2jTdMP)Qyh4RlBmv>MOmWSH4;A zJIqFbsM5bRzvkE9R3m>n^r-ICU3%2%)nLYOw&r$bQLHRCu_;X&e5ht+uBVqEba4gC zP@%zs(Hy~71nqMUV3VUB%xS;ZBo*oaXHVIMN-m}l?{PM3GhRM0fps{C_bJ2~l*t~{aVvhc zat8C@s6aT($62)D*R|Bh4h-c{{CSae2DaJMvMw*<&wZrrIC>t#k0)6HM*$$kN<8f| zQH|n7CAX5_hpeiAu?8QJ-?fw}J~&)NK7AZTgF-+f$I?eWXDB`#Nj|UhH-(6Q@Fw}} zuXwOB`CLMSLPjH3kk3+z9&^x&mp-;oMA(KtynMlg=tt5g@G^^~6d{(Q6E6=^t|)OF zUcO>ZMU1)m8ZU<`I{c4*&pdxp4EVEWq8xu$G$`X4%w{pCV#3^XV)iI0MS<-w>t!j$ zh~?YyHpn7O3Y4DxR^*UCa=>V3y|h5Ou87OFmVDV zeZ>zI{E7yIf04uFNQH+{bYgO}WJ@54<1y)An8L!Ln0!csRe{ocjL8AvjTc{GvYKR5 zAc-|G`J4)cffX@%Lb5K9!!wvHqcCs{CM(z%NMaRCE?4jvMi1^@#IZ6^ikETMMUy**1G)GAX zdRgwK1{WwTcdyER=B;cDE>OMPeIfgqx3WI`Kv|W7Z1{odl0d~BLG2|SsKHktGUTNS zx$7pMj7lFFLg7CTzxGcBhGDq-Ebc@Z`NXgFa|Xi|2qxq1&3KQZjC{l0S8PR@28=)A z?wL4Gw2TUX*)z>RuATAnz!2JTcSBS!hO{UGIIPd7ghjC;FCMX8{l~&C9_^a%|eq@<1hNGty zF9+F^2cVOc6d_im3orLmZc`qBes;%+?9P?L%jb-wx3kp_i;G$)ZGpHr>MWAG8{ky3zgScgx@?<&fy%VY2y%Ln#TrK|BA ze%wQ~;zt$t;?GNL#1IVtL)d^<@#h{IWd~{t`nlv&n3t3aM2dwtmv;QRifY+|O3tGY zA9FUVGDbcyi4C}bk0`{clv(%hP_$?-IV#LMdPdLc4ZW>T^_e=pqsE{IgC*%b&TN#vNb>JOT#$(o?y z8m2~7sY-pyez(5X>v~zQ=oRNfB@&55B9TZW5{X12kw_#GiG-#853e*%QeSp*tpET3 M07*qoM6N<$g2Z)g;Q#;t literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_history_white_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_history_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..af09e61a8770e33f1dc670ffd357f01f1c4139a1 GIT binary patch literal 2333 zcmV+&3F7vNP)G0000Q&Nkl($CgllB7wvWNsv$k#9HhOH^yXU+0Zn(B>+m89>d-h#d^_xajr#}C|JWr|?;D1Sy*Q9Ivhz99D3y><&J4aJJ5B5&cH$^H$i_YF8U8yd zdF;h~WTTb+?2JD{aCb0JBE(=S39iGs3OIlcg1V7Xi2>!@Oi-=tYS*o|jbL73WXy{| zuMLL$i__6}J8O#}D53&w#!gE4Ij!iLLyj1P92TOh zfvwHF`oD~>Ys5f!=z5AgF%2`(li@Uj7mYIL87pRCC|#QIA1VgpaLo!jC^u`P$!q92 zRSd@&=y{Gj`>vkXhy@sho=e0GY)%V0=7=R&h>ix<7ZdOYblgskSb`iX(Xqmeoo+fl zU~RDoz4-{WF8WH+cnGz228v}ELI-L!k}P&X$Aw}cEt`JE=Jml`cwBQ9vKm4wkraH!63CSW5Jm3<^GEJ39#bp`ZAWuC-^ck%b4h=m0x@GAaZkM96Ul`B(O zz%}^mqIX=M-l+^oWdTD_*;nGgWc<~Uo5}+6Xu#hDi34}x?@p0a6`((osFpbJ1^zBb zZ2=eK?^B5$>!4DW+5-BbQk48YpiT->TfjL2i?%@fiMgO?3f#;O}9H8gJomP^t?U zn)pDDukiP?R2NW!zt1IV)ZuTlR2Q%X{=So_(SpCCR2NW;zb1(q8T=Kbx`0CbbxKfp zB*{y20p?fWxl2%z6?kD@f~a6Ci*LeshR3fi09qN#D%L)R;u#XZ0{%YY5Nlt=@RE;T z4YhmuiKU|myyW9oK}QGEStFVQZ6Y4V;Uylw0=houIC{mtL2{ zOQ@)cVM`ib!tpCm$kjBVC&Pj;haO5bBSV5~yH|#D-!PlR-}tS5X*z zOIjiyXy6$XzXJVu0$uO0mju9T__#MCAlij_DpNhG9Eu`ESi^7UJo^ZLDR+N$KOnNF4BAgXC*NTm^tT z%{Z)noEVFh8AS_!_Z}++c(+hHP~wDVX#5In!EFG*exi-rQTc*=i5H%+@hh-9Z&DTV z>DZH!|J97~VhsvdC&2ROTc~uhg(Lw_9l!0k8nxd`Qt(n9|K>EK)=!edEh&z_7qzI} zElHwCQj06mF-V*!Fq}?E=)_!yVm?7FL%BHNBbORxvUT#zJDh4drk) zdY&d%Y(#%C7)NUVoNcMth%vzV2LJVE&@;;3_yMjH12GO=kCSI}`~WM+H|)W43A*ap z()RcP9$;OAUb|}0cUT(Y2l$wQh727(LEp5r#1GKU733s5@w}2w^gTeHh4Cx?Nn0hj zMtm1Ryh-o0#ShTTCFCWrFnKl21o1UnSscH@tLzf<4^h8KFpUhhK7NHt%47P5;C6y) zWhb!>*AY|~H`71jugPi%uAP0vKI}>}*?55c$&28V)_r-9Y_zhE*ohI;lbz2P$4|l= z05XTK$xb6XiM{B@7i8}hJO+@{jlcS#T+3@@?`!K9-PwZI>7K8+k@M(BVSqCo`f>@? zG|)Y7vX$76wYi5dbnq&_V?3v@JN?+4wONH+3Mpm_N*Kx>oXIR|c%KYmxSyi*EOJlA zHdD!yG~r$4% z@m*>h$8j9TaU92S9LI4S$8j9TaU92S9LI4S$8r7$3#DsVo1$r?00000NkvXXu0mjf D(_L6K literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/cpp_app_button_history.xml b/app/src/main/res/layout/cpp_app_button_history.xml index 83668673..f247133f 100644 --- a/app/src/main/res/layout/cpp_app_button_history.xml +++ b/app/src/main/res/layout/cpp_app_button_history.xml @@ -21,12 +21,11 @@ ~ Email: se.solovyev@gmail.com ~ Site: http://se.solovyev.org --> - \ No newline at end of file + a:src="@drawable/ic_history_white_48dp" + app:directionTextDown="@string/cpp_kb_redo" + app:directionTextUp="@string/cpp_kb_undo" /> \ No newline at end of file