make auto upload safe with no storage permission

This commit is contained in:
tobiasKaminsky 2018-01-03 10:06:17 +01:00
parent ec246eac59
commit a6474c32aa
No known key found for this signature in database
GPG key ID: 0E00D4D47D0C5AF7
3 changed files with 34 additions and 37 deletions

View file

@ -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();

View file

@ -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)) {

View file

@ -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);
}
}