From 4297f9375045a18ccc6319dc94cde2d2cea093c3 Mon Sep 17 00:00:00 2001
From: Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com>
Date: Wed, 13 Mar 2024 19:51:16 -0400
Subject: Submit poll posts with text content (of course with embedded images).

---
 .../infinityforreddit/PollPayload.java             |  25 +-
 .../activities/CommentActivity.java                |  13 +-
 .../activities/EditCommentActivity.java            |  13 +-
 .../infinityforreddit/activities/MainActivity.java |   4 +-
 .../activities/PostPollActivity.java               | 543 +++++++++---------
 .../activities/PostTextActivity.java               |  13 +-
 .../infinityforreddit/utils/Utils.java             |  13 +-
 app/src/main/res/layout/activity_post_poll.xml     | 606 +++++++++++----------
 app/src/main/res/values/strings.xml                |   1 +
 9 files changed, 681 insertions(+), 550 deletions(-)

(limited to 'app/src')

diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PollPayload.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PollPayload.java
index 0e33d3ed..1383ddf9 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PollPayload.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PollPayload.java
@@ -14,6 +14,8 @@ public class PollPayload {
     public String flairId;
     @SerializedName("flair_text")
     public String flairText;
+    @SerializedName("raw_rtjson")
+    public String richTextJSON;
     @SerializedName("post_to_twitter")
     public boolean postToTwitter = false;
     @SerializedName("sendreplies")
@@ -26,12 +28,14 @@ public class PollPayload {
     public String subredditName;
     @SerializedName("submit_type")
     public String submitType;
+    public String text;
     public String title;
     @SerializedName("validate_on_submit")
     public boolean validateOnSubmit = true;
 
     public PollPayload(String subredditName, String title, String[] options, int duration, boolean isNsfw,
-                       boolean isSpoiler, Flair flair, boolean sendReplies, String submitType) {
+                       boolean isSpoiler, Flair flair, boolean sendReplies,
+                       String submitType) {
         this.subredditName = subredditName;
         this.title = title;
         this.options = options;
@@ -45,4 +49,23 @@ public class PollPayload {
         this.sendReplies = sendReplies;
         this.submitType = submitType;
     }
+
+    public PollPayload(String subredditName, String title, String[] options, int duration, boolean isNsfw,
+                       boolean isSpoiler, Flair flair, String richTextJSON, String text, boolean sendReplies,
+                       String submitType) {
+        this.subredditName = subredditName;
+        this.title = title;
+        this.options = options;
+        this.duration = duration;
+        this.isNsfw = isNsfw;
+        this.isSpoiler = isSpoiler;
+        if (flair != null) {
+            flairId = flair.getId();
+            flairText = flair.getText();
+        }
+        this.richTextJSON = richTextJSON;
+        this.text = text;
+        this.sendReplies = sendReplies;
+        this.submitType = submitType;
+    }
 }
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java
index 78460e00..58f03537 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java
@@ -573,9 +573,16 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
     public void insertImageUrl(UploadedImage uploadedImage) {
         int start = Math.max(binding.commentCommentEditText.getSelectionStart(), 0);
         int end = Math.max(binding.commentCommentEditText.getSelectionEnd(), 0);
-        binding.commentCommentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
-                "![](" + uploadedImage.imageUrlOrKey + ")",
-                0, "![]()".length() + uploadedImage.imageUrlOrKey.length());
+        int realStart = Math.min(start, end);
+        if (realStart > 0 && binding.commentCommentEditText.getText().toString().charAt(realStart - 1) != '\n') {
+            binding.commentCommentEditText.getText().replace(realStart, Math.max(start, end),
+                    "\n![](" + uploadedImage.imageUrlOrKey + ")\n",
+                    0, "\n![]()\n".length() + uploadedImage.imageUrlOrKey.length());
+        } else {
+            binding.commentCommentEditText.getText().replace(realStart, Math.max(start, end),
+                    "![](" + uploadedImage.imageUrlOrKey + ")\n",
+                    0, "![]()\n".length() + uploadedImage.imageUrlOrKey.length());
+        }
     }
 
     @Override
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java
index a8caa0f0..c9dfc79e 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java
@@ -386,8 +386,15 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
     public void insertImageUrl(UploadedImage uploadedImage) {
         int start = Math.max(contentEditText.getSelectionStart(), 0);
         int end = Math.max(contentEditText.getSelectionEnd(), 0);
-        contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
-                "![](" + uploadedImage.imageUrlOrKey + ")",
-                0, "![]()".length() + uploadedImage.imageUrlOrKey.length());
+        int realStart = Math.min(start, end);
+        if (realStart > 0 && contentEditText.getText().toString().charAt(realStart - 1) != '\n') {
+            contentEditText.getText().replace(realStart, Math.max(start, end),
+                    "\n![](" + uploadedImage.imageUrlOrKey + ")\n",
+                    0, "\n![]()\n".length() + uploadedImage.imageUrlOrKey.length());
+        } else {
+            contentEditText.getText().replace(realStart, Math.max(start, end),
+                    "![](" + uploadedImage.imageUrlOrKey + ")\n",
+                    0, "![]()\n".length() + uploadedImage.imageUrlOrKey.length());
+        }
     }
 }
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java
index 73d7f0be..6bebaf35 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java
@@ -136,7 +136,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
         ActivityToolbarInterface, FABMoreOptionsBottomSheetFragment.FABOptionSelectionCallback,
         RandomBottomSheetFragment.RandomOptionSelectionCallback, MarkPostAsReadInterface, RecyclerViewContentScrollingInterface {
 
-    static final String EXTRA_MESSSAGE_FULLNAME = "ENF";
+    static final String EXTRA_MESSAGE_FULLNAME = "ENF";
     static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN";
 
     private static final String FETCH_USER_INFO_STATE = "FUIS";
@@ -327,7 +327,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
             mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
             inboxCount = savedInstanceState.getInt(INBOX_COUNT_STATE);
         } else {
-            mMessageFullname = getIntent().getStringExtra(EXTRA_MESSSAGE_FULLNAME);
+            mMessageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME);
             mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
         }
 
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostPollActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostPollActivity.java
index b03723d9..ec95327b 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostPollActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostPollActivity.java
@@ -1,5 +1,6 @@
 package ml.docilealligator.infinityforreddit.activities;
 
+import android.content.ActivityNotFoundException;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.res.ColorStateList;
@@ -9,38 +10,35 @@ import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Environment;
 import android.os.Handler;
+import android.provider.MediaStore;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.EditText;
-import android.widget.LinearLayout;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.appcompat.widget.Toolbar;
-import androidx.coordinatorlayout.widget.CoordinatorLayout;
 import androidx.core.content.ContextCompat;
+import androidx.core.content.FileProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.RequestManager;
 import com.bumptech.glide.request.RequestOptions;
-import com.google.android.material.appbar.AppBarLayout;
-import com.google.android.material.button.MaterialButton;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import com.google.android.material.divider.MaterialDivider;
-import com.google.android.material.materialswitch.MaterialSwitch;
-import com.google.android.material.slider.Slider;
 import com.google.android.material.snackbar.Snackbar;
-import com.google.android.material.textfield.TextInputEditText;
-import com.google.android.material.textfield.TextInputLayout;
 import com.google.gson.Gson;
-import com.libRG.CustomTextView;
 
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
+import org.json.JSONException;
 
+import java.io.File;
+import java.io.IOException;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.concurrent.Executor;
@@ -48,7 +46,6 @@ import java.util.concurrent.Executor;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import butterknife.BindView;
 import butterknife.ButterKnife;
 import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
 import ml.docilealligator.infinityforreddit.Flair;
@@ -56,20 +53,26 @@ import ml.docilealligator.infinityforreddit.Infinity;
 import ml.docilealligator.infinityforreddit.PollPayload;
 import ml.docilealligator.infinityforreddit.R;
 import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
+import ml.docilealligator.infinityforreddit.UploadImageEnabledActivity;
+import ml.docilealligator.infinityforreddit.UploadedImage;
 import ml.docilealligator.infinityforreddit.account.Account;
+import ml.docilealligator.infinityforreddit.adapters.MarkdownBottomBarRecyclerViewAdapter;
 import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIcon;
 import ml.docilealligator.infinityforreddit.bottomsheetfragments.AccountChooserBottomSheetFragment;
 import ml.docilealligator.infinityforreddit.bottomsheetfragments.FlairBottomSheetFragment;
+import ml.docilealligator.infinityforreddit.bottomsheetfragments.UploadedImagesBottomSheetFragment;
 import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
+import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
+import ml.docilealligator.infinityforreddit.databinding.ActivityPostPollBinding;
 import ml.docilealligator.infinityforreddit.events.SubmitPollPostEvent;
 import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
+import ml.docilealligator.infinityforreddit.markdown.RichTextJSONConverter;
 import ml.docilealligator.infinityforreddit.services.SubmitPostService;
 import ml.docilealligator.infinityforreddit.utils.Utils;
-import pl.droidsonroids.gif.GifImageView;
 import retrofit2.Retrofit;
 
 public class PostPollActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
