1
0
mirror of https://github.com/KokaKiwi/BarInsta synced 2024-11-22 22:57:29 +00:00

Media picker will require Read storage permission

This commit is contained in:
Ammar Githam 2021-04-06 00:58:42 +09:00
parent bca38a2645
commit 6005e91d8a
4 changed files with 156 additions and 156 deletions

View File

@ -5,7 +5,7 @@
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />--> <!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
<!--<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<!--<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />--> <!--<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />-->

View File

@ -26,6 +26,7 @@ import awais.instagrabber.R;
import awais.instagrabber.adapters.MediaItemsAdapter; import awais.instagrabber.adapters.MediaItemsAdapter;
import awais.instagrabber.databinding.LayoutMediaPickerBinding; import awais.instagrabber.databinding.LayoutMediaPickerBinding;
import awais.instagrabber.utils.MediaController; import awais.instagrabber.utils.MediaController;
import awais.instagrabber.utils.PermissionUtils;
import awais.instagrabber.utils.TextUtils; import awais.instagrabber.utils.TextUtils;
import awais.instagrabber.viewmodels.MediaPickerViewModel; import awais.instagrabber.viewmodels.MediaPickerViewModel;
@ -120,10 +121,10 @@ public class MediaPickerBottomDialogFragment extends BottomSheetDialogFragment {
if (requestCode == ATTACH_MEDIA_REQUEST_CODE) { if (requestCode == ATTACH_MEDIA_REQUEST_CODE) {
final Context context = getContext(); final Context context = getContext();
if (context == null) return; if (context == null) return;
// final boolean hasAttachMediaPerms = PermissionUtils.hasAttachMediaPerms(context); final boolean hasAttachMediaPerms = PermissionUtils.hasAttachMediaPerms(context);
// if (hasAttachMediaPerms) { if (hasAttachMediaPerms) {
viewModel.loadMedia(context); viewModel.loadMedia(context);
// } }
} }
} }
@ -132,10 +133,10 @@ public class MediaPickerBottomDialogFragment extends BottomSheetDialogFragment {
setupAlbumPicker(); setupAlbumPicker();
final Context context = getContext(); final Context context = getContext();
if (context == null) return; if (context == null) return;
// if (!PermissionUtils.hasAttachMediaPerms(context)) { if (!PermissionUtils.hasAttachMediaPerms(context)) {
// PermissionUtils.requestAttachMediaPerms(this, ATTACH_MEDIA_REQUEST_CODE); PermissionUtils.requestAttachMediaPerms(this, ATTACH_MEDIA_REQUEST_CODE);
// return; return;
// } }
viewModel.loadMedia(context); viewModel.loadMedia(context);
} }

View File

