support opening USB-OTG on android-29+
Here's another gem: they added this nice new API in android-24 and told everyone this was THE WAY. Then they made it a no-op in android-29 https://developer.android.com/reference/android/os/storage/StorageVolume#createAccessIntent(java.lang.String)
This commit is contained in:
parent
6887e09d88
commit
d00108ba68
@ -74,6 +74,11 @@ public class TreeUriScannerIntentService extends IntentService {
|
|||||||
public static final String TAG = "TreeUriScannerIntentSer";
|
public static final String TAG = "TreeUriScannerIntentSer";
|
||||||
|
|
||||||
private static final String ACTION_SCAN_TREE_URI = "org.fdroid.fdroid.nearby.action.SCAN_TREE_URI";
|
private static final String ACTION_SCAN_TREE_URI = "org.fdroid.fdroid.nearby.action.SCAN_TREE_URI";
|
||||||
|
/**
|
||||||
|
* @see <a href="https://android.googlesource.com/platform/frameworks/base/+/android-10.0.0_r38/core/java/android/provider/DocumentsContract.java#238">DocumentsContract.EXTERNAL_STORAGE_PROVIDER_AUTHORITY</a>
|
||||||
|
* @see <a href="https://android.googlesource.com/platform/frameworks/base/+/android-10.0.0_r38/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java#70">ExternalStorageProvider.AUTHORITY</a>
|
||||||
|
*/
|
||||||
|
public static final String EXTERNAL_STORAGE_PROVIDER_AUTHORITY = "com.android.externalstorage.documents";
|
||||||
|
|
||||||
public TreeUriScannerIntentService() {
|
public TreeUriScannerIntentService() {
|
||||||
super("TreeUriScannerIntentService");
|
super("TreeUriScannerIntentService");
|
||||||
|
@ -19,25 +19,19 @@
|
|||||||
|
|
||||||
package org.fdroid.fdroid.nearby;
|
package org.fdroid.fdroid.nearby;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.content.UriPermission;
|
import android.content.UriPermission;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
import android.hardware.usb.UsbManager;
|
import android.hardware.usb.UsbManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import org.fdroid.fdroid.views.main.MainActivity;
|
import androidx.annotation.RequiresApi;
|
||||||
import org.fdroid.fdroid.views.main.NearbyViewBinder;
|
import org.fdroid.fdroid.views.main.NearbyViewBinder;
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ import android.os.Build;
|
|||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.storage.StorageManager;
|
import android.os.storage.StorageManager;
|
||||||
import android.os.storage.StorageVolume;
|
import android.os.storage.StorageVolume;
|
||||||
|
import android.provider.DocumentsContract;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -21,11 +22,9 @@ import android.widget.FrameLayout;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
import org.fdroid.fdroid.nearby.SDCardScannerService;
|
import org.fdroid.fdroid.nearby.SDCardScannerService;
|
||||||
@ -61,6 +60,8 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* @see TreeUriScannerIntentService
|
* @see TreeUriScannerIntentService
|
||||||
* @see org.fdroid.fdroid.nearby.SDCardScannerService
|
* @see org.fdroid.fdroid.nearby.SDCardScannerService
|
||||||
|
* <p>
|
||||||
|
* TODO use {@link StorageManager#registerStorageVolumeCallback(Executor, StorageManager.StorageVolumeCallback)}
|
||||||
*/
|
*/
|
||||||
public class NearbyViewBinder {
|
public class NearbyViewBinder {
|
||||||
public static final String TAG = "NearbyViewBinder";
|
public static final String TAG = "NearbyViewBinder";
|
||||||
@ -165,11 +166,26 @@ public class NearbyViewBinder {
|
|||||||
for (final StorageVolume storageVolume : storageManager.getStorageVolumes()) {
|
for (final StorageVolume storageVolume : storageManager.getStorageVolumes()) {
|
||||||
if (storageVolume.isRemovable() && !storageVolume.isPrimary()) {
|
if (storageVolume.isRemovable() && !storageVolume.isPrimary()) {
|
||||||
Log.i(TAG, "StorageVolume: " + storageVolume);
|
Log.i(TAG, "StorageVolume: " + storageVolume);
|
||||||
final Intent intent = storageVolume.createAccessIntent(null);
|
Intent tmpIntent = null;
|
||||||
if (intent == 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");
|
Utils.debugLog(TAG, "Got null Storage Volume access Intent");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
final Intent intent = tmpIntent;
|
||||||
|
|
||||||
storageVolumeText.setVisibility(View.VISIBLE);
|
storageVolumeText.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
String text = storageVolume.getDescription(context);
|
String text = storageVolume.getDescription(context);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user