Support Markdown bottom bar in EditCommentActivity, EditPostActivity and PostTextActivity.

This commit is contained in:
Alex Ning 2020-09-18 12:13:17 +08:00
parent c809215759
commit 50a75ea4f9
8 changed files with 428 additions and 342 deletions

View File

@ -14,7 +14,6 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.EditText; import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@ -263,165 +262,8 @@ public class CommentActivity extends BaseActivity {
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(mCustomThemeWrapper, new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() { MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(mCustomThemeWrapper, item -> {
@Override MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(this, commentEditText, item);
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;
}
}
}
}); });
markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManager(this, markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManager(this,

View File

@ -14,6 +14,8 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout; 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.appbar.AppBarLayout;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@ -31,6 +33,7 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.API.RedditAPI;
import ml.docilealligator.infinityforreddit.Adapter.MarkdownBottomBarRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
@ -60,6 +63,8 @@ public class EditCommentActivity extends BaseActivity {
Toolbar toolbar; Toolbar toolbar;
@BindView(R.id.comment_edit_text_edit_comment_activity) @BindView(R.id.comment_edit_text_edit_comment_activity)
EditText contentEditText; EditText contentEditText;
@BindView(R.id.markdown_bottom_bar_recycler_view_edit_comment_activity)
RecyclerView markdownBottomBarRecyclerView;
@Inject @Inject
@Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@ -77,6 +82,8 @@ public class EditCommentActivity extends BaseActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
((Infinity) getApplication()).getAppComponent().inject(this); ((Infinity) getApplication()).getAppComponent().inject(this);
setImmersiveModeNotApplicable();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_comment); setContentView(R.layout.activity_edit_comment);
@ -99,6 +106,14 @@ public class EditCommentActivity extends BaseActivity {
mCommentContent = getIntent().getStringExtra(EXTRA_CONTENT); mCommentContent = getIntent().getStringExtra(EXTRA_CONTENT);
contentEditText.setText(mCommentContent); 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(); contentEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) { if (imm != null) {

View File

@ -16,6 +16,8 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout; 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.appbar.AppBarLayout;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@ -33,11 +35,12 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; 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.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.API.RedditAPI;
import ml.docilealligator.infinityforreddit.Utils.APIUtils; import ml.docilealligator.infinityforreddit.Utils.APIUtils;
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
import retrofit2.Call; import retrofit2.Call;
@ -64,6 +67,8 @@ public class EditPostActivity extends BaseActivity {
View divider; View divider;
@BindView(R.id.post_text_content_edit_text_edit_post_activity) @BindView(R.id.post_text_content_edit_text_edit_post_activity)
EditText contentEditText; EditText contentEditText;
@BindView(R.id.markdown_bottom_bar_recycler_view_edit_post_activity)
RecyclerView markdownBottomBarRecyclerView;
@Inject @Inject
@Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@ -81,6 +86,8 @@ public class EditPostActivity extends BaseActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
((Infinity) getApplication()).getAppComponent().inject(this); ((Infinity) getApplication()).getAppComponent().inject(this);
setImmersiveModeNotApplicable();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_post); setContentView(R.layout.activity_edit_post);
@ -108,6 +115,14 @@ public class EditPostActivity extends BaseActivity {
mPostContent = getIntent().getStringExtra(EXTRA_CONTENT); mPostContent = getIntent().getStringExtra(EXTRA_CONTENT);
contentEditText.setText(mPostContent); 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(); contentEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) { if (imm != null) {

View File

@ -17,6 +17,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager; import com.bumptech.glide.RequestManager;
@ -35,6 +37,7 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation; import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.Adapter.MarkdownBottomBarRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.AsyncTask.LoadSubredditIconAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.LoadSubredditIconAsyncTask;
import ml.docilealligator.infinityforreddit.BottomSheetFragment.FlairBottomSheetFragment; import ml.docilealligator.infinityforreddit.BottomSheetFragment.FlairBottomSheetFragment;
@ -97,6 +100,8 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
View divider3; View divider3;
@BindView(R.id.post_text_content_edit_text_post_text_activity) @BindView(R.id.post_text_content_edit_text_post_text_activity)
EditText contentEditText; EditText contentEditText;
@BindView(R.id.markdown_bottom_bar_recycler_view_post_text_activity)
RecyclerView markdownBottomBarRecyclerView;
@Inject @Inject
@Named("no_oauth") @Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
@ -305,6 +310,14 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
isNSFW = false; 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 @Override

View File

@ -1,13 +1,18 @@
package ml.docilealligator.infinityforreddit.Adapter; package ml.docilealligator.infinityforreddit.Adapter;
import android.app.Activity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.SeekBar;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
@ -80,6 +85,164 @@ public class MarkdownBottomBarRecyclerViewAdapter extends RecyclerView.Adapter<R
return ITEM_COUNT; 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 { class MarkdownBottomBarItemViewHolder extends RecyclerView.ViewHolder {
ImageView imageView; ImageView imageView;

View File

@ -23,10 +23,17 @@
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<EditText <EditText
android:id="@+id/comment_edit_text_edit_comment_activity" android:id="@+id/comment_edit_text_edit_comment_activity"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="0dp"
android:layout_weight="1"
android:background="#00000000" android:background="#00000000"
android:gravity="top" android:gravity="top"
android:hint="@string/post_text_content_hint" android:hint="@string/post_text_content_hint"
@ -34,7 +41,16 @@
android:padding="16dp" android:padding="16dp"
android:textColor="?attr/primaryTextColor" android:textColor="?attr/primaryTextColor"
android:textSize="?attr/content_font_18" android:textSize="?attr/content_font_18"
android:fontFamily="?attr/content_font_family" android:fontFamily="?attr/content_font_family" />
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<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> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -13,13 +13,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"> android:theme="@style/AppTheme.AppBarOverlay">
<com.google.android.material.appbar.CollapsingToolbarLayout
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 <androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar_edit_post_activity" android:id="@+id/toolbar_edit_post_activity"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -28,14 +21,18 @@
app:popupTheme="@style/AppTheme.PopupOverlay" app:popupTheme="@style/AppTheme.PopupOverlay"
app:navigationIcon="?attr/homeAsUpIndicator" /> app:navigationIcon="?attr/homeAsUpIndicator" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="0dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"> android:layout_weight="1">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -74,4 +71,14 @@
</androidx.core.widget.NestedScrollView> </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>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -23,11 +23,17 @@
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"> app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -167,4 +173,13 @@
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
<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" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>