-        AccountChooserBottomSheetFragment.AccountChooserListener {
+        UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener {
 
     static final String EXTRA_SUBREDDIT_NAME = "ESN";
 
@@ -83,75 +86,13 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
     private static final String FLAIR_STATE = "FS";
     private static final String IS_SPOILER_STATE = "ISS";
     private static final String IS_NSFW_STATE = "INS";
+    private static final String UPLOADED_IMAGES_STATE = "UIS";
 
     private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
+    private static final int PICK_IMAGE_REQUEST_CODE = 100;
+    private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
+    private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
 
-    @BindView(R.id.coordinator_layout_post_poll_activity)
-    CoordinatorLayout coordinatorLayout;
-    @BindView(R.id.appbar_layout_post_poll_activity)
-    AppBarLayout appBarLayout;
-    @BindView(R.id.toolbar_post_poll_activity)
-    Toolbar toolbar;
-    @BindView(R.id.account_linear_layout_post_poll_activity)
-    LinearLayout accountLinearLayout;
-    @BindView(R.id.account_icon_gif_image_view_post_poll_activity)
-    GifImageView accountIconImageView;
-    @BindView(R.id.account_name_text_view_post_poll_activity)
-    TextView accountNameTextView;
-    @BindView(R.id.subreddit_icon_gif_image_view_post_poll_activity)
-    GifImageView iconGifImageView;
-    @BindView(R.id.subreddit_name_text_view_post_poll_activity)
-    TextView subredditNameTextView;
-    @BindView(R.id.rules_button_post_poll_activity)
-    MaterialButton rulesButton;
-    @BindView(R.id.divider_1_post_poll_activity)
-    MaterialDivider divider1;
-    @BindView(R.id.flair_custom_text_view_post_poll_activity)
-    CustomTextView flairTextView;
-    @BindView(R.id.spoiler_custom_text_view_post_poll_activity)
-    CustomTextView spoilerTextView;
-    @BindView(R.id.nsfw_custom_text_view_post_poll_activity)
-    CustomTextView nsfwTextView;
-    @BindView(R.id.receive_post_reply_notifications_linear_layout_post_poll_activity)
-    LinearLayout receivePostReplyNotificationsLinearLayout;
-    @BindView(R.id.receive_post_reply_notifications_text_view_post_poll_activity)
-    TextView receivePostReplyNotificationsTextView;
-    @BindView(R.id.receive_post_reply_notifications_switch_material_post_poll_activity)
-    MaterialSwitch receivePostReplyNotificationsSwitchMaterial;
-    @BindView(R.id.divider_2_post_poll_activity)
-    MaterialDivider divider2;
-    @BindView(R.id.post_title_edit_text_post_poll_activity)
-    EditText titleEditText;
-    @BindView(R.id.divider_3_post_poll_activity)
-    MaterialDivider divider3;
-    @BindView(R.id.voting_length_text_view_post_poll_activity)
-    TextView votingLengthTextView;
-    @BindView(R.id.voting_length_seek_bar_post_poll_activity)
-    Slider votingLengthSlider;
-    @BindView(R.id.option_1_text_input_layout_post_poll_activity)
-    TextInputLayout option1TextInputLayout;
-    @BindView(R.id.option_1_text_input_layout_edit_text_post_poll_activity)
-    TextInputEditText option1TextInputEditText;
-    @BindView(R.id.option_2_text_input_layout_post_poll_activity)
-    TextInputLayout option2TextInputLayout;
-    @BindView(R.id.option_2_text_input_layout_edit_text_post_poll_activity)
-    TextInputEditText option2TextInputEditText;
-    @BindView(R.id.option_3_text_input_layout_post_poll_activity)
-    TextInputLayout option3TextInputLayout;
-    @BindView(R.id.option_3_text_input_layout_edit_text_post_poll_activity)
-    TextInputEditText option3TextInputEditText;
-    @BindView(R.id.option_4_text_input_layout_post_poll_activity)
-    TextInputLayout option4TextInputLayout;
-    @BindView(R.id.option_4_text_input_layout_edit_text_post_poll_activity)
-    TextInputEditText option4TextInputEditText;
-    @BindView(R.id.option_5_text_input_layout_post_poll_activity)
-    TextInputLayout option5TextInputLayout;
-    @BindView(R.id.option_5_text_input_layout_edit_text_post_poll_activity)
-    TextInputEditText option5TextInputEditText;
-    @BindView(R.id.option_6_text_input_layout_post_poll_activity)
-    TextInputLayout option6TextInputLayout;
-    @BindView(R.id.option_6_text_input_layout_edit_text_post_poll_activity)
-    TextInputEditText option6TextInputEditText;
     @Inject
     @Named("no_oauth")
     Retrofit mRetrofit;
@@ -159,6 +100,9 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
     @Named("oauth")
     Retrofit mOauthRetrofit;
     @Inject
+    @Named("upload_media")
+    Retrofit mUploadMediaRetrofit;
+    @Inject
     RedditDataRoomDatabase mRedditDataRoomDatabase;
     @Inject
     @Named("default")
@@ -192,6 +136,9 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
     private RequestManager mGlide;
     private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
     private Snackbar mPostingSnackbar;
+    private Uri capturedImageUri;
+    private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
+    private ActivityPostPollBinding binding;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -200,7 +147,8 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
         setImmersiveModeNotApplicable();
 
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_post_poll);
+        binding = ActivityPostPollBinding.inflate(getLayoutInflater());
+        setContentView(binding.getRoot());
 
         ButterKnife.bind(this);
 
@@ -209,15 +157,15 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
         applyCustomTheme();
 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isChangeStatusBarIconColor()) {
-            addOnOffsetChangedListener(appBarLayout);
+            addOnOffsetChangedListener(binding.appbarLayoutPostPollActivity);
         }
 
-        setSupportActionBar(toolbar);
+        setSupportActionBar(binding.toolbarPostPollActivity);
         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
         mGlide = Glide.with(this);
 
-        mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
+        mPostingSnackbar = Snackbar.make(binding.coordinatorLayoutPostPollActivity, R.string.posting, Snackbar.LENGTH_INDEFINITE);
 
         resources = getResources();
 
@@ -234,23 +182,24 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
             flair = savedInstanceState.getParcelable(FLAIR_STATE);
             isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE);
             isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE);
+            uploadedImages = savedInstanceState.getParcelableArrayList(UPLOADED_IMAGES_STATE);
 
             if (selectedAccount != null) {
                 mGlide.load(selectedAccount.getProfileImageUrl())
                         .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
                         .error(mGlide.load(R.drawable.subreddit_default_icon)
                                 .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
-                        .into(accountIconImageView);
+                        .into(binding.accountIconGifImageViewPostPollActivity);
 
-                accountNameTextView.setText(selectedAccount.getAccountName());
+                binding.accountNameTextViewPostPollActivity.setText(selectedAccount.getAccountName());
             } else {
                 loadCurrentAccount();
             }
 
             if (subredditName != null) {
-                subredditNameTextView.setTextColor(primaryTextColor);
-                subredditNameTextView.setText(subredditName);
-                flairTextView.setVisibility(View.VISIBLE);
+                binding.subredditNameTextViewPostPollActivity.setTextColor(primaryTextColor);
+                binding.subredditNameTextViewPostPollActivity.setText(subredditName);
+                binding.flairCustomTextViewPostPollActivity.setVisibility(View.VISIBLE);
                 if (!loadSubredditIconSuccessful) {
                     loadSubredditIcon();
                 }
@@ -262,20 +211,20 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
             }
 
             if (flair != null) {
-                flairTextView.setText(flair.getText());
-                flairTextView.setBackgroundColor(flairBackgroundColor);
-                flairTextView.setBorderColor(flairBackgroundColor);
-                flairTextView.setTextColor(flairTextColor);
+                binding.flairCustomTextViewPostPollActivity.setText(flair.getText());
+                binding.flairCustomTextViewPostPollActivity.setBackgroundColor(flairBackgroundColor);
+                binding.flairCustomTextViewPostPollActivity.setBorderColor(flairBackgroundColor);
+                binding.flairCustomTextViewPostPollActivity.setTextColor(flairTextColor);
             }
             if (isSpoiler) {
-                spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
-                spoilerTextView.setBorderColor(spoilerBackgroundColor);
-                spoilerTextView.setTextColor(spoilerTextColor);
+                binding.spoilerCustomTextViewPostPollActivity.setBackgroundColor(spoilerBackgroundColor);
+                binding.spoilerCustomTextViewPostPollActivity.setBorderColor(spoilerBackgroundColor);
+                binding.spoilerCustomTextViewPostPollActivity.setTextColor(spoilerTextColor);
             }
             if (isNSFW) {
-                nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
-                nsfwTextView.setBorderColor(nsfwBackgroundColor);
-                nsfwTextView.setTextColor(nsfwTextColor);
+                binding.nsfwCustomTextViewPostPollActivity.setBackgroundColor(nsfwBackgroundColor);
+                binding.nsfwCustomTextViewPostPollActivity.setBorderColor(nsfwBackgroundColor);
+                binding.nsfwCustomTextViewPostPollActivity.setTextColor(nsfwTextColor);
             }
         } else {
             isPosting = false;
@@ -286,33 +235,33 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
                 loadSubredditIconSuccessful = false;
                 subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
                 subredditSelected = true;
-                subredditNameTextView.setTextColor(primaryTextColor);
-                subredditNameTextView.setText(subredditName);
-                flairTextView.setVisibility(View.VISIBLE);
+                binding.subredditNameTextViewPostPollActivity.setTextColor(primaryTextColor);
+                binding.subredditNameTextViewPostPollActivity.setText(subredditName);
+                binding.flairCustomTextViewPostPollActivity.setVisibility(View.VISIBLE);
                 loadSubredditIcon();
             } else {
                 mGlide.load(R.drawable.subreddit_default_icon)
                         .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
-                        .into(iconGifImageView);
+                        .into(binding.subredditIconGifImageViewPostPollActivity);
             }
         }
 