@ -87,83 +87,83 @@ public class MediaController {
Cursor cursor = null; Cursor cursor = null;
try { try {
// if (PermissionUtils.hasAttachMediaPerms(context)) { if (PermissionUtils.hasAttachMediaPerms(context)) {
cursor = MediaStore.Images.Media.query(context.getContentResolver(), cursor = MediaStore.Images.Media.query(context.getContentResolver(),
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
PROJECTION_PHOTOS, PROJECTION_PHOTOS,
null, null,
null, null,
(Build.VERSION.SDK_INT > 28 (Build.VERSION.SDK_INT > 28
? MediaStore.Images.Media.DATE_TAKEN ? MediaStore.Images.Media.DATE_TAKEN
: MediaStore.Images.Media.DATE_MODIFIED) + " DESC"); : MediaStore.Images.Media.DATE_MODIFIED) + " DESC");
if (cursor != null) { if (cursor != null) {
int imageIdColumn = cursor.getColumnIndex(MediaStore.Images.Media._ID); int imageIdColumn = cursor.getColumnIndex(MediaStore.Images.Media._ID);
int bucketIdColumn = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID); int bucketIdColumn = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID);
int bucketNameColumn = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME); int bucketNameColumn = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
int dataColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATA); int dataColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
int dateColumn = cursor.getColumnIndex(Build.VERSION.SDK_INT > 28 ? MediaStore.Images.Media.DATE_TAKEN int dateColumn = cursor.getColumnIndex(Build.VERSION.SDK_INT > 28 ? MediaStore.Images.Media.DATE_TAKEN
: MediaStore.Images.Media.DATE_MODIFIED); : MediaStore.Images.Media.DATE_MODIFIED);
int orientationColumn = cursor.getColumnIndex(MediaStore.Images.Media.ORIENTATION); int orientationColumn = cursor.getColumnIndex(MediaStore.Images.Media.ORIENTATION);
int widthColumn = cursor.getColumnIndex(MediaStore.Images.Media.WIDTH); int widthColumn = cursor.getColumnIndex(MediaStore.Images.Media.WIDTH);
int heightColumn = cursor.getColumnIndex(MediaStore.Images.Media.HEIGHT); int heightColumn = cursor.getColumnIndex(MediaStore.Images.Media.HEIGHT);
int sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE); int sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE);
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
String path = cursor.getString(dataColumn); String path = cursor.getString(dataColumn);
if (TextUtils.isEmpty(path)) { if (TextUtils.isEmpty(path)) {
continue; 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);
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);
} }
}
albumEntry.addPhoto(mediaEntry);
albumEntry = photoAlbums.get(bucketId); int imageId = cursor.getInt(imageIdColumn);
if (albumEntry == null) { int bucketId = cursor.getInt(bucketIdColumn);
albumEntry = new AlbumEntry(bucketId, bucketName, mediaEntry); String bucketName = cursor.getString(bucketNameColumn);
photoAlbums.put(bucketId, albumEntry); long dateTaken = cursor.getLong(dateColumn);
if (photoCameraAlbumId == null && cameraFolder != null && path.startsWith(cameraFolder)) { int orientation = cursor.getInt(orientationColumn);
photoAlbumsSorted.add(0, albumEntry); int width = cursor.getInt(widthColumn);
photoCameraAlbumId = bucketId; int height = cursor.getInt(heightColumn);
} else { long size = cursor.getLong(sizeColumn);
photoAlbumsSorted.add(albumEntry);
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);
}
}
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) { } catch (Throwable e) {
Log.e(TAG, "loadGalleryAlbums: ", e); Log.e(TAG, "loadGalleryAlbums: ", e);
} finally { } finally {
@ -177,79 +177,79 @@ public class MediaController {
} }
try { try {
// if (PermissionUtils.hasAttachMediaPerms(context)) { if (PermissionUtils.hasAttachMediaPerms(context)) {
cursor = MediaStore.Images.Media.query(context.getContentResolver(), cursor = MediaStore.Images.Media.query(context.getContentResolver(),
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
PROJECTION_VIDEO, PROJECTION_VIDEO,
MediaStore.Video.Media.MIME_TYPE + "=?", MediaStore.Video.Media.MIME_TYPE + "=?",
new String[]{"video/mp4"}, new String[]{"video/mp4"},
(Build.VERSION.SDK_INT > 28 (Build.VERSION.SDK_INT > 28
? MediaStore.Video.Media.DATE_TAKEN ? MediaStore.Video.Media.DATE_TAKEN
: MediaStore.Video.Media.DATE_MODIFIED) + " DESC"); : MediaStore.Video.Media.DATE_MODIFIED) + " DESC");
if (cursor != null) { if (cursor != null) {
int imageIdColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID); int imageIdColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID);
int bucketIdColumn = cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_ID); int bucketIdColumn = cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_ID);
int bucketNameColumn = cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_DISPLAY_NAME); int bucketNameColumn = cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_DISPLAY_NAME);
int dataColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATA); int dataColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATA);
int dateColumn = cursor.getColumnIndex(Build.VERSION.SDK_INT > 28 ? MediaStore.Video.Media.DATE_TAKEN int dateColumn = cursor.getColumnIndex(Build.VERSION.SDK_INT > 28 ? MediaStore.Video.Media.DATE_TAKEN
: MediaStore.Video.Media.DATE_MODIFIED); : MediaStore.Video.Media.DATE_MODIFIED);
int durationColumn = cursor.getColumnIndex(MediaStore.Video.Media.DURATION); int durationColumn = cursor.getColumnIndex(MediaStore.Video.Media.DURATION);
int widthColumn = cursor.getColumnIndex(MediaStore.Video.Media.WIDTH); int widthColumn = cursor.getColumnIndex(MediaStore.Video.Media.WIDTH);
int heightColumn = cursor.getColumnIndex(MediaStore.Video.Media.HEIGHT); int heightColumn = cursor.getColumnIndex(MediaStore.Video.Media.HEIGHT);
int sizeColumn = cursor.getColumnIndex(MediaStore.Video.Media.SIZE); int sizeColumn = cursor.getColumnIndex(MediaStore.Video.Media.SIZE);
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
String path = cursor.getString(dataColumn); String path = cursor.getString(dataColumn);
if (TextUtils.isEmpty(path)) { if (TextUtils.isEmpty(path)) {
continue; 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++;
} }
if (allPhotosAlbum != null) {
index++;
}
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); int imageId = cursor.getInt(imageIdColumn);
if (albumEntry == null) { int bucketId = cursor.getInt(bucketIdColumn);
albumEntry = new AlbumEntry(bucketId, bucketName, mediaEntry); String bucketName = cursor.getString(bucketNameColumn);
mediaAlbums.put(bucketId, albumEntry); long dateTaken = cursor.getLong(dateColumn);
if (mediaCameraAlbumId == null && cameraFolder != null && path.startsWith(cameraFolder)) { long duration = cursor.getLong(durationColumn);
mediaAlbumsSorted.add(0, albumEntry); int width = cursor.getInt(widthColumn);
mediaCameraAlbumId = bucketId; int height = cursor.getInt(heightColumn);
} else { long size = cursor.getLong(sizeColumn);
mediaAlbumsSorted.add(albumEntry);
}
}
albumEntry.addPhoto(mediaEntry); 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 (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);
}
}
albumEntry.addPhoto(mediaEntry);
}
} }
} }
// }
} catch (Throwable e) { } catch (Throwable e) {
Log.e(TAG, "loadGalleryAlbums: ", e); Log.e(TAG, "loadGalleryAlbums: ", e);
} finally { } finally {

View File

@ -11,31 +11,30 @@ import androidx.core.content.PermissionChecker;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import static android.Manifest.permission.CAMERA; import static android.Manifest.permission.CAMERA;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.RECORD_AUDIO; import static android.Manifest.permission.RECORD_AUDIO;
import static androidx.core.content.PermissionChecker.checkSelfPermission; import static androidx.core.content.PermissionChecker.checkSelfPermission;
public class PermissionUtils { public class PermissionUtils {
public static final String[] AUDIO_RECORD_PERMS = new String[]{RECORD_AUDIO}; 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 final String[] CAMERA_PERMS = new String[]{CAMERA};
public static boolean hasAudioRecordPerms(@NonNull final Context context) { public static boolean hasAudioRecordPerms(@NonNull final Context context) {
return // checkSelfPermission(context, WRITE_EXTERNAL_STORAGE) == PermissionChecker.PERMISSION_GRANTED return checkSelfPermission(context, RECORD_AUDIO) == PermissionChecker.PERMISSION_GRANTED;
// &&
checkSelfPermission(context, RECORD_AUDIO) == PermissionChecker.PERMISSION_GRANTED;
} }
public static void requestAudioRecordPerms(final Fragment fragment, final int requestCode) { public static void requestAudioRecordPerms(final Fragment fragment, final int requestCode) {
fragment.requestPermissions(AUDIO_RECORD_PERMS, requestCode); fragment.requestPermissions(AUDIO_RECORD_PERMS, requestCode);
} }
// public static boolean hasAttachMediaPerms(@NonNull final Context context) { public static boolean hasAttachMediaPerms(@NonNull final Context context) {
// return checkSelfPermission(context, READ_EXTERNAL_STORAGE) == PermissionChecker.PERMISSION_GRANTED; return checkSelfPermission(context, READ_EXTERNAL_STORAGE) == PermissionChecker.PERMISSION_GRANTED;
// } }
// public static void requestAttachMediaPerms(final Fragment fragment, final int requestCode) { public static void requestAttachMediaPerms(final Fragment fragment, final int requestCode) {
// fragment.requestPermissions(ATTACH_MEDIA_PERMS, requestCode); fragment.requestPermissions(ATTACH_MEDIA_PERMS, requestCode);
// } }
public static boolean hasCameraPerms(final Context context) { public static boolean hasCameraPerms(final Context context) {
return ContextCompat.checkSelfPermission(context, CAMERA) == PackageManager.PERMISSION_GRANTED; return ContextCompat.checkSelfPermission(context, CAMERA) == PackageManager.PERMISSION_GRANTED;