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:
parent
bca38a2645
commit
6005e91d8a
@ -5,7 +5,7 @@
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<!--<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.CAMERA" />
|
||||
<!--<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />-->
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
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);
|
||||
|
||||
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);
|
||||
while (cursor.moveToNext()) {
|
||||
String path = cursor.getString(dataColumn);
|
||||
if (TextUtils.isEmpty(path)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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++;
|
||||
while (cursor.moveToNext()) {
|
||||
String path = cursor.getString(dataColumn);
|
||||
if (TextUtils.isEmpty(path)) {
|
||||
continue;
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
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);
|
||||
|
||||
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) {
|
||||
Log.e(TAG, "loadGalleryAlbums: ", e);
|
||||
} finally {
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user