From d10ef0f9312c31b8476640aa14be9a5aaef80ad0 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Tue, 21 May 2019 00:17:56 +0200 Subject: [PATCH] multi-edit documents from profile --- res/layout/profile_document_item.xml | 5 +- .../securesms/ProfileDocumentsAdapter.java | 104 ++---------------- .../securesms/ProfileDocumentsFragment.java | 83 +------------- 3 files changed, 18 insertions(+), 174 deletions(-) diff --git a/res/layout/profile_document_item.xml b/res/layout/profile_document_item.xml index 7944f9ab3..37ccdc695 100644 --- a/res/layout/profile_document_item.xml +++ b/res/layout/profile_document_item.xml @@ -1,6 +1,7 @@ diff --git a/src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java b/src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java index 052cdb0f8..7107638fa 100644 --- a/src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java +++ b/src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java @@ -40,12 +40,14 @@ class ProfileDocumentsAdapter extends StickyHeaderGridAdapter { private BucketedThreadMedia media; private static class ViewHolder extends StickyHeaderGridAdapter.ItemViewHolder { + private final View rowView; private final DocumentView documentView; private final AudioView audioView; private final TextView date; public ViewHolder(View v) { super(v); + rowView = v; documentView = v.findViewById(R.id.document_view); audioView = v.findViewById(R.id.audio_view); date = v.findViewById(R.id.date); @@ -103,14 +105,14 @@ class ProfileDocumentsAdapter extends StickyHeaderGridAdapter { viewHolder.audioView.setVisibility(View.VISIBLE); viewHolder.audioView.setAudio((AudioSlide)slide, dcMsg.getDuration()); + viewHolder.audioView.setOnLongClickListener(view -> { itemClickListener.onMediaLongClicked(dcMsg); return true; }); } else if (slide != null && slide.hasDocument()) { viewHolder.documentView.setVisibility(View.VISIBLE); viewHolder.documentView.setDocument((DocumentSlide)slide); - viewHolder.documentView.setOnClickListener(view -> { - ApplicationDcContext dcContext = DcHelper.getContext(context); - dcContext.openForViewOrShare(dcMsg.getId(), Intent.ACTION_VIEW); - }); + viewHolder.documentView.setOnClickListener(view -> itemClickListener.onMediaClicked(dcMsg)); + viewHolder.documentView.setOnLongClickListener(view -> { itemClickListener.onMediaLongClicked(dcMsg); return true; }); + viewHolder.rowView.setOnClickListener(view -> itemClickListener.onMediaClicked(dcMsg)); viewHolder.audioView.setVisibility(View.GONE); } @@ -119,6 +121,9 @@ class ProfileDocumentsAdapter extends StickyHeaderGridAdapter { viewHolder.audioView.setVisibility(View.GONE); } + viewHolder.rowView.setOnLongClickListener(view -> { itemClickListener.onMediaLongClicked(dcMsg); return true; }); + viewHolder.rowView.setSelected(selected.contains(dcMsg)); + viewHolder.date.setText(DateUtils.getBriefRelativeTimeSpanString(context, locale, dcMsg.getTimestamp())); } @@ -158,94 +163,3 @@ class ProfileDocumentsAdapter extends StickyHeaderGridAdapter { void onMediaLongClicked(DcMsg mediaRecord); } } - -/* -public class ProfileDocumentsAdapter extends CursorRecyclerViewAdapter implements StickyHeaderDecoration.StickyHeaderAdapter { - - private final Calendar calendar; - private final Locale locale; - - ProfileDocumentsAdapter(Context context, Cursor cursor, Locale locale) { - super(context, cursor); - - this.calendar = Calendar.getInstance(); - this.locale = locale; - } - - @Override - public ViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { - return new ViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.profile_document_item, parent, false)); - } - - @Override - public void onBindItemViewHolder(ViewHolder viewHolder, @NonNull Cursor cursor) { - MediaDatabase.MediaRecord mediaRecord = MediaDatabase.MediaRecord.from(getContext(), cursor); - Slide slide = MediaUtil.getSlideForAttachment(getContext(), mediaRecord.getAttachment()); - - if (slide != null && slide.hasDocument()) { - viewHolder.documentView.setDocument((DocumentSlide)slide); - viewHolder.date.setText(DateUtils.getRelativeDate(getContext(), locale, mediaRecord.getDate())); - viewHolder.documentView.setVisibility(View.VISIBLE); - viewHolder.date.setVisibility(View.VISIBLE); - viewHolder.documentView.setOnClickListener(view -> { - int msgId = slide.getDcMsgId(); - ApplicationDcContext dcContext = DcHelper.getContext(getContext()); - dcContext.openForViewOrShare(msgId, Intent.ACTION_VIEW); - }); - } else { - viewHolder.documentView.setVisibility(View.GONE); - viewHolder.date.setVisibility(View.GONE); - } - } - - @Override - public long getHeaderId(int position) { - if (!isActiveCursor()) return -1; - if (isHeaderPosition(position)) return -1; - if (isFooterPosition(position)) return -1; - if (position >= getItemCount()) return -1; - if (position < 0) return -1; - - Cursor cursor = getCursorAtPositionOrThrow(position); - MediaDatabase.MediaRecord mediaRecord = MediaDatabase.MediaRecord.from(getContext(), cursor); - - calendar.setTime(new Date(mediaRecord.getDate())); - return Util.hashCode(calendar.get(Calendar.YEAR), calendar.get(Calendar.DAY_OF_YEAR)); - } - - @Override - public HeaderViewHolder onCreateHeaderViewHolder(ViewGroup parent) { - return new HeaderViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.profile_document_item_header, parent, false)); - } - - @Override - public void onBindHeaderViewHolder(HeaderViewHolder viewHolder, int position) { - Cursor cursor = getCursorAtPositionOrThrow(position); - MediaDatabase.MediaRecord mediaRecord = MediaDatabase.MediaRecord.from(getContext(), cursor); - viewHolder.textView.setText(DateUtils.getRelativeDate(getContext(), locale, mediaRecord.getDate())); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - - private final DocumentView documentView; - private final TextView date; - - public ViewHolder(View itemView) { - super(itemView); - this.documentView = itemView.findViewById(R.id.document_view); - this.date = itemView.findViewById(R.id.date); - } - } - - static class HeaderViewHolder extends RecyclerView.ViewHolder { - - private final TextView textView; - - HeaderViewHolder(View itemView) { - super(itemView); - this.textView = itemView.findViewById(R.id.text); - } - } - -} -*/ \ No newline at end of file diff --git a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java index be86d0a80..1414c233b 100644 --- a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java +++ b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java @@ -14,7 +14,6 @@ import android.support.v4.content.Loader; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.view.ActionMode; -import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.Menu; @@ -28,10 +27,9 @@ import com.b44t.messenger.DcContext; import com.b44t.messenger.DcMsg; import com.codewaves.stickyheadergrid.StickyHeaderGridLayoutManager; +import org.thoughtcrime.securesms.connect.ApplicationDcContext; import org.thoughtcrime.securesms.connect.DcHelper; -import org.thoughtcrime.securesms.database.Address; import org.thoughtcrime.securesms.database.loaders.BucketedThreadMediaLoader; -import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask; @@ -131,8 +129,9 @@ public class ProfileDocumentsFragment } } - private void handleMediaPreviewClick(@NonNull DcMsg mediaRecord) { - if (mediaRecord.getFile() == null) { + private void handleMediaPreviewClick(@NonNull DcMsg dcMsg) { + // audio is stated by the play-button + if (dcMsg.getType()==DcMsg.DC_MSG_AUDIO || dcMsg.getType()==DcMsg.DC_MSG_VOICE) { return; } @@ -141,12 +140,8 @@ public class ProfileDocumentsFragment return; } - Intent intent = new Intent(context, MediaPreviewActivity.class); - intent.putExtra(MediaPreviewActivity.DC_MSG_ID, mediaRecord.getId()); - intent.putExtra(MediaPreviewActivity.ADDRESS_EXTRA, Address.fromChat(chatId)); - intent.putExtra(MediaPreviewActivity.OUTGOING_EXTRA, mediaRecord.isOutgoing()); - intent.putExtra(MediaPreviewActivity.LEFT_IS_RECENT_EXTRA, false); - context.startActivity(intent); + ApplicationDcContext dcContext = DcHelper.getContext(context); + dcContext.openForViewOrShare(dcMsg.getId(), Intent.ACTION_VIEW); } @Override @@ -243,69 +238,3 @@ public class ProfileDocumentsFragment } } } - - -/* -public class ProfileDocumentsFragment extends Fragment implements LoaderManager.LoaderCallbacks { - - public static final String LOCALE_EXTRA = "locale_extra"; - public static final String ADDRESS_EXTRA = "address"; - - protected RecyclerView recyclerView; - protected TextView noMedia; - - protected Recipient recipient; - protected Locale locale; - - @Override - public void onCreate(Bundle bundle) { - super.onCreate(bundle); - - Locale locale = (Locale)getArguments().getSerializable(LOCALE_EXTRA); - if (locale == null) throw new AssertionError(); - this.locale = locale; - - String address = getArguments().getString(ADDRESS_EXTRA); - if (address == null) throw new AssertionError(); - this.recipient = Recipient.from(getContext(), Address.fromSerialized(address)); - - getLoaderManager().initLoader(0, null, this); - } - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.profile_documents_fragment, container, false); - ProfileDocumentsAdapter adapter = new ProfileDocumentsAdapter(getContext(), null, locale); - - this.recyclerView = ViewUtil.findById(view, R.id.recycler_view); - this.noMedia = ViewUtil.findById(view, R.id.no_documents); - - this.recyclerView.setAdapter(adapter); - this.recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); - this.recyclerView.addItemDecoration(new StickyHeaderDecoration(adapter, false, true)); - this.recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL)); - - return view; - } - - @Override - public Loader onCreateLoader(int id, Bundle args) { - return new ThreadMediaLoader(getContext(), recipient.getAddress(), false); - } - - @Override - public void onLoadFinished(Loader loader, Cursor data) { - //((CursorRecyclerViewAdapter)this.recyclerView.getAdapter()).changeCursor(data); - getActivity().invalidateOptionsMenu(); - - // TODO: onLoadFinished() should no take a cursor but forward the loaded messages in a way - this.noMedia.setVisibility(data.getCount() > 0 ? View.GONE : View.VISIBLE); - } - - @Override - public void onLoaderReset(Loader loader) { - ((CursorRecyclerViewAdapter)this.recyclerView.getAdapter()).changeCursor(null); - getActivity().invalidateOptionsMenu(); - } -} -*/ \ No newline at end of file