From b2787e4417d0e55e821f6a071027c1b467c8400f Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Mon, 20 Nov 2017 12:38:31 +0100 Subject: [PATCH] Improve editor usability --- .../activity/MemeCreateActivity.java | 59 +++++++++++++++---- .../memetastic/data/MemeEditorElements.java | 10 +++- .../main/res/layout/memecreate__content.xml | 1 + app/src/main/res/layout/text_settings.xml | 46 +++++++-------- app/src/main/res/values-de/strings.xml | 2 + 5 files changed, 82 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/io/github/gsantner/memetastic/activity/MemeCreateActivity.java b/app/src/main/java/io/github/gsantner/memetastic/activity/MemeCreateActivity.java index fc1185103..98661cf9c 100644 --- a/app/src/main/java/io/github/gsantner/memetastic/activity/MemeCreateActivity.java +++ b/app/src/main/java/io/github/gsantner/memetastic/activity/MemeCreateActivity.java @@ -19,12 +19,15 @@ import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; +import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.AppCompatImageButton; import android.support.v7.widget.Toolbar; import android.text.Layout; import android.text.StaticLayout; import android.text.TextPaint; +import android.text.TextUtils; import android.util.Base64; import android.util.Log; import android.view.Menu; @@ -36,6 +39,7 @@ import android.widget.Button; import android.widget.CompoundButton; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; @@ -156,6 +160,7 @@ protected void onCreate(Bundle savedInstanceState) { } initMemeSettings(savedInstanceState); initMoarControlsContainer(); + initCaptionButtons(); } if (savedInstanceState != null && savedInstanceState.containsKey("captionPosition") @@ -168,6 +173,13 @@ protected void onCreate(Bundle savedInstanceState) { } } + private void initCaptionButtons() { + final ImageButton buttonTextSettings = findViewById(R.id.settings_caption); + final ImageButton buttonOk = findViewById(R.id.done_caption); + buttonTextSettings.setColorFilter(R.color.black); + buttonOk.setColorFilter(R.color.black); + } + public void initMemeSettings(Bundle savedInstanceState) { MemeData.Font lastUsedFont = getFont(_app.settings.getLastUsedFont()); @@ -314,6 +326,11 @@ public void onBackPressed() { return; } + if (_editBar.getVisibility() != View.GONE) { + settingsDone(); + return; + } + // Auto save if option checked if (hasTextInput && _app.settings.isAutoSaveMeme()) { if (saveMemeToFilesystem(false)) { @@ -345,17 +362,16 @@ public void run() { @OnTouch(R.id.memecreate__activity__image) public boolean onImageTouched(View view, MotionEvent event) { - if (_editBar.getVisibility() == View.VISIBLE && - !_create_caption.getText().toString().isEmpty()) { + if (_editBar.getVisibility() == View.VISIBLE && !_create_caption.getText().toString().isEmpty()) { onMemeEditorObjectChanged(); } if (event.getAction() == MotionEvent.ACTION_DOWN) { - float _heightOfPic = view.getMeasuredHeight(); - float _heightOfEvent = event.getY(); + float heightOfPic = view.getMeasuredHeight(); + float heightOfEvent = event.getY(); - int _position = (int) (_heightOfEvent / _heightOfPic * 100); + int position = (int) (heightOfEvent / heightOfPic * 100); - _isBottom = _position >= 50; + _isBottom = position >= 50; _editBar.setVisibility(View.VISIBLE); @@ -429,10 +445,12 @@ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_share: { + recreateImage(true); _app.shareBitmapToOtherApp(_lastBitmap, this); return true; } case R.id.action_save: { + recreateImage(true); saveMemeToFilesystem(true); return true; } @@ -770,12 +788,19 @@ public Bitmap makeMemeImageFromElements(Context c, MemeEditorElements memeEditor for (MemeEditorElements.EditorCaption caption : _memeEditorElements.getCaptions()) { String textString = caption.isAllCaps() ? caption.getText().toUpperCase() : caption.getText(); - textString = textString.isEmpty() ? getString(R.string.empty_caption_hint) : textString; + if (TextUtils.isEmpty(textString)) { + textString = getString(R.string.empty_caption_hint); + paint.setTextSize((int) (scale * caption.getFontSize() * 5 / 8)); + paint.setTypeface(caption.getFont().typeFace); + paint.setColor(caption.getBorderColor()); + paint.setStyle(Paint.Style.FILL_AND_STROKE); + } else { + paint.setTextSize((int) (scale * caption.getFontSize())); + paint.setTypeface(caption.getFont().typeFace); + paint.setColor(caption.getBorderColor()); + paint.setStyle(Paint.Style.FILL_AND_STROKE); + } - paint.setTextSize((int) (caption.getFontSize() * scale)); - paint.setTypeface(caption.getFont().typeFace); - paint.setColor(caption.getBorderColor()); - paint.setStyle(Paint.Style.FILL_AND_STROKE); // set text width to canvas width minus 16dp padding int textWidth = canvas.getWidth() - (int) (16 * scale); @@ -834,6 +859,18 @@ public void onMemeEditorObjectChanged() { _lastBitmap = bmp; } + // createForSaving == true will make template text elements empty + public void recreateImage(boolean createForSaving) { + if (createForSaving) { + for (MemeEditorElements.EditorCaption caption : _memeEditorElements.getCaptions()) { + if (TextUtils.isEmpty(caption.getText())) { + caption.setText(" "); + } + } + } + onMemeEditorObjectChanged(); + } + @OnClick(R.id.memecreate__moar_controls__layout) void onBottomContainerClicked() { toggleMoarControls(true, false); diff --git a/app/src/main/java/io/github/gsantner/memetastic/data/MemeEditorElements.java b/app/src/main/java/io/github/gsantner/memetastic/data/MemeEditorElements.java index 46e6e2a8d..a02090d4b 100644 --- a/app/src/main/java/io/github/gsantner/memetastic/data/MemeEditorElements.java +++ b/app/src/main/java/io/github/gsantner/memetastic/data/MemeEditorElements.java @@ -67,11 +67,17 @@ public static class EditorCaption implements Serializable { private int _textColor = MemeLibConfig.MEME_COLORS.DEFAULT_TEXT; private int _borderColor = MemeLibConfig.MEME_COLORS.DEFAULT_BORDER; private boolean _allCaps = true; + private String _text = ""; public EditorCaption(MemeData.Font font, int positionType) { _font = font; + + // TODO: Really load this from config if possible _captionConf = new MemeConfig.Caption(); _captionConf.setPositionType(positionType); + _captionConf.setText(""); + // end to-do + _text = _captionConf.getText(); } public EditorCaption(MemeData.Font font, MemeConfig.Caption captionConf) { @@ -141,11 +147,11 @@ public void setAllCaps(boolean allCaps) { } public String getText() { - return _captionConf.getText(); + return _text; } public void setText(String text) { - _captionConf.setText(text); + _text = text; } @Override diff --git a/app/src/main/res/layout/memecreate__content.xml b/app/src/main/res/layout/memecreate__content.xml index 5dd1ce1a0..28808bde9 100644 --- a/app/src/main/res/layout/memecreate__content.xml +++ b/app/src/main/res/layout/memecreate__content.xml @@ -21,6 +21,7 @@ android:layout_height="0dp" android:layout_weight="100" android:orientation="vertical" + android:clickable="true" android:paddingBottom="@dimen/default_margin_2"> + + + + + + + - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2c440515d..789712466 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -109,4 +109,6 @@ Titel editieren Verstecken Wieder einblenden + Text eingeben + Hier tippen um Caption einzufügen \ No newline at end of file