diff --git a/Clover/app/src/main/java/org/floens/chan/core/storage/Storage.java b/Clover/app/src/main/java/org/floens/chan/core/storage/Storage.java new file mode 100644 index 00000000..846f7569 --- /dev/null +++ b/Clover/app/src/main/java/org/floens/chan/core/storage/Storage.java @@ -0,0 +1,66 @@ +package org.floens.chan.core.storage; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.storage.StorageManager; +import android.os.storage.StorageVolume; + +import java.util.Objects; + +public class Storage { + private static final Storage instance; + + static { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + instance = new Storage(new BaseStorageImpl()); + } else { + instance = new Storage(new NougatStorageImpl()); + } + + } + + public static Storage getInstance() { + return instance; + } + + private StorageImpl impl; + + public Storage(StorageImpl impl) { + this.impl = impl; + } + + public Intent requestExternalPermission(Context applicationContext) { + return impl.requestExternalPermission(applicationContext); + } + + public interface StorageImpl { + Intent requestExternalPermission(Context applicationContext); + } + + public static class BaseStorageImpl implements StorageImpl { + @Override + public Intent requestExternalPermission(Context applicationContext) { + throw new UnsupportedOperationException(); + } + } + + @TargetApi(Build.VERSION_CODES.N) + public static class NougatStorageImpl extends BaseStorageImpl { + @Override + public Intent requestExternalPermission(Context applicationContext) { + StorageManager sm = (StorageManager) + applicationContext.getSystemService(Context.STORAGE_SERVICE); + Objects.requireNonNull(sm); + for (StorageVolume storageVolume : sm.getStorageVolumes()) { + if (!storageVolume.isPrimary()) { + Intent accessIntent = storageVolume.createAccessIntent(null); + return accessIntent; + } + } + + return null; + } + } +} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/SaveLocationController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/SaveLocationController.java index 70e48c4e..bd1acd51 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/SaveLocationController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/SaveLocationController.java @@ -18,7 +18,9 @@ package org.floens.chan.ui.controller; import android.Manifest; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.support.design.widget.FloatingActionButton; import android.view.View; @@ -26,6 +28,7 @@ import org.floens.chan.R; import org.floens.chan.controller.Controller; import org.floens.chan.core.saver.FileWatcher; import org.floens.chan.core.settings.ChanSettings; +import org.floens.chan.core.storage.Storage; import org.floens.chan.ui.activity.StartActivity; import org.floens.chan.ui.adapter.FilesAdapter; import org.floens.chan.ui.helper.RuntimePermissionsHelper; @@ -74,6 +77,18 @@ public class SaveLocationController extends Controller implements FileWatcher.Fi } else { requestPermission(); } + + test(); + } + + private void test() { + Storage storage = Storage.getInstance(); + Intent intent = storage.requestExternalPermission(context.getApplicationContext()); + if (intent != null) { + if (intent.resolveActivity(context.getPackageManager()) != null) { + ((Activity) context).startActivityForResult(intent, 10024); + } + } } @Override