diff --git a/src/main/java/com/owncloud/android/MainApp.java b/src/main/java/com/owncloud/android/MainApp.java index d4e4808449..bbc4bb11f0 100644 --- a/src/main/java/com/owncloud/android/MainApp.java +++ b/src/main/java/com/owncloud/android/MainApp.java @@ -410,7 +410,7 @@ public class MainApp extends MultiDexApplication { SyncedFolderProvider syncedFolderProvider = new SyncedFolderProvider(contentResolver); final List imageMediaFolders = MediaProvider.getImageFolders(contentResolver, 1, null); - final List videoMediaFolders = MediaProvider.getVideoFolders(contentResolver, 1); + final List videoMediaFolders = MediaProvider.getVideoFolders(contentResolver, 1, null); ArrayList idsToDelete = new ArrayList<>(); List syncedFolders = syncedFolderProvider.getSyncedFolders(); diff --git a/src/main/java/com/owncloud/android/datamodel/MediaProvider.java b/src/main/java/com/owncloud/android/datamodel/MediaProvider.java index 1bae5a6e7f..92f807adae 100644 --- a/src/main/java/com/owncloud/android/datamodel/MediaProvider.java +++ b/src/main/java/com/owncloud/android/datamodel/MediaProvider.java @@ -71,27 +71,14 @@ public class MediaProvider { // check permissions checkPermissions(activity); - // query media/image folders - Cursor cursorFolders; + Cursor cursorFolders = null; if (activity != null && PermissionUtil.checkSelfPermission(activity.getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - cursorFolders = contentResolver.query( - IMAGES_MEDIA_URI, - IMAGES_FOLDER_PROJECTION, - null, - null, - IMAGES_FOLDER_SORT_ORDER - ); - } else { - cursorFolders = contentResolver.query( - IMAGES_MEDIA_URI, - IMAGES_FOLDER_PROJECTION, - null, - null, - IMAGES_FOLDER_SORT_ORDER - ); + cursorFolders = contentResolver.query(IMAGES_MEDIA_URI, IMAGES_FOLDER_PROJECTION, null, null, + IMAGES_FOLDER_SORT_ORDER); } + List mediaFolders = new ArrayList<>(); String dataPath = MainApp.getStoragePath() + File.separator + MainApp.getDataFolder(); @@ -189,16 +176,26 @@ public class MediaProvider { } } - public static List getVideoFolders(ContentResolver contentResolver, int itemLimit) { - Cursor cursorFolders = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, - VIDEOS_FOLDER_PROJECTION, null, null, null); + public static List getVideoFolders(ContentResolver contentResolver, int itemLimit, + @Nullable final Activity activity) { + // check permissions + checkPermissions(activity); + + // query media/image folders + Cursor cursorFolders = null; + if (activity != null && PermissionUtil.checkSelfPermission(activity.getApplicationContext(), + Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + cursorFolders = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, VIDEOS_FOLDER_PROJECTION, + null, null, null); + } + List mediaFolders = new ArrayList<>(); String dataPath = MainApp.getStoragePath() + File.separator + MainApp.getDataFolder(); if (cursorFolders != null) { String folderName; String fileSortOrder = MediaStore.Video.Media.DATE_TAKEN + " DESC LIMIT " + itemLimit; - Cursor cursorImages; + Cursor cursorVideos; while (cursorFolders.moveToNext()) { String folderId = cursorFolders.getString(cursorFolders.getColumnIndex(MediaStore.Video.Media @@ -211,8 +208,8 @@ public class MediaProvider { mediaFolder.folderName = folderName; mediaFolder.filePaths = new ArrayList<>(); - // query images - cursorImages = contentResolver.query( + // query videos + cursorVideos = contentResolver.query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, FILE_PROJECTION, MediaStore.Video.Media.BUCKET_ID + "=" + folderId, @@ -220,10 +217,10 @@ public class MediaProvider { fileSortOrder); Log.d(TAG, "Reading videos for " + mediaFolder.folderName); - if (cursorImages != null) { + if (cursorVideos != null) { String filePath; - while (cursorImages.moveToNext()) { - filePath = cursorImages.getString(cursorImages.getColumnIndexOrThrow( + while (cursorVideos.moveToNext()) { + filePath = cursorVideos.getString(cursorVideos.getColumnIndexOrThrow( MediaStore.MediaColumns.DATA)); if (filePath != null) { @@ -231,7 +228,7 @@ public class MediaProvider { mediaFolder.absolutePath = filePath.substring(0, filePath.lastIndexOf("/")); } } - cursorImages.close(); + cursorVideos.close(); // only do further work if folder is not within the Nextcloud app itself if (mediaFolder.absolutePath != null && !mediaFolder.absolutePath.startsWith(dataPath)) { diff --git a/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java b/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java index 010bc3ff58..77616c1c37 100644 --- a/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java @@ -114,11 +114,10 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA // setup toolbar setupToolbar(); - CollapsingToolbarLayout mCollapsingToolbarLayout = ((CollapsingToolbarLayout) - findViewById(R.id.collapsing_toolbar)); + CollapsingToolbarLayout mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar); mCollapsingToolbarLayout.setTitle(this.getString(R.string.drawer_synced_folders)); - mCustomFolderRelativeLayout = (RelativeLayout) findViewById(R.id.custom_folder_toolbar); + mCustomFolderRelativeLayout = findViewById(R.id.custom_folder_toolbar); SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); @@ -170,10 +169,10 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA * sets up the UI elements and loads all media/synced folders. */ private void setupContent() { - mRecyclerView = (RecyclerView) findViewById(android.R.id.list); + mRecyclerView = findViewById(android.R.id.list); - mProgress = (LinearLayout) findViewById(android.R.id.progress); - mEmpty = (TextView) findViewById(android.R.id.empty); + mProgress = findViewById(android.R.id.progress); + mEmpty = findViewById(android.R.id.empty); final int gridWidth = getResources().getInteger(R.integer.media_grid_width); boolean lightVersion = getResources().getBoolean(R.bool.syncedFolder_light); @@ -187,7 +186,7 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA mRecyclerView.setLayoutManager(lm); mRecyclerView.setAdapter(mAdapter); - BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_view); + BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation_view); if (getResources().getBoolean(R.bool.bottom_toolbar_enabled)) { bottomNavigationView.setVisibility(View.VISIBLE); @@ -209,13 +208,14 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA setListShown(false); final List mediaFolders = MediaProvider.getImageFolders(getContentResolver(), perFolderMediaItemLimit, SyncedFoldersActivity.this); - mediaFolders.addAll(MediaProvider.getVideoFolders(getContentResolver(), perFolderMediaItemLimit)); + mediaFolders.addAll(MediaProvider.getVideoFolders(getContentResolver(), perFolderMediaItemLimit, + SyncedFoldersActivity.this)); List syncedFolderArrayList = mSyncedFolderProvider.getSyncedFolders(); List currentAccountSyncedFoldersList = new ArrayList<>(); Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(SyncedFoldersActivity.this); for (SyncedFolder syncedFolder : syncedFolderArrayList) { - if (syncedFolder.getAccount().equals(currentAccount.name)) { + if (currentAccount != null && syncedFolder.getAccount().equals(currentAccount.name)) { currentAccountSyncedFoldersList.add(syncedFolder); } }