Ver código fonte

Merge pull request #1915 from nextcloud/autoUploadWithoutPermission

Auto upload without permission
Tobias Kaminsky 7 anos atrás
pai
commit
b4d6545971

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

@@ -1,19 +1,19 @@
-/**
+/*
  * ownCloud Android client application
  *
  * @author masensio
  * @author David A. Velasco
  * Copyright (C) 2015 ownCloud Inc.
- * <p>
+ * 
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
  * as published by the Free Software Foundation.
- * <p>
+ * 
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * <p>
+ * 
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -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();

+ 25 - 34
src/main/java/com/owncloud/android/datamodel/MediaProvider.java

@@ -29,7 +29,6 @@ import android.net.Uri;
 import android.provider.MediaStore;
 import android.support.design.widget.Snackbar;
 import android.util.Log;
-import android.view.View;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
@@ -71,27 +70,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();
 
@@ -172,12 +158,7 @@ public class MediaProvider {
                 // Show explanation to the user and then request permission
                 Snackbar snackbar = Snackbar.make(activity.findViewById(R.id.ListLayout),
                         R.string.permission_storage_access, Snackbar.LENGTH_INDEFINITE)
-                        .setAction(R.string.common_ok, new View.OnClickListener() {
-                            @Override
-                            public void onClick(View v) {
-                                PermissionUtil.requestWriteExternalStoreagePermission(activity);
-                            }
-                        });
+                        .setAction(R.string.common_ok, v -> PermissionUtil.requestWriteExternalStoreagePermission(activity));
 
                 ThemeUtils.colorSnackbar(activity.getApplicationContext(), snackbar);
 
@@ -189,16 +170,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 +202,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 +211,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 +222,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);
             }
         }