diff --git a/src/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java b/src/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java index a094bf4b76..f9d67bac84 100644 --- a/src/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java +++ b/src/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java @@ -23,6 +23,7 @@ import android.widget.ImageView; import com.bumptech.glide.load.Key; import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.signature.MediaStoreSignature; import org.thoughtcrime.securesms.R; @@ -31,6 +32,8 @@ import org.thoughtcrime.securesms.database.loaders.RecentPhotosLoader; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.util.ViewUtil; +import java.io.File; + public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.LoaderCallbacks { @NonNull private final RecyclerView recyclerView; @@ -103,7 +106,7 @@ public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.Lo public void onBindItemViewHolder(RecentPhotoViewHolder viewHolder, @NonNull Cursor cursor) { viewHolder.imageView.setImageDrawable(null); - long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns._ID)); + String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA)); long dateTaken = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_TAKEN)); long dateModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_MODIFIED)); String mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.MIME_TYPE)); @@ -113,7 +116,7 @@ public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.Lo int width = cursor.getInt(cursor.getColumnIndexOrThrow(getWidthColumn(orientation))); int height = cursor.getInt(cursor.getColumnIndexOrThrow(getHeightColumn(orientation))); - final Uri uri = Uri.withAppendedPath(baseUri, Long.toString(id)); + final Uri uri = Uri.fromFile(new File(path)); Key signature = new MediaStoreSignature(mimeType, dateModified, orientation); @@ -121,6 +124,7 @@ public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.Lo .load(uri) .signature(signature) .diskCacheStrategy(DiskCacheStrategy.NONE) + .transition(DrawableTransitionOptions.withCrossFade()) .into(viewHolder.imageView); viewHolder.imageView.setOnClickListener(v -> { diff --git a/src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java b/src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java index 7ed0184e8e..3c24a0ae11 100644 --- a/src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java +++ b/src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java @@ -15,7 +15,7 @@ public class RecentPhotosLoader extends CursorLoader { public static Uri BASE_URL = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; private static final String[] PROJECTION = new String[] { - MediaStore.Images.ImageColumns._ID, + MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.DATE_TAKEN, MediaStore.Images.ImageColumns.DATE_MODIFIED, MediaStore.Images.ImageColumns.ORIENTATION, @@ -26,6 +26,8 @@ public class RecentPhotosLoader extends CursorLoader { MediaStore.Images.ImageColumns.HEIGHT }; + private static final String SELECTION = MediaStore.Images.Media.DATA + " NOT NULL"; + private final Context context; public RecentPhotosLoader(Context context) { @@ -37,7 +39,7 @@ public class RecentPhotosLoader extends CursorLoader { public Cursor loadInBackground() { if (Permissions.hasAll(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { return context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, - PROJECTION, null, null, + PROJECTION, SELECTION, null, MediaStore.Images.ImageColumns.DATE_MODIFIED + " DESC"); } else { return null; diff --git a/src/org/thoughtcrime/securesms/mediasend/MediaRepository.java b/src/org/thoughtcrime/securesms/mediasend/MediaRepository.java index 0c62128f9d..cc47fb2dae 100644 --- a/src/org/thoughtcrime/securesms/mediasend/MediaRepository.java +++ b/src/org/thoughtcrime/securesms/mediasend/MediaRepository.java @@ -182,9 +182,9 @@ class MediaRepository { String[] projection; if (hasOrientation) { - projection = new String[]{Images.Media._ID, Images.Media.MIME_TYPE, Images.Media.DATE_TAKEN, Images.Media.ORIENTATION, Images.Media.WIDTH, Images.Media.HEIGHT, Images.Media.SIZE}; + projection = new String[]{Images.Media.DATA, Images.Media.MIME_TYPE, Images.Media.DATE_TAKEN, Images.Media.ORIENTATION, Images.Media.WIDTH, Images.Media.HEIGHT, Images.Media.SIZE}; } else { - projection = new String[]{Images.Media._ID, Images.Media.MIME_TYPE, Images.Media.DATE_TAKEN, Images.Media.WIDTH, Images.Media.HEIGHT, Images.Media.SIZE}; + projection = new String[]{Images.Media.DATA, Images.Media.MIME_TYPE, Images.Media.DATE_TAKEN, Images.Media.WIDTH, Images.Media.HEIGHT, Images.Media.SIZE}; } if (Media.ALL_MEDIA_BUCKET_ID.equals(bucketId)) { @@ -194,7 +194,8 @@ class MediaRepository { try (Cursor cursor = context.getContentResolver().query(contentUri, projection, selection, selectionArgs, sortBy)) { while (cursor != null && cursor.moveToNext()) { - Uri uri = Uri.withAppendedPath(contentUri, cursor.getString(cursor.getColumnIndexOrThrow(Images.Media._ID))); + String path = cursor.getString(cursor.getColumnIndexOrThrow(projection[0])); + Uri uri = Uri.fromFile(new File(path)); String mimetype = cursor.getString(cursor.getColumnIndexOrThrow(Images.Media.MIME_TYPE)); long dateTaken = cursor.getLong(cursor.getColumnIndexOrThrow(Images.Media.DATE_TAKEN)); int orientation = hasOrientation ? cursor.getInt(cursor.getColumnIndexOrThrow(Images.Media.ORIENTATION)) : 0;