getMessageIds() {
+ return acked;
+ }
+}
diff --git a/briar-api/src/org/briarproject/api/event/MessagesSentEvent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/MessagesSentEvent.java
similarity index 51%
rename from briar-api/src/org/briarproject/api/event/MessagesSentEvent.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/MessagesSentEvent.java
index 8066c196f..1f392417d 100644
--- a/briar-api/src/org/briarproject/api/event/MessagesSentEvent.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/MessagesSentEvent.java
@@ -1,11 +1,19 @@
-package org.briarproject.api.event;
+package org.briarproject.bramble.api.sync.event;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.MessageId;
import java.util.Collection;
-/** An event that is broadcast when messages are sent to a contact. */
+import javax.annotation.concurrent.Immutable;
+
+/**
+ * An event that is broadcast when messages are sent to a contact.
+ */
+@Immutable
+@NotNullByDefault
public class MessagesSentEvent extends Event {
private final ContactId contactId;
diff --git a/briar-api/src/org/briarproject/api/system/Clock.java b/bramble-api/src/main/java/org/briarproject/bramble/api/system/Clock.java
similarity index 60%
rename from briar-api/src/org/briarproject/api/system/Clock.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/system/Clock.java
index 1fcb250d6..a2ee76445 100644
--- a/briar-api/src/org/briarproject/api/system/Clock.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/system/Clock.java
@@ -1,4 +1,4 @@
-package org.briarproject.api.system;
+package org.briarproject.bramble.api.system;
/**
* An interface for time-related system functions that allows them to be
@@ -6,9 +6,13 @@ package org.briarproject.api.system;
*/
public interface Clock {
- /** @see {@link java.lang.System#currentTimeMillis()} */
+ /**
+ * @see {@link System#currentTimeMillis()}
+ */
long currentTimeMillis();
- /** @see {@link java.lang.Thread.sleep(long)} */
+ /**
+ * @see {@link Thread#sleep(long)}
+ */
void sleep(long milliseconds) throws InterruptedException;
}
diff --git a/briar-api/src/org/briarproject/api/system/LocationUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/api/system/LocationUtils.java
similarity index 67%
rename from briar-api/src/org/briarproject/api/system/LocationUtils.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/system/LocationUtils.java
index 33057e839..61a83d95c 100644
--- a/briar-api/src/org/briarproject/api/system/LocationUtils.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/system/LocationUtils.java
@@ -1,10 +1,13 @@
-package org.briarproject.api.system;
+package org.briarproject.bramble.api.system;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+@NotNullByDefault
public interface LocationUtils {
-
+
/**
* Get the country the device is currently located in, or "" if it cannot
- * be determined. Should never return {@code null}.
+ * be determined.
*
* The country codes are formatted upper-case and as per ISO 3166-1 alpha 2.
diff --git a/briar-api/src/org/briarproject/api/system/Scheduler.java b/bramble-api/src/main/java/org/briarproject/bramble/api/system/Scheduler.java
similarity index 94%
rename from briar-api/src/org/briarproject/api/system/Scheduler.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/system/Scheduler.java
index 0b1e225da..67466cdb0 100644
--- a/briar-api/src/org/briarproject/api/system/Scheduler.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/system/Scheduler.java
@@ -1,4 +1,4 @@
-package org.briarproject.api.system;
+package org.briarproject.bramble.api.system;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
diff --git a/briar-api/src/org/briarproject/api/system/SeedProvider.java b/bramble-api/src/main/java/org/briarproject/bramble/api/system/SeedProvider.java
similarity index 50%
rename from briar-api/src/org/briarproject/api/system/SeedProvider.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/system/SeedProvider.java
index 886fa2df3..2d5c147f1 100644
--- a/briar-api/src/org/briarproject/api/system/SeedProvider.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/system/SeedProvider.java
@@ -1,11 +1,17 @@
-package org.briarproject.api.system;
+package org.briarproject.bramble.api.system;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
/**
* Uses a platform-specific source to provide a seed for a pseudo-random
* number generator.
*/
+@NotNullByDefault
public interface SeedProvider {
+ /**
+ * The length of the seed in bytes.
+ */
int SEED_BYTES = 32;
byte[] getSeed();
diff --git a/briar-api/src/org/briarproject/api/transport/IncomingKeys.java b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/IncomingKeys.java
similarity index 84%
rename from briar-api/src/org/briarproject/api/transport/IncomingKeys.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/transport/IncomingKeys.java
index 6ee30759e..ef444561f 100644
--- a/briar-api/src/org/briarproject/api/transport/IncomingKeys.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/IncomingKeys.java
@@ -1,8 +1,8 @@
-package org.briarproject.api.transport;
+package org.briarproject.bramble.api.transport;
-import org.briarproject.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.SecretKey;
-import static org.briarproject.api.transport.TransportConstants.REORDERING_WINDOW_SIZE;
+import static org.briarproject.bramble.api.transport.TransportConstants.REORDERING_WINDOW_SIZE;
/**
* Contains transport keys for receiving streams from a given contact over a
diff --git a/briar-api/src/org/briarproject/api/transport/KeyManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/KeyManager.java
similarity index 73%
rename from briar-api/src/org/briarproject/api/transport/KeyManager.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/transport/KeyManager.java
index 8ee0578a8..97afdc133 100644
--- a/briar-api/src/org/briarproject/api/transport/KeyManager.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/KeyManager.java
@@ -1,10 +1,12 @@
-package org.briarproject.api.transport;
+package org.briarproject.bramble.api.transport;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.plugin.TransportId;
+
+import javax.annotation.Nullable;
/**
* Responsible for managing transport keys and recognising the pseudo-random
@@ -26,6 +28,7 @@ public interface KeyManager {
* contact over the given transport, or null if an error occurs or the
* contact does not support the transport.
*/
+ @Nullable
StreamContext getStreamContext(ContactId c, TransportId t)
throws DbException;
@@ -34,6 +37,7 @@ public interface KeyManager {
* from the corresponding stream, or null if an error occurs or the tag was
* unexpected.
*/
+ @Nullable
StreamContext getStreamContext(TransportId t, byte[] tag)
throws DbException;
}
diff --git a/briar-api/src/org/briarproject/api/transport/OutgoingKeys.java b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/OutgoingKeys.java
similarity index 89%
rename from briar-api/src/org/briarproject/api/transport/OutgoingKeys.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/transport/OutgoingKeys.java
index 08a06d2d9..202c46e6a 100644
--- a/briar-api/src/org/briarproject/api/transport/OutgoingKeys.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/OutgoingKeys.java
@@ -1,6 +1,6 @@
-package org.briarproject.api.transport;
+package org.briarproject.bramble.api.transport;
-import org.briarproject.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.SecretKey;
/**
* Contains transport keys for sending streams to a given contact over a given
diff --git a/briar-api/src/org/briarproject/api/transport/StreamContext.java b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/StreamContext.java
similarity index 78%
rename from briar-api/src/org/briarproject/api/transport/StreamContext.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/transport/StreamContext.java
index d9dbe9cd1..b5205999b 100644
--- a/briar-api/src/org/briarproject/api/transport/StreamContext.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/StreamContext.java
@@ -1,8 +1,8 @@
-package org.briarproject.api.transport;
+package org.briarproject.bramble.api.transport;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.SecretKey;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.plugin.TransportId;
public class StreamContext {
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/transport/StreamReaderFactory.java b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/StreamReaderFactory.java
new file mode 100644
index 000000000..44e31a671
--- /dev/null
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/StreamReaderFactory.java
@@ -0,0 +1,23 @@
+package org.briarproject.bramble.api.transport;
+
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import java.io.InputStream;
+
+@NotNullByDefault
+public interface StreamReaderFactory {
+
+ /**
+ * Creates an {@link InputStream InputStream} for reading from a
+ * transport stream.
+ */
+ InputStream createStreamReader(InputStream in, StreamContext ctx);
+
+ /**
+ * Creates an {@link InputStream InputStream} for reading from an
+ * invitation stream.
+ */
+ InputStream createInvitationStreamReader(InputStream in,
+ SecretKey headerKey);
+}
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/transport/StreamWriterFactory.java b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/StreamWriterFactory.java
new file mode 100644
index 000000000..134bde50e
--- /dev/null
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/StreamWriterFactory.java
@@ -0,0 +1,23 @@
+package org.briarproject.bramble.api.transport;
+
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import java.io.OutputStream;
+
+@NotNullByDefault
+public interface StreamWriterFactory {
+
+ /**
+ * Creates an {@link OutputStream OutputStream} for writing to a
+ * transport stream
+ */
+ OutputStream createStreamWriter(OutputStream out, StreamContext ctx);
+
+ /**
+ * Creates an {@link OutputStream OutputStream} for writing to an
+ * invitation stream.
+ */
+ OutputStream createInvitationStreamWriter(OutputStream out,
+ SecretKey headerKey);
+}
diff --git a/briar-api/src/org/briarproject/api/transport/TransportConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/TransportConstants.java
similarity index 54%
rename from briar-api/src/org/briarproject/api/transport/TransportConstants.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/transport/TransportConstants.java
index 9166bcf0c..5bd47f0a0 100644
--- a/briar-api/src/org/briarproject/api/transport/TransportConstants.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/TransportConstants.java
@@ -1,33 +1,48 @@
-package org.briarproject.api.transport;
+package org.briarproject.bramble.api.transport;
-
-import org.briarproject.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.SecretKey;
public interface TransportConstants {
- /** The length of the pseudo-random tag in bytes. */
+ /**
+ * The length of the pseudo-random tag in bytes.
+ */
int TAG_LENGTH = 16;
- /** The length of the stream header nonce in bytes. */
+ /**
+ * The length of the stream header nonce in bytes.
+ */
int STREAM_HEADER_NONCE_LENGTH = 24;
- /** The length of the stream header initialisation vector (IV) in bytes. */
+ /**
+ * The length of the stream header initialisation vector (IV) in bytes.
+ */
int STREAM_HEADER_IV_LENGTH = STREAM_HEADER_NONCE_LENGTH - 8;
- /** The length of the message authentication code (MAC) in bytes. */
+ /**
+ * The length of the message authentication code (MAC) in bytes.
+ */
int MAC_LENGTH = 16;
- /** The length of the stream header in bytes. */
+ /**
+ * The length of the stream header in bytes.
+ */
int STREAM_HEADER_LENGTH = STREAM_HEADER_IV_LENGTH + SecretKey.LENGTH
+ MAC_LENGTH;
- /** The length of the frame nonce in bytes. */
+ /**
+ * The length of the frame nonce in bytes.
+ */
int FRAME_NONCE_LENGTH = 24;
- /** The length of the plaintext frame header in bytes. */
+ /**
+ * The length of the plaintext frame header in bytes.
+ */
int FRAME_HEADER_PLAINTEXT_LENGTH = 4;
- /** The length of the encrypted and authenticated frame header in bytes. */
+ /**
+ * The length of the encrypted and authenticated frame header in bytes.
+ */
int FRAME_HEADER_LENGTH = FRAME_HEADER_PLAINTEXT_LENGTH + MAC_LENGTH;
/**
@@ -36,7 +51,9 @@ public interface TransportConstants {
*/
int MAX_FRAME_LENGTH = 1024;
- /** The maximum total length of the frame payload and padding in bytes. */
+ /**
+ * The maximum total length of the frame payload and padding in bytes.
+ */
int MAX_PAYLOAD_LENGTH = MAX_FRAME_LENGTH - FRAME_HEADER_LENGTH
- MAC_LENGTH;
@@ -48,9 +65,13 @@ public interface TransportConstants {
int MIN_STREAM_LENGTH = STREAM_HEADER_LENGTH + FRAME_HEADER_LENGTH
+ MAC_LENGTH;
- /** The maximum difference in milliseconds between two peers' clocks. */
+ /**
+ * The maximum difference in milliseconds between two peers' clocks.
+ */
int MAX_CLOCK_DIFFERENCE = 24 * 60 * 60 * 1000; // 24 hours
- /** The size of the reordering window. */
+ /**
+ * The size of the reordering window.
+ */
int REORDERING_WINDOW_SIZE = 32;
}
diff --git a/briar-api/src/org/briarproject/api/transport/TransportKeys.java b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/TransportKeys.java
similarity index 86%
rename from briar-api/src/org/briarproject/api/transport/TransportKeys.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/transport/TransportKeys.java
index ec550b52a..40aeed9a3 100644
--- a/briar-api/src/org/briarproject/api/transport/TransportKeys.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/transport/TransportKeys.java
@@ -1,8 +1,10 @@
-package org.briarproject.api.transport;
+package org.briarproject.bramble.api.transport;
-import org.briarproject.api.TransportId;
+import org.briarproject.bramble.api.plugin.TransportId;
-/** Keys for communicating with a given contact over a given transport. */
+/**
+ * Keys for communicating with a given contact over a given transport.
+ */
public class TransportKeys {
private final TransportId transportId;
diff --git a/briar-api/src/org/briarproject/api/ui/UiCallback.java b/bramble-api/src/main/java/org/briarproject/bramble/api/ui/UiCallback.java
similarity index 94%
rename from briar-api/src/org/briarproject/api/ui/UiCallback.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/ui/UiCallback.java
index e3608950f..c5ad6d1fc 100644
--- a/briar-api/src/org/briarproject/api/ui/UiCallback.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/ui/UiCallback.java
@@ -1,4 +1,4 @@
-package org.briarproject.api.ui;
+package org.briarproject.bramble.api.ui;
public interface UiCallback {
@@ -6,6 +6,7 @@ public interface UiCallback {
* Presents the user with a choice among two or more named options and
* returns the user's response. The message may consist of a translatable
* format string and arguments.
+ *
* @return an index into the array of options indicating the user's choice,
* or -1 if the user cancelled the choice.
*/
diff --git a/briar-core/src/org/briarproject/util/ByteUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/util/ByteUtils.java
similarity index 96%
rename from briar-core/src/org/briarproject/util/ByteUtils.java
rename to bramble-api/src/main/java/org/briarproject/bramble/util/ByteUtils.java
index 061a4780d..61b237829 100644
--- a/briar-core/src/org/briarproject/util/ByteUtils.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/util/ByteUtils.java
@@ -1,4 +1,4 @@
-package org.briarproject.util;
+package org.briarproject.bramble.util;
public class ByteUtils {
@@ -89,8 +89,8 @@ public class ByteUtils {
for (int i = 0; i < bits; i++) {
if ((src[i >> 3] & 128 >> (i & 7)) != 0) dest |= 1 << bits - i - 1;
}
- assert dest >= 0;
- assert dest < 1 << bits;
+ if (dest < 0) throw new AssertionError();
+ if (dest >= 1 << bits) throw new AssertionError();
return dest;
}
}
diff --git a/briar-core/src/org/briarproject/util/IoUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java
similarity index 84%
rename from briar-core/src/org/briarproject/util/IoUtils.java
rename to bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java
index cb76c9d5f..eb682e167 100644
--- a/briar-core/src/org/briarproject/util/IoUtils.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java
@@ -1,4 +1,6 @@
-package org.briarproject.util;
+package org.briarproject.bramble.util;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.Closeable;
import java.io.EOFException;
@@ -7,6 +9,9 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import javax.annotation.Nullable;
+
+@NotNullByDefault
public class IoUtils {
public static void deleteFileOrDir(File f) {
@@ -38,7 +43,7 @@ public class IoUtils {
}
}
- private static void tryToClose(Closeable c) {
+ private static void tryToClose(@Nullable Closeable c) {
try {
if (c != null) c.close();
} catch (IOException e) {
diff --git a/briar-core/src/org/briarproject/util/OsUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/util/OsUtils.java
similarity index 65%
rename from briar-core/src/org/briarproject/util/OsUtils.java
rename to bramble-api/src/main/java/org/briarproject/bramble/util/OsUtils.java
index 547db92e1..66ee8f256 100644
--- a/briar-core/src/org/briarproject/util/OsUtils.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/util/OsUtils.java
@@ -1,17 +1,25 @@
-package org.briarproject.util;
+package org.briarproject.bramble.util;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import javax.annotation.Nullable;
+
+@NotNullByDefault
public class OsUtils {
+ @Nullable
private static final String os = System.getProperty("os.name");
+ @Nullable
private static final String version = System.getProperty("os.version");
+ @Nullable
private static final String vendor = System.getProperty("java.vendor");
public static boolean isWindows() {
- return os != null && os.indexOf("Windows") != -1;
+ return os != null && os.contains("Windows");
}
public static boolean isMac() {
- return os != null && os.indexOf("Mac OS") != -1;
+ return os != null && os.contains("Mac OS");
}
public static boolean isMacLeopardOrNewer() {
@@ -28,10 +36,10 @@ public class OsUtils {
}
public static boolean isLinux() {
- return os != null && os.indexOf("Linux") != -1 && !isAndroid();
+ return os != null && os.contains("Linux") && !isAndroid();
}
public static boolean isAndroid() {
- return vendor != null && vendor.indexOf("Android") != -1;
+ return vendor != null && vendor.contains("Android");
}
}
diff --git a/briar-core/src/org/briarproject/util/PrivacyUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/util/PrivacyUtils.java
similarity index 76%
rename from briar-core/src/org/briarproject/util/PrivacyUtils.java
rename to bramble-api/src/main/java/org/briarproject/bramble/util/PrivacyUtils.java
index c2bf42628..50c4e792a 100644
--- a/briar-core/src/org/briarproject/util/PrivacyUtils.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/util/PrivacyUtils.java
@@ -1,27 +1,33 @@
-package org.briarproject.util;
+package org.briarproject.bramble.util;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import javax.annotation.Nullable;
+
+@NotNullByDefault
public class PrivacyUtils {
public static String scrubOnion(String onion) {
// keep first three characters of onion address
- return onion.substring(0, 3) + "[_scrubbed_]";
+ return onion.substring(0, 3) + "[scrubbed]";
}
- public static String scrubMacAddress(String address) {
+ @Nullable
+ public static String scrubMacAddress(@Nullable String address) {
if (address == null) return null;
// this is a fake address we need to know about
if (address.equals("02:00:00:00:00:00")) return address;
// keep first and last octet of MAC address
- return address.substring(0, 3) +
- "[scrubbed]" +
- address.substring(14, 17);
+ return address.substring(0, 3) + "[scrubbed]"
+ + address.substring(14, 17);
}
+ @Nullable
public static String scrubInetAddress(InetAddress address) {
// don't scrub link and site local addresses
if (address.isLinkLocalAddress() || address.isSiteLocalAddress())
@@ -32,7 +38,8 @@ public class PrivacyUtils {
return scrubInetAddress(address.toString());
}
- public static String scrubInetAddress(String address) {
+ @Nullable
+ public static String scrubInetAddress(@Nullable String address) {
if (address == null) return null;
int firstDot = address.indexOf(".");
@@ -43,11 +50,13 @@ public class PrivacyUtils {
return prefix + "[scrubbed]" + suffix;
}
+ @Nullable
public static String scrubSocketAddress(InetSocketAddress address) {
InetAddress inetAddress = address.getAddress();
return scrubInetAddress(inetAddress);
}
+ @Nullable
public static String scrubSocketAddress(SocketAddress address) {
if (address instanceof InetSocketAddress)
return scrubSocketAddress((InetSocketAddress) address);
diff --git a/briar-core/src/org/briarproject/util/StringUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/util/StringUtils.java
similarity index 97%
rename from briar-core/src/org/briarproject/util/StringUtils.java
rename to bramble-api/src/main/java/org/briarproject/bramble/util/StringUtils.java
index af622cc27..4cfe34ee9 100644
--- a/briar-core/src/org/briarproject/util/StringUtils.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/util/StringUtils.java
@@ -1,6 +1,6 @@
-package org.briarproject.util;
+package org.briarproject.bramble.util;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/util/ValidationUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/util/ValidationUtils.java
new file mode 100644
index 000000000..fffacae0c
--- /dev/null
+++ b/bramble-api/src/main/java/org/briarproject/bramble/util/ValidationUtils.java
@@ -0,0 +1,67 @@
+package org.briarproject.bramble.util;
+
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.data.BdfDictionary;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import javax.annotation.Nullable;
+
+@NotNullByDefault
+public class ValidationUtils {
+
+ public static void checkLength(@Nullable String s, int minLength,
+ int maxLength) throws FormatException {
+ if (s != null) {
+ int length = StringUtils.toUtf8(s).length;
+ if (length < minLength) throw new FormatException();
+ if (length > maxLength) throw new FormatException();
+ }
+ }
+
+ public static void checkLength(@Nullable String s, int length)
+ throws FormatException {
+ if (s != null && StringUtils.toUtf8(s).length != length)
+ throw new FormatException();
+ }
+
+ public static void checkLength(@Nullable byte[] b, int minLength,
+ int maxLength) throws FormatException {
+ if (b != null) {
+ if (b.length < minLength) throw new FormatException();
+ if (b.length > maxLength) throw new FormatException();
+ }
+ }
+
+ public static void checkLength(@Nullable byte[] b, int length)
+ throws FormatException {
+ if (b != null && b.length != length) throw new FormatException();
+ }
+
+ public static void checkSize(@Nullable BdfList list, int minSize,
+ int maxSize) throws FormatException {
+ if (list != null) {
+ if (list.size() < minSize) throw new FormatException();
+ if (list.size() > maxSize) throw new FormatException();
+ }
+ }
+
+ public static void checkSize(@Nullable BdfList list, int size)
+ throws FormatException {
+ if (list != null && list.size() != size) throw new FormatException();
+ }
+
+ public static void checkSize(@Nullable BdfDictionary dictionary,
+ int minSize, int maxSize) throws FormatException {
+ if (dictionary != null) {
+ if (dictionary.size() < minSize) throw new FormatException();
+ if (dictionary.size() > maxSize) throw new FormatException();
+ }
+ }
+
+ public static void checkSize(@Nullable BdfDictionary dictionary, int size)
+ throws FormatException {
+ if (dictionary != null && dictionary.size() != size)
+ throw new FormatException();
+ }
+}
diff --git a/bramble-core/build.gradle b/bramble-core/build.gradle
new file mode 100644
index 000000000..a281b0bd1
--- /dev/null
+++ b/bramble-core/build.gradle
@@ -0,0 +1,19 @@
+apply plugin: 'java'
+sourceCompatibility = 1.6
+targetCompatibility = 1.6
+
+apply plugin: 'witness'
+
+dependencies {
+ compile project(':bramble-api')
+ compile fileTree(dir: 'libs', include: '*.jar')
+ compile 'com.madgag.spongycastle:core:1.54.0.0'
+ compile 'com.h2database:h2:1.4.190'
+}
+
+dependencyVerification {
+ verify = [
+ 'com.madgag.spongycastle:core:1e7fa4b19ccccd1011364ab838d0b4702470c178bbbdd94c5c90b2d4d749ea1e',
+ 'com.h2database:h2:23ba495a07bbbb3bd6c3084d10a96dad7a23741b8b6d64b213459a784195a98c'
+ ]
+}
diff --git a/briar-core/libs/weupnp-0.1.3-SNAPSHOT-briar.jar b/bramble-core/libs/weupnp-0.1.3-SNAPSHOT-briar.jar
similarity index 100%
rename from briar-core/libs/weupnp-0.1.3-SNAPSHOT-briar.jar
rename to bramble-core/libs/weupnp-0.1.3-SNAPSHOT-briar.jar
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreEagerSingletons.java b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreEagerSingletons.java
new file mode 100644
index 000000000..e7a211e29
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreEagerSingletons.java
@@ -0,0 +1,35 @@
+package org.briarproject.bramble;
+
+import org.briarproject.bramble.contact.ContactModule;
+import org.briarproject.bramble.crypto.CryptoModule;
+import org.briarproject.bramble.db.DatabaseExecutorModule;
+import org.briarproject.bramble.identity.IdentityModule;
+import org.briarproject.bramble.lifecycle.LifecycleModule;
+import org.briarproject.bramble.plugin.PluginModule;
+import org.briarproject.bramble.properties.PropertiesModule;
+import org.briarproject.bramble.sync.SyncModule;
+import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.bramble.transport.TransportModule;
+
+public interface BrambleCoreEagerSingletons {
+
+ void inject(ContactModule.EagerSingletons init);
+
+ void inject(CryptoModule.EagerSingletons init);
+
+ void inject(DatabaseExecutorModule.EagerSingletons init);
+
+ void inject(IdentityModule.EagerSingletons init);
+
+ void inject(LifecycleModule.EagerSingletons init);
+
+ void inject(PluginModule.EagerSingletons init);
+
+ void inject(PropertiesModule.EagerSingletons init);
+
+ void inject(SyncModule.EagerSingletons init);
+
+ void inject(SystemModule.EagerSingletons init);
+
+ void inject(TransportModule.EagerSingletons init);
+}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
new file mode 100644
index 000000000..250b8be2a
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
@@ -0,0 +1,61 @@
+package org.briarproject.bramble;
+
+import org.briarproject.bramble.client.ClientModule;
+import org.briarproject.bramble.contact.ContactModule;
+import org.briarproject.bramble.crypto.CryptoModule;
+import org.briarproject.bramble.data.DataModule;
+import org.briarproject.bramble.db.DatabaseExecutorModule;
+import org.briarproject.bramble.db.DatabaseModule;
+import org.briarproject.bramble.event.EventModule;
+import org.briarproject.bramble.identity.IdentityModule;
+import org.briarproject.bramble.invitation.InvitationModule;
+import org.briarproject.bramble.keyagreement.KeyAgreementModule;
+import org.briarproject.bramble.lifecycle.LifecycleModule;
+import org.briarproject.bramble.plugin.PluginModule;
+import org.briarproject.bramble.properties.PropertiesModule;
+import org.briarproject.bramble.reliability.ReliabilityModule;
+import org.briarproject.bramble.reporting.ReportingModule;
+import org.briarproject.bramble.settings.SettingsModule;
+import org.briarproject.bramble.socks.SocksModule;
+import org.briarproject.bramble.sync.SyncModule;
+import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.bramble.transport.TransportModule;
+
+import dagger.Module;
+
+@Module(includes = {
+ ClientModule.class,
+ ContactModule.class,
+ CryptoModule.class,
+ DataModule.class,
+ DatabaseModule.class,
+ DatabaseExecutorModule.class,
+ EventModule.class,
+ IdentityModule.class,
+ InvitationModule.class,
+ KeyAgreementModule.class,
+ LifecycleModule.class,
+ PluginModule.class,
+ PropertiesModule.class,
+ ReliabilityModule.class,
+ ReportingModule.class,
+ SettingsModule.class,
+ SocksModule.class,
+ SyncModule.class,
+ SystemModule.class,
+ TransportModule.class
+})
+public class BrambleCoreModule {
+
+ public static void initEagerSingletons(BrambleCoreEagerSingletons c) {
+ c.inject(new ContactModule.EagerSingletons());
+ c.inject(new CryptoModule.EagerSingletons());
+ c.inject(new DatabaseExecutorModule.EagerSingletons());
+ c.inject(new IdentityModule.EagerSingletons());
+ c.inject(new LifecycleModule.EagerSingletons());
+ c.inject(new PluginModule.EagerSingletons());
+ c.inject(new SyncModule.EagerSingletons());
+ c.inject(new SystemModule.EagerSingletons());
+ c.inject(new TransportModule.EagerSingletons());
+ }
+}
diff --git a/briar-core/src/org/briarproject/clients/ClientHelperImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java
similarity index 88%
rename from briar-core/src/org/briarproject/clients/ClientHelperImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java
index bca3812f3..55847365f 100644
--- a/briar-core/src/org/briarproject/clients/ClientHelperImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java
@@ -1,25 +1,25 @@
-package org.briarproject.clients;
+package org.briarproject.bramble.client;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.clients.ClientHelper;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.data.BdfDictionary;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.data.BdfReader;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.BdfWriter;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.data.MetadataEncoder;
-import org.briarproject.api.data.MetadataParser;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Metadata;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageFactory;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.client.ClientHelper;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.data.BdfDictionary;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.data.MetadataEncoder;
+import org.briarproject.bramble.api.data.MetadataParser;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Metadata;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageFactory;
+import org.briarproject.bramble.api.sync.MessageId;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -29,10 +29,12 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
-import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
+@Immutable
@NotNullByDefault
class ClientHelperImpl implements ClientHelper {
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/client/ClientModule.java b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientModule.java
new file mode 100644
index 000000000..c5ec20f83
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientModule.java
@@ -0,0 +1,36 @@
+package org.briarproject.bramble.client;
+
+import org.briarproject.bramble.api.client.ClientHelper;
+import org.briarproject.bramble.api.client.ContactGroupFactory;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.data.MetadataEncoder;
+import org.briarproject.bramble.api.data.MetadataParser;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.sync.GroupFactory;
+import org.briarproject.bramble.api.sync.MessageFactory;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class ClientModule {
+
+ @Provides
+ ClientHelper provideClientHelper(DatabaseComponent db,
+ MessageFactory messageFactory, BdfReaderFactory bdfReaderFactory,
+ BdfWriterFactory bdfWriterFactory, MetadataParser metadataParser,
+ MetadataEncoder metadataEncoder, CryptoComponent cryptoComponent) {
+ return new ClientHelperImpl(db, messageFactory, bdfReaderFactory,
+ bdfWriterFactory, metadataParser, metadataEncoder,
+ cryptoComponent);
+ }
+
+ @Provides
+ ContactGroupFactory provideContactGroupFactory(GroupFactory groupFactory,
+ ClientHelper clientHelper) {
+ return new ContactGroupFactoryImpl(groupFactory, clientHelper);
+ }
+
+}
diff --git a/briar-core/src/org/briarproject/clients/ContactGroupFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/client/ContactGroupFactoryImpl.java
similarity index 66%
rename from briar-core/src/org/briarproject/clients/ContactGroupFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/client/ContactGroupFactoryImpl.java
index f5cbaf8e9..069055347 100644
--- a/briar-core/src/org/briarproject/clients/ContactGroupFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/client/ContactGroupFactoryImpl.java
@@ -1,19 +1,22 @@
-package org.briarproject.clients;
+package org.briarproject.bramble.client;
+import org.briarproject.bramble.api.Bytes;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.client.ClientHelper;
+import org.briarproject.bramble.api.client.ContactGroupFactory;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.GroupFactory;
-import org.briarproject.api.Bytes;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.clients.ClientHelper;
-import org.briarproject.api.clients.ContactGroupFactory;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.sync.ClientId;
-import org.briarproject.api.sync.Group;
-import org.briarproject.api.sync.GroupFactory;
-
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
+@Immutable
+@NotNullByDefault
class ContactGroupFactoryImpl implements ContactGroupFactory {
private static final byte[] LOCAL_GROUP_DESCRIPTOR = new byte[0];
diff --git a/briar-core/src/org/briarproject/contact/ContactExchangeTaskImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java
similarity index 79%
rename from briar-core/src/org/briarproject/contact/ContactExchangeTaskImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java
index ec825052c..e33b1deb0 100644
--- a/briar-core/src/org/briarproject/contact/ContactExchangeTaskImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java
@@ -1,32 +1,34 @@
-package org.briarproject.contact;
+package org.briarproject.bramble.contact;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactExchangeListener;
-import org.briarproject.api.contact.ContactExchangeTask;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.data.BdfReader;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.BdfWriter;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.db.ContactExistsException;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.AuthorFactory;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.plugins.ConnectionManager;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.properties.TransportProperties;
-import org.briarproject.api.properties.TransportPropertyManager;
-import org.briarproject.api.system.Clock;
-import org.briarproject.api.transport.StreamReaderFactory;
-import org.briarproject.api.transport.StreamWriterFactory;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.contact.ContactExchangeListener;
+import org.briarproject.bramble.api.contact.ContactExchangeTask;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.db.ContactExistsException;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorFactory;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.ConnectionManager;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.properties.TransportProperties;
+import org.briarproject.bramble.api.properties.TransportPropertyManager;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.api.transport.StreamReaderFactory;
+import org.briarproject.bramble.api.transport.StreamWriterFactory;
import java.io.IOException;
import java.io.InputStream;
@@ -41,18 +43,20 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.TransportId.MAX_TRANSPORT_ID_LENGTH;
-import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
-import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
-import static org.briarproject.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
-import static org.briarproject.api.properties.TransportPropertyConstants.MAX_PROPERTIES_PER_TRANSPORT;
-import static org.briarproject.api.properties.TransportPropertyConstants.MAX_PROPERTY_LENGTH;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
+import static org.briarproject.bramble.api.plugin.TransportId.MAX_TRANSPORT_ID_LENGTH;
+import static org.briarproject.bramble.api.properties.TransportPropertyConstants.MAX_PROPERTIES_PER_TRANSPORT;
+import static org.briarproject.bramble.api.properties.TransportPropertyConstants.MAX_PROPERTY_LENGTH;
-public class ContactExchangeTaskImpl extends Thread
- implements ContactExchangeTask {
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+class ContactExchangeTaskImpl extends Thread implements ContactExchangeTask {
private static final Logger LOG =
Logger.getLogger(ContactExchangeTaskImpl.class.getName());
+
private static final String SIGNING_LABEL_EXCHANGE =
"org.briarproject.briar.contact/EXCHANGE";
diff --git a/briar-core/src/org/briarproject/contact/ContactManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java
similarity index 83%
rename from briar-core/src/org/briarproject/contact/ContactManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java
index c0d13a44f..c4c3152b7 100644
--- a/briar-core/src/org/briarproject/contact/ContactManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java
@@ -1,24 +1,27 @@
-package org.briarproject.contact;
+package org.briarproject.bramble.contact;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.transport.KeyManager;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.transport.KeyManager;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
+@ThreadSafe
+@NotNullByDefault
class ContactManagerImpl implements ContactManager {
private final DatabaseComponent db;
diff --git a/briar-core/src/org/briarproject/contact/ContactModule.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactModule.java
similarity index 75%
rename from briar-core/src/org/briarproject/contact/ContactModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/contact/ContactModule.java
index 800b8e57f..2cb610972 100644
--- a/briar-core/src/org/briarproject/contact/ContactModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactModule.java
@@ -1,7 +1,7 @@
-package org.briarproject.contact;
+package org.briarproject.bramble.contact;
-import org.briarproject.api.contact.ContactExchangeTask;
-import org.briarproject.api.contact.ContactManager;
+import org.briarproject.bramble.api.contact.ContactExchangeTask;
+import org.briarproject.bramble.api.contact.ContactManager;
import javax.inject.Inject;
import javax.inject.Singleton;
diff --git a/briar-core/src/org/briarproject/crypto/AsciiArmour.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/AsciiArmour.java
similarity index 72%
rename from briar-core/src/org/briarproject/crypto/AsciiArmour.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/AsciiArmour.java
index 5e00461d4..2bf79875e 100644
--- a/briar-core/src/org/briarproject/crypto/AsciiArmour.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/AsciiArmour.java
@@ -1,8 +1,10 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.FormatException;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.StringUtils;
+@NotNullByDefault
class AsciiArmour {
static String wrap(byte[] b, int lineLength) {
diff --git a/briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/AuthenticatedCipher.java
similarity index 66%
rename from briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/AuthenticatedCipher.java
index fe4f8bee0..b70358e5d 100644
--- a/briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/AuthenticatedCipher.java
@@ -1,9 +1,11 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.security.GeneralSecurityException;
+@NotNullByDefault
interface AuthenticatedCipher {
/**
@@ -22,23 +24,25 @@ interface AuthenticatedCipher {
* Encrypts or decrypts data in a single-part operation.
*
* @param input the input byte array. If encrypting, the plaintext to be
- * encrypted. If decrypting, the ciphertext to be decrypted
- * including the MAC.
+ * encrypted. If decrypting, the ciphertext to be decrypted
+ * including the MAC.
* @param inputOff the offset into the input array where the data to be
- * processed starts.
+ * processed starts.
* @param len the length of the input. If decrypting, includes the MAC
- * length.
+ * length.
* @param output the output byte array. If encrypting, the ciphertext
- * including the MAC. If decrypting, the plaintext.
+ * including the MAC. If decrypting, the plaintext.
* @param outputOff the offset into the output byte array where the
- * processed data starts.
- * @return the length of the output. If encrypting, includes the MAC
- * length.
+ * processed data starts.
+ * @return the length of the output. If encrypting, includes the MAC
+ * length.
* @throws GeneralSecurityException on invalid input.
*/
int process(byte[] input, int inputOff, int len, byte[] output,
int outputOff) throws GeneralSecurityException;
- /** Returns the length of the message authentication code (MAC) in bytes. */
+ /**
+ * Returns the length of the message authentication code (MAC) in bytes.
+ */
int getMacBytes();
}
diff --git a/briar-core/src/org/briarproject/crypto/Blake2sDigest.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Blake2sDigest.java
similarity index 99%
rename from briar-core/src/org/briarproject/crypto/Blake2sDigest.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/Blake2sDigest.java
index 33f3545d5..a8e132a9b 100644
--- a/briar-core/src/org/briarproject/crypto/Blake2sDigest.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Blake2sDigest.java
@@ -1,4 +1,4 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
/*
The BLAKE2 cryptographic hash function was designed by Jean-
diff --git a/briar-core/src/org/briarproject/crypto/CombinedSecureRandom.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CombinedSecureRandom.java
similarity index 79%
rename from briar-core/src/org/briarproject/crypto/CombinedSecureRandom.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/CombinedSecureRandom.java
index 9e8631fd3..82c9d50d6 100644
--- a/briar-core/src/org/briarproject/crypto/CombinedSecureRandom.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CombinedSecureRandom.java
@@ -1,16 +1,15 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
import java.security.Provider;
import java.security.SecureRandom;
import java.security.SecureRandomSpi;
/**
- * A {@link java.security.SecureRandom SecureRandom} implementation that
- * combines the outputs of two or more other implementations using XOR.
+ * A {@link SecureRandom} implementation that combines the outputs of two or
+ * more other implementations using XOR.
*/
class CombinedSecureRandom extends SecureRandom {
- private static final long serialVersionUID = -605269609862397104L;
private static final Provider PROVIDER = new CombinedProvider();
CombinedSecureRandom(SecureRandom... randoms) {
@@ -19,8 +18,6 @@ class CombinedSecureRandom extends SecureRandom {
private static class CombinedSecureRandomSpi extends SecureRandomSpi {
- private static final long serialVersionUID = 483801767899979081L;
-
private final SecureRandom[] randoms;
private CombinedSecureRandomSpi(SecureRandom... randoms) {
@@ -58,8 +55,6 @@ class CombinedSecureRandom extends SecureRandom {
private static class CombinedProvider extends Provider {
- private static final long serialVersionUID = -4678501890053703844L;
-
private CombinedProvider() {
super("Combined", 1.0, "");
}
diff --git a/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoComponentImpl.java
similarity index 94%
rename from briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoComponentImpl.java
index b18cea9f8..879ee2595 100644
--- a/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoComponentImpl.java
@@ -1,20 +1,20 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.crypto.KeyParser;
-import org.briarproject.api.crypto.MessageDigest;
-import org.briarproject.api.crypto.PrivateKey;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.crypto.PublicKey;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.system.SeedProvider;
-import org.briarproject.api.transport.IncomingKeys;
-import org.briarproject.api.transport.OutgoingKeys;
-import org.briarproject.api.transport.TransportKeys;
-import org.briarproject.util.ByteUtils;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.KeyPair;
+import org.briarproject.bramble.api.crypto.KeyParser;
+import org.briarproject.bramble.api.crypto.MessageDigest;
+import org.briarproject.bramble.api.crypto.PrivateKey;
+import org.briarproject.bramble.api.crypto.PseudoRandom;
+import org.briarproject.bramble.api.crypto.PublicKey;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.system.SeedProvider;
+import org.briarproject.bramble.api.transport.IncomingKeys;
+import org.briarproject.bramble.api.transport.OutgoingKeys;
+import org.briarproject.bramble.api.transport.TransportKeys;
+import org.briarproject.bramble.util.ByteUtils;
+import org.briarproject.bramble.util.StringUtils;
import org.spongycastle.crypto.AsymmetricCipherKeyPair;
import org.spongycastle.crypto.CipherParameters;
import org.spongycastle.crypto.CryptoException;
@@ -39,13 +39,13 @@ import java.util.logging.Logger;
import javax.inject.Inject;
import static java.util.logging.Level.INFO;
-import static org.briarproject.api.invitation.InvitationConstants.CODE_BITS;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.COMMIT_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.TAG_LENGTH;
-import static org.briarproject.crypto.EllipticCurveConstants.PARAMETERS;
-import static org.briarproject.util.ByteUtils.INT_32_BYTES;
-import static org.briarproject.util.ByteUtils.INT_64_BYTES;
-import static org.briarproject.util.ByteUtils.MAX_32_BIT_UNSIGNED;
+import static org.briarproject.bramble.api.invitation.InvitationConstants.CODE_BITS;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.COMMIT_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
+import static org.briarproject.bramble.crypto.EllipticCurveConstants.PARAMETERS;
+import static org.briarproject.bramble.util.ByteUtils.INT_32_BYTES;
+import static org.briarproject.bramble.util.ByteUtils.INT_64_BYTES;
+import static org.briarproject.bramble.util.ByteUtils.MAX_32_BIT_UNSIGNED;
class CryptoComponentImpl implements CryptoComponent {
diff --git a/briar-core/src/org/briarproject/crypto/CryptoModule.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoModule.java
similarity index 81%
rename from briar-core/src/org/briarproject/crypto/CryptoModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoModule.java
index aa9744483..accfaf527 100644
--- a/briar-core/src/org/briarproject/crypto/CryptoModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoModule.java
@@ -1,12 +1,12 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.crypto.PasswordStrengthEstimator;
-import org.briarproject.api.crypto.StreamDecrypterFactory;
-import org.briarproject.api.crypto.StreamEncrypterFactory;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.system.SeedProvider;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
+import org.briarproject.bramble.api.crypto.StreamDecrypterFactory;
+import org.briarproject.bramble.api.crypto.StreamEncrypterFactory;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.system.SeedProvider;
import java.security.SecureRandom;
import java.util.concurrent.BlockingQueue;
@@ -30,7 +30,8 @@ public class CryptoModule {
public static class EagerSingletons {
@Inject
- @CryptoExecutor Executor cryptoExecutor;
+ @CryptoExecutor
+ Executor cryptoExecutor;
}
/**
diff --git a/briar-core/src/org/briarproject/crypto/DigestWrapper.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/DigestWrapper.java
similarity index 80%
rename from briar-core/src/org/briarproject/crypto/DigestWrapper.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/DigestWrapper.java
index 01b7272f7..077a4012a 100644
--- a/briar-core/src/org/briarproject/crypto/DigestWrapper.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/DigestWrapper.java
@@ -1,8 +1,13 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.MessageDigest;
+import org.briarproject.bramble.api.crypto.MessageDigest;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.spongycastle.crypto.Digest;
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
class DigestWrapper implements MessageDigest {
private final Digest digest;
diff --git a/briar-core/src/org/briarproject/crypto/DoubleDigest.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/DoubleDigest.java
similarity index 81%
rename from briar-core/src/org/briarproject/crypto/DoubleDigest.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/DoubleDigest.java
index 1d1fdd99d..374047204 100644
--- a/briar-core/src/org/briarproject/crypto/DoubleDigest.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/DoubleDigest.java
@@ -1,8 +1,11 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.MessageDigest;
+import org.briarproject.bramble.api.crypto.MessageDigest;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.spongycastle.crypto.Digest;
+import javax.annotation.concurrent.NotThreadSafe;
+
/**
* A message digest that prevents length extension attacks - see Ferguson and
* Schneier, Practical Cryptography, chapter 6.
@@ -12,6 +15,8 @@ import org.spongycastle.crypto.Digest;
* min(k, n/2) where k is the security level of h and n is the size of the hash
* result."
*/
+@NotThreadSafe
+@NotNullByDefault
class DoubleDigest implements MessageDigest {
private final Digest delegate;
@@ -20,6 +25,7 @@ class DoubleDigest implements MessageDigest {
this.delegate = delegate;
}
+ @Override
public byte[] digest() {
byte[] digest = new byte[delegate.getDigestSize()];
delegate.doFinal(digest, 0); // h(m)
@@ -28,11 +34,13 @@ class DoubleDigest implements MessageDigest {
return digest;
}
+ @Override
public byte[] digest(byte[] input) {
delegate.update(input, 0, input.length);
return digest();
}
+ @Override
public int digest(byte[] buf, int offset, int len) {
byte[] digest = digest();
len = Math.min(len, digest.length);
@@ -40,22 +48,27 @@ class DoubleDigest implements MessageDigest {
return len;
}
+ @Override
public int getDigestLength() {
return delegate.getDigestSize();
}
+ @Override
public void reset() {
delegate.reset();
}
+ @Override
public void update(byte input) {
delegate.update(input);
}
+ @Override
public void update(byte[] input) {
delegate.update(input, 0, input.length);
}
+ @Override
public void update(byte[] input, int offset, int len) {
delegate.update(input, offset, len);
}
diff --git a/briar-core/src/org/briarproject/crypto/EllipticCurveConstants.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/EllipticCurveConstants.java
similarity index 91%
rename from briar-core/src/org/briarproject/crypto/EllipticCurveConstants.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/EllipticCurveConstants.java
index 76be53729..e4b4b04e8 100644
--- a/briar-core/src/org/briarproject/crypto/EllipticCurveConstants.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/EllipticCurveConstants.java
@@ -1,6 +1,4 @@
-package org.briarproject.crypto;
-
-import java.math.BigInteger;
+package org.briarproject.bramble.crypto;
import org.spongycastle.asn1.teletrust.TeleTrusTNamedCurves;
import org.spongycastle.asn1.x9.X9ECParameters;
@@ -10,7 +8,11 @@ import org.spongycastle.math.ec.ECMultiplier;
import org.spongycastle.math.ec.ECPoint;
import org.spongycastle.math.ec.MontgomeryLadderMultiplier;
-/** Parameters for curve brainpoolp256r1 - see RFC 5639. */
+import java.math.BigInteger;
+
+/**
+ * Parameters for curve brainpoolp256r1 - see RFC 5639.
+ */
class EllipticCurveConstants {
static final ECDomainParameters PARAMETERS;
diff --git a/briar-core/src/org/briarproject/crypto/FortunaGenerator.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/FortunaGenerator.java
similarity index 90%
rename from briar-core/src/org/briarproject/crypto/FortunaGenerator.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/FortunaGenerator.java
index 688a03dee..2c4ef3ef6 100644
--- a/briar-core/src/org/briarproject/crypto/FortunaGenerator.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/FortunaGenerator.java
@@ -1,18 +1,23 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.briarproject.api.crypto.MessageDigest;
+import org.briarproject.bramble.api.crypto.MessageDigest;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.spongycastle.crypto.BlockCipher;
import org.spongycastle.crypto.digests.SHA256Digest;
import org.spongycastle.crypto.engines.AESLightEngine;
import org.spongycastle.crypto.params.KeyParameter;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.annotation.concurrent.ThreadSafe;
+
/**
* Implements the Fortuna pseudo-random number generator, as described in
* Ferguson and Schneier, Practical Cryptography, chapter 9.
*/
+@ThreadSafe
+@NotNullByDefault
class FortunaGenerator {
private static final int MAX_BYTES_PER_REQUEST = 1024 * 1024;
@@ -86,7 +91,7 @@ class FortunaGenerator {
}
// Generate a partial block if needed
int done = fullBlocks * BLOCK_BYTES, remaining = len - done;
- assert remaining < BLOCK_BYTES;
+ if (remaining >= BLOCK_BYTES) throw new AssertionError();
if (remaining > 0) {
cipher.processBlock(counter, 0, buffer, 0);
incrementCounter();
diff --git a/briar-core/src/org/briarproject/crypto/FortunaSecureRandom.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/FortunaSecureRandom.java
similarity index 85%
rename from briar-core/src/org/briarproject/crypto/FortunaSecureRandom.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/FortunaSecureRandom.java
index ce3aeeaf8..62e609c96 100644
--- a/briar-core/src/org/briarproject/crypto/FortunaSecureRandom.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/FortunaSecureRandom.java
@@ -1,12 +1,12 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
+
+import org.briarproject.bramble.util.StringUtils;
import java.security.Provider;
import java.security.SecureRandom;
import java.security.SecureRandomSpi;
import java.util.Arrays;
-import org.briarproject.util.StringUtils;
-
/**
* A {@link java.security.SecureRandom SecureRandom} implementation based on a
* {@link FortunaGenerator}.
@@ -21,7 +21,6 @@ class FortunaSecureRandom extends SecureRandom {
static final byte[] SELF_TEST_VECTOR_3 =
StringUtils.fromHexString("1E12DA166BD86DCECDE50A8296018DE2");
- private static final long serialVersionUID = -417332227850184134L;
private static final Provider PROVIDER = new FortunaProvider();
FortunaSecureRandom(byte[] seed) {
@@ -42,14 +41,11 @@ class FortunaSecureRandom extends SecureRandom {
if (!Arrays.equals(SELF_TEST_VECTOR_2, output)) return false;
r.setSeed(seed);
r.nextBytes(output);
- if (!Arrays.equals(SELF_TEST_VECTOR_3, output)) return false;
- return true;
+ return Arrays.equals(SELF_TEST_VECTOR_3, output);
}
private static class FortunaSecureRandomSpi extends SecureRandomSpi {
- private static final long serialVersionUID = -1677799887497202351L;
-
private final FortunaGenerator generator;
private FortunaSecureRandomSpi(byte[] seed) {
@@ -78,8 +74,6 @@ class FortunaSecureRandom extends SecureRandom {
private static class FortunaProvider extends Provider {
- private static final long serialVersionUID = -833121797778381769L;
-
private FortunaProvider() {
super("Fortuna", 1.0, "");
}
diff --git a/briar-core/src/org/briarproject/crypto/FrameEncoder.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/FrameEncoder.java
similarity index 72%
rename from briar-core/src/org/briarproject/crypto/FrameEncoder.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/FrameEncoder.java
index 68219c7a6..b56119b24 100644
--- a/briar-core/src/org/briarproject/crypto/FrameEncoder.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/FrameEncoder.java
@@ -1,13 +1,15 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.util.ByteUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.ByteUtils;
-import static org.briarproject.api.transport.TransportConstants.FRAME_HEADER_PLAINTEXT_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.FRAME_NONCE_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
-import static org.briarproject.util.ByteUtils.INT_16_BYTES;
-import static org.briarproject.util.ByteUtils.INT_64_BYTES;
+import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_HEADER_PLAINTEXT_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_NONCE_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
+import static org.briarproject.bramble.util.ByteUtils.INT_16_BYTES;
+import static org.briarproject.bramble.util.ByteUtils.INT_64_BYTES;
+@NotNullByDefault
class FrameEncoder {
static void encodeNonce(byte[] dest, long frameNumber, boolean header) {
diff --git a/briar-core/src/org/briarproject/crypto/MessageEncrypter.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java
similarity index 94%
rename from briar-core/src/org/briarproject/crypto/MessageEncrypter.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java
index c8a8d974f..82f3948b6 100644
--- a/briar-core/src/org/briarproject/crypto/MessageEncrypter.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java
@@ -1,10 +1,11 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.crypto.KeyParser;
-import org.briarproject.api.crypto.PrivateKey;
-import org.briarproject.api.crypto.PublicKey;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.crypto.KeyPair;
+import org.briarproject.bramble.api.crypto.KeyParser;
+import org.briarproject.bramble.api.crypto.PrivateKey;
+import org.briarproject.bramble.api.crypto.PublicKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.StringUtils;
import org.spongycastle.asn1.teletrust.TeleTrusTNamedCurves;
import org.spongycastle.asn1.x9.X9ECParameters;
import org.spongycastle.crypto.AsymmetricCipherKeyPair;
@@ -42,6 +43,10 @@ import java.nio.charset.Charset;
import java.security.SecureRandom;
import java.util.Scanner;
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
public class MessageEncrypter {
private static final ECDomainParameters PARAMETERS;
diff --git a/briar-core/src/org/briarproject/crypto/PasswordStrengthEstimatorImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImpl.java
similarity index 80%
rename from briar-core/src/org/briarproject/crypto/PasswordStrengthEstimatorImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImpl.java
index ca55efa07..ad1a0148d 100644
--- a/briar-core/src/org/briarproject/crypto/PasswordStrengthEstimatorImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImpl.java
@@ -1,9 +1,14 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
+
+import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.util.HashSet;
-import org.briarproject.api.crypto.PasswordStrengthEstimator;
+import javax.annotation.concurrent.Immutable;
+@Immutable
+@NotNullByDefault
class PasswordStrengthEstimatorImpl implements PasswordStrengthEstimator {
private static final int LOWER = 26;
@@ -13,6 +18,7 @@ class PasswordStrengthEstimatorImpl implements PasswordStrengthEstimator {
private static final double STRONG = Math.log(Math.pow(LOWER + UPPER +
DIGIT + OTHER, 10));
+ @Override
public float estimateStrength(String password) {
HashSet unique = new HashSet();
int length = password.length();
diff --git a/briar-core/src/org/briarproject/crypto/PseudoRandomImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/PseudoRandomImpl.java
similarity index 57%
rename from briar-core/src/org/briarproject/crypto/PseudoRandomImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/PseudoRandomImpl.java
index 2786b2994..fb02df047 100644
--- a/briar-core/src/org/briarproject/crypto/PseudoRandomImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/PseudoRandomImpl.java
@@ -1,10 +1,15 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.util.ByteUtils;
+import org.briarproject.bramble.api.crypto.PseudoRandom;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.ByteUtils;
-import static org.briarproject.util.ByteUtils.INT_32_BYTES;
+import javax.annotation.concurrent.NotThreadSafe;
+import static org.briarproject.bramble.util.ByteUtils.INT_32_BYTES;
+
+@NotThreadSafe
+@NotNullByDefault
class PseudoRandomImpl implements PseudoRandom {
private final FortunaGenerator generator;
@@ -16,6 +21,7 @@ class PseudoRandomImpl implements PseudoRandom {
generator = new FortunaGenerator(seed);
}
+ @Override
public byte[] nextBytes(int length) {
byte[] b = new byte[length];
int offset = 0;
diff --git a/briar-core/src/org/briarproject/crypto/Sec1KeyParser.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1KeyParser.java
similarity index 91%
rename from briar-core/src/org/briarproject/crypto/Sec1KeyParser.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1KeyParser.java
index a3bc7c71e..edc36c664 100644
--- a/briar-core/src/org/briarproject/crypto/Sec1KeyParser.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1KeyParser.java
@@ -1,8 +1,9 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.KeyParser;
-import org.briarproject.api.crypto.PrivateKey;
-import org.briarproject.api.crypto.PublicKey;
+import org.briarproject.bramble.api.crypto.KeyParser;
+import org.briarproject.bramble.api.crypto.PrivateKey;
+import org.briarproject.bramble.api.crypto.PublicKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.spongycastle.crypto.params.ECDomainParameters;
import org.spongycastle.crypto.params.ECPrivateKeyParameters;
import org.spongycastle.crypto.params.ECPublicKeyParameters;
@@ -13,6 +14,8 @@ import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.util.logging.Logger;
+import javax.annotation.concurrent.Immutable;
+
import static java.util.logging.Level.INFO;
/**
@@ -20,6 +23,8 @@ import static java.util.logging.Level.INFO;
* Cryptography", section 2.3 (Certicom Corporation, May 2009). Point
* compression is not used.
*/
+@Immutable
+@NotNullByDefault
class Sec1KeyParser implements KeyParser {
private static final Logger LOG =
@@ -38,6 +43,7 @@ class Sec1KeyParser implements KeyParser {
privateKeyBytes = bytesPerInt;
}
+ @Override
public PublicKey parsePublicKey(byte[] encodedKey)
throws GeneralSecurityException {
// The validation procedure comes from SEC 1, section 3.2.2.1. Note
@@ -80,6 +86,7 @@ class Sec1KeyParser implements KeyParser {
return p;
}
+ @Override
public PrivateKey parsePrivateKey(byte[] encodedKey)
throws GeneralSecurityException {
long now = System.currentTimeMillis();
diff --git a/briar-core/src/org/briarproject/crypto/Sec1PrivateKey.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PrivateKey.java
similarity index 69%
rename from briar-core/src/org/briarproject/crypto/Sec1PrivateKey.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PrivateKey.java
index ff3877207..89e297c43 100644
--- a/briar-core/src/org/briarproject/crypto/Sec1PrivateKey.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PrivateKey.java
@@ -1,8 +1,13 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.PrivateKey;
+import org.briarproject.bramble.api.crypto.PrivateKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.spongycastle.crypto.params.ECPrivateKeyParameters;
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
class Sec1PrivateKey implements PrivateKey {
private final ECPrivateKeyParameters key;
@@ -13,6 +18,7 @@ class Sec1PrivateKey implements PrivateKey {
bytesPerInt = (keyBits + 7) / 8;
}
+ @Override
public byte[] getEncoded() {
byte[] encodedKey = new byte[bytesPerInt];
byte[] d = key.getD().toByteArray();
diff --git a/briar-core/src/org/briarproject/crypto/Sec1PublicKey.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PublicKey.java
similarity index 68%
rename from briar-core/src/org/briarproject/crypto/Sec1PublicKey.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PublicKey.java
index f85a34b8d..a7fd114e8 100644
--- a/briar-core/src/org/briarproject/crypto/Sec1PublicKey.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PublicKey.java
@@ -1,13 +1,18 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.PublicKey;
+import org.briarproject.bramble.api.crypto.PublicKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.spongycastle.crypto.params.ECPublicKeyParameters;
+import javax.annotation.concurrent.Immutable;
+
/**
* An elliptic curve public key that uses the encoding defined in "SEC 1:
* Elliptic Curve Cryptography", section 2.3 (Certicom Corporation, May 2009).
* Point compression is not used.
*/
+@Immutable
+@NotNullByDefault
class Sec1PublicKey implements PublicKey {
private final ECPublicKeyParameters key;
@@ -16,6 +21,7 @@ class Sec1PublicKey implements PublicKey {
this.key = key;
}
+ @Override
public byte[] getEncoded() {
return key.getQ().getEncoded(false);
}
diff --git a/briar-core/src/org/briarproject/crypto/Sec1Utils.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1Utils.java
similarity index 77%
rename from briar-core/src/org/briarproject/crypto/Sec1Utils.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1Utils.java
index 926bcbc69..f87d72700 100644
--- a/briar-core/src/org/briarproject/crypto/Sec1Utils.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1Utils.java
@@ -1,5 +1,8 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+@NotNullByDefault
class Sec1Utils {
static void convertToFixedLength(byte[] src, byte[] dest, int destOff,
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/Signature.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Signature.java
new file mode 100644
index 000000000..f5684a7dd
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Signature.java
@@ -0,0 +1,46 @@
+package org.briarproject.bramble.crypto;
+
+import org.briarproject.bramble.api.crypto.PrivateKey;
+import org.briarproject.bramble.api.crypto.PublicKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import java.security.GeneralSecurityException;
+
+@NotNullByDefault
+interface Signature {
+
+ /**
+ * @see {@link java.security.Signature#initSign(java.security.PrivateKey)}
+ */
+ void initSign(PrivateKey k) throws GeneralSecurityException;
+
+ /**
+ * @see {@link java.security.Signature#initVerify(java.security.PublicKey)}
+ */
+ void initVerify(PublicKey k) throws GeneralSecurityException;
+
+ /**
+ * @see {@link java.security.Signature#update(byte)}
+ */
+ void update(byte b);
+
+ /**
+ * @see {@link java.security.Signature#update(byte[])}
+ */
+ void update(byte[] b);
+
+ /**
+ * @see {@link java.security.Signature#update(byte[], int, int)}
+ */
+ void update(byte[] b, int off, int len);
+
+ /**
+ * @see {@link java.security.Signature#sign()}
+ */
+ byte[] sign();
+
+ /**
+ * @see {@link java.security.Signature#verify(byte[])}
+ */
+ boolean verify(byte[] signature);
+}
diff --git a/briar-core/src/org/briarproject/crypto/SignatureImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/SignatureImpl.java
similarity index 83%
rename from briar-core/src/org/briarproject/crypto/SignatureImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/SignatureImpl.java
index e7c7c6394..2a4f87047 100644
--- a/briar-core/src/org/briarproject/crypto/SignatureImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/SignatureImpl.java
@@ -1,7 +1,8 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.PrivateKey;
-import org.briarproject.api.crypto.PublicKey;
+import org.briarproject.bramble.api.crypto.PrivateKey;
+import org.briarproject.bramble.api.crypto.PublicKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.spongycastle.crypto.Digest;
import org.spongycastle.crypto.params.ECPrivateKeyParameters;
import org.spongycastle.crypto.params.ECPublicKeyParameters;
@@ -15,8 +16,12 @@ import java.security.GeneralSecurityException;
import java.security.SecureRandom;
import java.util.logging.Logger;
+import javax.annotation.concurrent.NotThreadSafe;
+
import static java.util.logging.Level.INFO;
+@NotThreadSafe
+@NotNullByDefault
class SignatureImpl implements Signature {
private static final Logger LOG =
@@ -34,14 +39,16 @@ class SignatureImpl implements Signature {
@Override
public void initSign(PrivateKey k) throws GeneralSecurityException {
- if (!(k instanceof Sec1PrivateKey)) throw new GeneralSecurityException();
+ if (!(k instanceof Sec1PrivateKey))
+ throw new IllegalArgumentException();
ECPrivateKeyParameters priv = ((Sec1PrivateKey) k).getKey();
signer.init(true, new ParametersWithRandom(priv, secureRandom));
}
@Override
public void initVerify(PublicKey k) throws GeneralSecurityException {
- if (!(k instanceof Sec1PublicKey)) throw new GeneralSecurityException();
+ if (!(k instanceof Sec1PublicKey))
+ throw new IllegalArgumentException();
ECPublicKeyParameters pub = ((Sec1PublicKey) k).getKey();
signer.init(false, pub);
}
diff --git a/briar-core/src/org/briarproject/crypto/StreamDecrypterFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamDecrypterFactoryImpl.java
similarity index 65%
rename from briar-core/src/org/briarproject/crypto/StreamDecrypterFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamDecrypterFactoryImpl.java
index c134872b3..49fd6ba2e 100644
--- a/briar-core/src/org/briarproject/crypto/StreamDecrypterFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamDecrypterFactoryImpl.java
@@ -1,15 +1,19 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.crypto.StreamDecrypter;
-import org.briarproject.api.crypto.StreamDecrypterFactory;
-import org.briarproject.api.transport.StreamContext;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.StreamDecrypter;
+import org.briarproject.bramble.api.crypto.StreamDecrypterFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.transport.StreamContext;
import java.io.InputStream;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
import javax.inject.Provider;
+@Immutable
+@NotNullByDefault
class StreamDecrypterFactoryImpl implements StreamDecrypterFactory {
private final Provider cipherProvider;
diff --git a/briar-core/src/org/briarproject/crypto/StreamDecrypterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamDecrypterImpl.java
similarity index 76%
rename from briar-core/src/org/briarproject/crypto/StreamDecrypterImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamDecrypterImpl.java
index bfd961c92..22c522d3d 100644
--- a/briar-core/src/org/briarproject/crypto/StreamDecrypterImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamDecrypterImpl.java
@@ -1,26 +1,32 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.crypto.StreamDecrypter;
-import org.briarproject.util.ByteUtils;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.StreamDecrypter;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.ByteUtils;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
-import static org.briarproject.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.FRAME_HEADER_PLAINTEXT_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.FRAME_NONCE_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.MAC_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.MAX_FRAME_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.STREAM_HEADER_IV_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.STREAM_HEADER_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.STREAM_HEADER_NONCE_LENGTH;
-import static org.briarproject.util.ByteUtils.INT_64_BYTES;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.NotThreadSafe;
+import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_HEADER_PLAINTEXT_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_NONCE_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.MAC_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.MAX_FRAME_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_IV_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_NONCE_LENGTH;
+import static org.briarproject.bramble.util.ByteUtils.INT_64_BYTES;
+
+@NotThreadSafe
+@NotNullByDefault
class StreamDecrypterImpl implements StreamDecrypter {
private final InputStream in;
@@ -29,6 +35,7 @@ class StreamDecrypterImpl implements StreamDecrypter {
private final SecretKey streamHeaderKey;
private final byte[] frameNonce, frameHeader, frameCiphertext;
+ @Nullable
private SecretKey frameKey;
private long frameNumber;
private boolean finalFrame;
diff --git a/briar-core/src/org/briarproject/crypto/StreamEncrypterFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamEncrypterFactoryImpl.java
similarity index 68%
rename from briar-core/src/org/briarproject/crypto/StreamEncrypterFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamEncrypterFactoryImpl.java
index af5606d44..4feff3ece 100644
--- a/briar-core/src/org/briarproject/crypto/StreamEncrypterFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamEncrypterFactoryImpl.java
@@ -1,19 +1,23 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.crypto.StreamEncrypter;
-import org.briarproject.api.crypto.StreamEncrypterFactory;
-import org.briarproject.api.transport.StreamContext;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.StreamEncrypter;
+import org.briarproject.bramble.api.crypto.StreamEncrypterFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.transport.StreamContext;
import java.io.OutputStream;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
import javax.inject.Provider;
-import static org.briarproject.api.transport.TransportConstants.STREAM_HEADER_IV_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.TAG_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_IV_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
+@Immutable
+@NotNullByDefault
class StreamEncrypterFactoryImpl implements StreamEncrypterFactory {
private final CryptoComponent crypto;
diff --git a/briar-core/src/org/briarproject/crypto/StreamEncrypterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamEncrypterImpl.java
similarity index 76%
rename from briar-core/src/org/briarproject/crypto/StreamEncrypterImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamEncrypterImpl.java
index 955bfc7d3..cb708eb4c 100644
--- a/briar-core/src/org/briarproject/crypto/StreamEncrypterImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/StreamEncrypterImpl.java
@@ -1,32 +1,39 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.crypto.StreamEncrypter;
-import org.briarproject.util.ByteUtils;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.StreamEncrypter;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.ByteUtils;
import java.io.IOException;
import java.io.OutputStream;
import java.security.GeneralSecurityException;
-import static org.briarproject.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.FRAME_HEADER_PLAINTEXT_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.FRAME_NONCE_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.MAC_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.MAX_FRAME_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.STREAM_HEADER_IV_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.STREAM_HEADER_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.STREAM_HEADER_NONCE_LENGTH;
-import static org.briarproject.util.ByteUtils.INT_64_BYTES;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.NotThreadSafe;
+import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_HEADER_PLAINTEXT_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.FRAME_NONCE_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.MAC_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.MAX_FRAME_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_IV_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_HEADER_NONCE_LENGTH;
+import static org.briarproject.bramble.util.ByteUtils.INT_64_BYTES;
+
+@NotThreadSafe
+@NotNullByDefault
class StreamEncrypterImpl implements StreamEncrypter {
private final OutputStream out;
private final AuthenticatedCipher cipher;
private final SecretKey streamHeaderKey, frameKey;
private final long streamNumber;
- private final byte[] tag, streamHeaderIv;
+ @Nullable
+ private final byte[] tag;
+ private final byte[] streamHeaderIv;
private final byte[] frameNonce, frameHeader;
private final byte[] framePlaintext, frameCiphertext;
diff --git a/briar-core/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipher.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipher.java
similarity index 83%
rename from briar-core/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipher.java
rename to bramble-core/src/main/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipher.java
index 8143b696a..7bac148f2 100644
--- a/briar-core/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipher.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipher.java
@@ -1,6 +1,7 @@
-package org.briarproject.crypto;
+package org.briarproject.bramble.crypto;
-import org.briarproject.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.spongycastle.crypto.DataLengthException;
import org.spongycastle.crypto.engines.XSalsa20Engine;
import org.spongycastle.crypto.generators.Poly1305KeyGenerator;
@@ -10,7 +11,9 @@ import org.spongycastle.crypto.params.ParametersWithIV;
import java.security.GeneralSecurityException;
-import static org.briarproject.api.transport.TransportConstants.MAC_LENGTH;
+import javax.annotation.concurrent.NotThreadSafe;
+
+import static org.briarproject.bramble.api.transport.TransportConstants.MAC_LENGTH;
/**
* An authenticated cipher that uses XSalsa20 for encryption and Poly1305 for
@@ -20,14 +23,17 @@ import static org.briarproject.api.transport.TransportConstants.MAC_LENGTH;
*
* References:
*
- * - http://nacl.cr.yp.to/secretbox.html
- * - http://cr.yp.to/highspeed/naclcrypto-20090310.pdf
+ * - http://nacl.cr.yp.to/secretbox.html
+ * - http://cr.yp.to/highspeed/naclcrypto-20090310.pdf
*
*/
-public class XSalsa20Poly1305AuthenticatedCipher
- implements AuthenticatedCipher {
+@NotThreadSafe
+@NotNullByDefault
+class XSalsa20Poly1305AuthenticatedCipher implements AuthenticatedCipher {
- /** Length of the padding to be used to generate the Poly1305 key */
+ /**
+ * Length of the padding to be used to generate the Poly1305 key
+ */
private static final int SUBKEY_LENGTH = 32;
private final XSalsa20Engine xSalsa20Engine;
@@ -78,8 +84,10 @@ public class XSalsa20Poly1305AuthenticatedCipher
//
// To be NaCl-compatible, we reverse the subkey.
System.arraycopy(subKey, 0, zero, 0, SUBKEY_LENGTH / 2);
- System.arraycopy(subKey, SUBKEY_LENGTH / 2, subKey, 0, SUBKEY_LENGTH / 2);
- System.arraycopy(zero, 0, subKey, SUBKEY_LENGTH / 2, SUBKEY_LENGTH / 2);
+ System.arraycopy(subKey, SUBKEY_LENGTH / 2, subKey, 0,
+ SUBKEY_LENGTH / 2);
+ System.arraycopy(zero, 0, subKey, SUBKEY_LENGTH / 2,
+ SUBKEY_LENGTH / 2);
// Now we can clamp the correct part of the subkey
Poly1305KeyGenerator.clamp(subKey);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/data/BdfReaderFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/data/BdfReaderFactoryImpl.java
new file mode 100644
index 000000000..959c5582d
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/data/BdfReaderFactoryImpl.java
@@ -0,0 +1,26 @@
+package org.briarproject.bramble.data;
+
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import java.io.InputStream;
+
+import javax.annotation.concurrent.Immutable;
+
+import static org.briarproject.bramble.api.data.BdfReader.DEFAULT_NESTED_LIMIT;
+
+@Immutable
+@NotNullByDefault
+class BdfReaderFactoryImpl implements BdfReaderFactory {
+
+ @Override
+ public BdfReader createReader(InputStream in) {
+ return new BdfReaderImpl(in, DEFAULT_NESTED_LIMIT);
+ }
+
+ @Override
+ public BdfReader createReader(InputStream in, int nestedLimit) {
+ return new BdfReaderImpl(in, nestedLimit);
+ }
+}
diff --git a/briar-core/src/org/briarproject/data/BdfReaderImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/data/BdfReaderImpl.java
similarity index 84%
rename from briar-core/src/org/briarproject/data/BdfReaderImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/data/BdfReaderImpl.java
index d1fe25794..96f7adea7 100644
--- a/briar-core/src/org/briarproject/data/BdfReaderImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/data/BdfReaderImpl.java
@@ -1,35 +1,37 @@
-package org.briarproject.data;
+package org.briarproject.bramble.data;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.data.BdfDictionary;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.data.BdfReader;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.data.BdfDictionary;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import java.io.InputStream;
import javax.annotation.concurrent.NotThreadSafe;
-import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
-import static org.briarproject.data.Types.DICTIONARY;
-import static org.briarproject.data.Types.END;
-import static org.briarproject.data.Types.FALSE;
-import static org.briarproject.data.Types.FLOAT_64;
-import static org.briarproject.data.Types.INT_16;
-import static org.briarproject.data.Types.INT_32;
-import static org.briarproject.data.Types.INT_64;
-import static org.briarproject.data.Types.INT_8;
-import static org.briarproject.data.Types.LIST;
-import static org.briarproject.data.Types.NULL;
-import static org.briarproject.data.Types.RAW_16;
-import static org.briarproject.data.Types.RAW_32;
-import static org.briarproject.data.Types.RAW_8;
-import static org.briarproject.data.Types.STRING_16;
-import static org.briarproject.data.Types.STRING_32;
-import static org.briarproject.data.Types.STRING_8;
-import static org.briarproject.data.Types.TRUE;
+import static org.briarproject.bramble.api.data.BdfDictionary.NULL_VALUE;
+import static org.briarproject.bramble.data.Types.DICTIONARY;
+import static org.briarproject.bramble.data.Types.END;
+import static org.briarproject.bramble.data.Types.FALSE;
+import static org.briarproject.bramble.data.Types.FLOAT_64;
+import static org.briarproject.bramble.data.Types.INT_16;
+import static org.briarproject.bramble.data.Types.INT_32;
+import static org.briarproject.bramble.data.Types.INT_64;
+import static org.briarproject.bramble.data.Types.INT_8;
+import static org.briarproject.bramble.data.Types.LIST;
+import static org.briarproject.bramble.data.Types.NULL;
+import static org.briarproject.bramble.data.Types.RAW_16;
+import static org.briarproject.bramble.data.Types.RAW_32;
+import static org.briarproject.bramble.data.Types.RAW_8;
+import static org.briarproject.bramble.data.Types.STRING_16;
+import static org.briarproject.bramble.data.Types.STRING_32;
+import static org.briarproject.bramble.data.Types.STRING_8;
+import static org.briarproject.bramble.data.Types.TRUE;
@NotThreadSafe
+@NotNullByDefault
class BdfReaderImpl implements BdfReader {
private static final byte[] EMPTY_BUFFER = new byte[0];
@@ -108,37 +110,44 @@ class BdfReaderImpl implements BdfReader {
else throw new FormatException();
}
+ @Override
public boolean eof() throws IOException {
if (!hasLookahead) readLookahead();
return eof;
}
+ @Override
public void close() throws IOException {
in.close();
}
+ @Override
public boolean hasNull() throws IOException {
if (!hasLookahead) readLookahead();
if (eof) return false;
return next == NULL;
}
+ @Override
public void readNull() throws IOException {
if (!hasNull()) throw new FormatException();
hasLookahead = false;
}
+ @Override
public void skipNull() throws IOException {
if (!hasNull()) throw new FormatException();
hasLookahead = false;
}
+ @Override
public boolean hasBoolean() throws IOException {
if (!hasLookahead) readLookahead();
if (eof) return false;
return next == FALSE || next == TRUE;
}
+ @Override
public boolean readBoolean() throws IOException {
if (!hasBoolean()) throw new FormatException();
boolean bool = next == TRUE;
@@ -146,11 +155,13 @@ class BdfReaderImpl implements BdfReader {
return bool;
}
+ @Override
public void skipBoolean() throws IOException {
if (!hasBoolean()) throw new FormatException();
hasLookahead = false;
}
+ @Override
public boolean hasLong() throws IOException {
if (!hasLookahead) readLookahead();
if (eof) return false;
@@ -158,6 +169,7 @@ class BdfReaderImpl implements BdfReader {
next == INT_64;
}
+ @Override
public long readLong() throws IOException {
if (!hasLong()) throw new FormatException();
hasLookahead = false;
@@ -191,6 +203,7 @@ class BdfReaderImpl implements BdfReader {
return value;
}
+ @Override
public void skipLong() throws IOException {
if (!hasLong()) throw new FormatException();
if (next == INT_8) skip(1);
@@ -200,12 +213,14 @@ class BdfReaderImpl implements BdfReader {
hasLookahead = false;
}
+ @Override
public boolean hasDouble() throws IOException {
if (!hasLookahead) readLookahead();
if (eof) return false;
return next == FLOAT_64;
}
+ @Override
public double readDouble() throws IOException {
if (!hasDouble()) throw new FormatException();
hasLookahead = false;
@@ -215,18 +230,21 @@ class BdfReaderImpl implements BdfReader {
return Double.longBitsToDouble(value);
}
+ @Override
public void skipDouble() throws IOException {
if (!hasDouble()) throw new FormatException();
skip(8);
hasLookahead = false;
}
+ @Override
public boolean hasString() throws IOException {
if (!hasLookahead) readLookahead();
if (eof) return false;
return next == STRING_8 || next == STRING_16 || next == STRING_32;
}
+ @Override
public String readString(int maxLength) throws IOException {
if (!hasString()) throw new FormatException();
hasLookahead = false;
@@ -244,6 +262,7 @@ class BdfReaderImpl implements BdfReader {
throw new FormatException();
}
+ @Override
public void skipString() throws IOException {
if (!hasString()) throw new FormatException();
int length = readStringLength();
@@ -252,12 +271,14 @@ class BdfReaderImpl implements BdfReader {
hasLookahead = false;
}
+ @Override
public boolean hasRaw() throws IOException {
if (!hasLookahead) readLookahead();
if (eof) return false;
return next == RAW_8 || next == RAW_16 || next == RAW_32;
}
+ @Override
public byte[] readRaw(int maxLength) throws IOException {
if (!hasRaw()) throw new FormatException();
hasLookahead = false;
@@ -276,6 +297,7 @@ class BdfReaderImpl implements BdfReader {
throw new FormatException();
}
+ @Override
public void skipRaw() throws IOException {
if (!hasRaw()) throw new FormatException();
int length = readRawLength();
@@ -284,12 +306,14 @@ class BdfReaderImpl implements BdfReader {
hasLookahead = false;
}
+ @Override
public boolean hasList() throws IOException {
if (!hasLookahead) readLookahead();
if (eof) return false;
return next == LIST;
}
+ @Override
public BdfList readList() throws IOException {
return readList(1);
}
@@ -304,11 +328,13 @@ class BdfReaderImpl implements BdfReader {
return list;
}
+ @Override
public void readListStart() throws IOException {
if (!hasList()) throw new FormatException();
hasLookahead = false;
}
+ @Override
public boolean hasListEnd() throws IOException {
return hasEnd();
}
@@ -319,6 +345,7 @@ class BdfReaderImpl implements BdfReader {
return next == END;
}
+ @Override
public void readListEnd() throws IOException {
readEnd();
}
@@ -328,6 +355,7 @@ class BdfReaderImpl implements BdfReader {
hasLookahead = false;
}
+ @Override
public void skipList() throws IOException {
if (!hasList()) throw new FormatException();
hasLookahead = false;
@@ -335,12 +363,14 @@ class BdfReaderImpl implements BdfReader {
hasLookahead = false;
}
+ @Override
public boolean hasDictionary() throws IOException {
if (!hasLookahead) readLookahead();
if (eof) return false;
return next == DICTIONARY;
}
+ @Override
public BdfDictionary readDictionary() throws IOException {
return readDictionary(1);
}
@@ -356,19 +386,23 @@ class BdfReaderImpl implements BdfReader {
return dictionary;
}
+ @Override
public void readDictionaryStart() throws IOException {
if (!hasDictionary()) throw new FormatException();
hasLookahead = false;
}
+ @Override
public boolean hasDictionaryEnd() throws IOException {
return hasEnd();
}
+ @Override
public void readDictionaryEnd() throws IOException {
readEnd();
}
+ @Override
public void skipDictionary() throws IOException {
if (!hasDictionary()) throw new FormatException();
hasLookahead = false;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/data/BdfWriterFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/data/BdfWriterFactoryImpl.java
new file mode 100644
index 000000000..252ed843c
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/data/BdfWriterFactoryImpl.java
@@ -0,0 +1,19 @@
+package org.briarproject.bramble.data;
+
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import java.io.OutputStream;
+
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
+class BdfWriterFactoryImpl implements BdfWriterFactory {
+
+ @Override
+ public BdfWriter createWriter(OutputStream out) {
+ return new BdfWriterImpl(out);
+ }
+}
diff --git a/briar-core/src/org/briarproject/data/BdfWriterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/data/BdfWriterImpl.java
similarity index 70%
rename from briar-core/src/org/briarproject/data/BdfWriterImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/data/BdfWriterImpl.java
index 2b497dd02..e9979e9ff 100644
--- a/briar-core/src/org/briarproject/data/BdfWriterImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/data/BdfWriterImpl.java
@@ -1,8 +1,9 @@
-package org.briarproject.data;
+package org.briarproject.bramble.data;
-import org.briarproject.api.Bytes;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.data.BdfWriter;
+import org.briarproject.bramble.api.Bytes;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import java.io.OutputStream;
@@ -11,26 +12,30 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
-import static org.briarproject.data.Types.DICTIONARY;
-import static org.briarproject.data.Types.END;
-import static org.briarproject.data.Types.FALSE;
-import static org.briarproject.data.Types.FLOAT_64;
-import static org.briarproject.data.Types.INT_16;
-import static org.briarproject.data.Types.INT_32;
-import static org.briarproject.data.Types.INT_64;
-import static org.briarproject.data.Types.INT_8;
-import static org.briarproject.data.Types.LIST;
-import static org.briarproject.data.Types.NULL;
-import static org.briarproject.data.Types.RAW_16;
-import static org.briarproject.data.Types.RAW_32;
-import static org.briarproject.data.Types.RAW_8;
-import static org.briarproject.data.Types.STRING_16;
-import static org.briarproject.data.Types.STRING_32;
-import static org.briarproject.data.Types.STRING_8;
-import static org.briarproject.data.Types.TRUE;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.NotThreadSafe;
-// This class is not thread-safe
+import static org.briarproject.bramble.api.data.BdfDictionary.NULL_VALUE;
+import static org.briarproject.bramble.data.Types.DICTIONARY;
+import static org.briarproject.bramble.data.Types.END;
+import static org.briarproject.bramble.data.Types.FALSE;
+import static org.briarproject.bramble.data.Types.FLOAT_64;
+import static org.briarproject.bramble.data.Types.INT_16;
+import static org.briarproject.bramble.data.Types.INT_32;
+import static org.briarproject.bramble.data.Types.INT_64;
+import static org.briarproject.bramble.data.Types.INT_8;
+import static org.briarproject.bramble.data.Types.LIST;
+import static org.briarproject.bramble.data.Types.NULL;
+import static org.briarproject.bramble.data.Types.RAW_16;
+import static org.briarproject.bramble.data.Types.RAW_32;
+import static org.briarproject.bramble.data.Types.RAW_8;
+import static org.briarproject.bramble.data.Types.STRING_16;
+import static org.briarproject.bramble.data.Types.STRING_32;
+import static org.briarproject.bramble.data.Types.STRING_8;
+import static org.briarproject.bramble.data.Types.TRUE;
+
+@NotThreadSafe
+@NotNullByDefault
class BdfWriterImpl implements BdfWriter {
private final OutputStream out;
@@ -39,23 +44,28 @@ class BdfWriterImpl implements BdfWriter {
this.out = out;
}
+ @Override
public void flush() throws IOException {
out.flush();
}
+ @Override
public void close() throws IOException {
out.close();
}
+ @Override
public void writeNull() throws IOException {
out.write(NULL);
}
+ @Override
public void writeBoolean(boolean b) throws IOException {
if (b) out.write(TRUE);
else out.write(FALSE);
}
+ @Override
public void writeLong(long i) throws IOException {
if (i >= Byte.MIN_VALUE && i <= Byte.MAX_VALUE) {
out.write(INT_8);
@@ -95,11 +105,13 @@ class BdfWriterImpl implements BdfWriter {
out.write((byte) ((i << 56) >> 56));
}
+ @Override
public void writeDouble(double d) throws IOException {
out.write(FLOAT_64);
writeInt64(Double.doubleToRawLongBits(d));
}
+ @Override
public void writeString(String s) throws IOException {
byte[] b = s.getBytes("UTF-8");
if (b.length <= Byte.MAX_VALUE) {
@@ -115,6 +127,7 @@ class BdfWriterImpl implements BdfWriter {
out.write(b);
}
+ @Override
public void writeRaw(byte[] b) throws IOException {
if (b.length <= Byte.MAX_VALUE) {
out.write(RAW_8);
@@ -129,13 +142,14 @@ class BdfWriterImpl implements BdfWriter {
out.write(b);
}
+ @Override
public void writeList(Collection> c) throws IOException {
out.write(LIST);
for (Object o : c) writeObject(o);
out.write(END);
}
- private void writeObject(Object o) throws IOException {
+ private void writeObject(@Nullable Object o) throws IOException {
if (o == null || o == NULL_VALUE) writeNull();
else if (o instanceof Boolean) writeBoolean((Boolean) o);
else if (o instanceof Byte) writeLong((Byte) o);
@@ -152,14 +166,17 @@ class BdfWriterImpl implements BdfWriter {
else throw new FormatException();
}
+ @Override
public void writeListStart() throws IOException {
out.write(LIST);
}
+ @Override
public void writeListEnd() throws IOException {
out.write(END);
}
+ @Override
public void writeDictionary(Map, ?> m) throws IOException {
out.write(DICTIONARY);
for (Entry, ?> e : m.entrySet()) {
@@ -170,10 +187,12 @@ class BdfWriterImpl implements BdfWriter {
out.write(END);
}
+ @Override
public void writeDictionaryStart() throws IOException {
out.write(DICTIONARY);
}
+ @Override
public void writeDictionaryEnd() throws IOException {
out.write(END);
}
diff --git a/briar-core/src/org/briarproject/data/DataModule.java b/bramble-core/src/main/java/org/briarproject/bramble/data/DataModule.java
similarity index 67%
rename from briar-core/src/org/briarproject/data/DataModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/data/DataModule.java
index b83293104..7ddf2be0f 100644
--- a/briar-core/src/org/briarproject/data/DataModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/data/DataModule.java
@@ -1,10 +1,9 @@
-package org.briarproject.data;
+package org.briarproject.bramble.data;
-
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.data.MetadataEncoder;
-import org.briarproject.api.data.MetadataParser;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.data.MetadataEncoder;
+import org.briarproject.bramble.api.data.MetadataParser;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/data/MetadataEncoderImpl.java
similarity index 73%
rename from briar-core/src/org/briarproject/data/MetadataEncoderImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/data/MetadataEncoderImpl.java
index d6cc64b14..7605b1da7 100644
--- a/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/data/MetadataEncoderImpl.java
@@ -1,12 +1,13 @@
-package org.briarproject.data;
+package org.briarproject.bramble.data;
-import org.briarproject.api.Bytes;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.data.BdfDictionary;
-import org.briarproject.api.data.BdfWriter;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.data.MetadataEncoder;
-import org.briarproject.api.db.Metadata;
+import org.briarproject.bramble.api.Bytes;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.data.BdfDictionary;
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.data.MetadataEncoder;
+import org.briarproject.bramble.api.db.Metadata;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -14,11 +15,14 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
-import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
-import static org.briarproject.api.db.Metadata.REMOVE;
+import static org.briarproject.bramble.api.data.BdfDictionary.NULL_VALUE;
+import static org.briarproject.bramble.api.db.Metadata.REMOVE;
+@Immutable
+@NotNullByDefault
class MetadataEncoderImpl implements MetadataEncoder {
private final BdfWriterFactory bdfWriterFactory;
diff --git a/briar-core/src/org/briarproject/data/MetadataParserImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/data/MetadataParserImpl.java
similarity index 72%
rename from briar-core/src/org/briarproject/data/MetadataParserImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/data/MetadataParserImpl.java
index f387b2d0c..6dd44196c 100644
--- a/briar-core/src/org/briarproject/data/MetadataParserImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/data/MetadataParserImpl.java
@@ -1,21 +1,25 @@
-package org.briarproject.data;
+package org.briarproject.bramble.data;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.data.BdfDictionary;
-import org.briarproject.api.data.BdfReader;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.MetadataParser;
-import org.briarproject.api.db.Metadata;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.data.BdfDictionary;
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.MetadataParser;
+import org.briarproject.bramble.api.db.Metadata;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Map.Entry;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
-import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
-import static org.briarproject.api.db.Metadata.REMOVE;
+import static org.briarproject.bramble.api.data.BdfDictionary.NULL_VALUE;
+import static org.briarproject.bramble.api.db.Metadata.REMOVE;
+@Immutable
+@NotNullByDefault
class MetadataParserImpl implements MetadataParser {
private final BdfReaderFactory bdfReaderFactory;
diff --git a/briar-core/src/org/briarproject/data/Types.java b/bramble-core/src/main/java/org/briarproject/bramble/data/Types.java
similarity index 90%
rename from briar-core/src/org/briarproject/data/Types.java
rename to bramble-core/src/main/java/org/briarproject/bramble/data/Types.java
index 6cc701d28..e897cc6c3 100644
--- a/briar-core/src/org/briarproject/data/Types.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/data/Types.java
@@ -1,4 +1,4 @@
-package org.briarproject.data;
+package org.briarproject.bramble.data;
interface Types {
diff --git a/briar-core/src/org/briarproject/db/Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java
similarity index 93%
rename from briar-core/src/org/briarproject/db/Database.java
rename to bramble-core/src/main/java/org/briarproject/bramble/db/Database.java
index 0d2327200..93e7bf8c6 100644
--- a/briar-core/src/org/briarproject/db/Database.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java
@@ -1,28 +1,30 @@
-package org.briarproject.db;
+package org.briarproject.bramble.db;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Metadata;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.sync.ClientId;
-import org.briarproject.api.sync.Group;
-import org.briarproject.api.sync.Group.Visibility;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.sync.MessageStatus;
-import org.briarproject.api.sync.ValidationManager.State;
-import org.briarproject.api.transport.TransportKeys;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Metadata;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.Group.Visibility;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.MessageStatus;
+import org.briarproject.bramble.api.sync.ValidationManager.State;
+import org.briarproject.bramble.api.transport.TransportKeys;
import java.util.Collection;
import java.util.Map;
+import javax.annotation.Nullable;
+
/**
* A low-level interface to the database (DatabaseComponent provides a
* high-level interface). Most operations take a transaction argument, which is
@@ -30,6 +32,7 @@ import java.util.Map;
* terminated by calling either {@link #abortTransaction(T)} or
* {@link #commitTransaction(T)}, even if an exception is thrown.
*/
+@NotNullByDefault
interface Database {
/**
@@ -288,10 +291,8 @@ interface Database {
/**
* Returns the IDs and states of all dependencies of the given message.
- * Missing dependencies have the state {@link
- * org.briarproject.api.sync.ValidationManager.State UNKNOWN}.
- * Dependencies in other groups have the state {@link
- * org.briarproject.api.sync.ValidationManager.State INVALID}.
+ * Missing dependencies have the state {@link State UNKNOWN}.
+ * Dependencies in other groups have the state {@link State INVALID}.
* Note that these states are not set on the dependencies themselves; the
* returned states should only be taken in the context of the given message.
*
diff --git a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java
similarity index 87%
rename from briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java
index e09ed8f2c..8d9be1709 100644
--- a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java
@@ -1,56 +1,56 @@
-package org.briarproject.db;
+package org.briarproject.bramble.db;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.ContactExistsException;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Metadata;
-import org.briarproject.api.db.NoSuchContactException;
-import org.briarproject.api.db.NoSuchGroupException;
-import org.briarproject.api.db.NoSuchLocalAuthorException;
-import org.briarproject.api.db.NoSuchMessageException;
-import org.briarproject.api.db.NoSuchTransportException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.event.ContactAddedEvent;
-import org.briarproject.api.event.ContactRemovedEvent;
-import org.briarproject.api.event.ContactStatusChangedEvent;
-import org.briarproject.api.event.ContactVerifiedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.GroupAddedEvent;
-import org.briarproject.api.event.GroupRemovedEvent;
-import org.briarproject.api.event.GroupVisibilityUpdatedEvent;
-import org.briarproject.api.event.LocalAuthorAddedEvent;
-import org.briarproject.api.event.LocalAuthorRemovedEvent;
-import org.briarproject.api.event.MessageAddedEvent;
-import org.briarproject.api.event.MessageRequestedEvent;
-import org.briarproject.api.event.MessageSharedEvent;
-import org.briarproject.api.event.MessageStateChangedEvent;
-import org.briarproject.api.event.MessageToAckEvent;
-import org.briarproject.api.event.MessageToRequestEvent;
-import org.briarproject.api.event.MessagesAckedEvent;
-import org.briarproject.api.event.MessagesSentEvent;
-import org.briarproject.api.event.SettingsUpdatedEvent;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.lifecycle.ShutdownManager;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.sync.Ack;
-import org.briarproject.api.sync.ClientId;
-import org.briarproject.api.sync.Group;
-import org.briarproject.api.sync.Group.Visibility;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.sync.MessageStatus;
-import org.briarproject.api.sync.Offer;
-import org.briarproject.api.sync.Request;
-import org.briarproject.api.sync.ValidationManager.State;
-import org.briarproject.api.transport.TransportKeys;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.event.ContactAddedEvent;
+import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
+import org.briarproject.bramble.api.contact.event.ContactStatusChangedEvent;
+import org.briarproject.bramble.api.contact.event.ContactVerifiedEvent;
+import org.briarproject.bramble.api.db.ContactExistsException;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Metadata;
+import org.briarproject.bramble.api.db.NoSuchContactException;
+import org.briarproject.bramble.api.db.NoSuchGroupException;
+import org.briarproject.bramble.api.db.NoSuchLocalAuthorException;
+import org.briarproject.bramble.api.db.NoSuchMessageException;
+import org.briarproject.bramble.api.db.NoSuchTransportException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.identity.event.LocalAuthorAddedEvent;
+import org.briarproject.bramble.api.identity.event.LocalAuthorRemovedEvent;
+import org.briarproject.bramble.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent;
+import org.briarproject.bramble.api.sync.Ack;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.Group.Visibility;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.MessageStatus;
+import org.briarproject.bramble.api.sync.Offer;
+import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.api.sync.ValidationManager.State;
+import org.briarproject.bramble.api.sync.event.GroupAddedEvent;
+import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
+import org.briarproject.bramble.api.sync.event.GroupVisibilityUpdatedEvent;
+import org.briarproject.bramble.api.sync.event.MessageAddedEvent;
+import org.briarproject.bramble.api.sync.event.MessageRequestedEvent;
+import org.briarproject.bramble.api.sync.event.MessageSharedEvent;
+import org.briarproject.bramble.api.sync.event.MessageStateChangedEvent;
+import org.briarproject.bramble.api.sync.event.MessageToAckEvent;
+import org.briarproject.bramble.api.sync.event.MessageToRequestEvent;
+import org.briarproject.bramble.api.sync.event.MessagesAckedEvent;
+import org.briarproject.bramble.api.sync.event.MessagesSentEvent;
+import org.briarproject.bramble.api.transport.TransportKeys;
import java.util.ArrayList;
import java.util.Collection;
@@ -63,15 +63,19 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.sync.Group.Visibility.INVISIBLE;
-import static org.briarproject.api.sync.Group.Visibility.SHARED;
-import static org.briarproject.api.sync.ValidationManager.State.DELIVERED;
-import static org.briarproject.api.sync.ValidationManager.State.UNKNOWN;
-import static org.briarproject.db.DatabaseConstants.MAX_OFFERED_MESSAGES;
+import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE;
+import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.DELIVERED;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.UNKNOWN;
+import static org.briarproject.bramble.db.DatabaseConstants.MAX_OFFERED_MESSAGES;
+@ThreadSafe
+@NotNullByDefault
class DatabaseComponentImpl implements DatabaseComponent {
private static final Logger LOG =
@@ -228,7 +232,7 @@ class DatabaseComponentImpl implements DatabaseComponent {
db.addMessage(txn, m, state, shared);
for (ContactId c : db.getGroupVisibility(txn, m.getGroupId())) {
boolean offered = db.removeOfferedMessage(txn, c, m.getId());
- boolean seen = offered || c.equals(sender);
+ boolean seen = offered || (sender != null && c.equals(sender));
db.addStatus(txn, c, m.getId(), seen, seen);
}
}
diff --git a/briar-core/src/org/briarproject/db/DatabaseConstants.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseConstants.java
similarity index 54%
rename from briar-core/src/org/briarproject/db/DatabaseConstants.java
rename to bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseConstants.java
index 68e3ca1ef..080a8ce8e 100644
--- a/briar-core/src/org/briarproject/db/DatabaseConstants.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseConstants.java
@@ -1,6 +1,6 @@
-package org.briarproject.db;
+package org.briarproject.bramble.db;
-import org.briarproject.api.settings.Settings;
+import org.briarproject.bramble.api.settings.Settings;
interface DatabaseConstants {
@@ -12,20 +12,20 @@ interface DatabaseConstants {
int MAX_OFFERED_MESSAGES = 1000;
/**
- * The namespace of the {@link Settings Settings}
- * where the database schema version is stored.
+ * The namespace of the {@link Settings} where the database schema version
+ * is stored.
*/
String DB_SETTINGS_NAMESPACE = "db";
/**
- * The {@link Settings Settings} key under which the
- * database schema version is stored.
+ * The {@link Settings} key under which the database schema version is
+ * stored.
*/
String SCHEMA_VERSION_KEY = "schemaVersion";
/**
- * The {@link Settings Settings} key under which the
- * minimum supported database schema version is stored.
+ * The {@link Settings} key under which the minimum supported database
+ * schema version is stored.
*/
String MIN_SCHEMA_VERSION_KEY = "minSchemaVersion";
diff --git a/briar-core/src/org/briarproject/db/DatabaseExecutorModule.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseExecutorModule.java
similarity index 90%
rename from briar-core/src/org/briarproject/db/DatabaseExecutorModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseExecutorModule.java
index d0a3bae87..7865faf36 100644
--- a/briar-core/src/org/briarproject/db/DatabaseExecutorModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseExecutorModule.java
@@ -1,7 +1,7 @@
-package org.briarproject.db;
+package org.briarproject.bramble.db;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
diff --git a/briar-core/src/org/briarproject/db/DatabaseModule.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseModule.java
similarity index 62%
rename from briar-core/src/org/briarproject/db/DatabaseModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseModule.java
index 39b1e49db..a6f3a1174 100644
--- a/briar-core/src/org/briarproject/db/DatabaseModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseModule.java
@@ -1,10 +1,10 @@
-package org.briarproject.db;
+package org.briarproject.bramble.db;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.lifecycle.ShutdownManager;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.system.Clock;
import java.sql.Connection;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DbStateException.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DbStateException.java
new file mode 100644
index 000000000..83ed9a93f
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DbStateException.java
@@ -0,0 +1,9 @@
+package org.briarproject.bramble.db;
+
+import java.sql.SQLException;
+
+/**
+ * Thrown when the database is in an illegal state.
+ */
+class DbStateException extends SQLException {
+}
diff --git a/briar-core/src/org/briarproject/db/ExponentialBackoff.java b/bramble-core/src/main/java/org/briarproject/bramble/db/ExponentialBackoff.java
similarity index 96%
rename from briar-core/src/org/briarproject/db/ExponentialBackoff.java
rename to bramble-core/src/main/java/org/briarproject/bramble/db/ExponentialBackoff.java
index bbb5bc112..0e2f89bcf 100644
--- a/briar-core/src/org/briarproject/db/ExponentialBackoff.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/ExponentialBackoff.java
@@ -1,4 +1,4 @@
-package org.briarproject.db;
+package org.briarproject.bramble.db;
class ExponentialBackoff {
diff --git a/briar-core/src/org/briarproject/db/H2Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java
similarity index 79%
rename from briar-core/src/org/briarproject/db/H2Database.java
rename to bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java
index 27099f15b..32596eede 100644
--- a/briar-core/src/org/briarproject/db/H2Database.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java
@@ -1,9 +1,11 @@
-package org.briarproject.db;
+package org.briarproject.bramble.db;
-import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.system.Clock;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.util.StringUtils;
import java.io.File;
import java.sql.Connection;
@@ -13,7 +15,10 @@ import java.util.Properties;
import javax.inject.Inject;
-/** Contains all the H2-specific code for the database. */
+/**
+ * Contains all the H2-specific code for the database.
+ */
+@NotNullByDefault
class H2Database extends JdbcDatabase {
private static final String HASH_TYPE = "BINARY(32)";
@@ -78,12 +83,13 @@ class H2Database extends JdbcDatabase {
@Override
protected Connection createConnection() throws SQLException {
- byte[] key = config.getEncryptionKey().getBytes();
+ SecretKey key = config.getEncryptionKey();
if (key == null) throw new IllegalStateException();
Properties props = new Properties();
props.setProperty("user", "user");
// Separate the file password from the user password with a space
- props.put("password", StringUtils.toHexString(key) + " password");
+ String hex = StringUtils.toHexString(key.getBytes());
+ props.put("password", hex + " password");
return DriverManager.getConnection(url, props);
}
}
diff --git a/briar-core/src/org/briarproject/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java
similarity index 96%
rename from briar-core/src/org/briarproject/db/JdbcDatabase.java
rename to bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java
index 4131ec9f4..54238266b 100644
--- a/briar-core/src/org/briarproject/db/JdbcDatabase.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java
@@ -1,29 +1,29 @@
-package org.briarproject.db;
+package org.briarproject.bramble.db;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DbClosedException;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Metadata;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.sync.ClientId;
-import org.briarproject.api.sync.Group;
-import org.briarproject.api.sync.Group.Visibility;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.sync.MessageStatus;
-import org.briarproject.api.sync.ValidationManager.State;
-import org.briarproject.api.system.Clock;
-import org.briarproject.api.transport.IncomingKeys;
-import org.briarproject.api.transport.OutgoingKeys;
-import org.briarproject.api.transport.TransportKeys;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DbClosedException;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Metadata;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.Group.Visibility;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.MessageStatus;
+import org.briarproject.bramble.api.sync.ValidationManager.State;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.api.transport.IncomingKeys;
+import org.briarproject.bramble.api.transport.OutgoingKeys;
+import org.briarproject.bramble.api.transport.TransportKeys;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -45,24 +45,27 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.db.Metadata.REMOVE;
-import static org.briarproject.api.sync.Group.Visibility.INVISIBLE;
-import static org.briarproject.api.sync.Group.Visibility.SHARED;
-import static org.briarproject.api.sync.Group.Visibility.VISIBLE;
-import static org.briarproject.api.sync.ValidationManager.State.DELIVERED;
-import static org.briarproject.api.sync.ValidationManager.State.INVALID;
-import static org.briarproject.api.sync.ValidationManager.State.PENDING;
-import static org.briarproject.api.sync.ValidationManager.State.UNKNOWN;
-import static org.briarproject.db.DatabaseConstants.DB_SETTINGS_NAMESPACE;
-import static org.briarproject.db.DatabaseConstants.MIN_SCHEMA_VERSION_KEY;
-import static org.briarproject.db.DatabaseConstants.SCHEMA_VERSION_KEY;
-import static org.briarproject.db.ExponentialBackoff.calculateExpiry;
+import static org.briarproject.bramble.api.db.Metadata.REMOVE;
+import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE;
+import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
+import static org.briarproject.bramble.api.sync.Group.Visibility.VISIBLE;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.DELIVERED;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.INVALID;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.PENDING;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.UNKNOWN;
+import static org.briarproject.bramble.db.DatabaseConstants.DB_SETTINGS_NAMESPACE;
+import static org.briarproject.bramble.db.DatabaseConstants.MIN_SCHEMA_VERSION_KEY;
+import static org.briarproject.bramble.db.DatabaseConstants.SCHEMA_VERSION_KEY;
+import static org.briarproject.bramble.db.ExponentialBackoff.calculateExpiry;
/**
* A generic database implementation that can be used with any JDBC-compatible
* database library.
*/
+@NotNullByDefault
abstract class JdbcDatabase implements Database {
private static final int SCHEMA_VERSION = 29;
@@ -242,6 +245,7 @@ abstract class JdbcDatabase implements Database {
private int openConnections = 0; // Locking: connectionsLock
private boolean closed = false; // Locking: connectionsLock
+ @Nullable
protected abstract Connection createConnection() throws SQLException;
private final Lock connectionsLock = new ReentrantLock();
@@ -295,7 +299,7 @@ abstract class JdbcDatabase implements Database {
mergeSettings(txn, s, DB_SETTINGS_NAMESPACE);
}
- private void tryToClose(ResultSet rs) {
+ private void tryToClose(@Nullable ResultSet rs) {
try {
if (rs != null) rs.close();
} catch (SQLException e) {
@@ -303,7 +307,7 @@ abstract class JdbcDatabase implements Database {
}
}
- private void tryToClose(Statement s) {
+ private void tryToClose(@Nullable Statement s) {
try {
if (s != null) s.close();
} catch (SQLException e) {
@@ -1336,7 +1340,7 @@ abstract class JdbcDatabase implements Database {
MessageId lastMessageId = null;
while (rs.next()) {
MessageId messageId = new MessageId(rs.getBytes(1));
- if (!messageId.equals(lastMessageId)) {
+ if (lastMessageId == null || !messageId.equals(lastMessageId)) {
metadata = new Metadata();
all.put(messageId, metadata);
lastMessageId = messageId;
diff --git a/briar-core/src/org/briarproject/event/EventBusImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/event/EventBusImpl.java
similarity index 55%
rename from briar-core/src/org/briarproject/event/EventBusImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/event/EventBusImpl.java
index ca007e10a..f2b346847 100644
--- a/briar-core/src/org/briarproject/event/EventBusImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/event/EventBusImpl.java
@@ -1,25 +1,33 @@
-package org.briarproject.event;
+package org.briarproject.bramble.event;
+
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.util.Collection;
import java.util.concurrent.CopyOnWriteArrayList;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
+import javax.annotation.concurrent.ThreadSafe;
+@ThreadSafe
+@NotNullByDefault
class EventBusImpl implements EventBus {
private final Collection listeners =
new CopyOnWriteArrayList();
+ @Override
public void addListener(EventListener l) {
listeners.add(l);
}
+ @Override
public void removeListener(EventListener l) {
listeners.remove(l);
}
+ @Override
public void broadcast(Event e) {
for (EventListener l : listeners) l.eventOccurred(e);
}
diff --git a/briar-core/src/org/briarproject/event/EventModule.java b/bramble-core/src/main/java/org/briarproject/bramble/event/EventModule.java
similarity index 68%
rename from briar-core/src/org/briarproject/event/EventModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/event/EventModule.java
index e7f92f037..3cd8bcdef 100644
--- a/briar-core/src/org/briarproject/event/EventModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/event/EventModule.java
@@ -1,6 +1,6 @@
-package org.briarproject.event;
+package org.briarproject.bramble.event;
-import org.briarproject.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventBus;
import javax.inject.Singleton;
diff --git a/briar-core/src/org/briarproject/identity/AuthorFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/identity/AuthorFactoryImpl.java
similarity index 65%
rename from briar-core/src/org/briarproject/identity/AuthorFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/identity/AuthorFactoryImpl.java
index b745f5e00..5d4dc0de6 100644
--- a/briar-core/src/org/briarproject/identity/AuthorFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/identity/AuthorFactoryImpl.java
@@ -1,19 +1,23 @@
-package org.briarproject.identity;
+package org.briarproject.bramble.identity;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.data.BdfWriter;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.AuthorFactory;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorFactory;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.system.Clock;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
+@Immutable
+@NotNullByDefault
class AuthorFactoryImpl implements AuthorFactory {
private final CryptoComponent crypto;
@@ -28,10 +32,12 @@ class AuthorFactoryImpl implements AuthorFactory {
this.clock = clock;
}
+ @Override
public Author createAuthor(String name, byte[] publicKey) {
return new Author(getId(name, publicKey), name, publicKey);
}
+ @Override
public LocalAuthor createLocalAuthor(String name, byte[] publicKey,
byte[] privateKey) {
return new LocalAuthor(getId(name, publicKey), name, publicKey,
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/identity/AuthorReader.java b/bramble-core/src/main/java/org/briarproject/bramble/identity/AuthorReader.java
new file mode 100644
index 000000000..fbef75938
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/identity/AuthorReader.java
@@ -0,0 +1,36 @@
+package org.briarproject.bramble.identity;
+
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.data.ObjectReader;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import java.io.IOException;
+
+import javax.annotation.concurrent.Immutable;
+
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+
+@Immutable
+@NotNullByDefault
+class AuthorReader implements ObjectReader {
+
+ private final AuthorFactory authorFactory;
+
+ AuthorReader(AuthorFactory authorFactory) {
+ this.authorFactory = authorFactory;
+ }
+
+ @Override
+ public Author readObject(BdfReader r) throws IOException {
+ r.readListStart();
+ String name = r.readString(MAX_AUTHOR_NAME_LENGTH);
+ if (name.length() == 0) throw new FormatException();
+ byte[] publicKey = r.readRaw(MAX_PUBLIC_KEY_LENGTH);
+ r.readListEnd();
+ return authorFactory.createAuthor(name, publicKey);
+ }
+}
diff --git a/briar-core/src/org/briarproject/identity/IdentityManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityManagerImpl.java
similarity index 59%
rename from briar-core/src/org/briarproject/identity/IdentityManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityManagerImpl.java
index e01e13c4d..11e8220c9 100644
--- a/briar-core/src/org/briarproject/identity/IdentityManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityManagerImpl.java
@@ -1,31 +1,38 @@
-package org.briarproject.identity;
+package org.briarproject.bramble.identity;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.identity.Author.Status;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.identity.Author.Status;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.util.Collection;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
-import static org.briarproject.api.identity.Author.Status.OURSELVES;
-import static org.briarproject.api.identity.Author.Status.UNKNOWN;
-import static org.briarproject.api.identity.Author.Status.UNVERIFIED;
-import static org.briarproject.api.identity.Author.Status.VERIFIED;
+import static org.briarproject.bramble.api.identity.Author.Status.OURSELVES;
+import static org.briarproject.bramble.api.identity.Author.Status.UNKNOWN;
+import static org.briarproject.bramble.api.identity.Author.Status.UNVERIFIED;
+import static org.briarproject.bramble.api.identity.Author.Status.VERIFIED;
+@ThreadSafe
+@NotNullByDefault
class IdentityManagerImpl implements IdentityManager {
- private final DatabaseComponent db;
private static final Logger LOG =
Logger.getLogger(IdentityManagerImpl.class.getName());
+ private final DatabaseComponent db;
+
// The local author is immutable so we can cache it
+ @Nullable
private volatile LocalAuthor cachedAuthor;
@Inject
@@ -34,7 +41,8 @@ class IdentityManagerImpl implements IdentityManager {
}
@Override
- public void registerLocalAuthor(LocalAuthor localAuthor) throws DbException {
+ public void registerLocalAuthor(LocalAuthor localAuthor)
+ throws DbException {
Transaction txn = db.startTransaction(false);
try {
db.addLocalAuthor(txn, localAuthor);
@@ -58,7 +66,9 @@ class IdentityManagerImpl implements IdentityManager {
db.endTransaction(txn);
}
}
- return cachedAuthor;
+ LocalAuthor cached = cachedAuthor;
+ if (cached == null) throw new AssertionError();
+ return cached;
}
@@ -68,10 +78,12 @@ class IdentityManagerImpl implements IdentityManager {
cachedAuthor = loadLocalAuthor(txn);
LOG.info("Local author loaded");
}
- return cachedAuthor;
+ LocalAuthor cached = cachedAuthor;
+ if (cached == null) throw new AssertionError();
+ return cached;
}
- private LocalAuthor loadLocalAuthor(Transaction txn) throws DbException{
+ private LocalAuthor loadLocalAuthor(Transaction txn) throws DbException {
return db.getLocalAuthors(txn).iterator().next();
}
diff --git a/briar-core/src/org/briarproject/identity/IdentityModule.java b/bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityModule.java
similarity index 57%
rename from briar-core/src/org/briarproject/identity/IdentityModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityModule.java
index 3caa856fc..3fe6b9ab2 100644
--- a/briar-core/src/org/briarproject/identity/IdentityModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityModule.java
@@ -1,13 +1,13 @@
-package org.briarproject.identity;
+package org.briarproject.bramble.identity;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.data.ObjectReader;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.AuthorFactory;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.data.ObjectReader;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorFactory;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.system.Clock;
import javax.inject.Inject;
import javax.inject.Singleton;
diff --git a/briar-core/src/org/briarproject/invitation/AliceConnector.java b/bramble-core/src/main/java/org/briarproject/bramble/invitation/AliceConnector.java
similarity index 79%
rename from briar-core/src/org/briarproject/invitation/AliceConnector.java
rename to bramble-core/src/main/java/org/briarproject/bramble/invitation/AliceConnector.java
index 73e49a132..871db9b4c 100644
--- a/briar-core/src/org/briarproject/invitation/AliceConnector.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/invitation/AliceConnector.java
@@ -1,16 +1,17 @@
-package org.briarproject.invitation;
+package org.briarproject.bramble.invitation;
-import org.briarproject.api.contact.ContactExchangeTask;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.data.BdfReader;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.BdfWriter;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.contact.ContactExchangeTask;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.PseudoRandom;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
import java.io.IOException;
import java.io.InputStream;
@@ -24,6 +25,7 @@ import static java.util.logging.Level.WARNING;
/**
* A connection thread for the peer being Alice in the invitation protocol.
*/
+@NotNullByDefault
class AliceConnector extends Connector {
private static final Logger LOG =
@@ -111,8 +113,7 @@ class AliceConnector extends Connector {
// Confirmation succeeded - upgrade to a secure connection
if (LOG.isLoggable(INFO))
LOG.info(pluginName + " confirmation succeeded");
- contactExchangeTask
- .startExchange(group, localAuthor, master, conn, plugin.getId(),
- true);
+ contactExchangeTask.startExchange(group, localAuthor, master, conn,
+ plugin.getId(), true);
}
}
diff --git a/briar-core/src/org/briarproject/invitation/BobConnector.java b/bramble-core/src/main/java/org/briarproject/bramble/invitation/BobConnector.java
similarity index 79%
rename from briar-core/src/org/briarproject/invitation/BobConnector.java
rename to bramble-core/src/main/java/org/briarproject/bramble/invitation/BobConnector.java
index 80cca6250..d87a9334a 100644
--- a/briar-core/src/org/briarproject/invitation/BobConnector.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/invitation/BobConnector.java
@@ -1,17 +1,17 @@
-package org.briarproject.invitation;
+package org.briarproject.bramble.invitation;
-import org.briarproject.api.contact.ContactExchangeTask;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.data.BdfReader;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.BdfWriter;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.contact.ContactExchangeTask;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.PseudoRandom;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
import java.io.IOException;
import java.io.InputStream;
@@ -25,6 +25,7 @@ import static java.util.logging.Level.WARNING;
/**
* A connection thread for the peer being Bob in the invitation protocol.
*/
+@NotNullByDefault
class BobConnector extends Connector {
private static final Logger LOG =
@@ -112,8 +113,7 @@ class BobConnector extends Connector {
// Confirmation succeeded - upgrade to a secure connection
if (LOG.isLoggable(INFO))
LOG.info(pluginName + " confirmation succeeded");
- contactExchangeTask
- .startExchange(group, localAuthor, master, conn, plugin.getId(),
- false);
+ contactExchangeTask.startExchange(group, localAuthor, master, conn,
+ plugin.getId(), false);
}
}
diff --git a/briar-core/src/org/briarproject/invitation/Connector.java b/bramble-core/src/main/java/org/briarproject/bramble/invitation/Connector.java
similarity index 66%
rename from briar-core/src/org/briarproject/invitation/Connector.java
rename to bramble-core/src/main/java/org/briarproject/bramble/invitation/Connector.java
index 6afcedf06..0fb91aa8a 100644
--- a/briar-core/src/org/briarproject/invitation/Connector.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/invitation/Connector.java
@@ -1,32 +1,36 @@
-package org.briarproject.invitation;
+package org.briarproject.bramble.invitation;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.contact.ContactExchangeTask;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.crypto.KeyParser;
-import org.briarproject.api.crypto.MessageDigest;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.data.BdfReader;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.BdfWriter;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.contact.ContactExchangeTask;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.KeyPair;
+import org.briarproject.bramble.api.crypto.KeyParser;
+import org.briarproject.bramble.api.crypto.MessageDigest;
+import org.briarproject.bramble.api.crypto.PseudoRandom;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
-import static org.briarproject.api.invitation.InvitationConstants.CONNECTION_TIMEOUT;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.bramble.api.invitation.InvitationConstants.CONNECTION_TIMEOUT;
// FIXME: This class has way too many dependencies
+@NotNullByDefault
abstract class Connector extends Thread {
private static final Logger LOG =
@@ -65,21 +69,21 @@ abstract class Connector extends Thread {
messageDigest = crypto.getMessageDigest();
}
- protected DuplexTransportConnection createInvitationConnection(
- boolean alice) {
+ @Nullable
+ DuplexTransportConnection createInvitationConnection(boolean alice) {
if (LOG.isLoggable(INFO))
LOG.info(pluginName + " creating invitation connection");
return plugin.createInvitationConnection(random, CONNECTION_TIMEOUT,
alice);
}
- protected void sendPublicKeyHash(BdfWriter w) throws IOException {
+ void sendPublicKeyHash(BdfWriter w) throws IOException {
w.writeRaw(messageDigest.digest(keyPair.getPublic().getEncoded()));
w.flush();
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent hash");
}
- protected byte[] receivePublicKeyHash(BdfReader r) throws IOException {
+ byte[] receivePublicKeyHash(BdfReader r) throws IOException {
int hashLength = messageDigest.getDigestLength();
byte[] b = r.readRaw(hashLength);
if (b.length < hashLength) throw new FormatException();
@@ -87,14 +91,14 @@ abstract class Connector extends Thread {
return b;
}
- protected void sendPublicKey(BdfWriter w) throws IOException {
+ void sendPublicKey(BdfWriter w) throws IOException {
byte[] key = keyPair.getPublic().getEncoded();
w.writeRaw(key);
w.flush();
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent key");
}
- protected byte[] receivePublicKey(BdfReader r)
+ byte[] receivePublicKey(BdfReader r)
throws GeneralSecurityException, IOException {
byte[] b = r.readRaw(MAX_PUBLIC_KEY_LENGTH);
keyParser.parsePublicKey(b);
@@ -102,8 +106,8 @@ abstract class Connector extends Thread {
return b;
}
- protected SecretKey deriveMasterSecret(byte[] hash, byte[] key,
- boolean alice) throws GeneralSecurityException {
+ SecretKey deriveMasterSecret(byte[] hash, byte[] key, boolean alice)
+ throws GeneralSecurityException {
// Check that the hash matches the key
if (!Arrays.equals(hash, messageDigest.digest(key))) {
if (LOG.isLoggable(INFO))
@@ -116,15 +120,14 @@ abstract class Connector extends Thread {
return crypto.deriveMasterSecret(key, keyPair, alice);
}
- protected void sendConfirmation(BdfWriter w, boolean confirmed)
- throws IOException {
+ void sendConfirmation(BdfWriter w, boolean confirmed) throws IOException {
w.writeBoolean(confirmed);
w.flush();
if (LOG.isLoggable(INFO))
LOG.info(pluginName + " sent confirmation: " + confirmed);
}
- protected boolean receiveConfirmation(BdfReader r) throws IOException {
+ boolean receiveConfirmation(BdfReader r) throws IOException {
boolean confirmed = r.readBoolean();
if (LOG.isLoggable(INFO))
LOG.info(pluginName + " received confirmation: " + confirmed);
diff --git a/briar-core/src/org/briarproject/invitation/ConnectorGroup.java b/bramble-core/src/main/java/org/briarproject/bramble/invitation/ConnectorGroup.java
similarity index 83%
rename from briar-core/src/org/briarproject/invitation/ConnectorGroup.java
rename to bramble-core/src/main/java/org/briarproject/bramble/invitation/ConnectorGroup.java
index a88163f52..103dd03c6 100644
--- a/briar-core/src/org/briarproject/invitation/ConnectorGroup.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/invitation/ConnectorGroup.java
@@ -1,20 +1,22 @@
-package org.briarproject.invitation;
+package org.briarproject.bramble.invitation;
-import org.briarproject.api.contact.ContactExchangeListener;
-import org.briarproject.api.contact.ContactExchangeTask;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.invitation.InvitationListener;
-import org.briarproject.api.invitation.InvitationState;
-import org.briarproject.api.invitation.InvitationTask;
-import org.briarproject.api.plugins.PluginManager;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.contact.ContactExchangeListener;
+import org.briarproject.bramble.api.contact.ContactExchangeTask;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.PseudoRandom;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.invitation.InvitationListener;
+import org.briarproject.bramble.api.invitation.InvitationState;
+import org.briarproject.bramble.api.invitation.InvitationTask;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
import java.util.ArrayList;
import java.util.Collection;
@@ -27,11 +29,13 @@ import java.util.logging.Logger;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.invitation.InvitationConstants.CONFIRMATION_TIMEOUT;
+import static org.briarproject.bramble.api.invitation.InvitationConstants.CONFIRMATION_TIMEOUT;
/**
* A task consisting of one or more parallel connection attempts.
*/
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class ConnectorGroup extends Thread implements InvitationTask,
ContactExchangeListener {
@@ -58,7 +62,8 @@ class ConnectorGroup extends Thread implements InvitationTask,
private String remoteName = null;
ConnectorGroup(CryptoComponent crypto, BdfReaderFactory bdfReaderFactory,
- BdfWriterFactory bdfWriterFactory, ContactExchangeTask contactExchangeTask,
+ BdfWriterFactory bdfWriterFactory,
+ ContactExchangeTask contactExchangeTask,
IdentityManager identityManager, PluginManager pluginManager,
int localInvitationCode, int remoteInvitationCode) {
super("ConnectorGroup");
@@ -75,6 +80,7 @@ class ConnectorGroup extends Thread implements InvitationTask,
localConfirmationLatch = new CountDownLatch(1);
}
+ @Override
public InvitationState addListener(InvitationListener l) {
lock.lock();
try {
@@ -89,10 +95,12 @@ class ConnectorGroup extends Thread implements InvitationTask,
}
}
+ @Override
public void removeListener(InvitationListener l) {
listeners.remove(l);
}
+ @Override
public void connect() {
start();
}
@@ -165,6 +173,7 @@ class ConnectorGroup extends Thread implements InvitationTask,
contactExchangeTask, this, plugin, localAuthor, random);
}
+ @Override
public void localConfirmationSucceeded() {
lock.lock();
try {
@@ -176,6 +185,7 @@ class ConnectorGroup extends Thread implements InvitationTask,
localConfirmationLatch.countDown();
}
+ @Override
public void localConfirmationFailed() {
lock.lock();
try {
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/invitation/InvitationModule.java b/bramble-core/src/main/java/org/briarproject/bramble/invitation/InvitationModule.java
new file mode 100644
index 000000000..0c6dbcfac
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/invitation/InvitationModule.java
@@ -0,0 +1,16 @@
+package org.briarproject.bramble.invitation;
+
+import org.briarproject.bramble.api.invitation.InvitationTaskFactory;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class InvitationModule {
+
+ @Provides
+ InvitationTaskFactory provideInvitationTaskFactory(
+ InvitationTaskFactoryImpl invitationTaskFactory) {
+ return invitationTaskFactory;
+ }
+}
diff --git a/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/invitation/InvitationTaskFactoryImpl.java
similarity index 61%
rename from briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/invitation/InvitationTaskFactoryImpl.java
index 5c18deddc..19bd8c6b9 100644
--- a/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/invitation/InvitationTaskFactoryImpl.java
@@ -1,16 +1,20 @@
-package org.briarproject.invitation;
+package org.briarproject.bramble.invitation;
-import org.briarproject.api.contact.ContactExchangeTask;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.invitation.InvitationTask;
-import org.briarproject.api.invitation.InvitationTaskFactory;
-import org.briarproject.api.plugins.PluginManager;
+import org.briarproject.bramble.api.contact.ContactExchangeTask;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.invitation.InvitationTask;
+import org.briarproject.bramble.api.invitation.InvitationTaskFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
+@Immutable
+@NotNullByDefault
class InvitationTaskFactoryImpl implements InvitationTaskFactory {
private final CryptoComponent crypto;
@@ -34,6 +38,7 @@ class InvitationTaskFactoryImpl implements InvitationTaskFactory {
this.pluginManager = pluginManager;
}
+ @Override
public InvitationTask createTask(int localCode, int remoteCode) {
return new ConnectorGroup(crypto, bdfReaderFactory, bdfWriterFactory,
contactExchangeTask, identityManager, pluginManager,
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/AbortException.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/AbortException.java
new file mode 100644
index 000000000..5cae0d746
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/AbortException.java
@@ -0,0 +1,24 @@
+package org.briarproject.bramble.keyagreement;
+
+class AbortException extends Exception {
+
+ boolean receivedAbort;
+
+ AbortException() {
+ this(false);
+ }
+
+ AbortException(boolean receivedAbort) {
+ super();
+ this.receivedAbort = receivedAbort;
+ }
+
+ AbortException(Exception e) {
+ this(e, false);
+ }
+
+ private AbortException(Exception e, boolean receivedAbort) {
+ super(e);
+ this.receivedAbort = receivedAbort;
+ }
+}
diff --git a/briar-core/src/org/briarproject/keyagreement/KeyAgreementConnector.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java
similarity index 85%
rename from briar-core/src/org/briarproject/keyagreement/KeyAgreementConnector.java
rename to bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java
index ee5c0e10d..ad3015bb4 100644
--- a/briar-core/src/org/briarproject/keyagreement/KeyAgreementConnector.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java
@@ -1,18 +1,19 @@
-package org.briarproject.keyagreement;
+package org.briarproject.bramble.keyagreement;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.keyagreement.KeyAgreementConnection;
-import org.briarproject.api.keyagreement.KeyAgreementListener;
-import org.briarproject.api.keyagreement.Payload;
-import org.briarproject.api.keyagreement.TransportDescriptor;
-import org.briarproject.api.plugins.Plugin;
-import org.briarproject.api.plugins.PluginManager;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.KeyPair;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementConnection;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementListener;
+import org.briarproject.bramble.api.keyagreement.Payload;
+import org.briarproject.bramble.api.keyagreement.TransportDescriptor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.Plugin;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.system.Clock;
import java.io.IOException;
import java.io.InputStream;
@@ -26,11 +27,14 @@ import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.Future;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.CONNECTION_TIMEOUT;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.CONNECTION_TIMEOUT;
+@NotNullByDefault
class KeyAgreementConnector {
interface Callbacks {
@@ -94,6 +98,7 @@ class KeyAgreementConnector {
listeners.clear();
}
+ @Nullable
public KeyAgreementTransport connect(Payload remotePayload,
boolean alice) {
// Let the listeners know if we are Alice
@@ -140,7 +145,7 @@ class KeyAgreementConnector {
}
}
- private void closePending(KeyAgreementConnection chosen) {
+ private void closePending(@Nullable KeyAgreementConnection chosen) {
for (Future f : pending) {
try {
if (f.cancel(true))
diff --git a/briar-core/src/org/briarproject/keyagreement/KeyAgreementModule.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementModule.java
similarity index 55%
rename from briar-core/src/org/briarproject/keyagreement/KeyAgreementModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementModule.java
index 9f6a52902..9875387db 100644
--- a/briar-core/src/org/briarproject/keyagreement/KeyAgreementModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementModule.java
@@ -1,15 +1,15 @@
-package org.briarproject.keyagreement;
+package org.briarproject.bramble.keyagreement;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.keyagreement.KeyAgreementTaskFactory;
-import org.briarproject.api.keyagreement.PayloadEncoder;
-import org.briarproject.api.keyagreement.PayloadParser;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.plugins.PluginManager;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementTaskFactory;
+import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
+import org.briarproject.bramble.api.keyagreement.PayloadParser;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.system.Clock;
import java.util.concurrent.Executor;
diff --git a/briar-core/src/org/briarproject/keyagreement/KeyAgreementProtocol.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocol.java
similarity index 89%
rename from briar-core/src/org/briarproject/keyagreement/KeyAgreementProtocol.java
rename to bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocol.java
index f67a85ecd..1c56c2d14 100644
--- a/briar-core/src/org/briarproject/keyagreement/KeyAgreementProtocol.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocol.java
@@ -1,10 +1,11 @@
-package org.briarproject.keyagreement;
+package org.briarproject.bramble.keyagreement;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.keyagreement.Payload;
-import org.briarproject.api.keyagreement.PayloadEncoder;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.KeyPair;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.keyagreement.Payload;
+import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import java.security.GeneralSecurityException;
@@ -44,6 +45,7 @@ import java.util.Arrays;
* Derive master
*
*/
+@NotNullByDefault
class KeyAgreementProtocol {
interface Callbacks {
@@ -80,7 +82,7 @@ class KeyAgreementProtocol {
*
* @return the negotiated master secret.
* @throws AbortException when the protocol may have been tampered with.
- * @throws IOException for all other other connection errors.
+ * @throws IOException for all other other connection errors.
*/
SecretKey perform() throws AbortException, IOException {
try {
diff --git a/briar-core/src/org/briarproject/keyagreement/KeyAgreementTaskFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementTaskFactoryImpl.java
similarity index 53%
rename from briar-core/src/org/briarproject/keyagreement/KeyAgreementTaskFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementTaskFactoryImpl.java
index aafde49b3..4d9dc00cf 100644
--- a/briar-core/src/org/briarproject/keyagreement/KeyAgreementTaskFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementTaskFactoryImpl.java
@@ -1,23 +1,22 @@
-package org.briarproject.keyagreement;
+package org.briarproject.bramble.keyagreement;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.KeyAgreementAbortedEvent;
-import org.briarproject.api.event.KeyAgreementFailedEvent;
-import org.briarproject.api.event.KeyAgreementFinishedEvent;
-import org.briarproject.api.keyagreement.KeyAgreementTask;
-import org.briarproject.api.keyagreement.KeyAgreementTaskFactory;
-import org.briarproject.api.keyagreement.PayloadEncoder;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.plugins.PluginManager;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementTask;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementTaskFactory;
+import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.system.Clock;
import java.util.concurrent.Executor;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
+@Immutable
+@NotNullByDefault
class KeyAgreementTaskFactoryImpl implements KeyAgreementTaskFactory {
private final Clock clock;
@@ -39,7 +38,8 @@ class KeyAgreementTaskFactoryImpl implements KeyAgreementTaskFactory {
this.pluginManager = pluginManager;
}
- public KeyAgreementTask getTask() {
+ @Override
+ public KeyAgreementTask createTask() {
return new KeyAgreementTaskImpl(clock, crypto, eventBus, payloadEncoder,
pluginManager, ioExecutor);
}
diff --git a/briar-core/src/org/briarproject/keyagreement/KeyAgreementTaskImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementTaskImpl.java
similarity index 73%
rename from briar-core/src/org/briarproject/keyagreement/KeyAgreementTaskImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementTaskImpl.java
index e50267698..af180b89e 100644
--- a/briar-core/src/org/briarproject/keyagreement/KeyAgreementTaskImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementTaskImpl.java
@@ -1,21 +1,23 @@
-package org.briarproject.keyagreement;
+package org.briarproject.bramble.keyagreement;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.KeyAgreementAbortedEvent;
-import org.briarproject.api.event.KeyAgreementFailedEvent;
-import org.briarproject.api.event.KeyAgreementFinishedEvent;
-import org.briarproject.api.event.KeyAgreementListeningEvent;
-import org.briarproject.api.event.KeyAgreementStartedEvent;
-import org.briarproject.api.event.KeyAgreementWaitingEvent;
-import org.briarproject.api.keyagreement.KeyAgreementResult;
-import org.briarproject.api.keyagreement.KeyAgreementTask;
-import org.briarproject.api.keyagreement.Payload;
-import org.briarproject.api.keyagreement.PayloadEncoder;
-import org.briarproject.api.plugins.PluginManager;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.KeyPair;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementResult;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementTask;
+import org.briarproject.bramble.api.keyagreement.Payload;
+import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementAbortedEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementFailedEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementFinishedEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementListeningEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementStartedEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementWaitingEvent;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.system.Clock;
import java.io.IOException;
import java.util.concurrent.Executor;
@@ -23,6 +25,8 @@ import java.util.logging.Logger;
import static java.util.logging.Level.WARNING;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class KeyAgreementTaskImpl extends Thread implements
KeyAgreementTask, KeyAgreementConnector.Callbacks,
KeyAgreementProtocol.Callbacks {
diff --git a/briar-core/src/org/briarproject/keyagreement/KeyAgreementTransport.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementTransport.java
similarity index 69%
rename from briar-core/src/org/briarproject/keyagreement/KeyAgreementTransport.java
rename to bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementTransport.java
index 25a18962b..2044f2b65 100644
--- a/briar-core/src/org/briarproject/keyagreement/KeyAgreementTransport.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementTransport.java
@@ -1,9 +1,10 @@
-package org.briarproject.keyagreement;
+package org.briarproject.bramble.keyagreement;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.keyagreement.KeyAgreementConnection;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.util.ByteUtils;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementConnection;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.util.ByteUtils;
import java.io.EOFException;
import java.io.IOException;
@@ -12,16 +13,17 @@ import java.io.OutputStream;
import java.util.logging.Logger;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.PROTOCOL_VERSION;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.RECORD_HEADER_LENGTH;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.RECORD_HEADER_PAYLOAD_LENGTH_OFFSET;
-import static org.briarproject.api.keyagreement.RecordTypes.ABORT;
-import static org.briarproject.api.keyagreement.RecordTypes.CONFIRM;
-import static org.briarproject.api.keyagreement.RecordTypes.KEY;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.PROTOCOL_VERSION;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.RECORD_HEADER_LENGTH;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.RECORD_HEADER_PAYLOAD_LENGTH_OFFSET;
+import static org.briarproject.bramble.api.keyagreement.RecordTypes.ABORT;
+import static org.briarproject.bramble.api.keyagreement.RecordTypes.CONFIRM;
+import static org.briarproject.bramble.api.keyagreement.RecordTypes.KEY;
/**
* Handles the sending and receiving of BQP records.
*/
+@NotNullByDefault
class KeyAgreementTransport {
private static final Logger LOG =
@@ -31,7 +33,7 @@ class KeyAgreementTransport {
private final InputStream in;
private final OutputStream out;
- public KeyAgreementTransport(KeyAgreementConnection kac)
+ KeyAgreementTransport(KeyAgreementConnection kac)
throws IOException {
this.kac = kac;
in = kac.getConnection().getReader().getInputStream();
@@ -46,23 +48,23 @@ class KeyAgreementTransport {
return kac.getTransportId();
}
- public void sendKey(byte[] key) throws IOException {
+ void sendKey(byte[] key) throws IOException {
writeRecord(KEY, key);
}
- public byte[] receiveKey() throws AbortException {
+ byte[] receiveKey() throws AbortException {
return readRecord(KEY);
}
- public void sendConfirm(byte[] confirm) throws IOException {
+ void sendConfirm(byte[] confirm) throws IOException {
writeRecord(CONFIRM, confirm);
}
- public byte[] receiveConfirm() throws AbortException {
+ byte[] receiveConfirm() throws AbortException {
return readRecord(CONFIRM);
}
- public void sendAbort(boolean exception) {
+ void sendAbort(boolean exception) {
try {
writeRecord(ABORT, new byte[0]);
} catch (IOException e) {
diff --git a/briar-core/src/org/briarproject/keyagreement/PayloadEncoderImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadEncoderImpl.java
similarity index 64%
rename from briar-core/src/org/briarproject/keyagreement/PayloadEncoderImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadEncoderImpl.java
index ac1a647d1..b6c3481ee 100644
--- a/briar-core/src/org/briarproject/keyagreement/PayloadEncoderImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadEncoderImpl.java
@@ -1,11 +1,11 @@
-package org.briarproject.keyagreement;
+package org.briarproject.bramble.keyagreement;
-import org.briarproject.api.data.BdfWriter;
-import org.briarproject.api.data.BdfWriterFactory;
-import org.briarproject.api.keyagreement.Payload;
-import org.briarproject.api.keyagreement.PayloadEncoder;
-import org.briarproject.api.keyagreement.TransportDescriptor;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.data.BdfWriter;
+import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.keyagreement.Payload;
+import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
+import org.briarproject.bramble.api.keyagreement.TransportDescriptor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -13,7 +13,7 @@ import java.io.IOException;
import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.PROTOCOL_VERSION;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.PROTOCOL_VERSION;
@Immutable
@NotNullByDefault
diff --git a/briar-core/src/org/briarproject/keyagreement/PayloadParserImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java
similarity index 61%
rename from briar-core/src/org/briarproject/keyagreement/PayloadParserImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java
index c0ee0064f..5b4df07c4 100644
--- a/briar-core/src/org/briarproject/keyagreement/PayloadParserImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java
@@ -1,16 +1,16 @@
-package org.briarproject.keyagreement;
+package org.briarproject.bramble.keyagreement;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.data.BdfReader;
-import org.briarproject.api.data.BdfReaderFactory;
-import org.briarproject.api.keyagreement.Payload;
-import org.briarproject.api.keyagreement.PayloadParser;
-import org.briarproject.api.keyagreement.TransportDescriptor;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.plugins.BluetoothConstants;
-import org.briarproject.api.plugins.LanTcpConstants;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.data.BdfReader;
+import org.briarproject.bramble.api.data.BdfReaderFactory;
+import org.briarproject.bramble.api.keyagreement.Payload;
+import org.briarproject.bramble.api.keyagreement.PayloadParser;
+import org.briarproject.bramble.api.keyagreement.TransportDescriptor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.BluetoothConstants;
+import org.briarproject.bramble.api.plugin.LanTcpConstants;
+import org.briarproject.bramble.api.plugin.TransportId;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -20,10 +20,10 @@ import java.util.List;
import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.COMMIT_LENGTH;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.PROTOCOL_VERSION;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_BLUETOOTH;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_LAN;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.COMMIT_LENGTH;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.PROTOCOL_VERSION;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_BLUETOOTH;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_LAN;
@Immutable
@NotNullByDefault
diff --git a/briar-core/src/org/briarproject/lifecycle/LifecycleManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java
similarity index 82%
rename from briar-core/src/org/briarproject/lifecycle/LifecycleManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java
index fa66b14fd..da3536beb 100644
--- a/briar-core/src/org/briarproject/lifecycle/LifecycleManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java
@@ -1,19 +1,20 @@
-package org.briarproject.lifecycle;
+package org.briarproject.bramble.lifecycle;
-import org.briarproject.api.clients.Client;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.ShutdownEvent;
-import org.briarproject.api.identity.AuthorFactory;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.lifecycle.Service;
-import org.briarproject.api.lifecycle.ServiceException;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.KeyPair;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.identity.AuthorFactory;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.lifecycle.Service;
+import org.briarproject.bramble.api.lifecycle.ServiceException;
+import org.briarproject.bramble.api.lifecycle.event.ShutdownEvent;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Client;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -23,15 +24,18 @@ import java.util.concurrent.Semaphore;
import java.util.logging.Logger;
import javax.annotation.Nullable;
+import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING;
-import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.DB_ERROR;
-import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.SERVICE_ERROR;
-import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.SUCCESS;
+import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING;
+import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.DB_ERROR;
+import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.SERVICE_ERROR;
+import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.SUCCESS;
+@ThreadSafe
+@NotNullByDefault
class LifecycleManagerImpl implements LifecycleManager {
private static final Logger LOG =
diff --git a/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleModule.java
similarity index 73%
rename from briar-core/src/org/briarproject/lifecycle/LifecycleModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleModule.java
index 67c94c1a8..2db430723 100644
--- a/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleModule.java
@@ -1,13 +1,13 @@
-package org.briarproject.lifecycle;
+package org.briarproject.bramble.lifecycle;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.identity.AuthorFactory;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.identity.AuthorFactory;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.lifecycle.ShutdownManager;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
@@ -64,7 +64,7 @@ public class LifecycleModule {
@Provides
@Singleton
@IoExecutor
- Executor getIoExecutor(LifecycleManager lifecycleManager) {
+ Executor provideIoExecutor(LifecycleManager lifecycleManager) {
lifecycleManager.registerForShutdown(ioExecutor);
return ioExecutor;
}
diff --git a/briar-core/src/org/briarproject/lifecycle/ShutdownManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/ShutdownManagerImpl.java
similarity index 75%
rename from briar-core/src/org/briarproject/lifecycle/ShutdownManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/lifecycle/ShutdownManagerImpl.java
index 3779db258..1b5e4ad6a 100644
--- a/briar-core/src/org/briarproject/lifecycle/ShutdownManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/ShutdownManagerImpl.java
@@ -1,15 +1,20 @@
-package org.briarproject.lifecycle;
+package org.briarproject.bramble.lifecycle;
+
+import org.briarproject.bramble.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-import org.briarproject.api.lifecycle.ShutdownManager;
+import javax.annotation.concurrent.ThreadSafe;
+@ThreadSafe
+@NotNullByDefault
class ShutdownManagerImpl implements ShutdownManager {
- private final Lock lock = new ReentrantLock();
+ protected final Lock lock = new ReentrantLock();
// The following are locking: lock
protected final Map hooks;
@@ -19,6 +24,7 @@ class ShutdownManagerImpl implements ShutdownManager {
hooks = new HashMap();
}
+ @Override
public int addShutdownHook(Runnable r) {
lock.lock();
try {
@@ -37,6 +43,7 @@ class ShutdownManagerImpl implements ShutdownManager {
return new Thread(r, "ShutdownManager");
}
+ @Override
public boolean removeShutdownHook(int handle) {
lock.lock();
try {
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/BackoffFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/BackoffFactoryImpl.java
new file mode 100644
index 000000000..7640a9571
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/BackoffFactoryImpl.java
@@ -0,0 +1,18 @@
+package org.briarproject.bramble.plugin;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.Backoff;
+import org.briarproject.bramble.api.plugin.BackoffFactory;
+
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
+class BackoffFactoryImpl implements BackoffFactory {
+
+ @Override
+ public Backoff createBackoff(int minInterval, int maxInterval,
+ double base) {
+ return new BackoffImpl(minInterval, maxInterval, base);
+ }
+}
diff --git a/briar-core/src/org/briarproject/plugins/BackoffImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/BackoffImpl.java
similarity index 76%
rename from briar-core/src/org/briarproject/plugins/BackoffImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/BackoffImpl.java
index 175c0d35f..a4522cbb4 100644
--- a/briar-core/src/org/briarproject/plugins/BackoffImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/BackoffImpl.java
@@ -1,9 +1,14 @@
-package org.briarproject.plugins;
+package org.briarproject.bramble.plugin;
-import org.briarproject.api.plugins.Backoff;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.Backoff;
import java.util.concurrent.atomic.AtomicInteger;
+import javax.annotation.concurrent.ThreadSafe;
+
+@ThreadSafe
+@NotNullByDefault
class BackoffImpl implements Backoff {
private final int minInterval, maxInterval;
diff --git a/briar-core/src/org/briarproject/plugins/ConnectionManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java
similarity index 91%
rename from briar-core/src/org/briarproject/plugins/ConnectionManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java
index c85c5f016..3714e420f 100644
--- a/briar-core/src/org/briarproject/plugins/ConnectionManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java
@@ -1,20 +1,20 @@
-package org.briarproject.plugins;
+package org.briarproject.bramble.plugin;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.plugins.ConnectionManager;
-import org.briarproject.api.plugins.ConnectionRegistry;
-import org.briarproject.api.plugins.TransportConnectionReader;
-import org.briarproject.api.plugins.TransportConnectionWriter;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.sync.SyncSession;
-import org.briarproject.api.sync.SyncSessionFactory;
-import org.briarproject.api.transport.KeyManager;
-import org.briarproject.api.transport.StreamContext;
-import org.briarproject.api.transport.StreamReaderFactory;
-import org.briarproject.api.transport.StreamWriterFactory;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.plugin.ConnectionManager;
+import org.briarproject.bramble.api.plugin.ConnectionRegistry;
+import org.briarproject.bramble.api.plugin.TransportConnectionReader;
+import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.sync.SyncSession;
+import org.briarproject.bramble.api.sync.SyncSessionFactory;
+import org.briarproject.bramble.api.transport.KeyManager;
+import org.briarproject.bramble.api.transport.StreamContext;
+import org.briarproject.bramble.api.transport.StreamReaderFactory;
+import org.briarproject.bramble.api.transport.StreamWriterFactory;
import java.io.EOFException;
import java.io.IOException;
@@ -26,7 +26,7 @@ import java.util.logging.Logger;
import javax.inject.Inject;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.transport.TransportConstants.TAG_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
class ConnectionManagerImpl implements ConnectionManager {
@@ -54,21 +54,25 @@ class ConnectionManagerImpl implements ConnectionManager {
this.connectionRegistry = connectionRegistry;
}
+ @Override
public void manageIncomingConnection(TransportId t,
TransportConnectionReader r) {
ioExecutor.execute(new ManageIncomingSimplexConnection(t, r));
}
+ @Override
public void manageIncomingConnection(TransportId t,
DuplexTransportConnection d) {
ioExecutor.execute(new ManageIncomingDuplexConnection(t, d));
}
+ @Override
public void manageOutgoingConnection(ContactId c, TransportId t,
TransportConnectionWriter w) {
ioExecutor.execute(new ManageOutgoingSimplexConnection(c, t, w));
}
+ @Override
public void manageOutgoingConnection(ContactId c, TransportId t,
DuplexTransportConnection d) {
ioExecutor.execute(new ManageOutgoingDuplexConnection(c, t, d));
@@ -123,6 +127,7 @@ class ConnectionManagerImpl implements ConnectionManager {
this.reader = reader;
}
+ @Override
public void run() {
// Read and recognise the tag
StreamContext ctx;
@@ -180,6 +185,7 @@ class ConnectionManagerImpl implements ConnectionManager {
this.writer = writer;
}
+ @Override
public void run() {
// Allocate a stream context
StreamContext ctx;
@@ -236,6 +242,7 @@ class ConnectionManagerImpl implements ConnectionManager {
writer = transport.getWriter();
}
+ @Override
public void run() {
// Read and recognise the tag
StreamContext ctx;
@@ -260,6 +267,7 @@ class ConnectionManagerImpl implements ConnectionManager {
connectionRegistry.registerConnection(contactId, transportId, true);
// Start the outgoing session on another thread
ioExecutor.execute(new Runnable() {
+ @Override
public void run() {
runOutgoingSession();
}
@@ -343,6 +351,7 @@ class ConnectionManagerImpl implements ConnectionManager {
writer = transport.getWriter();
}
+ @Override
public void run() {
// Allocate a stream context
StreamContext ctx;
@@ -360,6 +369,7 @@ class ConnectionManagerImpl implements ConnectionManager {
}
// Start the incoming session on another thread
ioExecutor.execute(new Runnable() {
+ @Override
public void run() {
runIncomingSession();
}
diff --git a/briar-core/src/org/briarproject/plugins/ConnectionRegistryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionRegistryImpl.java
similarity index 84%
rename from briar-core/src/org/briarproject/plugins/ConnectionRegistryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionRegistryImpl.java
index 7b687f935..5c4b5d422 100644
--- a/briar-core/src/org/briarproject/plugins/ConnectionRegistryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionRegistryImpl.java
@@ -1,13 +1,14 @@
-package org.briarproject.plugins;
+package org.briarproject.bramble.plugin;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.event.ConnectionClosedEvent;
-import org.briarproject.api.event.ConnectionOpenedEvent;
-import org.briarproject.api.event.ContactConnectedEvent;
-import org.briarproject.api.event.ContactDisconnectedEvent;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.plugins.ConnectionRegistry;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.ConnectionRegistry;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.event.ConnectionClosedEvent;
+import org.briarproject.bramble.api.plugin.event.ConnectionOpenedEvent;
+import org.briarproject.bramble.api.plugin.event.ContactConnectedEvent;
+import org.briarproject.bramble.api.plugin.event.ContactDisconnectedEvent;
import java.util.ArrayList;
import java.util.Collection;
@@ -19,10 +20,13 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
import static java.util.logging.Level.INFO;
+@ThreadSafe
+@NotNullByDefault
class ConnectionRegistryImpl implements ConnectionRegistry {
private static final Logger LOG =
diff --git a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/PluginManagerImpl.java
similarity index 83%
rename from briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/PluginManagerImpl.java
index 010e75da5..45eeb2d44 100644
--- a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/PluginManagerImpl.java
@@ -1,34 +1,34 @@
-package org.briarproject.plugins;
+package org.briarproject.bramble.plugin;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.TransportDisabledEvent;
-import org.briarproject.api.event.TransportEnabledEvent;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.lifecycle.Service;
-import org.briarproject.api.lifecycle.ServiceException;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.plugins.ConnectionManager;
-import org.briarproject.api.plugins.Plugin;
-import org.briarproject.api.plugins.PluginCallback;
-import org.briarproject.api.plugins.PluginConfig;
-import org.briarproject.api.plugins.PluginManager;
-import org.briarproject.api.plugins.TransportConnectionReader;
-import org.briarproject.api.plugins.TransportConnectionWriter;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.plugins.simplex.SimplexPlugin;
-import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
-import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
-import org.briarproject.api.properties.TransportProperties;
-import org.briarproject.api.properties.TransportPropertyManager;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.settings.SettingsManager;
-import org.briarproject.api.ui.UiCallback;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.Service;
+import org.briarproject.bramble.api.lifecycle.ServiceException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.ConnectionManager;
+import org.briarproject.bramble.api.plugin.Plugin;
+import org.briarproject.bramble.api.plugin.PluginCallback;
+import org.briarproject.bramble.api.plugin.PluginConfig;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.plugin.TransportConnectionReader;
+import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.plugin.event.TransportDisabledEvent;
+import org.briarproject.bramble.api.plugin.event.TransportEnabledEvent;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory;
+import org.briarproject.bramble.api.properties.TransportProperties;
+import org.briarproject.bramble.api.properties.TransportPropertyManager;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.settings.SettingsManager;
+import org.briarproject.bramble.api.ui.UiCallback;
import java.io.IOException;
import java.util.ArrayList;
@@ -256,11 +256,12 @@ class PluginManagerImpl implements PluginManager, Service {
}
}
+ @NotNullByDefault
private abstract class PluginCallbackImpl implements PluginCallback {
protected final TransportId id;
- protected PluginCallbackImpl(TransportId id) {
+ PluginCallbackImpl(TransportId id) {
this.id = id;
}
@@ -277,9 +278,7 @@ class PluginManagerImpl implements PluginManager, Service {
@Override
public TransportProperties getLocalProperties() {
try {
- TransportProperties p =
- transportPropertyManager.getLocalProperties(id);
- return p == null ? new TransportProperties() : p;
+ return transportPropertyManager.getLocalProperties(id);
} catch (DbException e) {
if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
return new TransportProperties();
@@ -340,6 +339,7 @@ class PluginManagerImpl implements PluginManager, Service {
}
}
+ @NotNullByDefault
private class SimplexCallback extends PluginCallbackImpl
implements SimplexPluginCallback {
@@ -358,6 +358,7 @@ class PluginManagerImpl implements PluginManager, Service {
}
}
+ @NotNullByDefault
private class DuplexCallback extends PluginCallbackImpl
implements DuplexPluginCallback {
diff --git a/briar-core/src/org/briarproject/plugins/PluginsModule.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/PluginModule.java
similarity index 70%
rename from briar-core/src/org/briarproject/plugins/PluginsModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/PluginModule.java
index d7e6925e5..43ed21555 100644
--- a/briar-core/src/org/briarproject/plugins/PluginsModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/PluginModule.java
@@ -1,14 +1,14 @@
-package org.briarproject.plugins;
+package org.briarproject.bramble.plugin;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.plugins.BackoffFactory;
-import org.briarproject.api.plugins.ConnectionManager;
-import org.briarproject.api.plugins.ConnectionRegistry;
-import org.briarproject.api.plugins.PluginManager;
-import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.Scheduler;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.plugin.BackoffFactory;
+import org.briarproject.bramble.api.plugin.ConnectionManager;
+import org.briarproject.bramble.api.plugin.ConnectionRegistry;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.api.system.Scheduler;
import java.security.SecureRandom;
import java.util.concurrent.Executor;
@@ -21,7 +21,7 @@ import dagger.Module;
import dagger.Provides;
@Module
-public class PluginsModule {
+public class PluginModule {
public static class EagerSingletons {
@Inject
diff --git a/briar-core/src/org/briarproject/plugins/Poller.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java
similarity index 80%
rename from briar-core/src/org/briarproject/plugins/Poller.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java
index a904bbfe6..f315bda9e 100644
--- a/briar-core/src/org/briarproject/plugins/Poller.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java
@@ -1,24 +1,25 @@
-package org.briarproject.plugins;
+package org.briarproject.bramble.plugin;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.event.ConnectionClosedEvent;
-import org.briarproject.api.event.ConnectionOpenedEvent;
-import org.briarproject.api.event.ContactStatusChangedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.TransportEnabledEvent;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.plugins.ConnectionManager;
-import org.briarproject.api.plugins.ConnectionRegistry;
-import org.briarproject.api.plugins.Plugin;
-import org.briarproject.api.plugins.PluginManager;
-import org.briarproject.api.plugins.TransportConnectionWriter;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.plugins.simplex.SimplexPlugin;
-import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.Scheduler;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.event.ContactStatusChangedEvent;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.ConnectionManager;
+import org.briarproject.bramble.api.plugin.ConnectionRegistry;
+import org.briarproject.bramble.api.plugin.Plugin;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.plugin.event.ConnectionClosedEvent;
+import org.briarproject.bramble.api.plugin.event.ConnectionOpenedEvent;
+import org.briarproject.bramble.api.plugin.event.TransportEnabledEvent;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.api.system.Scheduler;
import java.security.SecureRandom;
import java.util.HashMap;
@@ -29,11 +30,14 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.logging.Level.INFO;
+@ThreadSafe
+@NotNullByDefault
class Poller implements EventListener {
private static final Logger LOG = Logger.getLogger(Poller.class.getName());
diff --git a/briar-core/src/org/briarproject/plugins/file/FilePlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FilePlugin.java
similarity index 85%
rename from briar-core/src/org/briarproject/plugins/file/FilePlugin.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FilePlugin.java
index 108db3c7b..17b61358d 100644
--- a/briar-core/src/org/briarproject/plugins/file/FilePlugin.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FilePlugin.java
@@ -1,11 +1,11 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.plugins.TransportConnectionReader;
-import org.briarproject.api.plugins.TransportConnectionWriter;
-import org.briarproject.api.plugins.simplex.SimplexPlugin;
-import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportConnectionReader;
+import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
import java.io.File;
import java.io.FileInputStream;
@@ -21,7 +21,7 @@ import java.util.logging.Logger;
import javax.annotation.Nullable;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.transport.TransportConstants.MIN_STREAM_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.MIN_STREAM_LENGTH;
@NotNullByDefault
abstract class FilePlugin implements SimplexPlugin {
@@ -38,8 +38,11 @@ abstract class FilePlugin implements SimplexPlugin {
@Nullable
protected abstract File chooseOutputDirectory();
+
protected abstract Collection findFilesByName(String filename);
+
protected abstract void writerFinished(File f);
+
protected abstract void readerFinished(File f);
protected FilePlugin(Executor ioExecutor, SimplexPluginCallback callback,
diff --git a/briar-core/src/org/briarproject/plugins/file/FileTransportReader.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FileTransportReader.java
similarity index 79%
rename from briar-core/src/org/briarproject/plugins/file/FileTransportReader.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FileTransportReader.java
index ed6219797..df5d5b908 100644
--- a/briar-core/src/org/briarproject/plugins/file/FileTransportReader.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FileTransportReader.java
@@ -1,6 +1,7 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
-import org.briarproject.api.plugins.TransportConnectionReader;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportConnectionReader;
import java.io.File;
import java.io.IOException;
@@ -9,6 +10,7 @@ import java.util.logging.Logger;
import static java.util.logging.Level.WARNING;
+@NotNullByDefault
class FileTransportReader implements TransportConnectionReader {
private static final Logger LOG =
@@ -24,10 +26,12 @@ class FileTransportReader implements TransportConnectionReader {
this.plugin = plugin;
}
+ @Override
public InputStream getInputStream() {
return in;
}
+ @Override
public void dispose(boolean exception, boolean recognised) {
try {
in.close();
diff --git a/briar-core/src/org/briarproject/plugins/file/FileTransportWriter.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FileTransportWriter.java
similarity index 81%
rename from briar-core/src/org/briarproject/plugins/file/FileTransportWriter.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FileTransportWriter.java
index 94e83fe5b..2752f7c8b 100644
--- a/briar-core/src/org/briarproject/plugins/file/FileTransportWriter.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FileTransportWriter.java
@@ -1,14 +1,16 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
-import static java.util.logging.Level.WARNING;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Logger;
-import org.briarproject.api.plugins.TransportConnectionWriter;
+import static java.util.logging.Level.WARNING;
+@NotNullByDefault
class FileTransportWriter implements TransportConnectionWriter {
private static final Logger LOG =
@@ -27,22 +29,27 @@ class FileTransportWriter implements TransportConnectionWriter {
this.plugin = plugin;
}
+ @Override
public int getMaxLatency() {
return plugin.getMaxLatency();
}
+ @Override
public int getMaxIdleTime() {
return plugin.getMaxIdleTime();
}
+ @Override
public long getCapacity() {
return capacity;
}
+ @Override
public OutputStream getOutputStream() {
return out;
}
+ @Override
public void dispose(boolean exception) {
try {
out.close();
diff --git a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java
similarity index 88%
rename from briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java
index f60a0a743..36c06d485 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java
@@ -1,18 +1,18 @@
-package org.briarproject.plugins.tcp;
+package org.briarproject.bramble.plugin.tcp;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.keyagreement.KeyAgreementConnection;
-import org.briarproject.api.keyagreement.KeyAgreementListener;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.plugins.Backoff;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.properties.TransportProperties;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementConnection;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementListener;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.Backoff;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.properties.TransportProperties;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.util.StringUtils;
import java.io.IOException;
import java.net.Inet4Address;
@@ -32,10 +32,10 @@ import java.util.logging.Logger;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_LAN;
-import static org.briarproject.api.plugins.LanTcpConstants.ID;
-import static org.briarproject.util.ByteUtils.MAX_16_BIT_UNSIGNED;
-import static org.briarproject.util.PrivacyUtils.scrubSocketAddress;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_LAN;
+import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID;
+import static org.briarproject.bramble.util.ByteUtils.MAX_16_BIT_UNSIGNED;
+import static org.briarproject.bramble.util.PrivacyUtils.scrubSocketAddress;
@NotNullByDefault
class LanTcpPlugin extends TcpPlugin {
diff --git a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginFactory.java
similarity index 63%
rename from briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginFactory.java
index 2818666b0..a15277c22 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginFactory.java
@@ -1,16 +1,21 @@
-package org.briarproject.plugins.tcp;
+package org.briarproject.bramble.plugin.tcp;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.plugins.Backoff;
-import org.briarproject.api.plugins.BackoffFactory;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.Backoff;
+import org.briarproject.bramble.api.plugin.BackoffFactory;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory;
import java.util.concurrent.Executor;
-import static org.briarproject.api.plugins.LanTcpConstants.ID;
+import javax.annotation.concurrent.Immutable;
+import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID;
+
+@Immutable
+@NotNullByDefault
public class LanTcpPluginFactory implements DuplexPluginFactory {
private static final int MAX_LATENCY = 30 * 1000; // 30 seconds
diff --git a/briar-core/src/org/briarproject/plugins/tcp/MappingResult.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/MappingResult.java
similarity index 50%
rename from briar-core/src/org/briarproject/plugins/tcp/MappingResult.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/MappingResult.java
index 3e86a9668..aa9c271f5 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/MappingResult.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/MappingResult.java
@@ -1,31 +1,42 @@
-package org.briarproject.plugins.tcp;
+package org.briarproject.bramble.plugin.tcp;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.net.InetAddress;
import java.net.InetSocketAddress;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
class MappingResult {
- private final InetAddress internal, external;
+ private final InetAddress internal;
+ @Nullable
+ private final InetAddress external;
private final int port;
private final boolean succeeded;
- MappingResult(InetAddress internal, InetAddress external, int port,
- boolean succeeded) {
+ MappingResult(InetAddress internal, @Nullable InetAddress external,
+ int port, boolean succeeded) {
this.internal = internal;
this.external = external;
this.port = port;
this.succeeded = succeeded;
}
+ @Nullable
InetSocketAddress getInternal() {
return isUsable() ? new InetSocketAddress(internal, port) : null;
}
+ @Nullable
InetSocketAddress getExternal() {
return isUsable() ? new InetSocketAddress(external, port) : null;
}
boolean isUsable() {
- return internal != null && external != null && port != 0 && succeeded;
+ return external != null && port != 0 && succeeded;
}
}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapper.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapper.java
new file mode 100644
index 000000000..3d12a84b8
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapper.java
@@ -0,0 +1,9 @@
+package org.briarproject.bramble.plugin.tcp;
+
+import javax.annotation.Nullable;
+
+interface PortMapper {
+
+ @Nullable
+ MappingResult map(int port);
+}
diff --git a/briar-core/src/org/briarproject/plugins/tcp/PortMapperImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapperImpl.java
similarity index 84%
rename from briar-core/src/org/briarproject/plugins/tcp/PortMapperImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapperImpl.java
index 5e135419b..2156bd10d 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/PortMapperImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapperImpl.java
@@ -1,8 +1,10 @@
-package org.briarproject.plugins.tcp;
+package org.briarproject.bramble.plugin.tcp;
import org.bitlet.weupnp.GatewayDevice;
import org.bitlet.weupnp.GatewayDiscover;
-import org.briarproject.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.xml.sax.SAXException;
import java.io.IOException;
@@ -10,12 +12,16 @@ import java.net.InetAddress;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
import javax.xml.parsers.ParserConfigurationException;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.util.PrivacyUtils.scrubInetAddress;
+import static org.briarproject.bramble.util.PrivacyUtils.scrubInetAddress;
+@ThreadSafe
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class PortMapperImpl implements PortMapper {
private static final Logger LOG =
@@ -30,6 +36,7 @@ class PortMapperImpl implements PortMapper {
this.shutdownManager = shutdownManager;
}
+ @Override
public MappingResult map(final int port) {
if (!started.getAndSet(true)) start();
if (gateway == null) return null;
@@ -44,6 +51,7 @@ class PortMapperImpl implements PortMapper {
getHostAddress(internal), "TCP", "TCP");
if (succeeded) {
shutdownManager.addShutdownHook(new Runnable() {
+ @Override
public void run() {
deleteMapping(port);
}
@@ -88,7 +96,7 @@ class PortMapperImpl implements PortMapper {
try {
gateway.deletePortMapping(port, "TCP");
if (LOG.isLoggable(INFO))
- LOG.info("Deleted mapping for port " + port);
+ LOG.info("Deleted mapping for port " + port);
} catch (IOException e) {
if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
} catch (SAXException e) {
diff --git a/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java
similarity index 89%
rename from briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java
index 76da5bf7d..1708e918f 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java
@@ -1,16 +1,16 @@
-package org.briarproject.plugins.tcp;
+package org.briarproject.bramble.plugin.tcp;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.keyagreement.KeyAgreementListener;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.plugins.Backoff;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.PseudoRandom;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementListener;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.Backoff;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.util.StringUtils;
import java.io.IOException;
import java.net.InetAddress;
@@ -34,7 +34,7 @@ import javax.annotation.Nullable;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.util.PrivacyUtils.scrubSocketAddress;
+import static org.briarproject.bramble.util.PrivacyUtils.scrubSocketAddress;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@@ -78,7 +78,7 @@ abstract class TcpPlugin implements DuplexPlugin {
*/
protected abstract boolean isConnectable(InetSocketAddress remote);
- protected TcpPlugin(Executor ioExecutor, Backoff backoff,
+ TcpPlugin(Executor ioExecutor, Backoff backoff,
DuplexPluginCallback callback, int maxLatency, int maxIdleTime) {
this.ioExecutor = ioExecutor;
this.backoff = backoff;
@@ -157,7 +157,7 @@ abstract class TcpPlugin implements DuplexPlugin {
}
}
- protected String getIpPortString(InetSocketAddress a) {
+ String getIpPortString(InetSocketAddress a) {
String addr = a.getAddress().getHostAddress();
int percent = addr.indexOf('%');
if (percent != -1) addr = addr.substring(0, percent);
@@ -259,7 +259,7 @@ abstract class TcpPlugin implements DuplexPlugin {
}
@Nullable
- protected InetSocketAddress parseSocketAddress(String ipPort) {
+ InetSocketAddress parseSocketAddress(String ipPort) {
if (StringUtils.isNullOrEmpty(ipPort)) return null;
String[] split = ipPort.split(":");
if (split.length != 2) return null;
@@ -309,7 +309,7 @@ abstract class TcpPlugin implements DuplexPlugin {
throw new UnsupportedOperationException();
}
- protected Collection getLocalIpAddresses() {
+ Collection getLocalIpAddresses() {
List ifaces;
try {
ifaces = Collections.list(NetworkInterface.getNetworkInterfaces());
diff --git a/briar-core/src/org/briarproject/plugins/tcp/TcpTransportConnection.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpTransportConnection.java
similarity index 66%
rename from briar-core/src/org/briarproject/plugins/tcp/TcpTransportConnection.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpTransportConnection.java
index 7d8d33a9a..97afa3743 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/TcpTransportConnection.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpTransportConnection.java
@@ -1,13 +1,18 @@
-package org.briarproject.plugins.tcp;
+package org.briarproject.bramble.plugin.tcp;
-import org.briarproject.api.plugins.Plugin;
-import org.briarproject.api.plugins.duplex.AbstractDuplexTransportConnection;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.Plugin;
+import org.briarproject.bramble.api.plugin.duplex.AbstractDuplexTransportConnection;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
+import javax.annotation.concurrent.ThreadSafe;
+
+@ThreadSafe
+@NotNullByDefault
class TcpTransportConnection extends AbstractDuplexTransportConnection {
private final Socket socket;
diff --git a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPlugin.java
similarity index 78%
rename from briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPlugin.java
index f51767af6..fe3045728 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPlugin.java
@@ -1,12 +1,12 @@
-package org.briarproject.plugins.tcp;
+package org.briarproject.bramble.plugin.tcp;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.plugins.Backoff;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.properties.TransportProperties;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.Backoff;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.properties.TransportProperties;
import java.net.Inet4Address;
import java.net.InetAddress;
@@ -16,7 +16,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Executor;
-import static org.briarproject.api.plugins.WanTcpConstants.ID;
+import static org.briarproject.bramble.api.plugin.WanTcpConstants.ID;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@@ -58,7 +58,8 @@ class WanTcpPlugin extends TcpPlugin {
mappingResult = portMapper.map(port);
if (mappingResult != null && mappingResult.isUsable()) {
InetSocketAddress a = mappingResult.getInternal();
- if (a.getAddress() instanceof Inet4Address) addrs.add(a);
+ if (a != null && a.getAddress() instanceof Inet4Address)
+ addrs.add(a);
}
return addrs;
}
@@ -95,8 +96,10 @@ class WanTcpPlugin extends TcpPlugin {
protected void setLocalSocketAddress(InetSocketAddress a) {
if (mappingResult != null && mappingResult.isUsable()) {
// Advertise the external address to contacts
- if (a.equals(mappingResult.getInternal()))
- a = mappingResult.getExternal();
+ if (a.equals(mappingResult.getInternal())) {
+ InetSocketAddress external = mappingResult.getExternal();
+ if (external != null) a = external;
+ }
}
TransportProperties p = new TransportProperties();
p.put(PROP_IP_PORT, getIpPortString(a));
diff --git a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPluginFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPluginFactory.java
similarity index 64%
rename from briar-core/src/org/briarproject/plugins/tcp/WanTcpPluginFactory.java
rename to bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPluginFactory.java
index f1fd78bcf..42deaaffc 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPluginFactory.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPluginFactory.java
@@ -1,17 +1,22 @@
-package org.briarproject.plugins.tcp;
+package org.briarproject.bramble.plugin.tcp;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.lifecycle.ShutdownManager;
-import org.briarproject.api.plugins.Backoff;
-import org.briarproject.api.plugins.BackoffFactory;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
+import org.briarproject.bramble.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.Backoff;
+import org.briarproject.bramble.api.plugin.BackoffFactory;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory;
import java.util.concurrent.Executor;
-import static org.briarproject.api.plugins.WanTcpConstants.ID;
+import javax.annotation.concurrent.Immutable;
+import static org.briarproject.bramble.api.plugin.WanTcpConstants.ID;
+
+@Immutable
+@NotNullByDefault
public class WanTcpPluginFactory implements DuplexPluginFactory {
private static final int MAX_LATENCY = 30 * 1000; // 30 seconds
diff --git a/briar-core/src/org/briarproject/properties/PropertiesModule.java b/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java
similarity index 54%
rename from briar-core/src/org/briarproject/properties/PropertiesModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java
index cea2c7504..0078beba5 100644
--- a/briar-core/src/org/briarproject/properties/PropertiesModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java
@@ -1,12 +1,12 @@
-package org.briarproject.properties;
+package org.briarproject.bramble.properties;
-import org.briarproject.api.clients.ClientHelper;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.data.MetadataEncoder;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.properties.TransportPropertyManager;
-import org.briarproject.api.sync.ValidationManager;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.client.ClientHelper;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.data.MetadataEncoder;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.properties.TransportPropertyManager;
+import org.briarproject.bramble.api.sync.ValidationManager;
+import org.briarproject.bramble.api.system.Clock;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -14,14 +14,16 @@ import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
-import static org.briarproject.properties.TransportPropertyManagerImpl.CLIENT_ID;
+import static org.briarproject.bramble.api.properties.TransportPropertyManager.CLIENT_ID;
@Module
public class PropertiesModule {
public static class EagerSingletons {
- @Inject TransportPropertyValidator transportPropertyValidator;
- @Inject TransportPropertyManager transportPropertyManager;
+ @Inject
+ TransportPropertyValidator transportPropertyValidator;
+ @Inject
+ TransportPropertyManager transportPropertyManager;
}
@Provides
@@ -35,10 +37,10 @@ public class PropertiesModule {
return validator;
}
- @Provides @Singleton
+ @Provides
+ @Singleton
TransportPropertyManager getTransportPropertyManager(
- LifecycleManager lifecycleManager,
- ContactManager contactManager,
+ LifecycleManager lifecycleManager, ContactManager contactManager,
TransportPropertyManagerImpl transportPropertyManager) {
lifecycleManager.registerClient(transportPropertyManager);
contactManager.registerAddContactHook(transportPropertyManager);
diff --git a/briar-core/src/org/briarproject/properties/TransportPropertyManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/properties/TransportPropertyManagerImpl.java
similarity index 83%
rename from briar-core/src/org/briarproject/properties/TransportPropertyManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/properties/TransportPropertyManagerImpl.java
index 62b4be0c0..1fe72cdfc 100644
--- a/briar-core/src/org/briarproject/properties/TransportPropertyManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/properties/TransportPropertyManagerImpl.java
@@ -1,35 +1,40 @@
-package org.briarproject.properties;
+package org.briarproject.bramble.properties;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.clients.Client;
-import org.briarproject.api.clients.ClientHelper;
-import org.briarproject.api.clients.ContactGroupFactory;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager.AddContactHook;
-import org.briarproject.api.contact.ContactManager.RemoveContactHook;
-import org.briarproject.api.data.BdfDictionary;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.properties.TransportProperties;
-import org.briarproject.api.properties.TransportPropertyManager;
-import org.briarproject.api.sync.Group;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.client.ClientHelper;
+import org.briarproject.bramble.api.client.ContactGroupFactory;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager.AddContactHook;
+import org.briarproject.bramble.api.contact.ContactManager.RemoveContactHook;
+import org.briarproject.bramble.api.data.BdfDictionary;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.properties.TransportProperties;
+import org.briarproject.bramble.api.properties.TransportPropertyManager;
+import org.briarproject.bramble.api.sync.Client;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.system.Clock;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
-import static org.briarproject.api.sync.Group.Visibility.SHARED;
+import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
+@Immutable
+@NotNullByDefault
class TransportPropertyManagerImpl implements TransportPropertyManager,
Client, AddContactHook, RemoveContactHook {
@@ -116,6 +121,7 @@ class TransportPropertyManagerImpl implements TransportPropertyManager,
for (Entry e : latest.entrySet()) {
BdfList message = clientHelper.getMessageAsList(txn,
e.getValue().messageId);
+ if (message == null) throw new DbException();
local.put(e.getKey(), parseProperties(message));
}
return local;
@@ -138,13 +144,14 @@ class TransportPropertyManagerImpl implements TransportPropertyManager,
// Retrieve and parse the latest local properties
BdfList message = clientHelper.getMessageAsList(txn,
latest.messageId);
+ if (message == null) throw new DbException();
p = parseProperties(message);
}
db.commitTransaction(txn);
} finally {
db.endTransaction(txn);
}
- return p;
+ return p == null ? new TransportProperties() : p;
} catch (FormatException e) {
throw new DbException(e);
}
@@ -168,6 +175,7 @@ class TransportPropertyManagerImpl implements TransportPropertyManager,
// Retrieve and parse the latest remote properties
BdfList message = clientHelper.getMessageAsList(txn,
latest.messageId);
+ if (message == null) throw new DbException();
remote.put(c.getId(), parseProperties(message));
}
}
@@ -198,6 +206,7 @@ class TransportPropertyManagerImpl implements TransportPropertyManager,
} else {
BdfList message = clientHelper.getMessageAsList(txn,
latest.messageId);
+ if (message == null) throw new DbException();
TransportProperties old = parseProperties(message);
merged = new TransportProperties(old);
merged.putAll(p);
@@ -271,6 +280,7 @@ class TransportPropertyManagerImpl implements TransportPropertyManager,
return latestUpdates;
}
+ @Nullable
private LatestUpdate findLatest(Transaction txn, GroupId g, TransportId t,
boolean local) throws DbException, FormatException {
LatestUpdate latest = null;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/properties/TransportPropertyValidator.java b/bramble-core/src/main/java/org/briarproject/bramble/properties/TransportPropertyValidator.java
new file mode 100644
index 000000000..f0431254b
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/properties/TransportPropertyValidator.java
@@ -0,0 +1,58 @@
+package org.briarproject.bramble.properties;
+
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.client.BdfMessageContext;
+import org.briarproject.bramble.api.client.BdfMessageValidator;
+import org.briarproject.bramble.api.client.ClientHelper;
+import org.briarproject.bramble.api.data.BdfDictionary;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.data.MetadataEncoder;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.system.Clock;
+
+import javax.annotation.concurrent.Immutable;
+
+import static org.briarproject.bramble.api.plugin.TransportId.MAX_TRANSPORT_ID_LENGTH;
+import static org.briarproject.bramble.api.properties.TransportPropertyConstants.MAX_PROPERTIES_PER_TRANSPORT;
+import static org.briarproject.bramble.api.properties.TransportPropertyConstants.MAX_PROPERTY_LENGTH;
+import static org.briarproject.bramble.util.ValidationUtils.checkLength;
+import static org.briarproject.bramble.util.ValidationUtils.checkSize;
+
+@Immutable
+@NotNullByDefault
+class TransportPropertyValidator extends BdfMessageValidator {
+
+ TransportPropertyValidator(ClientHelper clientHelper,
+ MetadataEncoder metadataEncoder, Clock clock) {
+ super(clientHelper, metadataEncoder, clock);
+ }
+
+ @Override
+ protected BdfMessageContext validateMessage(Message m, Group g,
+ BdfList body) throws FormatException {
+ // Transport ID, version, properties
+ checkSize(body, 3);
+ // Transport ID
+ String transportId = body.getString(0);
+ checkLength(transportId, 1, MAX_TRANSPORT_ID_LENGTH);
+ // Version
+ long version = body.getLong(1);
+ if (version < 0) throw new FormatException();
+ // Properties
+ BdfDictionary dictionary = body.getDictionary(2);
+ checkSize(dictionary, 0, MAX_PROPERTIES_PER_TRANSPORT);
+ for (String key : dictionary.keySet()) {
+ checkLength(key, 0, MAX_PROPERTY_LENGTH);
+ String value = dictionary.getString(key);
+ checkLength(value, 0, MAX_PROPERTY_LENGTH);
+ }
+ // Return the metadata
+ BdfDictionary meta = new BdfDictionary();
+ meta.put("transportId", transportId);
+ meta.put("version", version);
+ meta.put("local", false);
+ return new BdfMessageContext(meta);
+ }
+}
diff --git a/briar-core/src/org/briarproject/reliability/Ack.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Ack.java
similarity index 54%
rename from briar-core/src/org/briarproject/reliability/Ack.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/Ack.java
index 1f5352c62..737e32fd5 100644
--- a/briar-core/src/org/briarproject/reliability/Ack.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Ack.java
@@ -1,20 +1,25 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
-import org.briarproject.util.ByteUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.ByteUtils;
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
class Ack extends Frame {
static final int LENGTH = 11;
Ack() {
super(new byte[LENGTH]);
- buf[0] = (byte) Frame.ACK_FLAG;
+ buf[0] = Frame.ACK_FLAG;
}
Ack(byte[] buf) {
super(buf);
if (buf.length != LENGTH) throw new IllegalArgumentException();
- buf[0] = (byte) Frame.ACK_FLAG;
+ buf[0] = Frame.ACK_FLAG;
}
int getWindowSize() {
diff --git a/briar-core/src/org/briarproject/reliability/Crc32.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Crc32.java
similarity index 80%
rename from briar-core/src/org/briarproject/reliability/Crc32.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/Crc32.java
index 1b456fb77..b4cf7bc25 100644
--- a/briar-core/src/org/briarproject/reliability/Crc32.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Crc32.java
@@ -1,5 +1,8 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+@NotNullByDefault
class Crc32 {
private static final long[] TABLE = new long[256];
diff --git a/briar-core/src/org/briarproject/reliability/Data.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Data.java
similarity index 70%
rename from briar-core/src/org/briarproject/reliability/Data.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/Data.java
index 09edb4e61..ab33b67cd 100644
--- a/briar-core/src/org/briarproject/reliability/Data.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Data.java
@@ -1,5 +1,11 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
class Data extends Frame {
static final int HEADER_LENGTH = 5, FOOTER_LENGTH = 4;
@@ -18,7 +24,7 @@ class Data extends Frame {
}
void setLastFrame(boolean lastFrame) {
- if (lastFrame) buf[0] = (byte) Frame.FIN_FLAG;
+ if (lastFrame) buf[0] = Frame.FIN_FLAG;
}
int getPayloadLength() {
diff --git a/briar-core/src/org/briarproject/reliability/Frame.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Frame.java
similarity index 79%
rename from briar-core/src/org/briarproject/reliability/Frame.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/Frame.java
index 65d9a4c81..6e5d1969c 100644
--- a/briar-core/src/org/briarproject/reliability/Frame.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Frame.java
@@ -1,14 +1,19 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
-import org.briarproject.util.ByteUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.ByteUtils;
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
abstract class Frame {
static final byte ACK_FLAG = (byte) 128, FIN_FLAG = 64;
protected final byte[] buf;
- protected Frame(byte[] buf) {
+ Frame(byte[] buf) {
this.buf = buf;
}
diff --git a/briar-core/src/org/briarproject/reliability/Receiver.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Receiver.java
similarity index 86%
rename from briar-core/src/org/briarproject/reliability/Receiver.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/Receiver.java
index b45dcfafe..c5c5de2e2 100644
--- a/briar-core/src/org/briarproject/reliability/Receiver.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Receiver.java
@@ -1,6 +1,8 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.reliability.ReadHandler;
+import org.briarproject.bramble.api.system.Clock;
import java.io.IOException;
import java.util.Comparator;
@@ -11,9 +13,12 @@ import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-import org.briarproject.api.reliability.ReadHandler;
-import org.briarproject.api.system.Clock;
+import javax.annotation.concurrent.ThreadSafe;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
+@ThreadSafe
+@NotNullByDefault
class Receiver implements ReadHandler {
private static final int READ_TIMEOUT = 5 * 60 * 1000; // Milliseconds
@@ -80,19 +85,19 @@ class Receiver implements ReadHandler {
}
}
+ @Override
public void handleRead(byte[] b) throws IOException {
if (!valid) throw new IOException("Connection closed");
- switch(b[0]) {
- case 0:
- case Frame.FIN_FLAG:
- handleData(b);
- break;
- case Frame.ACK_FLAG:
- sender.handleAck(b);
- break;
- default:
- // Ignore unknown frame type
- return;
+ switch (b[0]) {
+ case 0:
+ case Frame.FIN_FLAG:
+ handleData(b);
+ break;
+ case Frame.ACK_FLAG:
+ sender.handleAck(b);
+ break;
+ default:
+ // Ignore unknown frame type
}
}
@@ -121,7 +126,8 @@ class Receiver implements ReadHandler {
Iterator it = dataFrames.iterator();
while (it.hasNext()) {
Data d1 = it.next();
- if (d1.getSequenceNumber() >= finalSequenceNumber) it.remove();
+ if (d1.getSequenceNumber() >= finalSequenceNumber)
+ it.remove();
}
if (dataFrames.add(d)) {
windowSize -= payloadLength;
@@ -142,6 +148,7 @@ class Receiver implements ReadHandler {
private static class SequenceNumberComparator implements Comparator {
+ @Override
public int compare(Data d1, Data d2) {
long s1 = d1.getSequenceNumber(), s2 = d2.getSequenceNumber();
if (s1 < s2) return -1;
diff --git a/briar-core/src/org/briarproject/reliability/ReceiverInputStream.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReceiverInputStream.java
similarity index 76%
rename from briar-core/src/org/briarproject/reliability/ReceiverInputStream.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/ReceiverInputStream.java
index ac520f191..6c0b838b9 100644
--- a/briar-core/src/org/briarproject/reliability/ReceiverInputStream.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReceiverInputStream.java
@@ -1,12 +1,20 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import java.io.InputStream;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
class ReceiverInputStream extends InputStream {
private final Receiver receiver;
+ @Nullable
private Data data = null;
private int offset = 0, length = 0;
@@ -18,6 +26,7 @@ class ReceiverInputStream extends InputStream {
public int read() throws IOException {
if (length == -1) return -1;
while (length == 0) if (!receive()) return -1;
+ if (data == null) throw new AssertionError();
int b = data.getBuffer()[offset] & 0xff;
offset++;
length--;
@@ -33,6 +42,7 @@ class ReceiverInputStream extends InputStream {
public int read(byte[] b, int off, int len) throws IOException {
if (length == -1) return -1;
while (length == 0) if (!receive()) return -1;
+ if (data == null) throw new AssertionError();
len = Math.min(len, length);
System.arraycopy(data.getBuffer(), offset, b, off, len);
offset += len;
@@ -41,7 +51,7 @@ class ReceiverInputStream extends InputStream {
}
private boolean receive() throws IOException {
- assert length == 0;
+ if (length != 0) throw new AssertionError();
if (data != null && data.isLastFrame()) {
length = -1;
return false;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerFactoryImpl.java
new file mode 100644
index 000000000..fbe4b1823
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerFactoryImpl.java
@@ -0,0 +1,33 @@
+package org.briarproject.bramble.reliability;
+
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.reliability.ReliabilityLayer;
+import org.briarproject.bramble.api.reliability.ReliabilityLayerFactory;
+import org.briarproject.bramble.api.reliability.WriteHandler;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.system.SystemClock;
+
+import java.util.concurrent.Executor;
+
+import javax.annotation.concurrent.Immutable;
+import javax.inject.Inject;
+
+@Immutable
+@NotNullByDefault
+class ReliabilityLayerFactoryImpl implements ReliabilityLayerFactory {
+
+ private final Executor ioExecutor;
+ private final Clock clock;
+
+ @Inject
+ ReliabilityLayerFactoryImpl(@IoExecutor Executor ioExecutor) {
+ this.ioExecutor = ioExecutor;
+ clock = new SystemClock();
+ }
+
+ @Override
+ public ReliabilityLayer createReliabilityLayer(WriteHandler writeHandler) {
+ return new ReliabilityLayerImpl(ioExecutor, clock, writeHandler);
+ }
+}
diff --git a/briar-core/src/org/briarproject/reliability/ReliabilityLayerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerImpl.java
similarity index 85%
rename from briar-core/src/org/briarproject/reliability/ReliabilityLayerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerImpl.java
index 505898473..b6b60ef9d 100644
--- a/briar-core/src/org/briarproject/reliability/ReliabilityLayerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerImpl.java
@@ -1,7 +1,10 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static java.util.logging.Level.WARNING;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.reliability.ReliabilityLayer;
+import org.briarproject.bramble.api.reliability.WriteHandler;
+import org.briarproject.bramble.api.system.Clock;
import java.io.IOException;
import java.io.InputStream;
@@ -11,10 +14,11 @@ import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Logger;
-import org.briarproject.api.reliability.ReliabilityLayer;
-import org.briarproject.api.reliability.WriteHandler;
-import org.briarproject.api.system.Clock;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.logging.Level.WARNING;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class ReliabilityLayerImpl implements ReliabilityLayer, WriteHandler {
private static final int TICK_INTERVAL = 500; // Milliseconds
@@ -41,6 +45,7 @@ class ReliabilityLayerImpl implements ReliabilityLayer, WriteHandler {
writes = new LinkedBlockingQueue();
}
+ @Override
public void start() {
SlipEncoder encoder = new SlipEncoder(this);
final Sender sender = new Sender(clock, encoder);
@@ -50,6 +55,7 @@ class ReliabilityLayerImpl implements ReliabilityLayer, WriteHandler {
outputStream = new SenderOutputStream(sender);
running = true;
executor.execute(new Runnable() {
+ @Override
public void run() {
long now = clock.currentTimeMillis();
long next = now + TICK_INTERVAL;
@@ -82,26 +88,31 @@ class ReliabilityLayerImpl implements ReliabilityLayer, WriteHandler {
});
}
+ @Override
public void stop() {
running = false;
receiver.invalidate();
writes.add(new byte[0]); // Poison pill
}
+ @Override
public InputStream getInputStream() {
return inputStream;
}
+ @Override
public OutputStream getOutputStream() {
return outputStream;
}
// The lower layer calls this method to pass data up to the SLIP decoder
+ @Override
public void handleRead(byte[] b) throws IOException {
if (running) decoder.handleRead(b);
}
// The SLIP encoder calls this method to pass data down to the lower layer
+ @Override
public void handleWrite(byte[] b) {
if (running && b.length > 0) writes.add(b);
}
diff --git a/briar-core/src/org/briarproject/reliability/ReliabilityModule.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityModule.java
similarity index 56%
rename from briar-core/src/org/briarproject/reliability/ReliabilityModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityModule.java
index 092f218b3..a4431a422 100644
--- a/briar-core/src/org/briarproject/reliability/ReliabilityModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityModule.java
@@ -1,12 +1,10 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.reliability.ReliabilityLayerFactory;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.reliability.ReliabilityLayerFactory;
import java.util.concurrent.Executor;
-import javax.inject.Named;
-
import dagger.Module;
import dagger.Provides;
@@ -14,8 +12,8 @@ import dagger.Provides;
public class ReliabilityModule {
@Provides
- ReliabilityLayerFactory provideReliabilityFactoryByExector(@IoExecutor
- Executor ioExecutor) {
+ ReliabilityLayerFactory provideReliabilityFactoryByExector(
+ @IoExecutor Executor ioExecutor) {
return new ReliabilityLayerFactoryImpl(ioExecutor);
}
diff --git a/briar-core/src/org/briarproject/reliability/Sender.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Sender.java
similarity index 94%
rename from briar-core/src/org/briarproject/reliability/Sender.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/Sender.java
index 06d5e3efc..306278099 100644
--- a/briar-core/src/org/briarproject/reliability/Sender.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Sender.java
@@ -1,6 +1,8 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.reliability.WriteHandler;
+import org.briarproject.bramble.api.system.Clock;
import java.io.IOException;
import java.util.ArrayList;
@@ -11,9 +13,12 @@ import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-import org.briarproject.api.reliability.WriteHandler;
-import org.briarproject.api.system.Clock;
+import javax.annotation.concurrent.ThreadSafe;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
+@ThreadSafe
+@NotNullByDefault
class Sender {
// All times are in milliseconds
@@ -169,7 +174,8 @@ class Sender {
try {
// Wait for space in the window
long now = clock.currentTimeMillis(), end = now + WRITE_TIMEOUT;
- while (now < end && outstandingBytes + payloadLength >= windowSize) {
+ while (now < end &&
+ outstandingBytes + payloadLength >= windowSize) {
dataWaiting = true;
sendWindowAvailable.await(end - now, MILLISECONDS);
now = clock.currentTimeMillis();
diff --git a/briar-core/src/org/briarproject/reliability/SenderOutputStream.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/SenderOutputStream.java
similarity index 91%
rename from briar-core/src/org/briarproject/reliability/SenderOutputStream.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/SenderOutputStream.java
index 715fadaff..b90494b52 100644
--- a/briar-core/src/org/briarproject/reliability/SenderOutputStream.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/SenderOutputStream.java
@@ -1,8 +1,14 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import java.io.OutputStream;
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
class SenderOutputStream extends OutputStream {
private final Sender sender;
diff --git a/briar-core/src/org/briarproject/reliability/SlipDecoder.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/SlipDecoder.java
similarity index 86%
rename from briar-core/src/org/briarproject/reliability/SlipDecoder.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/SlipDecoder.java
index 3ad966a79..b4ca04c94 100644
--- a/briar-core/src/org/briarproject/reliability/SlipDecoder.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/SlipDecoder.java
@@ -1,9 +1,14 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.reliability.ReadHandler;
import java.io.IOException;
-import org.briarproject.api.reliability.ReadHandler;
+import javax.annotation.concurrent.Immutable;
+@Immutable
+@NotNullByDefault
class SlipDecoder implements ReadHandler {
// https://tools.ietf.org/html/rfc1055
@@ -21,6 +26,7 @@ class SlipDecoder implements ReadHandler {
buf = new byte[maxDecodedLength];
}
+ @Override
public void handleRead(byte[] b) throws IOException {
for (int i = 0; i < b.length; i++) {
switch(b[i]) {
diff --git a/briar-core/src/org/briarproject/reliability/SlipEncoder.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/SlipEncoder.java
similarity index 78%
rename from briar-core/src/org/briarproject/reliability/SlipEncoder.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reliability/SlipEncoder.java
index 2051f6304..1d7710845 100644
--- a/briar-core/src/org/briarproject/reliability/SlipEncoder.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/SlipEncoder.java
@@ -1,9 +1,14 @@
-package org.briarproject.reliability;
+package org.briarproject.bramble.reliability;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.reliability.WriteHandler;
import java.io.IOException;
-import org.briarproject.api.reliability.WriteHandler;
+import javax.annotation.concurrent.Immutable;
+@Immutable
+@NotNullByDefault
class SlipEncoder implements WriteHandler {
// https://tools.ietf.org/html/rfc1055
@@ -16,6 +21,7 @@ class SlipEncoder implements WriteHandler {
this.writeHandler = writeHandler;
}
+ @Override
public void handleWrite(byte[] b) throws IOException {
int encodedLength = b.length + 2;
for (int i = 0; i < b.length; i++)
diff --git a/briar-core/src/org/briarproject/reporting/DevReportServer.java b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java
similarity index 87%
rename from briar-core/src/org/briarproject/reporting/DevReportServer.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java
index e8e0ffa97..5490c7ee0 100644
--- a/briar-core/src/org/briarproject/reporting/DevReportServer.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java
@@ -1,4 +1,6 @@
-package org.briarproject.reporting;
+package org.briarproject.bramble.reporting;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.Closeable;
import java.io.File;
@@ -11,6 +13,11 @@ import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Semaphore;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
public class DevReportServer {
private static final String FILE_PREFIX = "report-";
@@ -43,7 +50,23 @@ public class DevReportServer {
} catch (InterruptedException e) {
System.err.println("Interrupted while listening");
} finally {
- ss.close();
+ tryToClose(ss);
+ }
+ }
+
+ private void tryToClose(@Nullable ServerSocket ss) {
+ try {
+ if (ss != null) ss.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void tryToClose(@Nullable Closeable c) {
+ try {
+ if (c != null) c.close();
+ } catch (IOException e) {
+ e.printStackTrace();
}
}
@@ -133,13 +156,5 @@ public class DevReportServer {
tryToClose(out);
}
}
-
- private void tryToClose(Closeable c) {
- try {
- if (c != null) c.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
}
}
diff --git a/briar-core/src/org/briarproject/reporting/DevReporterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java
similarity index 82%
rename from briar-core/src/org/briarproject/reporting/DevReporterImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java
index e9df70582..919b6f240 100644
--- a/briar-core/src/org/briarproject/reporting/DevReporterImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java
@@ -1,10 +1,11 @@
-package org.briarproject.reporting;
+package org.briarproject.bramble.reporting;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.reporting.DevConfig;
-import org.briarproject.api.reporting.DevReporter;
-import org.briarproject.util.IoUtils;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.reporting.DevConfig;
+import org.briarproject.bramble.api.reporting.DevReporter;
+import org.briarproject.bramble.util.IoUtils;
+import org.briarproject.bramble.util.StringUtils;
import java.io.Closeable;
import java.io.File;
@@ -19,10 +20,14 @@ import java.io.PrintWriter;
import java.net.Socket;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
import javax.net.SocketFactory;
import static java.util.logging.Level.WARNING;
+@Immutable
+@NotNullByDefault
class DevReporterImpl implements DevReporter {
private static final Logger LOG =
@@ -102,7 +107,7 @@ class DevReporterImpl implements DevReporter {
LOG.info("Reports sent");
}
- private void tryToClose(Closeable c) {
+ private void tryToClose(@Nullable Closeable c) {
try {
if (c != null) c.close();
} catch (IOException e) {
@@ -110,7 +115,7 @@ class DevReporterImpl implements DevReporter {
}
}
- private void tryToClose(Socket s) {
+ private void tryToClose(@Nullable Socket s) {
try {
if (s != null) s.close();
} catch (IOException e) {
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reporting/ReportingModule.java b/bramble-core/src/main/java/org/briarproject/bramble/reporting/ReportingModule.java
new file mode 100644
index 000000000..1996ea86b
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reporting/ReportingModule.java
@@ -0,0 +1,20 @@
+package org.briarproject.bramble.reporting;
+
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.reporting.DevConfig;
+import org.briarproject.bramble.api.reporting.DevReporter;
+
+import javax.net.SocketFactory;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class ReportingModule {
+
+ @Provides
+ DevReporter provideDevReporter(CryptoComponent crypto,
+ DevConfig devConfig, SocketFactory torSocketFactory) {
+ return new DevReporterImpl(crypto, devConfig, torSocketFactory);
+ }
+}
diff --git a/briar-core/src/org/briarproject/settings/SettingsManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/settings/SettingsManagerImpl.java
similarity index 61%
rename from briar-core/src/org/briarproject/settings/SettingsManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/settings/SettingsManagerImpl.java
index cfd20daf2..5663f8e8b 100644
--- a/briar-core/src/org/briarproject/settings/SettingsManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/settings/SettingsManagerImpl.java
@@ -1,14 +1,17 @@
-package org.briarproject.settings;
+package org.briarproject.bramble.settings;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.settings.SettingsManager;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.settings.SettingsManager;
-
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
+@Immutable
+@NotNullByDefault
class SettingsManagerImpl implements SettingsManager {
private final DatabaseComponent db;
diff --git a/briar-core/src/org/briarproject/settings/SettingsModule.java b/bramble-core/src/main/java/org/briarproject/bramble/settings/SettingsModule.java
similarity index 53%
rename from briar-core/src/org/briarproject/settings/SettingsModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/settings/SettingsModule.java
index b9edc9951..3c0900d73 100644
--- a/briar-core/src/org/briarproject/settings/SettingsModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/settings/SettingsModule.java
@@ -1,8 +1,7 @@
-package org.briarproject.settings;
+package org.briarproject.bramble.settings;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.settings.SettingsManager;
-import org.briarproject.db.DatabaseModule;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.settings.SettingsManager;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-core/src/org/briarproject/socks/SocksModule.java b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java
similarity index 63%
rename from briar-core/src/org/briarproject/socks/SocksModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java
index eaaa3c4d6..1fe9f31c6 100644
--- a/briar-core/src/org/briarproject/socks/SocksModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java
@@ -1,4 +1,4 @@
-package org.briarproject.socks;
+package org.briarproject.bramble.socks;
import java.net.InetSocketAddress;
@@ -7,8 +7,8 @@ import javax.net.SocketFactory;
import dagger.Module;
import dagger.Provides;
-import static org.briarproject.api.plugins.TorConstants.CONNECT_TO_PROXY_TIMEOUT;
-import static org.briarproject.api.plugins.TorConstants.SOCKS_PORT;
+import static org.briarproject.bramble.api.plugin.TorConstants.CONNECT_TO_PROXY_TIMEOUT;
+import static org.briarproject.bramble.api.plugin.TorConstants.SOCKS_PORT;
@Module
public class SocksModule {
diff --git a/briar-core/src/org/briarproject/socks/SocksSocket.java b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java
similarity index 96%
rename from briar-core/src/org/briarproject/socks/SocksSocket.java
rename to bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java
index 7c627daef..226596626 100644
--- a/briar-core/src/org/briarproject/socks/SocksSocket.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java
@@ -1,7 +1,7 @@
-package org.briarproject.socks;
+package org.briarproject.bramble.socks;
-import org.briarproject.util.ByteUtils;
-import org.briarproject.util.IoUtils;
+import org.briarproject.bramble.util.ByteUtils;
+import org.briarproject.bramble.util.IoUtils;
import java.io.IOException;
import java.io.InputStream;
diff --git a/briar-core/src/org/briarproject/socks/SocksSocketFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocketFactory.java
similarity index 96%
rename from briar-core/src/org/briarproject/socks/SocksSocketFactory.java
rename to bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocketFactory.java
index dfcd97359..adc5265fb 100644
--- a/briar-core/src/org/briarproject/socks/SocksSocketFactory.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocketFactory.java
@@ -1,4 +1,4 @@
-package org.briarproject.socks;
+package org.briarproject.bramble.socks;
import java.io.IOException;
import java.net.InetAddress;
diff --git a/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java
similarity index 79%
rename from briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java
index a4c8f499f..c8b306fda 100644
--- a/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java
@@ -1,25 +1,28 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.event.ContactRemovedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.GroupVisibilityUpdatedEvent;
-import org.briarproject.api.event.MessageRequestedEvent;
-import org.briarproject.api.event.MessageSharedEvent;
-import org.briarproject.api.event.MessageToAckEvent;
-import org.briarproject.api.event.MessageToRequestEvent;
-import org.briarproject.api.event.ShutdownEvent;
-import org.briarproject.api.sync.Ack;
-import org.briarproject.api.sync.Offer;
-import org.briarproject.api.sync.PacketWriter;
-import org.briarproject.api.sync.Request;
-import org.briarproject.api.sync.SyncSession;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.event.ShutdownEvent;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Ack;
+import org.briarproject.bramble.api.sync.Offer;
+import org.briarproject.bramble.api.sync.PacketWriter;
+import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.api.sync.SyncSession;
+import org.briarproject.bramble.api.sync.event.GroupVisibilityUpdatedEvent;
+import org.briarproject.bramble.api.sync.event.MessageRequestedEvent;
+import org.briarproject.bramble.api.sync.event.MessageSharedEvent;
+import org.briarproject.bramble.api.sync.event.MessageToAckEvent;
+import org.briarproject.bramble.api.sync.event.MessageToRequestEvent;
+import org.briarproject.bramble.api.system.Clock;
import java.io.IOException;
import java.util.Collection;
@@ -28,18 +31,22 @@ import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
+
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_IDS;
-import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
/**
- * An outgoing {@link org.briarproject.api.sync.SyncSession SyncSession}
- * suitable for duplex transports. The session offers messages before sending
- * them, keeps its output stream open when there are no packets to send, and
- * reacts to events that make packets available to send.
+ * An outgoing {@link SyncSession} suitable for duplex transports. The session
+ * offers messages before sending them, keeps its output stream open when there
+ * are no packets to send, and reacts to events that make packets available to
+ * send.
*/
+@ThreadSafe
+@NotNullByDefault
class DuplexOutgoingSession implements SyncSession, EventListener {
// Check for retransmittable packets once every 60 seconds
@@ -49,7 +56,9 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
private static final ThrowingRunnable CLOSE =
new ThrowingRunnable() {
- public void run() {}
+ @Override
+ public void run() {
+ }
};
private final DatabaseComponent db;
@@ -77,6 +86,8 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
writerTasks = new LinkedBlockingQueue>();
}
+ @IoExecutor
+ @Override
public void run() throws IOException {
eventBus.addListener(this);
try {
@@ -136,11 +147,13 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
}
}
+ @Override
public void interrupt() {
interrupted = true;
writerTasks.add(CLOSE);
}
+ @Override
public void eventOccurred(Event e) {
if (e instanceof ContactRemovedEvent) {
ContactRemovedEvent c = (ContactRemovedEvent) e;
@@ -165,9 +178,10 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the database thread
private class GenerateAck implements Runnable {
+ @DatabaseExecutor
+ @Override
public void run() {
if (interrupted) return;
try {
@@ -189,7 +203,6 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the writer thread
private class WriteAck implements ThrowingRunnable {
private final Ack ack;
@@ -198,6 +211,8 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
this.ack = ack;
}
+ @IoExecutor
+ @Override
public void run() throws IOException {
if (interrupted) return;
packetWriter.writeAck(ack);
@@ -206,9 +221,10 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the database thread
private class GenerateBatch implements Runnable {
+ @DatabaseExecutor
+ @Override
public void run() {
if (interrupted) return;
try {
@@ -231,7 +247,6 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the writer thread
private class WriteBatch implements ThrowingRunnable {
private final Collection batch;
@@ -240,6 +255,8 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
this.batch = batch;
}
+ @IoExecutor
+ @Override
public void run() throws IOException {
if (interrupted) return;
for (byte[] raw : batch) packetWriter.writeMessage(raw);
@@ -248,9 +265,10 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the database thread
private class GenerateOffer implements Runnable {
+ @DatabaseExecutor
+ @Override
public void run() {
if (interrupted) return;
try {
@@ -273,7 +291,6 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the writer thread
private class WriteOffer implements ThrowingRunnable {
private final Offer offer;
@@ -282,6 +299,8 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
this.offer = offer;
}
+ @IoExecutor
+ @Override
public void run() throws IOException {
if (interrupted) return;
packetWriter.writeOffer(offer);
@@ -290,9 +309,10 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the database thread
private class GenerateRequest implements Runnable {
+ @DatabaseExecutor
+ @Override
public void run() {
if (interrupted) return;
try {
@@ -314,7 +334,6 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the writer thread
private class WriteRequest implements ThrowingRunnable {
private final Request request;
@@ -323,6 +342,8 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
this.request = request;
}
+ @IoExecutor
+ @Override
public void run() throws IOException {
if (interrupted) return;
packetWriter.writeRequest(request);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/GroupFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/GroupFactoryImpl.java
new file mode 100644
index 000000000..18065fc10
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/GroupFactoryImpl.java
@@ -0,0 +1,31 @@
+package org.briarproject.bramble.sync;
+
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.GroupFactory;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.util.StringUtils;
+
+import javax.annotation.concurrent.Immutable;
+import javax.inject.Inject;
+
+@Immutable
+@NotNullByDefault
+class GroupFactoryImpl implements GroupFactory {
+
+ private final CryptoComponent crypto;
+
+ @Inject
+ GroupFactoryImpl(CryptoComponent crypto) {
+ this.crypto = crypto;
+ }
+
+ @Override
+ public Group createGroup(ClientId c, byte[] descriptor) {
+ byte[] hash = crypto.hash(GroupId.LABEL,
+ StringUtils.toUtf8(c.getString()), descriptor);
+ return new Group(new GroupId(hash), c, descriptor);
+ }
+}
diff --git a/briar-core/src/org/briarproject/sync/IncomingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java
similarity index 74%
rename from briar-core/src/org/briarproject/sync/IncomingSession.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java
index b434bb643..4c64a17f5 100644
--- a/briar-core/src/org/briarproject/sync/IncomingSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java
@@ -1,31 +1,38 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.event.ContactRemovedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.ShutdownEvent;
-import org.briarproject.api.sync.Ack;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.Offer;
-import org.briarproject.api.sync.PacketReader;
-import org.briarproject.api.sync.Request;
-import org.briarproject.api.sync.SyncSession;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.event.ShutdownEvent;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Ack;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.Offer;
+import org.briarproject.bramble.api.sync.PacketReader;
+import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.api.sync.SyncSession;
import java.io.IOException;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
+
import static java.util.logging.Level.WARNING;
/**
- * An incoming {@link org.briarproject.api.sync.SyncSession SyncSession}.
+ * An incoming {@link SyncSession}.
*/
+@ThreadSafe
+@NotNullByDefault
class IncomingSession implements SyncSession, EventListener {
private static final Logger LOG =
@@ -49,6 +56,8 @@ class IncomingSession implements SyncSession, EventListener {
this.packetReader = packetReader;
}
+ @IoExecutor
+ @Override
public void run() throws IOException {
eventBus.addListener(this);
try {
@@ -75,11 +84,13 @@ class IncomingSession implements SyncSession, EventListener {
}
}
+ @Override
public void interrupt() {
// FIXME: This won't interrupt a blocking read
interrupted = true;
}
+ @Override
public void eventOccurred(Event e) {
if (e instanceof ContactRemovedEvent) {
ContactRemovedEvent c = (ContactRemovedEvent) e;
@@ -97,6 +108,8 @@ class IncomingSession implements SyncSession, EventListener {
this.ack = ack;
}
+ @DatabaseExecutor
+ @Override
public void run() {
try {
Transaction txn = db.startTransaction(false);
@@ -121,6 +134,8 @@ class IncomingSession implements SyncSession, EventListener {
this.message = message;
}
+ @DatabaseExecutor
+ @Override
public void run() {
try {
Transaction txn = db.startTransaction(false);
@@ -145,6 +160,8 @@ class IncomingSession implements SyncSession, EventListener {
this.offer = offer;
}
+ @DatabaseExecutor
+ @Override
public void run() {
try {
Transaction txn = db.startTransaction(false);
@@ -169,6 +186,8 @@ class IncomingSession implements SyncSession, EventListener {
this.request = request;
}
+ @DatabaseExecutor
+ @Override
public void run() {
try {
Transaction txn = db.startTransaction(false);
diff --git a/briar-core/src/org/briarproject/sync/MessageFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/MessageFactoryImpl.java
similarity index 65%
rename from briar-core/src/org/briarproject/sync/MessageFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/MessageFactoryImpl.java
index c245ea53b..d94eb7c4b 100644
--- a/briar-core/src/org/briarproject/sync/MessageFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/MessageFactoryImpl.java
@@ -1,19 +1,19 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
-import org.briarproject.api.UniqueId;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageFactory;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.util.ByteUtils;
+import org.briarproject.bramble.api.UniqueId;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageFactory;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.util.ByteUtils;
import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
-import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
-import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
@Immutable
@NotNullByDefault
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketReaderFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketReaderFactoryImpl.java
new file mode 100644
index 000000000..914bbf1f5
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketReaderFactoryImpl.java
@@ -0,0 +1,28 @@
+package org.briarproject.bramble.sync;
+
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.PacketReader;
+import org.briarproject.bramble.api.sync.PacketReaderFactory;
+
+import java.io.InputStream;
+
+import javax.annotation.concurrent.Immutable;
+import javax.inject.Inject;
+
+@Immutable
+@NotNullByDefault
+class PacketReaderFactoryImpl implements PacketReaderFactory {
+
+ private final CryptoComponent crypto;
+
+ @Inject
+ PacketReaderFactoryImpl(CryptoComponent crypto) {
+ this.crypto = crypto;
+ }
+
+ @Override
+ public PacketReader createPacketReader(InputStream in) {
+ return new PacketReaderImpl(crypto, in);
+ }
+}
diff --git a/briar-core/src/org/briarproject/sync/PacketReaderImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketReaderImpl.java
similarity index 73%
rename from briar-core/src/org/briarproject/sync/PacketReaderImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/PacketReaderImpl.java
index abe24fa6b..414f7e812 100644
--- a/briar-core/src/org/briarproject/sync/PacketReaderImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketReaderImpl.java
@@ -1,32 +1,36 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.UniqueId;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.sync.Ack;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.sync.Offer;
-import org.briarproject.api.sync.PacketReader;
-import org.briarproject.api.sync.Request;
-import org.briarproject.util.ByteUtils;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.UniqueId;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Ack;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.Offer;
+import org.briarproject.bramble.api.sync.PacketReader;
+import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.util.ByteUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
-import static org.briarproject.api.sync.PacketTypes.ACK;
-import static org.briarproject.api.sync.PacketTypes.MESSAGE;
-import static org.briarproject.api.sync.PacketTypes.OFFER;
-import static org.briarproject.api.sync.PacketTypes.REQUEST;
-import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
-import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
-import static org.briarproject.api.sync.SyncConstants.PACKET_HEADER_LENGTH;
-import static org.briarproject.api.sync.SyncConstants.PROTOCOL_VERSION;
+import javax.annotation.concurrent.NotThreadSafe;
-// This class is not thread-safe
+import static org.briarproject.bramble.api.sync.PacketTypes.ACK;
+import static org.briarproject.bramble.api.sync.PacketTypes.MESSAGE;
+import static org.briarproject.bramble.api.sync.PacketTypes.OFFER;
+import static org.briarproject.bramble.api.sync.PacketTypes.REQUEST;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.PACKET_HEADER_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.PROTOCOL_VERSION;
+
+@NotThreadSafe
+@NotNullByDefault
class PacketReaderImpl implements PacketReader {
private enum State { BUFFER_EMPTY, BUFFER_FULL, EOF }
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketWriterFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketWriterFactoryImpl.java
new file mode 100644
index 000000000..343819390
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketWriterFactoryImpl.java
@@ -0,0 +1,16 @@
+package org.briarproject.bramble.sync;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.PacketWriter;
+import org.briarproject.bramble.api.sync.PacketWriterFactory;
+
+import java.io.OutputStream;
+
+@NotNullByDefault
+class PacketWriterFactoryImpl implements PacketWriterFactory {
+
+ @Override
+ public PacketWriter createPacketWriter(OutputStream out) {
+ return new PacketWriterImpl(out);
+ }
+}
diff --git a/briar-core/src/org/briarproject/sync/PacketWriterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketWriterImpl.java
similarity index 59%
rename from briar-core/src/org/briarproject/sync/PacketWriterImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/PacketWriterImpl.java
index 9bcbe570f..62e702e41 100644
--- a/briar-core/src/org/briarproject/sync/PacketWriterImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/PacketWriterImpl.java
@@ -1,25 +1,29 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
-import org.briarproject.api.sync.Ack;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.sync.Offer;
-import org.briarproject.api.sync.PacketTypes;
-import org.briarproject.api.sync.PacketWriter;
-import org.briarproject.api.sync.Request;
-import org.briarproject.util.ByteUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Ack;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.Offer;
+import org.briarproject.bramble.api.sync.PacketTypes;
+import org.briarproject.bramble.api.sync.PacketWriter;
+import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.util.ByteUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
-import static org.briarproject.api.sync.PacketTypes.ACK;
-import static org.briarproject.api.sync.PacketTypes.OFFER;
-import static org.briarproject.api.sync.PacketTypes.REQUEST;
-import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
-import static org.briarproject.api.sync.SyncConstants.PACKET_HEADER_LENGTH;
-import static org.briarproject.api.sync.SyncConstants.PROTOCOL_VERSION;
+import javax.annotation.concurrent.NotThreadSafe;
-// This class is not thread-safe
+import static org.briarproject.bramble.api.sync.PacketTypes.ACK;
+import static org.briarproject.bramble.api.sync.PacketTypes.OFFER;
+import static org.briarproject.bramble.api.sync.PacketTypes.REQUEST;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.PACKET_HEADER_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.PROTOCOL_VERSION;
+
+@NotThreadSafe
+@NotNullByDefault
class PacketWriterImpl implements PacketWriter {
private final OutputStream out;
@@ -41,12 +45,14 @@ class PacketWriterImpl implements PacketWriter {
payload.reset();
}
+ @Override
public void writeAck(Ack a) throws IOException {
if (payload.size() != 0) throw new IllegalStateException();
for (MessageId m : a.getMessageIds()) payload.write(m.getBytes());
writePacket(ACK);
}
+ @Override
public void writeMessage(byte[] raw) throws IOException {
header[1] = PacketTypes.MESSAGE;
ByteUtils.writeUint16(raw.length, header, 2);
@@ -54,18 +60,21 @@ class PacketWriterImpl implements PacketWriter {
out.write(raw);
}
+ @Override
public void writeOffer(Offer o) throws IOException {
if (payload.size() != 0) throw new IllegalStateException();
for (MessageId m : o.getMessageIds()) payload.write(m.getBytes());
writePacket(OFFER);
}
+ @Override
public void writeRequest(Request r) throws IOException {
if (payload.size() != 0) throw new IllegalStateException();
for (MessageId m : r.getMessageIds()) payload.write(m.getBytes());
writePacket(REQUEST);
}
+ @Override
public void flush() throws IOException {
out.flush();
}
diff --git a/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java
similarity index 75%
rename from briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java
index a2caf77c5..c2a1bc64e 100644
--- a/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java
@@ -1,17 +1,20 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.event.ContactRemovedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.ShutdownEvent;
-import org.briarproject.api.sync.Ack;
-import org.briarproject.api.sync.PacketWriter;
-import org.briarproject.api.sync.SyncSession;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.event.ShutdownEvent;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Ack;
+import org.briarproject.bramble.api.sync.PacketWriter;
+import org.briarproject.bramble.api.sync.SyncSession;
import java.io.IOException;
import java.util.Collection;
@@ -21,17 +24,20 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
+
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_IDS;
-import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
/**
- * An outgoing {@link org.briarproject.api.sync.SyncSession SyncSession}
- * suitable for simplex transports. The session sends messages without offering
- * them first, and closes its output stream when there are no more packets to
- * send.
+ * An outgoing {@link SyncSession} suitable for simplex transports. The session
+ * sends messages without offering them first, and closes its output stream
+ * when there are no more packets to send.
*/
+@ThreadSafe
+@NotNullByDefault
class SimplexOutgoingSession implements SyncSession, EventListener {
private static final Logger LOG =
@@ -39,7 +45,9 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
private static final ThrowingRunnable CLOSE =
new ThrowingRunnable() {
- public void run() {}
+ @Override
+ public void run() {
+ }
};
private final DatabaseComponent db;
@@ -66,6 +74,8 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
writerTasks = new LinkedBlockingQueue>();
}
+ @IoExecutor
+ @Override
public void run() throws IOException {
eventBus.addListener(this);
try {
@@ -89,6 +99,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
}
}
+ @Override
public void interrupt() {
interrupted = true;
writerTasks.add(CLOSE);
@@ -98,6 +109,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
if (outstandingQueries.decrementAndGet() == 0) writerTasks.add(CLOSE);
}
+ @Override
public void eventOccurred(Event e) {
if (e instanceof ContactRemovedEvent) {
ContactRemovedEvent c = (ContactRemovedEvent) e;
@@ -107,9 +119,10 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the database thread
private class GenerateAck implements Runnable {
+ @DatabaseExecutor
+ @Override
public void run() {
if (interrupted) return;
try {
@@ -132,7 +145,6 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the writer thread
private class WriteAck implements ThrowingRunnable {
private final Ack ack;
@@ -141,6 +153,8 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
this.ack = ack;
}
+ @IoExecutor
+ @Override
public void run() throws IOException {
if (interrupted) return;
packetWriter.writeAck(ack);
@@ -149,9 +163,10 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the database thread
private class GenerateBatch implements Runnable {
+ @DatabaseExecutor
+ @Override
public void run() {
if (interrupted) return;
try {
@@ -175,7 +190,6 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
}
}
- // This task runs on the writer thread
private class WriteBatch implements ThrowingRunnable {
private final Collection batch;
@@ -184,6 +198,8 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
this.batch = batch;
}
+ @IoExecutor
+ @Override
public void run() throws IOException {
if (interrupted) return;
for (byte[] raw : batch) packetWriter.writeMessage(raw);
diff --git a/briar-core/src/org/briarproject/sync/SyncModule.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java
similarity index 63%
rename from briar-core/src/org/briarproject/sync/SyncModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java
index 2cbbac5d7..44703c8b3 100644
--- a/briar-core/src/org/briarproject/sync/SyncModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java
@@ -1,17 +1,17 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.sync.GroupFactory;
-import org.briarproject.api.sync.MessageFactory;
-import org.briarproject.api.sync.PacketReaderFactory;
-import org.briarproject.api.sync.PacketWriterFactory;
-import org.briarproject.api.sync.SyncSessionFactory;
-import org.briarproject.api.sync.ValidationManager;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.sync.GroupFactory;
+import org.briarproject.bramble.api.sync.MessageFactory;
+import org.briarproject.bramble.api.sync.PacketReaderFactory;
+import org.briarproject.bramble.api.sync.PacketWriterFactory;
+import org.briarproject.bramble.api.sync.SyncSessionFactory;
+import org.briarproject.bramble.api.sync.ValidationManager;
+import org.briarproject.bramble.api.system.Clock;
import java.util.concurrent.Executor;
@@ -25,7 +25,8 @@ import dagger.Provides;
public class SyncModule {
public static class EagerSingletons {
- @Inject ValidationManager validationManager;
+ @Inject
+ ValidationManager validationManager;
}
@Provides
diff --git a/briar-core/src/org/briarproject/sync/SyncSessionFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java
similarity index 66%
rename from briar-core/src/org/briarproject/sync/SyncSessionFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java
index 6fac0012f..c337bf94a 100644
--- a/briar-core/src/org/briarproject/sync/SyncSessionFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java
@@ -1,23 +1,27 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.sync.PacketReader;
-import org.briarproject.api.sync.PacketReaderFactory;
-import org.briarproject.api.sync.PacketWriter;
-import org.briarproject.api.sync.PacketWriterFactory;
-import org.briarproject.api.sync.SyncSession;
-import org.briarproject.api.sync.SyncSessionFactory;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.PacketReader;
+import org.briarproject.bramble.api.sync.PacketReaderFactory;
+import org.briarproject.bramble.api.sync.PacketWriter;
+import org.briarproject.bramble.api.sync.PacketWriterFactory;
+import org.briarproject.bramble.api.sync.SyncSession;
+import org.briarproject.bramble.api.sync.SyncSessionFactory;
+import org.briarproject.bramble.api.system.Clock;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.Executor;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
+@Immutable
+@NotNullByDefault
class SyncSessionFactoryImpl implements SyncSessionFactory {
private final DatabaseComponent db;
@@ -40,11 +44,13 @@ class SyncSessionFactoryImpl implements SyncSessionFactory {
this.packetWriterFactory = packetWriterFactory;
}
+ @Override
public SyncSession createIncomingSession(ContactId c, InputStream in) {
PacketReader packetReader = packetReaderFactory.createPacketReader(in);
return new IncomingSession(db, dbExecutor, eventBus, c, packetReader);
}
+ @Override
public SyncSession createSimplexOutgoingSession(ContactId c,
int maxLatency, OutputStream out) {
PacketWriter packetWriter = packetWriterFactory.createPacketWriter(out);
@@ -52,6 +58,7 @@ class SyncSessionFactoryImpl implements SyncSessionFactory {
maxLatency, packetWriter);
}
+ @Override
public SyncSession createDuplexOutgoingSession(ContactId c, int maxLatency,
int maxIdleTime, OutputStream out) {
PacketWriter packetWriter = packetWriterFactory.createPacketWriter(out);
diff --git a/briar-core/src/org/briarproject/sync/ThrowingRunnable.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/ThrowingRunnable.java
similarity index 66%
rename from briar-core/src/org/briarproject/sync/ThrowingRunnable.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/ThrowingRunnable.java
index 5532a8fc0..55d966d31 100644
--- a/briar-core/src/org/briarproject/sync/ThrowingRunnable.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ThrowingRunnable.java
@@ -1,4 +1,4 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
interface ThrowingRunnable {
diff --git a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java
similarity index 91%
rename from briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java
index c4be29aa4..7e7aa865f 100644
--- a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java
@@ -1,26 +1,26 @@
-package org.briarproject.sync;
+package org.briarproject.bramble.sync;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Metadata;
-import org.briarproject.api.db.NoSuchGroupException;
-import org.briarproject.api.db.NoSuchMessageException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.MessageAddedEvent;
-import org.briarproject.api.lifecycle.Service;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.ClientId;
-import org.briarproject.api.sync.Group;
-import org.briarproject.api.sync.InvalidMessageException;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageContext;
-import org.briarproject.api.sync.MessageFactory;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.sync.ValidationManager;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Metadata;
+import org.briarproject.bramble.api.db.NoSuchGroupException;
+import org.briarproject.bramble.api.db.NoSuchMessageException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.Service;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.InvalidMessageException;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageContext;
+import org.briarproject.bramble.api.sync.MessageFactory;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.ValidationManager;
+import org.briarproject.bramble.api.sync.event.MessageAddedEvent;
import java.util.Collection;
import java.util.LinkedList;
@@ -37,9 +37,9 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.sync.ValidationManager.State.DELIVERED;
-import static org.briarproject.api.sync.ValidationManager.State.INVALID;
-import static org.briarproject.api.sync.ValidationManager.State.PENDING;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.DELIVERED;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.INVALID;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.PENDING;
@ThreadSafe
@NotNullByDefault
diff --git a/briar-core/src/org/briarproject/system/LinuxSeedProvider.java b/bramble-core/src/main/java/org/briarproject/bramble/system/LinuxSeedProvider.java
similarity index 86%
rename from briar-core/src/org/briarproject/system/LinuxSeedProvider.java
rename to bramble-core/src/main/java/org/briarproject/bramble/system/LinuxSeedProvider.java
index 6481b4a5f..e4141a417 100644
--- a/briar-core/src/org/briarproject/system/LinuxSeedProvider.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/system/LinuxSeedProvider.java
@@ -1,6 +1,7 @@
-package org.briarproject.system;
+package org.briarproject.bramble.system;
-import org.briarproject.api.system.SeedProvider;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.system.SeedProvider;
import java.io.DataInputStream;
import java.io.DataOutputStream;
@@ -13,8 +14,12 @@ import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;
+import javax.annotation.concurrent.Immutable;
+
import static java.util.logging.Level.WARNING;
+@Immutable
+@NotNullByDefault
class LinuxSeedProvider implements SeedProvider {
private static final Logger LOG =
@@ -31,6 +36,7 @@ class LinuxSeedProvider implements SeedProvider {
this.inputFile = inputFile;
}
+ @Override
public byte[] getSeed() {
byte[] seed = new byte[SEED_BYTES];
// Contribute whatever slightly unpredictable info we have to the pool
@@ -46,7 +52,7 @@ class LinuxSeedProvider implements SeedProvider {
}
// Read the seed from the pool
try {
- DataInputStream in = new DataInputStream(
+ DataInputStream in = new DataInputStream(
new FileInputStream(inputFile));
in.readFully(seed);
in.close();
diff --git a/briar-core/src/org/briarproject/system/SystemClock.java b/bramble-core/src/main/java/org/briarproject/bramble/system/SystemClock.java
similarity index 59%
rename from briar-core/src/org/briarproject/system/SystemClock.java
rename to bramble-core/src/main/java/org/briarproject/bramble/system/SystemClock.java
index 3117b0a50..b1737ad80 100644
--- a/briar-core/src/org/briarproject/system/SystemClock.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/system/SystemClock.java
@@ -1,14 +1,18 @@
-package org.briarproject.system;
+package org.briarproject.bramble.system;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.system.Clock;
-/** Default clock implementation. */
+/**
+ * Default clock implementation.
+ */
public class SystemClock implements Clock {
+ @Override
public long currentTimeMillis() {
return System.currentTimeMillis();
}
+ @Override
public void sleep(long milliseconds) throws InterruptedException {
Thread.sleep(milliseconds);
}
diff --git a/briar-core/src/org/briarproject/system/SystemModule.java b/bramble-core/src/main/java/org/briarproject/bramble/system/SystemModule.java
similarity index 78%
rename from briar-core/src/org/briarproject/system/SystemModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/system/SystemModule.java
index 40ca8037c..a052b4d54 100644
--- a/briar-core/src/org/briarproject/system/SystemModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/system/SystemModule.java
@@ -1,8 +1,8 @@
-package org.briarproject.system;
+package org.briarproject.bramble.system;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.Scheduler;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.api.system.Scheduler;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
diff --git a/briar-core/src/org/briarproject/transport/KeyManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java
similarity index 77%
rename from briar-core/src/org/briarproject/transport/KeyManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java
index a6c8f1be1..11e459eaf 100644
--- a/briar-core/src/org/briarproject/transport/KeyManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java
@@ -1,24 +1,25 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.event.ContactRemovedEvent;
-import org.briarproject.api.event.ContactStatusChangedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.lifecycle.Service;
-import org.briarproject.api.lifecycle.ServiceException;
-import org.briarproject.api.plugins.PluginConfig;
-import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
-import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
-import org.briarproject.api.transport.KeyManager;
-import org.briarproject.api.transport.StreamContext;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
+import org.briarproject.bramble.api.contact.event.ContactStatusChangedEvent;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.Service;
+import org.briarproject.bramble.api.lifecycle.ServiceException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.PluginConfig;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory;
+import org.briarproject.bramble.api.transport.KeyManager;
+import org.briarproject.bramble.api.transport.StreamContext;
import java.util.HashMap;
import java.util.Map;
@@ -28,10 +29,13 @@ import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
import static java.util.logging.Level.INFO;
+@ThreadSafe
+@NotNullByDefault
class KeyManagerImpl implements KeyManager, Service, EventListener {
private static final Logger LOG =
diff --git a/briar-core/src/org/briarproject/transport/MutableIncomingKeys.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/MutableIncomingKeys.java
similarity index 70%
rename from briar-core/src/org/briarproject/transport/MutableIncomingKeys.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/MutableIncomingKeys.java
index 6be3d1823..3f2f94a5c 100644
--- a/briar-core/src/org/briarproject/transport/MutableIncomingKeys.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/MutableIncomingKeys.java
@@ -1,9 +1,13 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.transport.IncomingKeys;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.transport.IncomingKeys;
-// This class is not thread-safe
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
class MutableIncomingKeys {
private final SecretKey tagKey, headerKey;
diff --git a/briar-core/src/org/briarproject/transport/MutableOutgoingKeys.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/MutableOutgoingKeys.java
similarity index 69%
rename from briar-core/src/org/briarproject/transport/MutableOutgoingKeys.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/MutableOutgoingKeys.java
index d8163e4f2..aaafec13b 100644
--- a/briar-core/src/org/briarproject/transport/MutableOutgoingKeys.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/MutableOutgoingKeys.java
@@ -1,9 +1,13 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.transport.OutgoingKeys;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.transport.OutgoingKeys;
-// This class is not thread-safe
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
class MutableOutgoingKeys {
private final SecretKey tagKey, headerKey;
diff --git a/briar-core/src/org/briarproject/transport/MutableTransportKeys.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/MutableTransportKeys.java
similarity index 76%
rename from briar-core/src/org/briarproject/transport/MutableTransportKeys.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/MutableTransportKeys.java
index 65861974e..ebaef9973 100644
--- a/briar-core/src/org/briarproject/transport/MutableTransportKeys.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/MutableTransportKeys.java
@@ -1,8 +1,13 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.transport.TransportKeys;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.transport.TransportKeys;
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
class MutableTransportKeys {
private final TransportId transportId;
diff --git a/briar-core/src/org/briarproject/transport/ReorderingWindow.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/ReorderingWindow.java
similarity index 90%
rename from briar-core/src/org/briarproject/transport/ReorderingWindow.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/ReorderingWindow.java
index c1baca01b..f81d57fa6 100644
--- a/briar-core/src/org/briarproject/transport/ReorderingWindow.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/ReorderingWindow.java
@@ -1,12 +1,17 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import static org.briarproject.util.ByteUtils.MAX_32_BIT_UNSIGNED;
+import javax.annotation.concurrent.NotThreadSafe;
-// This class is not thread-safe
+import static org.briarproject.bramble.util.ByteUtils.MAX_32_BIT_UNSIGNED;
+
+@NotThreadSafe
+@NotNullByDefault
class ReorderingWindow {
private long base;
diff --git a/briar-core/src/org/briarproject/transport/StreamReaderFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/StreamReaderFactoryImpl.java
similarity index 60%
rename from briar-core/src/org/briarproject/transport/StreamReaderFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/StreamReaderFactoryImpl.java
index 48179153f..0d2e9cfb7 100644
--- a/briar-core/src/org/briarproject/transport/StreamReaderFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/StreamReaderFactoryImpl.java
@@ -1,14 +1,18 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
+
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.StreamDecrypterFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.transport.StreamContext;
+import org.briarproject.bramble.api.transport.StreamReaderFactory;
import java.io.InputStream;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.crypto.StreamDecrypterFactory;
-import org.briarproject.api.transport.StreamContext;
-import org.briarproject.api.transport.StreamReaderFactory;
-
+@Immutable
+@NotNullByDefault
class StreamReaderFactoryImpl implements StreamReaderFactory {
private final StreamDecrypterFactory streamDecrypterFactory;
@@ -18,11 +22,13 @@ class StreamReaderFactoryImpl implements StreamReaderFactory {
this.streamDecrypterFactory = streamDecrypterFactory;
}
+ @Override
public InputStream createStreamReader(InputStream in, StreamContext ctx) {
return new StreamReaderImpl(
streamDecrypterFactory.createStreamDecrypter(in, ctx));
}
+ @Override
public InputStream createInvitationStreamReader(InputStream in,
SecretKey headerKey) {
return new StreamReaderImpl(
diff --git a/briar-core/src/org/briarproject/transport/StreamReaderImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/StreamReaderImpl.java
similarity index 72%
rename from briar-core/src/org/briarproject/transport/StreamReaderImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/StreamReaderImpl.java
index 87a90eb79..770592c73 100644
--- a/briar-core/src/org/briarproject/transport/StreamReaderImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/StreamReaderImpl.java
@@ -1,18 +1,20 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
-import static org.briarproject.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
+import org.briarproject.bramble.api.crypto.StreamDecrypter;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import java.io.InputStream;
-import org.briarproject.api.crypto.StreamDecrypter;
+import javax.annotation.concurrent.NotThreadSafe;
+
+import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
/**
- * An {@link java.io.InputStream InputStream} that unpacks payload data from
- * transport frames.
- *
- * This class is not thread-safe.
+ * An {@link InputStream} that unpacks payload data from transport frames.
*/
+@NotThreadSafe
+@NotNullByDefault
class StreamReaderImpl extends InputStream {
private final StreamDecrypter decrypter;
diff --git a/briar-core/src/org/briarproject/transport/StreamWriterFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/StreamWriterFactoryImpl.java
similarity index 61%
rename from briar-core/src/org/briarproject/transport/StreamWriterFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/StreamWriterFactoryImpl.java
index 4335273db..77dc7657d 100644
--- a/briar-core/src/org/briarproject/transport/StreamWriterFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/StreamWriterFactoryImpl.java
@@ -1,14 +1,18 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
+
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.crypto.StreamEncrypterFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.transport.StreamContext;
+import org.briarproject.bramble.api.transport.StreamWriterFactory;
import java.io.OutputStream;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.crypto.StreamEncrypterFactory;
-import org.briarproject.api.transport.StreamContext;
-import org.briarproject.api.transport.StreamWriterFactory;
-
+@Immutable
+@NotNullByDefault
class StreamWriterFactoryImpl implements StreamWriterFactory {
private final StreamEncrypterFactory streamEncrypterFactory;
@@ -18,12 +22,14 @@ class StreamWriterFactoryImpl implements StreamWriterFactory {
this.streamEncrypterFactory = streamEncrypterFactory;
}
+ @Override
public OutputStream createStreamWriter(OutputStream out,
StreamContext ctx) {
return new StreamWriterImpl(
streamEncrypterFactory.createStreamEncrypter(out, ctx));
}
+ @Override
public OutputStream createInvitationStreamWriter(OutputStream out,
SecretKey headerKey) {
return new StreamWriterImpl(
diff --git a/briar-core/src/org/briarproject/transport/StreamWriterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/StreamWriterImpl.java
similarity index 72%
rename from briar-core/src/org/briarproject/transport/StreamWriterImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/StreamWriterImpl.java
index 2fad04143..142ca19ff 100644
--- a/briar-core/src/org/briarproject/transport/StreamWriterImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/StreamWriterImpl.java
@@ -1,19 +1,22 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
-import static org.briarproject.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
+import org.briarproject.bramble.api.crypto.StreamEncrypter;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import java.io.OutputStream;
-import org.briarproject.api.crypto.StreamEncrypter;
+import javax.annotation.concurrent.NotThreadSafe;
+
+import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
/**
- * An {@link java.io.OutputStream OutputStream} that packs data into transport
- * frames, writing a frame whenever there is a full frame to write or the
- * {@link #flush()} method is called.
- *
- * This class is not thread-safe.
+ * An {@link OutputStream} that packs data into transport frames, writing a
+ * frame whenever there is a full frame to write or the {@link #flush()} method
+ * is called.
*/
+@NotThreadSafe
+@NotNullByDefault
class StreamWriterImpl extends OutputStream {
private final StreamEncrypter encrypter;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManager.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManager.java
new file mode 100644
index 000000000..6aa6d360f
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManager.java
@@ -0,0 +1,30 @@
+package org.briarproject.bramble.transport;
+
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.transport.StreamContext;
+
+import javax.annotation.Nullable;
+
+@NotNullByDefault
+interface TransportKeyManager {
+
+ void start(Transaction txn) throws DbException;
+
+ void addContact(Transaction txn, ContactId c, SecretKey master,
+ long timestamp, boolean alice) throws DbException;
+
+ void removeContact(ContactId c);
+
+ @Nullable
+ StreamContext getStreamContext(Transaction txn, ContactId c)
+ throws DbException;
+
+ @Nullable
+ StreamContext getStreamContext(Transaction txn, byte[] tag)
+ throws DbException;
+
+}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerFactory.java
new file mode 100644
index 000000000..64907dc41
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerFactory.java
@@ -0,0 +1,12 @@
+package org.briarproject.bramble.transport;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+
+@NotNullByDefault
+interface TransportKeyManagerFactory {
+
+ TransportKeyManager createTransportKeyManager(TransportId transportId,
+ long maxLatency);
+
+}
diff --git a/briar-core/src/org/briarproject/transport/TransportKeyManagerFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerFactoryImpl.java
similarity index 64%
rename from briar-core/src/org/briarproject/transport/TransportKeyManagerFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerFactoryImpl.java
index 55818bfdc..d212a027b 100644
--- a/briar-core/src/org/briarproject/transport/TransportKeyManagerFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerFactoryImpl.java
@@ -1,17 +1,21 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.Scheduler;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.api.system.Scheduler;
import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
+@Immutable
+@NotNullByDefault
class TransportKeyManagerFactoryImpl implements
TransportKeyManagerFactory {
diff --git a/briar-core/src/org/briarproject/transport/TransportKeyManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerImpl.java
similarity index 88%
rename from briar-core/src/org/briarproject/transport/TransportKeyManagerImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerImpl.java
index 72d0e444d..9c1582425 100644
--- a/briar-core/src/org/briarproject/transport/TransportKeyManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerImpl.java
@@ -1,18 +1,19 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
-import org.briarproject.api.Bytes;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.Scheduler;
-import org.briarproject.api.transport.StreamContext;
-import org.briarproject.api.transport.TransportKeys;
-import org.briarproject.transport.ReorderingWindow.Change;
+import org.briarproject.bramble.api.Bytes;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.api.system.Scheduler;
+import org.briarproject.bramble.api.transport.StreamContext;
+import org.briarproject.bramble.api.transport.TransportKeys;
+import org.briarproject.bramble.transport.ReorderingWindow.Change;
import java.util.HashMap;
import java.util.Iterator;
@@ -23,12 +24,16 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
+
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.transport.TransportConstants.MAX_CLOCK_DIFFERENCE;
-import static org.briarproject.api.transport.TransportConstants.TAG_LENGTH;
-import static org.briarproject.util.ByteUtils.MAX_32_BIT_UNSIGNED;
+import static org.briarproject.bramble.api.transport.TransportConstants.MAX_CLOCK_DIFFERENCE;
+import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
+import static org.briarproject.bramble.util.ByteUtils.MAX_32_BIT_UNSIGNED;
+@ThreadSafe
+@NotNullByDefault
class TransportKeyManagerImpl implements TransportKeyManager {
private static final Logger LOG =
diff --git a/briar-core/src/org/briarproject/transport/TransportModule.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportModule.java
similarity index 67%
rename from briar-core/src/org/briarproject/transport/TransportModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/transport/TransportModule.java
index 461e1d8dc..5b3307314 100644
--- a/briar-core/src/org/briarproject/transport/TransportModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportModule.java
@@ -1,12 +1,12 @@
-package org.briarproject.transport;
+package org.briarproject.bramble.transport;
-import org.briarproject.api.crypto.StreamDecrypterFactory;
-import org.briarproject.api.crypto.StreamEncrypterFactory;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.transport.KeyManager;
-import org.briarproject.api.transport.StreamReaderFactory;
-import org.briarproject.api.transport.StreamWriterFactory;
+import org.briarproject.bramble.api.crypto.StreamDecrypterFactory;
+import org.briarproject.bramble.api.crypto.StreamEncrypterFactory;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.transport.KeyManager;
+import org.briarproject.bramble.api.transport.StreamReaderFactory;
+import org.briarproject.bramble.api.transport.StreamWriterFactory;
import javax.inject.Inject;
import javax.inject.Singleton;
diff --git a/bramble-j2se/build.gradle b/bramble-j2se/build.gradle
new file mode 100644
index 000000000..d61f5dcdc
--- /dev/null
+++ b/bramble-j2se/build.gradle
@@ -0,0 +1,10 @@
+apply plugin: 'java'
+sourceCompatibility = 1.7
+targetCompatibility = 1.7
+
+apply plugin: 'witness'
+
+dependencies {
+ compile project(':bramble-core')
+ compile fileTree(dir: 'libs', include: '*.jar')
+}
diff --git a/briar-desktop/libs/bluecove-2.1.1-SNAPSHOT-briar.jar b/bramble-j2se/libs/bluecove-2.1.1-SNAPSHOT-briar.jar
similarity index 100%
rename from briar-desktop/libs/bluecove-2.1.1-SNAPSHOT-briar.jar
rename to bramble-j2se/libs/bluecove-2.1.1-SNAPSHOT-briar.jar
diff --git a/briar-desktop/libs/bluecove-gpl-2.1.1-SNAPSHOT.jar b/bramble-j2se/libs/bluecove-gpl-2.1.1-SNAPSHOT.jar
similarity index 100%
rename from briar-desktop/libs/bluecove-gpl-2.1.1-SNAPSHOT.jar
rename to bramble-j2se/libs/bluecove-gpl-2.1.1-SNAPSHOT.jar
diff --git a/briar-desktop/libs/jna-4.1.0.jar b/bramble-j2se/libs/jna-4.1.0.jar
similarity index 100%
rename from briar-desktop/libs/jna-4.1.0.jar
rename to bramble-j2se/libs/jna-4.1.0.jar
diff --git a/briar-desktop/libs/jna-platform-4.1.0.jar b/bramble-j2se/libs/jna-platform-4.1.0.jar
similarity index 100%
rename from briar-desktop/libs/jna-platform-4.1.0.jar
rename to bramble-j2se/libs/jna-platform-4.1.0.jar
diff --git a/briar-desktop/libs/jnotify-0.94.jar b/bramble-j2se/libs/jnotify-0.94.jar
similarity index 100%
rename from briar-desktop/libs/jnotify-0.94.jar
rename to bramble-j2se/libs/jnotify-0.94.jar
diff --git a/briar-desktop/libs/jnotify-x86.dll b/bramble-j2se/libs/jnotify-x86.dll
similarity index 100%
rename from briar-desktop/libs/jnotify-x86.dll
rename to bramble-j2se/libs/jnotify-x86.dll
diff --git a/briar-desktop/libs/jnotify-x86_64.dll b/bramble-j2se/libs/jnotify-x86_64.dll
similarity index 100%
rename from briar-desktop/libs/jnotify-x86_64.dll
rename to bramble-j2se/libs/jnotify-x86_64.dll
diff --git a/briar-desktop/libs/jssc-0.9-briar.jar b/bramble-j2se/libs/jssc-0.9-briar.jar
similarity index 100%
rename from briar-desktop/libs/jssc-0.9-briar.jar
rename to bramble-j2se/libs/jssc-0.9-briar.jar
diff --git a/briar-desktop/libs/libjnotify-amd64.so b/bramble-j2se/libs/libjnotify-amd64.so
similarity index 100%
rename from briar-desktop/libs/libjnotify-amd64.so
rename to bramble-j2se/libs/libjnotify-amd64.so
diff --git a/briar-desktop/libs/libjnotify-i386.so b/bramble-j2se/libs/libjnotify-i386.so
similarity index 100%
rename from briar-desktop/libs/libjnotify-i386.so
rename to bramble-j2se/libs/libjnotify-i386.so
diff --git a/briar-desktop/libs/libjnotify.dylib b/bramble-j2se/libs/libjnotify.dylib
similarity index 100%
rename from briar-desktop/libs/libjnotify.dylib
rename to bramble-j2se/libs/libjnotify.dylib
diff --git a/briar-desktop/libs/source/jssc-0.9-briar-source.jar b/bramble-j2se/libs/source/jssc-0.9-briar-source.jar
similarity index 100%
rename from briar-desktop/libs/source/jssc-0.9-briar-source.jar
rename to bramble-j2se/libs/source/jssc-0.9-briar-source.jar
diff --git a/briar-desktop/src/org/briarproject/lifecycle/DesktopLifecycleModule.java b/bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/DesktopLifecycleModule.java
similarity index 68%
rename from briar-desktop/src/org/briarproject/lifecycle/DesktopLifecycleModule.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/DesktopLifecycleModule.java
index 79525935a..de9ca4bdb 100644
--- a/briar-desktop/src/org/briarproject/lifecycle/DesktopLifecycleModule.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/DesktopLifecycleModule.java
@@ -1,7 +1,7 @@
-package org.briarproject.lifecycle;
+package org.briarproject.bramble.lifecycle;
-import org.briarproject.api.lifecycle.ShutdownManager;
-import org.briarproject.util.OsUtils;
+import org.briarproject.bramble.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.util.OsUtils;
import javax.inject.Singleton;
diff --git a/briar-desktop/src/org/briarproject/lifecycle/WindowsShutdownManagerImpl.java b/bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java
similarity index 95%
rename from briar-desktop/src/org/briarproject/lifecycle/WindowsShutdownManagerImpl.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java
index 764f25f60..aac6a0219 100644
--- a/briar-desktop/src/org/briarproject/lifecycle/WindowsShutdownManagerImpl.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java
@@ -1,4 +1,4 @@
-package org.briarproject.lifecycle;
+package org.briarproject.bramble.lifecycle;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
@@ -14,20 +14,23 @@ import com.sun.jna.win32.StdCallLibrary.StdCallCallback;
import com.sun.jna.win32.W32APIFunctionMapper;
import com.sun.jna.win32.W32APITypeMapper;
-import org.briarproject.util.OsUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.OsUtils;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
+
import static com.sun.jna.Library.OPTION_FUNCTION_MAPPER;
import static com.sun.jna.Library.OPTION_TYPE_MAPPER;
import static java.util.logging.Level.WARNING;
+@ThreadSafe
+@NotNullByDefault
class WindowsShutdownManagerImpl extends ShutdownManagerImpl {
private static final Logger LOG =
@@ -38,7 +41,6 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl {
private static final int WS_MINIMIZE = 0x20000000;
private final Map options;
- private final Lock lock = new ReentrantLock();
private boolean initialised = false; // Locking: lock
@@ -170,11 +172,15 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl {
HMENU menu, HINSTANCE instance, Pointer param);
LRESULT DefWindowProc(HWND hwnd, int msg, WPARAM wp, LPARAM lp);
+
LRESULT SetWindowLong(HWND hwnd, int index, WindowProc newProc);
+
LRESULT SetWindowLongPtr(HWND hwnd, int index, WindowProc newProc);
int GetMessage(MSG msg, HWND hwnd, int filterMin, int filterMax);
+
boolean TranslateMessage(MSG msg);
+
LRESULT DispatchMessage(MSG msg);
}
diff --git a/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java
similarity index 55%
rename from briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java
index 912a0a7d7..616f96611 100644
--- a/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java
@@ -1,17 +1,18 @@
-package org.briarproject.plugins;
+package org.briarproject.bramble.plugin;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.lifecycle.ShutdownManager;
-import org.briarproject.api.plugins.BackoffFactory;
-import org.briarproject.api.plugins.PluginConfig;
-import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
-import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
-import org.briarproject.api.reliability.ReliabilityLayerFactory;
-import org.briarproject.plugins.bluetooth.BluetoothPluginFactory;
-import org.briarproject.plugins.file.RemovableDrivePluginFactory;
-import org.briarproject.plugins.modem.ModemPluginFactory;
-import org.briarproject.plugins.tcp.LanTcpPluginFactory;
-import org.briarproject.plugins.tcp.WanTcpPluginFactory;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.BackoffFactory;
+import org.briarproject.bramble.api.plugin.PluginConfig;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory;
+import org.briarproject.bramble.api.reliability.ReliabilityLayerFactory;
+import org.briarproject.bramble.plugin.bluetooth.BluetoothPluginFactory;
+import org.briarproject.bramble.plugin.file.RemovableDrivePluginFactory;
+import org.briarproject.bramble.plugin.modem.ModemPluginFactory;
+import org.briarproject.bramble.plugin.tcp.LanTcpPluginFactory;
+import org.briarproject.bramble.plugin.tcp.WanTcpPluginFactory;
import java.security.SecureRandom;
import java.util.Arrays;
@@ -23,7 +24,7 @@ import dagger.Module;
import dagger.Provides;
@Module
-public class DesktopPluginsModule extends PluginsModule {
+public class DesktopPluginModule extends PluginModule {
@Provides
PluginConfig getPluginConfig(@IoExecutor Executor ioExecutor,
@@ -44,7 +45,8 @@ public class DesktopPluginsModule extends PluginsModule {
Collections.singletonList(removable);
final Collection duplex =
Arrays.asList(bluetooth, modem, lan, wan);
- return new PluginConfig() {
+ @NotNullByDefault
+ PluginConfig pluginConfig = new PluginConfig() {
@Override
public Collection getDuplexFactories() {
@@ -56,5 +58,6 @@ public class DesktopPluginsModule extends PluginsModule {
return simplex;
}
};
+ return pluginConfig;
}
}
diff --git a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java
similarity index 90%
rename from briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java
index 81d5588ab..091aa9425 100644
--- a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java
@@ -1,21 +1,21 @@
-package org.briarproject.plugins.bluetooth;
+package org.briarproject.bramble.plugin.bluetooth;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.keyagreement.KeyAgreementConnection;
-import org.briarproject.api.keyagreement.KeyAgreementListener;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.plugins.Backoff;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.properties.TransportProperties;
-import org.briarproject.util.OsUtils;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.PseudoRandom;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementConnection;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementListener;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.Backoff;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.properties.TransportProperties;
+import org.briarproject.bramble.util.OsUtils;
+import org.briarproject.bramble.util.StringUtils;
import java.io.IOException;
import java.io.InputStream;
@@ -48,11 +48,11 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
import static javax.bluetooth.DiscoveryAgent.GIAC;
-import static org.briarproject.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_BLUETOOTH;
-import static org.briarproject.api.plugins.BluetoothConstants.ID;
-import static org.briarproject.api.plugins.BluetoothConstants.PROP_ADDRESS;
-import static org.briarproject.api.plugins.BluetoothConstants.PROP_UUID;
-import static org.briarproject.api.plugins.BluetoothConstants.UUID_BYTES;
+import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_BLUETOOTH;
+import static org.briarproject.bramble.api.plugin.BluetoothConstants.ID;
+import static org.briarproject.bramble.api.plugin.BluetoothConstants.PROP_ADDRESS;
+import static org.briarproject.bramble.api.plugin.BluetoothConstants.PROP_UUID;
+import static org.briarproject.bramble.api.plugin.BluetoothConstants.UUID_BYTES;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@@ -472,7 +472,7 @@ class BluetoothPlugin implements DuplexPlugin {
}
@Override
- public StreamConnection call() throws Exception {
+ public StreamConnection call() throws Exception {
StreamConnection s = serverSocket.acceptAndOpen();
LOG.info("Incoming connection");
return s;
diff --git a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPluginFactory.java
similarity index 64%
rename from briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPluginFactory.java
index fbe51e342..e8dc0a754 100644
--- a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPluginFactory.java
@@ -1,17 +1,22 @@
-package org.briarproject.plugins.bluetooth;
+package org.briarproject.bramble.plugin.bluetooth;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.plugins.Backoff;
-import org.briarproject.api.plugins.BackoffFactory;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.Backoff;
+import org.briarproject.bramble.api.plugin.BackoffFactory;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory;
import java.security.SecureRandom;
import java.util.concurrent.Executor;
-import static org.briarproject.api.plugins.BluetoothConstants.ID;
+import javax.annotation.concurrent.Immutable;
+import static org.briarproject.bramble.api.plugin.BluetoothConstants.ID;
+
+@Immutable
+@NotNullByDefault
public class BluetoothPluginFactory implements DuplexPluginFactory {
private static final int MAX_LATENCY = 30 * 1000; // 30 seconds
diff --git a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothTransportConnection.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothTransportConnection.java
similarity index 72%
rename from briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothTransportConnection.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothTransportConnection.java
index a68dd001f..4a8849c7b 100644
--- a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothTransportConnection.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothTransportConnection.java
@@ -1,7 +1,8 @@
-package org.briarproject.plugins.bluetooth;
+package org.briarproject.bramble.plugin.bluetooth;
-import org.briarproject.api.plugins.Plugin;
-import org.briarproject.api.plugins.duplex.AbstractDuplexTransportConnection;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.Plugin;
+import org.briarproject.bramble.api.plugin.duplex.AbstractDuplexTransportConnection;
import java.io.IOException;
import java.io.InputStream;
@@ -9,6 +10,7 @@ import java.io.OutputStream;
import javax.microedition.io.StreamConnection;
+@NotNullByDefault
class BluetoothTransportConnection extends AbstractDuplexTransportConnection {
private final StreamConnection stream;
diff --git a/briar-desktop/src/org/briarproject/plugins/bluetooth/InvitationListener.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/InvitationListener.java
similarity index 93%
rename from briar-desktop/src/org/briarproject/plugins/bluetooth/InvitationListener.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/InvitationListener.java
index 38d9ce3c6..0a389134b 100644
--- a/briar-desktop/src/org/briarproject/plugins/bluetooth/InvitationListener.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/InvitationListener.java
@@ -1,6 +1,4 @@
-package org.briarproject.plugins.bluetooth;
-
-import static java.util.logging.Level.WARNING;
+package org.briarproject.bramble.plugin.bluetooth;
import java.util.Collection;
import java.util.Collections;
@@ -19,6 +17,8 @@ import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
+import static java.util.logging.Level.WARNING;
+
class InvitationListener implements DiscoveryListener {
private static final Logger LOG =
@@ -41,8 +41,9 @@ class InvitationListener implements DiscoveryListener {
return url;
}
+ @Override
public void deviceDiscovered(RemoteDevice device, DeviceClass deviceClass) {
- UUID[] uuids = new UUID[] { new UUID(uuid, false) };
+ UUID[] uuids = new UUID[] {new UUID(uuid, false)};
// Try to discover the services associated with the UUID
try {
discoveryAgent.searchServices(null, uuids, device, this);
@@ -52,6 +53,7 @@ class InvitationListener implements DiscoveryListener {
}
}
+ @Override
public void servicesDiscovered(int transaction, ServiceRecord[] services) {
for (ServiceRecord record : services) {
// Does this service have a URL?
@@ -59,7 +61,7 @@ class InvitationListener implements DiscoveryListener {
ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
if (serviceUrl == null) continue;
// Does this service have the UUID we're looking for?
- Collection uuids = new TreeSet();
+ Collection uuids = new TreeSet<>();
findNestedClassIds(record.getAttributeValue(0x1), uuids);
for (String u : uuids) {
if (uuid.equalsIgnoreCase(u)) {
@@ -72,10 +74,12 @@ class InvitationListener implements DiscoveryListener {
}
}
+ @Override
public void inquiryCompleted(int discoveryType) {
if (searches.decrementAndGet() == 0) finished.countDown();
}
+ @Override
public void serviceSearchCompleted(int transaction, int response) {
if (searches.decrementAndGet() == 0) finished.countDown();
}
diff --git a/briar-desktop/src/org/briarproject/plugins/file/LinuxRemovableDriveFinder.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinder.java
similarity index 76%
rename from briar-desktop/src/org/briarproject/plugins/file/LinuxRemovableDriveFinder.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinder.java
index 124e0819f..df922489f 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/LinuxRemovableDriveFinder.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinder.java
@@ -1,5 +1,10 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import javax.annotation.Nullable;
+
+@NotNullByDefault
class LinuxRemovableDriveFinder extends UnixRemovableDriveFinder {
@Override
@@ -8,6 +13,7 @@ class LinuxRemovableDriveFinder extends UnixRemovableDriveFinder {
}
@Override
+ @Nullable
protected String parseMountPoint(String line) {
// The format is "/dev/foo on /bar/baz type bam (opt1,opt2)"
String pattern = "^/dev/[^ ]+ on (.*) type [^ ]+ \\([^)]+\\)$";
diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveMonitor.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveMonitor.java
new file mode 100644
index 000000000..6807f606f
--- /dev/null
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveMonitor.java
@@ -0,0 +1,12 @@
+package org.briarproject.bramble.plugin.file;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+@NotNullByDefault
+class LinuxRemovableDriveMonitor extends UnixRemovableDriveMonitor {
+
+ @Override
+ protected String[] getPathsToWatch() {
+ return new String[] {"/mnt", "/media"};
+ }
+}
diff --git a/briar-desktop/src/org/briarproject/plugins/file/MacRemovableDriveFinder.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/MacRemovableDriveFinder.java
similarity index 74%
rename from briar-desktop/src/org/briarproject/plugins/file/MacRemovableDriveFinder.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/MacRemovableDriveFinder.java
index a35c7af9a..8bd9b92d1 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/MacRemovableDriveFinder.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/MacRemovableDriveFinder.java
@@ -1,5 +1,10 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import javax.annotation.Nullable;
+
+@NotNullByDefault
class MacRemovableDriveFinder extends UnixRemovableDriveFinder {
@Override
@@ -8,6 +13,7 @@ class MacRemovableDriveFinder extends UnixRemovableDriveFinder {
}
@Override
+ @Nullable
protected String parseMountPoint(String line) {
// The format is "/dev/foo on /bar/baz (opt1, opt2)"
String pattern = "^/dev/[^ ]+ on (.*) \\([^)]+\\)$";
diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/MacRemovableDriveMonitor.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/MacRemovableDriveMonitor.java
new file mode 100644
index 000000000..fb3b1acd4
--- /dev/null
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/MacRemovableDriveMonitor.java
@@ -0,0 +1,12 @@
+package org.briarproject.bramble.plugin.file;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+@NotNullByDefault
+class MacRemovableDriveMonitor extends UnixRemovableDriveMonitor {
+
+ @Override
+ protected String[] getPathsToWatch() {
+ return new String[] {"/Volumes"};
+ }
+}
diff --git a/briar-desktop/src/org/briarproject/plugins/file/PollingRemovableDriveMonitor.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitor.java
similarity index 85%
rename from briar-desktop/src/org/briarproject/plugins/file/PollingRemovableDriveMonitor.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitor.java
index a09508582..335051a82 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/PollingRemovableDriveMonitor.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitor.java
@@ -1,6 +1,7 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import java.io.File;
import java.io.IOException;
@@ -11,6 +12,10 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class PollingRemovableDriveMonitor implements RemovableDriveMonitor, Runnable {
private static final Logger LOG =
@@ -26,30 +31,32 @@ class PollingRemovableDriveMonitor implements RemovableDriveMonitor, Runnable {
private volatile boolean running = false;
private volatile Callback callback = null;
- public PollingRemovableDriveMonitor(Executor ioExecutor,
+ PollingRemovableDriveMonitor(Executor ioExecutor,
RemovableDriveFinder finder, int pollingInterval) {
this.ioExecutor = ioExecutor;
this.finder = finder;
this.pollingInterval = pollingInterval;
}
+ @Override
public void start(Callback callback) throws IOException {
this.callback = callback;
running = true;
ioExecutor.execute(this);
}
+ @Override
public void stop() throws IOException {
running = false;
pollingLock.lock();
try {
stopPolling.signalAll();
- }
- finally {
+ } finally {
pollingLock.unlock();
}
}
+ @Override
public void run() {
try {
Collection drives = finder.findRemovableDrives();
diff --git a/briar-desktop/src/org/briarproject/plugins/file/RemovableDriveFinder.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveFinder.java
similarity index 57%
rename from briar-desktop/src/org/briarproject/plugins/file/RemovableDriveFinder.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveFinder.java
index efac80007..bae619356 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/RemovableDriveFinder.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveFinder.java
@@ -1,9 +1,12 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
+@NotNullByDefault
interface RemovableDriveFinder {
Collection findRemovableDrives() throws IOException;
diff --git a/briar-desktop/src/org/briarproject/plugins/file/RemovableDriveMonitor.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveMonitor.java
similarity index 67%
rename from briar-desktop/src/org/briarproject/plugins/file/RemovableDriveMonitor.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveMonitor.java
index 169dbc140..1145c5687 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/RemovableDriveMonitor.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveMonitor.java
@@ -1,8 +1,11 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.File;
import java.io.IOException;
+@NotNullByDefault
interface RemovableDriveMonitor {
void start(Callback c) throws IOException;
diff --git a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java
similarity index 89%
rename from briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java
index a5dba602e..5a5e99a2b 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java
@@ -1,9 +1,9 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
import java.io.File;
import java.io.IOException;
@@ -17,7 +17,7 @@ import static java.util.logging.Level.WARNING;
@NotNullByDefault
class RemovableDrivePlugin extends FilePlugin
-implements RemovableDriveMonitor.Callback {
+ implements RemovableDriveMonitor.Callback {
static final TransportId ID =
new TransportId("org.briarproject.bramble.file");
diff --git a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java
similarity index 73%
rename from briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java
index e2db0717d..1b53e250e 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java
@@ -1,13 +1,18 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.plugins.simplex.SimplexPlugin;
-import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
-import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
-import org.briarproject.util.OsUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory;
+import org.briarproject.bramble.util.OsUtils;
import java.util.concurrent.Executor;
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
public class RemovableDrivePluginFactory implements SimplexPluginFactory {
// Maximum latency 14 days (Royal Mail or lackadaisical carrier pigeon)
@@ -20,14 +25,17 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory {
this.ioExecutor = ioExecutor;
}
+ @Override
public TransportId getId() {
return RemovableDrivePlugin.ID;
}
+ @Override
public int getMaxLatency() {
return MAX_LATENCY;
}
+ @Override
public SimplexPlugin createPlugin(SimplexPluginCallback callback) {
RemovableDriveFinder finder;
RemovableDriveMonitor monitor;
diff --git a/briar-desktop/src/org/briarproject/plugins/file/UnixRemovableDriveFinder.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveFinder.java
similarity index 82%
rename from briar-desktop/src/org/briarproject/plugins/file/UnixRemovableDriveFinder.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveFinder.java
index 0931f6f44..c5626fdb9 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/UnixRemovableDriveFinder.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveFinder.java
@@ -1,4 +1,6 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.File;
import java.io.IOException;
@@ -6,10 +8,16 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
+import javax.annotation.Nullable;
+
+@NotNullByDefault
abstract class UnixRemovableDriveFinder implements RemovableDriveFinder {
protected abstract String getMountCommand();
+
+ @Nullable
protected abstract String parseMountPoint(String line);
+
protected abstract boolean isRemovableDriveMountPoint(String path);
@Override
@@ -26,7 +34,7 @@ abstract class UnixRemovableDriveFinder implements RemovableDriveFinder {
if (tokens[0].startsWith("/dev/") && tokens[1].equals("on")) {
// The path may contain spaces so we can't use tokens[2]
String path = parseMountPoint(line);
- if (isRemovableDriveMountPoint(path)) {
+ if (path != null && isRemovableDriveMountPoint(path)) {
File f = new File(path);
if (f.exists() && f.isDirectory()) drives.add(f);
}
diff --git a/briar-desktop/src/org/briarproject/plugins/file/UnixRemovableDriveMonitor.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitor.java
similarity index 78%
rename from briar-desktop/src/org/briarproject/plugins/file/UnixRemovableDriveMonitor.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitor.java
index bfe731d87..8fcc0a539 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/UnixRemovableDriveMonitor.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitor.java
@@ -1,4 +1,10 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
+
+import net.contentobjects.jnotify.JNotify;
+import net.contentobjects.jnotify.JNotifyListener;
+
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import java.io.File;
import java.io.IOException;
@@ -7,9 +13,8 @@ import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-import net.contentobjects.jnotify.JNotify;
-import net.contentobjects.jnotify.JNotifyListener;
-
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
abstract class UnixRemovableDriveMonitor implements RemovableDriveMonitor,
JNotifyListener {
@@ -23,7 +28,7 @@ JNotifyListener {
private final Lock lock = new ReentrantLock();
// The following are locking: lock
- private final List watches = new ArrayList();
+ private final List watches = new ArrayList<>();
private boolean started = false;
private Callback callback = null;
@@ -40,7 +45,7 @@ JNotifyListener {
}
}
- public static void checkEnabled() throws IOException {
+ private static void checkEnabled() throws IOException {
staticLock.lock();
try {
if (!triedLoad) {
@@ -53,9 +58,10 @@ JNotifyListener {
}
}
+ @Override
public void start(Callback callback) throws IOException {
checkEnabled();
- List watches = new ArrayList();
+ List watches = new ArrayList<>();
int mask = JNotify.FILE_CREATED;
for (String path : getPathsToWatch()) {
if (new File(path).exists())
@@ -63,8 +69,8 @@ JNotifyListener {
}
lock.lock();
try {
- assert !started;
- assert this.callback == null;
+ if (started) throw new AssertionError();
+ if (this.callback != null) throw new AssertionError();
started = true;
this.callback = callback;
this.watches.addAll(watches);
@@ -73,16 +79,17 @@ JNotifyListener {
}
}
+ @Override
public void stop() throws IOException {
checkEnabled();
List watches;
lock.lock();
try {
- assert started;
- assert callback != null;
+ if (!started) throw new AssertionError();
+ if (callback == null) throw new AssertionError();
started = false;
callback = null;
- watches = new ArrayList(this.watches);
+ watches = new ArrayList<>(this.watches);
this.watches.clear();
} finally {
lock.unlock();
@@ -90,6 +97,7 @@ JNotifyListener {
for (Integer w : watches) JNotify.removeWatch(w);
}
+ @Override
public void fileCreated(int wd, String rootPath, String name) {
Callback callback;
lock.lock();
@@ -102,14 +110,17 @@ JNotifyListener {
callback.driveInserted(new File(rootPath + "/" + name));
}
+ @Override
public void fileDeleted(int wd, String rootPath, String name) {
throw new UnsupportedOperationException();
}
+ @Override
public void fileModified(int wd, String rootPath, String name) {
throw new UnsupportedOperationException();
}
+ @Override
public void fileRenamed(int wd, String rootPath, String oldName,
String newName) {
throw new UnsupportedOperationException();
diff --git a/briar-desktop/src/org/briarproject/plugins/file/WindowsRemovableDriveFinder.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/WindowsRemovableDriveFinder.java
similarity index 86%
rename from briar-desktop/src/org/briarproject/plugins/file/WindowsRemovableDriveFinder.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/WindowsRemovableDriveFinder.java
index c67783ca8..abdbbf0bf 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/WindowsRemovableDriveFinder.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/file/WindowsRemovableDriveFinder.java
@@ -1,13 +1,16 @@
-package org.briarproject.plugins.file;
+package org.briarproject.bramble.plugin.file;
import com.sun.jna.platform.win32.Kernel32;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+@NotNullByDefault
class WindowsRemovableDriveFinder implements RemovableDriveFinder {
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa364939.aspx
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/CountryCodes.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/CountryCodes.java
similarity index 99%
rename from briar-desktop/src/org/briarproject/plugins/modem/CountryCodes.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/CountryCodes.java
index 0ffb166c8..674d9f6b2 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/CountryCodes.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/CountryCodes.java
@@ -1,4 +1,4 @@
-package org.briarproject.plugins.modem;
+package org.briarproject.bramble.plugin.modem;
import java.util.HashMap;
import java.util.Map;
@@ -247,8 +247,7 @@ class CountryCodes {
new Country("ZW", "Zimbabwe", "263", "110", "0")
};
- private static final Map COUNTRY_MAP =
- new HashMap();
+ private static final Map COUNTRY_MAP = new HashMap<>();
static {
for (Country c : COUNTRIES) COUNTRY_MAP.put(c.iso3166, c);
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/Modem.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/Modem.java
similarity index 90%
rename from briar-desktop/src/org/briarproject/plugins/modem/Modem.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/Modem.java
index 72c3a85d6..a25acbad5 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/Modem.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/Modem.java
@@ -1,4 +1,6 @@
-package org.briarproject.plugins.modem;
+package org.briarproject.bramble.plugin.modem;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import java.io.InputStream;
@@ -8,6 +10,7 @@ import java.io.OutputStream;
* A modem that can be used for multiple sequential incoming and outgoing
* calls. If an exception is thrown, a new modem instance must be created.
*/
+@NotNullByDefault
interface Modem {
/**
diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemFactory.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemFactory.java
new file mode 100644
index 000000000..81866a9ac
--- /dev/null
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemFactory.java
@@ -0,0 +1,9 @@
+package org.briarproject.bramble.plugin.modem;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+@NotNullByDefault
+interface ModemFactory {
+
+ Modem createModem(Modem.Callback callback, String portName);
+}
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/ModemFactoryImpl.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemFactoryImpl.java
similarity index 61%
rename from briar-desktop/src/org/briarproject/plugins/modem/ModemFactoryImpl.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemFactoryImpl.java
index ee2aef1e0..78b8eff8b 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/ModemFactoryImpl.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemFactoryImpl.java
@@ -1,11 +1,16 @@
-package org.briarproject.plugins.modem;
+package org.briarproject.bramble.plugin.modem;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.reliability.ReliabilityLayerFactory;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.system.SystemClock;
import java.util.concurrent.Executor;
-import org.briarproject.api.reliability.ReliabilityLayerFactory;
-import org.briarproject.api.system.Clock;
-import org.briarproject.system.SystemClock;
+import javax.annotation.concurrent.Immutable;
+@Immutable
+@NotNullByDefault
class ModemFactoryImpl implements ModemFactory {
private final Executor ioExecutor;
@@ -19,6 +24,7 @@ class ModemFactoryImpl implements ModemFactory {
clock = new SystemClock();
}
+ @Override
public Modem createModem(Modem.Callback callback, String portName) {
return new ModemImpl(ioExecutor, reliabilityFactory, clock, callback,
new SerialPortImpl(portName));
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/ModemImpl.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java
similarity index 94%
rename from briar-desktop/src/org/briarproject/plugins/modem/ModemImpl.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java
index 59fc18930..4aff1d94c 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/ModemImpl.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java
@@ -1,10 +1,11 @@
-package org.briarproject.plugins.modem;
+package org.briarproject.bramble.plugin.modem;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static jssc.SerialPort.PURGE_RXCLEAR;
-import static jssc.SerialPort.PURGE_TXCLEAR;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.reliability.ReliabilityLayer;
+import org.briarproject.bramble.api.reliability.ReliabilityLayerFactory;
+import org.briarproject.bramble.api.reliability.WriteHandler;
+import org.briarproject.bramble.api.system.Clock;
import java.io.IOException;
import java.io.InputStream;
@@ -16,14 +17,19 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
-import org.briarproject.api.reliability.ReliabilityLayer;
-import org.briarproject.api.reliability.ReliabilityLayerFactory;
-import org.briarproject.api.reliability.WriteHandler;
-import org.briarproject.api.system.Clock;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static jssc.SerialPort.PURGE_RXCLEAR;
+import static jssc.SerialPort.PURGE_TXCLEAR;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
private static final Logger LOG =
@@ -65,6 +71,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
line = new byte[MAX_LINE_LENGTH];
}
+ @Override
public boolean start() throws IOException {
LOG.info("Starting");
try {
@@ -125,7 +132,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
}
}
- private void tryToClose(SerialPort port) {
+ private void tryToClose(@Nullable SerialPort port) {
try {
if (port != null) port.closePort();
} catch (IOException e) {
@@ -133,6 +140,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
}
}
+ @Override
public void stop() throws IOException {
LOG.info("Stopping");
lock.lock();
@@ -193,6 +201,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
}
}
+ @Override
public boolean dial(String number) throws IOException {
if (!stateChange.tryAcquire()) {
LOG.info("Not dialling - state change in progress");
@@ -250,6 +259,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
}
}
+ @Override
public InputStream getInputStream() throws IOException {
ReliabilityLayer reliability;
lock.lock();
@@ -262,6 +272,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
return reliability.getInputStream();
}
+ @Override
public OutputStream getOutputStream() throws IOException {
ReliabilityLayer reliability;
lock.lock();
@@ -274,6 +285,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
return reliability.getOutputStream();
}
+ @Override
public void hangUp() throws IOException {
try {
stateChange.acquire();
@@ -289,6 +301,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
}
}
+ @Override
public void handleWrite(byte[] b) throws IOException {
try {
port.writeBytes(b);
@@ -298,6 +311,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
}
}
+ @Override
public void serialEvent(SerialPortEvent ev) {
try {
if (ev.isRXCHAR()) {
@@ -377,6 +391,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
}
} else if (s.equals("RING")) {
ioExecutor.execute(new Runnable() {
+ @Override
public void run() {
try {
answer();
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemPlugin.java
similarity index 84%
rename from briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemPlugin.java
index ae08ea397..5169e5d5d 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemPlugin.java
@@ -1,231 +1,231 @@
-package org.briarproject.plugins.modem;
-
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.keyagreement.KeyAgreementListener;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.plugins.duplex.AbstractDuplexTransportConnection;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.properties.TransportProperties;
-import org.briarproject.util.StringUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Collection;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.logging.Logger;
-
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-
-@MethodsNotNullByDefault
-@ParametersNotNullByDefault
-class ModemPlugin implements DuplexPlugin, Modem.Callback {
-
- static final TransportId ID =
- new TransportId("org.briarproject.bramble.modem");
-
- private static final Logger LOG =
- Logger.getLogger(ModemPlugin.class.getName());
-
- private final ModemFactory modemFactory;
- private final SerialPortList serialPortList;
- private final DuplexPluginCallback callback;
- private final int maxLatency;
- private final AtomicBoolean used = new AtomicBoolean(false);
-
- private volatile boolean running = false;
- private volatile Modem modem = null;
-
- ModemPlugin(ModemFactory modemFactory, SerialPortList serialPortList,
- DuplexPluginCallback callback, int maxLatency) {
- this.modemFactory = modemFactory;
- this.serialPortList = serialPortList;
- this.callback = callback;
- this.maxLatency = maxLatency;
- }
-
- @Override
- public TransportId getId() {
- return ID;
- }
-
- @Override
- public int getMaxLatency() {
- return maxLatency;
- }
-
- @Override
- public int getMaxIdleTime() {
- // FIXME: Do we need keepalives for this transport?
- return Integer.MAX_VALUE;
- }
-
- @Override
- public boolean start() {
- if (used.getAndSet(true)) throw new IllegalStateException();
- for (String portName : serialPortList.getPortNames()) {
- if (LOG.isLoggable(INFO))
- LOG.info("Trying to initialise modem on " + portName);
- modem = modemFactory.createModem(this, portName);
- try {
- if (!modem.start()) continue;
- if (LOG.isLoggable(INFO))
- LOG.info("Initialised modem on " + portName);
- running = true;
- return true;
- } catch (IOException e) {
- if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
- }
- }
- return false;
- }
-
- @Override
- public void stop() {
- running = false;
- if (modem != null) {
- try {
- modem.stop();
- } catch (IOException e) {
- if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
- }
- }
- }
-
- @Override
- public boolean isRunning() {
- return running;
- }
-
- @Override
- public boolean shouldPoll() {
- return false;
- }
-
- @Override
- public int getPollingInterval() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void poll(Collection connected) {
- throw new UnsupportedOperationException();
- }
-
- private boolean resetModem() {
- if (!running) return false;
- for (String portName : serialPortList.getPortNames()) {
- if (LOG.isLoggable(INFO))
- LOG.info("Trying to initialise modem on " + portName);
- modem = modemFactory.createModem(this, portName);
- try {
- if (!modem.start()) continue;
- if (LOG.isLoggable(INFO))
- LOG.info("Initialised modem on " + portName);
- return true;
- } catch (IOException e) {
- if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
- }
- }
- running = false;
- return false;
- }
-
- @Override
- public DuplexTransportConnection createConnection(ContactId c) {
- if (!running) return null;
- // Get the ISO 3166 code for the caller's country
- String fromIso = callback.getLocalProperties().get("iso3166");
- if (StringUtils.isNullOrEmpty(fromIso)) return null;
- // Get the ISO 3166 code for the callee's country
- TransportProperties properties = callback.getRemoteProperties().get(c);
- if (properties == null) return null;
- String toIso = properties.get("iso3166");
- if (StringUtils.isNullOrEmpty(toIso)) return null;
- // Get the callee's phone number
- String number = properties.get("number");
- if (StringUtils.isNullOrEmpty(number)) return null;
- // Convert the number into direct dialling form
- number = CountryCodes.translate(number, fromIso, toIso);
- if (number == null) return null;
- // Dial the number
- try {
- if (!modem.dial(number)) return null;
- } catch (IOException e) {
- if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
- resetModem();
- return null;
- }
- return new ModemTransportConnection();
- }
-
- @Override
- public boolean supportsInvitations() {
- return false;
- }
-
- @Override
- public DuplexTransportConnection createInvitationConnection(PseudoRandom r,
- long timeout, boolean alice) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean supportsKeyAgreement() {
- return false;
- }
-
- @Override
- public KeyAgreementListener createKeyAgreementListener(byte[] commitment) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public DuplexTransportConnection createKeyAgreementConnection(
- byte[] commitment, BdfList descriptor, long timeout) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void incomingCallConnected() {
- LOG.info("Incoming call connected");
- callback.incomingConnectionCreated(new ModemTransportConnection());
- }
-
- private class ModemTransportConnection
- extends AbstractDuplexTransportConnection {
-
- private ModemTransportConnection() {
- super(ModemPlugin.this);
- }
-
- @Override
- protected InputStream getInputStream() throws IOException {
- return modem.getInputStream();
- }
-
- @Override
- protected OutputStream getOutputStream() throws IOException {
- return modem.getOutputStream();
- }
-
- @Override
- protected void closeConnection(boolean exception) {
- LOG.info("Call disconnected");
- try {
- modem.hangUp();
- } catch (IOException e) {
- if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
- exception = true;
- }
- if (exception) resetModem();
- }
- }
-}
+package org.briarproject.bramble.plugin.modem;
+
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.PseudoRandom;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementListener;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.AbstractDuplexTransportConnection;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.properties.TransportProperties;
+import org.briarproject.bramble.util.StringUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Collection;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Logger;
+
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+class ModemPlugin implements DuplexPlugin, Modem.Callback {
+
+ static final TransportId ID =
+ new TransportId("org.briarproject.bramble.modem");
+
+ private static final Logger LOG =
+ Logger.getLogger(ModemPlugin.class.getName());
+
+ private final ModemFactory modemFactory;
+ private final SerialPortList serialPortList;
+ private final DuplexPluginCallback callback;
+ private final int maxLatency;
+ private final AtomicBoolean used = new AtomicBoolean(false);
+
+ private volatile boolean running = false;
+ private volatile Modem modem = null;
+
+ ModemPlugin(ModemFactory modemFactory, SerialPortList serialPortList,
+ DuplexPluginCallback callback, int maxLatency) {
+ this.modemFactory = modemFactory;
+ this.serialPortList = serialPortList;
+ this.callback = callback;
+ this.maxLatency = maxLatency;
+ }
+
+ @Override
+ public TransportId getId() {
+ return ID;
+ }
+
+ @Override
+ public int getMaxLatency() {
+ return maxLatency;
+ }
+
+ @Override
+ public int getMaxIdleTime() {
+ // FIXME: Do we need keepalives for this transport?
+ return Integer.MAX_VALUE;
+ }
+
+ @Override
+ public boolean start() {
+ if (used.getAndSet(true)) throw new IllegalStateException();
+ for (String portName : serialPortList.getPortNames()) {
+ if (LOG.isLoggable(INFO))
+ LOG.info("Trying to initialise modem on " + portName);
+ modem = modemFactory.createModem(this, portName);
+ try {
+ if (!modem.start()) continue;
+ if (LOG.isLoggable(INFO))
+ LOG.info("Initialised modem on " + portName);
+ running = true;
+ return true;
+ } catch (IOException e) {
+ if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void stop() {
+ running = false;
+ if (modem != null) {
+ try {
+ modem.stop();
+ } catch (IOException e) {
+ if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
+ }
+ }
+ }
+
+ @Override
+ public boolean isRunning() {
+ return running;
+ }
+
+ @Override
+ public boolean shouldPoll() {
+ return false;
+ }
+
+ @Override
+ public int getPollingInterval() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void poll(Collection connected) {
+ throw new UnsupportedOperationException();
+ }
+
+ private boolean resetModem() {
+ if (!running) return false;
+ for (String portName : serialPortList.getPortNames()) {
+ if (LOG.isLoggable(INFO))
+ LOG.info("Trying to initialise modem on " + portName);
+ modem = modemFactory.createModem(this, portName);
+ try {
+ if (!modem.start()) continue;
+ if (LOG.isLoggable(INFO))
+ LOG.info("Initialised modem on " + portName);
+ return true;
+ } catch (IOException e) {
+ if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
+ }
+ }
+ running = false;
+ return false;
+ }
+
+ @Override
+ public DuplexTransportConnection createConnection(ContactId c) {
+ if (!running) return null;
+ // Get the ISO 3166 code for the caller's country
+ String fromIso = callback.getLocalProperties().get("iso3166");
+ if (StringUtils.isNullOrEmpty(fromIso)) return null;
+ // Get the ISO 3166 code for the callee's country
+ TransportProperties properties = callback.getRemoteProperties().get(c);
+ if (properties == null) return null;
+ String toIso = properties.get("iso3166");
+ if (StringUtils.isNullOrEmpty(toIso)) return null;
+ // Get the callee's phone number
+ String number = properties.get("number");
+ if (StringUtils.isNullOrEmpty(number)) return null;
+ // Convert the number into direct dialling form
+ number = CountryCodes.translate(number, fromIso, toIso);
+ if (number == null) return null;
+ // Dial the number
+ try {
+ if (!modem.dial(number)) return null;
+ } catch (IOException e) {
+ if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
+ resetModem();
+ return null;
+ }
+ return new ModemTransportConnection();
+ }
+
+ @Override
+ public boolean supportsInvitations() {
+ return false;
+ }
+
+ @Override
+ public DuplexTransportConnection createInvitationConnection(PseudoRandom r,
+ long timeout, boolean alice) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean supportsKeyAgreement() {
+ return false;
+ }
+
+ @Override
+ public KeyAgreementListener createKeyAgreementListener(byte[] commitment) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public DuplexTransportConnection createKeyAgreementConnection(
+ byte[] commitment, BdfList descriptor, long timeout) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void incomingCallConnected() {
+ LOG.info("Incoming call connected");
+ callback.incomingConnectionCreated(new ModemTransportConnection());
+ }
+
+ private class ModemTransportConnection
+ extends AbstractDuplexTransportConnection {
+
+ private ModemTransportConnection() {
+ super(ModemPlugin.this);
+ }
+
+ @Override
+ protected InputStream getInputStream() throws IOException {
+ return modem.getInputStream();
+ }
+
+ @Override
+ protected OutputStream getOutputStream() throws IOException {
+ return modem.getOutputStream();
+ }
+
+ @Override
+ protected void closeConnection(boolean exception) {
+ LOG.info("Call disconnected");
+ try {
+ modem.hangUp();
+ } catch (IOException e) {
+ if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
+ exception = true;
+ }
+ if (exception) resetModem();
+ }
+ }
+}
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/ModemPluginFactory.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemPluginFactory.java
similarity index 59%
rename from briar-desktop/src/org/briarproject/plugins/modem/ModemPluginFactory.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemPluginFactory.java
index 690b3c7d7..1a3a1f24a 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/ModemPluginFactory.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/ModemPluginFactory.java
@@ -1,40 +1,48 @@
-package org.briarproject.plugins.modem;
-
-import org.briarproject.api.TransportId;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
-import org.briarproject.api.reliability.ReliabilityLayerFactory;
-import org.briarproject.util.StringUtils;
-
-import java.util.concurrent.Executor;
-
-public class ModemPluginFactory implements DuplexPluginFactory {
-
- private static final int MAX_LATENCY = 30 * 1000; // 30 seconds
-
- private final ModemFactory modemFactory;
- private final SerialPortList serialPortList;
-
- public ModemPluginFactory(Executor ioExecutor,
- ReliabilityLayerFactory reliabilityFactory) {
- modemFactory = new ModemFactoryImpl(ioExecutor, reliabilityFactory);
- serialPortList = new SerialPortListImpl();
- }
-
- public TransportId getId() {
- return ModemPlugin.ID;
- }
-
- public int getMaxLatency() {
- return MAX_LATENCY;
- }
-
- public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
- // This plugin is not enabled by default
- String enabled = callback.getSettings().get("enabled");
- if (StringUtils.isNullOrEmpty(enabled)) return null;
- return new ModemPlugin(modemFactory, serialPortList, callback,
- MAX_LATENCY);
- }
-}
+package org.briarproject.bramble.plugin.modem;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory;
+import org.briarproject.bramble.api.reliability.ReliabilityLayerFactory;
+import org.briarproject.bramble.util.StringUtils;
+
+import java.util.concurrent.Executor;
+
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
+public class ModemPluginFactory implements DuplexPluginFactory {
+
+ private static final int MAX_LATENCY = 30 * 1000; // 30 seconds
+
+ private final ModemFactory modemFactory;
+ private final SerialPortList serialPortList;
+
+ public ModemPluginFactory(Executor ioExecutor,
+ ReliabilityLayerFactory reliabilityFactory) {
+ modemFactory = new ModemFactoryImpl(ioExecutor, reliabilityFactory);
+ serialPortList = new SerialPortListImpl();
+ }
+
+ @Override
+ public TransportId getId() {
+ return ModemPlugin.ID;
+ }
+
+ @Override
+ public int getMaxLatency() {
+ return MAX_LATENCY;
+ }
+
+ @Override
+ public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
+ // This plugin is not enabled by default
+ String enabled = callback.getSettings().get("enabled");
+ if (StringUtils.isNullOrEmpty(enabled)) return null;
+ return new ModemPlugin(modemFactory, serialPortList, callback,
+ MAX_LATENCY);
+ }
+}
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/SerialPort.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPort.java
similarity index 78%
rename from briar-desktop/src/org/briarproject/plugins/modem/SerialPort.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPort.java
index 6d9f60231..b21100c7d 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/SerialPort.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPort.java
@@ -1,9 +1,12 @@
-package org.briarproject.plugins.modem;
+package org.briarproject.bramble.plugin.modem;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import jssc.SerialPortEventListener;
+@NotNullByDefault
interface SerialPort {
void openPort() throws IOException;
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/SerialPortImpl.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPortImpl.java
similarity index 89%
rename from briar-desktop/src/org/briarproject/plugins/modem/SerialPortImpl.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPortImpl.java
index 3722e2318..f3e1aff06 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/SerialPortImpl.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPortImpl.java
@@ -1,10 +1,13 @@
-package org.briarproject.plugins.modem;
+package org.briarproject.bramble.plugin.modem;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
+@NotNullByDefault
class SerialPortImpl implements SerialPort {
private final jssc.SerialPort port;
@@ -13,6 +16,7 @@ class SerialPortImpl implements SerialPort {
port = new jssc.SerialPort(portName);
}
+ @Override
public void openPort() throws IOException {
try {
if (!port.openPort()) throw new IOException("Failed to open port");
@@ -21,6 +25,7 @@ class SerialPortImpl implements SerialPort {
}
}
+ @Override
public void closePort() throws IOException {
try {
if (!port.closePort()) throw new IOException("Failed to close port");
@@ -29,6 +34,7 @@ class SerialPortImpl implements SerialPort {
}
}
+ @Override
public boolean setParams(int baudRate, int dataBits, int stopBits,
int parityBits) throws IOException {
try {
@@ -38,6 +44,7 @@ class SerialPortImpl implements SerialPort {
}
}
+ @Override
public void purgePort(int flags) throws IOException {
try {
if (!port.purgePort(flags))
@@ -47,6 +54,7 @@ class SerialPortImpl implements SerialPort {
}
}
+ @Override
public void addEventListener(SerialPortEventListener l) throws IOException {
try {
port.addEventListener(l);
@@ -55,6 +63,7 @@ class SerialPortImpl implements SerialPort {
}
}
+ @Override
public byte[] readBytes() throws IOException {
try {
return port.readBytes();
@@ -63,6 +72,7 @@ class SerialPortImpl implements SerialPort {
}
}
+ @Override
public void writeBytes(byte[] b) throws IOException {
try {
if (!port.writeBytes(b)) throw new IOException("Failed to write");
diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPortList.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPortList.java
new file mode 100644
index 000000000..918bcd6f3
--- /dev/null
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPortList.java
@@ -0,0 +1,9 @@
+package org.briarproject.bramble.plugin.modem;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+@NotNullByDefault
+interface SerialPortList {
+
+ String[] getPortNames();
+}
diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPortListImpl.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPortListImpl.java
new file mode 100644
index 000000000..b2375d0d4
--- /dev/null
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/modem/SerialPortListImpl.java
@@ -0,0 +1,12 @@
+package org.briarproject.bramble.plugin.modem;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+@NotNullByDefault
+class SerialPortListImpl implements SerialPortList {
+
+ @Override
+ public String[] getPortNames() {
+ return jssc.SerialPortList.getPortNames();
+ }
+}
diff --git a/briar-desktop/src/org/briarproject/system/DesktopSeedProviderModule.java b/bramble-j2se/src/main/java/org/briarproject/bramble/system/DesktopSeedProviderModule.java
similarity index 64%
rename from briar-desktop/src/org/briarproject/system/DesktopSeedProviderModule.java
rename to bramble-j2se/src/main/java/org/briarproject/bramble/system/DesktopSeedProviderModule.java
index 8ed175a8b..d603f7a13 100644
--- a/briar-desktop/src/org/briarproject/system/DesktopSeedProviderModule.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/system/DesktopSeedProviderModule.java
@@ -1,7 +1,7 @@
-package org.briarproject.system;
+package org.briarproject.bramble.system;
-import org.briarproject.api.system.SeedProvider;
-import org.briarproject.util.OsUtils;
+import org.briarproject.bramble.api.system.SeedProvider;
+import org.briarproject.bramble.util.OsUtils;
import javax.inject.Singleton;
diff --git a/briar-android-tests/build.gradle b/briar-android-tests/build.gradle
index 914bb06ff..82a778db6 100644
--- a/briar-android-tests/build.gradle
+++ b/briar-android-tests/build.gradle
@@ -18,12 +18,10 @@ android {
}
dependencies {
- testCompile project(':briar-api')
- testCompile project(':briar-core')
+ testCompile project(':briar-tests')
testCompile 'junit:junit:4.12'
testCompile 'net.jodah:concurrentunit:0.4.2'
testCompile 'com.android.support:appcompat-v7:23.2.1'
testApt 'com.google.dagger:dagger-compiler:2.0.2'
provided 'javax.annotation:jsr250-api:1.0'
- testCompile project(':briar-tests')
}
diff --git a/briar-android-tests/src/test/java/org/briarproject/BlogManagerTest.java b/briar-android-tests/src/test/java/org/briarproject/BlogManagerTest.java
index 85803e837..8226a135b 100644
--- a/briar-android-tests/src/test/java/org/briarproject/BlogManagerTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/BlogManagerTest.java
@@ -1,11 +1,12 @@
package org.briarproject;
-import org.briarproject.api.blogs.Blog;
-import org.briarproject.api.blogs.BlogCommentHeader;
-import org.briarproject.api.blogs.BlogManager;
-import org.briarproject.api.blogs.BlogPost;
-import org.briarproject.api.blogs.BlogPostHeader;
-import org.briarproject.api.db.DbException;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.api.blog.Blog;
+import org.briarproject.briar.api.blog.BlogCommentHeader;
+import org.briarproject.briar.api.blog.BlogManager;
+import org.briarproject.briar.api.blog.BlogPost;
+import org.briarproject.briar.api.blog.BlogPostHeader;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -15,14 +16,16 @@ import java.util.Collection;
import java.util.Iterator;
import static junit.framework.Assert.assertFalse;
-import static org.briarproject.api.blogs.MessageType.COMMENT;
-import static org.briarproject.api.blogs.MessageType.POST;
-import static org.briarproject.api.blogs.MessageType.WRAPPED_COMMENT;
-import static org.briarproject.api.blogs.MessageType.WRAPPED_POST;
+import static junit.framework.Assert.assertNotNull;
+import static org.briarproject.briar.api.blog.MessageType.COMMENT;
+import static org.briarproject.briar.api.blog.MessageType.POST;
+import static org.briarproject.briar.api.blog.MessageType.WRAPPED_COMMENT;
+import static org.briarproject.briar.api.blog.MessageType.WRAPPED_POST;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-public class BlogManagerTest extends BriarIntegrationTest {
+public class BlogManagerTest
+ extends BriarIntegrationTest {
private BlogManager blogManager0, blogManager1;
private Blog blog0, blog1;
@@ -45,6 +48,25 @@ public class BlogManagerTest extends BriarIntegrationTest {
blog1 = blogFactory.createBlog(author1);
}
+ @Override
+ protected void createComponents() {
+ BriarIntegrationTestComponent component =
+ DaggerBriarIntegrationTestComponent.builder().build();
+ component.inject(this);
+
+ c0 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t0Dir)).build();
+ injectEagerSingletons(c0);
+
+ c1 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t1Dir)).build();
+ injectEagerSingletons(c1);
+
+ c2 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t2Dir)).build();
+ injectEagerSingletons(c2);
+ }
+
@Test
public void testPersonalBlogInitialisation() throws Exception {
Collection blogs0 = blogManager0.getBlogs();
@@ -189,7 +211,9 @@ public class BlogManagerTest extends BriarIntegrationTest {
assertEquals(author0, h.getParent().getAuthor());
// ensure that body can be retrieved from wrapped post
- assertEquals(body, blogManager0.getPostBody(h.getParentId()));
+ MessageId parentId = h.getParentId();
+ assertNotNull(parentId);
+ assertEquals(body, blogManager0.getPostBody(parentId));
// 1 has only their own comment in their blog
headers1 = blogManager1.getPostHeaders(blog1.getId());
@@ -227,7 +251,7 @@ public class BlogManagerTest extends BriarIntegrationTest {
if (h.getType() == POST) {
assertEquals(body, blogManager1.getPostBody(h.getId()));
} else {
- assertEquals(comment, ((BlogCommentHeader)h).getComment());
+ assertEquals(comment, ((BlogCommentHeader) h).getComment());
}
}
}
diff --git a/briar-android-tests/src/test/java/org/briarproject/BlogSharingIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/BlogSharingIntegrationTest.java
index 2ceea6e9f..538cf3ccf 100644
--- a/briar-android-tests/src/test/java/org/briarproject/BlogSharingIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/BlogSharingIntegrationTest.java
@@ -2,19 +2,20 @@ package org.briarproject;
import net.jodah.concurrentunit.Waiter;
-import org.briarproject.api.blogs.Blog;
-import org.briarproject.api.blogs.BlogInvitationRequest;
-import org.briarproject.api.blogs.BlogInvitationResponse;
-import org.briarproject.api.blogs.BlogManager;
-import org.briarproject.api.blogs.BlogSharingManager;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.BlogInvitationReceivedEvent;
-import org.briarproject.api.event.BlogInvitationResponseReceivedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.sharing.InvitationMessage;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.api.blog.Blog;
+import org.briarproject.briar.api.blog.BlogInvitationRequest;
+import org.briarproject.briar.api.blog.BlogInvitationResponse;
+import org.briarproject.briar.api.blog.BlogManager;
+import org.briarproject.briar.api.blog.BlogSharingManager;
+import org.briarproject.briar.api.blog.event.BlogInvitationRequestReceivedEvent;
+import org.briarproject.briar.api.blog.event.BlogInvitationResponseReceivedEvent;
+import org.briarproject.briar.api.sharing.InvitationMessage;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -25,12 +26,13 @@ import java.util.Collection;
import java.util.List;
import static org.briarproject.TestUtils.assertGroupCount;
-import static org.briarproject.api.blogs.BlogSharingManager.CLIENT_ID;
+import static org.briarproject.briar.api.blog.BlogSharingManager.CLIENT_ID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-public class BlogSharingIntegrationTest extends BriarIntegrationTest {
+public class BlogSharingIntegrationTest
+ extends BriarIntegrationTest {
private BlogManager blogManager1;
private Blog blog0, blog1, blog2;
@@ -65,6 +67,25 @@ public class BlogSharingIntegrationTest extends BriarIntegrationTest {
eventWaiter = new Waiter();
}
+ @Override
+ protected void createComponents() {
+ BriarIntegrationTestComponent component =
+ DaggerBriarIntegrationTestComponent.builder().build();
+ component.inject(this);
+
+ c0 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t0Dir)).build();
+ injectEagerSingletons(c0);
+
+ c1 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t1Dir)).build();
+ injectEagerSingletons(c1);
+
+ c2 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t2Dir)).build();
+ injectEagerSingletons(c2);
+ }
+
@Test
public void testPersonalBlogCannotBeSharedWithOwner() throws Exception {
listenToEvents(true);
@@ -213,7 +234,8 @@ public class BlogSharingIntegrationTest extends BriarIntegrationTest {
blogSharingManager0.getInvitationMessages(contactId1From0)
.size());
// blog can be shared again
- assertTrue(blogSharingManager0.canBeShared(blog2.getId(), contact1From0));
+ assertTrue(
+ blogSharingManager0.canBeShared(blog2.getId(), contact1From0));
}
@Test
@@ -264,8 +286,10 @@ public class BlogSharingIntegrationTest extends BriarIntegrationTest {
assertFalse(blogSharingManager1.getSharedBy(blog2.getId())
.contains(contact0From1));
// blog can be shared again
- assertTrue(blogSharingManager0.canBeShared(blog2.getId(), contact1From0));
- assertTrue(blogSharingManager1.canBeShared(blog2.getId(), contact0From1));
+ assertTrue(
+ blogSharingManager0.canBeShared(blog2.getId(), contact1From0));
+ assertTrue(
+ blogSharingManager1.canBeShared(blog2.getId(), contact0From1));
}
@Test
@@ -393,6 +417,7 @@ public class BlogSharingIntegrationTest extends BriarIntegrationTest {
assertFalse(blogManager1.canBeRemoved(blog2.getId()));
}
+ @NotNullByDefault
private class SharerListener implements EventListener {
private volatile boolean responseReceived = false;
@@ -407,9 +432,9 @@ public class BlogSharingIntegrationTest extends BriarIntegrationTest {
eventWaiter.resume();
}
// this is only needed for tests where a blog is re-shared
- else if (e instanceof BlogInvitationReceivedEvent) {
- BlogInvitationReceivedEvent event =
- (BlogInvitationReceivedEvent) e;
+ else if (e instanceof BlogInvitationRequestReceivedEvent) {
+ BlogInvitationRequestReceivedEvent event =
+ (BlogInvitationRequestReceivedEvent) e;
eventWaiter.assertEquals(contactId1From0, event.getContactId());
Blog b = event.getShareable();
try {
@@ -424,6 +449,7 @@ public class BlogSharingIntegrationTest extends BriarIntegrationTest {
}
}
+ @NotNullByDefault
private class InviteeListener implements EventListener {
private volatile boolean requestReceived = false;
@@ -441,9 +467,9 @@ public class BlogSharingIntegrationTest extends BriarIntegrationTest {
@Override
public void eventOccurred(Event e) {
- if (e instanceof BlogInvitationReceivedEvent) {
- BlogInvitationReceivedEvent event =
- (BlogInvitationReceivedEvent) e;
+ if (e instanceof BlogInvitationRequestReceivedEvent) {
+ BlogInvitationRequestReceivedEvent event =
+ (BlogInvitationRequestReceivedEvent) e;
requestReceived = true;
if (!answer) return;
Blog b = event.getShareable();
diff --git a/briar-android-tests/src/test/java/org/briarproject/BriarIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/BriarIntegrationTest.java
index fcd3205e7..73efbf9ba 100644
--- a/briar-android-tests/src/test/java/org/briarproject/BriarIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/BriarIntegrationTest.java
@@ -4,47 +4,48 @@ import android.support.annotation.CallSuper;
import net.jodah.concurrentunit.Waiter;
-import org.briarproject.api.blogs.BlogFactory;
-import org.briarproject.api.blogs.BlogPostFactory;
-import org.briarproject.api.clients.ClientHelper;
-import org.briarproject.api.clients.ContactGroupFactory;
-import org.briarproject.api.clients.MessageTracker;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.MessageStateChangedEvent;
-import org.briarproject.api.forum.ForumPostFactory;
-import org.briarproject.api.identity.AuthorFactory;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.privategroup.GroupMessageFactory;
-import org.briarproject.api.privategroup.PrivateGroupFactory;
-import org.briarproject.api.privategroup.invitation.GroupInvitationFactory;
-import org.briarproject.api.sync.SyncSession;
-import org.briarproject.api.sync.SyncSessionFactory;
-import org.briarproject.api.system.Clock;
-import org.briarproject.blogs.BlogsModule;
-import org.briarproject.contact.ContactModule;
-import org.briarproject.crypto.CryptoModule;
-import org.briarproject.forum.ForumModule;
-import org.briarproject.introduction.IntroductionGroupFactory;
-import org.briarproject.introduction.IntroductionModule;
-import org.briarproject.lifecycle.LifecycleModule;
-import org.briarproject.privategroup.PrivateGroupModule;
-import org.briarproject.privategroup.invitation.GroupInvitationModule;
-import org.briarproject.properties.PropertiesModule;
-import org.briarproject.sharing.SharingModule;
-import org.briarproject.sync.SyncModule;
-import org.briarproject.transport.TransportModule;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.client.ClientHelper;
+import org.briarproject.bramble.api.client.ContactGroupFactory;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.identity.AuthorFactory;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.SyncSession;
+import org.briarproject.bramble.api.sync.SyncSessionFactory;
+import org.briarproject.bramble.api.sync.event.MessageStateChangedEvent;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.bramble.contact.ContactModule;
+import org.briarproject.bramble.crypto.CryptoModule;
+import org.briarproject.bramble.identity.IdentityModule;
+import org.briarproject.bramble.lifecycle.LifecycleModule;
+import org.briarproject.bramble.properties.PropertiesModule;
+import org.briarproject.bramble.sync.SyncModule;
+import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.bramble.transport.TransportModule;
+import org.briarproject.briar.api.blog.BlogFactory;
+import org.briarproject.briar.api.blog.BlogPostFactory;
+import org.briarproject.briar.api.client.MessageTracker;
+import org.briarproject.briar.api.forum.ForumPostFactory;
+import org.briarproject.briar.api.privategroup.GroupMessageFactory;
+import org.briarproject.briar.api.privategroup.PrivateGroupFactory;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory;
+import org.briarproject.briar.blog.BlogModule;
+import org.briarproject.briar.forum.ForumModule;
+import org.briarproject.briar.introduction.IntroductionModule;
+import org.briarproject.briar.messaging.MessagingModule;
+import org.briarproject.briar.privategroup.PrivateGroupModule;
+import org.briarproject.briar.privategroup.invitation.GroupInvitationModule;
+import org.briarproject.briar.sharing.SharingModule;
import org.junit.After;
import org.junit.Before;
@@ -55,19 +56,21 @@ import java.io.IOException;
import java.util.concurrent.TimeoutException;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static junit.framework.Assert.assertNotNull;
-import static org.briarproject.TestPluginsModule.MAX_LATENCY;
+import static org.briarproject.TestPluginConfigModule.MAX_LATENCY;
import static org.briarproject.TestUtils.getSecretKey;
-import static org.briarproject.api.sync.ValidationManager.State.DELIVERED;
-import static org.briarproject.api.sync.ValidationManager.State.INVALID;
-import static org.briarproject.api.sync.ValidationManager.State.PENDING;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.DELIVERED;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.INVALID;
+import static org.briarproject.bramble.api.sync.ValidationManager.State.PENDING;
import static org.junit.Assert.assertTrue;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
-public abstract class BriarIntegrationTest extends BriarTestCase {
+public abstract class BriarIntegrationTest
+ extends BriarTestCase {
private static final Logger LOG =
Logger.getLogger(BriarIntegrationTest.class.getName());
@@ -98,8 +101,6 @@ public abstract class BriarIntegrationTest extends BriarTestCase {
@Inject
protected AuthorFactory authorFactory;
@Inject
- protected IntroductionGroupFactory introductionGroupFactory;
- @Inject
ContactGroupFactory contactGroupFactory;
@Inject
PrivateGroupFactory privateGroupFactory;
@@ -119,33 +120,22 @@ public abstract class BriarIntegrationTest extends BriarTestCase {
private volatile Waiter deliveryWaiter;
protected final static int TIMEOUT = 15000;
- protected BriarIntegrationTestComponent c0, c1, c2;
+ protected C c0, c1, c2;
private final File testDir = TestUtils.getTestDirectory();
private final String AUTHOR0 = "Author 0";
private final String AUTHOR1 = "Author 1";
private final String AUTHOR2 = "Author 2";
+ protected File t0Dir = new File(testDir, AUTHOR0);
+ protected File t1Dir = new File(testDir, AUTHOR1);
+ protected File t2Dir = new File(testDir, AUTHOR2);
+
@Before
@CallSuper
public void setUp() throws Exception {
- BriarIntegrationTestComponent component =
- DaggerBriarIntegrationTestComponent.builder().build();
- component.inject(this);
-
assertTrue(testDir.mkdirs());
- File t0Dir = new File(testDir, AUTHOR0);
- c0 = DaggerBriarIntegrationTestComponent.builder()
- .testDatabaseModule(new TestDatabaseModule(t0Dir)).build();
- injectEagerSingletons(c0);
- File t1Dir = new File(testDir, AUTHOR1);
- c1 = DaggerBriarIntegrationTestComponent.builder()
- .testDatabaseModule(new TestDatabaseModule(t1Dir)).build();
- injectEagerSingletons(c1);
- File t2Dir = new File(testDir, AUTHOR2);
- c2 = DaggerBriarIntegrationTestComponent.builder()
- .testDatabaseModule(new TestDatabaseModule(t2Dir)).build();
- injectEagerSingletons(c2);
+ createComponents();
identityManager0 = c0.getIdentityManager();
identityManager1 = c1.getIdentityManager();
@@ -174,19 +164,24 @@ public abstract class BriarIntegrationTest extends BriarTestCase {
listenToEvents();
}
- private void injectEagerSingletons(
+ abstract protected void createComponents();
+
+ protected void injectEagerSingletons(
BriarIntegrationTestComponent component) {
- component.inject(new LifecycleModule.EagerSingletons());
- component.inject(new BlogsModule.EagerSingletons());
- component.inject(new CryptoModule.EagerSingletons());
+ component.inject(new BlogModule.EagerSingletons());
component.inject(new ContactModule.EagerSingletons());
+ component.inject(new CryptoModule.EagerSingletons());
component.inject(new ForumModule.EagerSingletons());
component.inject(new GroupInvitationModule.EagerSingletons());
+ component.inject(new IdentityModule.EagerSingletons());
component.inject(new IntroductionModule.EagerSingletons());
- component.inject(new PropertiesModule.EagerSingletons());
+ component.inject(new LifecycleModule.EagerSingletons());
+ component.inject(new MessagingModule.EagerSingletons());
component.inject(new PrivateGroupModule.EagerSingletons());
- component.inject(new SyncModule.EagerSingletons());
+ component.inject(new PropertiesModule.EagerSingletons());
component.inject(new SharingModule.EagerSingletons());
+ component.inject(new SyncModule.EagerSingletons());
+ component.inject(new SystemModule.EagerSingletons());
component.inject(new TransportModule.EagerSingletons());
}
@@ -355,8 +350,10 @@ public abstract class BriarIntegrationTest extends BriarTestCase {
contactManager0.removeContact(contactId1From0);
contactManager0.removeContact(contactId2From0);
contactManager1.removeContact(contactId0From1);
- contactManager1.removeContact(contactId2From1);
contactManager2.removeContact(contactId0From2);
+ assertNotNull(contactId2From1);
+ contactManager1.removeContact(contactId2From1);
+ assertNotNull(contactId1From2);
contactManager2.removeContact(contactId1From2);
}
}
diff --git a/briar-android-tests/src/test/java/org/briarproject/BriarIntegrationTestComponent.java b/briar-android-tests/src/test/java/org/briarproject/BriarIntegrationTestComponent.java
index 7d4cdf2a8..ddca97605 100644
--- a/briar-android-tests/src/test/java/org/briarproject/BriarIntegrationTestComponent.java
+++ b/briar-android-tests/src/test/java/org/briarproject/BriarIntegrationTestComponent.java
@@ -1,42 +1,42 @@
package org.briarproject;
-import org.briarproject.api.blogs.BlogManager;
-import org.briarproject.api.blogs.BlogSharingManager;
-import org.briarproject.api.clients.ClientHelper;
-import org.briarproject.api.clients.MessageQueueManager;
-import org.briarproject.api.clients.MessageTracker;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.forum.ForumManager;
-import org.briarproject.api.forum.ForumSharingManager;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.introduction.IntroductionManager;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
-import org.briarproject.api.properties.TransportPropertyManager;
-import org.briarproject.api.sync.SyncSessionFactory;
-import org.briarproject.blogs.BlogsModule;
-import org.briarproject.clients.ClientsModule;
-import org.briarproject.contact.ContactModule;
-import org.briarproject.crypto.CryptoModule;
-import org.briarproject.data.DataModule;
-import org.briarproject.db.DatabaseModule;
-import org.briarproject.event.EventModule;
-import org.briarproject.forum.ForumModule;
-import org.briarproject.identity.IdentityModule;
-import org.briarproject.introduction.IntroductionModule;
-import org.briarproject.introduction.MessageSender;
-import org.briarproject.lifecycle.LifecycleModule;
-import org.briarproject.messaging.MessagingModule;
-import org.briarproject.privategroup.PrivateGroupModule;
-import org.briarproject.privategroup.invitation.GroupInvitationModule;
-import org.briarproject.properties.PropertiesModule;
-import org.briarproject.sharing.SharingModule;
-import org.briarproject.sync.SyncModule;
-import org.briarproject.system.SystemModule;
-import org.briarproject.transport.TransportModule;
+import org.briarproject.bramble.api.client.ClientHelper;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.db.DatabaseComponent;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.properties.TransportPropertyManager;
+import org.briarproject.bramble.api.sync.SyncSessionFactory;
+import org.briarproject.bramble.client.ClientModule;
+import org.briarproject.bramble.contact.ContactModule;
+import org.briarproject.bramble.crypto.CryptoModule;
+import org.briarproject.bramble.data.DataModule;
+import org.briarproject.bramble.db.DatabaseModule;
+import org.briarproject.bramble.event.EventModule;
+import org.briarproject.bramble.identity.IdentityModule;
+import org.briarproject.bramble.lifecycle.LifecycleModule;
+import org.briarproject.bramble.properties.PropertiesModule;
+import org.briarproject.bramble.sync.SyncModule;
+import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.bramble.transport.TransportModule;
+import org.briarproject.briar.api.blog.BlogManager;
+import org.briarproject.briar.api.blog.BlogSharingManager;
+import org.briarproject.briar.api.client.MessageQueueManager;
+import org.briarproject.briar.api.client.MessageTracker;
+import org.briarproject.briar.api.forum.ForumManager;
+import org.briarproject.briar.api.forum.ForumSharingManager;
+import org.briarproject.briar.api.introduction.IntroductionManager;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
+import org.briarproject.briar.blog.BlogModule;
+import org.briarproject.briar.client.BriarClientModule;
+import org.briarproject.briar.forum.ForumModule;
+import org.briarproject.briar.introduction.IntroductionModule;
+import org.briarproject.briar.messaging.MessagingModule;
+import org.briarproject.briar.privategroup.PrivateGroupModule;
+import org.briarproject.briar.privategroup.invitation.GroupInvitationModule;
+import org.briarproject.briar.sharing.SharingModule;
import javax.inject.Singleton;
@@ -45,21 +45,22 @@ import dagger.Component;
@Singleton
@Component(modules = {
TestDatabaseModule.class,
- TestPluginsModule.class,
+ TestPluginConfigModule.class,
TestSeedProviderModule.class,
- ClientsModule.class,
+ BlogModule.class,
+ BriarClientModule.class,
+ ClientModule.class,
ContactModule.class,
CryptoModule.class,
- BlogsModule.class,
DataModule.class,
DatabaseModule.class,
EventModule.class,
ForumModule.class,
GroupInvitationModule.class,
- MessagingModule.class,
IdentityModule.class,
IntroductionModule.class,
LifecycleModule.class,
+ MessagingModule.class,
PrivateGroupModule.class,
PropertiesModule.class,
SharingModule.class,
@@ -69,9 +70,9 @@ import dagger.Component;
})
public interface BriarIntegrationTestComponent {
- void inject(BriarIntegrationTest init);
+ void inject(BriarIntegrationTest init);
- void inject(BlogsModule.EagerSingletons init);
+ void inject(BlogModule.EagerSingletons init);
void inject(ContactModule.EagerSingletons init);
@@ -81,10 +82,14 @@ public interface BriarIntegrationTestComponent {
void inject(GroupInvitationModule.EagerSingletons init);
+ void inject(IdentityModule.EagerSingletons init);
+
void inject(IntroductionModule.EagerSingletons init);
void inject(LifecycleModule.EagerSingletons init);
+ void inject(MessagingModule.EagerSingletons init);
+
void inject(PrivateGroupModule.EagerSingletons init);
void inject(PropertiesModule.EagerSingletons init);
@@ -93,6 +98,8 @@ public interface BriarIntegrationTestComponent {
void inject(SyncModule.EagerSingletons init);
+ void inject(SystemModule.EagerSingletons init);
+
void inject(TransportModule.EagerSingletons init);
LifecycleManager getLifecycleManager();
@@ -123,8 +130,6 @@ public interface BriarIntegrationTestComponent {
MessageTracker getMessageTracker();
- MessageSender getMessageSender();
-
MessageQueueManager getMessageQueueManager();
PrivateGroupManager getPrivateGroupManager();
diff --git a/briar-android-tests/src/test/java/org/briarproject/ForumManagerTest.java b/briar-android-tests/src/test/java/org/briarproject/ForumManagerTest.java
index 3d5c827d0..72c8fc0e4 100644
--- a/briar-android-tests/src/test/java/org/briarproject/ForumManagerTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/ForumManagerTest.java
@@ -2,25 +2,27 @@ package org.briarproject;
import junit.framework.Assert;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.forum.ForumManager;
-import org.briarproject.api.forum.ForumPost;
-import org.briarproject.api.forum.ForumPostHeader;
-import org.briarproject.api.forum.ForumSharingManager;
-import org.briarproject.api.sync.GroupId;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.api.forum.Forum;
+import org.briarproject.briar.api.forum.ForumManager;
+import org.briarproject.briar.api.forum.ForumPost;
+import org.briarproject.briar.api.forum.ForumPostHeader;
+import org.briarproject.briar.api.forum.ForumSharingManager;
import org.junit.Before;
import org.junit.Test;
import java.util.Collection;
+import javax.annotation.Nullable;
+
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNull;
import static junit.framework.TestCase.assertFalse;
import static org.briarproject.TestUtils.assertGroupCount;
import static org.junit.Assert.assertTrue;
-public class ForumManagerTest extends BriarIntegrationTest {
+public class ForumManagerTest
+ extends BriarIntegrationTest {
private ForumManager forumManager0, forumManager1;
private ForumSharingManager forumSharingManager0, forumSharingManager1;
@@ -47,6 +49,25 @@ public class ForumManagerTest extends BriarIntegrationTest {
sync1To0(1, true);
}
+ @Override
+ protected void createComponents() {
+ BriarIntegrationTestComponent component =
+ DaggerBriarIntegrationTestComponent.builder().build();
+ component.inject(this);
+
+ c0 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t0Dir)).build();
+ injectEagerSingletons(c0);
+
+ c1 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t1Dir)).build();
+ injectEagerSingletons(c1);
+
+ c2 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t2Dir)).build();
+ injectEagerSingletons(c2);
+ }
+
private ForumPost createForumPost(GroupId groupId,
@Nullable ForumPost parent, String body, long ms) throws Exception {
return forumPostFactory.createPost(groupId, ms,
diff --git a/briar-android-tests/src/test/java/org/briarproject/ForumSharingIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/ForumSharingIntegrationTest.java
index 249354bd2..40e3f0103 100644
--- a/briar-android-tests/src/test/java/org/briarproject/ForumSharingIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/ForumSharingIntegrationTest.java
@@ -2,28 +2,29 @@ package org.briarproject;
import net.jodah.concurrentunit.Waiter;
-import org.briarproject.api.Bytes;
-import org.briarproject.api.clients.MessageQueueManager;
-import org.briarproject.api.clients.SessionId;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Metadata;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.ForumInvitationReceivedEvent;
-import org.briarproject.api.event.ForumInvitationResponseReceivedEvent;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.forum.ForumInvitationRequest;
-import org.briarproject.api.forum.ForumInvitationResponse;
-import org.briarproject.api.forum.ForumManager;
-import org.briarproject.api.forum.ForumPost;
-import org.briarproject.api.forum.ForumPostHeader;
-import org.briarproject.api.forum.ForumSharingManager;
-import org.briarproject.api.sharing.InvitationMessage;
-import org.briarproject.api.sharing.SharingInvitationItem;
-import org.briarproject.api.sync.Group;
+import org.briarproject.bramble.api.Bytes;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Metadata;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.briar.api.client.MessageQueueManager;
+import org.briarproject.briar.api.client.SessionId;
+import org.briarproject.briar.api.forum.Forum;
+import org.briarproject.briar.api.forum.ForumInvitationRequest;
+import org.briarproject.briar.api.forum.ForumInvitationResponse;
+import org.briarproject.briar.api.forum.ForumManager;
+import org.briarproject.briar.api.forum.ForumPost;
+import org.briarproject.briar.api.forum.ForumPostHeader;
+import org.briarproject.briar.api.forum.ForumSharingManager;
+import org.briarproject.briar.api.forum.event.ForumInvitationRequestReceivedEvent;
+import org.briarproject.briar.api.forum.event.ForumInvitationResponseReceivedEvent;
+import org.briarproject.briar.api.sharing.InvitationMessage;
+import org.briarproject.briar.api.sharing.SharingInvitationItem;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -33,14 +34,16 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import static org.briarproject.api.forum.ForumConstants.FORUM_SALT_LENGTH;
-import static org.briarproject.api.forum.ForumSharingManager.CLIENT_ID;
-import static org.briarproject.api.sharing.SharingConstants.SHARE_MSG_TYPE_INVITATION;
+import static junit.framework.Assert.assertNotNull;
+import static org.briarproject.briar.api.forum.ForumConstants.FORUM_SALT_LENGTH;
+import static org.briarproject.briar.api.forum.ForumSharingManager.CLIENT_ID;
+import static org.briarproject.briar.api.sharing.SharingConstants.SHARE_MSG_TYPE_INVITATION;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-public class ForumSharingIntegrationTest extends BriarIntegrationTest {
+public class ForumSharingIntegrationTest
+ extends BriarIntegrationTest {
private ForumManager forumManager0, forumManager1;
private SharerListener listener0, listener2;
@@ -76,6 +79,25 @@ public class ForumSharingIntegrationTest extends BriarIntegrationTest {
addForumForSharer();
}
+ @Override
+ protected void createComponents() {
+ BriarIntegrationTestComponent component =
+ DaggerBriarIntegrationTestComponent.builder().build();
+ component.inject(this);
+
+ c0 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t0Dir)).build();
+ injectEagerSingletons(c0);
+
+ c1 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t1Dir)).build();
+ injectEagerSingletons(c1);
+
+ c2 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t2Dir)).build();
+ injectEagerSingletons(c2);
+ }
+
private void addForumForSharer() throws DbException {
forum0 = forumManager0.addForum("Test Forum");
}
@@ -633,6 +655,7 @@ public class ForumSharingIntegrationTest extends BriarIntegrationTest {
assertEquals(2, contacts.size());
// answer second request
+ assertNotNull(contactId2From1);
Contact contact2From1 = contactManager1.getContact(contactId2From1);
forumSharingManager1.respondToInvitation(forum0, contact2From1, true);
// sync response
@@ -752,6 +775,7 @@ public class ForumSharingIntegrationTest extends BriarIntegrationTest {
assertTrue(found);
}
+ @NotNullByDefault
private class SharerListener implements EventListener {
private volatile boolean requestReceived = false;
@@ -764,9 +788,9 @@ public class ForumSharingIntegrationTest extends BriarIntegrationTest {
eventWaiter.resume();
}
// this is only needed for tests where a forum is re-shared
- else if (e instanceof ForumInvitationReceivedEvent) {
- ForumInvitationReceivedEvent event =
- (ForumInvitationReceivedEvent) e;
+ else if (e instanceof ForumInvitationRequestReceivedEvent) {
+ ForumInvitationRequestReceivedEvent event =
+ (ForumInvitationRequestReceivedEvent) e;
eventWaiter.assertEquals(contactId1From0, event.getContactId());
requestReceived = true;
Forum f = event.getShareable();
@@ -782,6 +806,7 @@ public class ForumSharingIntegrationTest extends BriarIntegrationTest {
}
}
+ @NotNullByDefault
private class InviteeListener implements EventListener {
private volatile boolean requestReceived = false;
@@ -800,9 +825,9 @@ public class ForumSharingIntegrationTest extends BriarIntegrationTest {
@Override
public void eventOccurred(Event e) {
- if (e instanceof ForumInvitationReceivedEvent) {
- ForumInvitationReceivedEvent event =
- (ForumInvitationReceivedEvent) e;
+ if (e instanceof ForumInvitationRequestReceivedEvent) {
+ ForumInvitationRequestReceivedEvent event =
+ (ForumInvitationRequestReceivedEvent) e;
requestReceived = true;
if (!answer) return;
Forum f = event.getShareable();
diff --git a/briar-android-tests/src/test/java/org/briarproject/GroupInvitationIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/GroupInvitationIntegrationTest.java
index 198a3039d..7c350c630 100644
--- a/briar-android-tests/src/test/java/org/briarproject/GroupInvitationIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/GroupInvitationIntegrationTest.java
@@ -1,29 +1,31 @@
package org.briarproject;
-import org.briarproject.api.clients.ProtocolStateException;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.privategroup.GroupMessage;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.privategroup.invitation.GroupInvitationItem;
-import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
-import org.briarproject.api.privategroup.invitation.GroupInvitationRequest;
-import org.briarproject.api.privategroup.invitation.GroupInvitationResponse;
-import org.briarproject.api.sharing.InvitationMessage;
-import org.briarproject.api.sync.Group;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.briar.api.client.ProtocolStateException;
+import org.briarproject.briar.api.privategroup.GroupMessage;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse;
+import org.briarproject.briar.api.sharing.InvitationMessage;
import org.junit.Before;
import org.junit.Test;
import java.util.Collection;
+import javax.annotation.Nullable;
+
import static junit.framework.TestCase.fail;
import static org.briarproject.TestUtils.assertGroupCount;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-public class GroupInvitationIntegrationTest extends BriarIntegrationTest {
+public class GroupInvitationIntegrationTest
+ extends BriarIntegrationTest {
private PrivateGroup privateGroup0;
private PrivateGroupManager groupManager0, groupManager1;
@@ -48,6 +50,25 @@ public class GroupInvitationIntegrationTest extends BriarIntegrationTest {
groupManager0.addPrivateGroup(privateGroup0, joinMsg0, true);
}
+ @Override
+ protected void createComponents() {
+ BriarIntegrationTestComponent component =
+ DaggerBriarIntegrationTestComponent.builder().build();
+ component.inject(this);
+
+ c0 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t0Dir)).build();
+ injectEagerSingletons(c0);
+
+ c1 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t1Dir)).build();
+ injectEagerSingletons(c1);
+
+ c2 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t2Dir)).build();
+ injectEagerSingletons(c2);
+ }
+
@Test
public void testSendInvitation() throws Exception {
long timestamp = clock.currentTimeMillis();
diff --git a/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTest.java
index b63c070dc..78a57af54 100644
--- a/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTest.java
@@ -1,28 +1,28 @@
package org.briarproject;
-import org.briarproject.api.UniqueId;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.PrivateKey;
-import org.briarproject.api.forum.ForumConstants;
-import org.briarproject.api.forum.ForumPost;
-import org.briarproject.api.forum.ForumPostFactory;
-import org.briarproject.api.identity.AuthorFactory;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.messaging.PrivateMessage;
-import org.briarproject.api.messaging.PrivateMessageFactory;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.system.SystemModule;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.UniqueId;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.PrivateKey;
+import org.briarproject.bramble.api.identity.AuthorFactory;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.api.forum.ForumConstants;
+import org.briarproject.briar.api.forum.ForumPost;
+import org.briarproject.briar.api.forum.ForumPostFactory;
+import org.briarproject.briar.api.messaging.PrivateMessage;
+import org.briarproject.briar.api.messaging.PrivateMessageFactory;
import org.junit.Test;
import javax.inject.Inject;
-import static org.briarproject.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
-import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
-import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
-import static org.briarproject.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
-import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
+import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
import static org.junit.Assert.assertTrue;
public class MessageSizeIntegrationTest extends BriarTestCase {
@@ -40,7 +40,7 @@ public class MessageSizeIntegrationTest extends BriarTestCase {
MessageSizeIntegrationTestComponent component =
DaggerMessageSizeIntegrationTestComponent.builder().build();
component.inject(this);
- component.inject(new SystemModule.EagerSingletons());
+ injectEagerSingletons(component);
}
@Test
@@ -84,4 +84,9 @@ public class MessageSizeIntegrationTest extends BriarTestCase {
+ MAX_FORUM_POST_BODY_LENGTH);
assertTrue(length <= MAX_PACKET_PAYLOAD_LENGTH);
}
+
+ private static void injectEagerSingletons(
+ MessageSizeIntegrationTestComponent component) {
+ component.inject(new SystemModule.EagerSingletons());
+ }
}
diff --git a/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTestComponent.java b/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTestComponent.java
index fe5304640..5921a6141 100644
--- a/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTestComponent.java
+++ b/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTestComponent.java
@@ -1,15 +1,16 @@
package org.briarproject;
-import org.briarproject.clients.ClientsModule;
-import org.briarproject.crypto.CryptoModule;
-import org.briarproject.data.DataModule;
-import org.briarproject.db.DatabaseModule;
-import org.briarproject.event.EventModule;
-import org.briarproject.forum.ForumModule;
-import org.briarproject.identity.IdentityModule;
-import org.briarproject.messaging.MessagingModule;
-import org.briarproject.sync.SyncModule;
-import org.briarproject.system.SystemModule;
+import org.briarproject.bramble.client.ClientModule;
+import org.briarproject.bramble.crypto.CryptoModule;
+import org.briarproject.bramble.data.DataModule;
+import org.briarproject.bramble.db.DatabaseModule;
+import org.briarproject.bramble.event.EventModule;
+import org.briarproject.bramble.identity.IdentityModule;
+import org.briarproject.bramble.sync.SyncModule;
+import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.briar.client.BriarClientModule;
+import org.briarproject.briar.forum.ForumModule;
+import org.briarproject.briar.messaging.MessagingModule;
import javax.inject.Singleton;
@@ -20,7 +21,8 @@ import dagger.Component;
TestDatabaseModule.class,
TestLifecycleModule.class,
TestSeedProviderModule.class,
- ClientsModule.class,
+ BriarClientModule.class,
+ ClientModule.class,
CryptoModule.class,
DataModule.class,
DatabaseModule.class,
@@ -31,7 +33,7 @@ import dagger.Component;
SyncModule.class,
SystemModule.class
})
-public interface MessageSizeIntegrationTestComponent {
+interface MessageSizeIntegrationTestComponent {
void inject(MessageSizeIntegrationTest testCase);
diff --git a/briar-android-tests/src/test/java/org/briarproject/PrivateGroupIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/PrivateGroupIntegrationTest.java
index f1b96df29..7e435710e 100644
--- a/briar-android-tests/src/test/java/org/briarproject/PrivateGroupIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/PrivateGroupIntegrationTest.java
@@ -1,28 +1,29 @@
package org.briarproject;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.privategroup.GroupMember;
-import org.briarproject.api.privategroup.GroupMessage;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.privategroup.JoinMessageHeader;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.api.privategroup.GroupMember;
+import org.briarproject.briar.api.privategroup.GroupMessage;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
+import org.briarproject.briar.api.privategroup.JoinMessageHeader;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
import org.junit.Before;
import org.junit.Test;
import java.util.Collection;
-import static org.briarproject.api.identity.Author.Status.OURSELVES;
-import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
-import static org.briarproject.api.privategroup.Visibility.REVEALED_BY_CONTACT;
-import static org.briarproject.api.privategroup.Visibility.REVEALED_BY_US;
+import javax.annotation.Nullable;
+
+import static org.briarproject.bramble.api.identity.Author.Status.OURSELVES;
+import static org.briarproject.briar.api.privategroup.Visibility.INVISIBLE;
+import static org.briarproject.briar.api.privategroup.Visibility.REVEALED_BY_CONTACT;
+import static org.briarproject.briar.api.privategroup.Visibility.REVEALED_BY_US;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -30,7 +31,8 @@ import static org.junit.Assert.assertTrue;
* This class tests how PrivateGroupManager and GroupInvitationManager
* play together.
*/
-public class PrivateGroupIntegrationTest extends BriarIntegrationTest {
+public class PrivateGroupIntegrationTest
+ extends BriarIntegrationTest {
private GroupId groupId0;
private PrivateGroup privateGroup0;
@@ -59,6 +61,25 @@ public class PrivateGroupIntegrationTest extends BriarIntegrationTest {
groupManager0.addPrivateGroup(privateGroup0, joinMsg0, true);
}
+ @Override
+ protected void createComponents() {
+ BriarIntegrationTestComponent component =
+ DaggerBriarIntegrationTestComponent.builder().build();
+ component.inject(this);
+
+ c0 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t0Dir)).build();
+ injectEagerSingletons(c0);
+
+ c1 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t1Dir)).build();
+ injectEagerSingletons(c1);
+
+ c2 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t2Dir)).build();
+ injectEagerSingletons(c2);
+ }
+
@Test
public void testMembership() throws Exception {
sendInvitation(contactId1From0, clock.currentTimeMillis(), "Hi!");
diff --git a/briar-android-tests/src/test/java/org/briarproject/PrivateGroupManagerTest.java b/briar-android-tests/src/test/java/org/briarproject/PrivateGroupManagerTest.java
index 4e1dbc0cd..8b00a35f5 100644
--- a/briar-android-tests/src/test/java/org/briarproject/PrivateGroupManagerTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/PrivateGroupManagerTest.java
@@ -1,35 +1,36 @@
package org.briarproject;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.privategroup.GroupMember;
-import org.briarproject.api.privategroup.GroupMessage;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.privategroup.JoinMessageHeader;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+import org.briarproject.briar.api.privategroup.GroupMember;
+import org.briarproject.briar.api.privategroup.GroupMessage;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
+import org.briarproject.briar.api.privategroup.JoinMessageHeader;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
import org.junit.Before;
import org.junit.Test;
import java.util.Collection;
import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.api.identity.Author.Status.VERIFIED;
-import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
-import static org.briarproject.api.privategroup.Visibility.REVEALED_BY_CONTACT;
-import static org.briarproject.api.privategroup.Visibility.REVEALED_BY_US;
-import static org.briarproject.api.privategroup.Visibility.VISIBLE;
-import static org.briarproject.api.privategroup.invitation.GroupInvitationFactory.SIGNING_LABEL_INVITE;
-import static org.briarproject.api.sync.Group.Visibility.SHARED;
+import static org.briarproject.bramble.api.identity.Author.Status.VERIFIED;
+import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
+import static org.briarproject.briar.api.privategroup.Visibility.INVISIBLE;
+import static org.briarproject.briar.api.privategroup.Visibility.REVEALED_BY_CONTACT;
+import static org.briarproject.briar.api.privategroup.Visibility.REVEALED_BY_US;
+import static org.briarproject.briar.api.privategroup.Visibility.VISIBLE;
+import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory.SIGNING_LABEL_INVITE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-public class PrivateGroupManagerTest extends BriarIntegrationTest {
+public class PrivateGroupManagerTest
+ extends BriarIntegrationTest {
private PrivateGroup privateGroup0;
private GroupId groupId0;
@@ -48,6 +49,25 @@ public class PrivateGroupManagerTest extends BriarIntegrationTest {
groupId0 = privateGroup0.getId();
}
+ @Override
+ protected void createComponents() {
+ BriarIntegrationTestComponent component =
+ DaggerBriarIntegrationTestComponent.builder().build();
+ component.inject(this);
+
+ c0 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t0Dir)).build();
+ injectEagerSingletons(c0);
+
+ c1 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t1Dir)).build();
+ injectEagerSingletons(c1);
+
+ c2 = DaggerBriarIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t2Dir)).build();
+ injectEagerSingletons(c2);
+ }
+
@Test
public void testSendingMessage() throws Exception {
addGroup();
@@ -220,7 +240,8 @@ public class PrivateGroupManagerTest extends BriarIntegrationTest {
// share the group with 1
Transaction txn0 = db0.startTransaction(false);
- db0.setGroupVisibility(txn0, contactId1From0, privateGroup0.getId(), SHARED);
+ db0.setGroupVisibility(txn0, contactId1From0, privateGroup0.getId(),
+ SHARED);
db0.commitTransaction(txn0);
db0.endTransaction(txn0);
@@ -277,7 +298,8 @@ public class PrivateGroupManagerTest extends BriarIntegrationTest {
// share the group with 1
Transaction txn0 = db0.startTransaction(false);
- db0.setGroupVisibility(txn0, contactId1From0, privateGroup0.getId(), SHARED);
+ db0.setGroupVisibility(txn0, contactId1From0, privateGroup0.getId(),
+ SHARED);
db0.commitTransaction(txn0);
db0.endTransaction(txn0);
@@ -298,7 +320,8 @@ public class PrivateGroupManagerTest extends BriarIntegrationTest {
// share the group with 0
Transaction txn1 = db1.startTransaction(false);
- db1.setGroupVisibility(txn1, contactId0From1, privateGroup0.getId(), SHARED);
+ db1.setGroupVisibility(txn1, contactId0From1, privateGroup0.getId(),
+ SHARED);
db1.commitTransaction(txn1);
db1.endTransaction(txn1);
@@ -376,7 +399,8 @@ public class PrivateGroupManagerTest extends BriarIntegrationTest {
// share the group with 2
Transaction txn0 = db0.startTransaction(false);
- db0.setGroupVisibility(txn0, contactId2From0, privateGroup0.getId(), SHARED);
+ db0.setGroupVisibility(txn0, contactId2From0, privateGroup0.getId(),
+ SHARED);
db0.commitTransaction(txn0);
db0.endTransaction(txn0);
@@ -507,7 +531,8 @@ public class PrivateGroupManagerTest extends BriarIntegrationTest {
// share the group with 1
Transaction txn0 = db0.startTransaction(false);
- db0.setGroupVisibility(txn0, contactId1From0, privateGroup0.getId(), SHARED);
+ db0.setGroupVisibility(txn0, contactId1From0, privateGroup0.getId(),
+ SHARED);
db0.commitTransaction(txn0);
db0.endTransaction(txn0);
diff --git a/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTest.java
index cc98b42c0..68515bd0f 100644
--- a/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTest.java
@@ -1,27 +1,29 @@
package org.briarproject;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.MessageAddedEvent;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.messaging.MessagingManager;
-import org.briarproject.api.messaging.PrivateMessage;
-import org.briarproject.api.messaging.PrivateMessageFactory;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.SyncSession;
-import org.briarproject.api.sync.SyncSessionFactory;
-import org.briarproject.api.transport.KeyManager;
-import org.briarproject.api.transport.StreamContext;
-import org.briarproject.api.transport.StreamReaderFactory;
-import org.briarproject.api.transport.StreamWriterFactory;
-import org.briarproject.system.SystemModule;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.SyncSession;
+import org.briarproject.bramble.api.sync.SyncSessionFactory;
+import org.briarproject.bramble.api.sync.event.MessageAddedEvent;
+import org.briarproject.bramble.api.transport.KeyManager;
+import org.briarproject.bramble.api.transport.StreamContext;
+import org.briarproject.bramble.api.transport.StreamReaderFactory;
+import org.briarproject.bramble.api.transport.StreamWriterFactory;
+import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.briar.api.messaging.MessagingManager;
+import org.briarproject.briar.api.messaging.PrivateMessage;
+import org.briarproject.briar.api.messaging.PrivateMessageFactory;
+import org.briarproject.briar.messaging.MessagingModule;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -32,10 +34,10 @@ import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
-import static org.briarproject.TestPluginsModule.MAX_LATENCY;
-import static org.briarproject.TestPluginsModule.TRANSPORT_ID;
-import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.TAG_LENGTH;
+import static org.briarproject.TestPluginConfigModule.MAX_LATENCY;
+import static org.briarproject.TestPluginConfigModule.TRANSPORT_ID;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -61,10 +63,11 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
assertTrue(testDir.mkdirs());
alice = DaggerSimplexMessagingIntegrationTestComponent.builder()
.testDatabaseModule(new TestDatabaseModule(aliceDir)).build();
+ injectEagerSingletons(alice);
alice.inject(new SystemModule.EagerSingletons());
bob = DaggerSimplexMessagingIntegrationTestComponent.builder()
.testDatabaseModule(new TestDatabaseModule(bobDir)).build();
- bob.inject(new SystemModule.EagerSingletons());
+ injectEagerSingletons(bob);
}
@Test
@@ -136,8 +139,6 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
KeyManager keyManager = bob.getKeyManager();
StreamReaderFactory streamReaderFactory = bob.getStreamReaderFactory();
SyncSessionFactory syncSessionFactory = bob.getSyncSessionFactory();
- // Bob needs a MessagingManager even though we're not using it directly
- bob.getMessagingManager();
// Start the lifecyle manager
lifecycleManager.startServices(null);
@@ -185,6 +186,13 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
TestUtils.deleteTestDirectory(testDir);
}
+ private static void injectEagerSingletons(
+ SimplexMessagingIntegrationTestComponent component) {
+ component.inject(new MessagingModule.EagerSingletons());
+ component.inject(new SystemModule.EagerSingletons());
+ }
+
+ @NotNullByDefault
private static class MessageListener implements EventListener {
private volatile boolean messageAdded = false;
diff --git a/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTestComponent.java b/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTestComponent.java
index 9de8e9c5e..91536ecca 100644
--- a/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTestComponent.java
+++ b/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTestComponent.java
@@ -1,28 +1,28 @@
package org.briarproject;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.messaging.MessagingManager;
-import org.briarproject.api.messaging.PrivateMessageFactory;
-import org.briarproject.api.sync.SyncSessionFactory;
-import org.briarproject.api.transport.KeyManager;
-import org.briarproject.api.transport.StreamReaderFactory;
-import org.briarproject.api.transport.StreamWriterFactory;
-import org.briarproject.clients.ClientsModule;
-import org.briarproject.contact.ContactModule;
-import org.briarproject.crypto.CryptoModule;
-import org.briarproject.data.DataModule;
-import org.briarproject.db.DatabaseModule;
-import org.briarproject.event.EventModule;
-import org.briarproject.identity.IdentityModule;
-import org.briarproject.lifecycle.LifecycleModule;
-import org.briarproject.messaging.MessagingModule;
-import org.briarproject.plugins.PluginsModule;
-import org.briarproject.sync.SyncModule;
-import org.briarproject.system.SystemModule;
-import org.briarproject.transport.TransportModule;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.sync.SyncSessionFactory;
+import org.briarproject.bramble.api.transport.KeyManager;
+import org.briarproject.bramble.api.transport.StreamReaderFactory;
+import org.briarproject.bramble.api.transport.StreamWriterFactory;
+import org.briarproject.bramble.client.ClientModule;
+import org.briarproject.bramble.contact.ContactModule;
+import org.briarproject.bramble.crypto.CryptoModule;
+import org.briarproject.bramble.data.DataModule;
+import org.briarproject.bramble.db.DatabaseModule;
+import org.briarproject.bramble.event.EventModule;
+import org.briarproject.bramble.identity.IdentityModule;
+import org.briarproject.bramble.lifecycle.LifecycleModule;
+import org.briarproject.bramble.sync.SyncModule;
+import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.bramble.transport.TransportModule;
+import org.briarproject.briar.api.messaging.MessagingManager;
+import org.briarproject.briar.api.messaging.PrivateMessageFactory;
+import org.briarproject.briar.client.BriarClientModule;
+import org.briarproject.briar.messaging.MessagingModule;
import javax.inject.Singleton;
@@ -31,9 +31,10 @@ import dagger.Component;
@Singleton
@Component(modules = {
TestDatabaseModule.class,
- TestPluginsModule.class,
+ TestPluginConfigModule.class,
TestSeedProviderModule.class,
- ClientsModule.class,
+ BriarClientModule.class,
+ ClientModule.class,
ContactModule.class,
CryptoModule.class,
DataModule.class,
@@ -42,12 +43,13 @@ import dagger.Component;
IdentityModule.class,
LifecycleModule.class,
MessagingModule.class,
- PluginsModule.class,
SyncModule.class,
SystemModule.class,
TransportModule.class
})
-public interface SimplexMessagingIntegrationTestComponent {
+interface SimplexMessagingIntegrationTestComponent {
+
+ void inject(MessagingModule.EagerSingletons init);
void inject(SystemModule.EagerSingletons init);
diff --git a/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTest.java
index 07a671747..ef6ed72ab 100644
--- a/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTest.java
@@ -1,25 +1,25 @@
package org.briarproject;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.sync.Ack;
-import org.briarproject.api.sync.ClientId;
-import org.briarproject.api.sync.Group;
-import org.briarproject.api.sync.GroupFactory;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageFactory;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.sync.Offer;
-import org.briarproject.api.sync.PacketReader;
-import org.briarproject.api.sync.PacketReaderFactory;
-import org.briarproject.api.sync.PacketWriter;
-import org.briarproject.api.sync.PacketWriterFactory;
-import org.briarproject.api.sync.Request;
-import org.briarproject.api.transport.StreamContext;
-import org.briarproject.api.transport.StreamReaderFactory;
-import org.briarproject.api.transport.StreamWriterFactory;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.sync.Ack;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.GroupFactory;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageFactory;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.Offer;
+import org.briarproject.bramble.api.sync.PacketReader;
+import org.briarproject.bramble.api.sync.PacketReaderFactory;
+import org.briarproject.bramble.api.sync.PacketWriter;
+import org.briarproject.bramble.api.sync.PacketWriterFactory;
+import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.api.transport.StreamContext;
+import org.briarproject.bramble.api.transport.StreamReaderFactory;
+import org.briarproject.bramble.api.transport.StreamWriterFactory;
import org.junit.Test;
import java.io.ByteArrayInputStream;
@@ -31,7 +31,7 @@ import java.util.Collection;
import javax.inject.Inject;
-import static org.briarproject.api.transport.TransportConstants.TAG_LENGTH;
+import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
diff --git a/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTestComponent.java b/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTestComponent.java
index 69710bd5a..f20e66c8e 100644
--- a/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTestComponent.java
+++ b/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTestComponent.java
@@ -1,8 +1,8 @@
package org.briarproject;
-import org.briarproject.crypto.CryptoModule;
-import org.briarproject.sync.SyncModule;
-import org.briarproject.transport.TransportModule;
+import org.briarproject.bramble.crypto.CryptoModule;
+import org.briarproject.bramble.sync.SyncModule;
+import org.briarproject.bramble.transport.TransportModule;
import javax.inject.Singleton;
@@ -15,6 +15,7 @@ import dagger.Component;
SyncModule.class,
TransportModule.class
})
-public interface SyncIntegrationTestComponent {
+interface SyncIntegrationTestComponent {
+
void inject(SyncIntegrationTest testCase);
}
diff --git a/briar-tests/src/org/briarproject/TestDatabaseModule.java b/briar-android-tests/src/test/java/org/briarproject/TestDatabaseModule.java
similarity index 74%
rename from briar-tests/src/org/briarproject/TestDatabaseModule.java
rename to briar-android-tests/src/test/java/org/briarproject/TestDatabaseModule.java
index be401e4e2..b978c8dea 100644
--- a/briar-tests/src/org/briarproject/TestDatabaseModule.java
+++ b/briar-android-tests/src/test/java/org/briarproject/TestDatabaseModule.java
@@ -1,8 +1,7 @@
package org.briarproject;
-import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.db.DatabaseModule;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
import java.io.File;
import java.util.concurrent.Executor;
@@ -13,7 +12,7 @@ import dagger.Module;
import dagger.Provides;
@Module
-public class TestDatabaseModule extends DatabaseModule {
+public class TestDatabaseModule {
private final DatabaseConfig config;
diff --git a/briar-tests/src/org/briarproject/TestLifecycleModule.java b/briar-android-tests/src/test/java/org/briarproject/TestLifecycleModule.java
similarity index 63%
rename from briar-tests/src/org/briarproject/TestLifecycleModule.java
rename to briar-android-tests/src/test/java/org/briarproject/TestLifecycleModule.java
index b97bb8251..16407ea41 100644
--- a/briar-tests/src/org/briarproject/TestLifecycleModule.java
+++ b/briar-android-tests/src/test/java/org/briarproject/TestLifecycleModule.java
@@ -1,72 +1,70 @@
package org.briarproject;
-import org.briarproject.api.clients.Client;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.lifecycle.Service;
-import org.briarproject.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.lifecycle.Service;
+import org.briarproject.bramble.api.lifecycle.ShutdownManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Client;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import javax.annotation.Nullable;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
@Module
-public class TestLifecycleModule {
+class TestLifecycleModule {
@Provides
LifecycleManager provideLifecycleManager() {
- return new LifecycleManager() {
+ @NotNullByDefault
+ LifecycleManager lifecycleManager = new LifecycleManager() {
@Override
public void registerService(Service s) {
-
}
@Override
public void registerClient(Client c) {
-
}
@Override
public void registerForShutdown(ExecutorService e) {
-
}
@Override
- public StartResult startServices(String nickname) {
+ public StartResult startServices(@Nullable String nickname) {
return StartResult.SUCCESS;
}
@Override
public void stopServices() {
-
}
@Override
public void waitForDatabase() throws InterruptedException {
-
}
@Override
public void waitForStartup() throws InterruptedException {
-
}
@Override
public void waitForShutdown() throws InterruptedException {
-
}
};
+ return lifecycleManager;
}
@Provides
ShutdownManager provideShutdownManager() {
- return new ShutdownManager() {
+ @NotNullByDefault
+ ShutdownManager shutdownManager = new ShutdownManager() {
@Override
public int addShutdownHook(Runnable hook) {
@@ -78,6 +76,7 @@ public class TestLifecycleModule {
return true;
}
};
+ return shutdownManager;
}
@Provides
diff --git a/briar-tests/src/org/briarproject/TestPluginsModule.java b/briar-android-tests/src/test/java/org/briarproject/TestPluginConfigModule.java
similarity index 58%
rename from briar-tests/src/org/briarproject/TestPluginsModule.java
rename to briar-android-tests/src/test/java/org/briarproject/TestPluginConfigModule.java
index b7cf4209e..416d5f108 100644
--- a/briar-tests/src/org/briarproject/TestPluginsModule.java
+++ b/briar-android-tests/src/test/java/org/briarproject/TestPluginConfigModule.java
@@ -1,24 +1,28 @@
package org.briarproject;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.plugins.PluginConfig;
-import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
-import org.briarproject.api.plugins.simplex.SimplexPlugin;
-import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
-import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.PluginConfig;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory;
import java.util.Collection;
import java.util.Collections;
+import javax.annotation.Nullable;
+
import dagger.Module;
import dagger.Provides;
@Module
-public class TestPluginsModule {
+public class TestPluginConfigModule {
public static final TransportId TRANSPORT_ID = new TransportId("id");
public static final int MAX_LATENCY = 2 * 60 * 1000; // 2 minutes
+ @NotNullByDefault
private final SimplexPluginFactory simplex = new SimplexPluginFactory() {
@Override
@@ -32,6 +36,7 @@ public class TestPluginsModule {
}
@Override
+ @Nullable
public SimplexPlugin createPlugin(SimplexPluginCallback callback) {
return null;
}
@@ -39,7 +44,8 @@ public class TestPluginsModule {
@Provides
PluginConfig providePluginConfig() {
- return new PluginConfig() {
+ @NotNullByDefault
+ PluginConfig pluginConfig = new PluginConfig() {
@Override
public Collection getDuplexFactories() {
@@ -51,5 +57,6 @@ public class TestPluginsModule {
return Collections.singletonList(simplex);
}
};
+ return pluginConfig;
}
}
diff --git a/briar-tests/src/org/briarproject/TestSeedProviderModule.java b/briar-android-tests/src/test/java/org/briarproject/TestSeedProviderModule.java
similarity index 81%
rename from briar-tests/src/org/briarproject/TestSeedProviderModule.java
rename to briar-android-tests/src/test/java/org/briarproject/TestSeedProviderModule.java
index a239ba7d8..1d449284f 100644
--- a/briar-tests/src/org/briarproject/TestSeedProviderModule.java
+++ b/briar-android-tests/src/test/java/org/briarproject/TestSeedProviderModule.java
@@ -1,6 +1,6 @@
package org.briarproject;
-import org.briarproject.api.system.SeedProvider;
+import org.briarproject.bramble.api.system.SeedProvider;
import javax.inject.Singleton;
diff --git a/briar-android-tests/src/test/java/org/briarproject/introduction/IntroductionIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java
similarity index 85%
rename from briar-android-tests/src/test/java/org/briarproject/introduction/IntroductionIntegrationTest.java
rename to briar-android-tests/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java
index 1fb7ef673..099a51041 100644
--- a/briar-android-tests/src/test/java/org/briarproject/introduction/IntroductionIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java
@@ -1,36 +1,40 @@
-package org.briarproject.introduction;
+package org.briarproject.briar.introduction;
import net.jodah.concurrentunit.Waiter;
import org.briarproject.BriarIntegrationTest;
+import org.briarproject.TestDatabaseModule;
import org.briarproject.TestUtils;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.clients.ClientHelper;
-import org.briarproject.api.clients.SessionId;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.data.BdfDictionary;
-import org.briarproject.api.data.BdfEntry;
-import org.briarproject.api.data.BdfList;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.Metadata;
-import org.briarproject.api.db.Transaction;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.IntroductionAbortedEvent;
-import org.briarproject.api.event.IntroductionRequestReceivedEvent;
-import org.briarproject.api.event.IntroductionResponseReceivedEvent;
-import org.briarproject.api.event.IntroductionSucceededEvent;
-import org.briarproject.api.introduction.IntroductionManager;
-import org.briarproject.api.introduction.IntroductionMessage;
-import org.briarproject.api.introduction.IntroductionRequest;
-import org.briarproject.api.properties.TransportProperties;
-import org.briarproject.api.properties.TransportPropertyManager;
-import org.briarproject.api.sync.Group;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.client.ClientHelper;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.crypto.KeyPair;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.data.BdfDictionary;
+import org.briarproject.bramble.api.data.BdfEntry;
+import org.briarproject.bramble.api.data.BdfList;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Metadata;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.properties.TransportProperties;
+import org.briarproject.bramble.api.properties.TransportPropertyManager;
+import org.briarproject.bramble.api.sync.Group;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.api.client.SessionId;
+import org.briarproject.briar.api.introduction.IntroductionManager;
+import org.briarproject.briar.api.introduction.IntroductionMessage;
+import org.briarproject.briar.api.introduction.IntroductionRequest;
+import org.briarproject.briar.api.introduction.event.IntroductionAbortedEvent;
+import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent;
+import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent;
+import org.briarproject.briar.api.introduction.event.IntroductionSucceededEvent;
import org.junit.Before;
import org.junit.Test;
@@ -45,31 +49,37 @@ import java.util.Map.Entry;
import java.util.concurrent.TimeoutException;
import java.util.logging.Logger;
-import static org.briarproject.TestPluginsModule.TRANSPORT_ID;
+import javax.inject.Inject;
+
+import static org.briarproject.TestPluginConfigModule.TRANSPORT_ID;
import static org.briarproject.TestUtils.assertGroupCount;
-import static org.briarproject.api.clients.MessageQueueManager.QUEUE_STATE_KEY;
-import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
-import static org.briarproject.api.introduction.IntroductionConstants.E_PUBLIC_KEY;
-import static org.briarproject.api.introduction.IntroductionConstants.GROUP_ID;
-import static org.briarproject.api.introduction.IntroductionConstants.MAC;
-import static org.briarproject.api.introduction.IntroductionConstants.MAC_KEY;
-import static org.briarproject.api.introduction.IntroductionConstants.NAME;
-import static org.briarproject.api.introduction.IntroductionConstants.NONCE;
-import static org.briarproject.api.introduction.IntroductionConstants.PUBLIC_KEY;
-import static org.briarproject.api.introduction.IntroductionConstants.SESSION_ID;
-import static org.briarproject.api.introduction.IntroductionConstants.SIGNATURE;
-import static org.briarproject.api.introduction.IntroductionConstants.TIME;
-import static org.briarproject.api.introduction.IntroductionConstants.TRANSPORT;
-import static org.briarproject.api.introduction.IntroductionConstants.TYPE;
-import static org.briarproject.api.introduction.IntroductionConstants.TYPE_REQUEST;
-import static org.briarproject.api.introduction.IntroductionConstants.TYPE_RESPONSE;
-import static org.briarproject.introduction.IntroduceeManager.SIGNING_LABEL_RESPONSE;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.briar.api.client.MessageQueueManager.QUEUE_STATE_KEY;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.E_PUBLIC_KEY;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.GROUP_ID;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.MAC;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.MAC_KEY;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.NAME;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.NONCE;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.PUBLIC_KEY;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.SESSION_ID;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.SIGNATURE;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.TIME;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.TRANSPORT;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.TYPE;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.TYPE_REQUEST;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.TYPE_RESPONSE;
+import static org.briarproject.briar.introduction.IntroduceeManager.SIGNING_LABEL_RESPONSE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-public class IntroductionIntegrationTest extends BriarIntegrationTest {
+public class IntroductionIntegrationTest
+ extends BriarIntegrationTest {
+
+ @Inject
+ IntroductionGroupFactory introductionGroupFactory;
// objects accessed from background threads need to be volatile
private volatile IntroductionManager introductionManager0;
@@ -103,6 +113,25 @@ public class IntroductionIntegrationTest extends BriarIntegrationTest {
addTransportProperties();
}
+ @Override
+ protected void createComponents() {
+ IntroductionIntegrationTestComponent component =
+ DaggerIntroductionIntegrationTestComponent.builder().build();
+ component.inject(this);
+
+ c0 = DaggerIntroductionIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t0Dir)).build();
+ injectEagerSingletons(c0);
+
+ c1 = DaggerIntroductionIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t1Dir)).build();
+ injectEagerSingletons(c1);
+
+ c2 = DaggerIntroductionIntegrationTestComponent.builder()
+ .testDatabaseModule(new TestDatabaseModule(t2Dir)).build();
+ injectEagerSingletons(c2);
+ }
+
@Test
public void testIntroductionSession() throws Exception {
addListeners(true, true);
@@ -827,6 +856,8 @@ public class IntroductionIntegrationTest extends BriarIntegrationTest {
c2.getEventBus().addListener(listener2);
}
+ @MethodsNotNullByDefault
+ @ParametersNotNullByDefault
private class IntroduceeListener implements EventListener {
private volatile boolean requestReceived = false;
@@ -894,6 +925,7 @@ public class IntroductionIntegrationTest extends BriarIntegrationTest {
}
}
+ @NotNullByDefault
private class IntroducerListener implements EventListener {
private volatile boolean response1Received = false;
diff --git a/briar-android-tests/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java b/briar-android-tests/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
new file mode 100644
index 000000000..1f6dcb7fd
--- /dev/null
+++ b/briar-android-tests/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
@@ -0,0 +1,64 @@
+package org.briarproject.briar.introduction;
+
+import org.briarproject.BriarIntegrationTestComponent;
+import org.briarproject.TestDatabaseModule;
+import org.briarproject.TestPluginConfigModule;
+import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.client.ClientModule;
+import org.briarproject.bramble.contact.ContactModule;
+import org.briarproject.bramble.crypto.CryptoModule;
+import org.briarproject.bramble.data.DataModule;
+import org.briarproject.bramble.db.DatabaseModule;
+import org.briarproject.bramble.event.EventModule;
+import org.briarproject.bramble.identity.IdentityModule;
+import org.briarproject.bramble.lifecycle.LifecycleModule;
+import org.briarproject.bramble.properties.PropertiesModule;
+import org.briarproject.bramble.sync.SyncModule;
+import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.bramble.transport.TransportModule;
+import org.briarproject.briar.blog.BlogModule;
+import org.briarproject.briar.client.BriarClientModule;
+import org.briarproject.briar.forum.ForumModule;
+import org.briarproject.briar.messaging.MessagingModule;
+import org.briarproject.briar.privategroup.PrivateGroupModule;
+import org.briarproject.briar.privategroup.invitation.GroupInvitationModule;
+import org.briarproject.briar.sharing.SharingModule;
+
+import javax.inject.Singleton;
+
+import dagger.Component;
+
+@Singleton
+@Component(modules = {
+ TestDatabaseModule.class,
+ TestPluginConfigModule.class,
+ TestSeedProviderModule.class,
+ BlogModule.class,
+ BriarClientModule.class,
+ ClientModule.class,
+ ContactModule.class,
+ CryptoModule.class,
+ DataModule.class,
+ DatabaseModule.class,
+ EventModule.class,
+ ForumModule.class,
+ GroupInvitationModule.class,
+ IdentityModule.class,
+ IntroductionModule.class,
+ LifecycleModule.class,
+ MessagingModule.class,
+ PrivateGroupModule.class,
+ PropertiesModule.class,
+ SharingModule.class,
+ SyncModule.class,
+ SystemModule.class,
+ TransportModule.class
+})
+interface IntroductionIntegrationTestComponent
+ extends BriarIntegrationTestComponent {
+
+ void inject(IntroductionIntegrationTest init);
+
+ MessageSender getMessageSender();
+
+}
diff --git a/briar-android/.gitignore b/briar-android/.gitignore
index f30761ae8..2efc20c36 100644
--- a/briar-android/.gitignore
+++ b/briar-android/.gitignore
@@ -3,5 +3,4 @@ gen
build
local.properties
.settings
-assets/geoip.zip
-assets/tor-*.zip
+src/main/assets/*.zip
diff --git a/briar-android/build.gradle b/briar-android/build.gradle
index 113bb63df..48ee85bf1 100644
--- a/briar-android/build.gradle
+++ b/briar-android/build.gradle
@@ -1,15 +1,11 @@
-import de.undercouch.gradle.tasks.download.Download
-import de.undercouch.gradle.tasks.download.Verify
-
apply plugin: 'com.android.application'
apply plugin: 'witness'
apply plugin: 'com.neenbedankt.android-apt'
-apply plugin: 'de.undercouch.download'
dependencies {
def supportVersion = '23.2.1'
- compile project(':briar-api')
compile project(':briar-core')
+ compile project(':bramble-android')
compile fileTree(dir: 'libs', include: '*.jar')
compile "com.android.support:support-v4:$supportVersion"
@@ -63,6 +59,7 @@ dependencyVerification {
'com.android.support:animated-vector-drawable:06d1963b85aa917099d7757e6a7b3e4dc06889413dc747f625ae8683606db3a1',
'com.android.support:support-vector-drawable:799bafe4c3de812386f0b291f744d5d6876452722dd40189b9ab87dbbf594ea1',
'com.android.support:recyclerview-v7:44040a888e23e0c93162a3377cfe06751080e3c22d369ab0d4301ef60d63b0fe',
+ 'com.android.support:preference-v7:775101bd07bd052e455761c5c5d9523d7ad59f2f320e3e8cbde241fd6b1d6025',
'com.android.support:cardview-v7:4595f1c4a28cfa083b6c0920ad4d49e1c2ca4b8302a955e548f68eb63b74931b',
'com.jpardogo.materialtabstrip:library:24d19232b319f8c73e25793432357919a7ed972186f57a3b2c9093ea74ad8311',
'com.github.bumptech.glide:glide:76ef123957b5fbaebb05fcbe6606dd58c3bc3fcdadb257f99811d0ac9ea9b88b',
@@ -75,32 +72,9 @@ android {
buildToolsVersion "23.0.3"
defaultConfig {
- resValue "string", "app_package", "org.briarproject"
- }
-
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- }
-
- androidTest.setRoot('androidTest')
- androidTest {
- java.srcDirs = ['androidTest/java']
- }
-
- test.setRoot('test')
- test {
- java.srcDirs = ['test/java']
- testOptions {
- unitTests.returnDefaultValues = true
- }
- }
+ minSdkVersion 14
+ targetSdkVersion 22
+ resValue "string", "app_package", "org.briarproject.briar"
}
buildTypes {
@@ -126,75 +100,3 @@ android {
warning 'ImpliedQuantity'
}
}
-
-task downloadTorGeoIp(type: Download) {
- src 'https://briarproject.org/build/geoip-2015-12-01.zip'
- dest 'assets/geoip.zip'
- onlyIfNewer true
-}
-
-task downloadTorBinaryArm(type: Download) {
- src 'https://briarproject.org/build/tor-0.2.7.6-arm.zip'
- dest 'assets/tor-arm.zip'
- onlyIfNewer true
-}
-
-task downloadTorBinaryArmPie(type: Download) {
- src 'https://briarproject.org/build/tor-0.2.7.6-arm-pie.zip'
- dest 'assets/tor-arm-pie.zip'
- onlyIfNewer true
-}
-
-task downloadTorBinaryX86(type: Download) {
- src 'https://briarproject.org/build/tor-0.2.7.6-x86.zip'
- dest 'assets/tor-x86.zip'
- onlyIfNewer true
-}
-
-task downloadTorBinaryX86Pie(type: Download) {
- src 'https://briarproject.org/build/tor-0.2.7.6-x86-pie.zip'
- dest 'assets/tor-x86-pie.zip'
- onlyIfNewer true
-}
-
-task verifyTorGeoIp(type: Verify, dependsOn: 'downloadTorGeoIp') {
- src 'assets/geoip.zip'
- algorithm 'SHA-256'
- checksum '9bcdaf0a7ba0933735328d8ec466c25c25dbb459efc2bce9e55c774eabea5162'
-}
-
-task verifyTorBinaryArm(type: Verify, dependsOn: 'downloadTorBinaryArm') {
- src 'assets/tor-arm.zip'
- algorithm 'SHA-256'
- checksum '83272962eda701cd5d74d2418651c4ff0f0b1dff51f558a292d1a1c42bf12146'
-}
-
-task verifyTorBinaryArmPie(type: Verify, dependsOn: 'downloadTorBinaryArmPie') {
- src 'assets/tor-arm-pie.zip'
- algorithm 'SHA-256'
- checksum 'd0300d1e45de11ebb24ed62b9c492be9c2e88590b7822195ab38c7a76ffcf646'
-}
-
-task verifyTorBinaryX86(type: Verify, dependsOn: 'downloadTorBinaryX86') {
- src 'assets/tor-x86.zip'
- algorithm 'SHA-256'
- checksum 'b8813d97b01ee1b9c9a4233c1b9bbe9f9f6b494ae6f9cbd84de8a3911911615e'
-}
-
-task verifyTorBinaryX86Pie(type: Verify, dependsOn: 'downloadTorBinaryX86Pie') {
- src 'assets/tor-x86-pie.zip'
- algorithm 'SHA-256'
- checksum '9c66e765aa196dc089951a1b2140cc8290305c2fcbf365121f99e01a233baf4e'
-}
-
-project.afterEvaluate {
- preBuild.dependsOn {
- [
- 'verifyTorGeoIp',
- 'verifyTorBinaryArm',
- 'verifyTorBinaryArmPie',
- 'verifyTorBinaryX86',
- 'verifyTorBinaryX86Pie'
- ]
- }
-}
diff --git a/briar-android/proguard-rules.txt b/briar-android/proguard-rules.txt
index feac1c8ba..88fb5b29b 100644
--- a/briar-android/proguard-rules.txt
+++ b/briar-android/proguard-rules.txt
@@ -1,67 +1,31 @@
--dontusemixedcaseclassnames
--dontskipnonpubliclibraryclasses
--dontpreverify
+# Android defaults and rules from ../bramble-android/proguard-rules.txt are also applied
+
-dontobfuscate
--verbose
--useuniqueclassmembernames
-#-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-# For comfortability in case we do obfuscate
-# -renamesourcefileattribute SourceFile
-keepattributes SourceFile, LineNumberTable, *Annotation*, Signature, InnerClasses, EnclosingMethod
--keep public class * extends android.app.Activity
--keep public class * extends android.app.Application
--keep public class * extends android.app.Service
--keep public class * extends android.content.BroadcastReceiver
--keep public class * extends android.content.ContentProvider
--keepclasseswithmembers class * { native ; }
--keepclasseswithmembers class * {
- public (android.content.Context, android.util.AttributeSet);
-}
--keepclasseswithmembers class * {
- public (android.content.Context, android.util.AttributeSet, int);
-}
--keepclassmembers class * implements android.os.Parcelable { static android.os.Parcelable$Creator *; }
--keepclassmembers class **.R$* { public static ; }
--keepclasseswithmembernames class * { native ; }
--keepclassmembers enum * {
- public static **[] values();
- public static ** valueOf(java.lang.String);
-}
--keepclassmembers class * extends android.app.Activity {
- public void *(android.view.View);
-}
-
--keep class org.h2.** { *; }
--keep class org.briarproject.** { *; }
--keep class javax.inject.** { *; }
--keep class dagger.** { *; }
+# QR codes
-keep class com.google.zxing.Result
--dontwarn org.h2.**
--dontnote org.h2.**
--dontwarn net.sf.cglib.**
--dontwarn org.briarproject.plugins.tcp.**
--dontnote org.briarproject.crypto.**
--dontnote org.spongycastle.crypto.parsers.ECIESPublicKeyParser
--dontwarn net.sourceforge.jsocks.**
--dontnote android.support.**
--dontnote dagger.**
--dontwarn dagger.**
--dontnote com.google.common.**
--dontwarn com.google.common.**
-
# RSS libraries
--keep class com.rometools.rome.feed.synd.impl.** { *;}
--keep class com.rometools.rome.io.impl.** { *;}
--keep class org.jsoup.safety.Whitelist
--dontnote com.rometools.rome.**
+-keep,includedescriptorclasses class com.rometools.rome.feed.synd.impl.** { *; }
+-keep,includedescriptorclasses class com.rometools.rome.io.impl.** { *; }
-dontwarn javax.xml.stream.**
-dontwarn org.jaxen.**
-dontwarn java.nio.**
--dontwarn org.codehaus.mojo.animal_sniffer.**
+-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn org.slf4j.impl.**
+# OkHttp does some shenanigans with Android's SSL classes
+-dontnote com.android.org.conscrypt.SSLParametersImpl
+-dontnote org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
+-dontnote sun.security.ssl.SSLContextImpl
+
+# HTML sanitiser
+-keep class org.jsoup.safety.Whitelist
+
+# KeyboardAwareLinearLayout uses reflection on android.View
+-dontnote org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout
+
# Emoji
-keep class org.thoughtcrime.securesms.**
-keep class com.astuetz.PagerSlidingTabStrip$OnTabReselectedListener
diff --git a/briar-android/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml
similarity index 76%
rename from briar-android/AndroidManifest.xml
rename to briar-android/src/main/AndroidManifest.xml
index 16189e375..dec1fbc3a 100644
--- a/briar-android/AndroidManifest.xml
+++ b/briar-android/src/main/AndroidManifest.xml
@@ -1,16 +1,12 @@
+ android:versionCode="13"
+ android:versionName="0.13">
-
+
@@ -39,12 +35,12 @@
android:name=".android.BriarService"
android:exported="false">
-
+
@@ -83,7 +79,7 @@
@@ -92,43 +88,43 @@
android:name=".android.contact.ConversationActivity"
android:label="@string/app_name"
android:theme="@style/BriarThemeNoActionBar.Default"
- android:parentActivityName=".android.NavDrawerActivity"
+ android:parentActivityName=".android.navdrawer.NavDrawerActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
+ android:parentActivityName=".android.navdrawer.NavDrawerActivity">
+ android:value=".android.navdrawer.NavDrawerActivity"/>
+ android:parentActivityName=".android.navdrawer.NavDrawerActivity">
@@ -186,22 +182,22 @@
@@ -219,11 +215,11 @@
@@ -240,72 +236,72 @@
+ android:parentActivityName=".android.blog.BlogActivity">
+ android:name=".android.blog.BlogActivity"
+ android:parentActivityName=".android.navdrawer.NavDrawerActivity">
+ android:parentActivityName=".android.navdrawer.NavDrawerActivity">
+ android:parentActivityName=".android.navdrawer.NavDrawerActivity">
@@ -313,10 +309,10 @@
android:name=".android.keyagreement.KeyAgreementActivity"
android:label="@string/add_contact_title"
android:theme="@style/BriarThemeNoActionBar.Default"
- android:parentActivityName=".android.NavDrawerActivity">
+ android:parentActivityName=".android.navdrawer.NavDrawerActivity">
+ android:value=".android.navdrawer.NavDrawerActivity"/>
+ android:parentActivityName=".android.navdrawer.NavDrawerActivity">
@@ -350,12 +346,12 @@
+ android:parentActivityName=".android.settings.SettingsActivity">
diff --git a/briar-android/assets/emoji_activity.png b/briar-android/src/main/assets/emoji_activity.png
similarity index 100%
rename from briar-android/assets/emoji_activity.png
rename to briar-android/src/main/assets/emoji_activity.png
diff --git a/briar-android/assets/emoji_animals_nature.png b/briar-android/src/main/assets/emoji_animals_nature.png
similarity index 100%
rename from briar-android/assets/emoji_animals_nature.png
rename to briar-android/src/main/assets/emoji_animals_nature.png
diff --git a/briar-android/assets/emoji_flags.png b/briar-android/src/main/assets/emoji_flags.png
similarity index 100%
rename from briar-android/assets/emoji_flags.png
rename to briar-android/src/main/assets/emoji_flags.png
diff --git a/briar-android/assets/emoji_food_drink.png b/briar-android/src/main/assets/emoji_food_drink.png
similarity index 100%
rename from briar-android/assets/emoji_food_drink.png
rename to briar-android/src/main/assets/emoji_food_drink.png
diff --git a/briar-android/assets/emoji_objects.png b/briar-android/src/main/assets/emoji_objects.png
similarity index 100%
rename from briar-android/assets/emoji_objects.png
rename to briar-android/src/main/assets/emoji_objects.png
diff --git a/briar-android/assets/emoji_smiley_people.png b/briar-android/src/main/assets/emoji_smiley_people.png
similarity index 100%
rename from briar-android/assets/emoji_smiley_people.png
rename to briar-android/src/main/assets/emoji_smiley_people.png
diff --git a/briar-android/assets/emoji_symbols.png b/briar-android/src/main/assets/emoji_symbols.png
similarity index 100%
rename from briar-android/assets/emoji_symbols.png
rename to briar-android/src/main/assets/emoji_symbols.png
diff --git a/briar-android/assets/emoji_travel_places.png b/briar-android/src/main/assets/emoji_travel_places.png
similarity index 100%
rename from briar-android/assets/emoji_travel_places.png
rename to briar-android/src/main/assets/emoji_travel_places.png
diff --git a/briar-android/src/im/delight/android/identicons/Identicon.java b/briar-android/src/main/java/im/delight/android/identicons/Identicon.java
similarity index 100%
rename from briar-android/src/im/delight/android/identicons/Identicon.java
rename to briar-android/src/main/java/im/delight/android/identicons/Identicon.java
diff --git a/briar-android/src/im/delight/android/identicons/IdenticonDrawable.java b/briar-android/src/main/java/im/delight/android/identicons/IdenticonDrawable.java
similarity index 100%
rename from briar-android/src/im/delight/android/identicons/IdenticonDrawable.java
rename to briar-android/src/main/java/im/delight/android/identicons/IdenticonDrawable.java
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
new file mode 100644
index 000000000..e038fb7fd
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
@@ -0,0 +1,147 @@
+package org.briarproject.briar.android;
+
+import org.briarproject.bramble.BrambleAndroidModule;
+import org.briarproject.bramble.BrambleCoreEagerSingletons;
+import org.briarproject.bramble.BrambleCoreModule;
+import org.briarproject.bramble.api.contact.ContactExchangeTask;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.invitation.InvitationTaskFactory;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementTaskFactory;
+import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
+import org.briarproject.bramble.api.keyagreement.PayloadParser;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.plugin.ConnectionRegistry;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.settings.SettingsManager;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.briar.BriarCoreEagerSingletons;
+import org.briarproject.briar.BriarCoreModule;
+import org.briarproject.briar.android.reporting.BriarReportSender;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.android.ReferenceManager;
+import org.briarproject.briar.api.blog.BlogManager;
+import org.briarproject.briar.api.blog.BlogPostFactory;
+import org.briarproject.briar.api.blog.BlogSharingManager;
+import org.briarproject.briar.api.feed.FeedManager;
+import org.briarproject.briar.api.forum.ForumManager;
+import org.briarproject.briar.api.forum.ForumSharingManager;
+import org.briarproject.briar.api.introduction.IntroductionManager;
+import org.briarproject.briar.api.messaging.ConversationManager;
+import org.briarproject.briar.api.messaging.MessagingManager;
+import org.briarproject.briar.api.messaging.PrivateMessageFactory;
+import org.briarproject.briar.api.privategroup.GroupMessageFactory;
+import org.briarproject.briar.api.privategroup.PrivateGroupFactory;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
+
+import java.util.concurrent.Executor;
+
+import javax.inject.Singleton;
+
+import dagger.Component;
+
+@Singleton
+@Component(modules = {
+ BrambleCoreModule.class,
+ BriarCoreModule.class,
+ BrambleAndroidModule.class,
+ AppModule.class
+})
+public interface AndroidComponent
+ extends BrambleCoreEagerSingletons, BriarCoreEagerSingletons {
+
+ // Exposed objects
+ @CryptoExecutor
+ Executor cryptoExecutor();
+
+ PasswordStrengthEstimator passwordStrengthIndicator();
+
+ CryptoComponent cryptoComponent();
+
+ DatabaseConfig databaseConfig();
+
+ ReferenceManager referenceMangager();
+
+ @DatabaseExecutor
+ Executor databaseExecutor();
+
+ LifecycleManager lifecycleManager();
+
+ IdentityManager identityManager();
+
+ PluginManager pluginManager();
+
+ EventBus eventBus();
+
+ InvitationTaskFactory invitationTaskFactory();
+
+ AndroidNotificationManager androidNotificationManager();
+
+ ConnectionRegistry connectionRegistry();
+
+ ContactManager contactManager();
+
+ ConversationManager conversationManager();
+
+ MessagingManager messagingManager();
+
+ PrivateMessageFactory privateMessageFactory();
+
+ PrivateGroupManager privateGroupManager();
+
+ GroupInvitationFactory groupInvitationFactory();
+
+ GroupInvitationManager groupInvitationManager();
+
+ PrivateGroupFactory privateGroupFactory();
+
+ GroupMessageFactory groupMessageFactory();
+
+ ForumManager forumManager();
+
+ ForumSharingManager forumSharingManager();
+
+ BlogSharingManager blogSharingManager();
+
+ BlogManager blogManager();
+
+ BlogPostFactory blogPostFactory();
+
+ SettingsManager settingsManager();
+
+ ContactExchangeTask contactExchangeTask();
+
+ KeyAgreementTaskFactory keyAgreementTaskFactory();
+
+ PayloadEncoder payloadEncoder();
+
+ PayloadParser payloadParser();
+
+ IntroductionManager introductionManager();
+
+ AndroidExecutor androidExecutor();
+
+ FeedManager feedManager();
+
+ Clock clock();
+
+ @IoExecutor
+ Executor ioExecutor();
+
+ void inject(BriarService activity);
+
+ void inject(BriarReportSender briarReportSender);
+
+ // Eager singleton load
+ void inject(AppModule.EagerSingletons init);
+}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidEagerSingletons.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidEagerSingletons.java
new file mode 100644
index 000000000..00a2c7077
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidEagerSingletons.java
@@ -0,0 +1,8 @@
+package org.briarproject.briar.android;
+
+class AndroidEagerSingletons {
+
+ static void initEagerSingletons(AndroidComponent c) {
+ c.inject(new AppModule.EagerSingletons());
+ }
+}
diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java
similarity index 90%
rename from briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java
index 2e01bdcab..3f1dc6d09 100644
--- a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android;
import android.app.Application;
import android.app.NotificationManager;
@@ -13,33 +13,36 @@ import android.support.annotation.UiThread;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
-import org.briarproject.R;
-import org.briarproject.android.api.AndroidExecutor;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.contact.ConversationActivity;
-import org.briarproject.android.forum.ForumActivity;
-import org.briarproject.android.privategroup.conversation.GroupActivity;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.BlogPostAddedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.ForumPostReceivedEvent;
-import org.briarproject.api.event.GroupMessageAddedEvent;
-import org.briarproject.api.event.IntroductionRequestReceivedEvent;
-import org.briarproject.api.event.IntroductionResponseReceivedEvent;
-import org.briarproject.api.event.IntroductionSucceededEvent;
-import org.briarproject.api.event.InvitationRequestReceivedEvent;
-import org.briarproject.api.event.InvitationResponseReceivedEvent;
-import org.briarproject.api.event.PrivateMessageReceivedEvent;
-import org.briarproject.api.event.SettingsUpdatedEvent;
-import org.briarproject.api.lifecycle.Service;
-import org.briarproject.api.lifecycle.ServiceException;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.settings.SettingsManager;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.Service;
+import org.briarproject.bramble.api.lifecycle.ServiceException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.settings.SettingsManager;
+import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.ConversationActivity;
+import org.briarproject.briar.android.forum.ForumActivity;
+import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
+import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.blog.event.BlogPostAddedEvent;
+import org.briarproject.briar.api.forum.event.ForumPostReceivedEvent;
+import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent;
+import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent;
+import org.briarproject.briar.api.introduction.event.IntroductionSucceededEvent;
+import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent;
+import org.briarproject.briar.api.privategroup.event.GroupMessageAddedEvent;
+import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent;
+import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent;
import java.util.HashMap;
import java.util.Map;
@@ -50,6 +53,7 @@ import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger;
+import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
import static android.app.Notification.DEFAULT_LIGHTS;
@@ -62,16 +66,19 @@ import static android.support.v4.app.NotificationCompat.CATEGORY_MESSAGE;
import static android.support.v4.app.NotificationCompat.CATEGORY_SOCIAL;
import static android.support.v4.app.NotificationCompat.VISIBILITY_SECRET;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.android.NavDrawerActivity.INTENT_BLOGS;
-import static org.briarproject.android.NavDrawerActivity.INTENT_CONTACTS;
-import static org.briarproject.android.NavDrawerActivity.INTENT_FORUMS;
-import static org.briarproject.android.NavDrawerActivity.INTENT_GROUPS;
-import static org.briarproject.android.contact.ConversationActivity.CONTACT_ID;
-import static org.briarproject.android.fragment.SettingsFragment.PREF_NOTIFY_BLOG;
-import static org.briarproject.android.fragment.SettingsFragment.PREF_NOTIFY_GROUP;
-import static org.briarproject.android.fragment.SettingsFragment.SETTINGS_NAMESPACE;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.contact.ConversationActivity.CONTACT_ID;
+import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_BLOGS;
+import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_CONTACTS;
+import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_FORUMS;
+import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_GROUPS;
+import static org.briarproject.briar.android.settings.SettingsFragment.PREF_NOTIFY_BLOG;
+import static org.briarproject.briar.android.settings.SettingsFragment.PREF_NOTIFY_GROUP;
+import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
+@ThreadSafe
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class AndroidNotificationManagerImpl implements AndroidNotificationManager,
Service, EventListener {
diff --git a/briar-android/src/org/briarproject/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
similarity index 67%
rename from briar-android/src/org/briarproject/android/AppModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
index f0f1954e4..667b4ee29 100644
--- a/briar-android/src/org/briarproject/android/AppModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
@@ -1,22 +1,26 @@
-package org.briarproject.android;
+package org.briarproject.briar.android;
import android.app.Application;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.api.ReferenceManager;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.PublicKey;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.reporting.DevConfig;
-import org.briarproject.api.ui.UiCallback;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.PublicKey;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.reporting.DevConfig;
+import org.briarproject.bramble.api.ui.UiCallback;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.android.ReferenceManager;
import java.io.File;
import java.security.GeneralSecurityException;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -24,8 +28,8 @@ import dagger.Module;
import dagger.Provides;
import static android.content.Context.MODE_PRIVATE;
-import static org.briarproject.api.reporting.ReportingConstants.DEV_ONION_ADDRESS;
-import static org.briarproject.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX;
+import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_ONION_ADDRESS;
+import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX;
@Module
public class AppModule {
@@ -74,9 +78,11 @@ public class AppModule {
@Singleton
DatabaseConfig provideDatabaseConfig(Application app) {
final File dir = app.getApplicationContext().getDir("db", MODE_PRIVATE);
- return new DatabaseConfig() {
+ @MethodsNotNullByDefault
+ @ParametersNotNullByDefault
+ DatabaseConfig databaseConfig = new DatabaseConfig() {
- private volatile SecretKey key = null;
+ private volatile SecretKey key;
private volatile String nickname;
@Override
@@ -102,11 +108,13 @@ public class AppModule {
}
@Override
+ @Nullable
public String getLocalAuthorName() {
return nickname;
}
@Override
+ @Nullable
public SecretKey getEncryptionKey() {
return key;
}
@@ -116,12 +124,14 @@ public class AppModule {
return Long.MAX_VALUE;
}
};
+ return databaseConfig;
}
@Provides
@Singleton
DevConfig provideDevConfig(final CryptoComponent crypto) {
- return new DevConfig() {
+ @NotNullByDefault
+ DevConfig devConfig = new DevConfig() {
@Override
public PublicKey getDevPublicKey() {
@@ -138,6 +148,7 @@ public class AppModule {
return DEV_ONION_ADDRESS;
}
};
+ return devConfig;
}
@Provides
diff --git a/briar-android/src/org/briarproject/android/BriarApplication.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java
similarity index 84%
rename from briar-android/src/org/briarproject/android/BriarApplication.java
rename to briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java
index cd28990ad..bf78cecfa 100644
--- a/briar-android/src/org/briarproject/android/BriarApplication.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android;
/**
* This exists so that the Application object will not necessarily be cast
diff --git a/briar-android/src/org/briarproject/android/BriarApplicationImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/BriarApplicationImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java
index c78ff2dfc..07f3f6c4b 100644
--- a/briar-android/src/org/briarproject/android/BriarApplicationImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android;
import android.app.Application;
import android.content.Context;
@@ -6,11 +6,12 @@ import android.content.Context;
import org.acra.ACRA;
import org.acra.ReportingInteractionMode;
import org.acra.annotation.ReportsCrashes;
-import org.briarproject.CoreModule;
-import org.briarproject.R;
-import org.briarproject.android.report.BriarReportPrimer;
-import org.briarproject.android.report.BriarReportSenderFactory;
-import org.briarproject.android.report.DevReportActivity;
+import org.briarproject.bramble.BrambleCoreModule;
+import org.briarproject.briar.BriarCoreModule;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.reporting.BriarReportPrimer;
+import org.briarproject.briar.android.reporting.BriarReportSenderFactory;
+import org.briarproject.briar.android.reporting.DevReportActivity;
import java.util.logging.Logger;
@@ -79,7 +80,8 @@ public class BriarApplicationImpl extends Application
// We need to load the eager singletons directly after making the
// dependency graphs
- CoreModule.initEagerSingletons(applicationComponent);
+ BrambleCoreModule.initEagerSingletons(applicationComponent);
+ BriarCoreModule.initEagerSingletons(applicationComponent);
AndroidEagerSingletons.initEagerSingletons(applicationComponent);
}
diff --git a/briar-android/src/org/briarproject/android/BriarService.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java
similarity index 91%
rename from briar-android/src/org/briarproject/android/BriarService.java
rename to briar-android/src/main/java/org/briarproject/briar/android/BriarService.java
index 4707a41a1..f7eabd508 100644
--- a/briar-android/src/org/briarproject/android/BriarService.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android;
import android.app.NotificationManager;
import android.app.PendingIntent;
@@ -11,11 +11,12 @@ import android.os.Build;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
-import org.briarproject.R;
-import org.briarproject.android.api.AndroidExecutor;
-import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.lifecycle.LifecycleManager.StartResult;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -31,8 +32,8 @@ import static android.support.v4.app.NotificationCompat.CATEGORY_SERVICE;
import static android.support.v4.app.NotificationCompat.PRIORITY_MIN;
import static android.support.v4.app.NotificationCompat.VISIBILITY_SECRET;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING;
-import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.SUCCESS;
+import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING;
+import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.SUCCESS;
public class BriarService extends Service {
diff --git a/briar-android/src/org/briarproject/android/DestroyableContext.java b/briar-android/src/main/java/org/briarproject/briar/android/DestroyableContext.java
similarity index 70%
rename from briar-android/src/org/briarproject/android/DestroyableContext.java
rename to briar-android/src/main/java/org/briarproject/briar/android/DestroyableContext.java
index 75faa0d10..26d928143 100644
--- a/briar-android/src/org/briarproject/android/DestroyableContext.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/DestroyableContext.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android;
public interface DestroyableContext {
diff --git a/briar-android/src/org/briarproject/android/ReferenceManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/ReferenceManagerImpl.java
similarity index 88%
rename from briar-android/src/org/briarproject/android/ReferenceManagerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/ReferenceManagerImpl.java
index d5959a622..99fa82498 100644
--- a/briar-android/src/org/briarproject/android/ReferenceManagerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/ReferenceManagerImpl.java
@@ -1,6 +1,6 @@
-package org.briarproject.android;
+package org.briarproject.briar.android;
-import static java.util.logging.Level.INFO;
+import org.briarproject.briar.api.android.ReferenceManager;
import java.util.HashMap;
import java.util.Map;
@@ -8,7 +8,7 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
-import org.briarproject.android.api.ReferenceManager;
+import static java.util.logging.Level.INFO;
class ReferenceManagerImpl implements ReferenceManager {
@@ -18,10 +18,10 @@ class ReferenceManagerImpl implements ReferenceManager {
private final Lock lock = new ReentrantLock();
// The following are locking: lock
- private final Map, Map> outerMap =
- new HashMap, Map>();
+ private final Map, Map> outerMap = new HashMap<>();
private long nextHandle = 0;
+ @Override
public T getReference(long handle, Class c) {
lock.lock();
try {
@@ -41,12 +41,13 @@ class ReferenceManagerImpl implements ReferenceManager {
}
+ @Override
public long putReference(T reference, Class c) {
lock.lock();
try {
Map innerMap = outerMap.get(c);
if (innerMap == null) {
- innerMap = new HashMap();
+ innerMap = new HashMap<>();
outerMap.put(c, innerMap);
}
long handle = nextHandle++;
@@ -61,6 +62,7 @@ class ReferenceManagerImpl implements ReferenceManager {
}
}
+ @Override
public T removeReference(long handle, Class c) {
lock.lock();
try {
diff --git a/briar-android/src/org/briarproject/android/StartupFailureActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java
similarity index 80%
rename from briar-android/src/org/briarproject/android/StartupFailureActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java
index b25836939..51ee125d5 100644
--- a/briar-android/src/org/briarproject/android/StartupFailureActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java
@@ -1,13 +1,15 @@
-package org.briarproject.android;
+package org.briarproject.briar.android;
import android.app.NotificationManager;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
-import org.briarproject.R;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BaseActivity;
-import static org.briarproject.api.lifecycle.LifecycleManager.StartResult;
+import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult;
public class StartupFailureActivity extends BaseActivity {
diff --git a/briar-android/src/org/briarproject/android/TestingConstants.java b/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/TestingConstants.java
rename to briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java
index 26ae94852..5739b5e76 100644
--- a/briar-android/src/org/briarproject/android/TestingConstants.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android;
import java.util.logging.Level;
@@ -22,5 +22,5 @@ public interface TestingConstants {
* Unfortunately this also prevents the user from taking screenshots
* intentionally.
*/
- boolean PREVENT_SCREENSHOTS = TESTING ? false : true;
+ boolean PREVENT_SCREENSHOTS = !TESTING;
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java
new file mode 100644
index 000000000..432cd8794
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java
@@ -0,0 +1,191 @@
+package org.briarproject.briar.android.activity;
+
+import android.app.Activity;
+
+import org.briarproject.briar.android.AndroidComponent;
+import org.briarproject.briar.android.blog.BlogActivity;
+import org.briarproject.briar.android.blog.BlogFragment;
+import org.briarproject.briar.android.blog.BlogModule;
+import org.briarproject.briar.android.blog.BlogPostFragment;
+import org.briarproject.briar.android.blog.FeedFragment;
+import org.briarproject.briar.android.blog.FeedPostFragment;
+import org.briarproject.briar.android.blog.ReblogActivity;
+import org.briarproject.briar.android.blog.ReblogFragment;
+import org.briarproject.briar.android.blog.RssFeedImportActivity;
+import org.briarproject.briar.android.blog.RssFeedManageActivity;
+import org.briarproject.briar.android.blog.WriteBlogPostActivity;
+import org.briarproject.briar.android.contact.ContactListFragment;
+import org.briarproject.briar.android.contact.ContactModule;
+import org.briarproject.briar.android.contact.ConversationActivity;
+import org.briarproject.briar.android.forum.CreateForumActivity;
+import org.briarproject.briar.android.forum.ForumActivity;
+import org.briarproject.briar.android.forum.ForumListFragment;
+import org.briarproject.briar.android.forum.ForumModule;
+import org.briarproject.briar.android.introduction.ContactChooserFragment;
+import org.briarproject.briar.android.introduction.IntroductionActivity;
+import org.briarproject.briar.android.introduction.IntroductionMessageFragment;
+import org.briarproject.briar.android.invitation.AddContactActivity;
+import org.briarproject.briar.android.keyagreement.IntroFragment;
+import org.briarproject.briar.android.keyagreement.KeyAgreementActivity;
+import org.briarproject.briar.android.keyagreement.ShowQrCodeFragment;
+import org.briarproject.briar.android.login.ChangePasswordActivity;
+import org.briarproject.briar.android.login.PasswordActivity;
+import org.briarproject.briar.android.login.SetupActivity;
+import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
+import org.briarproject.briar.android.panic.PanicPreferencesActivity;
+import org.briarproject.briar.android.panic.PanicResponderActivity;
+import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
+import org.briarproject.briar.android.privategroup.conversation.GroupConversationModule;
+import org.briarproject.briar.android.privategroup.creation.CreateGroupActivity;
+import org.briarproject.briar.android.privategroup.creation.CreateGroupFragment;
+import org.briarproject.briar.android.privategroup.creation.CreateGroupMessageFragment;
+import org.briarproject.briar.android.privategroup.creation.GroupCreateModule;
+import org.briarproject.briar.android.privategroup.creation.GroupInviteActivity;
+import org.briarproject.briar.android.privategroup.creation.GroupInviteFragment;
+import org.briarproject.briar.android.privategroup.invitation.GroupInvitationActivity;
+import org.briarproject.briar.android.privategroup.invitation.GroupInvitationModule;
+import org.briarproject.briar.android.privategroup.list.GroupListFragment;
+import org.briarproject.briar.android.privategroup.list.GroupListModule;
+import org.briarproject.briar.android.privategroup.memberlist.GroupMemberListActivity;
+import org.briarproject.briar.android.privategroup.memberlist.GroupMemberModule;
+import org.briarproject.briar.android.privategroup.reveal.GroupRevealModule;
+import org.briarproject.briar.android.privategroup.reveal.RevealContactsActivity;
+import org.briarproject.briar.android.privategroup.reveal.RevealContactsFragment;
+import org.briarproject.briar.android.settings.SettingsActivity;
+import org.briarproject.briar.android.sharing.BlogInvitationActivity;
+import org.briarproject.briar.android.sharing.BlogSharingStatusActivity;
+import org.briarproject.briar.android.sharing.ForumInvitationActivity;
+import org.briarproject.briar.android.sharing.ForumSharingStatusActivity;
+import org.briarproject.briar.android.sharing.ShareBlogActivity;
+import org.briarproject.briar.android.sharing.ShareBlogFragment;
+import org.briarproject.briar.android.sharing.ShareBlogMessageFragment;
+import org.briarproject.briar.android.sharing.ShareForumActivity;
+import org.briarproject.briar.android.sharing.ShareForumFragment;
+import org.briarproject.briar.android.sharing.ShareForumMessageFragment;
+import org.briarproject.briar.android.sharing.SharingModule;
+import org.briarproject.briar.android.splash.SplashScreenActivity;
+import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
+import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel;
+
+import dagger.Component;
+
+@ActivityScope
+@Component(
+ modules = {ActivityModule.class, ForumModule.class, SharingModule.class,
+ BlogModule.class, ContactModule.class, GroupListModule.class,
+ GroupCreateModule.class, GroupInvitationModule.class,
+ GroupConversationModule.class, GroupMemberModule.class,
+ GroupRevealModule.class},
+ dependencies = AndroidComponent.class)
+public interface ActivityComponent {
+
+ Activity activity();
+
+ void inject(SplashScreenActivity activity);
+
+ void inject(SetupActivity activity);
+
+ void inject(NavDrawerActivity activity);
+
+ void inject(PasswordActivity activity);
+
+ void inject(PanicResponderActivity activity);
+
+ void inject(PanicPreferencesActivity activity);
+
+ void inject(AddContactActivity activity);
+
+ void inject(KeyAgreementActivity activity);
+
+ void inject(ConversationActivity activity);
+
+ void inject(ForumInvitationActivity activity);
+
+ void inject(BlogInvitationActivity activity);
+
+ void inject(CreateGroupActivity activity);
+
+ void inject(GroupActivity activity);
+
+ void inject(GroupInviteActivity activity);
+
+ void inject(GroupInvitationActivity activity);
+
+ void inject(GroupMemberListActivity activity);
+
+ void inject(RevealContactsActivity activity);
+
+ void inject(CreateForumActivity activity);
+
+ void inject(ShareForumActivity activity);
+
+ void inject(ShareBlogActivity activity);
+
+ void inject(ForumSharingStatusActivity activity);
+
+ void inject(BlogSharingStatusActivity activity);
+
+ void inject(ForumActivity activity);
+
+ void inject(BlogActivity activity);
+
+ void inject(WriteBlogPostActivity activity);
+
+ void inject(BlogFragment fragment);
+
+ void inject(BlogPostFragment fragment);
+
+ void inject(FeedPostFragment fragment);
+
+ void inject(ReblogFragment fragment);
+
+ void inject(ReblogActivity activity);
+
+ void inject(SettingsActivity activity);
+
+ void inject(ChangePasswordActivity activity);
+
+ void inject(IntroductionActivity activity);
+
+ void inject(RssFeedImportActivity activity);
+
+ void inject(RssFeedManageActivity activity);
+
+ void inject(EmojiProvider emojiProvider);
+
+ void inject(RecentEmojiPageModel recentEmojiPageModel);
+
+ // Fragments
+ void inject(ContactListFragment fragment);
+
+ void inject(CreateGroupFragment fragment);
+
+ void inject(CreateGroupMessageFragment fragment);
+
+ void inject(GroupListFragment fragment);
+
+ void inject(GroupInviteFragment fragment);
+
+ void inject(RevealContactsFragment activity);
+
+ void inject(ForumListFragment fragment);
+
+ void inject(FeedFragment fragment);
+
+ void inject(IntroFragment fragment);
+
+ void inject(ShowQrCodeFragment fragment);
+
+ void inject(ContactChooserFragment fragment);
+
+ void inject(ShareForumFragment fragment);
+
+ void inject(ShareForumMessageFragment fragment);
+
+ void inject(ShareBlogFragment fragment);
+
+ void inject(ShareBlogMessageFragment fragment);
+
+ void inject(IntroductionMessageFragment fragment);
+
+}
diff --git a/briar-android/src/org/briarproject/android/ActivityModule.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityModule.java
similarity index 65%
rename from briar-android/src/org/briarproject/android/ActivityModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityModule.java
index 0402ef56f..2a00be5cc 100644
--- a/briar-android/src/org/briarproject/android/ActivityModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityModule.java
@@ -1,26 +1,26 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.activity;
import android.app.Activity;
import android.content.SharedPreferences;
-import org.briarproject.android.controller.BriarController;
-import org.briarproject.android.controller.BriarControllerImpl;
-import org.briarproject.android.controller.ConfigController;
-import org.briarproject.android.controller.ConfigControllerImpl;
-import org.briarproject.android.controller.DbController;
-import org.briarproject.android.controller.DbControllerImpl;
-import org.briarproject.android.controller.NavDrawerController;
-import org.briarproject.android.controller.NavDrawerControllerImpl;
-import org.briarproject.android.controller.PasswordController;
-import org.briarproject.android.controller.PasswordControllerImpl;
-import org.briarproject.android.controller.SetupController;
-import org.briarproject.android.controller.SetupControllerImpl;
+import org.briarproject.briar.android.controller.BriarController;
+import org.briarproject.briar.android.controller.BriarControllerImpl;
+import org.briarproject.briar.android.controller.ConfigController;
+import org.briarproject.briar.android.controller.ConfigControllerImpl;
+import org.briarproject.briar.android.controller.DbController;
+import org.briarproject.briar.android.controller.DbControllerImpl;
+import org.briarproject.briar.android.login.PasswordController;
+import org.briarproject.briar.android.login.PasswordControllerImpl;
+import org.briarproject.briar.android.login.SetupController;
+import org.briarproject.briar.android.login.SetupControllerImpl;
+import org.briarproject.briar.android.navdrawer.NavDrawerController;
+import org.briarproject.briar.android.navdrawer.NavDrawerControllerImpl;
import dagger.Module;
import dagger.Provides;
import static android.content.Context.MODE_PRIVATE;
-import static org.briarproject.android.BriarService.BriarServiceConnection;
+import static org.briarproject.briar.android.BriarService.BriarServiceConnection;
@Module
public class ActivityModule {
diff --git a/briar-android/src/org/briarproject/android/ActivityScope.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityScope.java
similarity index 79%
rename from briar-android/src/org/briarproject/android/ActivityScope.java
rename to briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityScope.java
index a6ceb30ab..c3ea7520a 100644
--- a/briar-android/src/org/briarproject/android/ActivityScope.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityScope.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.activity;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java
similarity index 85%
rename from briar-android/src/org/briarproject/android/BaseActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java
index 02395fbf1..699985ee6 100644
--- a/briar-android/src/org/briarproject/android/BaseActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java
@@ -1,21 +1,25 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.activity;
import android.os.Bundle;
import android.os.IBinder;
-import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
-import org.briarproject.android.controller.ActivityLifecycleController;
-import org.briarproject.android.forum.ForumModule;
+import org.briarproject.briar.android.AndroidComponent;
+import org.briarproject.briar.android.BriarApplication;
+import org.briarproject.briar.android.DestroyableContext;
+import org.briarproject.briar.android.controller.ActivityLifecycleController;
+import org.briarproject.briar.android.forum.ForumModule;
import java.util.ArrayList;
import java.util.List;
+import javax.annotation.Nullable;
+
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
import static android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT;
-import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
+import static org.briarproject.briar.android.TestingConstants.PREVENT_SCREENSHOTS;
public abstract class BaseActivity extends AppCompatActivity
implements DestroyableContext {
diff --git a/briar-android/src/org/briarproject/android/BriarActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/BriarActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java
index 9d162b62d..c590eaddb 100644
--- a/briar-android/src/org/briarproject/android/BriarActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java
@@ -1,13 +1,14 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.activity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Build;
-import org.briarproject.android.controller.BriarController;
-import org.briarproject.android.controller.DbController;
-import org.briarproject.android.controller.handler.UiResultHandler;
-import org.briarproject.android.panic.ExitActivity;
+import org.briarproject.briar.android.controller.BriarController;
+import org.briarproject.briar.android.controller.DbController;
+import org.briarproject.briar.android.controller.handler.UiResultHandler;
+import org.briarproject.briar.android.login.PasswordActivity;
+import org.briarproject.briar.android.panic.ExitActivity;
import java.util.logging.Logger;
diff --git a/briar-android/src/org/briarproject/android/BriarFragmentActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarFragmentActivity.java
similarity index 68%
rename from briar-android/src/org/briarproject/android/BriarFragmentActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/activity/BriarFragmentActivity.java
index 704435530..5b18421df 100644
--- a/briar-android/src/org/briarproject/android/BriarFragmentActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarFragmentActivity.java
@@ -1,16 +1,13 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.activity;
import android.support.annotation.AnimRes;
import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
-import org.briarproject.R;
-import org.briarproject.android.blogs.FeedFragment;
-import org.briarproject.android.contact.ContactListFragment;
-import org.briarproject.android.forum.ForumListFragment;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.privategroup.list.GroupListFragment;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.ContactListFragment;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
import static android.support.v4.app.FragmentManager.POP_BACK_STACK_INCLUSIVE;
@@ -20,23 +17,7 @@ import static android.support.v4.app.FragmentManager.POP_BACK_STACK_INCLUSIVE;
*/
public abstract class BriarFragmentActivity extends BriarActivity {
- private void updateToolbarTitle(String fragmentTag) {
- ActionBar actionBar = getSupportActionBar();
- if (actionBar == null)
- return;
-
- if (fragmentTag.equals(ContactListFragment.TAG)) {
- actionBar.setTitle(R.string.contact_list_button);
- } else if (fragmentTag.equals(GroupListFragment.TAG)) {
- actionBar.setTitle(R.string.groups_button);
- } else if (fragmentTag.equals(ForumListFragment.TAG)) {
- actionBar.setTitle(R.string.forums_button);
- } else if (fragmentTag.equals(FeedFragment.TAG)) {
- actionBar.setTitle(R.string.blogs_button);
- }
- }
-
- void clearBackStack() {
+ protected void clearBackStack() {
getSupportFragmentManager().popBackStackImmediate(null,
POP_BACK_STACK_INCLUSIVE);
}
@@ -60,7 +41,6 @@ public abstract class BriarFragmentActivity extends BriarActivity {
}
public void onFragmentCreated(String tag) {
- updateToolbarTitle(tag);
}
protected void startFragment(BaseFragment fragment) {
@@ -69,7 +49,7 @@ public abstract class BriarFragmentActivity extends BriarActivity {
else startFragment(fragment, true);
}
- void showMessageDialog(int titleStringId, int msgStringId) {
+ protected void showMessageDialog(int titleStringId, int msgStringId) {
// TODO replace with custom dialog fragment ?
AlertDialog.Builder builder = new AlertDialog.Builder(this,
R.style.BriarDialogTheme);
diff --git a/briar-android/src/org/briarproject/android/blogs/BaseController.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseController.java
similarity index 59%
rename from briar-android/src/org/briarproject/android/blogs/BaseController.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BaseController.java
index 6b81243ec..3d43ffce9 100644
--- a/briar-android/src/org/briarproject/android/blogs/BaseController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseController.java
@@ -1,19 +1,21 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
-import org.briarproject.android.DestroyableContext;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.blogs.BlogPostHeader;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.android.DestroyableContext;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.blog.BlogPostHeader;
import java.util.Collection;
+import javax.annotation.Nullable;
+
+@NotNullByDefault
interface BaseController {
@UiThread
diff --git a/briar-android/src/org/briarproject/android/blogs/BaseControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/blogs/BaseControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java
index 04d9e2d16..41dbf6556 100644
--- a/briar-android/src/org/briarproject/android/blogs/BaseControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java
@@ -1,25 +1,26 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.support.annotation.CallSuper;
-import android.support.annotation.Nullable;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.controller.DbControllerImpl;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.blogs.Blog;
-import org.briarproject.api.blogs.BlogCommentHeader;
-import org.briarproject.api.blogs.BlogManager;
-import org.briarproject.api.blogs.BlogPostHeader;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.android.controller.DbControllerImpl;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.blog.Blog;
+import org.briarproject.briar.api.blog.BlogCommentHeader;
+import org.briarproject.briar.api.blog.BlogManager;
+import org.briarproject.briar.api.blog.BlogPostHeader;
import java.util.ArrayList;
import java.util.Collection;
@@ -28,9 +29,13 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
abstract class BaseControllerImpl extends DbControllerImpl
implements BaseController, EventListener {
@@ -99,7 +104,6 @@ abstract class BaseControllerImpl extends DbControllerImpl
@Override
public void loadBlogPosts(final GroupId groupId,
final ResultExceptionHandler, DbException> handler) {
- if (groupId == null) throw new IllegalStateException();
runOnDbThread(new Runnable() {
@Override
public void run() {
@@ -217,8 +221,6 @@ abstract class BaseControllerImpl extends DbControllerImpl
private BlogPostHeader getPostHeader(GroupId g, MessageId m)
throws DbException {
-
- if (g == null) throw new IllegalStateException();
BlogPostHeader header = headerCache.get(m);
if (header == null) {
header = blogManager.getPostHeader(g, m);
@@ -245,7 +247,7 @@ abstract class BaseControllerImpl extends DbControllerImpl
String body = bodyCache.get(m);
if (body == null) {
body = blogManager.getPostBody(m);
- if (body != null) bodyCache.put(m, body);
+ bodyCache.put(m, body);
}
//noinspection ConstantConditions
return body;
diff --git a/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/blogs/BasePostFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java
index 8717acac1..a6be4cd3f 100644
--- a/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java
@@ -1,24 +1,25 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.os.Bundle;
import android.support.annotation.CallSuper;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
-import org.briarproject.R;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.fragment.BaseFragment;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
-import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION;
+import static org.briarproject.briar.android.util.UiUtils.MIN_RESOLUTION;
@UiThread
@MethodsNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java
similarity index 76%
rename from briar-android/src/org/briarproject/android/blogs/BlogActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java
index a52d44376..700ecf40a 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java
@@ -1,14 +1,14 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.content.Intent;
import android.os.Bundle;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
-import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.blog.BlogPostAdapter.OnBlogPostClickListener;
+import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener;
import javax.inject.Inject;
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogCommentItem.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java
similarity index 90%
rename from briar-android/src/org/briarproject/android/blogs/BlogCommentItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java
index b463e3130..2ef640d37 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogCommentItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java
@@ -1,7 +1,7 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
-import org.briarproject.api.blogs.BlogCommentHeader;
-import org.briarproject.api.blogs.BlogPostHeader;
+import org.briarproject.briar.api.blog.BlogCommentHeader;
+import org.briarproject.briar.api.blog.BlogPostHeader;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogController.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogController.java
similarity index 55%
rename from briar-android/src/org/briarproject/android/blogs/BlogController.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogController.java
index ba02cacd1..c58e41e74 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogController.java
@@ -1,12 +1,14 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
import java.util.Collection;
+@NotNullByDefault
public interface BlogController extends BaseController {
void setGroupId(GroupId g);
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java
similarity index 75%
rename from briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java
index abc5108e9..43877cc3d 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java
@@ -1,24 +1,26 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.app.Activity;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.controller.ActivityLifecycleController;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.blogs.Blog;
-import org.briarproject.api.blogs.BlogManager;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.BlogPostAddedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.GroupRemovedEvent;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
+import org.briarproject.briar.android.controller.ActivityLifecycleController;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.blog.Blog;
+import org.briarproject.briar.api.blog.BlogManager;
+import org.briarproject.briar.api.blog.event.BlogPostAddedEvent;
import java.util.Collection;
import java.util.concurrent.Executor;
@@ -29,6 +31,8 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class BlogControllerImpl extends BaseControllerImpl
implements ActivityLifecycleController, BlogController, EventListener {
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/blogs/BlogFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java
index a7273fd61..10dd6d720 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java
@@ -1,9 +1,8 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityOptionsCompat;
@@ -18,24 +17,25 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.blogs.BaseController.BlogListener;
-import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.sharing.BlogSharingStatusActivity;
-import org.briarproject.android.sharing.ShareBlogActivity;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.blogs.BlogPostHeader;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.blog.BaseController.BlogListener;
+import org.briarproject.briar.android.blog.BlogPostAdapter.OnBlogPostClickListener;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.sharing.BlogSharingStatusActivity;
+import org.briarproject.briar.android.sharing.ShareBlogActivity;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.api.blog.BlogPostHeader;
import java.util.Collection;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.app.Activity.RESULT_OK;
@@ -43,9 +43,9 @@ import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
import static android.widget.Toast.LENGTH_SHORT;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.android.blogs.BlogActivity.REQUEST_SHARE;
-import static org.briarproject.android.blogs.BlogActivity.REQUEST_WRITE_POST;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.blog.BlogActivity.REQUEST_SHARE;
+import static org.briarproject.briar.android.blog.BlogActivity.REQUEST_WRITE_POST;
@UiThread
@MethodsNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogItem.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogItem.java
similarity index 79%
rename from briar-android/src/org/briarproject/android/blogs/BlogItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogItem.java
index 691f9cb75..f0ea9b48d 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogItem.java
@@ -1,6 +1,6 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
-import org.briarproject.api.blogs.Blog;
+import org.briarproject.briar.api.blog.Blog;
class BlogItem {
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogModule.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogModule.java
similarity index 71%
rename from briar-android/src/org/briarproject/android/blogs/BlogModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogModule.java
index f4392e90a..01e80dcb6 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogModule.java
@@ -1,7 +1,7 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
-import org.briarproject.android.ActivityScope;
-import org.briarproject.android.BaseActivity;
+import org.briarproject.briar.android.activity.ActivityScope;
+import org.briarproject.briar.android.activity.BaseActivity;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java
similarity index 90%
rename from briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java
index ae67d9cfc..febca0327 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.util.BriarAdapter;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.BriarAdapter;
class BlogPostAdapter
extends BriarAdapter {
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostFragment.java
similarity index 77%
rename from briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostFragment.java
index 2a0ecf192..8c9f4ae21 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostFragment.java
@@ -1,19 +1,19 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import javax.annotation.Nullable;
import javax.inject.Inject;
@UiThread
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java
similarity index 79%
rename from briar-android/src/org/briarproject/android/blogs/BlogPostItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java
index debcfd544..d8561ad4d 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java
@@ -1,14 +1,14 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import org.briarproject.api.blogs.BlogPostHeader;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.Author.Status;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.Author.Status;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.api.blog.BlogPostHeader;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java
index 784e60b7f..5187537d9 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java
@@ -1,10 +1,9 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
@@ -18,24 +17,26 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
-import org.briarproject.android.view.AuthorView;
-import org.briarproject.api.blogs.BlogCommentHeader;
-import org.briarproject.api.blogs.BlogPostHeader;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.blog.BlogPostAdapter.OnBlogPostClickListener;
+import org.briarproject.briar.android.view.AuthorView;
+import org.briarproject.briar.api.blog.BlogCommentHeader;
+import org.briarproject.briar.api.blog.BlogPostHeader;
+
+import javax.annotation.Nullable;
import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAnimation;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.android.blogs.BasePostFragment.POST_ID;
-import static org.briarproject.android.util.AndroidUtils.TEASER_LENGTH;
-import static org.briarproject.android.util.AndroidUtils.getSpanned;
-import static org.briarproject.android.util.AndroidUtils.getTeaser;
-import static org.briarproject.android.util.AndroidUtils.makeLinksClickable;
-import static org.briarproject.api.blogs.MessageType.POST;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.blog.BasePostFragment.POST_ID;
+import static org.briarproject.briar.android.util.UiUtils.TEASER_LENGTH;
+import static org.briarproject.briar.android.util.UiUtils.getSpanned;
+import static org.briarproject.briar.android.util.UiUtils.getTeaser;
+import static org.briarproject.briar.android.util.UiUtils.makeLinksClickable;
+import static org.briarproject.briar.api.blog.MessageType.POST;
@UiThread
class BlogPostViewHolder extends RecyclerView.ViewHolder {
diff --git a/briar-android/src/org/briarproject/android/blogs/FeedController.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedController.java
similarity index 60%
rename from briar-android/src/org/briarproject/android/blogs/FeedController.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/FeedController.java
index 76ab1baa2..4c28281ca 100644
--- a/briar-android/src/org/briarproject/android/blogs/FeedController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedController.java
@@ -1,14 +1,15 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.support.annotation.UiThread;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.blogs.Blog;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.blog.Blog;
import java.util.Collection;
+@NotNullByDefault
public interface FeedController extends BaseController {
void loadBlogPosts(
diff --git a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedControllerImpl.java
similarity index 74%
rename from briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/FeedControllerImpl.java
index 1c5cee0ca..1d02c8fdc 100644
--- a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedControllerImpl.java
@@ -1,21 +1,23 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.blogs.Blog;
-import org.briarproject.api.blogs.BlogManager;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchGroupException;
-import org.briarproject.api.db.NoSuchMessageException;
-import org.briarproject.api.event.BlogPostAddedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.GroupAddedEvent;
-import org.briarproject.api.event.GroupRemovedEvent;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.NoSuchGroupException;
+import org.briarproject.bramble.api.db.NoSuchMessageException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.event.GroupAddedEvent;
+import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.blog.Blog;
+import org.briarproject.briar.api.blog.BlogManager;
+import org.briarproject.briar.api.blog.event.BlogPostAddedEvent;
import java.util.ArrayList;
import java.util.Collection;
@@ -26,8 +28,10 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.blogs.BlogManager.CLIENT_ID;
+import static org.briarproject.briar.api.blog.BlogManager.CLIENT_ID;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class FeedControllerImpl extends BaseControllerImpl
implements FeedController {
diff --git a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/blogs/FeedFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java
index e829c0896..0eee3cd8b 100644
--- a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java
@@ -1,8 +1,7 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.content.Intent;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityOptionsCompat;
@@ -16,29 +15,30 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
-import org.briarproject.android.blogs.FeedController.FeedListener;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.blogs.Blog;
-import org.briarproject.api.blogs.BlogPostHeader;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.blog.BlogPostAdapter.OnBlogPostClickListener;
+import org.briarproject.briar.android.blog.FeedController.FeedListener;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.api.blog.Blog;
+import org.briarproject.briar.api.blog.BlogPostHeader;
import java.util.Collection;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.app.Activity.RESULT_OK;
import static android.support.design.widget.Snackbar.LENGTH_LONG;
import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.android.blogs.BlogActivity.REQUEST_WRITE_POST;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.blog.BlogActivity.REQUEST_WRITE_POST;
@UiThread
@MethodsNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedPostFragment.java
similarity index 75%
rename from briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/FeedPostFragment.java
index 73ec81a3e..799c170a9 100644
--- a/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedPostFragment.java
@@ -1,23 +1,23 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import javax.annotation.Nullable;
import javax.inject.Inject;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
@UiThread
@MethodsNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogActivity.java
similarity index 79%
rename from briar-android/src/org/briarproject/android/blogs/ReblogActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogActivity.java
index 8f04dc1db..94194d682 100644
--- a/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.annotation.TargetApi;
import android.content.Intent;
@@ -8,14 +8,14 @@ import android.transition.Fade;
import android.transition.Transition;
import android.view.MenuItem;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener;
-import static org.briarproject.android.blogs.BasePostFragment.POST_ID;
+import static org.briarproject.briar.android.blog.BasePostFragment.POST_ID;
public class ReblogActivity extends BriarActivity implements
BaseFragmentListener {
diff --git a/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java
similarity index 79%
rename from briar-android/src/org/briarproject/android/blogs/ReblogFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java
index 1c9655336..d9093a79d 100644
--- a/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java
@@ -1,34 +1,34 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.ScrollView;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.controller.handler.UiExceptionHandler;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.view.TextInputView;
-import org.briarproject.android.view.TextInputView.TextInputListener;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.controller.handler.UiExceptionHandler;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.view.TextInputView;
+import org.briarproject.briar.android.view.TextInputView.TextInputListener;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.view.View.FOCUS_DOWN;
import static android.view.View.GONE;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.android.blogs.BasePostFragment.POST_ID;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.blog.BasePostFragment.POST_ID;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/blogs/RssFeedAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java
similarity index 89%
rename from briar-android/src/org/briarproject/android/blogs/RssFeedAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java
index aa9246815..3052e3694 100644
--- a/briar-android/src/org/briarproject/android/blogs/RssFeedAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
@@ -9,10 +9,10 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.android.util.BriarAdapter;
-import org.briarproject.api.feed.Feed;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.BriarAdapter;
+import org.briarproject.briar.android.util.UiUtils;
+import org.briarproject.briar.api.feed.Feed;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
@@ -65,8 +65,8 @@ class RssFeedAdapter extends BriarAdapter {
}
// Imported and Last Updated
- ui.imported.setText(AndroidUtils.formatDate(ctx, item.getAdded()));
- ui.updated.setText(AndroidUtils.formatDate(ctx, item.getUpdated()));
+ ui.imported.setText(UiUtils.formatDate(ctx, item.getAdded()));
+ ui.updated.setText(UiUtils.formatDate(ctx, item.getUpdated()));
// Description
if (item.getDescription() != null) {
diff --git a/briar-android/src/org/briarproject/android/blogs/RssFeedImportActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
similarity index 91%
rename from briar-android/src/org/briarproject/android/blogs/RssFeedImportActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
index 2150b31ba..7e2085818 100644
--- a/briar-android/src/org/briarproject/android/blogs/RssFeedImportActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.content.DialogInterface;
import android.content.Intent;
@@ -13,13 +13,13 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.feed.FeedManager;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.api.feed.FeedManager;
import java.io.IOException;
import java.util.concurrent.Executor;
diff --git a/briar-android/src/org/briarproject/android/blogs/RssFeedManageActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java
similarity index 88%
rename from briar-android/src/org/briarproject/android/blogs/RssFeedManageActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java
index ecffd0cd2..522901857 100644
--- a/briar-android/src/org/briarproject/android/blogs/RssFeedManageActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.content.Intent;
import android.os.Bundle;
@@ -10,15 +10,15 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.blogs.RssFeedAdapter.RssFeedListener;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.feed.Feed;
-import org.briarproject.api.feed.FeedManager;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.blog.RssFeedAdapter.RssFeedListener;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.api.feed.Feed;
+import org.briarproject.briar.api.feed.FeedManager;
import java.util.List;
import java.util.logging.Logger;
diff --git a/briar-android/src/org/briarproject/android/blogs/WriteBlogPostActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
similarity index 80%
rename from briar-android/src/org/briarproject/android/blogs/WriteBlogPostActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
index 6dccc1685..1217d94b7 100644
--- a/briar-android/src/org/briarproject/android/blogs/WriteBlogPostActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.blogs;
+package org.briarproject.briar.android.blog;
import android.content.Intent;
import android.os.Bundle;
@@ -10,21 +10,21 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.view.TextInputView;
-import org.briarproject.android.view.TextInputView.TextInputListener;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.blogs.BlogManager;
-import org.briarproject.api.blogs.BlogPost;
-import org.briarproject.api.blogs.BlogPostFactory;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.view.TextInputView;
+import org.briarproject.briar.android.view.TextInputView.TextInputListener;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.blog.BlogManager;
+import org.briarproject.briar.api.blog.BlogPost;
+import org.briarproject.briar.api.blog.BlogPostFactory;
import java.security.GeneralSecurityException;
import java.util.logging.Logger;
@@ -34,7 +34,7 @@ import javax.inject.Inject;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.blogs.BlogConstants.MAX_BLOG_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_BODY_LENGTH;
public class WriteBlogPostActivity extends BriarActivity
implements OnEditorActionListener, TextInputListener {
diff --git a/briar-android/src/org/briarproject/android/contact/BaseContactListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/contact/BaseContactListAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java
index 22e839148..fb89f85d1 100644
--- a/briar-android/src/org/briarproject/android/contact/BaseContactListAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java
@@ -1,11 +1,12 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.content.Context;
-import android.support.annotation.Nullable;
import android.view.View;
-import org.briarproject.android.util.BriarAdapter;
-import org.briarproject.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.briar.android.util.BriarAdapter;
+
+import javax.annotation.Nullable;
import static android.support.v7.util.SortedList.INVALID_POSITION;
diff --git a/briar-android/src/org/briarproject/android/contact/ContactItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItem.java
similarity index 62%
rename from briar-android/src/org/briarproject/android/contact/ContactItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItem.java
index eaa7f66c5..720a9d6df 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItem.java
@@ -1,7 +1,7 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import javax.annotation.concurrent.NotThreadSafe;
diff --git a/briar-android/src/org/briarproject/android/contact/ContactItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItemViewHolder.java
similarity index 78%
rename from briar-android/src/org/briarproject/android/contact/ContactItemViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItemViewHolder.java
index 46a81762b..3791c6c34 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItemViewHolder.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.UiThread;
import android.support.v7.widget.RecyclerView;
@@ -7,11 +7,12 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
+
+import javax.annotation.Nullable;
import im.delight.android.identicons.IdenticonDrawable;
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListAdapter.java
similarity index 93%
rename from briar-android/src/org/briarproject/android/contact/ContactListAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListAdapter.java
index 707ceeacd..5eb17f743 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListAdapter.java
@@ -1,11 +1,11 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
+import org.briarproject.briar.R;
public class ContactListAdapter extends
BaseContactListAdapter {
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java
similarity index 77%
rename from briar-android/src/org/briarproject/android/contact/ContactListFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java
index a14bbc0d5..af242e945 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java
@@ -1,9 +1,8 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
@@ -15,52 +14,57 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.keyagreement.KeyAgreementActivity;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.clients.BaseMessageHeader;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchContactException;
-import org.briarproject.api.event.ContactConnectedEvent;
-import org.briarproject.api.event.ContactDisconnectedEvent;
-import org.briarproject.api.event.ContactRemovedEvent;
-import org.briarproject.api.event.ContactStatusChangedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.IntroductionRequestReceivedEvent;
-import org.briarproject.api.event.IntroductionResponseReceivedEvent;
-import org.briarproject.api.event.InvitationRequestReceivedEvent;
-import org.briarproject.api.event.InvitationResponseReceivedEvent;
-import org.briarproject.api.event.PrivateMessageReceivedEvent;
-import org.briarproject.api.introduction.IntroductionRequest;
-import org.briarproject.api.introduction.IntroductionResponse;
-import org.briarproject.api.messaging.ConversationManager;
-import org.briarproject.api.messaging.PrivateMessageHeader;
-import org.briarproject.api.plugins.ConnectionRegistry;
-import org.briarproject.api.sharing.InvitationRequest;
-import org.briarproject.api.sharing.InvitationResponse;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
+import org.briarproject.bramble.api.contact.event.ContactStatusChangedEvent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.NoSuchContactException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.ConnectionRegistry;
+import org.briarproject.bramble.api.plugin.event.ContactConnectedEvent;
+import org.briarproject.bramble.api.plugin.event.ContactDisconnectedEvent;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.keyagreement.KeyAgreementActivity;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.client.BaseMessageHeader;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+import org.briarproject.briar.api.introduction.IntroductionRequest;
+import org.briarproject.briar.api.introduction.IntroductionResponse;
+import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent;
+import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent;
+import org.briarproject.briar.api.messaging.ConversationManager;
+import org.briarproject.briar.api.messaging.PrivateMessageHeader;
+import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent;
+import org.briarproject.briar.api.sharing.InvitationRequest;
+import org.briarproject.briar.api.sharing.InvitationResponse;
+import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent;
+import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAnimation;
import static android.support.v4.view.ViewCompat.getTransitionName;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.contact.ConversationActivity.CONTACT_ID;
+import static org.briarproject.briar.android.contact.ConversationActivity.CONTACT_ID;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class ContactListFragment extends BaseFragment implements EventListener {
public static final String TAG = ContactListFragment.class.getName();
@@ -101,8 +105,9 @@ public class ContactListFragment extends BaseFragment implements EventListener {
@Nullable
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.list, container, false);
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItem.java
similarity index 79%
rename from briar-android/src/org/briarproject/android/contact/ContactListItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItem.java
index 18e4946c1..d6e839afa 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItem.java
@@ -1,8 +1,8 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
import javax.annotation.concurrent.NotThreadSafe;
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItemViewHolder.java
similarity index 71%
rename from briar-android/src/org/briarproject/android/contact/ContactListItemViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItemViewHolder.java
index acbd27d82..649e3782f 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItemViewHolder.java
@@ -1,19 +1,20 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.UiThread;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
+import org.briarproject.briar.android.util.UiUtils;
+
+import javax.annotation.Nullable;
import static android.support.v4.view.ViewCompat.setTransitionName;
-import static org.briarproject.android.util.AndroidUtils.formatDate;
+import static org.briarproject.briar.android.util.UiUtils.formatDate;
@UiThread
@NotNullByDefault
@@ -60,8 +61,8 @@ class ContactListItemViewHolder extends ContactItemViewHolder {
}
ContactId c = item.getContact().getId();
- setTransitionName(avatar, AndroidUtils.getAvatarTransitionName(c));
- setTransitionName(bulb, AndroidUtils.getBulbTransitionName(c));
+ setTransitionName(avatar, UiUtils.getAvatarTransitionName(c));
+ setTransitionName(bulb, UiUtils.getBulbTransitionName(c));
}
}
diff --git a/briar-android/src/org/briarproject/android/contact/ContactModule.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactModule.java
similarity index 56%
rename from briar-android/src/org/briarproject/android/contact/ContactModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ContactModule.java
index b9bf00e24..8dce03cbc 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactModule.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import dagger.Module;
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
similarity index 86%
rename from briar-android/src/org/briarproject/android/contact/ConversationActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
index 02779ce44..7d832eff8 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.content.DialogInterface;
import android.content.Intent;
@@ -24,64 +24,63 @@ import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.contact.ConversationAdapter.ConversationListener;
-import org.briarproject.android.introduction.IntroductionActivity;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.android.view.TextInputView;
-import org.briarproject.android.view.TextInputView.TextInputListener;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.blogs.BlogSharingManager;
-import org.briarproject.api.clients.ProtocolStateException;
-import org.briarproject.api.clients.SessionId;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchContactException;
-import org.briarproject.api.event.ContactConnectedEvent;
-import org.briarproject.api.event.ContactDisconnectedEvent;
-import org.briarproject.api.event.ContactRemovedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.IntroductionRequestReceivedEvent;
-import org.briarproject.api.event.IntroductionResponseReceivedEvent;
-import org.briarproject.api.event.InvitationRequestReceivedEvent;
-import org.briarproject.api.event.InvitationResponseReceivedEvent;
-import org.briarproject.api.event.MessagesAckedEvent;
-import org.briarproject.api.event.MessagesSentEvent;
-import org.briarproject.api.event.PrivateMessageReceivedEvent;
-import org.briarproject.api.forum.ForumSharingManager;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.introduction.IntroductionManager;
-import org.briarproject.api.introduction.IntroductionMessage;
-import org.briarproject.api.introduction.IntroductionRequest;
-import org.briarproject.api.introduction.IntroductionResponse;
-import org.briarproject.api.messaging.MessagingManager;
-import org.briarproject.api.messaging.PrivateMessage;
-import org.briarproject.api.messaging.PrivateMessageFactory;
-import org.briarproject.api.messaging.PrivateMessageHeader;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.plugins.ConnectionRegistry;
-import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.settings.SettingsManager;
-import org.briarproject.api.sharing.InvitationMessage;
-import org.briarproject.api.sharing.InvitationRequest;
-import org.briarproject.api.sharing.InvitationResponse;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.util.StringUtils;
-import org.jetbrains.annotations.NotNull;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.NoSuchContactException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.ConnectionRegistry;
+import org.briarproject.bramble.api.plugin.event.ContactConnectedEvent;
+import org.briarproject.bramble.api.plugin.event.ContactDisconnectedEvent;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.settings.SettingsManager;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.event.MessagesAckedEvent;
+import org.briarproject.bramble.api.sync.event.MessagesSentEvent;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.contact.ConversationAdapter.ConversationListener;
+import org.briarproject.briar.android.introduction.IntroductionActivity;
+import org.briarproject.briar.android.util.UiUtils;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.android.view.TextInputView;
+import org.briarproject.briar.android.view.TextInputView.TextInputListener;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.blog.BlogSharingManager;
+import org.briarproject.briar.api.client.ProtocolStateException;
+import org.briarproject.briar.api.client.SessionId;
+import org.briarproject.briar.api.forum.ForumSharingManager;
+import org.briarproject.briar.api.introduction.IntroductionManager;
+import org.briarproject.briar.api.introduction.IntroductionMessage;
+import org.briarproject.briar.api.introduction.IntroductionRequest;
+import org.briarproject.briar.api.introduction.IntroductionResponse;
+import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent;
+import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent;
+import org.briarproject.briar.api.messaging.MessagingManager;
+import org.briarproject.briar.api.messaging.PrivateMessage;
+import org.briarproject.briar.api.messaging.PrivateMessageFactory;
+import org.briarproject.briar.api.messaging.PrivateMessageHeader;
+import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
+import org.briarproject.briar.api.sharing.InvitationMessage;
+import org.briarproject.briar.api.sharing.InvitationRequest;
+import org.briarproject.briar.api.sharing.InvitationResponse;
+import org.briarproject.briar.api.sharing.event.InvitationRequestReceivedEvent;
+import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent;
import java.util.ArrayList;
import java.util.Collection;
@@ -93,6 +92,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import de.hdodenhof.circleimageview.CircleImageView;
@@ -105,8 +105,8 @@ import static android.support.v7.util.SortedList.INVALID_POSITION;
import static android.widget.Toast.LENGTH_SHORT;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.fragment.SettingsFragment.SETTINGS_NAMESPACE;
-import static org.briarproject.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
+import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
+import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@@ -166,7 +166,7 @@ public class ConversationActivity extends BriarActivity
@SuppressWarnings("ConstantConditions")
@Override
- public void onCreate(Bundle state) {
+ public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
Intent i = getIntent();
@@ -195,9 +195,9 @@ public class ConversationActivity extends BriarActivity
}
ViewCompat.setTransitionName(toolbarAvatar,
- AndroidUtils.getAvatarTransitionName(contactId));
+ UiUtils.getAvatarTransitionName(contactId));
ViewCompat.setTransitionName(toolbarStatus,
- AndroidUtils.getBulbTransitionName(contactId));
+ UiUtils.getBulbTransitionName(contactId));
adapter = new ConversationAdapter(this, this);
list = (BriarRecyclerView) findViewById(R.id.conversationView);
@@ -833,7 +833,7 @@ public class ConversationActivity extends BriarActivity
@UiThread
@Override
- public void respondToRequest(@NotNull final ConversationRequestItem item,
+ public void respondToRequest(final ConversationRequestItem item,
final boolean accept) {
int position = adapter.findItemPosition(item);
if (position != INVALID_POSITION) {
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java
similarity index 93%
rename from briar-android/src/org/briarproject/android/contact/ConversationAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java
index d280bdaee..b8f1bb78a 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java
@@ -1,17 +1,18 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.content.Context;
import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.util.BriarAdapter;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.BriarAdapter;
+
+import javax.annotation.Nullable;
class ConversationAdapter
extends BriarAdapter {
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/contact/ConversationItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java
index 1a2c118e2..faf43cf5e 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java
@@ -1,43 +1,43 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.content.Context;
import android.support.annotation.LayoutRes;
import android.support.annotation.StringRes;
-import org.briarproject.R;
-import org.briarproject.android.contact.ConversationRequestItem.RequestType;
-import org.briarproject.api.blogs.BlogInvitationRequest;
-import org.briarproject.api.blogs.BlogInvitationResponse;
-import org.briarproject.api.clients.BaseMessageHeader;
-import org.briarproject.api.forum.ForumInvitationRequest;
-import org.briarproject.api.forum.ForumInvitationResponse;
-import org.briarproject.api.introduction.IntroductionRequest;
-import org.briarproject.api.introduction.IntroductionResponse;
-import org.briarproject.api.messaging.PrivateMessageHeader;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.privategroup.invitation.GroupInvitationRequest;
-import org.briarproject.api.privategroup.invitation.GroupInvitationResponse;
-import org.briarproject.api.sharing.InvitationRequest;
-import org.briarproject.api.sharing.InvitationResponse;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.ConversationRequestItem.RequestType;
+import org.briarproject.briar.api.blog.BlogInvitationRequest;
+import org.briarproject.briar.api.blog.BlogInvitationResponse;
+import org.briarproject.briar.api.client.BaseMessageHeader;
+import org.briarproject.briar.api.forum.ForumInvitationRequest;
+import org.briarproject.briar.api.forum.ForumInvitationResponse;
+import org.briarproject.briar.api.introduction.IntroductionRequest;
+import org.briarproject.briar.api.introduction.IntroductionResponse;
+import org.briarproject.briar.api.messaging.PrivateMessageHeader;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse;
+import org.briarproject.briar.api.sharing.InvitationRequest;
+import org.briarproject.briar.api.sharing.InvitationResponse;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
-import static org.briarproject.android.contact.ConversationRequestItem.RequestType.BLOG;
-import static org.briarproject.android.contact.ConversationRequestItem.RequestType.FORUM;
-import static org.briarproject.android.contact.ConversationRequestItem.RequestType.GROUP;
-import static org.briarproject.android.contact.ConversationRequestItem.RequestType.INTRODUCTION;
+import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.BLOG;
+import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.FORUM;
+import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.GROUP;
+import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.INTRODUCTION;
@NotThreadSafe
@NotNullByDefault
abstract class ConversationItem {
protected @Nullable String body;
- final private MessageId id;
- final private GroupId groupId;
- final private long time;
+ private final MessageId id;
+ private final GroupId groupId;
+ private final long time;
private boolean read;
ConversationItem(MessageId id, GroupId groupId, @Nullable String body,
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItemViewHolder.java
similarity index 72%
rename from briar-android/src/org/briarproject/android/contact/ConversationItemViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItemViewHolder.java
index 58a42951b..e58ed523c 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItemViewHolder.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.CallSuper;
import android.support.annotation.UiThread;
@@ -7,10 +7,10 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.UiUtils;
@UiThread
@NotNullByDefault
@@ -36,7 +36,7 @@ class ConversationItemViewHolder extends ViewHolder {
}
long timestamp = item.getTime();
- time.setText(AndroidUtils.formatDate(time.getContext(), timestamp));
+ time.setText(UiUtils.formatDate(time.getContext(), timestamp));
}
}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationMessageInItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationMessageInItem.java
similarity index 69%
rename from briar-android/src/org/briarproject/android/contact/ConversationMessageInItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationMessageInItem.java
index 23d857136..4022f2f68 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationMessageInItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationMessageInItem.java
@@ -1,10 +1,10 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.LayoutRes;
-import org.briarproject.R;
-import org.briarproject.api.messaging.PrivateMessageHeader;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.api.messaging.PrivateMessageHeader;
import javax.annotation.concurrent.NotThreadSafe;
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationMessageOutItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationMessageOutItem.java
similarity index 67%
rename from briar-android/src/org/briarproject/android/contact/ConversationMessageOutItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationMessageOutItem.java
index ee2d1a11b..082071c23 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationMessageOutItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationMessageOutItem.java
@@ -1,10 +1,10 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.LayoutRes;
-import org.briarproject.R;
-import org.briarproject.api.messaging.PrivateMessageHeader;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.api.messaging.PrivateMessageHeader;
import javax.annotation.concurrent.NotThreadSafe;
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationMessageOutViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationMessageOutViewHolder.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/contact/ConversationMessageOutViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationMessageOutViewHolder.java
index 83d58dcee..6c119a6c5 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationMessageOutViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationMessageOutViewHolder.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.view.View;
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationNoticeInItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java
similarity index 67%
rename from briar-android/src/org/briarproject/android/contact/ConversationNoticeInItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java
index 0e70e6631..efbc6e4f7 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationNoticeInItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java
@@ -1,13 +1,13 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.LayoutRes;
-import org.briarproject.R;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.R;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
@@ -25,7 +25,7 @@ class ConversationNoticeInItem extends ConversationItem {
}
@Nullable
- public String getMsgText() {
+ String getMsgText() {
return msgText;
}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationNoticeInViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInViewHolder.java
similarity index 82%
rename from briar-android/src/org/briarproject/android/contact/ConversationNoticeInViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInViewHolder.java
index 7e5a60824..db6bbd89b 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationNoticeInViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInViewHolder.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.UiThread;
import android.view.View;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationNoticeOutItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java
similarity index 66%
rename from briar-android/src/org/briarproject/android/contact/ConversationNoticeOutItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java
index 78cddf3a7..637c928b9 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationNoticeOutItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java
@@ -1,13 +1,13 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.LayoutRes;
-import org.briarproject.R;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.R;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
@@ -25,7 +25,7 @@ class ConversationNoticeOutItem extends ConversationOutItem {
}
@Nullable
- public String getMsgText() {
+ String getMsgText() {
return msgText;
}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationNoticeOutViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutViewHolder.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/contact/ConversationNoticeOutViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutViewHolder.java
index c0bdf7fcf..504137ada 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationNoticeOutViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutViewHolder.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.UiThread;
import android.view.View;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationOutItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationOutItem.java
similarity index 59%
rename from briar-android/src/org/briarproject/android/contact/ConversationOutItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationOutItem.java
index 469f4b0f4..e2aff0e34 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationOutItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationOutItem.java
@@ -1,10 +1,10 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
@@ -21,19 +21,19 @@ abstract class ConversationOutItem extends ConversationItem {
this.seen = seen;
}
- public boolean isSent() {
+ boolean isSent() {
return sent;
}
- public void setSent(boolean sent) {
+ void setSent(boolean sent) {
this.sent = sent;
}
- public boolean isSeen() {
+ boolean isSeen() {
return seen;
}
- public void setSeen(boolean seen) {
+ void setSeen(boolean seen) {
this.seen = seen;
}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationOutItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationOutItemViewHolder.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/contact/ConversationOutItemViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationOutItemViewHolder.java
index 4c10ba402..8e5bf264d 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationOutItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationOutItemViewHolder.java
@@ -1,11 +1,11 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.UiThread;
import android.view.View;
import android.widget.ImageView;
-import org.briarproject.R;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
@UiThread
@NotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationRequestItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java
similarity index 67%
rename from briar-android/src/org/briarproject/android/contact/ConversationRequestItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java
index f0a1cb08b..3dd8dd721 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationRequestItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java
@@ -1,21 +1,22 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.LayoutRes;
-import org.briarproject.R;
-import org.briarproject.api.clients.SessionId;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.api.client.SessionId;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
@NotNullByDefault
class ConversationRequestItem extends ConversationNoticeInItem {
- enum RequestType { INTRODUCTION, FORUM, BLOG, GROUP };
+ enum RequestType { INTRODUCTION, FORUM, BLOG, GROUP }
+
private final RequestType requestType;
private final SessionId sessionId;
private boolean answered;
@@ -30,11 +31,11 @@ class ConversationRequestItem extends ConversationNoticeInItem {
this.answered = answered;
}
- public RequestType getRequestType() {
+ RequestType getRequestType() {
return requestType;
}
- public SessionId getSessionId() {
+ SessionId getSessionId() {
return sessionId;
}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationRequestViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java
similarity index 85%
rename from briar-android/src/org/briarproject/android/contact/ConversationRequestViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java
index 4aa5fc3cb..663e0394d 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationRequestViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java
@@ -1,13 +1,13 @@
-package org.briarproject.android.contact;
+package org.briarproject.briar.android.contact;
import android.support.annotation.UiThread;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
-import org.briarproject.R;
-import org.briarproject.android.contact.ConversationAdapter.ConversationListener;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.ConversationAdapter.ConversationListener;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
diff --git a/briar-android/src/org/briarproject/android/contactselection/BaseContactSelectorAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorAdapter.java
similarity index 69%
rename from briar-android/src/org/briarproject/android/contactselection/BaseContactSelectorAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorAdapter.java
index c9e287b86..f6252717e 100644
--- a/briar-android/src/org/briarproject/android/contactselection/BaseContactSelectorAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorAdapter.java
@@ -1,11 +1,11 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
import android.content.Context;
-import org.briarproject.android.contact.BaseContactListAdapter;
-import org.briarproject.android.contact.ContactItemViewHolder;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.contact.BaseContactListAdapter;
+import org.briarproject.briar.android.contact.ContactItemViewHolder;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/briar-android/src/org/briarproject/android/contactselection/BaseContactSelectorFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java
similarity index 74%
rename from briar-android/src/org/briarproject/android/contactselection/BaseContactSelectorFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java
index fc1f400f2..1c9294fe2 100644
--- a/briar-android/src/org/briarproject/android/contactselection/BaseContactSelectorFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java
@@ -1,35 +1,36 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.CallSuper;
-import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.transition.Fade;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.android.contact.ContactItemViewHolder;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
+import org.briarproject.briar.android.contact.ContactItemViewHolder;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.view.BriarRecyclerView;
import java.util.ArrayList;
import java.util.Collection;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.android.contactselection.ContactSelectorActivity.CONTACTS;
-import static org.briarproject.android.contactselection.ContactSelectorActivity.getContactsFromIds;
-import static org.briarproject.android.contactselection.ContactSelectorActivity.getContactsFromIntegers;
+import javax.annotation.Nullable;
+
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.contactselection.ContactSelectorActivity.CONTACTS;
+import static org.briarproject.briar.android.contactselection.ContactSelectorActivity.getContactsFromIds;
+import static org.briarproject.briar.android.contactselection.ContactSelectorActivity.getContactsFromIntegers;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/contactselection/BaseSelectableContactHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseSelectableContactHolder.java
similarity index 71%
rename from briar-android/src/org/briarproject/android/contactselection/BaseSelectableContactHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseSelectableContactHolder.java
index d0b57f132..e0fe9a688 100644
--- a/briar-android/src/org/briarproject/android/contactselection/BaseSelectableContactHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseSelectableContactHolder.java
@@ -1,17 +1,18 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
import android.support.annotation.UiThread;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.android.contact.ContactItemViewHolder;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
+import org.briarproject.briar.android.contact.ContactItemViewHolder;
-import static org.briarproject.android.util.AndroidUtils.GREY_OUT;
+import javax.annotation.Nullable;
+
+import static org.briarproject.briar.android.util.UiUtils.GREY_OUT;
@UiThread
@NotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorActivity.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/contactselection/ContactSelectorActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorActivity.java
index d61545f96..2eaaecbaf 100644
--- a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorActivity.java
@@ -1,25 +1,26 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.CallSuper;
import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.transition.Fade;
-import org.briarproject.R;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import javax.annotation.Nullable;
+
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public abstract class ContactSelectorActivity
diff --git a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorAdapter.java
similarity index 76%
rename from briar-android/src/org/briarproject/android/contactselection/ContactSelectorAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorAdapter.java
index 1b681679d..39144d3d6 100644
--- a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorAdapter.java
@@ -1,15 +1,15 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
@NotNullByDefault
-public class ContactSelectorAdapter extends
+class ContactSelectorAdapter extends
BaseContactSelectorAdapter {
ContactSelectorAdapter(Context context,
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorController.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorController.java
new file mode 100644
index 000000000..778a03853
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorController.java
@@ -0,0 +1,19 @@
+package org.briarproject.briar.android.contactselection;
+
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.controller.DbController;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+
+import java.util.Collection;
+
+@NotNullByDefault
+public interface ContactSelectorController
+ extends DbController {
+
+ void loadContacts(GroupId g, Collection selection,
+ ResultExceptionHandler, DbException> handler);
+
+}
diff --git a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java
similarity index 72%
rename from briar-android/src/org/briarproject/android/contactselection/ContactSelectorControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java
index aa198e35f..3cd744d15 100644
--- a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java
@@ -1,15 +1,15 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
-import org.briarproject.android.controller.DbControllerImpl;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.controller.DbControllerImpl;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorFragment.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/contactselection/ContactSelectorFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorFragment.java
index 0e24b157d..07908ac8b 100644
--- a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorFragment.java
@@ -1,14 +1,14 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
import android.content.Context;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import org.briarproject.R;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorListener.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorListener.java
similarity index 50%
rename from briar-android/src/org/briarproject/android/contactselection/ContactSelectorListener.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorListener.java
index b844c35f6..ec9cb0040 100644
--- a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorListener.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorListener.java
@@ -1,10 +1,10 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
import android.support.annotation.UiThread;
-import org.briarproject.android.DestroyableContext;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.DestroyableContext;
import java.util.Collection;
diff --git a/briar-android/src/org/briarproject/android/contactselection/SelectableContactHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/SelectableContactHolder.java
similarity index 62%
rename from briar-android/src/org/briarproject/android/contactselection/SelectableContactHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/SelectableContactHolder.java
index 0ab5ecc4d..b4435d6cf 100644
--- a/briar-android/src/org/briarproject/android/contactselection/SelectableContactHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/SelectableContactHolder.java
@@ -1,19 +1,19 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
import android.support.annotation.UiThread;
import android.view.View;
-import org.briarproject.android.contact.BaseContactListAdapter;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
+
+import javax.annotation.Nullable;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
@UiThread
@NotNullByDefault
-public class SelectableContactHolder
+class SelectableContactHolder
extends BaseSelectableContactHolder {
SelectableContactHolder(View v) {
diff --git a/briar-android/src/org/briarproject/android/contactselection/SelectableContactItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/SelectableContactItem.java
similarity index 68%
rename from briar-android/src/org/briarproject/android/contactselection/SelectableContactItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/contactselection/SelectableContactItem.java
index b11da75a1..d2a53a2a4 100644
--- a/briar-android/src/org/briarproject/android/contactselection/SelectableContactItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/SelectableContactItem.java
@@ -1,8 +1,8 @@
-package org.briarproject.android.contactselection;
+package org.briarproject.briar.android.contactselection;
-import org.briarproject.android.contact.ContactItem;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.contact.ContactItem;
import javax.annotation.concurrent.NotThreadSafe;
diff --git a/briar-android/src/org/briarproject/android/controller/ActivityLifecycleController.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/ActivityLifecycleController.java
similarity index 79%
rename from briar-android/src/org/briarproject/android/controller/ActivityLifecycleController.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/ActivityLifecycleController.java
index 96d0cf4f0..edcb7456b 100644
--- a/briar-android/src/org/briarproject/android/controller/ActivityLifecycleController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/ActivityLifecycleController.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.controller;
+package org.briarproject.briar.android.controller;
import android.app.Activity;
diff --git a/briar-android/src/org/briarproject/android/controller/BriarController.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarController.java
similarity index 60%
rename from briar-android/src/org/briarproject/android/controller/BriarController.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/BriarController.java
index cbb61cde1..38c1ca93b 100644
--- a/briar-android/src/org/briarproject/android/controller/BriarController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarController.java
@@ -1,6 +1,6 @@
-package org.briarproject.android.controller;
+package org.briarproject.briar.android.controller;
-import org.briarproject.android.controller.handler.ResultHandler;
+import org.briarproject.briar.android.controller.handler.ResultHandler;
public interface BriarController extends ActivityLifecycleController {
diff --git a/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java
index f49d6485f..3d15ff7a2 100644
--- a/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java
@@ -1,14 +1,14 @@
-package org.briarproject.android.controller;
+package org.briarproject.briar.android.controller;
import android.app.Activity;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.CallSuper;
-import org.briarproject.android.BriarService;
-import org.briarproject.android.BriarService.BriarServiceConnection;
-import org.briarproject.android.controller.handler.ResultHandler;
-import org.briarproject.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.briar.android.BriarService;
+import org.briarproject.briar.android.BriarService.BriarServiceConnection;
+import org.briarproject.briar.android.controller.handler.ResultHandler;
import java.util.logging.Logger;
diff --git a/briar-android/src/org/briarproject/android/controller/ConfigController.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigController.java
similarity index 54%
rename from briar-android/src/org/briarproject/android/controller/ConfigController.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigController.java
index 7ce523303..d6bc554f6 100644
--- a/briar-android/src/org/briarproject/android/controller/ConfigController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigController.java
@@ -1,9 +1,15 @@
-package org.briarproject.android.controller;
+package org.briarproject.briar.android.controller;
import android.content.Context;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import javax.annotation.Nullable;
+
+@NotNullByDefault
public interface ConfigController {
+ @Nullable
String getEncryptedDatabaseKey();
void storeEncryptedDatabaseKey(String hex);
diff --git a/briar-android/src/org/briarproject/android/controller/ConfigControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java
similarity index 75%
rename from briar-android/src/org/briarproject/android/controller/ConfigControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java
index 33ca32532..0af60bb98 100644
--- a/briar-android/src/org/briarproject/android/controller/ConfigControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java
@@ -1,13 +1,16 @@
-package org.briarproject.android.controller;
+package org.briarproject.briar.android.controller;
import android.content.Context;
import android.content.SharedPreferences;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.AndroidUtils;
+import javax.annotation.Nullable;
import javax.inject.Inject;
+@NotNullByDefault
public class ConfigControllerImpl implements ConfigController {
private static final String PREF_DB_KEY = "key";
@@ -16,7 +19,7 @@ public class ConfigControllerImpl implements ConfigController {
protected final DatabaseConfig databaseConfig;
@Inject
- ConfigControllerImpl(SharedPreferences briarPrefs,
+ public ConfigControllerImpl(SharedPreferences briarPrefs,
DatabaseConfig databaseConfig) {
this.briarPrefs = briarPrefs;
this.databaseConfig = databaseConfig;
@@ -24,6 +27,7 @@ public class ConfigControllerImpl implements ConfigController {
}
@Override
+ @Nullable
public String getEncryptedDatabaseKey() {
return briarPrefs.getString(PREF_DB_KEY, null);
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/DbController.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/DbController.java
new file mode 100644
index 000000000..8f9fc3be1
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/DbController.java
@@ -0,0 +1,9 @@
+package org.briarproject.briar.android.controller;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+@NotNullByDefault
+public interface DbController {
+
+ void runOnDbThread(Runnable task);
+}
diff --git a/briar-android/src/org/briarproject/android/controller/DbControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/DbControllerImpl.java
similarity index 74%
rename from briar-android/src/org/briarproject/android/controller/DbControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/DbControllerImpl.java
index c13576819..eaeb7a06e 100644
--- a/briar-android/src/org/briarproject/android/controller/DbControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/DbControllerImpl.java
@@ -1,13 +1,17 @@
-package org.briarproject.android.controller;
+package org.briarproject.briar.android.controller;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
+import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
+@Immutable
+@NotNullByDefault
public class DbControllerImpl implements DbController {
private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/controller/handler/ExceptionHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/ExceptionHandler.java
similarity index 61%
rename from briar-android/src/org/briarproject/android/controller/handler/ExceptionHandler.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/handler/ExceptionHandler.java
index 6d8719a64..d283a39f6 100644
--- a/briar-android/src/org/briarproject/android/controller/handler/ExceptionHandler.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/ExceptionHandler.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.controller.handler;
+package org.briarproject.briar.android.controller.handler;
public interface ExceptionHandler {
diff --git a/briar-android/src/org/briarproject/android/controller/handler/ResultExceptionHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/ResultExceptionHandler.java
similarity index 68%
rename from briar-android/src/org/briarproject/android/controller/handler/ResultExceptionHandler.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/handler/ResultExceptionHandler.java
index b8346a565..a3cd15adf 100644
--- a/briar-android/src/org/briarproject/android/controller/handler/ResultExceptionHandler.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/ResultExceptionHandler.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.controller.handler;
+package org.briarproject.briar.android.controller.handler;
public interface ResultExceptionHandler
extends ExceptionHandler {
diff --git a/briar-android/src/org/briarproject/android/controller/handler/ResultHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/ResultHandler.java
similarity index 52%
rename from briar-android/src/org/briarproject/android/controller/handler/ResultHandler.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/handler/ResultHandler.java
index 601ff294d..5d11a6a91 100644
--- a/briar-android/src/org/briarproject/android/controller/handler/ResultHandler.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/ResultHandler.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.controller.handler;
+package org.briarproject.briar.android.controller.handler;
public interface ResultHandler {
diff --git a/briar-android/src/org/briarproject/android/controller/handler/UiExceptionHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiExceptionHandler.java
similarity index 77%
rename from briar-android/src/org/briarproject/android/controller/handler/UiExceptionHandler.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiExceptionHandler.java
index 90db65fcd..98ea082ee 100644
--- a/briar-android/src/org/briarproject/android/controller/handler/UiExceptionHandler.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiExceptionHandler.java
@@ -1,9 +1,9 @@
-package org.briarproject.android.controller.handler;
+package org.briarproject.briar.android.controller.handler;
import android.support.annotation.UiThread;
-import org.briarproject.android.DestroyableContext;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.DestroyableContext;
import javax.annotation.concurrent.Immutable;
diff --git a/briar-android/src/org/briarproject/android/controller/handler/UiResultExceptionHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultExceptionHandler.java
similarity index 76%
rename from briar-android/src/org/briarproject/android/controller/handler/UiResultExceptionHandler.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultExceptionHandler.java
index 8fd4ab4fc..d3ee2d7c8 100644
--- a/briar-android/src/org/briarproject/android/controller/handler/UiResultExceptionHandler.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultExceptionHandler.java
@@ -1,9 +1,9 @@
-package org.briarproject.android.controller.handler;
+package org.briarproject.briar.android.controller.handler;
import android.support.annotation.UiThread;
-import org.briarproject.android.DestroyableContext;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.DestroyableContext;
import javax.annotation.concurrent.Immutable;
diff --git a/briar-android/src/org/briarproject/android/controller/handler/UiResultHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultHandler.java
similarity index 80%
rename from briar-android/src/org/briarproject/android/controller/handler/UiResultHandler.java
rename to briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultHandler.java
index 6516ff715..89bd919d4 100644
--- a/briar-android/src/org/briarproject/android/controller/handler/UiResultHandler.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultHandler.java
@@ -1,8 +1,8 @@
-package org.briarproject.android.controller.handler;
+package org.briarproject.briar.android.controller.handler;
import android.support.annotation.UiThread;
-import org.briarproject.android.DestroyableContext;
+import org.briarproject.briar.android.DestroyableContext;
public abstract class UiResultHandler implements ResultHandler {
diff --git a/briar-android/src/org/briarproject/android/forum/CreateForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/forum/CreateForumActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java
index 4c9024599..86822c7a2 100644
--- a/briar-android/src/org/briarproject/android/forum/CreateForumActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.forum;
+package org.briarproject.briar.android.forum;
import android.content.Intent;
import android.os.Bundle;
@@ -14,16 +14,19 @@ import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.forum.ForumManager;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.api.forum.Forum;
+import org.briarproject.briar.api.forum.ForumManager;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.view.View.GONE;
@@ -31,8 +34,10 @@ import static android.view.View.VISIBLE;
import static android.widget.Toast.LENGTH_LONG;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.forum.ForumConstants.MAX_FORUM_NAME_LENGTH;
+import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_NAME_LENGTH;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class CreateForumActivity extends BriarActivity
implements OnEditorActionListener, OnClickListener {
@@ -49,7 +54,7 @@ public class CreateForumActivity extends BriarActivity
protected volatile ForumManager forumManager;
@Override
- public void onCreate(Bundle state) {
+ public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
setContentView(R.layout.activity_create_forum);
diff --git a/briar-android/src/org/briarproject/android/forum/ForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/forum/ForumActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
index 0fe164367..ad961043d 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
@@ -1,11 +1,10 @@
-package org.briarproject.android.forum;
+package org.briarproject.briar.android.forum;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
@@ -16,27 +15,28 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.sharing.ForumSharingStatusActivity;
-import org.briarproject.android.sharing.ShareForumActivity;
-import org.briarproject.android.threaded.ThreadItemAdapter;
-import org.briarproject.android.threaded.ThreadListActivity;
-import org.briarproject.android.threaded.ThreadListController;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.forum.ForumPostHeader;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.sharing.ForumSharingStatusActivity;
+import org.briarproject.briar.android.sharing.ShareForumActivity;
+import org.briarproject.briar.android.threaded.ThreadItemAdapter;
+import org.briarproject.briar.android.threaded.ThreadListActivity;
+import org.briarproject.briar.android.threaded.ThreadListController;
+import org.briarproject.briar.api.forum.Forum;
+import org.briarproject.briar.api.forum.ForumPostHeader;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
import static android.widget.Toast.LENGTH_SHORT;
-import static org.briarproject.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumController.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumController.java
new file mode 100644
index 000000000..8b99ab174
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumController.java
@@ -0,0 +1,12 @@
+package org.briarproject.briar.android.forum;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.threaded.ThreadListController;
+import org.briarproject.briar.api.forum.Forum;
+import org.briarproject.briar.api.forum.ForumPostHeader;
+
+@NotNullByDefault
+interface ForumController
+ extends ThreadListController {
+
+}
diff --git a/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java
similarity index 70%
rename from briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java
index 7cc859614..3b9f91f61 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java
@@ -1,39 +1,40 @@
-package org.briarproject.android.forum;
+package org.briarproject.briar.android.forum;
-import android.support.annotation.Nullable;
-
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.android.threaded.ThreadListController.ThreadListListener;
-import org.briarproject.android.threaded.ThreadListControllerImpl;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.ForumPostReceivedEvent;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.forum.ForumManager;
-import org.briarproject.api.forum.ForumPost;
-import org.briarproject.api.forum.ForumPostHeader;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.android.threaded.ThreadListController.ThreadListListener;
+import org.briarproject.briar.android.threaded.ThreadListControllerImpl;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+import org.briarproject.briar.api.forum.Forum;
+import org.briarproject.briar.api.forum.ForumManager;
+import org.briarproject.briar.api.forum.ForumPost;
+import org.briarproject.briar.api.forum.ForumPostHeader;
+import org.briarproject.briar.api.forum.event.ForumPostReceivedEvent;
import java.util.Collection;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static java.lang.Math.max;
import static java.util.logging.Level.WARNING;
-class ForumControllerImpl
- extends ThreadListControllerImpl>
+@NotNullByDefault
+class ForumControllerImpl extends
+ ThreadListControllerImpl>
implements ForumController {
private static final Logger LOG =
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumItem.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumItem.java
new file mode 100644
index 000000000..51070e906
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumItem.java
@@ -0,0 +1,25 @@
+package org.briarproject.briar.android.forum;
+
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.Author.Status;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.android.threaded.ThreadItem;
+import org.briarproject.briar.api.forum.ForumPostHeader;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+class ForumItem extends ThreadItem {
+
+ ForumItem(ForumPostHeader h, String body) {
+ super(h.getId(), h.getParentId(), body, h.getTimestamp(), h.getAuthor(),
+ h.getAuthorStatus(), h.isRead());
+ }
+
+ ForumItem(MessageId messageId, @Nullable MessageId parentId, String text,
+ long timestamp, Author author, Status status) {
+ super(messageId, parentId, text, timestamp, author, status, true);
+ }
+
+}
diff --git a/briar-android/src/org/briarproject/android/forum/ForumListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/forum/ForumListAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java
index 040b81662..46d8007fb 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumListAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.forum;
+package org.briarproject.briar.android.forum;
import android.content.Context;
import android.content.Intent;
@@ -9,18 +9,18 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.android.util.BriarAdapter;
-import org.briarproject.android.view.TextAvatarView;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.BriarAdapter;
+import org.briarproject.briar.android.util.UiUtils;
+import org.briarproject.briar.android.view.TextAvatarView;
+import org.briarproject.briar.api.forum.Forum;
import static android.support.v7.util.SortedList.INVALID_POSITION;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.android.BriarActivity.GROUP_NAME;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_NAME;
class ForumListAdapter
extends BriarAdapter {
@@ -72,7 +72,7 @@ class ForumListAdapter
ui.date.setVisibility(GONE);
} else {
long timestamp = item.getTimestamp();
- ui.date.setText(AndroidUtils.formatDate(ctx, timestamp));
+ ui.date.setText(UiUtils.formatDate(ctx, timestamp));
ui.date.setVisibility(VISIBLE);
}
diff --git a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java
similarity index 80%
rename from briar-android/src/org/briarproject/android/forum/ForumListFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java
index 9fb886f43..5b40f28dc 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java
@@ -1,8 +1,7 @@
-package org.briarproject.android.forum;
+package org.briarproject.briar.android.forum;
import android.content.Intent;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
@@ -14,38 +13,43 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.fragment.BaseEventFragment;
-import org.briarproject.android.sharing.ForumInvitationActivity;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchGroupException;
-import org.briarproject.api.event.ContactRemovedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.ForumInvitationReceivedEvent;
-import org.briarproject.api.event.ForumPostReceivedEvent;
-import org.briarproject.api.event.GroupAddedEvent;
-import org.briarproject.api.event.GroupRemovedEvent;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.forum.ForumManager;
-import org.briarproject.api.forum.ForumPostHeader;
-import org.briarproject.api.forum.ForumSharingManager;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.NoSuchGroupException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.event.GroupAddedEvent;
+import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.fragment.BaseEventFragment;
+import org.briarproject.briar.android.sharing.ForumInvitationActivity;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+import org.briarproject.briar.api.forum.Forum;
+import org.briarproject.briar.api.forum.ForumManager;
+import org.briarproject.briar.api.forum.ForumPostHeader;
+import org.briarproject.briar.api.forum.ForumSharingManager;
+import org.briarproject.briar.api.forum.event.ForumInvitationRequestReceivedEvent;
+import org.briarproject.briar.api.forum.event.ForumPostReceivedEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.support.design.widget.Snackbar.LENGTH_INDEFINITE;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.forum.ForumManager.CLIENT_ID;
+import static org.briarproject.briar.api.forum.ForumManager.CLIENT_ID;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class ForumListFragment extends BaseEventFragment implements
OnClickListener {
@@ -76,8 +80,9 @@ public class ForumListFragment extends BaseEventFragment implements
@Nullable
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
View contentView =
inflater.inflate(R.layout.fragment_forum_list, container,
@@ -251,7 +256,7 @@ public class ForumListFragment extends BaseEventFragment implements
ForumPostReceivedEvent f = (ForumPostReceivedEvent) e;
LOG.info("Forum post added, updating item");
updateItem(f.getGroupId(), f.getForumPostHeader());
- } else if (e instanceof ForumInvitationReceivedEvent) {
+ } else if (e instanceof ForumInvitationRequestReceivedEvent) {
LOG.info("Forum invitation received, reloading available forums");
loadAvailableForums();
}
diff --git a/briar-android/src/org/briarproject/android/forum/ForumListItem.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListItem.java
similarity index 76%
rename from briar-android/src/org/briarproject/android/forum/ForumListItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListItem.java
index 281eb64b4..5341d3f1f 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumListItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListItem.java
@@ -1,8 +1,8 @@
-package org.briarproject.android.forum;
+package org.briarproject.briar.android.forum;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.forum.ForumPostHeader;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+import org.briarproject.briar.api.forum.Forum;
+import org.briarproject.briar.api.forum.ForumPostHeader;
// This class is NOT thread-safe
class ForumListItem {
diff --git a/briar-android/src/org/briarproject/android/forum/ForumModule.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumModule.java
similarity index 64%
rename from briar-android/src/org/briarproject/android/forum/ForumModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/forum/ForumModule.java
index 9b665673b..06ebbd1f9 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumModule.java
@@ -1,7 +1,7 @@
-package org.briarproject.android.forum;
+package org.briarproject.briar.android.forum;
-import org.briarproject.android.ActivityScope;
-import org.briarproject.android.BaseActivity;
+import org.briarproject.briar.android.activity.ActivityScope;
+import org.briarproject.briar.android.activity.BaseActivity;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-android/src/org/briarproject/android/fragment/BaseEventFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseEventFragment.java
similarity index 68%
rename from briar-android/src/org/briarproject/android/fragment/BaseEventFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseEventFragment.java
index cf7884053..6e8d1ddd4 100644
--- a/briar-android/src/org/briarproject/android/fragment/BaseEventFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseEventFragment.java
@@ -1,7 +1,7 @@
-package org.briarproject.android.fragment;
+package org.briarproject.briar.android.fragment;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
import javax.inject.Inject;
diff --git a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java
similarity index 90%
rename from briar-android/src/org/briarproject/android/fragment/BaseFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java
index 594cd841f..8a5923119 100644
--- a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java
@@ -1,16 +1,17 @@
-package org.briarproject.android.fragment;
+package org.briarproject.briar.android.fragment;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.CallSuper;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v4.app.Fragment;
import android.view.MenuItem;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.DestroyableContext;
+import org.briarproject.briar.android.DestroyableContext;
+import org.briarproject.briar.android.activity.ActivityComponent;
+
+import javax.annotation.Nullable;
public abstract class BaseFragment extends Fragment
implements DestroyableContext {
diff --git a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/introduction/ContactChooserFragment.java
similarity index 80%
rename from briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/introduction/ContactChooserFragment.java
index 20fbd0871..79f78b7cb 100644
--- a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/introduction/ContactChooserFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.introduction;
+package org.briarproject.briar.android.introduction;
import android.content.Context;
import android.os.Build;
@@ -9,20 +9,20 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.android.contact.ContactListAdapter;
-import org.briarproject.android.contact.ContactListItem;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.messaging.ConversationManager;
-import org.briarproject.api.plugins.ConnectionRegistry;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.plugin.ConnectionRegistry;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
+import org.briarproject.briar.android.contact.ContactListAdapter;
+import org.briarproject.briar.android.contact.ContactListItem;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+import org.briarproject.briar.api.messaging.ConversationManager;
import java.util.ArrayList;
import java.util.List;
diff --git a/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionActivity.java
similarity index 86%
rename from briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionActivity.java
index 8e9d5c389..2b66f8e2e 100644
--- a/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.introduction;
+package org.briarproject.briar.android.introduction;
import android.content.Intent;
import android.os.Build;
@@ -9,13 +9,12 @@ import android.transition.Fade;
import android.view.MenuItem;
import android.view.View;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener;
public class IntroductionActivity extends BriarActivity
implements BaseFragmentListener {
diff --git a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
similarity index 88%
rename from briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
index f5c9c32a6..c50db5a15 100644
--- a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.introduction;
+package org.briarproject.briar.android.introduction;
import android.content.Context;
import android.os.Bundle;
@@ -10,18 +10,18 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.view.TextInputView;
-import org.briarproject.android.view.TextInputView.TextInputListener;
-import org.briarproject.api.FormatException;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.introduction.IntroductionManager;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.view.TextInputView;
+import org.briarproject.briar.android.view.TextInputView.TextInputListener;
+import org.briarproject.briar.api.introduction.IntroductionManager;
import java.util.logging.Logger;
@@ -35,7 +35,7 @@ import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static android.widget.Toast.LENGTH_SHORT;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.introduction.IntroductionConstants.MAX_INTRODUCTION_MESSAGE_LENGTH;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_INTRODUCTION_MESSAGE_LENGTH;
public class IntroductionMessageFragment extends BaseFragment
implements TextInputListener {
diff --git a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/invitation/AddContactActivity.java
similarity index 91%
rename from briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/invitation/AddContactActivity.java
index 543b2c988..b3e42e085 100644
--- a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/invitation/AddContactActivity.java
@@ -1,22 +1,22 @@
-package org.briarproject.android.invitation;
+package org.briarproject.briar.android.invitation;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.api.ReferenceManager;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.invitation.InvitationListener;
-import org.briarproject.api.invitation.InvitationState;
-import org.briarproject.api.invitation.InvitationTask;
-import org.briarproject.api.invitation.InvitationTaskFactory;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.invitation.InvitationListener;
+import org.briarproject.bramble.api.invitation.InvitationState;
+import org.briarproject.bramble.api.invitation.InvitationTask;
+import org.briarproject.bramble.api.invitation.InvitationTaskFactory;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.api.android.ReferenceManager;
import java.util.logging.Logger;
@@ -25,9 +25,9 @@ import javax.inject.Inject;
import static android.widget.Toast.LENGTH_LONG;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.invitation.ConfirmationCodeView.ConfirmationState.CONNECTED;
-import static org.briarproject.android.invitation.ConfirmationCodeView.ConfirmationState.DETAILS;
-import static org.briarproject.android.invitation.ConfirmationCodeView.ConfirmationState.WAIT_FOR_CONTACT;
+import static org.briarproject.briar.android.invitation.ConfirmationCodeView.ConfirmationState.CONNECTED;
+import static org.briarproject.briar.android.invitation.ConfirmationCodeView.ConfirmationState.DETAILS;
+import static org.briarproject.briar.android.invitation.ConfirmationCodeView.ConfirmationState.WAIT_FOR_CONTACT;
public class AddContactActivity extends BriarActivity
implements InvitationListener {
diff --git a/briar-android/src/org/briarproject/android/invitation/AddContactView.java b/briar-android/src/main/java/org/briarproject/briar/android/invitation/AddContactView.java
similarity index 88%
rename from briar-android/src/org/briarproject/android/invitation/AddContactView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/invitation/AddContactView.java
index 6a6b300be..3ca73869a 100644
--- a/briar-android/src/org/briarproject/android/invitation/AddContactView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/invitation/AddContactView.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.invitation;
+package org.briarproject.briar.android.invitation;
import android.content.Context;
import android.widget.LinearLayout;
diff --git a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java b/briar-android/src/main/java/org/briarproject/briar/android/invitation/ChooseIdentityView.java
similarity index 84%
rename from briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/invitation/ChooseIdentityView.java
index 8527a67a7..3e6819da3 100644
--- a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/invitation/ChooseIdentityView.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.invitation;
+package org.briarproject.briar.android.invitation;
import android.content.Context;
import android.content.Intent;
@@ -7,11 +7,11 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import static android.bluetooth.BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE;
import static android.bluetooth.BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION;
-import static org.briarproject.android.invitation.AddContactActivity.REQUEST_BLUETOOTH;
+import static org.briarproject.briar.android.invitation.AddContactActivity.REQUEST_BLUETOOTH;
class ChooseIdentityView extends AddContactView implements OnClickListener {
@@ -19,6 +19,7 @@ class ChooseIdentityView extends AddContactView implements OnClickListener {
super(ctx);
}
+ @Override
void populate() {
removeAllViews();
Context ctx = getContext();
@@ -33,6 +34,7 @@ class ChooseIdentityView extends AddContactView implements OnClickListener {
container.loadLocalAuthor();
}
+ @Override
public void onClick(View view) {
Intent i = new Intent(ACTION_REQUEST_DISCOVERABLE);
i.putExtra(EXTRA_DISCOVERABLE_DURATION, 120);
diff --git a/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java b/briar-android/src/main/java/org/briarproject/briar/android/invitation/ConfirmationCodeView.java
similarity index 97%
rename from briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/invitation/ConfirmationCodeView.java
index bfb2cc338..2bd953a9b 100644
--- a/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/invitation/ConfirmationCodeView.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.invitation;
+package org.briarproject.briar.android.invitation;
import android.content.Context;
import android.text.Editable;
@@ -12,7 +12,7 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import static android.content.Context.INPUT_METHOD_SERVICE;
@@ -31,6 +31,7 @@ class ConfirmationCodeView extends AddContactView {
this.state = state;
}
+ @Override
void populate() {
removeAllViews();
Context ctx = getContext();
diff --git a/briar-android/src/org/briarproject/android/invitation/ErrorView.java b/briar-android/src/main/java/org/briarproject/briar/android/invitation/ErrorView.java
similarity index 88%
rename from briar-android/src/org/briarproject/android/invitation/ErrorView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/invitation/ErrorView.java
index fa0f8fc33..ab01e333c 100644
--- a/briar-android/src/org/briarproject/android/invitation/ErrorView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/invitation/ErrorView.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.invitation;
+package org.briarproject.briar.android.invitation;
import android.content.Context;
import android.content.Intent;
@@ -8,11 +8,11 @@ import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import static android.bluetooth.BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE;
import static android.bluetooth.BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION;
-import static org.briarproject.android.invitation.AddContactActivity.REQUEST_BLUETOOTH;
+import static org.briarproject.briar.android.invitation.AddContactActivity.REQUEST_BLUETOOTH;
class ErrorView extends AddContactView implements OnClickListener {
@@ -31,6 +31,7 @@ class ErrorView extends AddContactView implements OnClickListener {
this.explanation = explanation;
}
+ @Override
void populate() {
removeAllViews();
Context ctx = getContext();
@@ -49,6 +50,7 @@ class ErrorView extends AddContactView implements OnClickListener {
tryAgainButton.setOnClickListener(this);
}
+ @Override
public void onClick(View view) {
Intent i = new Intent(ACTION_REQUEST_DISCOVERABLE);
i.putExtra(EXTRA_DISCOVERABLE_DURATION, 120);
diff --git a/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java b/briar-android/src/main/java/org/briarproject/briar/android/invitation/InvitationCodeView.java
similarity index 97%
rename from briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/invitation/InvitationCodeView.java
index 60c221798..bfc7272a6 100644
--- a/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/invitation/InvitationCodeView.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.invitation;
+package org.briarproject.briar.android.invitation;
import android.content.Context;
import android.text.Editable;
@@ -12,7 +12,7 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import static android.content.Context.INPUT_METHOD_SERVICE;
@@ -29,6 +29,7 @@ class InvitationCodeView extends AddContactView {
this(ctx, false);
}
+ @Override
void populate() {
removeAllViews();
Context ctx = getContext();
diff --git a/briar-android/src/org/briarproject/android/view/CameraView.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java
similarity index 98%
rename from briar-android/src/org/briarproject/android/view/CameraView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java
index 962b84667..89bb71a94 100644
--- a/briar-android/src/org/briarproject/android/view/CameraView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.view;
+package org.briarproject.briar.android.keyagreement;
import android.content.Context;
import android.hardware.Camera;
@@ -13,9 +13,8 @@ import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
-import org.briarproject.android.util.PreviewConsumer;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import java.io.IOException;
import java.util.List;
diff --git a/briar-android/src/org/briarproject/android/keyagreement/IntroFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/IntroFragment.java
similarity index 73%
rename from briar-android/src/org/briarproject/android/keyagreement/IntroFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/keyagreement/IntroFragment.java
index 6ce313f37..db37ed933 100644
--- a/briar-android/src/org/briarproject/android/keyagreement/IntroFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/IntroFragment.java
@@ -1,20 +1,25 @@
-package org.briarproject.android.keyagreement;
+package org.briarproject.briar.android.keyagreement;
import android.content.Context;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ScrollView;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.fragment.BaseFragment;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.fragment.BaseFragment;
+
+import javax.annotation.Nullable;
import static android.view.View.FOCUS_DOWN;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class IntroFragment extends BaseFragment {
interface IntroScreenSeenListener {
@@ -27,9 +32,9 @@ public class IntroFragment extends BaseFragment {
private ScrollView scrollView;
public static IntroFragment newInstance() {
-
+
Bundle args = new Bundle();
-
+
IntroFragment fragment = new IntroFragment();
fragment.setArguments(args);
return fragment;
@@ -53,8 +58,9 @@ public class IntroFragment extends BaseFragment {
@Nullable
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_keyagreement_id, container,
false);
diff --git a/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java
similarity index 76%
rename from briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java
index 8a075f151..7d786bf2c 100644
--- a/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java
@@ -1,34 +1,39 @@
-package org.briarproject.android.keyagreement;
+package org.briarproject.briar.android.keyagreement;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarFragmentActivity;
-import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
-import org.briarproject.android.keyagreement.IntroFragment.IntroScreenSeenListener;
-import org.briarproject.api.contact.ContactExchangeListener;
-import org.briarproject.api.contact.ContactExchangeTask;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.KeyAgreementFinishedEvent;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.keyagreement.KeyAgreementResult;
+import org.briarproject.bramble.api.contact.ContactExchangeListener;
+import org.briarproject.bramble.api.contact.ContactExchangeTask;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementResult;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementFinishedEvent;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarFragmentActivity;
+import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener;
+import org.briarproject.briar.android.keyagreement.IntroFragment.IntroScreenSeenListener;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.widget.Toast.LENGTH_LONG;
import static java.util.logging.Level.WARNING;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class KeyAgreementActivity extends BriarFragmentActivity implements
BaseFragmentListener, IntroScreenSeenListener, EventListener,
ContactExchangeListener {
@@ -55,7 +60,7 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements
@SuppressWarnings("ConstantConditions")
@Override
- public void onCreate(Bundle state) {
+ public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
setContentView(R.layout.activity_plain);
diff --git a/briar-android/src/org/briarproject/android/util/PreviewConsumer.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/PreviewConsumer.java
similarity index 52%
rename from briar-android/src/org/briarproject/android/util/PreviewConsumer.java
rename to briar-android/src/main/java/org/briarproject/briar/android/keyagreement/PreviewConsumer.java
index fbe2b6726..9e5d7a5e9 100644
--- a/briar-android/src/org/briarproject/android/util/PreviewConsumer.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/PreviewConsumer.java
@@ -1,10 +1,13 @@
-package org.briarproject.android.util;
+package org.briarproject.briar.android.keyagreement;
import android.hardware.Camera;
import android.support.annotation.UiThread;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
@SuppressWarnings("deprecation")
-public interface PreviewConsumer {
+@NotNullByDefault
+interface PreviewConsumer {
@UiThread
void start(Camera camera);
diff --git a/briar-android/src/org/briarproject/android/util/QrCodeDecoder.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java
similarity index 84%
rename from briar-android/src/org/briarproject/android/util/QrCodeDecoder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java
index 0e9530c08..e69dc2da7 100644
--- a/briar-android/src/org/briarproject/android/util/QrCodeDecoder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.util;
+package org.briarproject.briar.android.keyagreement;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
@@ -15,12 +15,18 @@ import com.google.zxing.Result;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+
import java.util.logging.Logger;
import static java.util.logging.Level.INFO;
@SuppressWarnings("deprecation")
-public class QrCodeDecoder implements PreviewConsumer, PreviewCallback {
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+class QrCodeDecoder implements PreviewConsumer, PreviewCallback {
private static final Logger LOG =
Logger.getLogger(QrCodeDecoder.class.getName());
@@ -30,7 +36,7 @@ public class QrCodeDecoder implements PreviewConsumer, PreviewCallback {
private Camera camera = null;
- public QrCodeDecoder(ResultCallback callback) {
+ QrCodeDecoder(ResultCallback callback) {
this.callback = callback;
}
@@ -99,7 +105,8 @@ public class QrCodeDecoder implements PreviewConsumer, PreviewCallback {
}
}
- public interface ResultCallback {
+ @NotNullByDefault
+ interface ResultCallback {
void handleResult(Result result);
}
diff --git a/briar-android/src/org/briarproject/android/util/QrCodeUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeUtils.java
similarity index 84%
rename from briar-android/src/org/briarproject/android/util/QrCodeUtils.java
rename to briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeUtils.java
index 57a092eeb..43286f6fd 100644
--- a/briar-android/src/org/briarproject/android/util/QrCodeUtils.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeUtils.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.util;
+package org.briarproject.briar.android.keyagreement;
import android.graphics.Bitmap;
import android.util.DisplayMetrics;
@@ -7,23 +7,26 @@ import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static android.graphics.Bitmap.Config.ARGB_8888;
import static android.graphics.Color.BLACK;
import static android.graphics.Color.WHITE;
import static com.google.zxing.BarcodeFormat.QR_CODE;
import static java.util.logging.Level.WARNING;
-public class QrCodeUtils {
+@NotNullByDefault
+class QrCodeUtils {
private static final Logger LOG =
Logger.getLogger(QrCodeUtils.class.getName());
@Nullable
- public static Bitmap createQrCode(DisplayMetrics dm, String input) {
+ static Bitmap createQrCode(DisplayMetrics dm, String input) {
int smallestDimen = Math.min(dm.widthPixels, dm.heightPixels);
try {
// Generate QR code
diff --git a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java
index 073a97132..f20bb4d78 100644
--- a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.keyagreement;
+package org.briarproject.briar.android.keyagreement;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
@@ -8,7 +8,6 @@ import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.util.Base64;
import android.util.DisplayMetrics;
@@ -22,31 +21,31 @@ import android.widget.Toast;
import com.google.zxing.Result;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.api.AndroidExecutor;
-import org.briarproject.android.fragment.BaseEventFragment;
-import org.briarproject.android.util.QrCodeDecoder;
-import org.briarproject.android.util.QrCodeUtils;
-import org.briarproject.android.view.CameraView;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.KeyAgreementAbortedEvent;
-import org.briarproject.api.event.KeyAgreementFailedEvent;
-import org.briarproject.api.event.KeyAgreementFinishedEvent;
-import org.briarproject.api.event.KeyAgreementListeningEvent;
-import org.briarproject.api.event.KeyAgreementStartedEvent;
-import org.briarproject.api.event.KeyAgreementWaitingEvent;
-import org.briarproject.api.keyagreement.KeyAgreementTask;
-import org.briarproject.api.keyagreement.KeyAgreementTaskFactory;
-import org.briarproject.api.keyagreement.Payload;
-import org.briarproject.api.keyagreement.PayloadEncoder;
-import org.briarproject.api.keyagreement.PayloadParser;
-import org.briarproject.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementTask;
+import org.briarproject.bramble.api.keyagreement.KeyAgreementTaskFactory;
+import org.briarproject.bramble.api.keyagreement.Payload;
+import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
+import org.briarproject.bramble.api.keyagreement.PayloadParser;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementAbortedEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementFailedEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementFinishedEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementListeningEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementStartedEvent;
+import org.briarproject.bramble.api.keyagreement.event.KeyAgreementWaitingEvent;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.fragment.BaseEventFragment;
import java.io.IOException;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.bluetooth.BluetoothAdapter.ACTION_STATE_CHANGED;
@@ -58,6 +57,8 @@ import static android.view.View.VISIBLE;
import static android.widget.Toast.LENGTH_LONG;
import static java.util.logging.Level.INFO;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class ShowQrCodeFragment extends BaseEventFragment
implements QrCodeDecoder.ResultCallback {
@@ -108,14 +109,15 @@ public class ShowQrCodeFragment extends BaseEventFragment
@Nullable
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_keyagreement_qr, container,
false);
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
cameraView = (CameraView) view.findViewById(R.id.camera_view);
@@ -129,7 +131,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
}
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getActivity().setRequestedOrientation(SCREEN_ORIENTATION_NOSENSOR);
@@ -173,7 +175,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
@UiThread
private void startListening() {
final KeyAgreementTask oldTask = task;
- final KeyAgreementTask newTask = keyAgreementTaskFactory.getTask();
+ final KeyAgreementTask newTask = keyAgreementTaskFactory.createTask();
task = newTask;
ioExecutor.execute(new Runnable() {
@Override
@@ -265,7 +267,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
}
@Override
- protected void onPostExecute(Bitmap bitmap) {
+ protected void onPostExecute(@Nullable Bitmap bitmap) {
if (bitmap != null && !isDetached()) {
qrCode.setImageBitmap(bitmap);
// Simple fade-in animation
diff --git a/briar-android/src/org/briarproject/android/ChangePasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/ChangePasswordActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java
index 4c93924ea..6b6c717fe 100644
--- a/briar-android/src/org/briarproject/android/ChangePasswordActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.login;
import android.os.Bundle;
import android.support.annotation.NonNull;
@@ -15,22 +15,20 @@ import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.controller.PasswordController;
-import org.briarproject.android.controller.SetupController;
-import org.briarproject.android.controller.handler.UiResultHandler;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.android.util.StrengthMeter;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BaseActivity;
+import org.briarproject.briar.android.controller.handler.UiResultHandler;
+import org.briarproject.briar.android.util.UiUtils;
import javax.inject.Inject;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
-import static org.briarproject.api.crypto.PasswordStrengthEstimator.WEAK;
+import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.WEAK;
public class ChangePasswordActivity extends BaseActivity
- implements OnClickListener,
- OnEditorActionListener {
+ implements OnClickListener, OnEditorActionListener {
@Inject
protected PasswordController passwordController;
@@ -109,10 +107,10 @@ public class ChangePasswordActivity extends BaseActivity
float strength =
setupController.estimatePasswordStrength(firstPassword);
strengthMeter.setStrength(strength);
- AndroidUtils.setError(newPasswordEntryWrapper,
+ UiUtils.setError(newPasswordEntryWrapper,
getString(R.string.password_too_weak),
firstPassword.length() > 0 && strength < WEAK);
- AndroidUtils.setError(newPasswordConfirmationWrapper,
+ UiUtils.setError(newPasswordConfirmationWrapper,
getString(R.string.passwords_do_not_match),
secondPassword.length() > 0 && !passwordsMatch);
changePasswordButton.setEnabled(
@@ -150,7 +148,7 @@ public class ChangePasswordActivity extends BaseActivity
}
private void tryAgain() {
- AndroidUtils.setError(currentPasswordEntryWrapper,
+ UiUtils.setError(currentPasswordEntryWrapper,
getString(R.string.try_again), true);
changePasswordButton.setVisibility(VISIBLE);
progress.setVisibility(INVISIBLE);
diff --git a/briar-android/src/org/briarproject/android/PasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java
similarity index 89%
rename from briar-android/src/org/briarproject/android/PasswordActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java
index 751b6adcd..3606f077f 100644
--- a/briar-android/src/org/briarproject/android/PasswordActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.login;
import android.content.DialogInterface;
import android.content.Intent;
@@ -16,10 +16,11 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
-import org.briarproject.R;
-import org.briarproject.android.controller.PasswordController;
-import org.briarproject.android.controller.handler.UiResultHandler;
-import org.briarproject.android.util.AndroidUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BaseActivity;
+import org.briarproject.briar.android.controller.handler.UiResultHandler;
+import org.briarproject.briar.android.util.UiUtils;
import javax.inject.Inject;
@@ -70,7 +71,7 @@ public class PasswordActivity extends BaseActivity {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
- if (count > 0) AndroidUtils.setError(input, null, false);
+ if (count > 0) UiUtils.setError(input, null, false);
}
@Override
@@ -140,7 +141,7 @@ public class PasswordActivity extends BaseActivity {
}
private void tryAgain() {
- AndroidUtils.setError(input, getString(R.string.try_again), true);
+ UiUtils.setError(input, getString(R.string.try_again), true);
signInButton.setVisibility(VISIBLE);
progress.setVisibility(INVISIBLE);
password.setText("");
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordController.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordController.java
new file mode 100644
index 000000000..209b5ac4a
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordController.java
@@ -0,0 +1,15 @@
+package org.briarproject.briar.android.login;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.controller.ConfigController;
+import org.briarproject.briar.android.controller.handler.ResultHandler;
+
+@NotNullByDefault
+public interface PasswordController extends ConfigController {
+
+ void validatePassword(String password,
+ ResultHandler resultHandler);
+
+ void changePassword(String password, String newPassword,
+ ResultHandler resultHandler);
+}
diff --git a/briar-android/src/org/briarproject/android/controller/PasswordControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java
similarity index 81%
rename from briar-android/src/org/briarproject/android/controller/PasswordControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java
index 9ea926474..ac01eba47 100644
--- a/briar-android/src/org/briarproject/android/controller/PasswordControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java
@@ -1,13 +1,15 @@
-package org.briarproject.android.controller;
+package org.briarproject.briar.android.login;
import android.content.SharedPreferences;
-import org.briarproject.android.controller.handler.ResultHandler;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.android.controller.ConfigControllerImpl;
+import org.briarproject.briar.android.controller.handler.ResultHandler;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
@@ -16,6 +18,7 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
+@NotNullByDefault
public class PasswordControllerImpl extends ConfigControllerImpl
implements PasswordController {
diff --git a/briar-android/src/org/briarproject/android/SetupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupActivity.java
similarity index 85%
rename from briar-android/src/org/briarproject/android/SetupActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/login/SetupActivity.java
index 0dcce3d72..be3627dc8 100644
--- a/briar-android/src/org/briarproject/android/SetupActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.login;
import android.content.Intent;
import android.os.Bundle;
@@ -14,12 +14,13 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
-import org.briarproject.R;
-import org.briarproject.android.controller.SetupController;
-import org.briarproject.android.controller.handler.UiResultHandler;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.android.util.StrengthMeter;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BaseActivity;
+import org.briarproject.briar.android.controller.handler.UiResultHandler;
+import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
+import org.briarproject.briar.android.util.UiUtils;
import javax.inject.Inject;
@@ -27,8 +28,8 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.view.View.GONE;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
-import static org.briarproject.api.crypto.PasswordStrengthEstimator.WEAK;
-import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
+import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.WEAK;
+import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
public class SetupActivity extends BaseActivity implements OnClickListener,
OnEditorActionListener {
@@ -107,13 +108,13 @@ public class SetupActivity extends BaseActivity implements OnClickListener,
float strength =
setupController.estimatePasswordStrength(firstPassword);
strengthMeter.setStrength(strength);
- AndroidUtils.setError(nicknameEntryWrapper,
+ UiUtils.setError(nicknameEntryWrapper,
getString(R.string.name_too_long),
nicknameLength > MAX_AUTHOR_NAME_LENGTH);
- AndroidUtils.setError(passwordEntryWrapper,
+ UiUtils.setError(passwordEntryWrapper,
getString(R.string.password_too_weak),
firstPassword.length() > 0 && strength < WEAK);
- AndroidUtils.setError(passwordConfirmationWrapper,
+ UiUtils.setError(passwordConfirmationWrapper,
getString(R.string.passwords_do_not_match),
secondPassword.length() > 0 && !passwordsMatch);
createAccountButton.setEnabled(nicknameLength > 0
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupController.java b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupController.java
new file mode 100644
index 000000000..5e72acb93
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupController.java
@@ -0,0 +1,14 @@
+package org.briarproject.briar.android.login;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.controller.handler.ResultHandler;
+
+@NotNullByDefault
+public interface SetupController {
+
+ float estimatePasswordStrength(String password);
+
+ void storeAuthorInfo(String nickname, String password,
+ ResultHandler resultHandler);
+
+}
diff --git a/briar-android/src/org/briarproject/android/controller/SetupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java
similarity index 70%
rename from briar-android/src/org/briarproject/android/controller/SetupControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java
index 356137008..f413ca736 100644
--- a/briar-android/src/org/briarproject/android/controller/SetupControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java
@@ -1,18 +1,20 @@
-package org.briarproject.android.controller;
+package org.briarproject.briar.android.login;
import android.content.SharedPreferences;
-import org.briarproject.android.controller.handler.ResultHandler;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.crypto.PasswordStrengthEstimator;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.crypto.CryptoComponent;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.controller.handler.ResultHandler;
import java.util.concurrent.Executor;
import javax.inject.Inject;
+@NotNullByDefault
public class SetupControllerImpl extends PasswordControllerImpl
implements SetupController {
diff --git a/briar-android/src/org/briarproject/android/util/StrengthMeter.java b/briar-android/src/main/java/org/briarproject/briar/android/login/StrengthMeter.java
similarity index 85%
rename from briar-android/src/org/briarproject/android/util/StrengthMeter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/login/StrengthMeter.java
index 83fb20b8f..b740c1431 100644
--- a/briar-android/src/org/briarproject/android/util/StrengthMeter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/StrengthMeter.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.util;
+package org.briarproject.briar.android.login;
import android.content.Context;
import android.graphics.Color;
@@ -15,10 +15,10 @@ import static android.graphics.Paint.Style.FILL;
import static android.graphics.Paint.Style.STROKE;
import static android.graphics.drawable.ClipDrawable.HORIZONTAL;
import static android.view.Gravity.LEFT;
-import static org.briarproject.api.crypto.PasswordStrengthEstimator.QUITE_STRONG;
-import static org.briarproject.api.crypto.PasswordStrengthEstimator.QUITE_WEAK;
-import static org.briarproject.api.crypto.PasswordStrengthEstimator.STRONG;
-import static org.briarproject.api.crypto.PasswordStrengthEstimator.WEAK;
+import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_STRONG;
+import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_WEAK;
+import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.STRONG;
+import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.WEAK;
public class StrengthMeter extends ProgressBar {
diff --git a/briar-android/src/org/briarproject/android/NavDrawerActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java
similarity index 82%
rename from briar-android/src/org/briarproject/android/NavDrawerActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java
index b84afd8b9..e2edf7c98 100644
--- a/briar-android/src/org/briarproject/android/NavDrawerActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.navdrawer;
import android.content.Context;
import android.content.Intent;
@@ -9,6 +9,7 @@ import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.design.widget.NavigationView.OnNavigationItemSelectedListener;
import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
@@ -20,18 +21,19 @@ import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.blogs.FeedFragment;
-import org.briarproject.android.contact.ContactListFragment;
-import org.briarproject.android.controller.NavDrawerController;
-import org.briarproject.android.controller.TransportStateListener;
-import org.briarproject.android.forum.ForumListFragment;
-import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
-import org.briarproject.android.privategroup.list.GroupListFragment;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.plugins.BluetoothConstants;
-import org.briarproject.api.plugins.LanTcpConstants;
-import org.briarproject.api.plugins.TorConstants;
+import org.briarproject.bramble.api.plugin.BluetoothConstants;
+import org.briarproject.bramble.api.plugin.LanTcpConstants;
+import org.briarproject.bramble.api.plugin.TorConstants;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarFragmentActivity;
+import org.briarproject.briar.android.blog.FeedFragment;
+import org.briarproject.briar.android.contact.ContactListFragment;
+import org.briarproject.briar.android.forum.ForumListFragment;
+import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener;
+import org.briarproject.briar.android.privategroup.list.GroupListFragment;
+import org.briarproject.briar.android.settings.SettingsActivity;
import java.util.ArrayList;
import java.util.List;
@@ -41,17 +43,15 @@ import javax.inject.Inject;
import static android.support.v4.view.GravityCompat.START;
import static android.support.v4.widget.DrawerLayout.LOCK_MODE_LOCKED_CLOSED;
-import static android.support.v4.widget.DrawerLayout.LOCK_MODE_UNLOCKED;
-import static android.view.View.INVISIBLE;
public class NavDrawerActivity extends BriarFragmentActivity implements
BaseFragmentListener, TransportStateListener,
OnNavigationItemSelectedListener {
- static final String INTENT_CONTACTS = "intent_contacts";
- static final String INTENT_GROUPS = "intent_groups";
- static final String INTENT_FORUMS = "intent_forums";
- static final String INTENT_BLOGS = "intent_blogs";
+ public static final String INTENT_CONTACTS = "intent_contacts";
+ public static final String INTENT_GROUPS = "intent_groups";
+ public static final String INTENT_FORUMS = "intent_forums";
+ public static final String INTENT_BLOGS = "intent_blogs";
private static final Logger LOG =
Logger.getLogger(NavDrawerActivity.class.getName());
@@ -178,6 +178,24 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
}
}
+ @Override
+ public void onFragmentCreated(String tag) {
+ super.onFragmentCreated(tag);
+
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar == null) return;
+
+ if (tag.equals(ContactListFragment.TAG)) {
+ actionBar.setTitle(R.string.contact_list_button);
+ } else if (tag.equals(GroupListFragment.TAG)) {
+ actionBar.setTitle(R.string.groups_button);
+ } else if (tag.equals(ForumListFragment.TAG)) {
+ actionBar.setTitle(R.string.forums_button);
+ } else if (tag.equals(FeedFragment.TAG)) {
+ actionBar.setTitle(R.string.blogs_button);
+ }
+ }
+
@Override
public boolean onNavigationItemSelected(MenuItem item) {
drawerLayout.closeDrawer(START);
@@ -190,7 +208,6 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
return true;
}
-
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0
@@ -218,22 +235,11 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
@Override
protected void signOut() {
- showLoadingScreen(true, R.string.progress_title_logout);
- super.signOut();
- }
-
- public void showLoadingScreen(boolean isBlocking, int stringId) {
- if (isBlocking) {
- // Disable navigation drawer slide to open
- drawerLayout.setDrawerLockMode(LOCK_MODE_LOCKED_CLOSED);
- }
- progressTitle.setText(stringId);
+ // Disable navigation drawer slide to open
+ drawerLayout.setDrawerLockMode(LOCK_MODE_LOCKED_CLOSED);
+ progressTitle.setText(R.string.progress_title_logout);
progressViewGroup.setVisibility(View.VISIBLE);
- }
-
- public void hideLoadingScreen() {
- drawerLayout.setDrawerLockMode(LOCK_MODE_UNLOCKED);
- progressViewGroup.setVisibility(INVISIBLE);
+ super.signOut();
}
private void initializeTransports(final LayoutInflater inflater) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java
new file mode 100644
index 000000000..424fdb1ad
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java
@@ -0,0 +1,12 @@
+package org.briarproject.briar.android.navdrawer;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.briar.android.controller.ActivityLifecycleController;
+
+@NotNullByDefault
+public interface NavDrawerController extends ActivityLifecycleController {
+
+ boolean isTransportRunning(TransportId transportId);
+
+}
diff --git a/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java
similarity index 69%
rename from briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java
index fb75cfce2..26d945baa 100644
--- a/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java
@@ -1,17 +1,20 @@
-package org.briarproject.android.controller;
+package org.briarproject.briar.android.navdrawer;
import android.app.Activity;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.TransportDisabledEvent;
-import org.briarproject.api.event.TransportEnabledEvent;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.plugins.Plugin;
-import org.briarproject.api.plugins.PluginManager;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.Plugin;
+import org.briarproject.bramble.api.plugin.PluginManager;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.event.TransportDisabledEvent;
+import org.briarproject.bramble.api.plugin.event.TransportEnabledEvent;
+import org.briarproject.briar.android.controller.DbControllerImpl;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
@@ -20,6 +23,8 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class NavDrawerControllerImpl extends DbControllerImpl
implements NavDrawerController, EventListener {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/TransportStateListener.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/TransportStateListener.java
new file mode 100644
index 000000000..592263b6c
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/TransportStateListener.java
@@ -0,0 +1,9 @@
+package org.briarproject.briar.android.navdrawer;
+
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.briar.android.DestroyableContext;
+
+interface TransportStateListener extends DestroyableContext {
+
+ void stateUpdate(TransportId id, boolean enabled);
+}
diff --git a/briar-android/src/org/briarproject/android/panic/ExitActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/panic/ExitActivity.java
similarity index 74%
rename from briar-android/src/org/briarproject/android/panic/ExitActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/panic/ExitActivity.java
index 363270f26..bd027c39c 100644
--- a/briar-android/src/org/briarproject/android/panic/ExitActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/panic/ExitActivity.java
@@ -1,10 +1,10 @@
-package org.briarproject.android.panic;
+package org.briarproject.briar.android.panic;
import android.os.Build;
import android.os.Bundle;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BaseActivity;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BaseActivity;
import java.util.logging.Logger;
diff --git a/briar-android/src/org/briarproject/android/panic/PanicPreferencesActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesActivity.java
similarity index 78%
rename from briar-android/src/org/briarproject/android/panic/PanicPreferencesActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesActivity.java
index 7fbd2ff97..9c19c78b1 100644
--- a/briar-android/src/org/briarproject/android/panic/PanicPreferencesActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesActivity.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.panic;
+package org.briarproject.briar.android.panic;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.view.MenuItem;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
public class PanicPreferencesActivity extends BriarActivity {
diff --git a/briar-android/src/org/briarproject/android/panic/PanicPreferencesFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesFragment.java
similarity index 98%
rename from briar-android/src/org/briarproject/android/panic/PanicPreferencesFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesFragment.java
index f62dc0385..9251b85b3 100644
--- a/briar-android/src/org/briarproject/android/panic/PanicPreferencesFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.panic;
+package org.briarproject.briar.android.panic;
import android.app.Activity;
import android.content.ComponentName;
@@ -16,12 +16,13 @@ import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.text.TextUtils;
-import org.briarproject.R;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.briar.R;
import java.util.ArrayList;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import info.guardianproject.panic.Panic;
import info.guardianproject.panic.PanicResponder;
diff --git a/briar-android/src/org/briarproject/android/panic/PanicResponderActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java
similarity index 85%
rename from briar-android/src/org/briarproject/android/panic/PanicResponderActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java
index ba8583fca..f79030e7f 100644
--- a/briar-android/src/org/briarproject/android/panic/PanicResponderActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.panic;
+package org.briarproject.briar.android.panic;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -7,10 +7,10 @@ import android.os.Build;
import android.os.Bundle;
import android.support.v7.preference.PreferenceManager;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.api.AndroidExecutor;
-import org.briarproject.android.controller.ConfigController;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.controller.ConfigController;
import org.iilab.IilabEngineeringRSA2048Pin;
import java.util.logging.Logger;
@@ -23,9 +23,9 @@ import info.guardianproject.panic.PanicResponder;
import info.guardianproject.trustedintents.TrustedIntents;
import static android.content.Intent.ACTION_DELETE;
-import static org.briarproject.android.panic.PanicPreferencesFragment.KEY_LOCK;
-import static org.briarproject.android.panic.PanicPreferencesFragment.KEY_PURGE;
-import static org.briarproject.android.panic.PanicPreferencesFragment.KEY_UNINSTALL;
+import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_LOCK;
+import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_PURGE;
+import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_UNINSTALL;
public class PanicResponderActivity extends BriarActivity {
diff --git a/briar-android/src/org/briarproject/android/privategroup/VisibilityHelper.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/VisibilityHelper.java
similarity index 79%
rename from briar-android/src/org/briarproject/android/privategroup/VisibilityHelper.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/VisibilityHelper.java
index 678fde325..6c9de8c76 100644
--- a/briar-android/src/org/briarproject/android/privategroup/VisibilityHelper.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/VisibilityHelper.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.privategroup;
+package org.briarproject.briar.android.privategroup;
import android.content.Context;
import android.support.annotation.DrawableRes;
-import org.briarproject.R;
-import org.briarproject.api.privategroup.Visibility;
+import org.briarproject.briar.R;
+import org.briarproject.briar.api.privategroup.Visibility;
-import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
+import static org.briarproject.briar.api.privategroup.Visibility.INVISIBLE;
public class VisibilityHelper {
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
similarity index 85%
rename from briar-android/src/org/briarproject/android/privategroup/conversation/GroupActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
index 438c06112..e0502432f 100644
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
@@ -1,11 +1,10 @@
-package org.briarproject.android.privategroup.conversation;
+package org.briarproject.briar.android.privategroup.conversation;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
@@ -16,30 +15,31 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.controller.handler.UiExceptionHandler;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.privategroup.conversation.GroupController.GroupListener;
-import org.briarproject.android.privategroup.creation.GroupInviteActivity;
-import org.briarproject.android.privategroup.memberlist.GroupMemberListActivity;
-import org.briarproject.android.privategroup.reveal.RevealContactsActivity;
-import org.briarproject.android.threaded.ThreadListActivity;
-import org.briarproject.android.threaded.ThreadListController;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.privategroup.Visibility;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.controller.handler.UiExceptionHandler;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.privategroup.conversation.GroupController.GroupListener;
+import org.briarproject.briar.android.privategroup.creation.GroupInviteActivity;
+import org.briarproject.briar.android.privategroup.memberlist.GroupMemberListActivity;
+import org.briarproject.briar.android.privategroup.reveal.RevealContactsActivity;
+import org.briarproject.briar.android.threaded.ThreadListActivity;
+import org.briarproject.briar.android.threaded.ThreadListController;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
+import org.briarproject.briar.api.privategroup.Visibility;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
import static android.view.View.GONE;
-import static org.briarproject.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_BODY_LENGTH;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupController.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupController.java
new file mode 100644
index 000000000..c3e03c103
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupController.java
@@ -0,0 +1,32 @@
+package org.briarproject.briar.android.privategroup.conversation;
+
+import android.support.annotation.UiThread;
+
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.android.threaded.ThreadListController;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
+import org.briarproject.briar.api.privategroup.Visibility;
+
+public interface GroupController
+ extends
+ ThreadListController {
+
+ void loadLocalAuthor(
+ ResultExceptionHandler handler);
+
+ void isDissolved(
+ ResultExceptionHandler handler);
+
+ interface GroupListener extends ThreadListListener {
+ @UiThread
+ void onContactRelationshipRevealed(AuthorId memberId, Visibility v);
+
+ @UiThread
+ void onGroupDissolved();
+ }
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java
similarity index 75%
rename from briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java
index 7cea3d521..431c66a59 100644
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java
@@ -1,41 +1,44 @@
-package org.briarproject.android.privategroup.conversation;
+package org.briarproject.briar.android.privategroup.conversation;
-import android.support.annotation.Nullable;
-
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.android.privategroup.conversation.GroupController.GroupListener;
-import org.briarproject.android.threaded.ThreadListControllerImpl;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.GroupDissolvedEvent;
-import org.briarproject.api.event.GroupMessageAddedEvent;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.privategroup.ContactRelationshipRevealedEvent;
-import org.briarproject.api.privategroup.GroupMessage;
-import org.briarproject.api.privategroup.GroupMessageFactory;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.privategroup.JoinMessageHeader;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.android.privategroup.conversation.GroupController.GroupListener;
+import org.briarproject.briar.android.threaded.ThreadListControllerImpl;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+import org.briarproject.briar.api.privategroup.GroupMessage;
+import org.briarproject.briar.api.privategroup.GroupMessageFactory;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
+import org.briarproject.briar.api.privategroup.JoinMessageHeader;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
+import org.briarproject.briar.api.privategroup.event.ContactRelationshipRevealedEvent;
+import org.briarproject.briar.api.privategroup.event.GroupDissolvedEvent;
+import org.briarproject.briar.api.privategroup.event.GroupMessageAddedEvent;
import java.util.Collection;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static java.lang.Math.max;
import static java.util.logging.Level.WARNING;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class GroupControllerImpl extends
ThreadListControllerImpl
implements GroupController {
@@ -215,7 +218,7 @@ class GroupControllerImpl extends
@Override
public void isDissolved(final
- ResultExceptionHandler handler) {
+ ResultExceptionHandler handler) {
runOnDbThread(new Runnable() {
@Override
public void run() {
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupConversationModule.java
similarity index 62%
rename from briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupConversationModule.java
index 8595b461c..6fa102375 100644
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupConversationModule.java
@@ -1,7 +1,7 @@
-package org.briarproject.android.privategroup.conversation;
+package org.briarproject.briar.android.privategroup.conversation;
-import org.briarproject.android.ActivityScope;
-import org.briarproject.android.BaseActivity;
+import org.briarproject.briar.android.activity.ActivityScope;
+import org.briarproject.briar.android.activity.BaseActivity;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupMessageAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupMessageAdapter.java
similarity index 76%
rename from briar-android/src/org/briarproject/android/privategroup/conversation/GroupMessageAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupMessageAdapter.java
index 4c94438e0..dbf8c7b96 100644
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupMessageAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupMessageAdapter.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.privategroup.conversation;
+package org.briarproject.briar.android.privategroup.conversation;
import android.support.annotation.LayoutRes;
import android.support.annotation.UiThread;
@@ -7,13 +7,13 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.threaded.BaseThreadItemViewHolder;
-import org.briarproject.android.threaded.ThreadItemAdapter;
-import org.briarproject.android.threaded.ThreadPostViewHolder;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.privategroup.Visibility;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.threaded.BaseThreadItemViewHolder;
+import org.briarproject.briar.android.threaded.ThreadItemAdapter;
+import org.briarproject.briar.android.threaded.ThreadPostViewHolder;
+import org.briarproject.briar.api.privategroup.Visibility;
import static android.support.v7.widget.RecyclerView.NO_POSITION;
@@ -23,7 +23,7 @@ class GroupMessageAdapter extends ThreadItemAdapter {
private boolean isCreator = false;
- public GroupMessageAdapter(ThreadItemListener listener,
+ GroupMessageAdapter(ThreadItemListener listener,
LinearLayoutManager layoutManager) {
super(listener, layoutManager);
}
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupMessageItem.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupMessageItem.java
similarity index 65%
rename from briar-android/src/org/briarproject/android/privategroup/conversation/GroupMessageItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupMessageItem.java
index 47104e882..79ca011d2 100644
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupMessageItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupMessageItem.java
@@ -1,15 +1,15 @@
-package org.briarproject.android.privategroup.conversation;
+package org.briarproject.briar.android.privategroup.conversation;
import android.support.annotation.LayoutRes;
import android.support.annotation.UiThread;
-import org.briarproject.R;
-import org.briarproject.android.threaded.ThreadItem;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.Author.Status;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.Author.Status;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.threaded.ThreadItem;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
import javax.annotation.concurrent.NotThreadSafe;
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItem.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItem.java
similarity index 68%
rename from briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItem.java
index c48f781a0..dfdd92022 100644
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItem.java
@@ -1,11 +1,11 @@
-package org.briarproject.android.privategroup.conversation;
+package org.briarproject.briar.android.privategroup.conversation;
import android.support.annotation.LayoutRes;
import android.support.annotation.UiThread;
-import org.briarproject.R;
-import org.briarproject.api.privategroup.JoinMessageHeader;
-import org.briarproject.api.privategroup.Visibility;
+import org.briarproject.briar.R;
+import org.briarproject.briar.api.privategroup.JoinMessageHeader;
+import org.briarproject.briar.api.privategroup.Visibility;
import javax.annotation.concurrent.NotThreadSafe;
@@ -32,20 +32,21 @@ class JoinMessageItem extends GroupMessageItem {
return false;
}
+ @Override
@LayoutRes
public int getLayout() {
return R.layout.list_item_group_join_notice;
}
- public Visibility getVisibility() {
+ Visibility getVisibility() {
return visibility;
}
- public void setVisibility(Visibility visibility) {
+ void setVisibility(Visibility visibility) {
this.visibility = visibility;
}
- public boolean isInitial() {
+ boolean isInitial() {
return isInitial;
}
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java
similarity index 72%
rename from briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItemViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java
index bf8b22984..5fe8cf399 100644
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.privategroup.conversation;
+package org.briarproject.briar.android.privategroup.conversation;
import android.content.Context;
import android.content.Intent;
@@ -8,19 +8,19 @@ import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.privategroup.reveal.RevealContactsActivity;
-import org.briarproject.android.threaded.BaseThreadItemViewHolder;
-import org.briarproject.android.threaded.ThreadItemAdapter;
-import org.briarproject.android.threaded.ThreadItemAdapter.ThreadItemListener;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.privategroup.reveal.RevealContactsActivity;
+import org.briarproject.briar.android.threaded.BaseThreadItemViewHolder;
+import org.briarproject.briar.android.threaded.ThreadItemAdapter;
+import org.briarproject.briar.android.threaded.ThreadItemAdapter.ThreadItemListener;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityIcon;
-import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityString;
-import static org.briarproject.api.identity.Author.Status.OURSELVES;
-import static org.briarproject.api.identity.Author.Status.UNKNOWN;
-import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
+import static org.briarproject.bramble.api.identity.Author.Status.OURSELVES;
+import static org.briarproject.bramble.api.identity.Author.Status.UNKNOWN;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.privategroup.VisibilityHelper.getVisibilityIcon;
+import static org.briarproject.briar.android.privategroup.VisibilityHelper.getVisibilityString;
+import static org.briarproject.briar.api.privategroup.Visibility.INVISIBLE;
@UiThread
@NotNullByDefault
@@ -32,7 +32,7 @@ class JoinMessageItemViewHolder
private final TextView info;
private final Button options;
- public JoinMessageItemViewHolder(View v, boolean isCreator) {
+ JoinMessageItemViewHolder(View v, boolean isCreator) {
super(v);
this.isCreator = isCreator;
icon = (ImageView) v.findViewById(R.id.icon);
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/BaseGroupInviteActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/BaseGroupInviteActivity.java
similarity index 65%
rename from briar-android/src/org/briarproject/android/privategroup/creation/BaseGroupInviteActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/BaseGroupInviteActivity.java
index 2f7125331..d115020db 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/BaseGroupInviteActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/BaseGroupInviteActivity.java
@@ -1,20 +1,19 @@
-package org.briarproject.android.privategroup.creation;
+package org.briarproject.briar.android.privategroup.creation;
-import org.briarproject.R;
-import org.briarproject.android.contactselection.ContactSelectorActivity;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.sharing.BaseMessageFragment.MessageFragmentListener;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.jetbrains.annotations.NotNull;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contactselection.ContactSelectorActivity;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.sharing.BaseMessageFragment.MessageFragmentListener;
import java.util.Collection;
import javax.inject.Inject;
-import static org.briarproject.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@@ -40,7 +39,7 @@ public abstract class BaseGroupInviteActivity
}
@Override
- public boolean onButtonClick(@NotNull String message) {
+ public boolean onButtonClick(String message) {
if (groupId == null)
throw new IllegalStateException("GroupId was not initialized");
controller.sendInvitation(groupId, contacts, message,
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupActivity.java
similarity index 73%
rename from briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupActivity.java
index 461989c81..df6c24539 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupActivity.java
@@ -1,20 +1,26 @@
-package org.briarproject.android.privategroup.creation;
+package org.briarproject.briar.android.privategroup.creation;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.privategroup.conversation.GroupActivity;
-import org.briarproject.android.sharing.BaseMessageFragment.MessageFragmentListener;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
+import org.briarproject.briar.android.sharing.BaseMessageFragment.MessageFragmentListener;
+
+import javax.annotation.Nullable;
import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class CreateGroupActivity extends BaseGroupInviteActivity implements
CreateGroupListener, MessageFragmentListener {
@@ -24,7 +30,7 @@ public class CreateGroupActivity extends BaseGroupInviteActivity implements
}
@Override
- public void onCreate(Bundle bundle) {
+ public void onCreate(@Nullable Bundle bundle) {
super.onCreate(bundle);
if (bundle == null) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupController.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupController.java
new file mode 100644
index 000000000..37f7b92a8
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupController.java
@@ -0,0 +1,23 @@
+package org.briarproject.briar.android.privategroup.creation;
+
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.contactselection.ContactSelectorController;
+import org.briarproject.briar.android.contactselection.SelectableContactItem;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+
+import java.util.Collection;
+
+@NotNullByDefault
+public interface CreateGroupController
+ extends ContactSelectorController {
+
+ void createGroup(String name,
+ ResultExceptionHandler result);
+
+ void sendInvitation(GroupId g, Collection contacts,
+ String message, ResultExceptionHandler result);
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
similarity index 80%
rename from briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
index 051f5a20f..2a694c55a 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
@@ -1,27 +1,27 @@
-package org.briarproject.android.privategroup.creation;
+package org.briarproject.briar.android.privategroup.creation;
-import org.briarproject.android.contactselection.ContactSelectorControllerImpl;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchContactException;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.privategroup.GroupMessage;
-import org.briarproject.api.privategroup.GroupMessageFactory;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.privategroup.PrivateGroupFactory;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.privategroup.invitation.GroupInvitationFactory;
-import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.NoSuchContactException;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.identity.LocalAuthor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.briar.android.contactselection.ContactSelectorControllerImpl;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.privategroup.GroupMessage;
+import org.briarproject.briar.api.privategroup.GroupMessageFactory;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
+import org.briarproject.briar.api.privategroup.PrivateGroupFactory;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupFragment.java
similarity index 86%
rename from briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupFragment.java
index 7f21508e3..d0adfef24 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.privategroup.creation;
+package org.briarproject.briar.android.privategroup.creation;
import android.content.Context;
import android.os.Bundle;
@@ -10,11 +10,11 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.fragment.BaseFragment;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.fragment.BaseFragment;
-import static org.briarproject.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH;
public class CreateGroupFragment extends BaseFragment {
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupListener.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupListener.java
similarity index 58%
rename from briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupListener.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupListener.java
index 3347be158..7485acfe8 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupListener.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupListener.java
@@ -1,8 +1,8 @@
-package org.briarproject.android.privategroup.creation;
+package org.briarproject.briar.android.privategroup.creation;
import android.view.View;
-import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
+import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener;
interface CreateGroupListener extends BaseFragmentListener {
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupMessageFragment.java
similarity index 71%
rename from briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupMessageFragment.java
index a261ce016..b4c3fc670 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupMessageFragment.java
@@ -1,10 +1,10 @@
-package org.briarproject.android.privategroup.creation;
+package org.briarproject.briar.android.privategroup.creation;
import android.support.annotation.StringRes;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.sharing.BaseMessageFragment;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.sharing.BaseMessageFragment;
public class CreateGroupMessageFragment extends BaseMessageFragment {
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupCreateModule.java
similarity index 54%
rename from briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupCreateModule.java
index a553cb0ed..fc51ac8e9 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupCreateModule.java
@@ -1,6 +1,6 @@
-package org.briarproject.android.privategroup.creation;
+package org.briarproject.briar.android.privategroup.creation;
-import org.briarproject.android.ActivityScope;
+import org.briarproject.briar.android.activity.ActivityScope;
import dagger.Module;
import dagger.Provides;
@@ -10,7 +10,7 @@ public class GroupCreateModule {
@ActivityScope
@Provides
- protected CreateGroupController provideCreateGroupController(
+ CreateGroupController provideCreateGroupController(
CreateGroupControllerImpl createGroupController) {
return createGroupController;
}
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/GroupInviteActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
similarity index 71%
rename from briar-android/src/org/briarproject/android/privategroup/creation/GroupInviteActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
index 71ce49667..794a12069 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/GroupInviteActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.privategroup.creation;
+package org.briarproject.briar.android.privategroup.creation;
import android.content.Intent;
import android.os.Bundle;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.sharing.BaseMessageFragment.MessageFragmentListener;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.sharing.BaseMessageFragment.MessageFragmentListener;
public class GroupInviteActivity extends BaseGroupInviteActivity
implements MessageFragmentListener {
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/GroupInviteFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteFragment.java
similarity index 53%
rename from briar-android/src/org/briarproject/android/privategroup/creation/GroupInviteFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteFragment.java
index 6e8eab609..44e03ab61 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/GroupInviteFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteFragment.java
@@ -1,21 +1,18 @@
-package org.briarproject.android.privategroup.creation;
+package org.briarproject.briar.android.privategroup.creation;
-import android.content.Context;
import android.os.Bundle;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.contact.BaseContactListAdapter;
-import org.briarproject.android.contactselection.ContactSelectorAdapter;
-import org.briarproject.android.contactselection.ContactSelectorController;
-import org.briarproject.android.contactselection.ContactSelectorFragment;
-import org.briarproject.android.contactselection.SelectableContactItem;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.contactselection.ContactSelectorController;
+import org.briarproject.briar.android.contactselection.ContactSelectorFragment;
+import org.briarproject.briar.android.contactselection.SelectableContactItem;
import javax.inject.Inject;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationActivity.java
similarity index 54%
rename from briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationActivity.java
index 658a611d4..a6dd2dd4e 100644
--- a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationActivity.java
@@ -1,17 +1,21 @@
-package org.briarproject.android.privategroup.invitation;
+package org.briarproject.briar.android.privategroup.invitation;
import android.content.Context;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.sharing.InvitationActivity;
-import org.briarproject.android.sharing.InvitationAdapter;
-import org.briarproject.api.privategroup.invitation.GroupInvitationItem;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.sharing.InvitationActivity;
+import org.briarproject.briar.android.sharing.InvitationAdapter;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem;
import javax.inject.Inject;
-import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener;
+import static org.briarproject.briar.android.sharing.InvitationAdapter.InvitationClickListener;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class GroupInvitationActivity
extends InvitationActivity {
diff --git a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationAdapter.java
similarity index 75%
rename from briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationAdapter.java
index 9c818b680..540b15df5 100644
--- a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationAdapter.java
@@ -1,10 +1,10 @@
-package org.briarproject.android.privategroup.invitation;
+package org.briarproject.briar.android.privategroup.invitation;
import android.content.Context;
import android.view.ViewGroup;
-import org.briarproject.android.sharing.InvitationAdapter;
-import org.briarproject.api.privategroup.invitation.GroupInvitationItem;
+import org.briarproject.briar.android.sharing.InvitationAdapter;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem;
class GroupInvitationAdapter extends
InvitationAdapter {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationController.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationController.java
new file mode 100644
index 000000000..0cb87e987
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationController.java
@@ -0,0 +1,10 @@
+package org.briarproject.briar.android.privategroup.invitation;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.sharing.InvitationController;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem;
+
+@NotNullByDefault
+interface GroupInvitationController
+ extends InvitationController {
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationControllerImpl.java
similarity index 61%
rename from briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationControllerImpl.java
index 68a869079..b3b3f4c59 100644
--- a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationControllerImpl.java
@@ -1,20 +1,20 @@
-package org.briarproject.android.privategroup.invitation;
+package org.briarproject.briar.android.privategroup.invitation;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.android.sharing.InvitationControllerImpl;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.GroupInvitationRequestReceivedEvent;
-import org.briarproject.api.event.GroupInvitationResponseReceivedEvent;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.privategroup.invitation.GroupInvitationItem;
-import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
-import org.briarproject.api.sync.ClientId;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.sharing.InvitationControllerImpl;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
+import org.briarproject.briar.api.privategroup.event.GroupInvitationRequestReceivedEvent;
+import org.briarproject.briar.api.privategroup.event.GroupInvitationResponseReceivedEvent;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
import java.util.Collection;
import java.util.concurrent.Executor;
@@ -22,7 +22,7 @@ import java.util.concurrent.Executor;
import javax.inject.Inject;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.privategroup.PrivateGroupManager.CLIENT_ID;
+import static org.briarproject.briar.api.privategroup.PrivateGroupManager.CLIENT_ID;
@NotNullByDefault
class GroupInvitationControllerImpl
diff --git a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationModule.java
similarity index 69%
rename from briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationModule.java
index b6998cd19..9f3278da4 100644
--- a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationModule.java
@@ -1,6 +1,6 @@
-package org.briarproject.android.privategroup.invitation;
+package org.briarproject.briar.android.privategroup.invitation;
-import org.briarproject.android.ActivityScope;
+import org.briarproject.briar.android.activity.ActivityScope;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationViewHolder.java
new file mode 100644
index 000000000..a270de369
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationViewHolder.java
@@ -0,0 +1,30 @@
+package org.briarproject.briar.android.privategroup.invitation;
+
+import android.view.View;
+
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.sharing.InvitationAdapter.InvitationClickListener;
+import org.briarproject.briar.android.sharing.InvitationViewHolder;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem;
+
+import javax.annotation.Nullable;
+
+class GroupInvitationViewHolder
+ extends InvitationViewHolder {
+
+ GroupInvitationViewHolder(View v) {
+ super(v);
+ }
+
+ @Override
+ public void onBind(@Nullable final GroupInvitationItem item,
+ final InvitationClickListener listener) {
+ super.onBind(item, listener);
+ if (item == null) return;
+
+ sharedBy.setText(
+ sharedBy.getContext().getString(R.string.groups_created_by,
+ item.getCreator().getAuthor().getName()));
+ }
+
+}
\ No newline at end of file
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupItem.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java
similarity index 74%
rename from briar-android/src/org/briarproject/android/privategroup/list/GroupItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java
index ded805181..03a9d40b0 100644
--- a/briar-android/src/org/briarproject/android/privategroup/list/GroupItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java
@@ -1,11 +1,11 @@
-package org.briarproject.android.privategroup.list;
+package org.briarproject.briar.android.privategroup.list;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
// This class is not thread-safe
@NotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListAdapter.java
similarity index 78%
rename from briar-android/src/org/briarproject/android/privategroup/list/GroupListAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListAdapter.java
index b5588e344..a42bf3a78 100644
--- a/briar-android/src/org/briarproject/android/privategroup/list/GroupListAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListAdapter.java
@@ -1,18 +1,21 @@
-package org.briarproject.android.privategroup.list;
+package org.briarproject.briar.android.privategroup.list;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.privategroup.list.GroupViewHolder.OnGroupRemoveClickListener;
-import org.briarproject.android.util.BriarAdapter;
-import org.briarproject.api.sync.GroupId;
-import org.jetbrains.annotations.NotNull;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.privategroup.list.GroupViewHolder.OnGroupRemoveClickListener;
+import org.briarproject.briar.android.util.BriarAdapter;
import static android.support.v7.util.SortedList.INVALID_POSITION;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class GroupListAdapter extends BriarAdapter {
private final OnGroupRemoveClickListener listener;
@@ -60,7 +63,7 @@ class GroupListAdapter extends BriarAdapter {
return a.getId().equals(b.getId());
}
- int findItemPosition(@NotNull GroupId g) {
+ int findItemPosition(GroupId g) {
for (int i = 0; i < items.size(); i++) {
GroupItem item = items.get(i);
if (item.getId().equals(g)) {
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListController.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListController.java
similarity index 57%
rename from briar-android/src/org/briarproject/android/privategroup/list/GroupListController.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListController.java
index 433c415ec..e61e3c835 100644
--- a/briar-android/src/org/briarproject/android/privategroup/list/GroupListController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListController.java
@@ -1,18 +1,20 @@
-package org.briarproject.android.privategroup.list;
+package org.briarproject.briar.android.privategroup.list;
import android.support.annotation.UiThread;
-import org.briarproject.android.DestroyableContext;
-import org.briarproject.android.controller.DbController;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.DestroyableContext;
+import org.briarproject.briar.android.controller.DbController;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
import java.util.Collection;
-public interface GroupListController extends DbController {
+@NotNullByDefault
+interface GroupListController extends DbController {
/**
* The listener must be set right after the controller was injected
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java
similarity index 76%
rename from briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java
index f756f6ffc..4c0febda6 100644
--- a/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java
@@ -1,30 +1,32 @@
-package org.briarproject.android.privategroup.list;
+package org.briarproject.briar.android.privategroup.list;
import android.support.annotation.CallSuper;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.controller.DbControllerImpl;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.clients.MessageTracker.GroupCount;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchGroupException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.GroupAddedEvent;
-import org.briarproject.api.event.GroupDissolvedEvent;
-import org.briarproject.api.event.GroupInvitationRequestReceivedEvent;
-import org.briarproject.api.event.GroupMessageAddedEvent;
-import org.briarproject.api.event.GroupRemovedEvent;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
-import org.briarproject.api.sync.ClientId;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.NoSuchGroupException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.event.GroupAddedEvent;
+import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
+import org.briarproject.briar.android.controller.DbControllerImpl;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
+import org.briarproject.briar.api.privategroup.PrivateGroup;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
+import org.briarproject.briar.api.privategroup.event.GroupDissolvedEvent;
+import org.briarproject.briar.api.privategroup.event.GroupInvitationRequestReceivedEvent;
+import org.briarproject.briar.api.privategroup.event.GroupMessageAddedEvent;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
import java.util.ArrayList;
import java.util.Collection;
@@ -36,8 +38,10 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.privategroup.PrivateGroupManager.CLIENT_ID;
+import static org.briarproject.briar.api.privategroup.PrivateGroupManager.CLIENT_ID;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class GroupListControllerImpl extends DbControllerImpl
implements GroupListController, EventListener {
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java
similarity index 84%
rename from briar-android/src/org/briarproject/android/privategroup/list/GroupListFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java
index 6627514be..2c7e29b5a 100644
--- a/briar-android/src/org/briarproject/android/privategroup/list/GroupListFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java
@@ -1,8 +1,7 @@
-package org.briarproject.android.privategroup.list;
+package org.briarproject.briar.android.privategroup.list;
import android.content.Intent;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityOptionsCompat;
@@ -16,25 +15,26 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.controller.handler.UiExceptionHandler;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.privategroup.creation.CreateGroupActivity;
-import org.briarproject.android.privategroup.invitation.GroupInvitationActivity;
-import org.briarproject.android.privategroup.list.GroupListController.GroupListListener;
-import org.briarproject.android.privategroup.list.GroupViewHolder.OnGroupRemoveClickListener;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.controller.handler.UiExceptionHandler;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.privategroup.creation.CreateGroupActivity;
+import org.briarproject.briar.android.privategroup.invitation.GroupInvitationActivity;
+import org.briarproject.briar.android.privategroup.list.GroupListController.GroupListListener;
+import org.briarproject.briar.android.privategroup.list.GroupViewHolder.OnGroupRemoveClickListener;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.api.privategroup.GroupMessageHeader;
import java.util.Collection;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.support.design.widget.Snackbar.LENGTH_INDEFINITE;
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListModule.java
similarity index 67%
rename from briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListModule.java
index 2bf5c5654..fcf9c09d1 100644
--- a/briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListModule.java
@@ -1,6 +1,6 @@
-package org.briarproject.android.privategroup.list;
+package org.briarproject.briar.android.privategroup.list;
-import org.briarproject.android.ActivityScope;
+import org.briarproject.briar.android.activity.ActivityScope;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java
similarity index 82%
rename from briar-android/src/org/briarproject/android/privategroup/list/GroupViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java
index 7f3031aec..af676fc01 100644
--- a/briar-android/src/org/briarproject/android/privategroup/list/GroupViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.privategroup.list;
+package org.briarproject.briar.android.privategroup.list;
import android.content.Context;
import android.content.Intent;
@@ -10,20 +10,23 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.privategroup.conversation.GroupActivity;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.android.view.TextAvatarView;
-import org.briarproject.api.sync.GroupId;
-import org.jetbrains.annotations.NotNull;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
+import org.briarproject.briar.android.util.UiUtils;
+import org.briarproject.briar.android.view.TextAvatarView;
import static android.support.v4.content.ContextCompat.getColor;
import static android.support.v4.content.ContextCompat.startActivities;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.android.BriarActivity.GROUP_NAME;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_NAME;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
class GroupViewHolder extends RecyclerView.ViewHolder {
private final static float ALPHA = 0.42f;
@@ -51,7 +54,7 @@ class GroupViewHolder extends RecyclerView.ViewHolder {
}
void bindView(final Context ctx, final GroupItem group,
- @NotNull final OnGroupRemoveClickListener listener) {
+ final OnGroupRemoveClickListener listener) {
// Avatar
avatar.setText(group.getName().substring(0, 1));
avatar.setBackgroundBytes(group.getId().getBytes());
@@ -89,7 +92,7 @@ class GroupViewHolder extends RecyclerView.ViewHolder {
getColor(ctx, R.color.briar_text_secondary));
long lastUpdate = group.getTimestamp();
- date.setText(AndroidUtils.formatDate(ctx, lastUpdate));
+ date.setText(UiUtils.formatDate(ctx, lastUpdate));
date.setVisibility(VISIBLE);
avatar.setProblem(false);
status.setVisibility(GONE);
diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java
similarity index 69%
rename from briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java
index a3523f855..182a336d0 100644
--- a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java
@@ -1,22 +1,27 @@
-package org.briarproject.android.privategroup.memberlist;
+package org.briarproject.briar.android.privategroup.memberlist;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.view.MenuItem;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.view.BriarRecyclerView;
import java.util.Collection;
+import javax.annotation.Nullable;
import javax.inject.Inject;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class GroupMemberListActivity extends BriarActivity {
@Inject
@@ -32,7 +37,7 @@ public class GroupMemberListActivity extends BriarActivity {
}
@Override
- public void onCreate(final Bundle state) {
+ public void onCreate(@Nullable final Bundle state) {
super.onCreate(state);
setContentView(R.layout.list);
@@ -53,7 +58,8 @@ public class GroupMemberListActivity extends BriarActivity {
public void onStart() {
super.onStart();
controller.loadMembers(groupId,
- new UiResultExceptionHandler, DbException>(this) {
+ new UiResultExceptionHandler, DbException>(
+ this) {
@Override
public void onResultUi(Collection members) {
adapter.addAll(members);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListController.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListController.java
new file mode 100644
index 000000000..b2d20c35e
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListController.java
@@ -0,0 +1,15 @@
+package org.briarproject.briar.android.privategroup.memberlist;
+
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.controller.DbController;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+
+import java.util.Collection;
+
+public interface GroupMemberListController extends DbController {
+
+ void loadMembers(GroupId groupId,
+ ResultExceptionHandler, DbException> handler);
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListControllerImpl.java
similarity index 70%
rename from briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListControllerImpl.java
index 8a91bee96..4acd6b458 100644
--- a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListControllerImpl.java
@@ -1,13 +1,13 @@
-package org.briarproject.android.privategroup.memberlist;
+package org.briarproject.briar.android.privategroup.memberlist;
-import org.briarproject.android.controller.DbControllerImpl;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.privategroup.GroupMember;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.controller.DbControllerImpl;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.privategroup.GroupMember;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberModule.java
similarity index 69%
rename from briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberModule.java
index e92d2e947..97758b579 100644
--- a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberModule.java
@@ -1,6 +1,6 @@
-package org.briarproject.android.privategroup.memberlist;
+package org.briarproject.briar.android.privategroup.memberlist;
-import org.briarproject.android.ActivityScope;
+import org.briarproject.briar.android.activity.ActivityScope;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListAdapter.java
similarity index 88%
rename from briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListAdapter.java
index be28f8e8b..5eddb41e3 100644
--- a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListAdapter.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.privategroup.memberlist;
+package org.briarproject.briar.android.privategroup.memberlist;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.util.BriarAdapter;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.BriarAdapter;
class MemberListAdapter extends
BriarAdapter {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListItem.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListItem.java
new file mode 100644
index 000000000..b05507536
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListItem.java
@@ -0,0 +1,37 @@
+package org.briarproject.briar.android.privategroup.memberlist;
+
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.Author.Status;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.api.privategroup.GroupMember;
+import org.briarproject.briar.api.privategroup.Visibility;
+
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
+class MemberListItem {
+
+ private final Author member;
+ private final Status status;
+ private final Visibility visibility;
+
+ MemberListItem(GroupMember groupMember) {
+ this.member = groupMember.getAuthor();
+ this.visibility = groupMember.getVisibility();
+ this.status = groupMember.getStatus();
+ }
+
+ Author getMember() {
+ return member;
+ }
+
+ Visibility getVisibility() {
+ return visibility;
+ }
+
+ Status getStatus() {
+ return status;
+ }
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItemHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListItemHolder.java
similarity index 66%
rename from briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItemHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListItemHolder.java
index 2bf488a41..5b82c5e8b 100644
--- a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItemHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListItemHolder.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.privategroup.memberlist;
+package org.briarproject.briar.android.privategroup.memberlist;
import android.support.annotation.UiThread;
import android.support.v7.widget.RecyclerView;
@@ -6,14 +6,14 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.view.AuthorView;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.view.AuthorView;
-import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityIcon;
-import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityString;
-import static org.briarproject.api.identity.Author.Status.OURSELVES;
-import static org.briarproject.api.identity.Author.Status.UNKNOWN;
+import static org.briarproject.bramble.api.identity.Author.Status.OURSELVES;
+import static org.briarproject.bramble.api.identity.Author.Status.UNKNOWN;
+import static org.briarproject.briar.android.privategroup.VisibilityHelper.getVisibilityIcon;
+import static org.briarproject.briar.android.privategroup.VisibilityHelper.getVisibilityString;
@UiThread
@NotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/GroupRevealModule.java
similarity index 69%
rename from briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/GroupRevealModule.java
index dad020c3f..b2f23bf20 100644
--- a/briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/GroupRevealModule.java
@@ -1,6 +1,6 @@
-package org.briarproject.android.privategroup.reveal;
+package org.briarproject.briar.android.privategroup.reveal;
-import org.briarproject.android.ActivityScope;
+import org.briarproject.briar.android.activity.ActivityScope;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsActivity.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsActivity.java
index 3a7bd88ee..029d770a5 100644
--- a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsActivity.java
@@ -1,10 +1,9 @@
-package org.briarproject.android.privategroup.reveal;
+package org.briarproject.briar.android.privategroup.reveal;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.view.Menu;
import android.view.MenuInflater;
@@ -13,19 +12,20 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.contactselection.ContactSelectorActivity;
-import org.briarproject.android.controller.handler.UiExceptionHandler;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.contactselection.ContactSelectorActivity;
+import org.briarproject.briar.android.controller.handler.UiExceptionHandler;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
import java.util.Collection;
+import javax.annotation.Nullable;
import javax.inject.Inject;
@MethodsNotNullByDefault
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsController.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsController.java
new file mode 100644
index 000000000..52c38546b
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsController.java
@@ -0,0 +1,25 @@
+package org.briarproject.briar.android.privategroup.reveal;
+
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.contactselection.ContactSelectorController;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+
+import java.util.Collection;
+
+@NotNullByDefault
+public interface RevealContactsController
+ extends ContactSelectorController {
+
+ void isOnboardingNeeded(
+ ResultExceptionHandler handler);
+
+ void onboardingShown(ExceptionHandler handler);
+
+ void reveal(GroupId g, Collection contacts,
+ ExceptionHandler handler);
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsControllerImpl.java
similarity index 75%
rename from briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsControllerImpl.java
index 985708f2e..279b80710 100644
--- a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsControllerImpl.java
@@ -1,22 +1,22 @@
-package org.briarproject.android.privategroup.reveal;
+package org.briarproject.briar.android.privategroup.reveal;
-import org.briarproject.android.controller.DbControllerImpl;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.clients.ProtocolStateException;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.privategroup.GroupMember;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.settings.SettingsManager;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.settings.SettingsManager;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.controller.DbControllerImpl;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.client.ProtocolStateException;
+import org.briarproject.briar.api.privategroup.GroupMember;
+import org.briarproject.briar.api.privategroup.PrivateGroupManager;
+import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
import java.util.ArrayList;
import java.util.Collection;
@@ -28,8 +28,8 @@ import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.fragment.SettingsFragment.SETTINGS_NAMESPACE;
-import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
+import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
+import static org.briarproject.briar.api.privategroup.Visibility.INVISIBLE;
@Immutable
@NotNullByDefault
@@ -47,7 +47,7 @@ class RevealContactsControllerImpl extends DbControllerImpl
private final SettingsManager settingsManager;
@Inject
- public RevealContactsControllerImpl(@DatabaseExecutor Executor dbExecutor,
+ RevealContactsControllerImpl(@DatabaseExecutor Executor dbExecutor,
LifecycleManager lifecycleManager, PrivateGroupManager groupManager,
GroupInvitationManager groupInvitationManager,
ContactManager contactManager, SettingsManager settingsManager) {
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsFragment.java
similarity index 67%
rename from briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsFragment.java
index df34de80f..f2648ed12 100644
--- a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsFragment.java
@@ -1,22 +1,22 @@
-package org.briarproject.android.privategroup.reveal;
+package org.briarproject.briar.android.privategroup.reveal;
import android.content.Context;
import android.os.Bundle;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.android.contactselection.BaseContactSelectorFragment;
-import org.briarproject.android.contactselection.ContactSelectorController;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
+import org.briarproject.briar.android.contactselection.BaseContactSelectorFragment;
+import org.briarproject.briar.android.contactselection.ContactSelectorController;
import java.util.Collection;
import javax.inject.Inject;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealableContactAdapter.java
similarity index 77%
rename from briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealableContactAdapter.java
index c84303e78..1ac55740e 100644
--- a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealableContactAdapter.java
@@ -1,14 +1,14 @@
-package org.briarproject.android.privategroup.reveal;
+package org.briarproject.briar.android.privategroup.reveal;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.contactselection.BaseContactSelectorAdapter;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contactselection.BaseContactSelectorAdapter;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealableContactItem.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealableContactItem.java
new file mode 100644
index 000000000..48ae57ecd
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealableContactItem.java
@@ -0,0 +1,26 @@
+package org.briarproject.briar.android.privategroup.reveal;
+
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.contactselection.SelectableContactItem;
+import org.briarproject.briar.api.privategroup.Visibility;
+
+import javax.annotation.concurrent.NotThreadSafe;
+
+@NotThreadSafe
+@NotNullByDefault
+class RevealableContactItem extends SelectableContactItem {
+
+ private final Visibility visibility;
+
+ RevealableContactItem(Contact contact, boolean selected,
+ boolean disabled, Visibility visibility) {
+ super(contact, selected, disabled);
+ this.visibility = visibility;
+ }
+
+ Visibility getVisibility() {
+ return visibility;
+ }
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealableContactViewHolder.java
similarity index 54%
rename from briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealableContactViewHolder.java
index 3fa6a3484..585e2f622 100644
--- a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealableContactViewHolder.java
@@ -1,23 +1,23 @@
-package org.briarproject.android.privategroup.reveal;
+package org.briarproject.briar.android.privategroup.reveal;
import android.support.annotation.UiThread;
import android.view.View;
import android.widget.ImageView;
-import org.briarproject.R;
-import org.briarproject.android.contact.BaseContactListAdapter.OnContactClickListener;
-import org.briarproject.android.contactselection.BaseSelectableContactHolder;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.BaseContactListAdapter.OnContactClickListener;
+import org.briarproject.briar.android.contactselection.BaseSelectableContactHolder;
-import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityIcon;
-import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityString;
-import static org.briarproject.android.util.AndroidUtils.GREY_OUT;
-import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
+import javax.annotation.Nullable;
+
+import static org.briarproject.briar.android.privategroup.VisibilityHelper.getVisibilityIcon;
+import static org.briarproject.briar.android.privategroup.VisibilityHelper.getVisibilityString;
+import static org.briarproject.briar.android.util.UiUtils.GREY_OUT;
@UiThread
@NotNullByDefault
-public class RevealableContactViewHolder
+class RevealableContactViewHolder
extends BaseSelectableContactHolder {
private final ImageView icon;
diff --git a/briar-android/src/org/briarproject/android/report/BriarReportPrimer.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportPrimer.java
similarity index 97%
rename from briar-android/src/org/briarproject/android/report/BriarReportPrimer.java
rename to briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportPrimer.java
index 355690a3d..5e046e015 100644
--- a/briar-android/src/org/briarproject/android/report/BriarReportPrimer.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportPrimer.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.report;
+package org.briarproject.briar.android.reporting;
import android.app.ActivityManager;
import android.bluetooth.BluetoothAdapter;
@@ -16,7 +16,7 @@ import android.support.annotation.NonNull;
import org.acra.builder.ReportBuilder;
import org.acra.builder.ReportPrimer;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.util.StringUtils;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
@@ -36,7 +36,7 @@ import static android.content.Context.WIFI_SERVICE;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_WIFI;
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
-import static org.briarproject.util.PrivacyUtils.scrubMacAddress;
+import static org.briarproject.bramble.util.PrivacyUtils.scrubMacAddress;
public class BriarReportPrimer implements ReportPrimer {
diff --git a/briar-android/src/org/briarproject/android/report/BriarReportSender.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSender.java
similarity index 80%
rename from briar-android/src/org/briarproject/android/report/BriarReportSender.java
rename to briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSender.java
index 9594cf584..69654f983 100644
--- a/briar-android/src/org/briarproject/android/report/BriarReportSender.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSender.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.report;
+package org.briarproject.briar.android.reporting;
import android.content.Context;
import android.support.annotation.NonNull;
@@ -7,9 +7,9 @@ import org.acra.collector.CrashReportData;
import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderException;
import org.acra.util.JSONReportBuilder;
-import org.briarproject.android.AndroidComponent;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.api.reporting.DevReporter;
+import org.briarproject.bramble.api.reporting.DevReporter;
+import org.briarproject.bramble.util.AndroidUtils;
+import org.briarproject.briar.android.AndroidComponent;
import java.io.File;
import java.io.FileNotFoundException;
@@ -23,9 +23,9 @@ public class BriarReportSender implements ReportSender {
private final AndroidComponent component;
@Inject
- protected DevReporter reporter;
+ DevReporter reporter;
- public BriarReportSender(AndroidComponent component) {
+ BriarReportSender(AndroidComponent component) {
this.component = component;
}
diff --git a/briar-android/src/org/briarproject/android/report/BriarReportSenderFactory.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSenderFactory.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/report/BriarReportSenderFactory.java
rename to briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSenderFactory.java
index 6c413781f..c474f4a89 100644
--- a/briar-android/src/org/briarproject/android/report/BriarReportSenderFactory.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSenderFactory.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.report;
+package org.briarproject.briar.android.reporting;
import android.content.Context;
import android.support.annotation.NonNull;
@@ -6,7 +6,7 @@ import android.support.annotation.NonNull;
import org.acra.config.ACRAConfiguration;
import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderFactory;
-import org.briarproject.android.BriarApplication;
+import org.briarproject.briar.android.BriarApplication;
public class BriarReportSenderFactory implements ReportSenderFactory {
diff --git a/briar-android/src/org/briarproject/android/report/DevReportActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java
similarity index 98%
rename from briar-android/src/org/briarproject/android/report/DevReportActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java
index 0d142757e..82c21c089 100644
--- a/briar-android/src/org/briarproject/android/report/DevReportActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.report;
+package org.briarproject.briar.android.reporting;
import android.content.Context;
import android.content.res.Configuration;
@@ -23,8 +23,8 @@ import org.acra.ReportField;
import org.acra.collector.CrashReportData;
import org.acra.dialog.BaseCrashReportDialog;
import org.acra.file.CrashReportPersister;
-import org.briarproject.R;
-import org.briarproject.android.util.UserFeedback;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.UserFeedback;
import java.io.File;
import java.io.IOException;
diff --git a/briar-android/src/org/briarproject/android/SettingsActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsActivity.java
similarity index 73%
rename from briar-android/src/org/briarproject/android/SettingsActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsActivity.java
index bb783a065..022963eea 100644
--- a/briar-android/src/org/briarproject/android/SettingsActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsActivity.java
@@ -1,13 +1,15 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.settings;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.view.MenuItem;
-import org.briarproject.R;
-import org.briarproject.android.api.AndroidExecutor;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.settings.SettingsManager;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.settings.SettingsManager;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
import javax.inject.Inject;
@@ -50,6 +52,7 @@ public class SettingsActivity extends BriarActivity {
return eventBus;
}
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
diff --git a/briar-android/src/org/briarproject/android/fragment/SettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
similarity index 93%
rename from briar-android/src/org/briarproject/android/fragment/SettingsFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
index 60fab261f..a9b9f6690 100644
--- a/briar-android/src/org/briarproject/android/fragment/SettingsFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.fragment;
+package org.briarproject.briar.android.settings;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
@@ -16,19 +16,20 @@ import android.view.LayoutInflater;
import android.view.ViewGroup;
import org.acra.ACRA;
-import org.briarproject.R;
-import org.briarproject.android.SettingsActivity;
-import org.briarproject.android.api.AndroidExecutor;
-import org.briarproject.android.util.UserFeedback;
-import org.briarproject.android.widget.PreferenceDividerDecoration;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.SettingsUpdatedEvent;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.settings.SettingsManager;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.settings.SettingsManager;
+import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.UserFeedback;
+import org.briarproject.briar.android.widget.PreferenceDividerDecoration;
import java.util.logging.Logger;
@@ -45,6 +46,8 @@ import static android.provider.Settings.System.DEFAULT_NOTIFICATION_URI;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class SettingsFragment extends PreferenceFragmentCompat
implements EventListener, Preference.OnPreferenceChangeListener {
diff --git a/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
similarity index 81%
rename from briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
index 631c4ff86..67532a44a 100644
--- a/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.content.Context;
import android.os.Bundle;
@@ -10,16 +10,16 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.view.LargeTextInputView;
-import org.briarproject.android.view.TextInputView.TextInputListener;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.view.LargeTextInputView;
+import org.briarproject.briar.android.view.TextInputView.TextInputListener;
import static android.support.design.widget.Snackbar.LENGTH_SHORT;
-import static org.briarproject.api.sharing.SharingConstants.MAX_INVITATION_MESSAGE_LENGTH;
-import static org.briarproject.util.StringUtils.truncateUtf8;
+import static org.briarproject.bramble.util.StringUtils.truncateUtf8;
+import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_MESSAGE_LENGTH;
public abstract class BaseMessageFragment extends BaseFragment
implements TextInputListener {
diff --git a/briar-android/src/org/briarproject/android/sharing/BlogInvitationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationActivity.java
similarity index 61%
rename from briar-android/src/org/briarproject/android/sharing/BlogInvitationActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationActivity.java
index 54ffa984d..e49b63278 100644
--- a/briar-android/src/org/briarproject/android/sharing/BlogInvitationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationActivity.java
@@ -1,15 +1,19 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.content.Context;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.api.sharing.SharingInvitationItem;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.api.sharing.SharingInvitationItem;
import javax.inject.Inject;
-import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener;
+import static org.briarproject.briar.android.sharing.InvitationAdapter.InvitationClickListener;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class BlogInvitationActivity
extends InvitationActivity {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationController.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationController.java
new file mode 100644
index 000000000..c56f96a23
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationController.java
@@ -0,0 +1,7 @@
+package org.briarproject.briar.android.sharing;
+
+import org.briarproject.briar.api.sharing.SharingInvitationItem;
+
+public interface BlogInvitationController
+ extends InvitationController {
+}
diff --git a/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationControllerImpl.java
similarity index 63%
rename from briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationControllerImpl.java
index 8b1a31848..66adb424c 100644
--- a/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationControllerImpl.java
@@ -1,18 +1,18 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.api.blogs.Blog;
-import org.briarproject.api.blogs.BlogSharingManager;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.BlogInvitationReceivedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sharing.SharingInvitationItem;
-import org.briarproject.api.sync.ClientId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.api.blog.Blog;
+import org.briarproject.briar.api.blog.BlogSharingManager;
+import org.briarproject.briar.api.blog.event.BlogInvitationRequestReceivedEvent;
+import org.briarproject.briar.api.sharing.SharingInvitationItem;
import java.util.Collection;
import java.util.concurrent.Executor;
@@ -20,7 +20,7 @@ import java.util.concurrent.Executor;
import javax.inject.Inject;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.blogs.BlogManager.CLIENT_ID;
+import static org.briarproject.briar.api.blog.BlogManager.CLIENT_ID;
@NotNullByDefault
class BlogInvitationControllerImpl
@@ -41,7 +41,7 @@ class BlogInvitationControllerImpl
public void eventOccurred(Event e) {
super.eventOccurred(e);
- if (e instanceof BlogInvitationReceivedEvent) {
+ if (e instanceof BlogInvitationRequestReceivedEvent) {
LOG.info("Blog invitation received, reloading");
listener.loadInvitations(false);
}
diff --git a/briar-android/src/org/briarproject/android/sharing/BlogSharingStatusActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogSharingStatusActivity.java
similarity index 61%
rename from briar-android/src/org/briarproject/android/sharing/BlogSharingStatusActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogSharingStatusActivity.java
index fed2c2a5a..ab60768c6 100644
--- a/briar-android/src/org/briarproject/android/sharing/BlogSharingStatusActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogSharingStatusActivity.java
@@ -1,9 +1,10 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.api.blogs.BlogSharingManager;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.db.DbException;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.api.blog.BlogSharingManager;
import java.util.Collection;
@@ -20,16 +21,14 @@ public class BlogSharingStatusActivity extends SharingStatusActivity {
component.inject(this);
}
- /**
- * This must only be called from the DbThread
- */
+ @DatabaseExecutor
+ @Override
protected Collection getSharedWith() throws DbException {
return blogSharingManager.getSharedWith(getGroupId());
}
- /**
- * This must only be called from the DbThread
- */
+ @DatabaseExecutor
+ @Override
protected Collection getSharedBy() throws DbException {
return blogSharingManager.getSharedBy(getGroupId());
}
diff --git a/briar-android/src/org/briarproject/android/sharing/ForumInvitationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationActivity.java
similarity index 61%
rename from briar-android/src/org/briarproject/android/sharing/ForumInvitationActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationActivity.java
index 37dccd442..59fb3683b 100644
--- a/briar-android/src/org/briarproject/android/sharing/ForumInvitationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationActivity.java
@@ -1,15 +1,19 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.content.Context;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.api.sharing.SharingInvitationItem;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.api.sharing.SharingInvitationItem;
import javax.inject.Inject;
-import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener;
+import static org.briarproject.briar.android.sharing.InvitationAdapter.InvitationClickListener;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public class ForumInvitationActivity
extends InvitationActivity {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationController.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationController.java
new file mode 100644
index 000000000..650cf1939
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationController.java
@@ -0,0 +1,7 @@
+package org.briarproject.briar.android.sharing;
+
+import org.briarproject.briar.api.sharing.SharingInvitationItem;
+
+public interface ForumInvitationController
+ extends InvitationController {
+}
diff --git a/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationControllerImpl.java
similarity index 60%
rename from briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationControllerImpl.java
index 38274956a..14e669f42 100644
--- a/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationControllerImpl.java
@@ -1,18 +1,18 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.ForumInvitationReceivedEvent;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.forum.ForumSharingManager;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sharing.SharingInvitationItem;
-import org.briarproject.api.sync.ClientId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.api.forum.Forum;
+import org.briarproject.briar.api.forum.ForumSharingManager;
+import org.briarproject.briar.api.forum.event.ForumInvitationRequestReceivedEvent;
+import org.briarproject.briar.api.sharing.SharingInvitationItem;
import java.util.Collection;
import java.util.concurrent.Executor;
@@ -20,7 +20,7 @@ import java.util.concurrent.Executor;
import javax.inject.Inject;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.forum.ForumManager.CLIENT_ID;
+import static org.briarproject.briar.api.forum.ForumManager.CLIENT_ID;
@NotNullByDefault
class ForumInvitationControllerImpl
@@ -41,7 +41,7 @@ class ForumInvitationControllerImpl
public void eventOccurred(Event e) {
super.eventOccurred(e);
- if (e instanceof ForumInvitationReceivedEvent) {
+ if (e instanceof ForumInvitationRequestReceivedEvent) {
LOG.info("Forum invitation received, reloading");
listener.loadInvitations(false);
}
@@ -53,7 +53,8 @@ class ForumInvitationControllerImpl
}
@Override
- protected Collection getInvitations() throws DbException {
+ protected Collection getInvitations()
+ throws DbException {
return forumSharingManager.getInvitations();
}
diff --git a/briar-android/src/org/briarproject/android/sharing/ForumSharingStatusActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumSharingStatusActivity.java
similarity index 61%
rename from briar-android/src/org/briarproject/android/sharing/ForumSharingStatusActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumSharingStatusActivity.java
index be51ab2cf..fc59fd9cf 100644
--- a/briar-android/src/org/briarproject/android/sharing/ForumSharingStatusActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumSharingStatusActivity.java
@@ -1,9 +1,10 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.forum.ForumSharingManager;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.api.forum.ForumSharingManager;
import java.util.Collection;
@@ -20,16 +21,14 @@ public class ForumSharingStatusActivity extends SharingStatusActivity {
component.inject(this);
}
- /**
- * This must only be called from the DbThread
- */
+ @DatabaseExecutor
+ @Override
protected Collection getSharedWith() throws DbException {
return forumSharingManager.getSharedWith(getGroupId());
}
- /**
- * This must only be called from the DbThread
- */
+ @DatabaseExecutor
+ @Override
protected Collection getSharedBy() throws DbException {
return forumSharingManager.getSharedBy(getGroupId());
}
diff --git a/briar-android/src/org/briarproject/android/sharing/InvitationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationActivity.java
similarity index 80%
rename from briar-android/src/org/briarproject/android/sharing/InvitationActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationActivity.java
index b398fbd82..1f755fe36 100644
--- a/briar-android/src/org/briarproject/android/sharing/InvitationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationActivity.java
@@ -1,28 +1,29 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.content.Context;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v7.widget.LinearLayoutManager;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.controller.handler.UiExceptionHandler;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.sharing.InvitationController.InvitationListener;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sharing.InvitationItem;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.controller.handler.UiExceptionHandler;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.sharing.InvitationController.InvitationListener;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.api.sharing.InvitationItem;
import java.util.Collection;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static android.widget.Toast.LENGTH_SHORT;
-import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener;
+import static org.briarproject.briar.android.sharing.InvitationAdapter.InvitationClickListener;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/sharing/InvitationAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java
similarity index 85%
rename from briar-android/src/org/briarproject/android/sharing/InvitationAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java
index 5afd24c07..1b3a4fecc 100644
--- a/briar-android/src/org/briarproject/android/sharing/InvitationAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java
@@ -1,13 +1,13 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.util.BriarAdapter;
-import org.briarproject.api.sharing.InvitationItem;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.BriarAdapter;
+import org.briarproject.briar.api.sharing.InvitationItem;
public abstract class InvitationAdapter>
extends BriarAdapter {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationController.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationController.java
new file mode 100644
index 000000000..f4e3949c0
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationController.java
@@ -0,0 +1,28 @@
+package org.briarproject.briar.android.sharing;
+
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.android.controller.ActivityLifecycleController;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.sharing.InvitationItem;
+
+import java.util.Collection;
+
+@NotNullByDefault
+public interface InvitationController
+ extends ActivityLifecycleController {
+
+ void loadInvitations(boolean clear,
+ ResultExceptionHandler, DbException> handler);
+
+ void respondToInvitation(I item, boolean accept,
+ ExceptionHandler handler);
+
+ interface InvitationListener {
+
+ void loadInvitations(boolean clear);
+
+ }
+
+}
diff --git a/briar-android/src/org/briarproject/android/sharing/InvitationControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationControllerImpl.java
similarity index 72%
rename from briar-android/src/org/briarproject/android/sharing/InvitationControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationControllerImpl.java
index b1b52aca5..0c0a9f426 100644
--- a/briar-android/src/org/briarproject/android/sharing/InvitationControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationControllerImpl.java
@@ -1,21 +1,23 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.app.Activity;
import android.support.annotation.CallSuper;
-import org.briarproject.android.controller.DbControllerImpl;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.ContactRemovedEvent;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.GroupAddedEvent;
-import org.briarproject.api.event.GroupRemovedEvent;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.sharing.InvitationItem;
-import org.briarproject.api.sync.ClientId;
+import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.ClientId;
+import org.briarproject.bramble.api.sync.event.GroupAddedEvent;
+import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
+import org.briarproject.briar.android.controller.DbControllerImpl;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.sharing.InvitationItem;
import java.util.ArrayList;
import java.util.Collection;
@@ -25,6 +27,8 @@ import java.util.logging.Logger;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public abstract class InvitationControllerImpl
extends DbControllerImpl
implements InvitationController, EventListener {
diff --git a/briar-android/src/org/briarproject/android/sharing/InvitationViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationViewHolder.java
similarity index 84%
rename from briar-android/src/org/briarproject/android/sharing/InvitationViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationViewHolder.java
index 2c8337c13..80adcfce2 100644
--- a/briar-android/src/org/briarproject/android/sharing/InvitationViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationViewHolder.java
@@ -1,16 +1,17 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.support.annotation.CallSuper;
-import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener;
-import org.briarproject.android.view.TextAvatarView;
-import org.briarproject.api.sharing.InvitationItem;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.sharing.InvitationAdapter.InvitationClickListener;
+import org.briarproject.briar.android.view.TextAvatarView;
+import org.briarproject.briar.api.sharing.InvitationItem;
+
+import javax.annotation.Nullable;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareActivity.java
similarity index 66%
rename from briar-android/src/org/briarproject/android/sharing/ShareActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareActivity.java
index 8924d5300..6db3a0694 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareActivity.java
@@ -1,22 +1,22 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.UiThread;
-import org.briarproject.R;
-import org.briarproject.android.contactselection.ContactSelectorActivity;
-import org.briarproject.android.contactselection.ContactSelectorFragment;
-import org.briarproject.android.sharing.BaseMessageFragment.MessageFragmentListener;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contactselection.ContactSelectorActivity;
+import org.briarproject.briar.android.contactselection.ContactSelectorFragment;
+import org.briarproject.briar.android.sharing.BaseMessageFragment.MessageFragmentListener;
import java.util.Collection;
+import javax.annotation.Nullable;
+
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public abstract class ShareActivity extends ContactSelectorActivity
@@ -53,7 +53,7 @@ public abstract class ShareActivity extends ContactSelectorActivity
@UiThread
@Override
- public boolean onButtonClick(@NotNull String message) {
+ public boolean onButtonClick(String message) {
share(contacts, message);
setResult(RESULT_OK);
supportFinishAfterTransition();
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogActivity.java
similarity index 68%
rename from briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogActivity.java
index 4303f3415..f395eda7b 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogActivity.java
@@ -1,23 +1,23 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.os.Bundle;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.controller.handler.UiExceptionHandler;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.controller.handler.UiExceptionHandler;
import java.util.Collection;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.widget.Toast.LENGTH_SHORT;
-import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogController.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogController.java
new file mode 100644
index 000000000..55ed2b46c
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogController.java
@@ -0,0 +1,18 @@
+package org.briarproject.briar.android.sharing;
+
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.contactselection.ContactSelectorController;
+import org.briarproject.briar.android.contactselection.SelectableContactItem;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+
+import java.util.Collection;
+
+public interface ShareBlogController
+ extends ContactSelectorController {
+
+ void share(GroupId g, Collection contacts, String msg,
+ ExceptionHandler handler);
+
+}
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
similarity index 59%
rename from briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
index 33e21f3d1..401b88ecb 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
@@ -1,18 +1,18 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
-import org.briarproject.android.contactselection.ContactSelectorControllerImpl;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.api.blogs.BlogSharingManager;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchContactException;
-import org.briarproject.api.db.NoSuchGroupException;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.NoSuchContactException;
+import org.briarproject.bramble.api.db.NoSuchGroupException;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.contactselection.ContactSelectorControllerImpl;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.api.blog.BlogSharingManager;
import java.util.Collection;
import java.util.concurrent.Executor;
@@ -34,10 +34,8 @@ class ShareBlogControllerImpl extends ContactSelectorControllerImpl
private final BlogSharingManager blogSharingManager;
@Inject
- public ShareBlogControllerImpl(
- @DatabaseExecutor Executor dbExecutor,
- LifecycleManager lifecycleManager,
- ContactManager contactManager,
+ ShareBlogControllerImpl(@DatabaseExecutor Executor dbExecutor,
+ LifecycleManager lifecycleManager, ContactManager contactManager,
BlogSharingManager blogSharingManager) {
super(dbExecutor, lifecycleManager, contactManager);
this.blogSharingManager = blogSharingManager;
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogFragment.java
similarity index 56%
rename from briar-android/src/org/briarproject/android/sharing/ShareBlogFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogFragment.java
index f055b4fb6..ab0d97e1c 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogFragment.java
@@ -1,18 +1,18 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.os.Bundle;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.contactselection.ContactSelectorController;
-import org.briarproject.android.contactselection.ContactSelectorFragment;
-import org.briarproject.android.contactselection.SelectableContactItem;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.contactselection.ContactSelectorController;
+import org.briarproject.briar.android.contactselection.ContactSelectorFragment;
+import org.briarproject.briar.android.contactselection.SelectableContactItem;
import javax.inject.Inject;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogMessageFragment.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogMessageFragment.java
index ccee4d8fe..a963664fa 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogMessageFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.os.Bundle;
import android.support.annotation.StringRes;
@@ -6,8 +6,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
public class ShareBlogMessageFragment extends BaseMessageFragment {
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumActivity.java
similarity index 68%
rename from briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumActivity.java
index 51689bc2f..f32a49cc8 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumActivity.java
@@ -1,23 +1,23 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.os.Bundle;
import android.widget.Toast;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.controller.handler.UiExceptionHandler;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.jetbrains.annotations.Nullable;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.controller.handler.UiExceptionHandler;
import java.util.Collection;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.widget.Toast.LENGTH_SHORT;
-import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
+import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumController.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumController.java
new file mode 100644
index 000000000..eedf45dfc
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumController.java
@@ -0,0 +1,18 @@
+package org.briarproject.briar.android.sharing;
+
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.contactselection.ContactSelectorController;
+import org.briarproject.briar.android.contactselection.SelectableContactItem;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+
+import java.util.Collection;
+
+public interface ShareForumController
+ extends ContactSelectorController {
+
+ void share(GroupId g, Collection contacts, String msg,
+ ExceptionHandler handler);
+
+}
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
similarity index 59%
rename from briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
index 73eba81b6..93a16307b 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
@@ -1,18 +1,18 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
-import org.briarproject.android.contactselection.ContactSelectorControllerImpl;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchContactException;
-import org.briarproject.api.db.NoSuchGroupException;
-import org.briarproject.api.forum.ForumSharingManager;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.contact.ContactManager;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.NoSuchContactException;
+import org.briarproject.bramble.api.db.NoSuchGroupException;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.contactselection.ContactSelectorControllerImpl;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.api.forum.ForumSharingManager;
import java.util.Collection;
import java.util.concurrent.Executor;
@@ -34,10 +34,8 @@ class ShareForumControllerImpl extends ContactSelectorControllerImpl
private final ForumSharingManager forumSharingManager;
@Inject
- public ShareForumControllerImpl(
- @DatabaseExecutor Executor dbExecutor,
- LifecycleManager lifecycleManager,
- ContactManager contactManager,
+ ShareForumControllerImpl(@DatabaseExecutor Executor dbExecutor,
+ LifecycleManager lifecycleManager, ContactManager contactManager,
ForumSharingManager forumSharingManager) {
super(dbExecutor, lifecycleManager, contactManager);
this.forumSharingManager = forumSharingManager;
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumFragment.java
similarity index 56%
rename from briar-android/src/org/briarproject/android/sharing/ShareForumFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumFragment.java
index 9ed8c9e58..c7bdd59fd 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumFragment.java
@@ -1,18 +1,18 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.os.Bundle;
-import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.contactselection.ContactSelectorController;
-import org.briarproject.android.contactselection.ContactSelectorFragment;
-import org.briarproject.android.contactselection.SelectableContactItem;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.contactselection.ContactSelectorController;
+import org.briarproject.briar.android.contactselection.ContactSelectorFragment;
+import org.briarproject.briar.android.contactselection.SelectableContactItem;
import javax.inject.Inject;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumMessageFragment.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumMessageFragment.java
index a3faeb630..8a30df49e 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumMessageFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.os.Bundle;
import android.support.annotation.StringRes;
@@ -6,8 +6,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.ActivityComponent;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
public class ShareForumMessageFragment extends BaseMessageFragment {
diff --git a/briar-android/src/org/briarproject/android/sharing/SharingInvitationAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationAdapter.java
similarity index 75%
rename from briar-android/src/org/briarproject/android/sharing/SharingInvitationAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationAdapter.java
index 2964c9b93..58732021a 100644
--- a/briar-android/src/org/briarproject/android/sharing/SharingInvitationAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationAdapter.java
@@ -1,14 +1,15 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.content.Context;
import android.view.ViewGroup;
-import org.briarproject.api.sharing.SharingInvitationItem;
+import org.briarproject.briar.api.sharing.SharingInvitationItem;
class SharingInvitationAdapter extends
InvitationAdapter {
- SharingInvitationAdapter(Context ctx, InvitationClickListener listener) {
+ SharingInvitationAdapter(Context ctx,
+ InvitationClickListener listener) {
super(ctx, SharingInvitationItem.class, listener);
}
diff --git a/briar-android/src/org/briarproject/android/sharing/SharingInvitationViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationViewHolder.java
similarity index 64%
rename from briar-android/src/org/briarproject/android/sharing/SharingInvitationViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationViewHolder.java
index b10672468..28c03f473 100644
--- a/briar-android/src/org/briarproject/android/sharing/SharingInvitationViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationViewHolder.java
@@ -1,20 +1,21 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
-import android.support.annotation.Nullable;
import android.view.View;
-import org.briarproject.R;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.sharing.SharingInvitationItem;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.api.sharing.SharingInvitationItem;
import java.util.ArrayList;
import java.util.Collection;
-public class SharingInvitationViewHolder
+import javax.annotation.Nullable;
+
+class SharingInvitationViewHolder
extends InvitationViewHolder {
- public SharingInvitationViewHolder(View v) {
+ SharingInvitationViewHolder(View v) {
super(v);
}
diff --git a/briar-android/src/org/briarproject/android/sharing/SharingModule.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingModule.java
similarity index 84%
rename from briar-android/src/org/briarproject/android/sharing/SharingModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingModule.java
index de632f6b1..50bcceb2b 100644
--- a/briar-android/src/org/briarproject/android/sharing/SharingModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingModule.java
@@ -1,7 +1,7 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
-import org.briarproject.android.ActivityScope;
-import org.briarproject.android.BaseActivity;
+import org.briarproject.briar.android.activity.ActivityScope;
+import org.briarproject.briar.android.activity.BaseActivity;
import dagger.Module;
import dagger.Provides;
diff --git a/briar-android/src/org/briarproject/android/sharing/SharingStatusActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java
similarity index 90%
rename from briar-android/src/org/briarproject/android/sharing/SharingStatusActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java
index 4e62598ae..543aaf6cd 100644
--- a/briar-android/src/org/briarproject/android/sharing/SharingStatusActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java
@@ -1,17 +1,17 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.view.MenuItem;
-import org.briarproject.R;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.contact.ContactItem;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.api.contact.Contact;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.contact.ContactItem;
+import org.briarproject.briar.android.view.BriarRecyclerView;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/briar-android/src/org/briarproject/android/sharing/SharingStatusAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusAdapter.java
similarity index 68%
rename from briar-android/src/org/briarproject/android/sharing/SharingStatusAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusAdapter.java
index 539d9f81f..b751b9b2f 100644
--- a/briar-android/src/org/briarproject/android/sharing/SharingStatusAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusAdapter.java
@@ -1,14 +1,14 @@
-package org.briarproject.android.sharing;
+package org.briarproject.briar.android.sharing;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.contact.BaseContactListAdapter;
-import org.briarproject.android.contact.ContactItem;
-import org.briarproject.android.contact.ContactItemViewHolder;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.contact.BaseContactListAdapter;
+import org.briarproject.briar.android.contact.ContactItem;
+import org.briarproject.briar.android.contact.ContactItemViewHolder;
class SharingStatusAdapter extends
BaseContactListAdapter> {
diff --git a/briar-android/src/org/briarproject/android/ExpiredActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredActivity.java
similarity index 69%
rename from briar-android/src/org/briarproject/android/ExpiredActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredActivity.java
index 65e4c6076..3569cc70b 100644
--- a/briar-android/src/org/briarproject/android/ExpiredActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredActivity.java
@@ -1,12 +1,12 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.splash;
import android.app.Activity;
import android.os.Bundle;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
-import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
+import static org.briarproject.briar.android.TestingConstants.PREVENT_SCREENSHOTS;
public class ExpiredActivity extends Activity {
diff --git a/briar-android/src/org/briarproject/android/SplashScreenActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java
similarity index 78%
rename from briar-android/src/org/briarproject/android/SplashScreenActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java
index 12d29096b..6b40803d0 100644
--- a/briar-android/src/org/briarproject/android/SplashScreenActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.briar.android.splash;
import android.content.Intent;
import android.os.Bundle;
@@ -8,16 +8,20 @@ import android.os.StrictMode.ThreadPolicy;
import android.os.StrictMode.VmPolicy;
import android.support.v7.preference.PreferenceManager;
-import org.briarproject.R;
-import org.briarproject.android.api.AndroidExecutor;
-import org.briarproject.android.controller.ConfigController;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BaseActivity;
+import org.briarproject.briar.android.controller.ConfigController;
+import org.briarproject.briar.android.login.SetupActivity;
+import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
import java.util.logging.Logger;
import javax.inject.Inject;
-import static org.briarproject.android.TestingConstants.DEFAULT_LOG_LEVEL;
-import static org.briarproject.android.TestingConstants.TESTING;
+import static org.briarproject.briar.android.TestingConstants.DEFAULT_LOG_LEVEL;
+import static org.briarproject.briar.android.TestingConstants.TESTING;
public class SplashScreenActivity extends BaseActivity {
diff --git a/briar-android/src/org/briarproject/android/threaded/BaseThreadItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java
similarity index 90%
rename from briar-android/src/org/briarproject/android/threaded/BaseThreadItemViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java
index af8e800b3..6bdbb9c77 100644
--- a/briar-android/src/org/briarproject/android/threaded/BaseThreadItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.threaded;
+package org.briarproject.briar.android.threaded;
import android.animation.Animator;
import android.animation.ArgbEvaluator;
@@ -13,11 +13,11 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.threaded.ThreadItemAdapter.ThreadItemListener;
-import org.briarproject.android.view.AuthorView;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.threaded.ThreadItemAdapter.ThreadItemListener;
+import org.briarproject.briar.android.view.AuthorView;
@UiThread
@NotNullByDefault
diff --git a/briar-android/src/org/briarproject/android/threaded/NestedTreeList.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/NestedTreeList.java
similarity index 80%
rename from briar-android/src/org/briarproject/android/threaded/NestedTreeList.java
rename to briar-android/src/main/java/org/briarproject/briar/android/threaded/NestedTreeList.java
index aec3c58be..d4fd06b7c 100644
--- a/briar-android/src/org/briarproject/android/threaded/NestedTreeList.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/NestedTreeList.java
@@ -1,9 +1,10 @@
-package org.briarproject.android.threaded;
+package org.briarproject.briar.android.threaded;
import android.support.annotation.UiThread;
-import org.briarproject.api.clients.MessageTree;
-import org.briarproject.clients.MessageTreeImpl;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.api.client.MessageTree;
+import org.briarproject.briar.client.MessageTreeImpl;
import java.util.ArrayList;
import java.util.Collection;
@@ -11,6 +12,7 @@ import java.util.Iterator;
import java.util.List;
@UiThread
+@NotNullByDefault
public class NestedTreeList
implements Iterable {
diff --git a/briar-android/src/org/briarproject/android/threaded/ThreadItem.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java
similarity index 70%
rename from briar-android/src/org/briarproject/android/threaded/ThreadItem.java
rename to briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java
index e4c055e2b..39d00f98f 100644
--- a/briar-android/src/org/briarproject/android/threaded/ThreadItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java
@@ -1,18 +1,22 @@
-package org.briarproject.android.threaded;
+package org.briarproject.briar.android.threaded;
-import org.briarproject.api.clients.MessageTree.MessageNode;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.Author.Status;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.Author.Status;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.api.client.MessageTree.MessageNode;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
-import static org.briarproject.android.threaded.ThreadItemAdapter.UNDEFINED;
+import static org.briarproject.briar.android.threaded.ThreadItemAdapter.UNDEFINED;
@NotThreadSafe
+@NotNullByDefault
public abstract class ThreadItem implements MessageNode {
private final MessageId messageId;
+ @Nullable
private final MessageId parentId;
private final String text;
private final long timestamp;
@@ -23,8 +27,9 @@ public abstract class ThreadItem implements MessageNode {
private int descendantCount = 0;
private boolean isRead;
- public ThreadItem(MessageId messageId, MessageId parentId, String text,
- long timestamp, Author author, Status status, boolean isRead) {
+ public ThreadItem(MessageId messageId, @Nullable MessageId parentId,
+ String text, long timestamp, Author author, Status status,
+ boolean isRead) {
this.messageId = messageId;
this.parentId = parentId;
this.text = text;
@@ -48,6 +53,7 @@ public abstract class ThreadItem implements MessageNode {
}
@Override
+ @Nullable
public MessageId getParentId() {
return parentId;
}
diff --git a/briar-android/src/org/briarproject/android/threaded/ThreadItemAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java
similarity index 95%
rename from briar-android/src/org/briarproject/android/threaded/ThreadItemAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java
index 76b062508..a22316a35 100644
--- a/briar-android/src/org/briarproject/android/threaded/ThreadItemAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java
@@ -1,7 +1,6 @@
-package org.briarproject.android.threaded;
+package org.briarproject.briar.android.threaded;
import android.animation.ValueAnimator;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -9,9 +8,9 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.briarproject.R;
-import org.briarproject.android.util.VersionedAdapter;
-import org.briarproject.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.VersionedAdapter;
import java.util.ArrayList;
import java.util.Collection;
@@ -19,6 +18,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.annotation.Nullable;
+
import static android.support.v7.widget.RecyclerView.NO_POSITION;
public class ThreadItemAdapter
@@ -116,11 +117,11 @@ public class ThreadItemAdapter
void scrollTo(I item) {
int visiblePos = getVisiblePos(item);
- if (visiblePos == NO_POSITION && item.getParentId() != null) {
+ MessageId parentId = item.getParentId();
+ if (visiblePos == NO_POSITION && parentId != null) {
// The item is not visible due to being hidden by its parent item.
// Find the parent and make it visible and traverse up the parent
// chain if necessary to make the item visible
- MessageId parentId = item.getParentId();
for (int i = items.indexOf(item) - 1; i >= 0; i--) {
I higherItem = items.get(i);
if (higherItem.getId().equals(parentId)) {
@@ -137,6 +138,7 @@ public class ThreadItemAdapter
// parent or ancestor is hidden, we need to continue up the
// dependency chain
parentId = higherItem.getParentId();
+ if (parentId == null) throw new AssertionError();
}
}
}
diff --git a/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
similarity index 88%
rename from briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java
rename to briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
index 615a3bf9d..2c2d20793 100644
--- a/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
@@ -1,10 +1,9 @@
-package org.briarproject.android.threaded;
+package org.briarproject.briar.android.threaded;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.CallSuper;
import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.annotation.UiThread;
import android.support.design.widget.Snackbar;
@@ -13,26 +12,28 @@ import android.support.v7.widget.LinearLayoutManager;
import android.view.MenuItem;
import android.view.View;
-import org.briarproject.R;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.android.threaded.ThreadItemAdapter.ThreadItemListener;
-import org.briarproject.android.threaded.ThreadListController.ThreadListListener;
-import org.briarproject.android.view.BriarRecyclerView;
-import org.briarproject.android.view.TextInputView;
-import org.briarproject.android.view.TextInputView.TextInputListener;
-import org.briarproject.api.clients.NamedGroup;
-import org.briarproject.api.clients.PostHeader;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
+import org.briarproject.briar.android.threaded.ThreadItemAdapter.ThreadItemListener;
+import org.briarproject.briar.android.threaded.ThreadListController.ThreadListListener;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.android.view.TextInputView;
+import org.briarproject.briar.android.view.TextInputView.TextInputListener;
+import org.briarproject.briar.api.client.NamedGroup;
+import org.briarproject.briar.api.client.PostHeader;
import java.util.Collection;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static android.support.design.widget.Snackbar.make;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
diff --git a/briar-android/src/org/briarproject/android/threaded/ThreadListController.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java
similarity index 57%
rename from briar-android/src/org/briarproject/android/threaded/ThreadListController.java
rename to briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java
index 19e339ea4..942a61d68 100644
--- a/briar-android/src/org/briarproject/android/threaded/ThreadListController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java
@@ -1,19 +1,22 @@
-package org.briarproject.android.threaded;
+package org.briarproject.briar.android.threaded;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
-import org.briarproject.android.DestroyableContext;
-import org.briarproject.android.controller.ActivityLifecycleController;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.clients.NamedGroup;
-import org.briarproject.api.clients.PostHeader;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.android.DestroyableContext;
+import org.briarproject.briar.android.controller.ActivityLifecycleController;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.api.client.NamedGroup;
+import org.briarproject.briar.api.client.PostHeader;
import java.util.Collection;
+import javax.annotation.Nullable;
+
+@NotNullByDefault
public interface ThreadListController
extends ActivityLifecycleController {
diff --git a/briar-android/src/org/briarproject/android/threaded/ThreadListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java
similarity index 84%
rename from briar-android/src/org/briarproject/android/threaded/ThreadListControllerImpl.java
rename to briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java
index f0c286aed..a2db5242d 100644
--- a/briar-android/src/org/briarproject/android/threaded/ThreadListControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java
@@ -1,28 +1,30 @@
-package org.briarproject.android.threaded;
+package org.briarproject.briar.android.threaded;
import android.app.Activity;
import android.support.annotation.CallSuper;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.controller.DbControllerImpl;
-import org.briarproject.android.controller.handler.ExceptionHandler;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.android.threaded.ThreadListController.ThreadListListener;
-import org.briarproject.api.clients.NamedGroup;
-import org.briarproject.api.clients.PostHeader;
-import org.briarproject.api.clients.ThreadedMessage;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.GroupRemovedEvent;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.api.system.Clock;
+import org.briarproject.bramble.api.crypto.CryptoExecutor;
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.identity.IdentityManager;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
+import org.briarproject.bramble.api.system.Clock;
+import org.briarproject.briar.android.controller.DbControllerImpl;
+import org.briarproject.briar.android.controller.handler.ExceptionHandler;
+import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
+import org.briarproject.briar.android.threaded.ThreadListController.ThreadListListener;
+import org.briarproject.briar.api.android.AndroidNotificationManager;
+import org.briarproject.briar.api.client.NamedGroup;
+import org.briarproject.briar.api.client.PostHeader;
+import org.briarproject.briar.api.client.ThreadedMessage;
import java.util.ArrayList;
import java.util.Collection;
@@ -36,6 +38,8 @@ import java.util.logging.Logger;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
public abstract class ThreadListControllerImpl>
extends DbControllerImpl
implements ThreadListController, EventListener {
diff --git a/briar-android/src/org/briarproject/android/threaded/ThreadPostViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadPostViewHolder.java
similarity index 89%
rename from briar-android/src/org/briarproject/android/threaded/ThreadPostViewHolder.java
rename to briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadPostViewHolder.java
index bffd1d6ea..87152b0d7 100644
--- a/briar-android/src/org/briarproject/android/threaded/ThreadPostViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadPostViewHolder.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.threaded;
+package org.briarproject.briar.android.threaded;
import android.support.annotation.UiThread;
import android.view.View;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.threaded.ThreadItemAdapter.ThreadItemListener;
-import org.briarproject.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.threaded.ThreadItemAdapter.ThreadItemListener;
import static android.view.View.GONE;
import static android.view.View.INVISIBLE;
@@ -49,7 +49,7 @@ public class ThreadPostViewHolder
}
if (item.getLevel() > 5) {
lvlText.setVisibility(VISIBLE);
- lvlText.setText("" + item.getLevel());
+ lvlText.setText(String.valueOf(item.getLevel()));
} else {
lvlText.setVisibility(GONE);
}
diff --git a/briar-android/src/org/briarproject/android/util/BriarAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/util/BriarAdapter.java
similarity index 97%
rename from briar-android/src/org/briarproject/android/util/BriarAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/util/BriarAdapter.java
index 091dcc8a1..889fd57f5 100644
--- a/briar-android/src/org/briarproject/android/util/BriarAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/util/BriarAdapter.java
@@ -1,7 +1,6 @@
-package org.briarproject.android.util;
+package org.briarproject.briar.android.util;
import android.content.Context;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v7.util.SortedList;
import android.support.v7.widget.RecyclerView.Adapter;
@@ -9,6 +8,8 @@ import android.support.v7.widget.RecyclerView.ViewHolder;
import java.util.Collection;
+import javax.annotation.Nullable;
+
import static android.support.v7.util.SortedList.INVALID_POSITION;
public abstract class BriarAdapter
diff --git a/briar-android/src/org/briarproject/android/util/AndroidUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
similarity index 61%
rename from briar-android/src/org/briarproject/android/util/AndroidUtils.java
rename to briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
index 6a0e6b9da..3e65fc642 100644
--- a/briar-android/src/org/briarproject/android/util/AndroidUtils.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
@@ -1,9 +1,6 @@
-package org.briarproject.android.util;
+package org.briarproject.briar.android.util;
-import android.bluetooth.BluetoothAdapter;
import android.content.Context;
-import android.os.Build;
-import android.provider.Settings;
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.content.ContextCompat;
@@ -20,20 +17,11 @@ import android.text.style.URLSpan;
import android.view.View;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.view.ArticleMovementMethod;
-import org.briarproject.android.widget.LinkDialogFragment;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.util.IoUtils;
-import org.briarproject.util.StringUtils;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.view.ArticleMovementMethod;
+import org.briarproject.briar.android.widget.LinkDialogFragment;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import static android.content.Context.MODE_PRIVATE;
import static android.text.format.DateUtils.DAY_IN_MILLIS;
import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
import static android.text.format.DateUtils.FORMAT_ABBREV_RELATIVE;
@@ -42,29 +30,12 @@ import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
import static android.text.format.DateUtils.WEEK_IN_MILLIS;
-public class AndroidUtils {
+public class UiUtils {
public static final long MIN_RESOLUTION = MINUTE_IN_MILLIS;
public static final int TEASER_LENGTH = 320;
public static final float GREY_OUT = 0.5f;
- // Fake Bluetooth address returned by BluetoothAdapter on API 23 and later
- private static final String FAKE_BLUETOOTH_ADDRESS = "02:00:00:00:00:00";
-
- private static final String STORED_REPORTS = "dev-reports";
-
- @SuppressWarnings("deprecation")
- public static Collection getSupportedArchitectures() {
- List abis = new ArrayList<>();
- if (Build.VERSION.SDK_INT >= 21) {
- abis.addAll(Arrays.asList(Build.SUPPORTED_ABIS));
- } else {
- abis.add(Build.CPU_ABI);
- if (Build.CPU_ABI2 != null) abis.add(Build.CPU_ABI2);
- }
- return abis;
- }
-
public static void setError(TextInputLayout til, String error,
boolean set) {
if (set) {
@@ -74,42 +45,6 @@ public class AndroidUtils {
}
}
- public static String getBluetoothAddress(Context ctx,
- BluetoothAdapter adapter) {
- // Return the adapter's address if it's valid and not fake
- String address = adapter.getAddress();
- if (isValidBluetoothAddress(address)) return address;
- // Return the address from settings if it's valid and not fake
- address = Settings.Secure.getString(ctx.getContentResolver(),
- "bluetooth_address");
- if (isValidBluetoothAddress(address)) return address;
- // Let the caller know we can't find the address
- return "";
- }
-
- private static boolean isValidBluetoothAddress(String address) {
- return !StringUtils.isNullOrEmpty(address)
- && BluetoothAdapter.checkBluetoothAddress(address)
- && !address.equals(FAKE_BLUETOOTH_ADDRESS);
- }
-
- public static void deleteAppData(Context ctx) {
- File dataDir = new File(ctx.getApplicationInfo().dataDir);
- File[] children = dataDir.listFiles();
- if (children != null) {
- for (File child : children) {
- if (!child.getName().equals("lib"))
- IoUtils.deleteFileOrDir(child);
- }
- }
- // Recreate the cache dir as some OpenGL drivers expect it to exist
- new File(dataDir, "cache").mkdir();
- }
-
- public static File getReportDir(Context ctx) {
- return ctx.getDir(STORED_REPORTS, MODE_PRIVATE);
- }
-
public static String formatDate(Context ctx, long time) {
int flags = FORMAT_ABBREV_RELATIVE |
FORMAT_SHOW_DATE | FORMAT_ABBREV_TIME | FORMAT_ABBREV_MONTH;
diff --git a/briar-android/src/org/briarproject/android/util/UserFeedback.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UserFeedback.java
similarity index 52%
rename from briar-android/src/org/briarproject/android/util/UserFeedback.java
rename to briar-android/src/main/java/org/briarproject/briar/android/util/UserFeedback.java
index 3c259458e..c02134a75 100644
--- a/briar-android/src/org/briarproject/android/util/UserFeedback.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UserFeedback.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.util;
+package org.briarproject.briar.android.util;
public class UserFeedback extends Exception {
diff --git a/briar-android/src/org/briarproject/android/util/VersionedAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/util/VersionedAdapter.java
similarity index 95%
rename from briar-android/src/org/briarproject/android/util/VersionedAdapter.java
rename to briar-android/src/main/java/org/briarproject/briar/android/util/VersionedAdapter.java
index 26df190cd..de900512b 100644
--- a/briar-android/src/org/briarproject/android/util/VersionedAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/util/VersionedAdapter.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.util;
+package org.briarproject.briar.android.util;
import android.support.annotation.UiThread;
diff --git a/briar-android/src/org/briarproject/android/view/ArticleMovementMethod.java b/briar-android/src/main/java/org/briarproject/briar/android/view/ArticleMovementMethod.java
similarity index 97%
rename from briar-android/src/org/briarproject/android/view/ArticleMovementMethod.java
rename to briar-android/src/main/java/org/briarproject/briar/android/view/ArticleMovementMethod.java
index d02ca1081..3eebcb05e 100644
--- a/briar-android/src/org/briarproject/android/view/ArticleMovementMethod.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/ArticleMovementMethod.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.briarproject.android.view;
+package org.briarproject.briar.android.view;
import android.text.Layout;
import android.text.Spannable;
diff --git a/briar-android/src/org/briarproject/android/view/AuthorView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java
similarity index 89%
rename from briar-android/src/org/briarproject/android/view/AuthorView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java
index 748d48516..4c3ee5944 100644
--- a/briar-android/src/org/briarproject/android/view/AuthorView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java
@@ -1,11 +1,10 @@
-package org.briarproject.android.view;
+package org.briarproject.briar.android.view;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.support.annotation.DimenRes;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.content.ContextCompat;
@@ -17,12 +16,14 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.blogs.BlogActivity;
-import org.briarproject.android.util.AndroidUtils;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.Author.Status;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.Author.Status;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.blog.BlogActivity;
+import org.briarproject.briar.android.util.UiUtils;
+
+import javax.annotation.Nullable;
import de.hdodenhof.circleimageview.CircleImageView;
import im.delight.android.identicons.IdenticonDrawable;
@@ -32,8 +33,8 @@ import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.graphics.Typeface.BOLD;
import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
import static android.util.TypedValue.COMPLEX_UNIT_PX;
-import static org.briarproject.android.BriarActivity.GROUP_ID;
-import static org.briarproject.api.identity.Author.Status.OURSELVES;
+import static org.briarproject.bramble.api.identity.Author.Status.OURSELVES;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
@UiThread
public class AuthorView extends RelativeLayout {
@@ -97,7 +98,7 @@ public class AuthorView extends RelativeLayout {
}
public void setDate(long date) {
- this.date.setText(AndroidUtils.formatDate(getContext(), date));
+ this.date.setText(UiUtils.formatDate(getContext(), date));
invalidate();
requestLayout();
diff --git a/briar-android/src/org/briarproject/android/view/BriarRecyclerView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java
similarity index 96%
rename from briar-android/src/org/briarproject/android/view/BriarRecyclerView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java
index 40f455404..1f32f5a75 100644
--- a/briar-android/src/org/briarproject/android/view/BriarRecyclerView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java
@@ -1,8 +1,7 @@
-package org.briarproject.android.view;
+package org.briarproject.briar.android.view;
import android.content.Context;
import android.content.res.TypedArray;
-import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.Adapter;
import android.util.AttributeSet;
@@ -12,11 +11,13 @@ import android.widget.FrameLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import java.util.logging.Logger;
-import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION;
+import javax.annotation.Nullable;
+
+import static org.briarproject.briar.android.util.UiUtils.MIN_RESOLUTION;
public class BriarRecyclerView extends FrameLayout {
diff --git a/briar-android/src/org/briarproject/android/view/BriarRecyclerViewBehavior.java b/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerViewBehavior.java
similarity index 96%
rename from briar-android/src/org/briarproject/android/view/BriarRecyclerViewBehavior.java
rename to briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerViewBehavior.java
index cfaa352cd..c2226ec51 100644
--- a/briar-android/src/org/briarproject/android/view/BriarRecyclerViewBehavior.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerViewBehavior.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.view;
+package org.briarproject.briar.android.view;
import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
diff --git a/briar-android/src/org/briarproject/android/view/LargeTextInputView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java
similarity index 94%
rename from briar-android/src/org/briarproject/android/view/LargeTextInputView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java
index 124361158..6b0368449 100644
--- a/briar-android/src/org/briarproject/android/view/LargeTextInputView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java
@@ -1,17 +1,17 @@
-package org.briarproject.android.view;
+package org.briarproject.briar.android.view;
import android.content.Context;
import android.content.res.TypedArray;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.util.AttributeSet;
import android.view.LayoutInflater;
-import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
-import org.briarproject.R;
+import org.briarproject.briar.R;
+
+import javax.annotation.Nullable;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
diff --git a/briar-android/src/org/briarproject/android/view/TextAvatarView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TextAvatarView.java
similarity index 90%
rename from briar-android/src/org/briarproject/android/view/TextAvatarView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/view/TextAvatarView.java
index 2f5a2cfb2..36ee3b413 100644
--- a/briar-android/src/org/briarproject/android/view/TextAvatarView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TextAvatarView.java
@@ -1,10 +1,9 @@
-package org.briarproject.android.view;
+package org.briarproject.briar.android.view;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.AppCompatTextView;
@@ -13,8 +12,10 @@ import android.view.LayoutInflater;
import android.widget.FrameLayout;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.api.identity.Author;
+import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.briar.R;
+
+import javax.annotation.Nullable;
import de.hdodenhof.circleimageview.CircleImageView;
import im.delight.android.identicons.IdenticonDrawable;
@@ -22,9 +23,9 @@ import im.delight.android.identicons.IdenticonDrawable;
@UiThread
public class TextAvatarView extends FrameLayout {
- final private AppCompatTextView character;
- final private CircleImageView background;
- final private TextView badge;
+ private final AppCompatTextView character;
+ private final CircleImageView background;
+ private final TextView badge;
private int unreadCount;
public TextAvatarView(Context context, @Nullable AttributeSet attrs) {
diff --git a/briar-android/src/org/briarproject/android/view/TextInputView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
similarity index 98%
rename from briar-android/src/org/briarproject/android/view/TextInputView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
index 5eda03167..033747179 100644
--- a/briar-android/src/org/briarproject/android/view/TextInputView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.view;
+package org.briarproject.briar.android.view;
import android.animation.LayoutTransition;
import android.content.Context;
@@ -6,7 +6,6 @@ import android.content.res.TypedArray;
import android.graphics.Rect;
import android.os.IBinder;
import android.support.annotation.CallSuper;
-import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.annotation.UiThread;
import android.text.Editable;
@@ -17,13 +16,15 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout;
import org.thoughtcrime.securesms.components.emoji.EmojiDrawer;
import org.thoughtcrime.securesms.components.emoji.EmojiDrawer.EmojiEventListener;
import org.thoughtcrime.securesms.components.emoji.EmojiEditText;
import org.thoughtcrime.securesms.components.emoji.EmojiToggle;
+import javax.annotation.Nullable;
+
import static android.content.Context.INPUT_METHOD_SERVICE;
import static android.content.Context.LAYOUT_INFLATER_SERVICE;
import static android.view.KeyEvent.KEYCODE_BACK;
diff --git a/briar-android/src/org/briarproject/android/view/TrustIndicatorView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java
similarity index 85%
rename from briar-android/src/org/briarproject/android/view/TrustIndicatorView.java
rename to briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java
index 5a88acdf6..918755eb6 100644
--- a/briar-android/src/org/briarproject/android/view/TrustIndicatorView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TrustIndicatorView.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.view;
+package org.briarproject.briar.android.view;
import android.content.Context;
import android.support.annotation.UiThread;
@@ -6,10 +6,8 @@ import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.widget.ImageView;
-import org.briarproject.R;
-import org.briarproject.api.identity.Author.Status;
-
-import static org.briarproject.api.identity.Author.Status.OURSELVES;
+import org.briarproject.bramble.api.identity.Author.Status;
+import org.briarproject.briar.R;
@UiThread
public class TrustIndicatorView extends ImageView {
diff --git a/briar-android/src/org/briarproject/android/widget/LinkDialogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/widget/LinkDialogFragment.java
similarity index 96%
rename from briar-android/src/org/briarproject/android/widget/LinkDialogFragment.java
rename to briar-android/src/main/java/org/briarproject/briar/android/widget/LinkDialogFragment.java
index ffee887f6..1370574f3 100644
--- a/briar-android/src/org/briarproject/android/widget/LinkDialogFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/widget/LinkDialogFragment.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.widget;
+package org.briarproject.briar.android.widget;
import android.content.Intent;
@@ -13,7 +13,7 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import java.util.List;
diff --git a/briar-android/src/org/briarproject/android/widget/PreferenceDividerDecoration.java b/briar-android/src/main/java/org/briarproject/briar/android/widget/PreferenceDividerDecoration.java
similarity index 77%
rename from briar-android/src/org/briarproject/android/widget/PreferenceDividerDecoration.java
rename to briar-android/src/main/java/org/briarproject/briar/android/widget/PreferenceDividerDecoration.java
index a848d3b1c..50835db2d 100644
--- a/briar-android/src/org/briarproject/android/widget/PreferenceDividerDecoration.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/widget/PreferenceDividerDecoration.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.widget;
+package org.briarproject.briar.android.widget;
import android.content.Context;
import android.graphics.Canvas;
@@ -15,7 +15,7 @@ import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.TintTypedArray;
import android.view.View;
-import org.briarproject.R;
+import org.briarproject.briar.R;
/**
* Use this class to add dividers between {@link Preference} items.
@@ -39,9 +39,11 @@ public class PreferenceDividerDecoration extends RecyclerView.ItemDecoration {
mDividerHeight = dividerHeight;
}
- public PreferenceDividerDecoration(Context context, @DrawableRes int divider, @DimenRes int dividerHeight) {
+ public PreferenceDividerDecoration(Context context,
+ @DrawableRes int divider, @DimenRes int dividerHeight) {
mDivider = ContextCompat.getDrawable(context, divider);
- mDividerHeight = context.getResources().getDimensionPixelSize(dividerHeight);
+ mDividerHeight =
+ context.getResources().getDimensionPixelSize(dividerHeight);
}
public PreferenceDividerDecoration(Context context) {
@@ -59,9 +61,6 @@ public class PreferenceDividerDecoration extends RecyclerView.ItemDecoration {
/**
* Controls whether to draw divider above the first item.
- *
- * @param drawTop
- * @return
*/
public PreferenceDividerDecoration drawTop(boolean drawTop) {
mDrawTop = drawTop;
@@ -74,9 +73,6 @@ public class PreferenceDividerDecoration extends RecyclerView.ItemDecoration {
/**
* Controls whether to draw divider at the bottom of the last item.
- *
- * @param drawBottom
- * @return
*/
public PreferenceDividerDecoration drawBottom(boolean drawBottom) {
mDrawBottom = drawBottom;
@@ -88,12 +84,11 @@ public class PreferenceDividerDecoration extends RecyclerView.ItemDecoration {
}
/**
- * Controls whether to draw divider at the bottom of each {@link Preference} and {@link PreferenceScreen} item.
- *
- * @param drawBetweenItems
- * @return
+ * Controls whether to draw divider at the bottom of each
+ * {@link Preference} and {@link PreferenceScreen} item.
*/
- public PreferenceDividerDecoration drawBetweenItems(boolean drawBetweenItems) {
+ public PreferenceDividerDecoration drawBetweenItems(
+ boolean drawBetweenItems) {
mDrawBetweenItems = drawBetweenItems;
return this;
}
@@ -103,26 +98,28 @@ public class PreferenceDividerDecoration extends RecyclerView.ItemDecoration {
}
/**
- * Controls whether to draw divider above each {@link PreferenceGroup} usually {@link PreferenceCategory}.
- *
- * @param drawBetweenCategories
- * @return
+ * Controls whether to draw divider above each {@link PreferenceGroup}
+ * usually {@link PreferenceCategory}.
*/
- public PreferenceDividerDecoration drawBetweenCategories(boolean drawBetweenCategories) {
+ public PreferenceDividerDecoration drawBetweenCategories(
+ boolean drawBetweenCategories) {
mDrawBetweenCategories = drawBetweenCategories;
return this;
}
@Override
- public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
+ public void onDrawOver(Canvas c, RecyclerView parent,
+ RecyclerView.State state) {
int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight();
- final PreferenceGroupAdapter adapter = (PreferenceGroupAdapter) parent.getAdapter();
+ final PreferenceGroupAdapter adapter =
+ (PreferenceGroupAdapter) parent.getAdapter();
final int adapterCount = adapter.getItemCount();
boolean wasLastPreferenceGroup = false;
- for (int i = 0, childCount = parent.getChildCount(); i < childCount; i++) {
+ for (int i = 0, childCount = parent.getChildCount(); i < childCount;
+ i++) {
final View child = parent.getChildAt(i);
final int adapterPosition = parent.getChildAdapterPosition(child);
@@ -164,7 +161,8 @@ public class PreferenceDividerDecoration extends RecyclerView.ItemDecoration {
}
private void drawAbove(Canvas c, int left, int right, View child) {
- final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
+ final RecyclerView.LayoutParams params =
+ (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getTop() - params.topMargin - mDividerHeight;
final int bottom = top + mDividerHeight;
mDivider.setBounds(left, top, right, bottom);
@@ -172,8 +170,10 @@ public class PreferenceDividerDecoration extends RecyclerView.ItemDecoration {
}
private void drawBottom(Canvas c, int left, int right, View child) {
- final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
- final int top = child.getBottom() + params.bottomMargin - mDividerHeight;
+ final RecyclerView.LayoutParams params =
+ (RecyclerView.LayoutParams) child.getLayoutParams();
+ final int top =
+ child.getBottom() + params.bottomMargin - mDividerHeight;
final int bottom = top + mDividerHeight;
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
diff --git a/briar-android/src/org/briarproject/android/api/AndroidNotificationManager.java b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java
similarity index 87%
rename from briar-android/src/org/briarproject/android/api/AndroidNotificationManager.java
rename to briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java
index 6a199a0fe..5161fe860 100644
--- a/briar-android/src/org/briarproject/android/api/AndroidNotificationManager.java
+++ b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java
@@ -1,7 +1,7 @@
-package org.briarproject.android.api;
+package org.briarproject.briar.api.android;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.sync.GroupId;
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.sync.GroupId;
/**
* Manages notifications for private messages, forum posts, blog posts and
diff --git a/briar-android/src/org/briarproject/android/api/ReferenceManager.java b/briar-android/src/main/java/org/briarproject/briar/api/android/ReferenceManager.java
similarity index 94%
rename from briar-android/src/org/briarproject/android/api/ReferenceManager.java
rename to briar-android/src/main/java/org/briarproject/briar/api/android/ReferenceManager.java
index 8f1cd93b0..e29b1d955 100644
--- a/briar-android/src/org/briarproject/android/api/ReferenceManager.java
+++ b/briar-android/src/main/java/org/briarproject/briar/api/android/ReferenceManager.java
@@ -1,4 +1,4 @@
-package org.briarproject.android.api;
+package org.briarproject.briar.api.android;
/**
* Manages mappings between object references and serialisable handles. This
diff --git a/briar-android/src/org/thoughtcrime/securesms/LICENSE b/briar-android/src/main/java/org/thoughtcrime/securesms/LICENSE
similarity index 100%
rename from briar-android/src/org/thoughtcrime/securesms/LICENSE
rename to briar-android/src/main/java/org/thoughtcrime/securesms/LICENSE
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
similarity index 99%
rename from briar-android/src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
index 096dd0c69..c3e6050c5 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
@@ -6,20 +6,21 @@ import android.content.SharedPreferences;
import android.graphics.Rect;
import android.os.Build;
import android.preference.PreferenceManager;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.util.AttributeSet;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static android.content.Context.WINDOW_SERVICE;
import static android.view.Surface.ROTATION_270;
import static android.view.Surface.ROTATION_90;
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/RepeatableImageKey.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java
similarity index 100%
rename from briar-android/src/org/thoughtcrime/securesms/components/RepeatableImageKey.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/AnimatingImageSpan.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/AnimatingImageSpan.java
similarity index 100%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/AnimatingImageSpan.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/AnimatingImageSpan.java
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
similarity index 98%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
index 69234600f..44c959184 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
@@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.components.emoji;
import android.content.Context;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
@@ -17,7 +16,7 @@ import android.widget.LinearLayout;
import com.astuetz.PagerSlidingTabStrip;
import com.astuetz.PagerSlidingTabStrip.CustomTabProvider;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import org.thoughtcrime.securesms.components.RepeatableImageKey;
import org.thoughtcrime.securesms.components.RepeatableImageKey.KeyEventListener;
import org.thoughtcrime.securesms.components.emoji.EmojiPageView.EmojiSelectionListener;
@@ -26,6 +25,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
+
import static android.view.KeyEvent.ACTION_DOWN;
import static android.view.KeyEvent.KEYCODE_DEL;
import static android.widget.ImageView.ScaleType.CENTER_INSIDE;
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
similarity index 95%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
index a8a25671e..980e29cda 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
@@ -3,15 +3,16 @@ package org.thoughtcrime.securesms.components.emoji;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v7.widget.AppCompatEditText;
import android.text.InputFilter;
import android.util.AttributeSet;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import org.thoughtcrime.securesms.components.emoji.EmojiProvider.EmojiDrawable;
+import javax.annotation.Nullable;
+
@UiThread
public class EmojiEditText extends AppCompatEditText {
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java
similarity index 91%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java
index 603544869..3afc44c2f 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java
@@ -1,6 +1,5 @@
package org.thoughtcrime.securesms.components.emoji;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.text.InputFilter;
import android.text.Spannable;
@@ -8,12 +7,14 @@ import android.text.Spanned;
import android.text.TextUtils;
import android.widget.TextView;
+import javax.annotation.Nullable;
+
@UiThread
class EmojiFilter implements InputFilter {
private final TextView view;
- public EmojiFilter(TextView view) {
+ EmojiFilter(TextView view) {
this.view = view;
}
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java
similarity index 87%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java
index 2e0b899d5..eeaf12409 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java
@@ -2,7 +2,8 @@ package org.thoughtcrime.securesms.components.emoji;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+
+import javax.annotation.Nullable;
interface EmojiPageModel {
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java
similarity index 97%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java
index fa5e97c8e..9344319cd 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java
@@ -1,7 +1,6 @@
package org.thoughtcrime.securesms.components.emoji;
import android.content.Context;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.util.AttributeSet;
import android.view.LayoutInflater;
@@ -14,7 +13,9 @@ import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.GridView;
-import org.briarproject.R;
+import org.briarproject.briar.R;
+
+import javax.annotation.Nullable;
@UiThread
public class EmojiPageView extends FrameLayout {
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiPages.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPages.java
similarity index 98%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiPages.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPages.java
index 0544de13a..1427b5df9 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiPages.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPages.java
@@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.components.emoji;
import android.content.Context;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import java.util.Arrays;
import java.util.List;
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
similarity index 97%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
index 2ea99864e..09778df1f 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
@@ -9,15 +9,14 @@ import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.util.SparseArray;
import android.widget.TextView;
-import org.briarproject.R;
-import org.briarproject.android.BaseActivity;
-import org.briarproject.android.api.AndroidExecutor;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.BaseActivity;
import org.thoughtcrime.securesms.components.util.FutureTaskListener;
import org.thoughtcrime.securesms.components.util.ListenableFutureTask;
import org.thoughtcrime.securesms.util.BitmapDecodingException;
@@ -31,6 +30,7 @@ import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.graphics.PixelFormat.TRANSLUCENT;
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java
similarity index 97%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java
index 6168ee273..7cab093d8 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java
@@ -7,7 +7,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import android.widget.TextView;
-import org.briarproject.R;
+import org.briarproject.briar.R;
@UiThread
class EmojiSpan extends AnimatingImageSpan {
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java
similarity index 98%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java
index 8cb9ecc09..024f318c0 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java
@@ -4,7 +4,6 @@ import android.content.Context;
import android.graphics.Paint.FontMetricsInt;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -13,6 +12,8 @@ import android.widget.TextView;
import org.thoughtcrime.securesms.components.emoji.EmojiProvider.EmojiDrawable;
+import javax.annotation.Nullable;
+
import static android.text.TextUtils.TruncateAt.END;
import static android.view.View.MeasureSpec.AT_MOST;
import static android.view.View.MeasureSpec.EXACTLY;
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java
similarity index 94%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java
index d1f472243..75e79bb27 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java
@@ -2,15 +2,16 @@ package org.thoughtcrime.securesms.components.emoji;
import android.content.Context;
import android.graphics.drawable.Drawable;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.widget.ImageButton;
-import org.briarproject.R;
+import org.briarproject.briar.R;
import org.thoughtcrime.securesms.components.emoji.EmojiDrawer.EmojiDrawerListener;
+import javax.annotation.Nullable;
+
@UiThread
public class EmojiToggle extends ImageButton implements EmojiDrawerListener {
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiView.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiView.java
similarity index 97%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiView.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiView.java
index c4f064d2a..50217e3b7 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/EmojiView.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiView.java
@@ -5,13 +5,14 @@ import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.view.View;
-import org.briarproject.R;
+import org.briarproject.briar.R;
+
+import javax.annotation.Nullable;
import static android.graphics.Paint.ANTI_ALIAS_FLAG;
import static android.graphics.Paint.Align.CENTER;
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java
similarity index 87%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java
index 1c16d9c87..89d086ef7 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java
@@ -3,25 +3,25 @@ package org.thoughtcrime.securesms.components.emoji;
import android.content.Context;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
-import org.briarproject.R;
-import org.briarproject.android.BaseActivity;
-import org.briarproject.android.controller.DbController;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.settings.Settings;
-import org.briarproject.api.settings.SettingsManager;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.settings.Settings;
+import org.briarproject.bramble.api.settings.SettingsManager;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.BaseActivity;
+import org.briarproject.briar.android.controller.DbController;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.logging.Logger;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.fragment.SettingsFragment.SETTINGS_NAMESPACE;
+import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
@UiThread
public class RecentEmojiPageModel implements EmojiPageModel {
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java
similarity index 97%
rename from briar-android/src/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java
index 688ee3ae7..4f9c9b94c 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java
@@ -4,9 +4,10 @@ import android.content.Context;
import android.support.annotation.ArrayRes;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
+import javax.annotation.Nullable;
+
@UiThread
class StaticEmojiPageModel implements EmojiPageModel {
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/util/FutureTaskListener.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/FutureTaskListener.java
similarity index 100%
rename from briar-android/src/org/thoughtcrime/securesms/components/util/FutureTaskListener.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/util/FutureTaskListener.java
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java
similarity index 98%
rename from briar-android/src/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java
index 128314884..d9651770d 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java
@@ -16,14 +16,14 @@
*/
package org.thoughtcrime.securesms.components.util;
-import android.support.annotation.Nullable;
-
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
+import javax.annotation.Nullable;
+
public class ListenableFutureTask extends FutureTask {
private final List> listeners = new LinkedList<>();
diff --git a/briar-android/src/org/thoughtcrime/securesms/util/BitmapDecodingException.java b/briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapDecodingException.java
similarity index 100%
rename from briar-android/src/org/thoughtcrime/securesms/util/BitmapDecodingException.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapDecodingException.java
diff --git a/briar-android/src/org/thoughtcrime/securesms/util/BitmapUtil.java b/briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java
similarity index 100%
rename from briar-android/src/org/thoughtcrime/securesms/util/BitmapUtil.java
rename to briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java
diff --git a/briar-android/res/drawable-hdpi/ic_launcher.png b/briar-android/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/ic_launcher.png
rename to briar-android/src/main/res/drawable-hdpi/ic_launcher.png
diff --git a/briar-android/res/drawable-hdpi/logo.png b/briar-android/src/main/res/drawable-hdpi/logo.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/logo.png
rename to briar-android/src/main/res/drawable-hdpi/logo.png
diff --git a/briar-android/res/drawable-hdpi/msg_in.9.png b/briar-android/src/main/res/drawable-hdpi/msg_in.9.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/msg_in.9.png
rename to briar-android/src/main/res/drawable-hdpi/msg_in.9.png
diff --git a/briar-android/res/drawable-hdpi/msg_in_top.9.png b/briar-android/src/main/res/drawable-hdpi/msg_in_top.9.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/msg_in_top.9.png
rename to briar-android/src/main/res/drawable-hdpi/msg_in_top.9.png
diff --git a/briar-android/res/drawable-hdpi/msg_out.9.png b/briar-android/src/main/res/drawable-hdpi/msg_out.9.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/msg_out.9.png
rename to briar-android/src/main/res/drawable-hdpi/msg_out.9.png
diff --git a/briar-android/res/drawable-hdpi/msg_out_top.9.png b/briar-android/src/main/res/drawable-hdpi/msg_out_top.9.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/msg_out_top.9.png
rename to briar-android/src/main/res/drawable-hdpi/msg_out_top.9.png
diff --git a/briar-android/res/drawable-hdpi/notice_in.9.png b/briar-android/src/main/res/drawable-hdpi/notice_in.9.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/notice_in.9.png
rename to briar-android/src/main/res/drawable-hdpi/notice_in.9.png
diff --git a/briar-android/res/drawable-hdpi/notice_in_bottom.9.png b/briar-android/src/main/res/drawable-hdpi/notice_in_bottom.9.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/notice_in_bottom.9.png
rename to briar-android/src/main/res/drawable-hdpi/notice_in_bottom.9.png
diff --git a/briar-android/res/drawable-hdpi/notice_out.9.png b/briar-android/src/main/res/drawable-hdpi/notice_out.9.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/notice_out.9.png
rename to briar-android/src/main/res/drawable-hdpi/notice_out.9.png
diff --git a/briar-android/res/drawable-hdpi/notice_out_bottom.9.png b/briar-android/src/main/res/drawable-hdpi/notice_out_bottom.9.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/notice_out_bottom.9.png
rename to briar-android/src/main/res/drawable-hdpi/notice_out_bottom.9.png
diff --git a/briar-android/res/drawable-hdpi/ongoing_notification_icon.png b/briar-android/src/main/res/drawable-hdpi/ongoing_notification_icon.png
similarity index 100%
rename from briar-android/res/drawable-hdpi/ongoing_notification_icon.png
rename to briar-android/src/main/res/drawable-hdpi/ongoing_notification_icon.png
diff --git a/briar-android/res/drawable-ldpi/ic_launcher.png b/briar-android/src/main/res/drawable-ldpi/ic_launcher.png
similarity index 100%
rename from briar-android/res/drawable-ldpi/ic_launcher.png
rename to briar-android/src/main/res/drawable-ldpi/ic_launcher.png
diff --git a/briar-android/res/drawable-ldpi/logo.png b/briar-android/src/main/res/drawable-ldpi/logo.png
similarity index 100%
rename from briar-android/res/drawable-ldpi/logo.png
rename to briar-android/src/main/res/drawable-ldpi/logo.png
diff --git a/briar-android/res/drawable-ldpi/ongoing_notification_icon.png b/briar-android/src/main/res/drawable-ldpi/ongoing_notification_icon.png
similarity index 100%
rename from briar-android/res/drawable-ldpi/ongoing_notification_icon.png
rename to briar-android/src/main/res/drawable-ldpi/ongoing_notification_icon.png
diff --git a/briar-android/res/drawable-mdpi/ic_launcher.png b/briar-android/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/ic_launcher.png
rename to briar-android/src/main/res/drawable-mdpi/ic_launcher.png
diff --git a/briar-android/res/drawable-mdpi/logo.png b/briar-android/src/main/res/drawable-mdpi/logo.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/logo.png
rename to briar-android/src/main/res/drawable-mdpi/logo.png
diff --git a/briar-android/res/drawable-mdpi/msg_in.9.png b/briar-android/src/main/res/drawable-mdpi/msg_in.9.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/msg_in.9.png
rename to briar-android/src/main/res/drawable-mdpi/msg_in.9.png
diff --git a/briar-android/res/drawable-mdpi/msg_in_top.9.png b/briar-android/src/main/res/drawable-mdpi/msg_in_top.9.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/msg_in_top.9.png
rename to briar-android/src/main/res/drawable-mdpi/msg_in_top.9.png
diff --git a/briar-android/res/drawable-mdpi/msg_out.9.png b/briar-android/src/main/res/drawable-mdpi/msg_out.9.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/msg_out.9.png
rename to briar-android/src/main/res/drawable-mdpi/msg_out.9.png
diff --git a/briar-android/res/drawable-mdpi/msg_out_top.9.png b/briar-android/src/main/res/drawable-mdpi/msg_out_top.9.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/msg_out_top.9.png
rename to briar-android/src/main/res/drawable-mdpi/msg_out_top.9.png
diff --git a/briar-android/res/drawable-mdpi/notice_in.9.png b/briar-android/src/main/res/drawable-mdpi/notice_in.9.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/notice_in.9.png
rename to briar-android/src/main/res/drawable-mdpi/notice_in.9.png
diff --git a/briar-android/res/drawable-mdpi/notice_in_bottom.9.png b/briar-android/src/main/res/drawable-mdpi/notice_in_bottom.9.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/notice_in_bottom.9.png
rename to briar-android/src/main/res/drawable-mdpi/notice_in_bottom.9.png
diff --git a/briar-android/res/drawable-mdpi/notice_out.9.png b/briar-android/src/main/res/drawable-mdpi/notice_out.9.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/notice_out.9.png
rename to briar-android/src/main/res/drawable-mdpi/notice_out.9.png
diff --git a/briar-android/res/drawable-mdpi/notice_out_bottom.9.png b/briar-android/src/main/res/drawable-mdpi/notice_out_bottom.9.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/notice_out_bottom.9.png
rename to briar-android/src/main/res/drawable-mdpi/notice_out_bottom.9.png
diff --git a/briar-android/res/drawable-mdpi/ongoing_notification_icon.png b/briar-android/src/main/res/drawable-mdpi/ongoing_notification_icon.png
similarity index 100%
rename from briar-android/res/drawable-mdpi/ongoing_notification_icon.png
rename to briar-android/src/main/res/drawable-mdpi/ongoing_notification_icon.png
diff --git a/briar-android/res/drawable-xhdpi/ic_launcher.png b/briar-android/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/ic_launcher.png
rename to briar-android/src/main/res/drawable-xhdpi/ic_launcher.png
diff --git a/briar-android/res/drawable-xhdpi/logo.png b/briar-android/src/main/res/drawable-xhdpi/logo.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/logo.png
rename to briar-android/src/main/res/drawable-xhdpi/logo.png
diff --git a/briar-android/res/drawable-xhdpi/msg_in.9.png b/briar-android/src/main/res/drawable-xhdpi/msg_in.9.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/msg_in.9.png
rename to briar-android/src/main/res/drawable-xhdpi/msg_in.9.png
diff --git a/briar-android/res/drawable-xhdpi/msg_in_top.9.png b/briar-android/src/main/res/drawable-xhdpi/msg_in_top.9.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/msg_in_top.9.png
rename to briar-android/src/main/res/drawable-xhdpi/msg_in_top.9.png
diff --git a/briar-android/res/drawable-xhdpi/msg_out.9.png b/briar-android/src/main/res/drawable-xhdpi/msg_out.9.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/msg_out.9.png
rename to briar-android/src/main/res/drawable-xhdpi/msg_out.9.png
diff --git a/briar-android/res/drawable-xhdpi/msg_out_top.9.png b/briar-android/src/main/res/drawable-xhdpi/msg_out_top.9.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/msg_out_top.9.png
rename to briar-android/src/main/res/drawable-xhdpi/msg_out_top.9.png
diff --git a/briar-android/res/drawable-xhdpi/notice_in.9.png b/briar-android/src/main/res/drawable-xhdpi/notice_in.9.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/notice_in.9.png
rename to briar-android/src/main/res/drawable-xhdpi/notice_in.9.png
diff --git a/briar-android/res/drawable-xhdpi/notice_in_bottom.9.png b/briar-android/src/main/res/drawable-xhdpi/notice_in_bottom.9.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/notice_in_bottom.9.png
rename to briar-android/src/main/res/drawable-xhdpi/notice_in_bottom.9.png
diff --git a/briar-android/res/drawable-xhdpi/notice_out.9.png b/briar-android/src/main/res/drawable-xhdpi/notice_out.9.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/notice_out.9.png
rename to briar-android/src/main/res/drawable-xhdpi/notice_out.9.png
diff --git a/briar-android/res/drawable-xhdpi/notice_out_bottom.9.png b/briar-android/src/main/res/drawable-xhdpi/notice_out_bottom.9.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/notice_out_bottom.9.png
rename to briar-android/src/main/res/drawable-xhdpi/notice_out_bottom.9.png
diff --git a/briar-android/res/drawable-xhdpi/ongoing_notification_icon.png b/briar-android/src/main/res/drawable-xhdpi/ongoing_notification_icon.png
similarity index 100%
rename from briar-android/res/drawable-xhdpi/ongoing_notification_icon.png
rename to briar-android/src/main/res/drawable-xhdpi/ongoing_notification_icon.png
diff --git a/briar-android/res/drawable-xxhdpi/msg_in.9.png b/briar-android/src/main/res/drawable-xxhdpi/msg_in.9.png
similarity index 100%
rename from briar-android/res/drawable-xxhdpi/msg_in.9.png
rename to briar-android/src/main/res/drawable-xxhdpi/msg_in.9.png
diff --git a/briar-android/res/drawable-xxhdpi/msg_in_top.9.png b/briar-android/src/main/res/drawable-xxhdpi/msg_in_top.9.png
similarity index 100%
rename from briar-android/res/drawable-xxhdpi/msg_in_top.9.png
rename to briar-android/src/main/res/drawable-xxhdpi/msg_in_top.9.png
diff --git a/briar-android/res/drawable-xxhdpi/msg_out.9.png b/briar-android/src/main/res/drawable-xxhdpi/msg_out.9.png
similarity index 100%
rename from briar-android/res/drawable-xxhdpi/msg_out.9.png
rename to briar-android/src/main/res/drawable-xxhdpi/msg_out.9.png
diff --git a/briar-android/res/drawable-xxhdpi/msg_out_top.9.png b/briar-android/src/main/res/drawable-xxhdpi/msg_out_top.9.png
similarity index 100%
rename from briar-android/res/drawable-xxhdpi/msg_out_top.9.png
rename to briar-android/src/main/res/drawable-xxhdpi/msg_out_top.9.png
diff --git a/briar-android/res/drawable-xxhdpi/notice_in.9.png b/briar-android/src/main/res/drawable-xxhdpi/notice_in.9.png
similarity index 100%
rename from briar-android/res/drawable-xxhdpi/notice_in.9.png
rename to briar-android/src/main/res/drawable-xxhdpi/notice_in.9.png
diff --git a/briar-android/res/drawable-xxhdpi/notice_in_bottom.9.png b/briar-android/src/main/res/drawable-xxhdpi/notice_in_bottom.9.png
similarity index 100%
rename from briar-android/res/drawable-xxhdpi/notice_in_bottom.9.png
rename to briar-android/src/main/res/drawable-xxhdpi/notice_in_bottom.9.png
diff --git a/briar-android/res/drawable-xxhdpi/notice_out.9.png b/briar-android/src/main/res/drawable-xxhdpi/notice_out.9.png
similarity index 100%
rename from briar-android/res/drawable-xxhdpi/notice_out.9.png
rename to briar-android/src/main/res/drawable-xxhdpi/notice_out.9.png
diff --git a/briar-android/res/drawable-xxhdpi/notice_out_bottom.9.png b/briar-android/src/main/res/drawable-xxhdpi/notice_out_bottom.9.png
similarity index 100%
rename from briar-android/res/drawable-xxhdpi/notice_out_bottom.9.png
rename to briar-android/src/main/res/drawable-xxhdpi/notice_out_bottom.9.png
diff --git a/briar-android/res/drawable/action_delete_black.xml b/briar-android/src/main/res/drawable/action_delete_black.xml
similarity index 100%
rename from briar-android/res/drawable/action_delete_black.xml
rename to briar-android/src/main/res/drawable/action_delete_black.xml
diff --git a/briar-android/res/drawable/action_delete_white.xml b/briar-android/src/main/res/drawable/action_delete_white.xml
similarity index 100%
rename from briar-android/res/drawable/action_delete_white.xml
rename to briar-android/src/main/res/drawable/action_delete_white.xml
diff --git a/briar-android/res/drawable/alerts_and_states_error.xml b/briar-android/src/main/res/drawable/alerts_and_states_error.xml
similarity index 100%
rename from briar-android/res/drawable/alerts_and_states_error.xml
rename to briar-android/src/main/res/drawable/alerts_and_states_error.xml
diff --git a/briar-android/res/drawable/blogs.xml b/briar-android/src/main/res/drawable/blogs.xml
similarity index 100%
rename from briar-android/res/drawable/blogs.xml
rename to briar-android/src/main/res/drawable/blogs.xml
diff --git a/briar-android/res/drawable/bluetooth.xml b/briar-android/src/main/res/drawable/bluetooth.xml
similarity index 100%
rename from briar-android/res/drawable/bluetooth.xml
rename to briar-android/src/main/res/drawable/bluetooth.xml
diff --git a/briar-android/res/drawable/border_explanation.xml b/briar-android/src/main/res/drawable/border_explanation.xml
similarity index 100%
rename from briar-android/res/drawable/border_explanation.xml
rename to briar-android/src/main/res/drawable/border_explanation.xml
diff --git a/briar-android/res/drawable/border_spinner.xml b/briar-android/src/main/res/drawable/border_spinner.xml
similarity index 100%
rename from briar-android/res/drawable/border_spinner.xml
rename to briar-android/src/main/res/drawable/border_spinner.xml
diff --git a/briar-android/res/drawable/briar_logo_large.png b/briar-android/src/main/res/drawable/briar_logo_large.png
similarity index 100%
rename from briar-android/res/drawable/briar_logo_large.png
rename to briar-android/src/main/res/drawable/briar_logo_large.png
diff --git a/briar-android/res/drawable/bubble.xml b/briar-android/src/main/res/drawable/bubble.xml
similarity index 100%
rename from briar-android/res/drawable/bubble.xml
rename to briar-android/src/main/res/drawable/bubble.xml
diff --git a/briar-android/res/drawable/bubble_problem.xml b/briar-android/src/main/res/drawable/bubble_problem.xml
similarity index 100%
rename from briar-android/res/drawable/bubble_problem.xml
rename to briar-android/src/main/res/drawable/bubble_problem.xml
diff --git a/briar-android/res/drawable/bubble_white.xml b/briar-android/src/main/res/drawable/bubble_white.xml
similarity index 100%
rename from briar-android/res/drawable/bubble_white.xml
rename to briar-android/src/main/res/drawable/bubble_white.xml
diff --git a/briar-android/res/drawable/chevron48dp_down.xml b/briar-android/src/main/res/drawable/chevron48dp_down.xml
similarity index 100%
rename from briar-android/res/drawable/chevron48dp_down.xml
rename to briar-android/src/main/res/drawable/chevron48dp_down.xml
diff --git a/briar-android/res/drawable/chevron48dp_up.xml b/briar-android/src/main/res/drawable/chevron48dp_up.xml
similarity index 100%
rename from briar-android/res/drawable/chevron48dp_up.xml
rename to briar-android/src/main/res/drawable/chevron48dp_up.xml
diff --git a/briar-android/res/drawable/contact_connected.xml b/briar-android/src/main/res/drawable/contact_connected.xml
similarity index 100%
rename from briar-android/res/drawable/contact_connected.xml
rename to briar-android/src/main/res/drawable/contact_connected.xml
diff --git a/briar-android/res/drawable/contact_disconnected.xml b/briar-android/src/main/res/drawable/contact_disconnected.xml
similarity index 100%
rename from briar-android/res/drawable/contact_disconnected.xml
rename to briar-android/src/main/res/drawable/contact_disconnected.xml
diff --git a/briar-android/res/drawable/contact_offline.xml b/briar-android/src/main/res/drawable/contact_offline.xml
similarity index 100%
rename from briar-android/res/drawable/contact_offline.xml
rename to briar-android/src/main/res/drawable/contact_offline.xml
diff --git a/briar-android/res/drawable/contact_online.xml b/briar-android/src/main/res/drawable/contact_online.xml
similarity index 100%
rename from briar-android/res/drawable/contact_online.xml
rename to briar-android/src/main/res/drawable/contact_online.xml
diff --git a/briar-android/res/drawable/forum_item_create_white.xml b/briar-android/src/main/res/drawable/forum_item_create_white.xml
similarity index 100%
rename from briar-android/res/drawable/forum_item_create_white.xml
rename to briar-android/src/main/res/drawable/forum_item_create_white.xml
diff --git a/briar-android/res/drawable/ic_add_white.xml b/briar-android/src/main/res/drawable/ic_add_white.xml
similarity index 100%
rename from briar-android/res/drawable/ic_add_white.xml
rename to briar-android/src/main/res/drawable/ic_add_white.xml
diff --git a/briar-android/res/drawable/ic_backspace_black.xml b/briar-android/src/main/res/drawable/ic_backspace_black.xml
similarity index 100%
rename from briar-android/res/drawable/ic_backspace_black.xml
rename to briar-android/src/main/res/drawable/ic_backspace_black.xml
diff --git a/briar-android/res/drawable/ic_check_white.xml b/briar-android/src/main/res/drawable/ic_check_white.xml
similarity index 100%
rename from briar-android/res/drawable/ic_check_white.xml
rename to briar-android/src/main/res/drawable/ic_check_white.xml
diff --git a/briar-android/res/drawable/ic_contact_introduction.xml b/briar-android/src/main/res/drawable/ic_contact_introduction.xml
similarity index 100%
rename from briar-android/res/drawable/ic_contact_introduction.xml
rename to briar-android/src/main/res/drawable/ic_contact_introduction.xml
diff --git a/briar-android/res/drawable/ic_contacts.xml b/briar-android/src/main/res/drawable/ic_contacts.xml
similarity index 100%
rename from briar-android/res/drawable/ic_contacts.xml
rename to briar-android/src/main/res/drawable/ic_contacts.xml
diff --git a/briar-android/res/drawable/ic_emoji_activity.xml b/briar-android/src/main/res/drawable/ic_emoji_activity.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_activity.xml
rename to briar-android/src/main/res/drawable/ic_emoji_activity.xml
diff --git a/briar-android/res/drawable/ic_emoji_animals_nature.xml b/briar-android/src/main/res/drawable/ic_emoji_animals_nature.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_animals_nature.xml
rename to briar-android/src/main/res/drawable/ic_emoji_animals_nature.xml
diff --git a/briar-android/res/drawable/ic_emoji_emoticons.xml b/briar-android/src/main/res/drawable/ic_emoji_emoticons.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_emoticons.xml
rename to briar-android/src/main/res/drawable/ic_emoji_emoticons.xml
diff --git a/briar-android/res/drawable/ic_emoji_flags.xml b/briar-android/src/main/res/drawable/ic_emoji_flags.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_flags.xml
rename to briar-android/src/main/res/drawable/ic_emoji_flags.xml
diff --git a/briar-android/res/drawable/ic_emoji_food_drink.xml b/briar-android/src/main/res/drawable/ic_emoji_food_drink.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_food_drink.xml
rename to briar-android/src/main/res/drawable/ic_emoji_food_drink.xml
diff --git a/briar-android/res/drawable/ic_emoji_objects.xml b/briar-android/src/main/res/drawable/ic_emoji_objects.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_objects.xml
rename to briar-android/src/main/res/drawable/ic_emoji_objects.xml
diff --git a/briar-android/res/drawable/ic_emoji_recent.xml b/briar-android/src/main/res/drawable/ic_emoji_recent.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_recent.xml
rename to briar-android/src/main/res/drawable/ic_emoji_recent.xml
diff --git a/briar-android/res/drawable/ic_emoji_smiley_people.xml b/briar-android/src/main/res/drawable/ic_emoji_smiley_people.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_smiley_people.xml
rename to briar-android/src/main/res/drawable/ic_emoji_smiley_people.xml
diff --git a/briar-android/res/drawable/ic_emoji_symbols.xml b/briar-android/src/main/res/drawable/ic_emoji_symbols.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_symbols.xml
rename to briar-android/src/main/res/drawable/ic_emoji_symbols.xml
diff --git a/briar-android/res/drawable/ic_emoji_toggle.xml b/briar-android/src/main/res/drawable/ic_emoji_toggle.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_toggle.xml
rename to briar-android/src/main/res/drawable/ic_emoji_toggle.xml
diff --git a/briar-android/res/drawable/ic_emoji_travel_places.xml b/briar-android/src/main/res/drawable/ic_emoji_travel_places.xml
similarity index 100%
rename from briar-android/res/drawable/ic_emoji_travel_places.xml
rename to briar-android/src/main/res/drawable/ic_emoji_travel_places.xml
diff --git a/briar-android/res/drawable/ic_forums_black_24dp.xml b/briar-android/src/main/res/drawable/ic_forums_black_24dp.xml
similarity index 100%
rename from briar-android/res/drawable/ic_forums_black_24dp.xml
rename to briar-android/src/main/res/drawable/ic_forums_black_24dp.xml
diff --git a/briar-android/res/drawable/ic_group.xml b/briar-android/src/main/res/drawable/ic_group.xml
similarity index 100%
rename from briar-android/res/drawable/ic_group.xml
rename to briar-android/src/main/res/drawable/ic_group.xml
diff --git a/briar-android/res/drawable/ic_group_white.xml b/briar-android/src/main/res/drawable/ic_group_white.xml
similarity index 100%
rename from briar-android/res/drawable/ic_group_white.xml
rename to briar-android/src/main/res/drawable/ic_group_white.xml
diff --git a/briar-android/res/drawable/ic_info_white.xml b/briar-android/src/main/res/drawable/ic_info_white.xml
similarity index 100%
rename from briar-android/res/drawable/ic_info_white.xml
rename to briar-android/src/main/res/drawable/ic_info_white.xml
diff --git a/briar-android/res/drawable/ic_keyboard_black.xml b/briar-android/src/main/res/drawable/ic_keyboard_black.xml
similarity index 100%
rename from briar-android/res/drawable/ic_keyboard_black.xml
rename to briar-android/src/main/res/drawable/ic_keyboard_black.xml
diff --git a/briar-android/res/drawable/ic_more_vert_accent.xml b/briar-android/src/main/res/drawable/ic_more_vert_accent.xml
similarity index 100%
rename from briar-android/res/drawable/ic_more_vert_accent.xml
rename to briar-android/src/main/res/drawable/ic_more_vert_accent.xml
diff --git a/briar-android/res/drawable/ic_our_identity_black.xml b/briar-android/src/main/res/drawable/ic_our_identity_black.xml
similarity index 100%
rename from briar-android/res/drawable/ic_our_identity_black.xml
rename to briar-android/src/main/res/drawable/ic_our_identity_black.xml
diff --git a/briar-android/res/drawable/ic_repeat.xml b/briar-android/src/main/res/drawable/ic_repeat.xml
similarity index 100%
rename from briar-android/res/drawable/ic_repeat.xml
rename to briar-android/src/main/res/drawable/ic_repeat.xml
diff --git a/briar-android/res/drawable/ic_settings_black_24dp.xml b/briar-android/src/main/res/drawable/ic_settings_black_24dp.xml
similarity index 100%
rename from briar-android/res/drawable/ic_settings_black_24dp.xml
rename to briar-android/src/main/res/drawable/ic_settings_black_24dp.xml
diff --git a/briar-android/res/drawable/ic_signout_black_24dp.xml b/briar-android/src/main/res/drawable/ic_signout_black_24dp.xml
similarity index 100%
rename from briar-android/res/drawable/ic_signout_black_24dp.xml
rename to briar-android/src/main/res/drawable/ic_signout_black_24dp.xml
diff --git a/briar-android/res/drawable/ic_visibility.xml b/briar-android/src/main/res/drawable/ic_visibility.xml
similarity index 100%
rename from briar-android/res/drawable/ic_visibility.xml
rename to briar-android/src/main/res/drawable/ic_visibility.xml
diff --git a/briar-android/res/drawable/ic_visibility_off.xml b/briar-android/src/main/res/drawable/ic_visibility_off.xml
similarity index 100%
rename from briar-android/res/drawable/ic_visibility_off.xml
rename to briar-android/src/main/res/drawable/ic_visibility_off.xml
diff --git a/briar-android/res/drawable/ic_visibility_white.xml b/briar-android/src/main/res/drawable/ic_visibility_white.xml
similarity index 100%
rename from briar-android/res/drawable/ic_visibility_white.xml
rename to briar-android/src/main/res/drawable/ic_visibility_white.xml
diff --git a/briar-android/res/drawable/introduction_notification.xml b/briar-android/src/main/res/drawable/introduction_notification.xml
similarity index 100%
rename from briar-android/res/drawable/introduction_notification.xml
rename to briar-android/src/main/res/drawable/introduction_notification.xml
diff --git a/briar-android/res/drawable/introduction_white.xml b/briar-android/src/main/res/drawable/introduction_white.xml
similarity index 100%
rename from briar-android/res/drawable/introduction_white.xml
rename to briar-android/src/main/res/drawable/introduction_white.xml
diff --git a/briar-android/res/drawable/level_indicator_circle.xml b/briar-android/src/main/res/drawable/level_indicator_circle.xml
similarity index 100%
rename from briar-android/res/drawable/level_indicator_circle.xml
rename to briar-android/src/main/res/drawable/level_indicator_circle.xml
diff --git a/briar-android/res/drawable/message_delivered.xml b/briar-android/src/main/res/drawable/message_delivered.xml
similarity index 100%
rename from briar-android/res/drawable/message_delivered.xml
rename to briar-android/src/main/res/drawable/message_delivered.xml
diff --git a/briar-android/res/drawable/message_delivered_white.xml b/briar-android/src/main/res/drawable/message_delivered_white.xml
similarity index 100%
rename from briar-android/res/drawable/message_delivered_white.xml
rename to briar-android/src/main/res/drawable/message_delivered_white.xml
diff --git a/briar-android/res/drawable/message_notification_icon.xml b/briar-android/src/main/res/drawable/message_notification_icon.xml
similarity index 100%
rename from briar-android/res/drawable/message_notification_icon.xml
rename to briar-android/src/main/res/drawable/message_notification_icon.xml
diff --git a/briar-android/res/drawable/message_sent.xml b/briar-android/src/main/res/drawable/message_sent.xml
similarity index 100%
rename from briar-android/res/drawable/message_sent.xml
rename to briar-android/src/main/res/drawable/message_sent.xml
diff --git a/briar-android/res/drawable/message_sent_white.xml b/briar-android/src/main/res/drawable/message_sent_white.xml
similarity index 100%
rename from briar-android/res/drawable/message_sent_white.xml
rename to briar-android/src/main/res/drawable/message_sent_white.xml
diff --git a/briar-android/res/drawable/message_stored.xml b/briar-android/src/main/res/drawable/message_stored.xml
similarity index 100%
rename from briar-android/res/drawable/message_stored.xml
rename to briar-android/src/main/res/drawable/message_stored.xml
diff --git a/briar-android/res/drawable/message_stored_white.xml b/briar-android/src/main/res/drawable/message_stored_white.xml
similarity index 100%
rename from briar-android/res/drawable/message_stored_white.xml
rename to briar-android/src/main/res/drawable/message_stored_white.xml
diff --git a/briar-android/res/drawable/navigation_accept.xml b/briar-android/src/main/res/drawable/navigation_accept.xml
similarity index 100%
rename from briar-android/res/drawable/navigation_accept.xml
rename to briar-android/src/main/res/drawable/navigation_accept.xml
diff --git a/briar-android/res/drawable/navigation_drawer_header.png b/briar-android/src/main/res/drawable/navigation_drawer_header.png
similarity index 100%
rename from briar-android/res/drawable/navigation_drawer_header.png
rename to briar-android/src/main/res/drawable/navigation_drawer_header.png
diff --git a/briar-android/res/drawable/qr_code_explanation.xml b/briar-android/src/main/res/drawable/qr_code_explanation.xml
similarity index 100%
rename from briar-android/res/drawable/qr_code_explanation.xml
rename to briar-android/src/main/res/drawable/qr_code_explanation.xml
diff --git a/briar-android/res/drawable/qr_code_intro.xml b/briar-android/src/main/res/drawable/qr_code_intro.xml
similarity index 100%
rename from briar-android/res/drawable/qr_code_intro.xml
rename to briar-android/src/main/res/drawable/qr_code_intro.xml
diff --git a/briar-android/res/drawable/selector_chevron.xml b/briar-android/src/main/res/drawable/selector_chevron.xml
similarity index 100%
rename from briar-android/res/drawable/selector_chevron.xml
rename to briar-android/src/main/res/drawable/selector_chevron.xml
diff --git a/briar-android/res/drawable/social_send_now_white.xml b/briar-android/src/main/res/drawable/social_send_now_white.xml
similarity index 100%
rename from briar-android/res/drawable/social_send_now_white.xml
rename to briar-android/src/main/res/drawable/social_send_now_white.xml
diff --git a/briar-android/res/drawable/social_share_white.xml b/briar-android/src/main/res/drawable/social_share_white.xml
similarity index 100%
rename from briar-android/res/drawable/social_share_white.xml
rename to briar-android/src/main/res/drawable/social_share_white.xml
diff --git a/briar-android/res/drawable/transport_bt.xml b/briar-android/src/main/res/drawable/transport_bt.xml
similarity index 100%
rename from briar-android/res/drawable/transport_bt.xml
rename to briar-android/src/main/res/drawable/transport_bt.xml
diff --git a/briar-android/res/drawable/transport_lan.xml b/briar-android/src/main/res/drawable/transport_lan.xml
similarity index 100%
rename from briar-android/res/drawable/transport_lan.xml
rename to briar-android/src/main/res/drawable/transport_lan.xml
diff --git a/briar-android/res/drawable/transport_tor.xml b/briar-android/src/main/res/drawable/transport_tor.xml
similarity index 100%
rename from briar-android/res/drawable/transport_tor.xml
rename to briar-android/src/main/res/drawable/transport_tor.xml
diff --git a/briar-android/res/drawable/trust_indicator_anonymous.xml b/briar-android/src/main/res/drawable/trust_indicator_anonymous.xml
similarity index 100%
rename from briar-android/res/drawable/trust_indicator_anonymous.xml
rename to briar-android/src/main/res/drawable/trust_indicator_anonymous.xml
diff --git a/briar-android/res/drawable/trust_indicator_unknown.xml b/briar-android/src/main/res/drawable/trust_indicator_unknown.xml
similarity index 100%
rename from briar-android/res/drawable/trust_indicator_unknown.xml
rename to briar-android/src/main/res/drawable/trust_indicator_unknown.xml
diff --git a/briar-android/res/drawable/trust_indicator_unverified.xml b/briar-android/src/main/res/drawable/trust_indicator_unverified.xml
similarity index 100%
rename from briar-android/res/drawable/trust_indicator_unverified.xml
rename to briar-android/src/main/res/drawable/trust_indicator_unverified.xml
diff --git a/briar-android/res/drawable/trust_indicator_verified.xml b/briar-android/src/main/res/drawable/trust_indicator_verified.xml
similarity index 100%
rename from briar-android/res/drawable/trust_indicator_verified.xml
rename to briar-android/src/main/res/drawable/trust_indicator_verified.xml
diff --git a/briar-android/res/layout-land/fragment_keyagreement_id.xml b/briar-android/src/main/res/layout-land/fragment_keyagreement_id.xml
similarity index 100%
rename from briar-android/res/layout-land/fragment_keyagreement_id.xml
rename to briar-android/src/main/res/layout-land/fragment_keyagreement_id.xml
diff --git a/briar-android/res/layout-land/invitation_bluetooth_start.xml b/briar-android/src/main/res/layout-land/invitation_bluetooth_start.xml
similarity index 100%
rename from briar-android/res/layout-land/invitation_bluetooth_start.xml
rename to briar-android/src/main/res/layout-land/invitation_bluetooth_start.xml
diff --git a/briar-android/res/layout/activity_change_password.xml b/briar-android/src/main/res/layout/activity_change_password.xml
similarity index 97%
rename from briar-android/res/layout/activity_change_password.xml
rename to briar-android/src/main/res/layout/activity_change_password.xml
index 6e5887f2b..e2c54958e 100644
--- a/briar-android/res/layout/activity_change_password.xml
+++ b/briar-android/src/main/res/layout/activity_change_password.xml
@@ -5,7 +5,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".android.ChangePasswordActivity">
+ tools:context=".android.login.ChangePasswordActivity">
-
-
-
+ tools:context=".android.reporting.DevReportActivity">
-
-
+ android:name="org.briarproject.briar.android.panic.PanicPreferencesFragment"/>
\ No newline at end of file
diff --git a/briar-android/res/layout/activity_password.xml b/briar-android/src/main/res/layout/activity_password.xml
similarity index 100%
rename from briar-android/res/layout/activity_password.xml
rename to briar-android/src/main/res/layout/activity_password.xml
diff --git a/briar-android/res/layout/activity_plain.xml b/briar-android/src/main/res/layout/activity_plain.xml
similarity index 100%
rename from briar-android/res/layout/activity_plain.xml
rename to briar-android/src/main/res/layout/activity_plain.xml
diff --git a/briar-android/res/layout/activity_reveal_contacts.xml b/briar-android/src/main/res/layout/activity_reveal_contacts.xml
similarity index 100%
rename from briar-android/res/layout/activity_reveal_contacts.xml
rename to briar-android/src/main/res/layout/activity_reveal_contacts.xml
diff --git a/briar-android/res/layout/activity_rss_feed_import.xml b/briar-android/src/main/res/layout/activity_rss_feed_import.xml
similarity index 100%
rename from briar-android/res/layout/activity_rss_feed_import.xml
rename to briar-android/src/main/res/layout/activity_rss_feed_import.xml
diff --git a/briar-android/res/layout/activity_rss_feed_manage.xml b/briar-android/src/main/res/layout/activity_rss_feed_manage.xml
similarity index 88%
rename from briar-android/res/layout/activity_rss_feed_manage.xml
rename to briar-android/src/main/res/layout/activity_rss_feed_manage.xml
index 8c9a0c468..76c14b4aa 100644
--- a/briar-android/res/layout/activity_rss_feed_manage.xml
+++ b/briar-android/src/main/res/layout/activity_rss_feed_manage.xml
@@ -1,5 +1,5 @@
-
+ android:name="org.briarproject.briar.android.settings.SettingsFragment"/>
\ No newline at end of file
diff --git a/briar-android/res/layout/activity_setup.xml b/briar-android/src/main/res/layout/activity_setup.xml
similarity index 97%
rename from briar-android/res/layout/activity_setup.xml
rename to briar-android/src/main/res/layout/activity_setup.xml
index fe77e491d..b1120debd 100644
--- a/briar-android/res/layout/activity_setup.xml
+++ b/briar-android/src/main/res/layout/activity_setup.xml
@@ -5,7 +5,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".android.SetupActivity">
+ tools:context=".android.login.SetupActivity">
-
-
-
+ tools:context=".android.blog.WriteBlogPostActivity">
-
-
-
+ tools:context=".android.blog.BlogActivity"/>
diff --git a/briar-android/res/layout/fragment_blog_post.xml b/briar-android/src/main/res/layout/fragment_blog_post.xml
similarity index 100%
rename from briar-android/res/layout/fragment_blog_post.xml
rename to briar-android/src/main/res/layout/fragment_blog_post.xml
diff --git a/briar-android/res/layout/fragment_blog_post_pager.xml b/briar-android/src/main/res/layout/fragment_blog_post_pager.xml
similarity index 100%
rename from briar-android/res/layout/fragment_blog_post_pager.xml
rename to briar-android/src/main/res/layout/fragment_blog_post_pager.xml
diff --git a/briar-android/res/layout/fragment_create_group.xml b/briar-android/src/main/res/layout/fragment_create_group.xml
similarity index 100%
rename from briar-android/res/layout/fragment_create_group.xml
rename to briar-android/src/main/res/layout/fragment_create_group.xml
diff --git a/briar-android/res/layout/fragment_forum_list.xml b/briar-android/src/main/res/layout/fragment_forum_list.xml
similarity index 77%
rename from briar-android/res/layout/fragment_forum_list.xml
rename to briar-android/src/main/res/layout/fragment_forum_list.xml
index ca4fb4520..6b09a7ff6 100644
--- a/briar-android/res/layout/fragment_forum_list.xml
+++ b/briar-android/src/main/res/layout/fragment_forum_list.xml
@@ -5,11 +5,11 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
+ app:layout_behavior="org.briarproject.briar.android.view.BriarRecyclerViewBehavior"/>
diff --git a/briar-android/res/layout/fragment_keyagreement_id.xml b/briar-android/src/main/res/layout/fragment_keyagreement_id.xml
similarity index 100%
rename from briar-android/res/layout/fragment_keyagreement_id.xml
rename to briar-android/src/main/res/layout/fragment_keyagreement_id.xml
diff --git a/briar-android/res/layout/fragment_keyagreement_qr.xml b/briar-android/src/main/res/layout/fragment_keyagreement_qr.xml
similarity index 98%
rename from briar-android/res/layout/fragment_keyagreement_qr.xml
rename to briar-android/src/main/res/layout/fragment_keyagreement_qr.xml
index c83c2f3b5..1aaf28183 100644
--- a/briar-android/res/layout/fragment_keyagreement_qr.xml
+++ b/briar-android/src/main/res/layout/fragment_keyagreement_qr.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
diff --git a/briar-android/res/layout/fragment_link_dialog.xml b/briar-android/src/main/res/layout/fragment_link_dialog.xml
similarity index 100%
rename from briar-android/res/layout/fragment_link_dialog.xml
rename to briar-android/src/main/res/layout/fragment_link_dialog.xml
diff --git a/briar-android/res/layout/fragment_message.xml b/briar-android/src/main/res/layout/fragment_message.xml
similarity index 86%
rename from briar-android/res/layout/fragment_message.xml
rename to briar-android/src/main/res/layout/fragment_message.xml
index 168ff34a4..7f74c6577 100644
--- a/briar-android/res/layout/fragment_message.xml
+++ b/briar-android/src/main/res/layout/fragment_message.xml
@@ -1,5 +1,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 16dp
- 16dp
-
- 1dp
- 2dp
- 4dp
- 8dp
- 16dp
- 32dp
- 64dp
-
-
- 12sp
- 14sp
- 16sp
- 20sp
- 34sp
-
- 16dp
- 10dp
- 56dp
- 48dp
- 23dp
- 51dp
- 1dp
- 2dp
- 40dp
- 32dp
- 48dp
- 2dp
- 30sp
- 48dp
-
- 12sp
- 6dp
- 19dp
-
- 3dp
- 30dp
- 7dp
- 2dp
- 24dp
-
- 30dp
- 15dp
- 20dp
-
-
- 42dp
- 16sp
- 32sp
- 2dp
- 5dp
- 2dp
-
-
- 50dp
- 220dp
- 110dp
- 170dp
-
-
+
+
+
+ 16dp
+ 16dp
+
+ 1dp
+ 2dp
+ 4dp
+ 8dp
+ 16dp
+ 32dp
+ 64dp
+
+
+ 12sp
+ 14sp
+ 16sp
+ 20sp
+ 34sp
+
+ 16dp
+ 10dp
+ 56dp
+ 48dp
+ 23dp
+ 51dp
+ 1dp
+ 2dp
+ 40dp
+ 32dp
+ 48dp
+ 2dp
+ 30sp
+ 48dp
+
+ 12sp
+ 6dp
+ 19dp
+
+ 3dp
+ 30dp
+ 7dp
+ 2dp
+ 24dp
+
+ 30dp
+ 15dp
+ 20dp
+
+
+ 42dp
+ 16sp
+ 32sp
+ 2dp
+ 5dp
+ 2dp
+
+
+ 50dp
+ 220dp
+ 110dp
+ 170dp
+
+
diff --git a/briar-android/res/values/emoji.xml b/briar-android/src/main/res/values/emoji.xml
similarity index 100%
rename from briar-android/res/values/emoji.xml
rename to briar-android/src/main/res/values/emoji.xml
diff --git a/briar-android/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
similarity index 100%
rename from briar-android/res/values/strings.xml
rename to briar-android/src/main/res/values/strings.xml
diff --git a/briar-android/res/values/styles.xml b/briar-android/src/main/res/values/styles.xml
similarity index 100%
rename from briar-android/res/values/styles.xml
rename to briar-android/src/main/res/values/styles.xml
diff --git a/briar-android/res/values/themes.xml b/briar-android/src/main/res/values/themes.xml
similarity index 100%
rename from briar-android/res/values/themes.xml
rename to briar-android/src/main/res/values/themes.xml
diff --git a/briar-android/res/xml/panic_preferences.xml b/briar-android/src/main/res/xml/panic_preferences.xml
similarity index 100%
rename from briar-android/res/xml/panic_preferences.xml
rename to briar-android/src/main/res/xml/panic_preferences.xml
diff --git a/briar-android/res/xml/settings.xml b/briar-android/src/main/res/xml/settings.xml
similarity index 93%
rename from briar-android/res/xml/settings.xml
rename to briar-android/src/main/res/xml/settings.xml
index 325194258..5c865755d 100644
--- a/briar-android/res/xml/settings.xml
+++ b/briar-android/src/main/res/xml/settings.xml
@@ -33,7 +33,7 @@
android:title="@string/change_password">
@@ -47,7 +47,7 @@
android:title="@string/panic_setting">
diff --git a/briar-android/src/org/briarproject/android/ActivityComponent.java b/briar-android/src/org/briarproject/android/ActivityComponent.java
deleted file mode 100644
index 01f39081f..000000000
--- a/briar-android/src/org/briarproject/android/ActivityComponent.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.briarproject.android;
-
-import android.app.Activity;
-
-import org.briarproject.android.blogs.BlogActivity;
-import org.briarproject.android.blogs.BlogFragment;
-import org.briarproject.android.blogs.BlogModule;
-import org.briarproject.android.blogs.BlogPostFragment;
-import org.briarproject.android.blogs.FeedFragment;
-import org.briarproject.android.blogs.FeedPostFragment;
-import org.briarproject.android.blogs.ReblogActivity;
-import org.briarproject.android.blogs.ReblogFragment;
-import org.briarproject.android.blogs.RssFeedImportActivity;
-import org.briarproject.android.blogs.RssFeedManageActivity;
-import org.briarproject.android.blogs.WriteBlogPostActivity;
-import org.briarproject.android.contact.ContactListFragment;
-import org.briarproject.android.contact.ContactModule;
-import org.briarproject.android.contact.ConversationActivity;
-import org.briarproject.android.forum.CreateForumActivity;
-import org.briarproject.android.forum.ForumActivity;
-import org.briarproject.android.forum.ForumListFragment;
-import org.briarproject.android.forum.ForumModule;
-import org.briarproject.android.introduction.ContactChooserFragment;
-import org.briarproject.android.introduction.IntroductionActivity;
-import org.briarproject.android.introduction.IntroductionMessageFragment;
-import org.briarproject.android.invitation.AddContactActivity;
-import org.briarproject.android.keyagreement.IntroFragment;
-import org.briarproject.android.keyagreement.KeyAgreementActivity;
-import org.briarproject.android.keyagreement.ShowQrCodeFragment;
-import org.briarproject.android.panic.PanicPreferencesActivity;
-import org.briarproject.android.panic.PanicResponderActivity;
-import org.briarproject.android.privategroup.conversation.GroupActivity;
-import org.briarproject.android.privategroup.conversation.GroupConversationModule;
-import org.briarproject.android.privategroup.creation.CreateGroupActivity;
-import org.briarproject.android.privategroup.creation.CreateGroupFragment;
-import org.briarproject.android.privategroup.creation.CreateGroupMessageFragment;
-import org.briarproject.android.privategroup.creation.GroupCreateModule;
-import org.briarproject.android.privategroup.creation.GroupInviteActivity;
-import org.briarproject.android.privategroup.creation.GroupInviteFragment;
-import org.briarproject.android.privategroup.invitation.GroupInvitationActivity;
-import org.briarproject.android.privategroup.invitation.GroupInvitationModule;
-import org.briarproject.android.privategroup.list.GroupListFragment;
-import org.briarproject.android.privategroup.list.GroupListModule;
-import org.briarproject.android.privategroup.memberlist.GroupMemberListActivity;
-import org.briarproject.android.privategroup.memberlist.GroupMemberModule;
-import org.briarproject.android.privategroup.reveal.GroupRevealModule;
-import org.briarproject.android.privategroup.reveal.RevealContactsActivity;
-import org.briarproject.android.privategroup.reveal.RevealContactsFragment;
-import org.briarproject.android.sharing.BlogInvitationActivity;
-import org.briarproject.android.sharing.BlogSharingStatusActivity;
-import org.briarproject.android.sharing.ForumInvitationActivity;
-import org.briarproject.android.sharing.ForumSharingStatusActivity;
-import org.briarproject.android.sharing.ShareBlogActivity;
-import org.briarproject.android.sharing.ShareBlogFragment;
-import org.briarproject.android.sharing.ShareBlogMessageFragment;
-import org.briarproject.android.sharing.ShareForumActivity;
-import org.briarproject.android.sharing.ShareForumFragment;
-import org.briarproject.android.sharing.ShareForumMessageFragment;
-import org.briarproject.android.sharing.SharingModule;
-import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
-import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel;
-
-import dagger.Component;
-
-@ActivityScope
-@Component(
- modules = {ActivityModule.class, ForumModule.class, SharingModule.class,
- BlogModule.class, ContactModule.class, GroupListModule.class,
- GroupCreateModule.class, GroupInvitationModule.class,
- GroupConversationModule.class, GroupMemberModule.class,
- GroupRevealModule.class},
- dependencies = AndroidComponent.class)
-public interface ActivityComponent {
-
- Activity activity();
-
- void inject(SplashScreenActivity activity);
-
- void inject(SetupActivity activity);
-
- void inject(NavDrawerActivity activity);
-
- void inject(PasswordActivity activity);
-
- void inject(PanicResponderActivity activity);
-
- void inject(PanicPreferencesActivity activity);
-
- void inject(AddContactActivity activity);
-
- void inject(KeyAgreementActivity activity);
-
- void inject(ConversationActivity activity);
-
- void inject(ForumInvitationActivity activity);
-
- void inject(BlogInvitationActivity activity);
-
- void inject(CreateGroupActivity activity);
-
- void inject(GroupActivity activity);
-
- void inject(GroupInviteActivity activity);
-
- void inject(GroupInvitationActivity activity);
-
- void inject(GroupMemberListActivity activity);
-
- void inject(RevealContactsActivity activity);
-
- void inject(CreateForumActivity activity);
-
- void inject(ShareForumActivity activity);
-
- void inject(ShareBlogActivity activity);
-
- void inject(ForumSharingStatusActivity activity);
-
- void inject(BlogSharingStatusActivity activity);
-
- void inject(ForumActivity activity);
-
- void inject(BlogActivity activity);
-
- void inject(WriteBlogPostActivity activity);
-
- void inject(BlogFragment fragment);
-
- void inject(BlogPostFragment fragment);
-
- void inject(FeedPostFragment fragment);
-
- void inject(ReblogFragment fragment);
-
- void inject(ReblogActivity activity);
-
- void inject(SettingsActivity activity);
-
- void inject(ChangePasswordActivity activity);
-
- void inject(IntroductionActivity activity);
-
- void inject(RssFeedImportActivity activity);
-
- void inject(RssFeedManageActivity activity);
-
- void inject(EmojiProvider emojiProvider);
-
- void inject(RecentEmojiPageModel recentEmojiPageModel);
-
- // Fragments
- void inject(ContactListFragment fragment);
-
- void inject(CreateGroupFragment fragment);
-
- void inject(CreateGroupMessageFragment fragment);
-
- void inject(GroupListFragment fragment);
-
- void inject(GroupInviteFragment fragment);
-
- void inject(RevealContactsFragment activity);
-
- void inject(ForumListFragment fragment);
-
- void inject(FeedFragment fragment);
-
- void inject(IntroFragment fragment);
-
- void inject(ShowQrCodeFragment fragment);
-
- void inject(ContactChooserFragment fragment);
-
- void inject(ShareForumFragment fragment);
-
- void inject(ShareForumMessageFragment fragment);
-
- void inject(ShareBlogFragment fragment);
-
- void inject(ShareBlogMessageFragment fragment);
-
- void inject(IntroductionMessageFragment fragment);
-
-}
diff --git a/briar-android/src/org/briarproject/android/AndroidComponent.java b/briar-android/src/org/briarproject/android/AndroidComponent.java
deleted file mode 100644
index 0a8feb911..000000000
--- a/briar-android/src/org/briarproject/android/AndroidComponent.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package org.briarproject.android;
-
-import org.briarproject.CoreEagerSingletons;
-import org.briarproject.CoreModule;
-import org.briarproject.android.api.AndroidExecutor;
-import org.briarproject.android.api.AndroidNotificationManager;
-import org.briarproject.android.api.ReferenceManager;
-import org.briarproject.android.report.BriarReportSender;
-import org.briarproject.api.blogs.BlogManager;
-import org.briarproject.api.blogs.BlogPostFactory;
-import org.briarproject.api.blogs.BlogSharingManager;
-import org.briarproject.api.contact.ContactExchangeTask;
-import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.crypto.PasswordStrengthEstimator;
-import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.feed.FeedManager;
-import org.briarproject.api.forum.ForumManager;
-import org.briarproject.api.forum.ForumSharingManager;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.introduction.IntroductionManager;
-import org.briarproject.api.invitation.InvitationTaskFactory;
-import org.briarproject.api.keyagreement.KeyAgreementTaskFactory;
-import org.briarproject.api.keyagreement.PayloadEncoder;
-import org.briarproject.api.keyagreement.PayloadParser;
-import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.messaging.ConversationManager;
-import org.briarproject.api.messaging.MessagingManager;
-import org.briarproject.api.messaging.PrivateMessageFactory;
-import org.briarproject.api.plugins.ConnectionRegistry;
-import org.briarproject.api.plugins.PluginManager;
-import org.briarproject.api.privategroup.GroupMessageFactory;
-import org.briarproject.api.privategroup.PrivateGroupFactory;
-import org.briarproject.api.privategroup.PrivateGroupManager;
-import org.briarproject.api.privategroup.invitation.GroupInvitationFactory;
-import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
-import org.briarproject.api.settings.SettingsManager;
-import org.briarproject.api.system.Clock;
-import org.briarproject.plugins.AndroidPluginsModule;
-import org.briarproject.system.AndroidSystemModule;
-
-import java.util.concurrent.Executor;
-
-import javax.inject.Singleton;
-
-import dagger.Component;
-
-@Singleton
-@Component(modules = {
- CoreModule.class,
- AppModule.class,
- AndroidPluginsModule.class,
- AndroidSystemModule.class
-})
-public interface AndroidComponent extends CoreEagerSingletons {
-
- // Exposed objects
- @CryptoExecutor
- Executor cryptoExecutor();
-
- PasswordStrengthEstimator passwordStrengthIndicator();
-
- CryptoComponent cryptoComponent();
-
- DatabaseConfig databaseConfig();
-
- ReferenceManager referenceMangager();
-
- @DatabaseExecutor
- Executor databaseExecutor();
-
- LifecycleManager lifecycleManager();
-
- IdentityManager identityManager();
-
- PluginManager pluginManager();
-
- EventBus eventBus();
-
- InvitationTaskFactory invitationTaskFactory();
-
- AndroidNotificationManager androidNotificationManager();
-
- ConnectionRegistry connectionRegistry();
-
- ContactManager contactManager();
-
- ConversationManager conversationManager();
-
- MessagingManager messagingManager();
-
- PrivateMessageFactory privateMessageFactory();
-
- PrivateGroupManager privateGroupManager();
-
- GroupInvitationFactory groupInvitationFactory();
-
- GroupInvitationManager groupInvitationManager();
-
- PrivateGroupFactory privateGroupFactory();
-
- GroupMessageFactory groupMessageFactory();
-
- ForumManager forumManager();
-
- ForumSharingManager forumSharingManager();
-
- BlogSharingManager blogSharingManager();
-
- BlogManager blogManager();
-
- BlogPostFactory blogPostFactory();
-
- SettingsManager settingsManager();
-
- ContactExchangeTask contactExchangeTask();
-
- KeyAgreementTaskFactory keyAgreementTaskFactory();
-
- PayloadEncoder payloadEncoder();
-
- PayloadParser payloadParser();
-
- IntroductionManager introductionManager();
-
- AndroidExecutor androidExecutor();
-
- FeedManager feedManager();
-
- Clock clock();
-
- @IoExecutor
- Executor ioExecutor();
-
- void inject(BriarService activity);
-
- void inject(BriarReportSender briarReportSender);
-
- // Eager singleton load
- void inject(AppModule.EagerSingletons init);
-}
diff --git a/briar-android/src/org/briarproject/android/AndroidEagerSingletons.java b/briar-android/src/org/briarproject/android/AndroidEagerSingletons.java
deleted file mode 100644
index 4a6cc4046..000000000
--- a/briar-android/src/org/briarproject/android/AndroidEagerSingletons.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.briarproject.android;
-
-public class AndroidEagerSingletons {
-
- public static void initEagerSingletons(AndroidComponent c) {
- c.inject(new AppModule.EagerSingletons());
- }
-}
diff --git a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorController.java b/briar-android/src/org/briarproject/android/contactselection/ContactSelectorController.java
deleted file mode 100644
index e0d9cac7a..000000000
--- a/briar-android/src/org/briarproject/android/contactselection/ContactSelectorController.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.briarproject.android.contactselection;
-
-import org.briarproject.android.controller.DbController;
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.api.contact.ContactId;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.nullsafety.NotNullByDefault;
-import org.briarproject.api.sync.GroupId;
-
-import java.util.Collection;
-
-@NotNullByDefault
-public interface ContactSelectorController
- extends DbController {
-
- void loadContacts(GroupId g, Collection selection,
- ResultExceptionHandler, DbException> handler);
-
-}
diff --git a/briar-android/src/org/briarproject/android/controller/DbController.java b/briar-android/src/org/briarproject/android/controller/DbController.java
deleted file mode 100644
index f0c186bf3..000000000
--- a/briar-android/src/org/briarproject/android/controller/DbController.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.briarproject.android.controller;
-
-public interface DbController {
-
- void runOnDbThread(Runnable task);
-}
diff --git a/briar-android/src/org/briarproject/android/controller/NavDrawerController.java b/briar-android/src/org/briarproject/android/controller/NavDrawerController.java
deleted file mode 100644
index 869ec8bc0..000000000
--- a/briar-android/src/org/briarproject/android/controller/NavDrawerController.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.briarproject.android.controller;
-
-import org.briarproject.api.TransportId;
-
-public interface NavDrawerController extends ActivityLifecycleController {
-
- boolean isTransportRunning(TransportId transportId);
-
-}
diff --git a/briar-android/src/org/briarproject/android/controller/PasswordController.java b/briar-android/src/org/briarproject/android/controller/PasswordController.java
deleted file mode 100644
index 64e4d4df0..000000000
--- a/briar-android/src/org/briarproject/android/controller/PasswordController.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.briarproject.android.controller;
-
-import org.briarproject.android.controller.handler.ResultHandler;
-
-public interface PasswordController extends ConfigController {
-
- void validatePassword(String password,
- ResultHandler resultHandler);
-
- void changePassword(String password, String newPassword,
- ResultHandler resultHandler);
-}
diff --git a/briar-android/src/org/briarproject/android/controller/SetupController.java b/briar-android/src/org/briarproject/android/controller/SetupController.java
deleted file mode 100644
index 947d6991a..000000000
--- a/briar-android/src/org/briarproject/android/controller/SetupController.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.briarproject.android.controller;
-
-import org.briarproject.android.controller.handler.ResultHandler;
-
-public interface SetupController {
-
- float estimatePasswordStrength(String password);
-
- void storeAuthorInfo(String nickname, String password,
- ResultHandler resultHandler);
-
-}
diff --git a/briar-android/src/org/briarproject/android/controller/TransportStateListener.java b/briar-android/src/org/briarproject/android/controller/TransportStateListener.java
deleted file mode 100644
index 3bb1c0a88..000000000
--- a/briar-android/src/org/briarproject/android/controller/TransportStateListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.briarproject.android.controller;
-
-import org.briarproject.android.DestroyableContext;
-import org.briarproject.api.TransportId;
-
-public interface TransportStateListener extends DestroyableContext {
-
- void stateUpdate(TransportId id, boolean enabled);
-}
diff --git a/briar-android/src/org/briarproject/android/forum/ForumController.java b/briar-android/src/org/briarproject/android/forum/ForumController.java
deleted file mode 100644
index 9b1fba564..000000000
--- a/briar-android/src/org/briarproject/android/forum/ForumController.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.briarproject.android.forum;
-
-import org.briarproject.android.threaded.ThreadListController;
-import org.briarproject.api.forum.Forum;
-import org.briarproject.api.forum.ForumPostHeader;
-
-public interface ForumController
- extends ThreadListController {
-
-}
diff --git a/briar-android/src/org/briarproject/android/forum/ForumItem.java b/briar-android/src/org/briarproject/android/forum/ForumItem.java
deleted file mode 100644
index 9c64f4ebf..000000000
--- a/briar-android/src/org/briarproject/android/forum/ForumItem.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.briarproject.android.forum;
-
-import org.briarproject.android.threaded.ThreadItem;
-import org.briarproject.api.forum.ForumPostHeader;
-import org.briarproject.api.identity.Author;
-import org.briarproject.api.identity.Author.Status;
-import org.briarproject.api.sync.MessageId;
-
-import javax.annotation.concurrent.NotThreadSafe;
-
-@NotThreadSafe
-class ForumItem extends ThreadItem {
-
- ForumItem(ForumPostHeader h, String body) {
- super(h.getId(), h.getParentId(), body, h.getTimestamp(), h.getAuthor(),
- h.getAuthorStatus(), h.isRead());
- }
-
- ForumItem(MessageId messageId, MessageId parentId, String text,
- long timestamp, Author author, Status status) {
- super(messageId, parentId, text, timestamp, author, status, true);
- }
-
-}
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupController.java b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupController.java
deleted file mode 100644
index 523abc1b9..000000000
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupController.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.briarproject.android.privategroup.conversation;
-
-import android.support.annotation.UiThread;
-
-import org.briarproject.android.controller.handler.ResultExceptionHandler;
-import org.briarproject.android.threaded.ThreadListController;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.privategroup.GroupMessageHeader;
-import org.briarproject.api.privategroup.PrivateGroup;
-import org.briarproject.api.privategroup.Visibility;
-
-public interface GroupController
- extends
- ThreadListController {
-
- void loadLocalAuthor(
- ResultExceptionHandler