Browse Source

make auto upload safe with no storage permission

tobiasKaminsky 7 years ago
parent
commit
a6474c32aa

+ 1 - 1
src/main/java/com/owncloud/android/MainApp.java

@@ -410,7 +410,7 @@ public class MainApp extends MultiDexApplication {
             SyncedFolderProvider syncedFolderProvider = new SyncedFolderProvider(contentResolver);
 
             final List<MediaFolder> imageMediaFolders = MediaProvider.getImageFolders(contentResolver, 1, null);
-            final List<MediaFolder> videoMediaFolders = MediaProvider.getVideoFolders(contentResolver, 1);
+            final List<MediaFolder> videoMediaFolders = MediaProvider.getVideoFolders(contentResolver, 1, null);
 
             ArrayList<Long> idsToDelete = new ArrayList<>();
             List<SyncedFolder> syncedFolders = syncedFolderProvider.getSyncedFolders();

+ 24 - 27
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<MediaFolder> mediaFolders = new ArrayList<>();
         String dataPath = MainApp.getStoragePath() + File.separator + MainApp.getDataFolder();
 
@@ -189,16 +176,26 @@ public class MediaProvider {
         }
     }
 
-    public static List<MediaFolder> getVideoFolders(ContentResolver contentResolver, int itemLimit) {
-        Cursor cursorFolders = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
-                VIDEOS_FOLDER_PROJECTION, null, null, null);
+    public static List<MediaFolder> 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<MediaFolder> 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)) {

+ 9 - 9
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<MediaFolder> mediaFolders = MediaProvider.getImageFolders(getContentResolver(),
                 perFolderMediaItemLimit, SyncedFoldersActivity.this);
-        mediaFolders.addAll(MediaProvider.getVideoFolders(getContentResolver(), perFolderMediaItemLimit));
+        mediaFolders.addAll(MediaProvider.getVideoFolders(getContentResolver(), perFolderMediaItemLimit,
+                SyncedFoldersActivity.this));
 
         List<SyncedFolder> syncedFolderArrayList = mSyncedFolderProvider.getSyncedFolders();
         List<SyncedFolder> 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);
             }
         }