More place for media description
This commit is contained in:
parent
4c00aa9a2e
commit
302b3e47d4
|
@ -33,12 +33,14 @@ import android.os.Bundle;
|
|||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.text.Editable;
|
||||
import android.text.InputFilter;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.Toast;
|
||||
|
||||
|
@ -55,6 +57,7 @@ import androidx.work.OneTimeWorkRequest;
|
|||
import androidx.work.OutOfQuotaPolicy;
|
||||
import androidx.work.WorkManager;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import java.io.File;
|
||||
|
@ -64,6 +67,7 @@ import java.util.ArrayList;
|
|||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
@ -99,7 +103,7 @@ import app.fedilab.android.mastodon.viewmodel.mastodon.AccountsVM;
|
|||
import app.fedilab.android.mastodon.viewmodel.mastodon.StatusesVM;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
public class ComposeActivity extends BaseActivity implements ComposeAdapter.ManageDrafts, AccountsReplyAdapter.ActionDone, ComposeAdapter.promptDraftListener {
|
||||
public class ComposeActivity extends BaseActivity implements ComposeAdapter.ManageDrafts, AccountsReplyAdapter.ActionDone, ComposeAdapter.promptDraftListener, ComposeAdapter.MediaDescriptionCallBack {
|
||||
|
||||
|
||||
public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 754;
|
||||
|
@ -206,8 +210,10 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (binding.recyclerView.getVisibility() == View.VISIBLE) {
|
||||
storeDraftWarning();
|
||||
}
|
||||
}
|
||||
|
||||
private void storeDraftWarning() {
|
||||
if (statusDraft == null) {
|
||||
|
@ -290,6 +296,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
statusList.add(initialStatus);
|
||||
statusList.add(statusDraft.statusDraftList.get(0));
|
||||
composeAdapter = new ComposeAdapter(statusList, context.ancestors.size(), account, accountMention, visibility, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
||||
|
@ -617,6 +624,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
int statusCount = statusList.size();
|
||||
statusList.addAll(statusDraft.statusDraftList);
|
||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
||||
|
@ -689,6 +697,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
//StatusDraftList at this point should only have one element
|
||||
statusList.addAll(statusDraftList);
|
||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
||||
|
@ -703,6 +712,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
//StatusDraftList at this point should only have one element
|
||||
statusList.addAll(statusDraftList);
|
||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
||||
|
@ -712,6 +722,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
//Compose without replying
|
||||
statusList.addAll(statusDraftList);
|
||||
composeAdapter = new ComposeAdapter(statusList, 0, account, accountMention, visibility, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
||||
|
@ -1010,6 +1021,36 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
promptSaveDraft = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void click(ComposeAdapter.ComposeViewHolder holder, Attachment attachment, int messagePosition, int mediaPosition) {
|
||||
binding.description.setVisibility(View.VISIBLE);
|
||||
binding.recyclerView.setVisibility(View.GONE);
|
||||
binding.mediaDescription.setText("");
|
||||
String attachmentPath = attachment.local_path != null && !attachment.local_path.trim().isEmpty() ? attachment.local_path : attachment.preview_url;
|
||||
Glide.with(binding.mediaPreview.getContext())
|
||||
.load(attachmentPath)
|
||||
.into(binding.mediaPreview);
|
||||
if (attachment.description != null) {
|
||||
binding.mediaDescription.setText(attachment.description);
|
||||
binding.mediaDescription.setSelection(binding.mediaDescription.getText().length());
|
||||
}
|
||||
binding.mediaDescription.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1500)});
|
||||
binding.mediaDescription.requestFocus();
|
||||
Objects.requireNonNull(getWindow()).setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
binding.mediaDescription.requestFocus();
|
||||
|
||||
binding.mediaSave.setOnClickListener(v -> {
|
||||
binding.description.setVisibility(View.GONE);
|
||||
binding.recyclerView.setVisibility(View.VISIBLE);
|
||||
composeAdapter.openDescriptionActivity(true, binding.mediaDescription.getText().toString().trim(), holder, attachment, messagePosition, mediaPosition);
|
||||
});
|
||||
binding.mediaCancel.setOnClickListener(v -> {
|
||||
binding.description.setVisibility(View.GONE);
|
||||
binding.recyclerView.setVisibility(View.VISIBLE);
|
||||
composeAdapter.openDescriptionActivity(false, binding.mediaDescription.getText().toString().trim(), holder, attachment, messagePosition, mediaPosition);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public enum mediaType {
|
||||
PHOTO,
|
||||
|
|
|
@ -46,7 +46,6 @@ import android.text.TextWatcher;
|
|||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.ArrayAdapter;
|
||||
|
@ -69,7 +68,6 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.gson.Gson;
|
||||
|
@ -91,7 +89,6 @@ import java.util.Date;
|
|||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
|
@ -105,7 +102,6 @@ import app.fedilab.android.databinding.ComposePollBinding;
|
|||
import app.fedilab.android.databinding.ComposePollItemBinding;
|
||||
import app.fedilab.android.databinding.DrawerStatusComposeBinding;
|
||||
import app.fedilab.android.databinding.DrawerStatusSimpleBinding;
|
||||
import app.fedilab.android.databinding.PopupMediaDescriptionBinding;
|
||||
import app.fedilab.android.mastodon.activities.ComposeActivity;
|
||||
import app.fedilab.android.mastodon.client.entities.api.Account;
|
||||
import app.fedilab.android.mastodon.client.entities.api.Attachment;
|
||||
|
@ -170,6 +166,8 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
private boolean unlisted_changed = false;
|
||||
|
||||
private RecyclerView mRecyclerView;
|
||||
public MediaDescriptionCallBack mediaDescriptionCallBack;
|
||||
|
||||
|
||||
public ComposeAdapter(List<Status> statusList, int statusCount, BaseAccount account, Account mentionedAccount, String visibility, String editMessageId) {
|
||||
this.statusList = statusList;
|
||||
|
@ -1146,7 +1144,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
intent.putExtras(b);
|
||||
context.startActivity(intent);
|
||||
});
|
||||
composeAttachmentItemBinding.buttonDescription.setOnClickListener(v -> openDescription(holder, attachment, position, finalMediaPosition));
|
||||
composeAttachmentItemBinding.buttonDescription.setOnClickListener(v -> mediaDescriptionCallBack.click(holder, attachment, position, finalMediaPosition));
|
||||
|
||||
composeAttachmentItemBinding.buttonOrderUp.setOnClickListener(v -> {
|
||||
if (finalMediaPosition > 0 && attachmentList.size() > 1) {
|
||||
|
@ -1235,7 +1233,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
for (Attachment attachment : status.media_attachments) {
|
||||
if (attachment.description == null || attachment.description.trim().isEmpty()) {
|
||||
ComposeViewHolder composeViewHolder = (ComposeViewHolder) mRecyclerView.findViewHolderForAdapterPosition(position);
|
||||
openDescription(composeViewHolder, attachment, position, mediaPosition);
|
||||
mediaDescriptionCallBack.click(composeViewHolder, attachment, position, mediaPosition);
|
||||
return;
|
||||
}
|
||||
mediaPosition++;
|
||||
|
@ -1246,34 +1244,15 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private void openDescription(ComposeViewHolder holder, Attachment attachment, int messagePosition, int mediaPosition) {
|
||||
String attachmentPath = attachment.local_path != null && !attachment.local_path.trim().isEmpty() ? attachment.local_path : attachment.preview_url;
|
||||
AlertDialog.Builder builderInner = new MaterialAlertDialogBuilder(context);
|
||||
// builderInner.setTitle(R.string.upload_form_description);
|
||||
PopupMediaDescriptionBinding popupMediaDescriptionBinding = PopupMediaDescriptionBinding.inflate(LayoutInflater.from(context), null, false);
|
||||
builderInner.setView(popupMediaDescriptionBinding.getRoot());
|
||||
|
||||
popupMediaDescriptionBinding.mediaDescription.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1500)});
|
||||
popupMediaDescriptionBinding.mediaDescription.requestFocus();
|
||||
Glide.with(popupMediaDescriptionBinding.mediaPicture.getContext())
|
||||
.load(attachmentPath)
|
||||
.apply(new RequestOptions().transform(new RoundedCorners(30)))
|
||||
.into(popupMediaDescriptionBinding.mediaPicture);
|
||||
builderInner.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
|
||||
if (attachment.description != null) {
|
||||
popupMediaDescriptionBinding.mediaDescription.setText(attachment.description);
|
||||
popupMediaDescriptionBinding.mediaDescription.setSelection(popupMediaDescriptionBinding.mediaDescription.getText().length());
|
||||
}
|
||||
builderInner.setPositiveButton(R.string.validate, (dialog, which) -> {
|
||||
attachment.description = popupMediaDescriptionBinding.mediaDescription.getText().toString();
|
||||
public void openDescriptionActivity(boolean saved, String content, ComposeViewHolder holder, Attachment attachment, int messagePosition, int mediaPosition) {
|
||||
if (saved) {
|
||||
attachment.description = content;
|
||||
displayAttachments(holder, messagePosition, mediaPosition);
|
||||
dialog.dismiss();
|
||||
});
|
||||
AlertDialog alertDialog = builderInner.create();
|
||||
Objects.requireNonNull(alertDialog.getWindow()).setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
alertDialog.show();
|
||||
popupMediaDescriptionBinding.mediaDescription.requestFocus();
|
||||
}
|
||||
}
|
||||
|
||||
public interface MediaDescriptionCallBack {
|
||||
void click(ComposeViewHolder holder, Attachment attachment, int messagePosition, int mediaPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -66,5 +66,56 @@
|
|||
android:scrollbars="none"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="5dp"
|
||||
android:visibility="gone">
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/media_preview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:contentDescription="@string/preview"
|
||||
android:scaleType="centerInside" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatEditText
|
||||
android:id="@+id/media_description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:minLines="5" />
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:gravity="end"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/media_cancel"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/cancel" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/media_save"
|
||||
style="@style/Widget.Material3.Button.IconButton.Filled"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="20dp"
|
||||
android:text="@string/save" />
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
</ScrollView>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
</androidx.drawerlayout.widget.DrawerLayout>
|
Loading…
Reference in New Issue