external-storage-support
Floens 7 years ago
parent 0c58c619ad
commit 97a15fdb85
  1. 66
      Clover/app/src/main/java/org/floens/chan/core/storage/Storage.java
  2. 15
      Clover/app/src/main/java/org/floens/chan/ui/controller/SaveLocationController.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;
}
}
}

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

Loading…
Cancel
Save