diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e2e15e36..e6f9c562 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,7 +5,7 @@ - + diff --git a/app/src/main/java/awais/instagrabber/dialogs/MediaPickerBottomDialogFragment.java b/app/src/main/java/awais/instagrabber/dialogs/MediaPickerBottomDialogFragment.java index 15474032..d36cb9dd 100644 --- a/app/src/main/java/awais/instagrabber/dialogs/MediaPickerBottomDialogFragment.java +++ b/app/src/main/java/awais/instagrabber/dialogs/MediaPickerBottomDialogFragment.java @@ -26,6 +26,7 @@ import awais.instagrabber.R; import awais.instagrabber.adapters.MediaItemsAdapter; import awais.instagrabber.databinding.LayoutMediaPickerBinding; import awais.instagrabber.utils.MediaController; +import awais.instagrabber.utils.PermissionUtils; import awais.instagrabber.utils.TextUtils; import awais.instagrabber.viewmodels.MediaPickerViewModel; @@ -120,10 +121,10 @@ public class MediaPickerBottomDialogFragment extends BottomSheetDialogFragment { if (requestCode == ATTACH_MEDIA_REQUEST_CODE) { final Context context = getContext(); if (context == null) return; - // final boolean hasAttachMediaPerms = PermissionUtils.hasAttachMediaPerms(context); - // if (hasAttachMediaPerms) { - viewModel.loadMedia(context); - // } + final boolean hasAttachMediaPerms = PermissionUtils.hasAttachMediaPerms(context); + if (hasAttachMediaPerms) { + viewModel.loadMedia(context); + } } } @@ -132,10 +133,10 @@ public class MediaPickerBottomDialogFragment extends BottomSheetDialogFragment { setupAlbumPicker(); final Context context = getContext(); if (context == null) return; - // if (!PermissionUtils.hasAttachMediaPerms(context)) { - // PermissionUtils.requestAttachMediaPerms(this, ATTACH_MEDIA_REQUEST_CODE); - // return; - // } + if (!PermissionUtils.hasAttachMediaPerms(context)) { + PermissionUtils.requestAttachMediaPerms(this, ATTACH_MEDIA_REQUEST_CODE); + return; + } viewModel.loadMedia(context); } diff --git a/app/src/main/java/awais/instagrabber/utils/MediaController.java b/app/src/main/java/awais/instagrabber/utils/MediaController.java index 9ca8e318..237dd85a 100644 --- a/app/src/main/java/awais/instagrabber/utils/MediaController.java +++ b/app/src/main/java/awais/instagrabber/utils/MediaController.java @@ -87,83 +87,83 @@ public class MediaController { Cursor cursor = null; try { - // if (PermissionUtils.hasAttachMediaPerms(context)) { - cursor = MediaStore.Images.Media.query(context.getContentResolver(), - MediaStore.Images.Media.EXTERNAL_CONTENT_URI, - PROJECTION_PHOTOS, - null, - null, - (Build.VERSION.SDK_INT > 28 - ? MediaStore.Images.Media.DATE_TAKEN - : MediaStore.Images.Media.DATE_MODIFIED) + " DESC"); - if (cursor != null) { - int imageIdColumn = cursor.getColumnIndex(MediaStore.Images.Media._ID); - int bucketIdColumn = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID); - int bucketNameColumn = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME); - int dataColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATA); - int dateColumn = cursor.getColumnIndex(Build.VERSION.SDK_INT > 28 ? MediaStore.Images.Media.DATE_TAKEN - : MediaStore.Images.Media.DATE_MODIFIED); - int orientationColumn = cursor.getColumnIndex(MediaStore.Images.Media.ORIENTATION); - int widthColumn = cursor.getColumnIndex(MediaStore.Images.Media.WIDTH); - int heightColumn = cursor.getColumnIndex(MediaStore.Images.Media.HEIGHT); - int sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE); - - while (cursor.moveToNext()) { - String path = cursor.getString(dataColumn); - if (TextUtils.isEmpty(path)) { - continue; - } + if (PermissionUtils.hasAttachMediaPerms(context)) { + cursor = MediaStore.Images.Media.query(context.getContentResolver(), + MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + PROJECTION_PHOTOS, + null, + null, + (Build.VERSION.SDK_INT > 28 + ? MediaStore.Images.Media.DATE_TAKEN + : MediaStore.Images.Media.DATE_MODIFIED) + " DESC"); + if (cursor != null) { + int imageIdColumn = cursor.getColumnIndex(MediaStore.Images.Media._ID); + int bucketIdColumn = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID); + int bucketNameColumn = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME); + int dataColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATA); + int dateColumn = cursor.getColumnIndex(Build.VERSION.SDK_INT > 28 ? MediaStore.Images.Media.DATE_TAKEN + : MediaStore.Images.Media.DATE_MODIFIED); + int orientationColumn = cursor.getColumnIndex(MediaStore.Images.Media.ORIENTATION); + int widthColumn = cursor.getColumnIndex(MediaStore.Images.Media.WIDTH); + int heightColumn = cursor.getColumnIndex(MediaStore.Images.Media.HEIGHT); + int sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE); + + while (cursor.moveToNext()) { + String path = cursor.getString(dataColumn); + if (TextUtils.isEmpty(path)) { + continue; + } - int imageId = cursor.getInt(imageIdColumn); - int bucketId = cursor.getInt(bucketIdColumn); - String bucketName = cursor.getString(bucketNameColumn); - long dateTaken = cursor.getLong(dateColumn); - int orientation = cursor.getInt(orientationColumn); - int width = cursor.getInt(widthColumn); - int height = cursor.getInt(heightColumn); - long size = cursor.getLong(sizeColumn); + int imageId = cursor.getInt(imageIdColumn); + int bucketId = cursor.getInt(bucketIdColumn); + String bucketName = cursor.getString(bucketNameColumn); + long dateTaken = cursor.getLong(dateColumn); + int orientation = cursor.getInt(orientationColumn); + int width = cursor.getInt(widthColumn); + int height = cursor.getInt(heightColumn); + long size = cursor.getLong(sizeColumn); - MediaEntry mediaEntry = new MediaEntry(bucketId, imageId, dateTaken, path, orientation, -1, false, width, height, size); + MediaEntry mediaEntry = new MediaEntry(bucketId, imageId, dateTaken, path, orientation, -1, false, width, height, size); - if (allPhotosAlbum == null) { - allPhotosAlbum = new AlbumEntry(0, context.getString(R.string.all_photos), mediaEntry); - photoAlbumsSorted.add(0, allPhotosAlbum); - } - if (allMediaAlbum == null) { - allMediaAlbum = new AlbumEntry(0, context.getString(R.string.all_media), mediaEntry); - mediaAlbumsSorted.add(0, allMediaAlbum); - } - allPhotosAlbum.addPhoto(mediaEntry); - allMediaAlbum.addPhoto(mediaEntry); - - AlbumEntry albumEntry = mediaAlbums.get(bucketId); - if (albumEntry == null) { - albumEntry = new AlbumEntry(bucketId, bucketName, mediaEntry); - mediaAlbums.put(bucketId, albumEntry); - if (mediaCameraAlbumId == null && cameraFolder != null && path.startsWith(cameraFolder)) { - mediaAlbumsSorted.add(0, albumEntry); - mediaCameraAlbumId = bucketId; - } else { - mediaAlbumsSorted.add(albumEntry); + if (allPhotosAlbum == null) { + allPhotosAlbum = new AlbumEntry(0, context.getString(R.string.all_photos), mediaEntry); + photoAlbumsSorted.add(0, allPhotosAlbum); } - } - albumEntry.addPhoto(mediaEntry); - - albumEntry = photoAlbums.get(bucketId); - if (albumEntry == null) { - albumEntry = new AlbumEntry(bucketId, bucketName, mediaEntry); - photoAlbums.put(bucketId, albumEntry); - if (photoCameraAlbumId == null && cameraFolder != null && path.startsWith(cameraFolder)) { - photoAlbumsSorted.add(0, albumEntry); - photoCameraAlbumId = bucketId; - } else { - photoAlbumsSorted.add(albumEntry); + if (allMediaAlbum == null) { + allMediaAlbum = new AlbumEntry(0, context.getString(R.string.all_media), mediaEntry); + mediaAlbumsSorted.add(0, allMediaAlbum); + } + allPhotosAlbum.addPhoto(mediaEntry); + allMediaAlbum.addPhoto(mediaEntry); + + AlbumEntry albumEntry = mediaAlbums.get(bucketId); + if (albumEntry == null) { + albumEntry = new AlbumEntry(bucketId, bucketName, mediaEntry); + mediaAlbums.put(bucketId, albumEntry); + if (mediaCameraAlbumId == null && cameraFolder != null && path.startsWith(cameraFolder)) { + mediaAlbumsSorted.add(0, albumEntry); + mediaCameraAlbumId = bucketId; + } else { + mediaAlbumsSorted.add(albumEntry); + } + } + albumEntry.addPhoto(mediaEntry); + + albumEntry = photoAlbums.get(bucketId); + if (albumEntry == null) { + albumEntry = new AlbumEntry(bucketId, bucketName, mediaEntry); + photoAlbums.put(bucketId, albumEntry); + if (photoCameraAlbumId == null && cameraFolder != null && path.startsWith(cameraFolder)) { + photoAlbumsSorted.add(0, albumEntry); + photoCameraAlbumId = bucketId; + } else { + photoAlbumsSorted.add(albumEntry); + } } + albumEntry.addPhoto(mediaEntry); } - albumEntry.addPhoto(mediaEntry); } } - // } } catch (Throwable e) { Log.e(TAG, "loadGalleryAlbums: ", e); } finally { @@ -177,79 +177,79 @@ public class MediaController { } try { - // if (PermissionUtils.hasAttachMediaPerms(context)) { - cursor = MediaStore.Images.Media.query(context.getContentResolver(), - MediaStore.Video.Media.EXTERNAL_CONTENT_URI, - PROJECTION_VIDEO, - MediaStore.Video.Media.MIME_TYPE + "=?", - new String[]{"video/mp4"}, - (Build.VERSION.SDK_INT > 28 - ? MediaStore.Video.Media.DATE_TAKEN - : MediaStore.Video.Media.DATE_MODIFIED) + " DESC"); - if (cursor != null) { - int imageIdColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID); - int bucketIdColumn = cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_ID); - int bucketNameColumn = cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_DISPLAY_NAME); - int dataColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATA); - int dateColumn = cursor.getColumnIndex(Build.VERSION.SDK_INT > 28 ? MediaStore.Video.Media.DATE_TAKEN - : MediaStore.Video.Media.DATE_MODIFIED); - int durationColumn = cursor.getColumnIndex(MediaStore.Video.Media.DURATION); - int widthColumn = cursor.getColumnIndex(MediaStore.Video.Media.WIDTH); - int heightColumn = cursor.getColumnIndex(MediaStore.Video.Media.HEIGHT); - int sizeColumn = cursor.getColumnIndex(MediaStore.Video.Media.SIZE); - - while (cursor.moveToNext()) { - String path = cursor.getString(dataColumn); - if (TextUtils.isEmpty(path)) { - continue; - } + if (PermissionUtils.hasAttachMediaPerms(context)) { + cursor = MediaStore.Images.Media.query(context.getContentResolver(), + MediaStore.Video.Media.EXTERNAL_CONTENT_URI, + PROJECTION_VIDEO, + MediaStore.Video.Media.MIME_TYPE + "=?", + new String[]{"video/mp4"}, + (Build.VERSION.SDK_INT > 28 + ? MediaStore.Video.Media.DATE_TAKEN + : MediaStore.Video.Media.DATE_MODIFIED) + " DESC"); + if (cursor != null) { + int imageIdColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID); + int bucketIdColumn = cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_ID); + int bucketNameColumn = cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_DISPLAY_NAME); + int dataColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATA); + int dateColumn = cursor.getColumnIndex(Build.VERSION.SDK_INT > 28 ? MediaStore.Video.Media.DATE_TAKEN + : MediaStore.Video.Media.DATE_MODIFIED); + int durationColumn = cursor.getColumnIndex(MediaStore.Video.Media.DURATION); + int widthColumn = cursor.getColumnIndex(MediaStore.Video.Media.WIDTH); + int heightColumn = cursor.getColumnIndex(MediaStore.Video.Media.HEIGHT); + int sizeColumn = cursor.getColumnIndex(MediaStore.Video.Media.SIZE); + + while (cursor.moveToNext()) { + String path = cursor.getString(dataColumn); + if (TextUtils.isEmpty(path)) { + continue; + } - int imageId = cursor.getInt(imageIdColumn); - int bucketId = cursor.getInt(bucketIdColumn); - String bucketName = cursor.getString(bucketNameColumn); - long dateTaken = cursor.getLong(dateColumn); - long duration = cursor.getLong(durationColumn); - int width = cursor.getInt(widthColumn); - int height = cursor.getInt(heightColumn); - long size = cursor.getLong(sizeColumn); - - MediaEntry mediaEntry = new MediaEntry(bucketId, imageId, dateTaken, path, -1, duration, true, width, height, size); - - if (allVideosAlbum == null) { - allVideosAlbum = new AlbumEntry(0, context.getString(R.string.all_videos), mediaEntry); - allVideosAlbum.videoOnly = true; - int index = 0; - if (allMediaAlbum != null) { - index++; + int imageId = cursor.getInt(imageIdColumn); + int bucketId = cursor.getInt(bucketIdColumn); + String bucketName = cursor.getString(bucketNameColumn); + long dateTaken = cursor.getLong(dateColumn); + long duration = cursor.getLong(durationColumn); + int width = cursor.getInt(widthColumn); + int height = cursor.getInt(heightColumn); + long size = cursor.getLong(sizeColumn); + + MediaEntry mediaEntry = new MediaEntry(bucketId, imageId, dateTaken, path, -1, duration, true, width, height, size); + + if (allVideosAlbum == null) { + allVideosAlbum = new AlbumEntry(0, context.getString(R.string.all_videos), mediaEntry); + allVideosAlbum.videoOnly = true; + int index = 0; + if (allMediaAlbum != null) { + index++; + } + if (allPhotosAlbum != null) { + index++; + } + mediaAlbumsSorted.add(index, allVideosAlbum); } - if (allPhotosAlbum != null) { - index++; + if (allMediaAlbum == null) { + allMediaAlbum = new AlbumEntry(0, context.getString(R.string.all_media), mediaEntry); + mediaAlbumsSorted.add(0, allMediaAlbum); } - mediaAlbumsSorted.add(index, allVideosAlbum); - } - if (allMediaAlbum == null) { - allMediaAlbum = new AlbumEntry(0, context.getString(R.string.all_media), mediaEntry); - mediaAlbumsSorted.add(0, allMediaAlbum); - } - allVideosAlbum.addPhoto(mediaEntry); - allMediaAlbum.addPhoto(mediaEntry); - - AlbumEntry albumEntry = mediaAlbums.get(bucketId); - if (albumEntry == null) { - albumEntry = new AlbumEntry(bucketId, bucketName, mediaEntry); - mediaAlbums.put(bucketId, albumEntry); - if (mediaCameraAlbumId == null && cameraFolder != null && path.startsWith(cameraFolder)) { - mediaAlbumsSorted.add(0, albumEntry); - mediaCameraAlbumId = bucketId; - } else { - mediaAlbumsSorted.add(albumEntry); + allVideosAlbum.addPhoto(mediaEntry); + allMediaAlbum.addPhoto(mediaEntry); + + AlbumEntry albumEntry = mediaAlbums.get(bucketId); + if (albumEntry == null) { + albumEntry = new AlbumEntry(bucketId, bucketName, mediaEntry); + mediaAlbums.put(bucketId, albumEntry); + if (mediaCameraAlbumId == null && cameraFolder != null && path.startsWith(cameraFolder)) { + mediaAlbumsSorted.add(0, albumEntry); + mediaCameraAlbumId = bucketId; + } else { + mediaAlbumsSorted.add(albumEntry); + } } - } - albumEntry.addPhoto(mediaEntry); + albumEntry.addPhoto(mediaEntry); + } } } - // } } catch (Throwable e) { Log.e(TAG, "loadGalleryAlbums: ", e); } finally { diff --git a/app/src/main/java/awais/instagrabber/utils/PermissionUtils.java b/app/src/main/java/awais/instagrabber/utils/PermissionUtils.java index aaf510d5..8b92fe1d 100644 --- a/app/src/main/java/awais/instagrabber/utils/PermissionUtils.java +++ b/app/src/main/java/awais/instagrabber/utils/PermissionUtils.java @@ -11,31 +11,30 @@ import androidx.core.content.PermissionChecker; import androidx.fragment.app.Fragment; import static android.Manifest.permission.CAMERA; +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; import static android.Manifest.permission.RECORD_AUDIO; import static androidx.core.content.PermissionChecker.checkSelfPermission; public class PermissionUtils { public static final String[] AUDIO_RECORD_PERMS = new String[]{RECORD_AUDIO}; - // public static final String[] ATTACH_MEDIA_PERMS = new String[]{READ_EXTERNAL_STORAGE}; + public static final String[] ATTACH_MEDIA_PERMS = new String[]{READ_EXTERNAL_STORAGE}; public static final String[] CAMERA_PERMS = new String[]{CAMERA}; public static boolean hasAudioRecordPerms(@NonNull final Context context) { - return // checkSelfPermission(context, WRITE_EXTERNAL_STORAGE) == PermissionChecker.PERMISSION_GRANTED - // && - checkSelfPermission(context, RECORD_AUDIO) == PermissionChecker.PERMISSION_GRANTED; + return checkSelfPermission(context, RECORD_AUDIO) == PermissionChecker.PERMISSION_GRANTED; } public static void requestAudioRecordPerms(final Fragment fragment, final int requestCode) { fragment.requestPermissions(AUDIO_RECORD_PERMS, requestCode); } - // public static boolean hasAttachMediaPerms(@NonNull final Context context) { - // return checkSelfPermission(context, READ_EXTERNAL_STORAGE) == PermissionChecker.PERMISSION_GRANTED; - // } + public static boolean hasAttachMediaPerms(@NonNull final Context context) { + return checkSelfPermission(context, READ_EXTERNAL_STORAGE) == PermissionChecker.PERMISSION_GRANTED; + } - // public static void requestAttachMediaPerms(final Fragment fragment, final int requestCode) { - // fragment.requestPermissions(ATTACH_MEDIA_PERMS, requestCode); - // } + public static void requestAttachMediaPerms(final Fragment fragment, final int requestCode) { + fragment.requestPermissions(ATTACH_MEDIA_PERMS, requestCode); + } public static boolean hasCameraPerms(final Context context) { return ContextCompat.checkSelfPermission(context, CAMERA) == PackageManager.PERMISSION_GRANTED;