From b2588fbb6ecdb642cbc79625f04c0e4d0e309dfc Mon Sep 17 00:00:00 2001 From: Grishka Date: Mon, 14 Mar 2022 20:59:33 +0300 Subject: [PATCH] CW in compose --- .../android/fragments/ComposeFragment.java | 32 ++++++++++ .../ui/drawables/SpoilerStripesDrawable.java | 59 +++++++++++++++++++ mastodon/src/main/res/drawable/bg_cw_edit.xml | 22 +++++++ .../src/main/res/layout/fragment_compose.xml | 14 +++++ mastodon/src/main/res/values/strings.xml | 1 + 5 files changed, 128 insertions(+) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/ui/drawables/SpoilerStripesDrawable.java create mode 100644 mastodon/src/main/res/drawable/bg_cw_edit.xml diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index 0bdea08d..bd27e8e8 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -7,6 +7,7 @@ import android.content.ClipData; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Outline; +import android.graphics.drawable.LayerDrawable; import android.icu.text.BreakIterator; import android.net.Uri; import android.os.Build; @@ -54,6 +55,7 @@ import org.joinmastodon.android.model.Status; import org.joinmastodon.android.ui.CustomEmojiPopupKeyboard; import org.joinmastodon.android.ui.M3AlertDialogBuilder; import org.joinmastodon.android.ui.PopupKeyboard; +import org.joinmastodon.android.ui.drawables.SpoilerStripesDrawable; import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.utils.SimpleTextWatcher; import org.joinmastodon.android.ui.views.ReorderableLinearLayout; @@ -132,6 +134,8 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis private String uuid; private int pollDuration=24*3600; private String pollDurationStr; + private EditText spoilerEdit; + private boolean hasSpoiler; @Override public void onCreate(Bundle savedInstanceState){ @@ -191,6 +195,7 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis mediaBtn.setOnClickListener(v->openFilePicker()); pollBtn.setOnClickListener(v->togglePoll()); emojiBtn.setOnClickListener(v->emojiKeyboard.toggleKeyboardPopup(mainEditText)); + spoilerBtn.setOnClickListener(v->toggleSpoiler()); emojiKeyboard.setOnIconChangedListener(new PopupKeyboard.OnIconChangeListener(){ @Override public void onIconChanged(int icon){ @@ -230,6 +235,15 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis pollDurationView.setText(getString(R.string.compose_poll_duration, pollDurationStr=getResources().getQuantityString(R.plurals.x_days, 1, 1))); } + spoilerEdit=view.findViewById(R.id.content_warning); + LayerDrawable spoilerBg=(LayerDrawable) spoilerEdit.getBackground(); + spoilerBg.setDrawableByLayerId(R.id.left_drawable, new SpoilerStripesDrawable()); + spoilerBg.setDrawableByLayerId(R.id.right_drawable, new SpoilerStripesDrawable()); + if((savedInstanceState!=null && savedInstanceState.getBoolean("hasSpoiler", false)) || hasSpoiler){ + spoilerEdit.setVisibility(View.VISIBLE); + spoilerBtn.setSelected(true); + } + // TODO save and restore media attachments (when design is ready) return view; @@ -246,6 +260,7 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis outState.putStringArrayList("pollOptions", opts); outState.putInt("pollDuration", pollDuration); outState.putString("pollDurationStr", pollDurationStr); + outState.putBoolean("hasSpoiler", hasSpoiler); } } @@ -397,6 +412,9 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis for(DraftPollOption opt:pollOptions) req.poll.options.add(opt.edit.getText().toString()); } + if(hasSpoiler && spoilerEdit.length()>0){ + req.spoilerText=spoilerEdit.getText().toString(); + } if(uuid==null) uuid=UUID.randomUUID().toString(); ProgressDialog progress=new ProgressDialog(getActivity()); @@ -648,6 +666,20 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis menu.show(); } + private void toggleSpoiler(){ + hasSpoiler=!hasSpoiler; + if(hasSpoiler){ + spoilerEdit.setVisibility(View.VISIBLE); + spoilerBtn.setSelected(true); + spoilerEdit.requestFocus(); + }else{ + spoilerEdit.setVisibility(View.GONE); + spoilerEdit.setText(""); + spoilerBtn.setSelected(false); + mainEditText.requestFocus(); + } + } + private static class DraftMediaAttachment{ public Attachment serverAttachment; public Uri uri; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/drawables/SpoilerStripesDrawable.java b/mastodon/src/main/java/org/joinmastodon/android/ui/drawables/SpoilerStripesDrawable.java new file mode 100644 index 00000000..7c07f946 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/drawables/SpoilerStripesDrawable.java @@ -0,0 +1,59 @@ +package org.joinmastodon.android.ui.drawables; + +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; + +import org.joinmastodon.android.MastodonApp; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class SpoilerStripesDrawable extends Drawable{ + private Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG); + + public SpoilerStripesDrawable(){ + paint.setColor(0xff000000); + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeWidth(3); + } + + @Override + public void draw(@NonNull Canvas canvas){ + Rect bounds=getBounds(); + canvas.save(); + canvas.translate(bounds.left, bounds.top); + canvas.clipRect(0, 0, bounds.width(), bounds.height()); + float scale=MastodonApp.context.getResources().getDisplayMetrics().density; + canvas.scale(scale, scale, 0, 0); + + float height=bounds.height()/scale; + float y1=6.80133f; + float y2=-1.22874f; + while(y2 + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/layout/fragment_compose.xml b/mastodon/src/main/res/layout/fragment_compose.xml index 533ffff8..8a19ced5 100644 --- a/mastodon/src/main/res/layout/fragment_compose.xml +++ b/mastodon/src/main/res/layout/fragment_compose.xml @@ -16,6 +16,20 @@ android:layout_height="wrap_content" android:orientation="vertical"> + + Open email app Confirmation email sent Type or paste what\'s on your mind + Content warning \ No newline at end of file