From b4880af7e2a438809fb39e34e81da63c2a729ebd Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 10 May 2021 14:04:25 +0100 Subject: [PATCH] Add Android implementation of RemovableDrivePlugin. --- .../file/AndroidRemovableDrivePlugin.java | 42 +++++++++++++++++ .../AndroidRemovableDrivePluginFactory.java | 47 +++++++++++++++++++ .../api/plugin/RemovableDriveConstants.java | 1 + .../file/RemovableDrivePluginFactory.java | 2 +- .../briarproject/briar/android/AppModule.java | 7 +-- 5 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePlugin.java create mode 100644 bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePluginFactory.java diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePlugin.java new file mode 100644 index 000000000..bee061db1 --- /dev/null +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePlugin.java @@ -0,0 +1,42 @@ +package org.briarproject.bramble.plugin.file; + +import android.app.Application; +import android.net.Uri; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.properties.TransportProperties; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import javax.annotation.concurrent.Immutable; + +import static org.briarproject.bramble.api.plugin.RemovableDriveConstants.PROP_URI; +import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty; + +@Immutable +@NotNullByDefault +class AndroidRemovableDrivePlugin extends RemovableDrivePlugin { + + private final Application app; + + AndroidRemovableDrivePlugin(Application app, int maxLatency) { + super(maxLatency); + this.app = app; + } + + @Override + InputStream openInputStream(TransportProperties p) throws IOException { + String uri = p.get(PROP_URI); + if (isNullOrEmpty(uri)) throw new IllegalArgumentException(); + return app.getContentResolver().openInputStream(Uri.parse(uri)); + } + + @Override + OutputStream openOutputStream(TransportProperties p) throws IOException { + String uri = p.get(PROP_URI); + if (isNullOrEmpty(uri)) throw new IllegalArgumentException(); + return app.getContentResolver().openOutputStream(Uri.parse(uri)); + } +} diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePluginFactory.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePluginFactory.java new file mode 100644 index 000000000..68d32d924 --- /dev/null +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePluginFactory.java @@ -0,0 +1,47 @@ +package org.briarproject.bramble.plugin.file; + +import android.app.Application; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.PluginCallback; +import org.briarproject.bramble.api.plugin.TransportId; +import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin; +import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; + +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; + +import static java.util.concurrent.TimeUnit.DAYS; +import static org.briarproject.bramble.api.plugin.RemovableDriveConstants.ID; + +@Immutable +@NotNullByDefault +public class AndroidRemovableDrivePluginFactory implements + SimplexPluginFactory { + + private static final int MAX_LATENCY = (int) DAYS.toMillis(14); + + private final Application app; + + @Inject + AndroidRemovableDrivePluginFactory(Application app) { + this.app = app; + } + + @Override + public TransportId getId() { + return ID; + } + + @Override + public int getMaxLatency() { + return MAX_LATENCY; + } + + @Nullable + @Override + public SimplexPlugin createPlugin(PluginCallback callback) { + return new AndroidRemovableDrivePlugin(app, MAX_LATENCY); + } +} diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/RemovableDriveConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/RemovableDriveConstants.java index 00303714f..98caf96c3 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/RemovableDriveConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/RemovableDriveConstants.java @@ -5,4 +5,5 @@ public interface RemovableDriveConstants { TransportId ID = new TransportId("org.briarproject.bramble.drive"); String PROP_PATH = "path"; + String PROP_URI = "uri"; } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java index 5d833805d..e43a89d93 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java @@ -17,7 +17,7 @@ import static org.briarproject.bramble.api.plugin.RemovableDriveConstants.ID; @NotNullByDefault public class RemovableDrivePluginFactory implements SimplexPluginFactory { - private final int MAX_LATENCY = (int) DAYS.toMillis(14); + private static final int MAX_LATENCY = (int) DAYS.toMillis(14); @Inject RemovableDrivePluginFactory() { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java index 634c984b8..3b942cdb0 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java @@ -24,6 +24,7 @@ import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; import org.briarproject.bramble.api.reporting.DevConfig; import org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPluginFactory; +import org.briarproject.bramble.plugin.file.AndroidRemovableDrivePluginFactory; import org.briarproject.bramble.plugin.tcp.AndroidLanTcpPluginFactory; import org.briarproject.bramble.plugin.tor.AndroidTorPluginFactory; import org.briarproject.bramble.util.AndroidUtils; @@ -67,7 +68,6 @@ import dagger.Provides; import static android.content.Context.MODE_PRIVATE; import static android.os.Build.VERSION.SDK_INT; import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.Collections.singletonMap; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_ONION_ADDRESS; @@ -151,7 +151,8 @@ public class AppModule { @Provides @Singleton PluginConfig providePluginConfig(AndroidBluetoothPluginFactory bluetooth, - AndroidTorPluginFactory tor, AndroidLanTcpPluginFactory lan) { + AndroidTorPluginFactory tor, AndroidLanTcpPluginFactory lan, + AndroidRemovableDrivePluginFactory drive) { @NotNullByDefault PluginConfig pluginConfig = new PluginConfig() { @@ -162,7 +163,7 @@ public class AppModule { @Override public Collection getSimplexFactories() { - return emptyList(); + return singletonList(drive); } @Override