+ * TODO use {@link StorageManager#registerStorageVolumeCallback(Executor, StorageManager.StorageVolumeCallback)}
*/
public class NearbyViewBinder {
public static final String TAG = "NearbyViewBinder";
@@ -165,11 +166,26 @@ public class NearbyViewBinder {
for (final StorageVolume storageVolume : storageManager.getStorageVolumes()) {
if (storageVolume.isRemovable() && !storageVolume.isPrimary()) {
Log.i(TAG, "StorageVolume: " + storageVolume);
- final Intent intent = storageVolume.createAccessIntent(null);
- if (intent == null) {
+ Intent tmpIntent = null;
+ if (Build.VERSION.SDK_INT < 29) {
+ tmpIntent = storageVolume.createAccessIntent(null);
+ } else {
+ tmpIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
+ tmpIntent.putExtra(DocumentsContract.EXTRA_INITIAL_URI,
+ Uri.parse("content://"
+ + TreeUriScannerIntentService.EXTERNAL_STORAGE_PROVIDER_AUTHORITY
+ + "/tree/"
+ + storageVolume.getUuid()
+ + "%3A/document/"
+ + storageVolume.getUuid()
+ + "%3A"));
+ }
+ if (tmpIntent == null) {
Utils.debugLog(TAG, "Got null Storage Volume access Intent");
return;
}
+ final Intent intent = tmpIntent;
+
storageVolumeText.setVisibility(View.VISIBLE);
String text = storageVolume.getDescription(context);
@@ -196,8 +212,23 @@ public class NearbyViewBinder {
return;
}
}
- ((Activity) context).startActivityForResult(intent,
- MainActivity.REQUEST_STORAGE_ACCESS);
+
+ Activity activity = null;
+ if (context instanceof Activity) {
+ activity = (Activity) context;
+ } else if (swapView != null && swapView.getContext() instanceof Activity) {
+ activity = (Activity) swapView.getContext();
+ }
+
+ if (activity != null) {
+ activity.startActivityForResult(intent, MainActivity.REQUEST_STORAGE_ACCESS);
+ } else {
+ // scan in the background without requesting permissions
+ Toast.makeText(context.getApplicationContext(),
+ context.getString(R.string.scan_removable_storage_toast, externalStorage),
+ Toast.LENGTH_SHORT).show();
+ SDCardScannerService.scan(context);
+ }
}
});
}
diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
index 442ef01fa..459ff948e 100644
--- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
+++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
@@ -539,7 +539,9 @@ public class FDroidApp extends Application {
atStartTime.edit().remove(queryStringKey).apply();
}
- SDCardScannerService.scan(this);
+ if (Preferences.get().isScanRemovableStorageEnabled()) {
+ SDCardScannerService.scan(this);
+ }
}
/**
diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainViewAdapter.java
index eb7319f0a..5fdf45e74 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/main/MainViewAdapter.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainViewAdapter.java
@@ -21,14 +21,14 @@
package org.fdroid.fdroid.views.main;
-import androidx.annotation.NonNull;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.recyclerview.widget.RecyclerView;
import android.util.SparseIntArray;
import android.view.Menu;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.PopupMenu;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.RecyclerView;
import org.fdroid.fdroid.R;
/**
@@ -76,6 +76,8 @@ class MainViewAdapter extends RecyclerView.Adapter