diff options
author | Alex Ning <chineseperson5@gmail.com> | 2020-09-18 04:13:17 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2020-09-18 04:13:17 +0000 |
commit | 50a75ea4f9bc7d3bccfa5c00db915b5397ba3430 (patch) | |
tree | 9a7089fc8088b2a6fda9f0ca85ace592f9aebb61 /app/src/main | |
parent | c809215759df3abcc2ebc9b31f633174216fb763 (diff) | |
download | infinity-for-reddit-50a75ea4f9bc7d3bccfa5c00db915b5397ba3430.tar infinity-for-reddit-50a75ea4f9bc7d3bccfa5c00db915b5397ba3430.tar.gz infinity-for-reddit-50a75ea4f9bc7d3bccfa5c00db915b5397ba3430.tar.bz2 infinity-for-reddit-50a75ea4f9bc7d3bccfa5c00db915b5397ba3430.tar.lz infinity-for-reddit-50a75ea4f9bc7d3bccfa5c00db915b5397ba3430.tar.xz infinity-for-reddit-50a75ea4f9bc7d3bccfa5c00db915b5397ba3430.tar.zst infinity-for-reddit-50a75ea4f9bc7d3bccfa5c00db915b5397ba3430.zip |
Support Markdown bottom bar in EditCommentActivity, EditPostActivity and PostTextActivity.
Diffstat (limited to 'app/src/main')
8 files changed, 428 insertions, 342 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/CommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/CommentActivity.java index 1dab8fc3..66043919 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/CommentActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/CommentActivity.java @@ -14,7 +14,6 @@ import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; -import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; @@ -263,165 +262,8 @@ public class CommentActivity extends BaseActivity { setSupportActionBar(toolbar); - MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(mCustomThemeWrapper, new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() { - @Override - public void onClick(int item) { - switch (item) { - case MarkdownBottomBarRecyclerViewAdapter.BOLD: { - int start = Math.max(commentEditText.getSelectionStart(), 0); - int end = Math.max(commentEditText.getSelectionEnd(), 0); - if (end != start) { - String currentSelection = commentEditText.getText().subSequence(start, end).toString(); - commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), - "**" + currentSelection + "**", 0, "****".length() + currentSelection.length()); - } else { - commentEditText.getText().replace(start, end, - "****", 0, "****".length()); - commentEditText.setSelection(start + "**".length()); - } - break; - } - case MarkdownBottomBarRecyclerViewAdapter.ITALIC: { - int start = Math.max(commentEditText.getSelectionStart(), 0); - int end = Math.max(commentEditText.getSelectionEnd(), 0); - if (end != start) { - String currentSelection = commentEditText.getText().subSequence(start, end).toString(); - commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), - "*" + currentSelection + "*", 0, "**".length() + currentSelection.length()); - } else { - commentEditText.getText().replace(start, end, - "**", 0, "**".length()); - commentEditText.setSelection(start + "*".length()); - } - break; - } - case MarkdownBottomBarRecyclerViewAdapter.LINK: { - View dialogView = getLayoutInflater().inflate(R.layout.dialog_insert_link, null); - EditText textEditText = dialogView.findViewById(R.id.edit_text_insert_link_dialog); - EditText linkEditText = dialogView.findViewById(R.id.edit_link_insert_link_dialog); - - int start = Math.max(commentEditText.getSelectionStart(), 0); - int end = Math.max(commentEditText.getSelectionEnd(), 0); - if (end != start) { - String currentSelection = commentEditText.getText().subSequence(start, end).toString(); - textEditText.setText(currentSelection); - } - - new MaterialAlertDialogBuilder(CommentActivity.this, R.style.MaterialAlertDialogTheme) - .setTitle(R.string.insert_link) - .setView(dialogView) - .setPositiveButton(R.string.ok, (editTextDialogInterface, i1) - -> { - String text = textEditText.getText().toString(); - String link = linkEditText.getText().toString(); - - commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), - "[" + text + "](" + link + ")", 0, "[]()".length() + text.length() + link.length()); - }) - .setNegativeButton(R.string.cancel, null) - .show(); - break; - } - case MarkdownBottomBarRecyclerViewAdapter.STRIKE_THROUGH: { - int start = Math.max(commentEditText.getSelectionStart(), 0); - int end = Math.max(commentEditText.getSelectionEnd(), 0); - if (end != start) { - String currentSelection = commentEditText.getText().subSequence(start, end).toString(); - commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), - "~~" + currentSelection + "~~", 0, "~~~~".length() + currentSelection.length()); - } else { - commentEditText.getText().replace(start, end, - "~~~~", 0, "~~~~".length()); - commentEditText.setSelection(start + "~~".length()); - } - break; - } - case MarkdownBottomBarRecyclerViewAdapter.HEADER: { - View dialogView = getLayoutInflater().inflate(R.layout.dialog_select_header, null); - SeekBar seekBar = dialogView.findViewById(R.id.seek_bar_dialog_select_header); - new MaterialAlertDialogBuilder(CommentActivity.this, R.style.MaterialAlertDialogTheme) - .setTitle(R.string.select_header_size) - .setView(dialogView) - .setPositiveButton(R.string.ok, (editTextDialogInterface, i1) - -> { - int start = Math.max(commentEditText.getSelectionStart(), 0); - int end = Math.max(commentEditText.getSelectionEnd(), 0); - String hashTags; - switch (seekBar.getProgress()) { - case 0: - hashTags = "######"; - break; - case 1: - hashTags = "#####"; - break; - case 2: - hashTags = "####"; - break; - case 3: - hashTags = "###"; - break; - case 4: - hashTags = "##"; - break; - default: - hashTags = "#"; - break; - } - if (end != start) { - String currentSelection = commentEditText.getText().subSequence(start, end).toString(); - commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), - hashTags + currentSelection, 0, hashTags.length() + currentSelection.length()); - } else { - commentEditText.getText().replace(start, end, - hashTags, 0, hashTags.length()); - } - }) - .setNegativeButton(R.string.cancel, null) - .show(); - break; - } - case MarkdownBottomBarRecyclerViewAdapter.ORDERED_LIST: { - int start = Math.max(commentEditText.getSelectionStart(), 0); - int end = Math.max(commentEditText.getSelectionEnd(), 0); - if (end != start) { - String currentSelection = commentEditText.getText().subSequence(start, end).toString(); - commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), - "1. " + currentSelection, 0, "1. ".length() + currentSelection.length()); - } else { - commentEditText.getText().replace(start, end, - "1. ", 0, "1. ".length()); - } - break; - } - case MarkdownBottomBarRecyclerViewAdapter.UNORDERED_LIST: { - int start = Math.max(commentEditText.getSelectionStart(), 0); - int end = Math.max(commentEditText.getSelectionEnd(), 0); - if (end != start) { - String currentSelection = commentEditText.getText().subSequence(start, end).toString(); - commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), - "* " + currentSelection, 0, "* ".length() + currentSelection.length()); - } else { - commentEditText.getText().replace(start, end, - "* ", 0, "* ".length()); - } - break; - } - case MarkdownBottomBarRecyclerViewAdapter.SPOILER: { - int start = Math.max(commentEditText.getSelectionStart(), 0); - int end = Math.max(commentEditText.getSelectionEnd(), 0); - if (end != start) { - String currentSelection = commentEditText.getText().subSequence(start, end).toString(); - commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), - ">!" + currentSelection + "!<", 0, ">!!<".length() + currentSelection.length()); - } else { - commentEditText.getText().replace(start, end, - ">!!<", 0, ">!!<".length()); - commentEditText.setSelection(start + ">!".length()); - } - break; - } - } - } + MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(mCustomThemeWrapper, item -> { + MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(this, commentEditText, item); }); markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManager(this, diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditCommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditCommentActivity.java index b3ece3d2..b18618cf 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditCommentActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditCommentActivity.java @@ -14,6 +14,8 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -31,6 +33,7 @@ import javax.inject.Named; import butterknife.BindView; import butterknife.ButterKnife; import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Adapter.MarkdownBottomBarRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.Infinity; @@ -60,6 +63,8 @@ public class EditCommentActivity extends BaseActivity { Toolbar toolbar; @BindView(R.id.comment_edit_text_edit_comment_activity) EditText contentEditText; + @BindView(R.id.markdown_bottom_bar_recycler_view_edit_comment_activity) + RecyclerView markdownBottomBarRecyclerView; @Inject @Named("oauth") Retrofit mOauthRetrofit; @@ -77,6 +82,8 @@ public class EditCommentActivity extends BaseActivity { protected void onCreate(Bundle savedInstanceState) { ((Infinity) getApplication()).getAppComponent().inject(this); + setImmersiveModeNotApplicable(); + super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_comment); @@ -99,6 +106,14 @@ public class EditCommentActivity extends BaseActivity { mCommentContent = getIntent().getStringExtra(EXTRA_CONTENT); contentEditText.setText(mCommentContent); + MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(mCustomThemeWrapper, item -> { + MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(this, contentEditText, item); + }); + + markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManager(this, + LinearLayoutManager.HORIZONTAL, false)); + markdownBottomBarRecyclerView.setAdapter(adapter); + contentEditText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditPostActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditPostActivity.java index e2671fdf..18e997ed 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditPostActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditPostActivity.java @@ -16,6 +16,8 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -33,11 +35,12 @@ import javax.inject.Named; import butterknife.BindView; import butterknife.ButterKnife; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Adapter.MarkdownBottomBarRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; -import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.Utils.APIUtils; import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils; import retrofit2.Call; @@ -64,6 +67,8 @@ public class EditPostActivity extends BaseActivity { View divider; @BindView(R.id.post_text_content_edit_text_edit_post_activity) EditText contentEditText; + @BindView(R.id.markdown_bottom_bar_recycler_view_edit_post_activity) + RecyclerView markdownBottomBarRecyclerView; @Inject @Named("oauth") Retrofit mOauthRetrofit; @@ -81,6 +86,8 @@ public class EditPostActivity extends BaseActivity { protected void onCreate(Bundle savedInstanceState) { ((Infinity) getApplication()).getAppComponent().inject(this); + setImmersiveModeNotApplicable(); + super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_post); @@ -108,6 +115,14 @@ public class EditPostActivity extends BaseActivity { mPostContent = getIntent().getStringExtra(EXTRA_CONTENT); contentEditText.setText(mPostContent); + MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(mCustomThemeWrapper, item -> { + MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(this, contentEditText, item); + }); + + markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManager(this, + LinearLayoutManager.HORIZONTAL, false)); + markdownBottomBarRecyclerView.setAdapter(adapter); + contentEditText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostTextActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostTextActivity.java index 69568d88..de7bc72c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostTextActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostTextActivity.java @@ -17,6 +17,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.bumptech.glide.RequestManager; @@ -35,6 +37,7 @@ import javax.inject.Named; import butterknife.BindView; import butterknife.ButterKnife; import jp.wasabeef.glide.transformations.RoundedCornersTransformation; +import ml.docilealligator.infinityforreddit.Adapter.MarkdownBottomBarRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.LoadSubredditIconAsyncTask; import ml.docilealligator.infinityforreddit.BottomSheetFragment.FlairBottomSheetFragment; @@ -97,6 +100,8 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr View divider3; @BindView(R.id.post_text_content_edit_text_post_text_activity) EditText contentEditText; + @BindView(R.id.markdown_bottom_bar_recycler_view_post_text_activity) + RecyclerView markdownBottomBarRecyclerView; @Inject @Named("no_oauth") Retrofit mRetrofit; @@ -305,6 +310,14 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr isNSFW = false; } }); + + MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(mCustomThemeWrapper, item -> { + MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(this, contentEditText, item); + }); + + markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManager(this, + LinearLayoutManager.HORIZONTAL, false)); + markdownBottomBarRecyclerView.setAdapter(adapter); } @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MarkdownBottomBarRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MarkdownBottomBarRecyclerViewAdapter.java index 11d06b14..b421c2e0 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MarkdownBottomBarRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/MarkdownBottomBarRecyclerViewAdapter.java @@ -1,13 +1,18 @@ package ml.docilealligator.infinityforreddit.Adapter; +import android.app.Activity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.EditText; import android.widget.ImageView; +import android.widget.SeekBar; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.R; @@ -80,6 +85,164 @@ public class MarkdownBottomBarRecyclerViewAdapter extends RecyclerView.Adapter<R return ITEM_COUNT; } + public static void bindEditTextWithItemClickListener(Activity activity, EditText commentEditText, int item) { + switch (item) { + case MarkdownBottomBarRecyclerViewAdapter.BOLD: { + int start = Math.max(commentEditText.getSelectionStart(), 0); + int end = Math.max(commentEditText.getSelectionEnd(), 0); + if (end != start) { + String currentSelection = commentEditText.getText().subSequence(start, end).toString(); + commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), + "**" + currentSelection + "**", 0, "****".length() + currentSelection.length()); + } else { + commentEditText.getText().replace(start, end, + "****", 0, "****".length()); + commentEditText.setSelection(start + "**".length()); + } + break; + } + case MarkdownBottomBarRecyclerViewAdapter.ITALIC: { + int start = Math.max(commentEditText.getSelectionStart(), 0); + int end = Math.max(commentEditText.getSelectionEnd(), 0); + if (end != start) { + String currentSelection = commentEditText.getText().subSequence(start, end).toString(); + commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), + "*" + currentSelection + "*", 0, "**".length() + currentSelection.length()); + } else { + commentEditText.getText().replace(start, end, + "**", 0, "**".length()); + commentEditText.setSelection(start + "*".length()); + } + break; + } + case MarkdownBottomBarRecyclerViewAdapter.LINK: { + View dialogView = activity.getLayoutInflater().inflate(R.layout.dialog_insert_link, null); + EditText textEditText = dialogView.findViewById(R.id.edit_text_insert_link_dialog); + EditText linkEditText = dialogView.findViewById(R.id.edit_link_insert_link_dialog); + + int start = Math.max(commentEditText.getSelectionStart(), 0); + int end = Math.max(commentEditText.getSelectionEnd(), 0); + if (end != start) { + String currentSelection = commentEditText.getText().subSequence(start, end).toString(); + textEditText.setText(currentSelection); + } + + new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme) + .setTitle(R.string.insert_link) + .setView(dialogView) + .setPositiveButton(R.string.ok, (editTextDialogInterface, i1) + -> { + String text = textEditText.getText().toString(); + String link = linkEditText.getText().toString(); + + commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), + "[" + text + "](" + link + ")", 0, "[]()".length() + text.length() + link.length()); + }) + .setNegativeButton(R.string.cancel, null) + .show(); + break; + } + case MarkdownBottomBarRecyclerViewAdapter.STRIKE_THROUGH: { + int start = Math.max(commentEditText.getSelectionStart(), 0); + int end = Math.max(commentEditText.getSelectionEnd(), 0); + if (end != start) { + String currentSelection = commentEditText.getText().subSequence(start, end).toString(); + commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), + "~~" + currentSelection + "~~", 0, "~~~~".length() + currentSelection.length()); + } else { + commentEditText.getText().replace(start, end, + "~~~~", 0, "~~~~".length()); + commentEditText.setSelection(start + "~~".length()); + } + break; + } + case MarkdownBottomBarRecyclerViewAdapter.HEADER: { + View dialogView = activity.getLayoutInflater().inflate(R.layout.dialog_select_header, null); + SeekBar seekBar = dialogView.findViewById(R.id.seek_bar_dialog_select_header); + new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme) + .setTitle(R.string.select_header_size) + .setView(dialogView) + .setPositiveButton(R.string.ok, (editTextDialogInterface, i1) + -> { + int start = Math.max(commentEditText.getSelectionStart(), 0); + int end = Math.max(commentEditText.getSelectionEnd(), 0); + String hashTags; + switch (seekBar.getProgress()) { + case 0: + hashTags = "######"; + break; + case 1: + hashTags = "#####"; + break; + case 2: + hashTags = "####"; + break; + case 3: + hashTags = "###"; + break; + case 4: + hashTags = "##"; + break; + default: + hashTags = "#"; + break; + } + if (end != start) { + String currentSelection = commentEditText.getText().subSequence(start, end).toString(); + commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), + hashTags + currentSelection, 0, hashTags.length() + currentSelection.length()); + } else { + commentEditText.getText().replace(start, end, + hashTags, 0, hashTags.length()); + } + }) + .setNegativeButton(R.string.cancel, null) + .show(); + break; + } + case MarkdownBottomBarRecyclerViewAdapter.ORDERED_LIST: { + int start = Math.max(commentEditText.getSelectionStart(), 0); + int end = Math.max(commentEditText.getSelectionEnd(), 0); + if (end != start) { + String currentSelection = commentEditText.getText().subSequence(start, end).toString(); + commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), + "1. " + currentSelection, 0, "1. ".length() + currentSelection.length()); + } else { + commentEditText.getText().replace(start, end, + "1. ", 0, "1. ".length()); + } + break; + } + case MarkdownBottomBarRecyclerViewAdapter.UNORDERED_LIST: { + int start = Math.max(commentEditText.getSelectionStart(), 0); + int end = Math.max(commentEditText.getSelectionEnd(), 0); + if (end != start) { + String currentSelection = commentEditText.getText().subSequence(start, end).toString(); + commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), + "* " + currentSelection, 0, "* ".length() + currentSelection.length()); + } else { + commentEditText.getText().replace(start, end, + "* ", 0, "* ".length()); + } + break; + } + case MarkdownBottomBarRecyclerViewAdapter.SPOILER: { + int start = Math.max(commentEditText.getSelectionStart(), 0); + int end = Math.max(commentEditText.getSelectionEnd(), 0); + if (end != start) { + String currentSelection = commentEditText.getText().subSequence(start, end).toString(); + commentEditText.getText().replace(Math.min(start, end), Math.max(start, end), + ">!" + currentSelection + "!<", 0, ">!!<".length() + currentSelection.length()); + } else { + commentEditText.getText().replace(start, end, + ">!!<", 0, ">!!<".length()); + commentEditText.setSelection(start + ">!".length()); + } + break; + } + } + } + class MarkdownBottomBarItemViewHolder extends RecyclerView.ViewHolder { ImageView imageView; diff --git a/app/src/main/res/layout/activity_edit_comment.xml b/app/src/main/res/layout/activity_edit_comment.xml index ba239230..740aad93 100644 --- a/app/src/main/res/layout/activity_edit_comment.xml +++ b/app/src/main/res/layout/activity_edit_comment.xml @@ -23,18 +23,34 @@ </com.google.android.material.appbar.AppBarLayout> - <EditText - android:id="@+id/comment_edit_text_edit_comment_activity" + <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#00000000" - android:gravity="top" - android:hint="@string/post_text_content_hint" - android:inputType="textCapSentences|textMultiLine" - android:padding="16dp" - android:textColor="?attr/primaryTextColor" - android:textSize="?attr/content_font_18" - android:fontFamily="?attr/content_font_family" - app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + android:orientation="vertical" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + + <EditText + android:id="@+id/comment_edit_text_edit_comment_activity" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:background="#00000000" + android:gravity="top" + android:hint="@string/post_text_content_hint" + android:inputType="textCapSentences|textMultiLine" + android:padding="16dp" + android:textColor="?attr/primaryTextColor" + android:textSize="?attr/content_font_18" + android:fontFamily="?attr/content_font_family" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/markdown_bottom_bar_recycler_view_edit_comment_activity" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:scrollbars="horizontal" + android:layout_gravity="bottom" /> + + </LinearLayout> + </androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/activity_edit_post.xml b/app/src/main/res/layout/activity_edit_post.xml index 5d124696..a7d0078f 100644 --- a/app/src/main/res/layout/activity_edit_post.xml +++ b/app/src/main/res/layout/activity_edit_post.xml @@ -13,65 +13,72 @@ android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> - <com.google.android.material.appbar.CollapsingToolbarLayout + <androidx.appcompat.widget.Toolbar + android:id="@+id/toolbar_edit_post_activity" android:layout_width="match_parent" - android:layout_height="match_parent" - app:layout_scrollFlags="scroll|enterAlways" - app:titleEnabled="false" - app:toolbarId="@+id/toolbar_edit_post_activity"> - - <androidx.appcompat.widget.Toolbar - android:id="@+id/toolbar_edit_post_activity" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:minHeight="?attr/actionBarSize" - app:popupTheme="@style/AppTheme.PopupOverlay" - app:navigationIcon="?attr/homeAsUpIndicator" /> - - </com.google.android.material.appbar.CollapsingToolbarLayout> + android:layout_height="wrap_content" + android:minHeight="?attr/actionBarSize" + app:popupTheme="@style/AppTheme.PopupOverlay" + app:navigationIcon="?attr/homeAsUpIndicator" /> </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"> - <TextView - android:id="@+id/post_title_text_view_edit_post_activity" + <LinearLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="top" - android:padding="16dp" - android:textSize="?attr/title_font_18" - android:textColor="?attr/primaryTextColor" - android:fontFamily="?attr/title_font_family" /> + android:layout_height="match_parent" + android:orientation="vertical"> - <View - android:id="@+id/divider_edit_post_activity" - android:layout_width="match_parent" - android:layout_height="1dp" /> + <TextView + android:id="@+id/post_title_text_view_edit_post_activity" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="top" + android:padding="16dp" + android:textSize="?attr/title_font_18" + android:textColor="?attr/primaryTextColor" + android:fontFamily="?attr/title_font_family" /> - <EditText - android:id="@+id/post_text_content_edit_text_edit_post_activity" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:gravity="top" - android:padding="16dp" - android:hint="@string/post_text_content_hint" - android:inputType="textCapSentences|textMultiLine" - android:textSize="?attr/content_font_18" - android:background="#00000000" - android:textColor="?attr/primaryTextColor" - android:fontFamily="?attr/content_font_family" /> + <View + android:id="@+id/divider_edit_post_activity" + android:layout_width="match_parent" + android:layout_height="1dp" /> + + <EditText + android:id="@+id/post_text_content_edit_text_edit_post_activity" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="top" + android:padding="16dp" + android:hint="@string/post_text_content_hint" + android:inputType="textCapSentences|textMultiLine" + android:textSize="?attr/content_font_18" + android:background="#00000000" + android:textColor="?attr/primaryTextColor" + android:fontFamily="?attr/content_font_family" /> + + </LinearLayout> + + </androidx.core.widget.NestedScrollView> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/markdown_bottom_bar_recycler_view_edit_post_activity" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:scrollbars="horizontal" + android:layout_gravity="bottom" /> - </LinearLayout> + </LinearLayout> - </androidx.core.widget.NestedScrollView> </androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/activity_post_text.xml b/app/src/main/res/layout/activity_post_text.xml index 67ba4234..d9b02754 100644 --- a/app/src/main/res/layout/activity_post_text.xml +++ b/app/src/main/res/layout/activity_post_text.xml @@ -23,148 +23,163 @@ </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"> - - <RelativeLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="16dp" - android:paddingTop="8dp" - android:paddingEnd="16dp" - android:paddingBottom="8dp"> - - <pl.droidsonroids.gif.GifImageView - android:id="@+id/subreddit_icon_gif_image_view_search_activity" - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_alignParentStart="true" - android:layout_centerVertical="true" /> - - <TextView - android:id="@+id/subreddit_name_text_view_search_activity" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_centerVertical="true" - android:layout_marginStart="32dp" - android:layout_marginEnd="16dp" - android:layout_toStartOf="@id/rules_button_post_text_activity" - android:layout_toEndOf="@id/subreddit_icon_gif_image_view_search_activity" - android:text="@string/choose_a_subreddit" - android:textSize="?attr/font_default" - android:fontFamily="?attr/font_family" /> - - <Button - android:id="@+id/rules_button_post_text_activity" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentEnd="true" - android:layout_centerVertical="true" - android:text="@string/rules" - android:textSize="?attr/font_default" - android:fontFamily="?attr/font_family" /> - - </RelativeLayout> - - <View - android:id="@+id/divider_1_post_text_activity" - android:layout_width="match_parent" - android:layout_height="1dp" /> + android:layout_height="0dp" + android:layout_weight="1"> <LinearLayout android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="match_parent" + android:orientation="vertical"> - <com.libRG.CustomTextView - android:id="@+id/flair_custom_text_view_post_text_activity" - android:layout_width="wrap_content" + <RelativeLayout + android:layout_width="match_parent" 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="3dp" - app:lib_setRoundedView="true" - app:lib_setShape="rectangle" /> - - <com.libRG.CustomTextView - android:id="@+id/spoiler_custom_text_view_post_text_activity" - android:layout_width="wrap_content" + android:paddingStart="16dp" + android:paddingTop="8dp" + android:paddingEnd="16dp" + android:paddingBottom="8dp"> + + <pl.droidsonroids.gif.GifImageView + android:id="@+id/subreddit_icon_gif_image_view_search_activity" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_alignParentStart="true" + android:layout_centerVertical="true" /> + + <TextView + android:id="@+id/subreddit_name_text_view_search_activity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerVertical="true" + android:layout_marginStart="32dp" + android:layout_marginEnd="16dp" + android:layout_toStartOf="@id/rules_button_post_text_activity" + android:layout_toEndOf="@id/subreddit_icon_gif_image_view_search_activity" + android:text="@string/choose_a_subreddit" + android:textSize="?attr/font_default" + android:fontFamily="?attr/font_family" /> + + <Button + android:id="@+id/rules_button_post_text_activity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_centerVertical="true" + android:text="@string/rules" + android:textSize="?attr/font_default" + android:fontFamily="?attr/font_family" /> + + </RelativeLayout> + + <View + android:id="@+id/divider_1_post_text_activity" + android:layout_width="match_parent" + android:layout_height="1dp" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <com.libRG.CustomTextView + android:id="@+id/flair_custom_text_view_post_text_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="3dp" + app:lib_setRoundedView="true" + app:lib_setShape="rectangle" /> + + <com.libRG.CustomTextView + android:id="@+id/spoiler_custom_text_view_post_text_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="3dp" + app:lib_setRoundedView="true" + app:lib_setShape="rectangle" /> + + <com.libRG.CustomTextView + android:id="@+id/nsfw_custom_text_view_post_text_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="3dp" + app:lib_setRoundedView="true" + app:lib_setShape="rectangle" /> + + </LinearLayout> + + <View + android:id="@+id/divider_2_post_text_activity" + android:layout_width="match_parent" + android:layout_height="1dp" /> + + <EditText + android:id="@+id/post_title_edit_text_post_text_activity" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="16dp" - android:padding="4dp" - android:text="@string/spoiler" + 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/font_default" - android:fontFamily="?attr/font_family" - app:lib_setRadius="3dp" - app:lib_setRoundedView="true" - app:lib_setShape="rectangle" /> - - <com.libRG.CustomTextView - android:id="@+id/nsfw_custom_text_view_post_text_activity" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_margin="16dp" - android:padding="4dp" - android:text="@string/nsfw" + android:textSize="?attr/title_font_18" + android:fontFamily="?attr/title_font_family" /> + + <View + android:id="@+id/divider_3_post_text_activity" + android:layout_width="match_parent" + android:layout_height="1dp" /> + + <EditText + android:id="@+id/post_text_content_edit_text_post_text_activity" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="#00000000" + android:gravity="top" + android:hint="@string/post_text_content_hint" + android:inputType="textCapSentences|textMultiLine" + android:padding="16dp" android:textColor="?attr/primaryTextColor" - android:textSize="?attr/font_default" - android:fontFamily="?attr/font_family" - app:lib_setRadius="3dp" - app:lib_setRoundedView="true" - app:lib_setShape="rectangle" /> + android:textSize="?attr/content_font_18" + android:fontFamily="?attr/content_font_family" /> </LinearLayout> - <View - android:id="@+id/divider_2_post_text_activity" - android:layout_width="match_parent" - android:layout_height="1dp" /> + </androidx.core.widget.NestedScrollView> - <EditText - android:id="@+id/post_title_edit_text_post_text_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" /> - - <View - android:id="@+id/divider_3_post_text_activity" - android:layout_width="match_parent" - android:layout_height="1dp" /> + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/markdown_bottom_bar_recycler_view_post_text_activity" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:scrollbars="horizontal" + android:layout_gravity="bottom" /> - <EditText - android:id="@+id/post_text_content_edit_text_post_text_activity" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="#00000000" - android:gravity="top" - android:hint="@string/post_text_content_hint" - android:inputType="textCapSentences|textMultiLine" - android:padding="16dp" - android:textColor="?attr/primaryTextColor" - android:textSize="?attr/content_font_18" - android:fontFamily="?attr/content_font_family" /> - - </LinearLayout> - - </androidx.core.widget.NestedScrollView> + </LinearLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file |