-        accountLinearLayout.setOnClickListener(view -> {
+        binding.accountLinearLayoutPostPollActivity.setOnClickListener(view -> {
             AccountChooserBottomSheetFragment fragment = new AccountChooserBottomSheetFragment();
             fragment.show(getSupportFragmentManager(), fragment.getTag());
         });
 
-        iconGifImageView.setOnClickListener(view -> subredditNameTextView.performClick());
+        binding.subredditIconGifImageViewPostPollActivity.setOnClickListener(view -> binding.subredditNameTextViewPostPollActivity.performClick());
 
-        subredditNameTextView.setOnClickListener(view -> {
+        binding.subredditNameTextViewPostPollActivity.setOnClickListener(view -> {
             Intent intent = new Intent(this, SubredditSelectionActivity.class);
             intent.putExtra(SubredditSelectionActivity.EXTRA_SPECIFIED_ACCOUNT, selectedAccount);
             startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
         });
 
-        rulesButton.setOnClickListener(view -> {
+        binding.rulesButtonPostPollActivity.setOnClickListener(view -> {
             if (subredditName == null) {
-                Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
+                Snackbar.make(binding.coordinatorLayoutPostPollActivity, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
             } else {
                 Intent intent = new Intent(this, RulesActivity.class);
                 if (subredditIsUser) {
@@ -324,7 +273,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
             }
         });
 
-        flairTextView.setOnClickListener(view -> {
+        binding.flairCustomTextViewPostPollActivity.setOnClickListener(view -> {
             if (flair == null) {
                 flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
                 Bundle bundle = new Bundle();
@@ -332,45 +281,70 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
                 flairSelectionBottomSheetFragment.setArguments(bundle);
                 flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
             } else {
-                flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
-                flairTextView.setTextColor(primaryTextColor);
-                flairTextView.setText(getString(R.string.flair));
+                binding.flairCustomTextViewPostPollActivity.setBackgroundColor(resources.getColor(android.R.color.transparent));
+                binding.flairCustomTextViewPostPollActivity.setTextColor(primaryTextColor);
+                binding.flairCustomTextViewPostPollActivity.setText(getString(R.string.flair));
                 flair = null;
             }
         });
 
-        spoilerTextView.setOnClickListener(view -> {
+        binding.spoilerCustomTextViewPostPollActivity.setOnClickListener(view -> {
             if (!isSpoiler) {
-                spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
-                spoilerTextView.setBorderColor(spoilerBackgroundColor);
-                spoilerTextView.setTextColor(spoilerTextColor);
+                binding.spoilerCustomTextViewPostPollActivity.setBackgroundColor(spoilerBackgroundColor);
+                binding.spoilerCustomTextViewPostPollActivity.setBorderColor(spoilerBackgroundColor);
+                binding.spoilerCustomTextViewPostPollActivity.setTextColor(spoilerTextColor);
                 isSpoiler = true;
             } else {
-                spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
-                spoilerTextView.setTextColor(primaryTextColor);
+                binding.spoilerCustomTextViewPostPollActivity.setBackgroundColor(resources.getColor(android.R.color.transparent));
+                binding.spoilerCustomTextViewPostPollActivity.setTextColor(primaryTextColor);
                 isSpoiler = false;
             }
         });
 
-        nsfwTextView.setOnClickListener(view -> {
+        binding.nsfwCustomTextViewPostPollActivity.setOnClickListener(view -> {
             if (!isNSFW) {
-                nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
-                nsfwTextView.setBorderColor(nsfwBackgroundColor);
-                nsfwTextView.setTextColor(nsfwTextColor);
+                binding.nsfwCustomTextViewPostPollActivity.setBackgroundColor(nsfwBackgroundColor);
+                binding.nsfwCustomTextViewPostPollActivity.setBorderColor(nsfwBackgroundColor);
+                binding.nsfwCustomTextViewPostPollActivity.setTextColor(nsfwTextColor);
                 isNSFW = true;
             } else {
-                nsfwTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
-                nsfwTextView.setTextColor(primaryTextColor);
+                binding.nsfwCustomTextViewPostPollActivity.setBackgroundColor(resources.getColor(android.R.color.transparent));
+                binding.nsfwCustomTextViewPostPollActivity.setTextColor(primaryTextColor);
                 isNSFW = false;
             }
         });
 
-        receivePostReplyNotificationsLinearLayout.setOnClickListener(view -> {
-            receivePostReplyNotificationsSwitchMaterial.performClick();
+        binding.receivePostReplyNotificationsLinearLayoutPostPollActivity.setOnClickListener(view -> {
+            binding.receivePostReplyNotificationsSwitchMaterialPostPollActivity.performClick();
         });
 
-        votingLengthTextView.setText(getString(R.string.voting_length, (int) votingLengthSlider.getValue()));
-        votingLengthSlider.addOnChangeListener((slider, value, fromUser) -> votingLengthTextView.setText(getString(R.string.voting_length, (int) value)));
+        binding.votingLengthTextViewPostPollActivity.setText(getString(R.string.voting_length, (int) binding.votingLengthSliderPostPollActivity.getValue()));
+        binding.votingLengthSliderPostPollActivity.addOnChangeListener((slider, value, fromUser) -> binding.votingLengthTextViewPostPollActivity.setText(getString(R.string.voting_length, (int) value)));
+
+        MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(
+                mCustomThemeWrapper, true,
+                new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() {
+                    @Override
+                    public void onClick(int item) {
+                        MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(
+                                PostPollActivity.this, binding.postContentEditTextPostPollActivity, item);
+                    }
+
+                    @Override
+                    public void onUploadImage() {
+                        Utils.hideKeyboard(PostPollActivity.this);
+                        UploadedImagesBottomSheetFragment fragment = new UploadedImagesBottomSheetFragment();
+                        Bundle arguments = new Bundle();
+                        arguments.putParcelableArrayList(UploadedImagesBottomSheetFragment.EXTRA_UPLOADED_IMAGES,
+                                uploadedImages);
+                        fragment.setArguments(arguments);
+                        fragment.show(getSupportFragmentManager(), fragment.getTag());
+                    }
+                });
+
+        binding.markdownBottomBarRecyclerViewPostPollActivity.setLayoutManager(new LinearLayoutManagerBugFixed(this,
+                LinearLayoutManager.HORIZONTAL, false));
+        binding.markdownBottomBarRecyclerViewPostPollActivity.setAdapter(adapter);
     }
 
     private void loadCurrentAccount() {
@@ -384,9 +358,9 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
                             .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
                             .error(mGlide.load(R.drawable.subreddit_default_icon)
                                     .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
-                            .into(accountIconImageView);
+                            .into(binding.accountIconGifImageViewPostPollActivity);
 
-                    accountNameTextView.setText(account.getAccountName());
+                    binding.accountNameTextViewPostPollActivity.setText(account.getAccountName());
                 }
             });
         });
@@ -409,85 +383,87 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
 
     @Override
     protected void applyCustomTheme() {
-        coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
-        applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
+        binding.coordinatorLayoutPostPollActivity.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
+        applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(binding.appbarLayoutPostPollActivity, null, binding.toolbarPostPollActivity);
         primaryTextColor = mCustomThemeWrapper.getPrimaryTextColor();
-        accountNameTextView.setTextColor(primaryTextColor);
+        binding.accountNameTextViewPostPollActivity.setTextColor(primaryTextColor);
         int secondaryTextColor = mCustomThemeWrapper.getSecondaryTextColor();
-        subredditNameTextView.setTextColor(secondaryTextColor);
-        rulesButton.setTextColor(mCustomThemeWrapper.getButtonTextColor());
-        rulesButton.setBackgroundColor(mCustomThemeWrapper.getColorPrimaryLightTheme());
-        receivePostReplyNotificationsTextView.setTextColor(primaryTextColor);
+        binding.subredditNameTextViewPostPollActivity.setTextColor(secondaryTextColor);
+        binding.rulesButtonPostPollActivity.setTextColor(mCustomThemeWrapper.getButtonTextColor());
+        binding.rulesButtonPostPollActivity.setBackgroundColor(mCustomThemeWrapper.getColorPrimaryLightTheme());
+        binding.receivePostReplyNotificationsTextViewPostPollActivity.setTextColor(primaryTextColor);
         int dividerColor = mCustomThemeWrapper.getDividerColor();
-        divider1.setDividerColor(dividerColor);
-        divider2.setDividerColor(dividerColor);
-        divider3.setDividerColor(dividerColor);
+        binding.divider1PostPollActivity.setDividerColor(dividerColor);
+        binding.divider2PostPollActivity.setDividerColor(dividerColor);
+        binding.divider3PostPollActivity.setDividerColor(dividerColor);
         flairBackgroundColor = mCustomThemeWrapper.getFlairBackgroundColor();
         flairTextColor = mCustomThemeWrapper.getFlairTextColor();
         spoilerBackgroundColor = mCustomThemeWrapper.getSpoilerBackgroundColor();
         spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
         nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
         nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
-        flairTextView.setTextColor(primaryTextColor);
-        spoilerTextView.setTextColor(primaryTextColor);
-        nsfwTextView.setTextColor(primaryTextColor);
-        titleEditText.setTextColor(primaryTextColor);
-        titleEditText.setHintTextColor(secondaryTextColor);
-        option1TextInputLayout.setBoxStrokeColor(primaryTextColor);
-        option1TextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
-        option1TextInputEditText.setTextColor(primaryTextColor);
-
-        option2TextInputLayout.setBoxStrokeColor(primaryTextColor);
-        option2TextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
-        option2TextInputEditText.setTextColor(primaryTextColor);
-
-        option3TextInputLayout.setBoxStrokeColor(primaryTextColor);
-        option3TextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
-        option3TextInputEditText.setTextColor(primaryTextColor);
-
-        option4TextInputLayout.setBoxStrokeColor(primaryTextColor);
-        option4TextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
-        option4TextInputEditText.setTextColor(primaryTextColor);
-
-        option5TextInputLayout.setBoxStrokeColor(primaryTextColor);
-        option5TextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
-        option5TextInputEditText.setTextColor(primaryTextColor);
-
-        option6TextInputLayout.setBoxStrokeColor(primaryTextColor);
-        option6TextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
-        option6TextInputEditText.setTextColor(primaryTextColor);
+        binding.flairCustomTextViewPostPollActivity.setTextColor(primaryTextColor);
+        binding.spoilerCustomTextViewPostPollActivity.setTextColor(primaryTextColor);
+        binding.nsfwCustomTextViewPostPollActivity.setTextColor(primaryTextColor);
+        binding.postTitleEditTextPostPollActivity.setTextColor(primaryTextColor);
+        binding.postTitleEditTextPostPollActivity.setHintTextColor(secondaryTextColor);
+        binding.postContentEditTextPostPollActivity.setTextColor(primaryTextColor);
+        binding.postContentEditTextPostPollActivity.setHintTextColor(secondaryTextColor);
+        binding.option1TextInputLayoutPostPollActivity.setBoxStrokeColor(primaryTextColor);
+        binding.option1TextInputLayoutPostPollActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
+        binding.option1TextInputLayoutEditTextPostPollActivity.setTextColor(primaryTextColor);
+
+        binding.option2TextInputLayoutPostPollActivity.setBoxStrokeColor(primaryTextColor);
+        binding.option2TextInputLayoutPostPollActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
+        binding.option2TextInputLayoutEditTextPostPollActivity.setTextColor(primaryTextColor);
+
+        binding.option3TextInputLayoutPostPollActivity.setBoxStrokeColor(primaryTextColor);
+        binding.option3TextInputLayoutPostPollActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
+        binding.option3TextInputLayoutEditTextPostPollActivity.setTextColor(primaryTextColor);
+
+        binding.option4TextInputLayoutPostPollActivity.setBoxStrokeColor(primaryTextColor);
+        binding.option4TextInputLayoutPostPollActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
+        binding.option4TextInputLayoutEditTextPostPollActivity.setTextColor(primaryTextColor);
+
+        binding.option5TextInputLayoutPostPollActivity.setBoxStrokeColor(primaryTextColor);
+        binding.option5TextInputLayoutPostPollActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
+        binding.option5TextInputLayoutEditTextPostPollActivity.setTextColor(primaryTextColor);
+
+        binding.option6TextInputLayoutPostPollActivity.setBoxStrokeColor(primaryTextColor);
+        binding.option6TextInputLayoutPostPollActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
+        binding.option6TextInputLayoutEditTextPostPollActivity.setTextColor(primaryTextColor);
 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
             Drawable cursorDrawable = Utils.getTintedDrawable(this, R.drawable.edit_text_cursor, primaryTextColor);
-            option1TextInputEditText.setTextCursorDrawable(cursorDrawable);
-            option2TextInputEditText.setTextCursorDrawable(cursorDrawable);
-            option3TextInputEditText.setTextCursorDrawable(cursorDrawable);
-            option4TextInputEditText.setTextCursorDrawable(cursorDrawable);
-            option5TextInputEditText.setTextCursorDrawable(cursorDrawable);
-            option6TextInputEditText.setTextCursorDrawable(cursorDrawable);
+            binding.option1TextInputLayoutEditTextPostPollActivity.setTextCursorDrawable(cursorDrawable);
+            binding.option2TextInputLayoutEditTextPostPollActivity.setTextCursorDrawable(cursorDrawable);
+            binding.option3TextInputLayoutEditTextPostPollActivity.setTextCursorDrawable(cursorDrawable);
+            binding.option4TextInputLayoutEditTextPostPollActivity.setTextCursorDrawable(cursorDrawable);
+            binding.option5TextInputLayoutEditTextPostPollActivity.setTextCursorDrawable(cursorDrawable);
+            binding.option6TextInputLayoutEditTextPostPollActivity.setTextCursorDrawable(cursorDrawable);
         } else {
-            setCursorDrawableColor(option1TextInputEditText, primaryTextColor);
-            setCursorDrawableColor(option2TextInputEditText, primaryTextColor);
-            setCursorDrawableColor(option3TextInputEditText, primaryTextColor);
-            setCursorDrawableColor(option4TextInputEditText, primaryTextColor);
-            setCursorDrawableColor(option5TextInputEditText, primaryTextColor);
-            setCursorDrawableColor(option6TextInputEditText, primaryTextColor);
+            setCursorDrawableColor(binding.option1TextInputLayoutEditTextPostPollActivity, primaryTextColor);
+            setCursorDrawableColor(binding.option2TextInputLayoutEditTextPostPollActivity, primaryTextColor);
+            setCursorDrawableColor(binding.option3TextInputLayoutEditTextPostPollActivity, primaryTextColor);
+            setCursorDrawableColor(binding.option4TextInputLayoutEditTextPostPollActivity, primaryTextColor);
+            setCursorDrawableColor(binding.option5TextInputLayoutEditTextPostPollActivity, primaryTextColor);
+            setCursorDrawableColor(binding.option6TextInputLayoutEditTextPostPollActivity, primaryTextColor);
         }
 
         if (typeface != null) {
-            subredditNameTextView.setTypeface(typeface);
-            rulesButton.setTypeface(typeface);
-            receivePostReplyNotificationsTextView.setTypeface(typeface);
-            flairTextView.setTypeface(typeface);
-            spoilerTextView.setTypeface(typeface);
-            nsfwTextView.setTypeface(typeface);
-            titleEditText.setTypeface(typeface);
-            option1TextInputEditText.setTypeface(typeface);
-            option2TextInputEditText.setTypeface(typeface);
-            option3TextInputEditText.setTypeface(typeface);
-            option4TextInputEditText.setTypeface(typeface);
-            option5TextInputEditText.setTypeface(typeface);
-            option6TextInputEditText.setTypeface(typeface);
+            binding.subredditNameTextViewPostPollActivity.setTypeface(typeface);
+            binding.rulesButtonPostPollActivity.setTypeface(typeface);
+            binding.receivePostReplyNotificationsTextViewPostPollActivity.setTypeface(typeface);
+            binding.flairCustomTextViewPostPollActivity.setTypeface(typeface);
+            binding.spoilerCustomTextViewPostPollActivity.setTypeface(typeface);
+            binding.nsfwCustomTextViewPostPollActivity.setTypeface(typeface);
+            binding.postTitleEditTextPostPollActivity.setTypeface(typeface);
+            binding.option1TextInputLayoutEditTextPostPollActivity.setTypeface(typeface);
+            binding.option2TextInputLayoutEditTextPostPollActivity.setTypeface(typeface);
+            binding.option3TextInputLayoutEditTextPostPollActivity.setTypeface(typeface);
+            binding.option4TextInputLayoutEditTextPostPollActivity.setTypeface(typeface);
+            binding.option5TextInputLayoutEditTextPostPollActivity.setTypeface(typeface);
+            binding.option6TextInputLayoutEditTextPostPollActivity.setTypeface(typeface);
         }
     }
 
@@ -517,11 +493,11 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
                     .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
                     .error(mGlide.load(R.drawable.subreddit_default_icon)
                             .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
-                    .into(iconGifImageView);
+                    .into(binding.subredditIconGifImageViewPostPollActivity);
         } else {
             mGlide.load(R.drawable.subreddit_default_icon)
                     .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
-                    .into(iconGifImageView);
+                    .into(binding.subredditIconGifImageViewPostPollActivity);
         }
     }
 
@@ -564,13 +540,13 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
                 promptAlertDialog(R.string.exit_when_submit, R.string.exit_when_submit_post_detail);
                 return true;
             } else {
-                if (!titleEditText.getText().toString().equals("")
-                        || !option1TextInputEditText.getText().toString().equals("")
-                        || !option2TextInputEditText.getText().toString().equals("")
-                        || !option3TextInputEditText.getText().toString().equals("")
-                        || !option4TextInputEditText.getText().toString().equals("")
-                        || !option5TextInputEditText.getText().toString().equals("")
-                        || !option6TextInputEditText.getText().toString().equals("")) {
+                if (!binding.postTitleEditTextPostPollActivity.getText().toString().equals("")
+                        || !binding.option1TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                        || !binding.option2TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                        || !binding.option3TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                        || !binding.option4TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                        || !binding.option5TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                        || !binding.option6TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")) {
                     promptAlertDialog(R.string.discard, R.string.discard_detail);
                     return true;
                 }
@@ -579,44 +555,44 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
             return true;
         } else if (itemId == R.id.action_send_post_poll_activity) {
             if (!subredditSelected) {
-                Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
+                Snackbar.make(binding.coordinatorLayoutPostPollActivity, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
                 return true;
             }
 
-            if (titleEditText.getText() == null) {
-                Snackbar.make(coordinatorLayout, R.string.title_required, Snackbar.LENGTH_SHORT).show();
+            if (binding.postTitleEditTextPostPollActivity.getText() == null) {
+                Snackbar.make(binding.coordinatorLayoutPostPollActivity, R.string.title_required, Snackbar.LENGTH_SHORT).show();
                 return true;
             }
 
             String subredditName;
             if (subredditIsUser) {
-                subredditName = "u_" + subredditNameTextView.getText().toString();
+                subredditName = "u_" + binding.subredditNameTextViewPostPollActivity.getText().toString();
             } else {
-                subredditName = subredditNameTextView.getText().toString();
+                subredditName = binding.subredditNameTextViewPostPollActivity.getText().toString();
             }
 
             ArrayList<String> optionList = new ArrayList<>();
-            if (!option1TextInputEditText.getText().toString().equals("")) {
-                optionList.add(option1TextInputEditText.getText().toString());
+            if (!binding.option1TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")) {
+                optionList.add(binding.option1TextInputLayoutEditTextPostPollActivity.getText().toString());
             }
-            if (!option2TextInputEditText.getText().toString().equals("")) {
-                optionList.add(option2TextInputEditText.getText().toString());
+            if (!binding.option2TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")) {
+                optionList.add(binding.option2TextInputLayoutEditTextPostPollActivity.getText().toString());
             }
-            if (!option3TextInputEditText.getText().toString().equals("")) {
-                optionList.add(option3TextInputEditText.getText().toString());
+            if (!binding.option3TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")) {
+                optionList.add(binding.option3TextInputLayoutEditTextPostPollActivity.getText().toString());
             }
-            if (!option4TextInputEditText.getText().toString().equals("")) {
-                optionList.add(option4TextInputEditText.getText().toString());
+            if (!binding.option4TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")) {
+                optionList.add(binding.option4TextInputLayoutEditTextPostPollActivity.getText().toString());
             }
-            if (!option5TextInputEditText.getText().toString().equals("")) {
-                optionList.add(option5TextInputEditText.getText().toString());
+            if (!binding.option5TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")) {
+                optionList.add(binding.option5TextInputLayoutEditTextPostPollActivity.getText().toString());
             }
-            if (!option6TextInputEditText.getText().toString().equals("")) {
-                optionList.add(option6TextInputEditText.getText().toString());
+            if (!binding.option6TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")) {
+                optionList.add(binding.option6TextInputLayoutEditTextPostPollActivity.getText().toString());
             }
             
             if (optionList.size() < 2) {
-                Snackbar.make(coordinatorLayout, R.string.two_options_required, Snackbar.LENGTH_SHORT).show();
+                Snackbar.make(binding.coordinatorLayoutPostPollActivity, R.string.two_options_required, Snackbar.LENGTH_SHORT).show();
                 return true;
             }
 
@@ -631,9 +607,33 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
             intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
             intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
             intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_POLL);
-            PollPayload payload = new PollPayload(subredditName, titleEditText.getText().toString(),
-                    optionList.toArray(new String[0]), (int) votingLengthSlider.getValue(), isNSFW, isSpoiler, flair, receivePostReplyNotificationsSwitchMaterial.isChecked(),
-                    subredditIsUser ? "profile" : "subreddit");
+
+            PollPayload payload;
+            if (!binding.postContentEditTextPostPollActivity.getText().toString().isEmpty()) {
+                if (uploadedImages.isEmpty()) {
+                    payload = new PollPayload(subredditName, binding.postTitleEditTextPostPollActivity.getText().toString(),
+                            optionList.toArray(new String[0]), (int) binding.votingLengthSliderPostPollActivity.getValue(), isNSFW, isSpoiler, flair,
+                            null, binding.postContentEditTextPostPollActivity.getText().toString(),
+                            binding.receivePostReplyNotificationsSwitchMaterialPostPollActivity.isChecked(),
+                            subredditIsUser ? "profile" : "subreddit");
+                } else {
+                    try {
+                        payload = new PollPayload(subredditName, binding.postTitleEditTextPostPollActivity.getText().toString(),
+                                optionList.toArray(new String[0]), (int) binding.votingLengthSliderPostPollActivity.getValue(), isNSFW, isSpoiler, flair,
+                                new RichTextJSONConverter().constructRichTextJSON(this, binding.postContentEditTextPostPollActivity.getText().toString(), uploadedImages),
+                                null, binding.receivePostReplyNotificationsSwitchMaterialPostPollActivity.isChecked(),
+                                subredditIsUser ? "profile" : "subreddit");
+                    } catch (JSONException e) {
+                        Snackbar.make(binding.coordinatorLayoutPostPollActivity, R.string.convert_to_richtext_json_failed, Snackbar.LENGTH_SHORT).show();
+                        return true;
+                    }
+                }
+            } else {
+                payload = new PollPayload(subredditName, binding.postTitleEditTextPostPollActivity.getText().toString(),
+                        optionList.toArray(new String[0]), (int) binding.votingLengthSliderPostPollActivity.getValue(), isNSFW, isSpoiler, flair,
+                        binding.receivePostReplyNotificationsSwitchMaterialPostPollActivity.isChecked(),
+                        subredditIsUser ? "profile" : "subreddit");
+            }
             intent.putExtra(SubmitPostService.EXTRA_POLL_PAYLOAD, new Gson().toJson(payload));
 
             ContextCompat.startForegroundService(this, intent);
@@ -649,13 +649,13 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
         if (isPosting) {
             promptAlertDialog(R.string.exit_when_submit, R.string.exit_when_submit_post_detail);
         } else {
-            if (!titleEditText.getText().toString().equals("")
-                    || !option1TextInputEditText.getText().toString().equals("")
-                    || !option2TextInputEditText.getText().toString().equals("")
-                    || !option3TextInputEditText.getText().toString().equals("")
-                    || !option4TextInputEditText.getText().toString().equals("")
-                    || !option5TextInputEditText.getText().toString().equals("")
-                    || !option6TextInputEditText.getText().toString().equals("")) {
+            if (!binding.postTitleEditTextPostPollActivity.getText().toString().equals("")
+                    || !binding.option1TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                    || !binding.option2TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                    || !binding.option3TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                    || !binding.option4TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                    || !binding.option5TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")
+                    || !binding.option6TextInputLayoutEditTextPostPollActivity.getText().toString().equals("")) {
                 promptAlertDialog(R.string.discard, R.string.discard_detail);
             } else {
                 finish();
@@ -676,27 +676,38 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
         outState.putParcelable(FLAIR_STATE, flair);
         outState.putBoolean(IS_SPOILER_STATE, isSpoiler);
         outState.putBoolean(IS_NSFW_STATE, isNSFW);
+        outState.putParcelableArrayList(UPLOADED_IMAGES_STATE, uploadedImages);
     }
 
     @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
-        if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
-            if (resultCode == RESULT_OK) {
+        if (resultCode == RESULT_OK) {
+            if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
                 subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
                 iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
                 subredditSelected = true;
                 subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
 
-                subredditNameTextView.setTextColor(primaryTextColor);
-                subredditNameTextView.setText(subredditName);
+                binding.subredditNameTextViewPostPollActivity.setTextColor(primaryTextColor);
+                binding.subredditNameTextViewPostPollActivity.setText(subredditName);
                 displaySubredditIcon();
 
-                flairTextView.setVisibility(View.VISIBLE);
-                flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
-                flairTextView.setTextColor(primaryTextColor);
-                flairTextView.setText(getString(R.string.flair));
+                binding.flairCustomTextViewPostPollActivity.setVisibility(View.VISIBLE);
+                binding.flairCustomTextViewPostPollActivity.setBackgroundColor(resources.getColor(android.R.color.transparent));
+                binding.flairCustomTextViewPostPollActivity.setTextColor(primaryTextColor);
+                binding.flairCustomTextViewPostPollActivity.setText(getString(R.string.flair));
                 flair = null;
+            } else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
+                if (data == null) {
+                    Toast.makeText(PostPollActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
+                    return;
+                }
+                Utils.uploadImageToReddit(this, mExecutor, mOauthRetrofit, mUploadMediaRetrofit,
+                        accessToken, binding.postContentEditTextPostPollActivity, binding.coordinatorLayoutPostPollActivity, data.getData(), uploadedImages);
+            } else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
+                Utils.uploadImageToReddit(this, mExecutor, mOauthRetrofit, mUploadMediaRetrofit,
+                        accessToken, binding.postContentEditTextPostPollActivity, binding.coordinatorLayoutPostPollActivity, capturedImageUri, uploadedImages);
             }
         }
     }
@@ -704,10 +715,50 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
     @Override
     public void flairSelected(Flair flair) {
         this.flair = flair;
-        flairTextView.setText(flair.getText());
-        flairTextView.setBackgroundColor(flairBackgroundColor);
-        flairTextView.setBorderColor(flairBackgroundColor);
-        flairTextView.setTextColor(flairTextColor);
+        binding.flairCustomTextViewPostPollActivity.setText(flair.getText());
+        binding.flairCustomTextViewPostPollActivity.setBackgroundColor(flairBackgroundColor);
+        binding.flairCustomTextViewPostPollActivity.setBorderColor(flairBackgroundColor);
+        binding.flairCustomTextViewPostPollActivity.setTextColor(flairTextColor);
+    }
+
+    @Override
+    public void uploadImage() {
+        Intent intent = new Intent();
+        intent.setType("image/*");
+        intent.setAction(Intent.ACTION_GET_CONTENT);
+        startActivityForResult(Intent.createChooser(intent,
+                getResources().getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE);
+    }
+
+    @Override
+    public void captureImage() {
+        Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+        try {
+            capturedImageUri = FileProvider.getUriForFile(this, "ml.docilealligator.infinityforreddit.provider",
+                    File.createTempFile("captured_image", ".jpg", getExternalFilesDir(Environment.DIRECTORY_PICTURES)));
+            pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
+            startActivityForResult(pictureIntent, CAPTURE_IMAGE_REQUEST_CODE);
+        } catch (IOException ex) {
+            Toast.makeText(this, R.string.error_creating_temp_file, Toast.LENGTH_SHORT).show();
+        } catch (ActivityNotFoundException e) {
+            Toast.makeText(this, R.string.no_camera_available, Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    @Override
+    public void insertImageUrl(UploadedImage uploadedImage) {
+        int start = Math.max(binding.postContentEditTextPostPollActivity.getSelectionStart(), 0);
+        int end = Math.max(binding.postContentEditTextPostPollActivity.getSelectionEnd(), 0);
+        int realStart = Math.min(start, end);
+        if (realStart > 0 && binding.postContentEditTextPostPollActivity.getText().toString().charAt(realStart - 1) != '\n') {
+            binding.postContentEditTextPostPollActivity.getText().replace(realStart, Math.max(start, end),
+                    "\n![](" + uploadedImage.imageUrlOrKey + ")\n",
+                    0, "\n![]()\n".length() + uploadedImage.imageUrlOrKey.length());
+        } else {
+            binding.postContentEditTextPostPollActivity.getText().replace(realStart, Math.max(start, end),
+                    "![](" + uploadedImage.imageUrlOrKey + ")\n",
+                    0, "![]()\n".length() + uploadedImage.imageUrlOrKey.length());
+        }
     }
 
     @Override
@@ -719,9 +770,9 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
                     .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
                     .error(mGlide.load(R.drawable.subreddit_default_icon)
                             .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
-                    .into(accountIconImageView);
+                    .into(binding.accountIconGifImageViewPostPollActivity);
 
-            accountNameTextView.setText(selectedAccount.getAccountName());
+            binding.accountNameTextViewPostPollActivity.setText(selectedAccount.getAccountName());
         }
     }
 
@@ -743,9 +794,9 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
             mMemu.findItem(R.id.action_send_post_poll_activity).setEnabled(true);
             mMemu.findItem(R.id.action_send_post_poll_activity).getIcon().setAlpha(255);
             if (submitPollPostEvent.errorMessage == null || submitPollPostEvent.errorMessage.equals("")) {
-                Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show();
+                Snackbar.make(binding.coordinatorLayoutPostPollActivity, R.string.post_failed, Snackbar.LENGTH_SHORT).show();
             } else {
-                Snackbar.make(coordinatorLayout, submitPollPostEvent.errorMessage.substring(0, 1).toUpperCase()
+                Snackbar.make(binding.coordinatorLayoutPostPollActivity, submitPollPostEvent.errorMessage.substring(0, 1).toUpperCase()
                         + submitPollPostEvent.errorMessage.substring(1), Snackbar.LENGTH_SHORT).show();
             }
         }
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostTextActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostTextActivity.java
index 8df14433..038076c5 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostTextActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostTextActivity.java
@@ -726,9 +726,16 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
     public void insertImageUrl(UploadedImage uploadedImage) {
         int start = Math.max(contentEditText.getSelectionStart(), 0);
         int end = Math.max(contentEditText.getSelectionEnd(), 0);
-        contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
-                "![](" + uploadedImage.imageUrlOrKey + ")",
-                0, "![]()".length() + uploadedImage.imageUrlOrKey.length());
+        int realStart = Math.min(start, end);
+        if (realStart > 0 && contentEditText.getText().toString().charAt(realStart - 1) != '\n') {
+            contentEditText.getText().replace(realStart, Math.max(start, end),
+                    "\n![](" + uploadedImage.imageUrlOrKey + ")\n",
+                    0, "\n![]()\n".length() + uploadedImage.imageUrlOrKey.length());
+        } else {
+            contentEditText.getText().replace(realStart, Math.max(start, end),
+                    "![](" + uploadedImage.imageUrlOrKey + ")\n",
+                    0, "![]()\n".length() + uploadedImage.imageUrlOrKey.length());
+        }
     }
 
     @Override
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/Utils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/Utils.java
index eca017a6..37db8124 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/Utils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/Utils.java
@@ -408,9 +408,16 @@ public final class Utils {
 
                         int start = Math.max(editText.getSelectionStart(), 0);
                         int end = Math.max(editText.getSelectionEnd(), 0);
-                        editText.getText().replace(Math.min(start, end), Math.max(start, end),
-                                "![](" + imageKeyOrError + ")",
-                                0, "![]()".length() + imageKeyOrError.length());
+                        int realStart = Math.min(start, end);
+                        if (realStart > 0 && editText.getText().toString().charAt(realStart - 1) != '\n') {
+                            editText.getText().replace(realStart, Math.max(start, end),
+                                    "\n![](" + imageKeyOrError + ")\n",
+                                    0, "\n![]()\n".length() + imageKeyOrError.length());
+                        } else {
+                            editText.getText().replace(realStart, Math.max(start, end),
+                                    "![](" + imageKeyOrError + ")\n",
+                                    0, "![]()\n".length() + imageKeyOrError.length());
+                        }
                         Snackbar.make(coordinatorLayout, R.string.upload_image_success, Snackbar.LENGTH_LONG).show();
                     } else {
                         Toast.makeText(context, R.string.upload_image_failed, Toast.LENGTH_LONG).show();
diff --git a/app/src/main/res/layout/activity_post_poll.xml b/app/src/main/res/layout/activity_post_poll.xml
index f1b90454..a65a2edb 100644
--- a/app/src/main/res/layout/activity_post_poll.xml
+++ b/app/src/main/res/layout/activity_post_poll.xml
@@ -23,331 +23,359 @@
 
     </com.google.android.material.appbar.AppBarLayout>
 
-    <androidx.core.widget.NestedScrollView
+    <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:orientation="vertical"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
-        <LinearLayout
+        <androidx.core.widget.NestedScrollView
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:orientation="vertical">
+            android:layout_height="0dp"
+            android:layout_weight="1">
 
             <LinearLayout
-                android:id="@+id/account_linear_layout_post_poll_activity"
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="16dp"
-                android:paddingBottom="16dp"
-                android:clickable="true"
-                android:focusable="true"
-                android:background="?attr/selectableItemBackground">
-
-                <pl.droidsonroids.gif.GifImageView
-                    android:id="@+id/account_icon_gif_image_view_post_poll_activity"
-                    android:layout_width="24dp"
-                    android:layout_height="24dp"
-                    android:layout_marginStart="16dp" />
+                android:layout_height="match_parent"
+                android:orientation="vertical">
 
-                <TextView
-                    android:id="@+id/account_name_text_view_post_poll_activity"
-                    android:layout_width="wrap_content"
+                <LinearLayout
+                    android:id="@+id/account_linear_layout_post_poll_activity"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_gravity="center_vertical"
-                    android:layout_marginStart="32dp"
-                    android:textSize="?attr/font_default"
-                    android:fontFamily="?attr/font_family" />
-
-            </LinearLayout>
-
-            <RelativeLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="8dp"
-                android:paddingBottom="8dp">
-
-                <pl.droidsonroids.gif.GifImageView
-                    android:id="@+id/subreddit_icon_gif_image_view_post_poll_activity"
-                    android:layout_width="24dp"
-                    android:layout_height="24dp"
-                    android:layout_alignParentStart="true"
-                    android:layout_centerVertical="true"
-                    android:layout_marginStart="16dp" />
-
-                <TextView
-                    android:id="@+id/subreddit_name_text_view_post_poll_activity"
-                    android:layout_width="wrap_content"
+                    android:paddingTop="16dp"
+                    android:paddingBottom="16dp"
+                    android:clickable="true"
+                    android:focusable="true"
+                    android:background="?attr/selectableItemBackground">
+
+                    <pl.droidsonroids.gif.GifImageView
+                        android:id="@+id/account_icon_gif_image_view_post_poll_activity"
+                        android:layout_width="24dp"
+                        android:layout_height="24dp"
+                        android:layout_marginStart="16dp" />
+
+                    <TextView
+                        android:id="@+id/account_name_text_view_post_poll_activity"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginStart="32dp"
+                        android:textSize="?attr/font_default"
+                        android:fontFamily="?attr/font_family" />
+
+                </LinearLayout>
+
+                <RelativeLayout
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_centerVertical="true"
-                    android:layout_marginStart="32dp"
-                    android:layout_toStartOf="@id/rules_button_post_poll_activity"
-                    android:layout_toEndOf="@id/subreddit_icon_gif_image_view_post_poll_activity"
-                    android:text="@string/choose_a_subreddit"
-                    android:textSize="?attr/font_default"
-                    android:fontFamily="?attr/font_family" />
-
-                <com.google.android.material.button.MaterialButton
-                    android:id="@+id/rules_button_post_poll_activity"
-                    android:layout_width="wrap_content"
+                    android:paddingTop="8dp"
+                    android:paddingBottom="8dp">
+
+                    <pl.droidsonroids.gif.GifImageView
+                        android:id="@+id/subreddit_icon_gif_image_view_post_poll_activity"
+                        android:layout_width="24dp"
+                        android:layout_height="24dp"
+                        android:layout_alignParentStart="true"
+                        android:layout_centerVertical="true"
+                        android:layout_marginStart="16dp" />
+
+                    <TextView
+                        android:id="@+id/subreddit_name_text_view_post_poll_activity"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_centerVertical="true"
+                        android:layout_marginStart="32dp"
+                        android:layout_toStartOf="@id/rules_button_post_poll_activity"
+                        android:layout_toEndOf="@id/subreddit_icon_gif_image_view_post_poll_activity"
+                        android:text="@string/choose_a_subreddit"
+                        android:textSize="?attr/font_default"
+                        android:fontFamily="?attr/font_family" />
+
+                    <com.google.android.material.button.MaterialButton
+                        android:id="@+id/rules_button_post_poll_activity"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_alignParentEnd="true"
+                        android:layout_centerVertical="true"
+                        android:layout_marginStart="16dp"
+                        android:layout_marginEnd="16dp"
+                        android:text="@string/rules"
+                        android:textSize="?attr/font_default"
+                        android:fontFamily="?attr/font_family" />
+
+                </RelativeLayout>
+
+                <com.google.android.material.divider.MaterialDivider
+                    android:id="@+id/divider_1_post_poll_activity"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_alignParentEnd="true"
-                    android:layout_centerVertical="true"
-                    android:layout_marginStart="16dp"
-                    android:layout_marginEnd="16dp"
-                    android:text="@string/rules"
-                    android:textSize="?attr/font_default"
-                    android:fontFamily="?attr/font_family" />
-
-            </RelativeLayout>
+                    android:visibility="gone" />
 
-            <com.google.android.material.divider.MaterialDivider
-                android:id="@+id/divider_1_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content" />
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
-
-                <com.libRG.CustomTextView
-                    android:id="@+id/flair_custom_text_view_post_poll_activity"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_margin="16dp"
-                    android:padding="4dp"
-                    android:text="@string/flair"
-                    android:textColor="?attr/primaryTextColor"
-                    android:textSize="?attr/font_default"
-                    android:fontFamily="?attr/font_family"
-                    android:visibility="gone"
-                    app:lib_setRadius="6dp"
-                    app:lib_setRoundedView="true"
-                    app:lib_setShape="rectangle" />
-
-                <com.libRG.CustomTextView
-                    android:id="@+id/spoiler_custom_text_view_post_poll_activity"
-                    android:layout_width="wrap_content"
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content">
+
+                    <com.libRG.CustomTextView
+                        android:id="@+id/flair_custom_text_view_post_poll_activity"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_margin="16dp"
+                        android:padding="4dp"
+                        android:text="@string/flair"
+                        android:textColor="?attr/primaryTextColor"
+                        android:textSize="?attr/font_default"
+                        android:fontFamily="?attr/font_family"
+                        android:visibility="gone"
+                        app:lib_setRadius="6dp"
+                        app:lib_setRoundedView="true"
+                        app:lib_setShape="rectangle" />
+
+                    <com.libRG.CustomTextView
+                        android:id="@+id/spoiler_custom_text_view_post_poll_activity"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_margin="16dp"
+                        android:padding="4dp"
+                        android:text="@string/spoiler"
+                        android:textColor="?attr/primaryTextColor"
+                        android:textSize="?attr/font_default"
+                        android:fontFamily="?attr/font_family"
+                        app:lib_setRadius="6dp"
+                        app:lib_setRoundedView="true"
+                        app:lib_setShape="rectangle" />
+
+                    <com.libRG.CustomTextView
+                        android:id="@+id/nsfw_custom_text_view_post_poll_activity"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_margin="16dp"
+                        android:padding="4dp"
+                        android:text="@string/nsfw"
+                        android:textColor="?attr/primaryTextColor"
+                        android:textSize="?attr/font_default"
+                        android:fontFamily="?attr/font_family"
+                        app:lib_setRadius="6dp"
+                        app:lib_setRoundedView="true"
+                        app:lib_setShape="rectangle" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/receive_post_reply_notifications_linear_layout_post_poll_activity"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_margin="16dp"
-                    android:padding="4dp"
-                    android:text="@string/spoiler"
-                    android:textColor="?attr/primaryTextColor"
-                    android:textSize="?attr/font_default"
-                    android:fontFamily="?attr/font_family"
-                    app:lib_setRadius="6dp"
-                    app:lib_setRoundedView="true"
-                    app:lib_setShape="rectangle" />
+                    android:paddingStart="16dp"
+                    android:paddingEnd="16dp"
+                    android:clickable="true"
+                    android:focusable="true"
+                    android:background="?attr/selectableItemBackground">
+
+                    <TextView
+                        android:id="@+id/receive_post_reply_notifications_text_view_post_poll_activity"
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginEnd="16dp"
+                        android:text="@string/receive_post_reply_notifications"
+                        android:textSize="?attr/font_default"
+                        android:fontFamily="?attr/font_family" />
+
+                    <com.google.android.material.materialswitch.MaterialSwitch
+                        android:id="@+id/receive_post_reply_notifications_switch_material_post_poll_activity"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center_vertical"
+                        android:checked="true" />
+
+                </LinearLayout>
+
+                <com.google.android.material.divider.MaterialDivider
+                    android:id="@+id/divider_2_post_poll_activity"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content" />
 
-                <com.libRG.CustomTextView
-                    android:id="@+id/nsfw_custom_text_view_post_poll_activity"
-                    android:layout_width="wrap_content"
+                <EditText
+                    android:id="@+id/post_title_edit_text_post_poll_activity"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_margin="16dp"
-                    android:padding="4dp"
-                    android:text="@string/nsfw"
-                    android:textColor="?attr/primaryTextColor"
-                    android:textSize="?attr/font_default"
-                    android:fontFamily="?attr/font_family"
-                    app:lib_setRadius="6dp"
-                    app:lib_setRoundedView="true"
-                    app:lib_setShape="rectangle" />
-
-            </LinearLayout>
-
-            <LinearLayout
-                android:id="@+id/receive_post_reply_notifications_linear_layout_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp"
-                android:clickable="true"
-                android:focusable="true"
-                android:background="?attr/selectableItemBackground">
+                    android:background="#00000000"
+                    android:gravity="top"
+                    android:hint="@string/post_title_hint"
+                    android:inputType="textCapSentences|textMultiLine"
+                    android:padding="16dp"
+                    android:textSize="?attr/title_font_18"
+                    android:textStyle="bold"
+                    android:fontFamily="?attr/title_font_family" />
+
+                <EditText
+                    android:id="@+id/post_content_edit_text_post_poll_activity"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:background="#00000000"
+                    android:gravity="top"
+                    android:hint="@string/post_optional_text_content_hint"
+                    android:inputType="textCapSentences|textMultiLine"
+                    android:padding="16dp"
+                    android:textSize="?attr/content_font_18"
+                    android:fontFamily="?attr/content_font_family" />
+
+                <com.google.android.material.divider.MaterialDivider
+                    android:id="@+id/divider_3_post_poll_activity"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content" />
 
                 <TextView
-                    android:id="@+id/receive_post_reply_notifications_text_view_post_poll_activity"
-                    android:layout_width="0dp"
+                    android:id="@+id/voting_length_text_view_post_poll_activity"
+                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:layout_gravity="center_vertical"
-                    android:layout_marginEnd="16dp"
-                    android:text="@string/receive_post_reply_notifications"
+                    android:padding="16dp"
                     android:textSize="?attr/font_default"
                     android:fontFamily="?attr/font_family" />
 
-                <com.google.android.material.materialswitch.MaterialSwitch
-                    android:id="@+id/receive_post_reply_notifications_switch_material_post_poll_activity"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_vertical"
-                    android:checked="true" />
-
-            </LinearLayout>
-
-            <com.google.android.material.divider.MaterialDivider
-                android:id="@+id/divider_2_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content" />
-
-            <EditText
-                android:id="@+id/post_title_edit_text_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:background="#00000000"
-                android:gravity="top"
-                android:hint="@string/post_title_hint"
-                android:inputType="textCapSentences|textMultiLine"
-                android:padding="16dp"
-                android:textColor="?attr/primaryTextColor"
-                android:textSize="?attr/title_font_18"
-                android:fontFamily="?attr/title_font_family" />
-
-            <com.google.android.material.divider.MaterialDivider
-                android:id="@+id/divider_3_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content" />
-
-            <TextView
-                android:id="@+id/voting_length_text_view_post_poll_activity"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:padding="16dp"
-                android:textSize="?attr/font_default"
-                android:fontFamily="?attr/font_family" />
-
-            <com.google.android.material.slider.Slider
-                android:id="@+id/voting_length_seek_bar_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="0dp"
-                android:layout_weight="1"
-                android:padding="16dp"
-                android:valueFrom="1"
-                android:valueTo="7"
-                android:stepSize="1"
-                android:value="3" />
-
-            <com.google.android.material.textfield.TextInputLayout
-                android:id="@+id/option_1_text_input_layout_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="8dp"
-                android:paddingBottom="8dp"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp"
-                style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
-
-                <com.google.android.material.textfield.TextInputEditText
-                    android:id="@+id/option_1_text_input_layout_edit_text_post_poll_activity"
+                <com.google.android.material.slider.Slider
+                    android:id="@+id/voting_length_slider_post_poll_activity"
+                    android:layout_width="match_parent"
+                    android:layout_height="0dp"
+                    android:layout_weight="1"
+                    android:padding="16dp"
+                    android:valueFrom="1"
+                    android:valueTo="7"
+                    android:stepSize="1"
+                    android:value="3" />
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/option_1_text_input_layout_post_poll_activity"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:fontFamily="?attr/font_family"
-                    android:textSize="?attr/font_default"
-                    android:hint="@string/option_1_hint" />
-
-            </com.google.android.material.textfield.TextInputLayout>
-
-            <com.google.android.material.textfield.TextInputLayout
-                android:id="@+id/option_2_text_input_layout_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="8dp"
-                android:paddingBottom="8dp"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp"
-                style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
-
-                <com.google.android.material.textfield.TextInputEditText
-                    android:id="@+id/option_2_text_input_layout_edit_text_post_poll_activity"
+                    android:paddingTop="8dp"
+                    android:paddingBottom="8dp"
+                    android:paddingStart="16dp"
+                    android:paddingEnd="16dp"
+                    style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/option_1_text_input_layout_edit_text_post_poll_activity"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:fontFamily="?attr/font_family"
+                        android:textSize="?attr/font_default"
+                        android:hint="@string/option_1_hint" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/option_2_text_input_layout_post_poll_activity"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:fontFamily="?attr/font_family"
-                    android:textSize="?attr/font_default"
-                    android:hint="@string/option_2_hint" />
-
-            </com.google.android.material.textfield.TextInputLayout>
-
-            <com.google.android.material.textfield.TextInputLayout
-                android:id="@+id/option_3_text_input_layout_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="8dp"
-                android:paddingBottom="8dp"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp"
-                style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
-
-                <com.google.android.material.textfield.TextInputEditText
-                    android:id="@+id/option_3_text_input_layout_edit_text_post_poll_activity"
+                    android:paddingTop="8dp"
+                    android:paddingBottom="8dp"
+                    android:paddingStart="16dp"
+                    android:paddingEnd="16dp"
+                    style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/option_2_text_input_layout_edit_text_post_poll_activity"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:fontFamily="?attr/font_family"
+                        android:textSize="?attr/font_default"
+                        android:hint="@string/option_2_hint" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/option_3_text_input_layout_post_poll_activity"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:fontFamily="?attr/font_family"
-                    android:textSize="?attr/font_default"
-                    android:hint="@string/option_3_hint" />
-
-            </com.google.android.material.textfield.TextInputLayout>
-
-            <com.google.android.material.textfield.TextInputLayout
-                android:id="@+id/option_4_text_input_layout_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="8dp"
-                android:paddingBottom="8dp"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp"
-                style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
-
-                <com.google.android.material.textfield.TextInputEditText
-                    android:id="@+id/option_4_text_input_layout_edit_text_post_poll_activity"
+                    android:paddingTop="8dp"
+                    android:paddingBottom="8dp"
+                    android:paddingStart="16dp"
+                    android:paddingEnd="16dp"
+                    style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/option_3_text_input_layout_edit_text_post_poll_activity"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:fontFamily="?attr/font_family"
+                        android:textSize="?attr/font_default"
+                        android:hint="@string/option_3_hint" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/option_4_text_input_layout_post_poll_activity"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:fontFamily="?attr/font_family"
-                    android:textSize="?attr/font_default"
-                    android:hint="@string/option_4_hint" />
-
-            </com.google.android.material.textfield.TextInputLayout>
-
-            <com.google.android.material.textfield.TextInputLayout
-                android:id="@+id/option_5_text_input_layout_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="8dp"
-                android:paddingBottom="8dp"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp"
-                style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
-
-                <com.google.android.material.textfield.TextInputEditText
-                    android:id="@+id/option_5_text_input_layout_edit_text_post_poll_activity"
+                    android:paddingTop="8dp"
+                    android:paddingBottom="8dp"
+                    android:paddingStart="16dp"
+                    android:paddingEnd="16dp"
+                    style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/option_4_text_input_layout_edit_text_post_poll_activity"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:fontFamily="?attr/font_family"
+                        android:textSize="?attr/font_default"
+                        android:hint="@string/option_4_hint" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/option_5_text_input_layout_post_poll_activity"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:fontFamily="?attr/font_family"
-                    android:textSize="?attr/font_default"
-                    android:hint="@string/option_5_hint" />
-
-            </com.google.android.material.textfield.TextInputLayout>
-
-            <com.google.android.material.textfield.TextInputLayout
-                android:id="@+id/option_6_text_input_layout_post_poll_activity"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="8dp"
-                android:paddingBottom="8dp"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp"
-                style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
-
-                <com.google.android.material.textfield.TextInputEditText
-                    android:id="@+id/option_6_text_input_layout_edit_text_post_poll_activity"
+                    android:paddingTop="8dp"
+                    android:paddingBottom="8dp"
+                    android:paddingStart="16dp"
+                    android:paddingEnd="16dp"
+                    style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/option_5_text_input_layout_edit_text_post_poll_activity"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:fontFamily="?attr/font_family"
+                        android:textSize="?attr/font_default"
+                        android:hint="@string/option_5_hint" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/option_6_text_input_layout_post_poll_activity"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:fontFamily="?attr/font_family"
-                    android:textSize="?attr/font_default"
-                    android:hint="@string/option_6_hint" />
+                    android:paddingTop="8dp"
+                    android:paddingBottom="8dp"
+                    android:paddingStart="16dp"
+                    android:paddingEnd="16dp"
+                    style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/option_6_text_input_layout_edit_text_post_poll_activity"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:fontFamily="?attr/font_family"
+                        android:textSize="?attr/font_default"
+                        android:hint="@string/option_6_hint" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+            </LinearLayout>
 
-            </com.google.android.material.textfield.TextInputLayout>
+        </androidx.core.widget.NestedScrollView>
 
-        </LinearLayout>
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/markdown_bottom_bar_recycler_view_post_poll_activity"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:scrollbars="horizontal"
+            android:layout_gravity="bottom" />
 
-    </androidx.core.widget.NestedScrollView>
+    </LinearLayout>
 
 </androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8eba62d7..8c2b0890 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -219,6 +219,7 @@
 
     <string name="post_title_hint">Title</string>
     <string name="post_text_content_hint">Content</string>
+    <string name="post_optional_text_content_hint">Content (optional)</string>
     <string name="choose_a_subreddit">Choose a subreddit</string>
     <string name="rules">Rules</string>
     <string name="post_link_hint">URL</string>
-- 
cgit v1.2.3