From 83e31cac074ff7945128af2ccdebc9c2d3cbeae1 Mon Sep 17 00:00:00 2001 From: haffenloher Date: Wed, 1 Feb 2017 03:49:19 +0100 Subject: [PATCH] Show videos in media overview Fixes #5941 Closes #6152 // FREEBIE --- res/layout/media_overview_activity.xml | 2 +- res/layout/media_overview_item.xml | 2 +- res/menu/conversation.xml | 2 +- res/menu/media_preview.xml | 2 +- res/values/strings.xml | 12 +++---- ...ageMediaAdapter.java => MediaAdapter.java} | 33 ++++++++++--------- .../securesms/MediaOverviewActivity.java | 14 ++++---- .../securesms/database/DatabaseFactory.java | 8 ++--- ...{ImageDatabase.java => MediaDatabase.java} | 23 ++++++------- 9 files changed, 50 insertions(+), 48 deletions(-) rename src/org/thoughtcrime/securesms/{ImageMediaAdapter.java => MediaAdapter.java} (75%) rename src/org/thoughtcrime/securesms/database/{ImageDatabase.java => MediaDatabase.java} (86%) diff --git a/res/layout/media_overview_activity.xml b/res/layout/media_overview_activity.xml index 56a6def5e4..d9e3d7afb4 100644 --- a/res/layout/media_overview_activity.xml +++ b/res/layout/media_overview_activity.xml @@ -21,6 +21,6 @@ android:gravity="center_horizontal" android:paddingTop="30dp" android:visibility="gone" - android:text="@string/media_overview_activity__no_images" /> + android:text="@string/media_overview_activity__no_media" /> diff --git a/res/layout/media_overview_item.xml b/res/layout/media_overview_item.xml index f02d942140..715651a9c5 100644 --- a/res/layout/media_overview_item.xml +++ b/res/layout/media_overview_item.xml @@ -8,6 +8,6 @@ android:id="@+id/image" android:layout_width="match_parent" android:layout_height="match_parent" - android:contentDescription="@string/media_preview_activity__image_content_description" /> + android:contentDescription="@string/media_preview_activity__media_content_description" /> diff --git a/res/menu/conversation.xml b/res/menu/conversation.xml index 81587e84c1..ac15ff12f7 100644 --- a/res/menu/conversation.xml +++ b/res/menu/conversation.xml @@ -4,7 +4,7 @@ - diff --git a/res/values/strings.xml b/res/values/strings.xml index b80a4d03e5..cf7c7cf0eb 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -858,7 +858,7 @@ See full conversation - No images + No media VERIFY @@ -1012,8 +1012,8 @@ Verify safety number Submit debug log Media preview - All images - All images with %1$s + All media + All media with %1$s Message details Linked devices Invite friends @@ -1233,7 +1233,7 @@ Edit group Leave group Delete conversation - All images + All media Conversation settings @@ -1296,13 +1296,13 @@ Save Forward - All images + All media Save all - Image preview + Media preview Refresh diff --git a/src/org/thoughtcrime/securesms/ImageMediaAdapter.java b/src/org/thoughtcrime/securesms/MediaAdapter.java similarity index 75% rename from src/org/thoughtcrime/securesms/ImageMediaAdapter.java rename to src/org/thoughtcrime/securesms/MediaAdapter.java index aa3f323819..e5011ee1c8 100644 --- a/src/org/thoughtcrime/securesms/ImageMediaAdapter.java +++ b/src/org/thoughtcrime/securesms/MediaAdapter.java @@ -27,18 +27,18 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; -import org.thoughtcrime.securesms.ImageMediaAdapter.ViewHolder; +import org.thoughtcrime.securesms.MediaAdapter.ViewHolder; import org.thoughtcrime.securesms.components.ThumbnailView; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter; -import org.thoughtcrime.securesms.database.ImageDatabase.ImageRecord; +import org.thoughtcrime.securesms.database.MediaDatabase.MediaRecord; import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.recipients.RecipientFactory; import org.thoughtcrime.securesms.recipients.Recipients; import org.thoughtcrime.securesms.util.MediaUtil; -public class ImageMediaAdapter extends CursorRecyclerViewAdapter { - private static final String TAG = ImageMediaAdapter.class.getSimpleName(); +public class MediaAdapter extends CursorRecyclerViewAdapter { + private static final String TAG = MediaAdapter.class.getSimpleName(); private final MasterSecret masterSecret; private final long threadId; @@ -52,7 +52,7 @@ public class ImageMediaAdapter extends CursorRecyclerViewAdapter { } } - public ImageMediaAdapter(Context context, MasterSecret masterSecret, Cursor c, long threadId) { + public MediaAdapter(Context context, MasterSecret masterSecret, Cursor c, long threadId) { super(context, c); this.masterSecret = masterSecret; this.threadId = threadId; @@ -67,40 +67,41 @@ public class ImageMediaAdapter extends CursorRecyclerViewAdapter { @Override public void onBindItemViewHolder(final ViewHolder viewHolder, final @NonNull Cursor cursor) { final ThumbnailView imageView = viewHolder.imageView; - final ImageRecord imageRecord = ImageRecord.from(cursor); + final MediaRecord mediaRecord = MediaRecord.from(cursor); - Slide slide = MediaUtil.getSlideForAttachment(getContext(), imageRecord.getAttachment()); + Slide slide = MediaUtil.getSlideForAttachment(getContext(), mediaRecord.getAttachment()); if (slide != null) { imageView.setImageResource(masterSecret, slide, false); } - imageView.setOnClickListener(new OnMediaClickListener(imageRecord)); + imageView.setOnClickListener(new OnMediaClickListener(mediaRecord)); } private class OnMediaClickListener implements OnClickListener { - private final ImageRecord imageRecord; + private final MediaRecord mediaRecord; - private OnMediaClickListener(ImageRecord imageRecord) { - this.imageRecord = imageRecord; + private OnMediaClickListener(MediaRecord mediaRecord) { + this.mediaRecord = mediaRecord; } @Override public void onClick(View v) { - if (imageRecord.getAttachment().getDataUri() != null) { + if (mediaRecord.getAttachment().getDataUri() != null) { Intent intent = new Intent(getContext(), MediaPreviewActivity.class); - intent.putExtra(MediaPreviewActivity.DATE_EXTRA, imageRecord.getDate()); + intent.putExtra(MediaPreviewActivity.DATE_EXTRA, mediaRecord.getDate()); + intent.putExtra(MediaPreviewActivity.SIZE_EXTRA, mediaRecord.getAttachment().getSize()); intent.putExtra(MediaPreviewActivity.THREAD_ID_EXTRA, threadId); - if (!TextUtils.isEmpty(imageRecord.getAddress())) { + if (!TextUtils.isEmpty(mediaRecord.getAddress())) { Recipients recipients = RecipientFactory.getRecipientsFromString(getContext(), - imageRecord.getAddress(), + mediaRecord.getAddress(), true); if (recipients != null && recipients.getPrimaryRecipient() != null) { intent.putExtra(MediaPreviewActivity.RECIPIENT_EXTRA, recipients.getPrimaryRecipient().getRecipientId()); } } - intent.setDataAndType(imageRecord.getAttachment().getDataUri(), imageRecord.getContentType()); + intent.setDataAndType(mediaRecord.getAttachment().getDataUri(), mediaRecord.getContentType()); getContext().startActivity(intent); } } diff --git a/src/org/thoughtcrime/securesms/MediaOverviewActivity.java b/src/org/thoughtcrime/securesms/MediaOverviewActivity.java index a831ca683c..0d68038271 100644 --- a/src/org/thoughtcrime/securesms/MediaOverviewActivity.java +++ b/src/org/thoughtcrime/securesms/MediaOverviewActivity.java @@ -40,7 +40,7 @@ import android.widget.TextView; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter; import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.thoughtcrime.securesms.database.ImageDatabase.ImageRecord; +import org.thoughtcrime.securesms.database.MediaDatabase.MediaRecord; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient.RecipientModifiedListener; import org.thoughtcrime.securesms.recipients.RecipientFactory; @@ -114,8 +114,8 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity i private void initializeActionBar() { getSupportActionBar().setTitle(recipient == null - ? getString(R.string.AndroidManifest__media_overview) - : getString(R.string.AndroidManifest__media_overview_named, recipient.toShortString())); + ? getString(R.string.AndroidManifest__all_media) + : getString(R.string.AndroidManifest__all_media_named, recipient.toShortString())); } @Override @@ -162,11 +162,11 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity i R.string.please_wait) { @Override protected List doInBackground(Void... params) { - Cursor cursor = DatabaseFactory.getImageDatabase(c).getImagesForThread(threadId); + Cursor cursor = DatabaseFactory.getMediaDatabase(c).getMediaForThread(threadId); List attachments = new ArrayList<>(cursor.getCount()); while (cursor != null && cursor.moveToNext()) { - ImageRecord record = ImageRecord.from(cursor); + MediaRecord record = MediaRecord.from(cursor); attachments.add(new SaveAttachmentTask.Attachment(record.getAttachment().getDataUri(), record.getContentType(), record.getDate())); @@ -220,7 +220,7 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity i @Override public void onLoadFinished(Loader cursorLoader, Cursor cursor) { Log.w(TAG, "onLoadFinished()"); - gridView.setAdapter(new ImageMediaAdapter(this, masterSecret, cursor, threadId)); + gridView.setAdapter(new MediaAdapter(this, masterSecret, cursor, threadId)); noImages.setVisibility(gridView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE); invalidateOptionsMenu(); } @@ -240,7 +240,7 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity i @Override public Cursor getCursor() { - return DatabaseFactory.getImageDatabase(getContext()).getImagesForThread(threadId); + return DatabaseFactory.getMediaDatabase(getContext()).getMediaForThread(threadId); } } } diff --git a/src/org/thoughtcrime/securesms/database/DatabaseFactory.java b/src/org/thoughtcrime/securesms/database/DatabaseFactory.java index 050123f876..65ba4718b7 100644 --- a/src/org/thoughtcrime/securesms/database/DatabaseFactory.java +++ b/src/org/thoughtcrime/securesms/database/DatabaseFactory.java @@ -87,7 +87,7 @@ public class DatabaseFactory { private final EncryptingSmsDatabase encryptingSms; private final MmsDatabase mms; private final AttachmentDatabase attachments; - private final ImageDatabase image; + private final MediaDatabase media; private final ThreadDatabase thread; private final CanonicalAddressDatabase address; private final MmsAddressDatabase mmsAddress; @@ -136,8 +136,8 @@ public class DatabaseFactory { return getInstance(context).attachments; } - public static ImageDatabase getImageDatabase(Context context) { - return getInstance(context).image; + public static MediaDatabase getMediaDatabase(Context context) { + return getInstance(context).media; } public static MmsAddressDatabase getMmsAddressDatabase(Context context) { @@ -174,7 +174,7 @@ public class DatabaseFactory { this.encryptingSms = new EncryptingSmsDatabase(context, databaseHelper); this.mms = new MmsDatabase(context, databaseHelper); this.attachments = new AttachmentDatabase(context, databaseHelper); - this.image = new ImageDatabase(context, databaseHelper); + this.media = new MediaDatabase(context, databaseHelper); this.thread = new ThreadDatabase(context, databaseHelper); this.address = CanonicalAddressDatabase.getInstance(context); this.mmsAddress = new MmsAddressDatabase(context, databaseHelper); diff --git a/src/org/thoughtcrime/securesms/database/ImageDatabase.java b/src/org/thoughtcrime/securesms/database/MediaDatabase.java similarity index 86% rename from src/org/thoughtcrime/securesms/database/ImageDatabase.java rename to src/org/thoughtcrime/securesms/database/MediaDatabase.java index 6532501a8d..d0c16a202e 100644 --- a/src/org/thoughtcrime/securesms/database/ImageDatabase.java +++ b/src/org/thoughtcrime/securesms/database/MediaDatabase.java @@ -9,9 +9,9 @@ import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; -public class ImageDatabase extends Database { +public class MediaDatabase extends Database { - private final static String IMAGES_QUERY = "SELECT " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + ", " + private final static String MEDIA_QUERY = "SELECT " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + ", " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_TYPE + ", " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.THUMBNAIL_ASPECT_RATIO + ", " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.UNIQUE_ID + ", " @@ -28,23 +28,24 @@ public class ImageDatabase extends Database { + " ON " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + " = " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " " + "WHERE " + AttachmentDatabase.MMS_ID + " IN (SELECT " + MmsSmsColumns.ID + " FROM " + MmsDatabase.TABLE_NAME - + " WHERE " + MmsDatabase.THREAD_ID + " = ?) AND " - + AttachmentDatabase.CONTENT_TYPE + " LIKE 'image/%' AND " + + " WHERE " + MmsDatabase.THREAD_ID + " = ?) AND (" + + AttachmentDatabase.CONTENT_TYPE + " LIKE 'image/%' OR " + + AttachmentDatabase.CONTENT_TYPE + " LIKE 'video/%') AND " + AttachmentDatabase.DATA + " IS NOT NULL " + "ORDER BY " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + " DESC"; - public ImageDatabase(Context context, SQLiteOpenHelper databaseHelper) { + public MediaDatabase(Context context, SQLiteOpenHelper databaseHelper) { super(context, databaseHelper); } - public Cursor getImagesForThread(long threadId) { + public Cursor getMediaForThread(long threadId) { SQLiteDatabase database = databaseHelper.getReadableDatabase(); - Cursor cursor = database.rawQuery(IMAGES_QUERY, new String[]{threadId+""}); + Cursor cursor = database.rawQuery(MEDIA_QUERY, new String[]{threadId+""}); setNotifyConverationListeners(cursor, threadId); return cursor; } - public static class ImageRecord { + public static class MediaRecord { private final AttachmentId attachmentId; private final long mmsId; private final boolean hasData; @@ -55,7 +56,7 @@ public class ImageDatabase extends Database { private final int transferState; private final long size; - private ImageRecord(AttachmentId attachmentId, long mmsId, + private MediaRecord(AttachmentId attachmentId, long mmsId, boolean hasData, boolean hasThumbnail, String contentType, String address, long date, int transferState, long size) @@ -71,7 +72,7 @@ public class ImageDatabase extends Database { this.size = size; } - public static ImageRecord from(Cursor cursor) { + public static MediaRecord from(Cursor cursor) { AttachmentId attachmentId = new AttachmentId(cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.ROW_ID)), cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.UNIQUE_ID))); @@ -83,7 +84,7 @@ public class ImageDatabase extends Database { date = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.DATE_RECEIVED)); } - return new ImageRecord(attachmentId, + return new MediaRecord(attachmentId, cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.MMS_ID)), !cursor.isNull(cursor.getColumnIndexOrThrow(AttachmentDatabase.DATA)), !cursor.isNull(cursor.getColumnIndexOrThrow(AttachmentDatabase.THUMBNAIL)),