diff options
Diffstat (limited to 'app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java')
-rw-r--r-- | app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java | 147 |
1 files changed, 85 insertions, 62 deletions
diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java index 0a6b23bac..b09f4b08c 100644 --- a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java @@ -68,7 +68,6 @@ import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.transition.Transition; @@ -150,6 +149,30 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder "..--..", ".-.-.-", ".----.", "-.-.--", "-..-.", "-.--.", "-.--.-", ".-...", "---...", "-.-.-.", "-...-", ".-.-.", "-....-", "..--.-", ".-..-.", "...-..-", ".--.-.", "..-.-", "--...-" }; + public static int currentCursorPosition; + private final List<Status> statusList; + private final int TYPE_NORMAL = 0; + private final BaseAccount account; + private final String visibility; + private final app.fedilab.android.client.entities.api.Account mentionedAccount; + private final String editMessageId; + public ManageDrafts manageDrafts; + public promptDraftListener promptDraftListener; + private int statusCount; + private Context context; + private AlertDialog alertDialogEmoji; + private List<Emoji> emojisList = new ArrayList<>(); + private boolean unlisted_changed = false; + + public ComposeAdapter(List<Status> statusList, int statusCount, BaseAccount account, app.fedilab.android.client.entities.api.Account mentionedAccount, String visibility, String editMessageId) { + this.statusList = statusList; + this.statusCount = statusCount; + this.account = account; + this.mentionedAccount = mentionedAccount; + this.visibility = visibility; + this.editMessageId = editMessageId; + + } public static int countMorseChar(String content) { int count_char = 0; @@ -180,29 +203,34 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder return morseContent; } - private final List<Status> statusList; - private final int TYPE_NORMAL = 0; - private final BaseAccount account; - private final String visibility; - private final app.fedilab.android.client.entities.api.Account mentionedAccount; - private final String editMessageId; - public ManageDrafts manageDrafts; - private int statusCount; - private Context context; - private AlertDialog alertDialogEmoji; - private List<Emoji> emojisList = new ArrayList<>(); - public promptDraftListener promptDraftListener; - private boolean unlisted_changed = false; - public static int currentCursorPosition; + private static void updateCharacterCount(ComposeViewHolder composeViewHolder) { + int charCount = MastodonHelper.countLength(composeViewHolder); + composeViewHolder.binding.characterCount.setText(String.valueOf(charCount)); + composeViewHolder.binding.characterProgress.setProgress(charCount); - public ComposeAdapter(List<Status> statusList, int statusCount, BaseAccount account, app.fedilab.android.client.entities.api.Account mentionedAccount, String visibility, String editMessageId) { - this.statusList = statusList; - this.statusCount = statusCount; - this.account = account; - this.mentionedAccount = mentionedAccount; - this.visibility = visibility; - this.editMessageId = editMessageId; + } + + public static StatusDraft prepareDraft(List<Status> statusList, ComposeAdapter composeAdapter, String instance, String user_id) { + //Collect all statusCompose + List<Status> statusDrafts = new ArrayList<>(); + List<Status> statusReplies = new ArrayList<>(); + int i = 0; + for (Status status : statusList) { + //Statuses must be sent + if (composeAdapter.getItemViewType(i) == TYPE_COMPOSE) { + statusDrafts.add(status); + } else { + statusReplies.add(status); + } + i++; + } + StatusDraft statusDraftDB = new StatusDraft(); + statusDraftDB.statusReplyList = statusReplies; + statusDraftDB.statusDraftList = statusDrafts; + statusDraftDB.instance = instance; + statusDraftDB.user_id = user_id; + return statusDraftDB; } /** @@ -231,7 +259,6 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder }); } - /** * Add an attachment from ComposeActivity * @@ -255,36 +282,6 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder } - private static void updateCharacterCount(ComposeViewHolder composeViewHolder) { - int charCount = MastodonHelper.countLength(composeViewHolder); - composeViewHolder.binding.characterCount.setText(String.valueOf(charCount)); - composeViewHolder.binding.characterProgress.setProgress(charCount); - - } - - public static StatusDraft prepareDraft(List<Status> statusList, ComposeAdapter composeAdapter, String instance, String user_id) { - //Collect all statusCompose - List<Status> statusDrafts = new ArrayList<>(); - List<Status> statusReplies = new ArrayList<>(); - int i = 0; - for (Status status : statusList) { - - //Statuses must be sent - if (composeAdapter.getItemViewType(i) == TYPE_COMPOSE) { - statusDrafts.add(status); - } else { - statusReplies.add(status); - } - i++; - } - StatusDraft statusDraftDB = new StatusDraft(); - statusDraftDB.statusReplyList = statusReplies; - statusDraftDB.statusDraftList = statusDrafts; - statusDraftDB.instance = instance; - statusDraftDB.user_id = user_id; - return statusDraftDB; - } - //Create text when mentioning a toot public void loadMentions(Status status) { //Get the first draft @@ -1025,19 +1022,18 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder for (Attachment attachment : attachmentList) { ComposeAttachmentItemBinding composeAttachmentItemBinding = ComposeAttachmentItemBinding.inflate(LayoutInflater.from(context), holder.binding.attachmentsList, false); composeAttachmentItemBinding.buttonPlay.setVisibility(View.GONE); - if (editMessageId != null) { - composeAttachmentItemBinding.editPreview.setVisibility(View.INVISIBLE); + if (editMessageId != null && attachment.url != null) { + composeAttachmentItemBinding.editPreview.setVisibility(View.GONE); composeAttachmentItemBinding.buttonDescription.setVisibility(View.INVISIBLE); composeAttachmentItemBinding.buttonOrderDown.setVisibility(View.INVISIBLE); composeAttachmentItemBinding.buttonOrderUp.setVisibility(View.INVISIBLE); - composeAttachmentItemBinding.buttonRemove.setVisibility(View.INVISIBLE); } String attachmentPath = attachment.local_path != null && !attachment.local_path.trim().isEmpty() ? attachment.local_path : attachment.preview_url; if (attachment.type != null || attachment.mimeType != null) { if ((attachment.type != null && attachment.type.toLowerCase().startsWith("image")) || (attachment.mimeType != null && attachment.mimeType.toLowerCase().startsWith("image"))) { Glide.with(composeAttachmentItemBinding.preview.getContext()) .load(attachmentPath) - .diskCacheStrategy(DiskCacheStrategy.NONE) + //.diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .into(composeAttachmentItemBinding.preview); } else if ((attachment.type != null && attachment.type.toLowerCase().startsWith("video")) || (attachment.mimeType != null && attachment.mimeType.toLowerCase().startsWith("video"))) { @@ -1280,7 +1276,11 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder holder.binding.buttonEmojiOne.setVisibility(View.VISIBLE); if (extraFeatures) { + boolean displayLocalOnly = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_LOCAL_ONLY) + MainActivity.currentUserID + MainActivity.currentInstance, true); holder.binding.buttonTextFormat.setVisibility(View.VISIBLE); + if (displayLocalOnly) { + holder.binding.buttonLocalOnly.setVisibility(View.VISIBLE); + } holder.binding.buttonTextFormat.setOnClickListener(v -> { AlertDialog.Builder builder = new AlertDialog.Builder(context, Helper.dialogStyle()); builder.setTitle(context.getString(R.string.post_format)); @@ -1306,6 +1306,28 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); builder.create().show(); }); + holder.binding.buttonLocalOnly.setOnClickListener(v -> { + AlertDialog.Builder builder = new AlertDialog.Builder(context, Helper.dialogStyle()); + builder.setTitle(context.getString(R.string.local_only)); + Resources res = context.getResources(); + boolean[] valArr = new boolean[]{false, true}; + String[] labelArr = res.getStringArray(R.array.set_local_only); + + int selection = 0; + int localOnly = sharedpreferences.getInt(context.getString(R.string.SET_COMPOSE_LOCAL_ONLY) + account.user_id + account.instance, 0); + if (statusDraft.local_only || localOnly == 1) { + selection = 1; + } + builder.setSingleChoiceItems(labelArr, selection, null); + builder.setPositiveButton(R.string.validate, (dialog, which) -> { + int selectedPosition = ((AlertDialog) dialog).getListView().getCheckedItemPosition(); + statusDraft.local_only = valArr[selectedPosition]; + notifyItemChanged(holder.getLayoutPosition()); + dialog.dismiss(); + }); + builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); + builder.create().show(); + }); } else { holder.binding.buttonTextFormat.setVisibility(View.GONE); } @@ -1442,7 +1464,8 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder statusDraft.visibility = MastodonHelper.visibility.PUBLIC.name(); unlisted_changed = true; }); - if (statusDraft.spoilerChecked) { + + if (statusDraft.spoilerChecked || statusDraft.spoiler_text != null && statusDraft.spoiler_text.trim().length() > 0) { holder.binding.contentSpoiler.setVisibility(View.VISIBLE); } else { holder.binding.contentSpoiler.setVisibility(View.GONE); @@ -1463,7 +1486,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder holder.binding.buttonEmoji.setOnClickListener(v -> { try { - displayEmojiPicker(holder); + displayEmojiPicker(holder, account.instance); } catch (DBException e) { e.printStackTrace(); } @@ -1850,7 +1873,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder * @param holder - view for the message {@link ComposeViewHolder} * @throws DBException */ - private void displayEmojiPicker(ComposeViewHolder holder) throws DBException { + private void displayEmojiPicker(ComposeViewHolder holder, String instance) throws DBException { final AlertDialog.Builder builder = new AlertDialog.Builder(context, Helper.dialogStyle()); int paddingPixel = 15; @@ -1860,10 +1883,10 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder builder.setTitle(R.string.insert_emoji); if (emojis != null && emojis.size() > 0) { GridView gridView = new GridView(context); - gridView.setAdapter(new EmojiAdapter(emojis.get(BaseMainActivity.currentInstance))); + gridView.setAdapter(new EmojiAdapter(emojis.get(instance))); gridView.setNumColumns(5); gridView.setOnItemClickListener((parent, view, position, id) -> { - holder.binding.content.getText().insert(holder.binding.content.getSelectionStart(), " :" + emojis.get(BaseMainActivity.currentInstance).get(position).shortcode + ": "); + holder.binding.content.getText().insert(holder.binding.content.getSelectionStart(), " :" + emojis.get(instance).get(position).shortcode + ": "); alertDialogEmoji.dismiss(); }); gridView.setPadding(paddingDp, paddingDp, paddingDp, paddingDp); |