briar issueshttps://code.briarproject.org/briar/briar/-/issues2018-06-14T17:17:13Zhttps://code.briarproject.org/briar/briar/-/issues/1229Crash when creating account after rotating screen2018-06-14T17:17:13ZakwizgranCrash when creating account after rotating screenSteps to reproduce:
* Create a new account and press 'Create Account'
* Before the next screen is shown, rotate the screen to landscape
* Rotate the screen back to portrait
* Press 'Create Account' again
Stacktrace:
```
java.lang.Il...Steps to reproduce:
* Create a new account and press 'Create Account'
* Before the next screen is shown, rotate the screen to landscape
* Rotate the screen back to portrait
* Press 'Create Account' again
Stacktrace:
```
java.lang.IllegalStateException
at org.briarproject.briar.android.login.SetupControllerImpl.createAccount(SetupControllerImpl.java:88)
at org.briarproject.briar.android.login.SetupControllerImpl.createAccount(SetupControllerImpl.java:82)
at org.briarproject.briar.android.login.SetupControllerImpl.showDozeOrCreateAccount(SetupControllerImpl.java:67)
at org.briarproject.briar.android.login.PasswordFragment.onClick(PasswordFragment.java:117)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
```
There are really two bugs here:
* The username and password aren't passed from the old SetupControllerImpl instance to the new one
* The result of the first account creation is returned to the old SetupActivity instance
The second bug is covered by #725, so this ticket is just for the first bug.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1217DbStateException when getting status for message in invisible group2018-05-10T08:37:10ZakwizgranDbStateException when getting status for message in invisible groupI got this exception when opening a conversation with a fake test data contact.
The likely cause is that the contact has never sent any client version updates, so the contact group is invisible and therefore no status rows exist. It's p...I got this exception when opening a conversation with a fake test data contact.
The likely cause is that the contact has never sent any client version updates, so the contact group is invisible and therefore no status rows exist. It's possible for real contacts' contact groups to be invisible too, so we need to check for this instead of throwing an exception.
```
org.briarproject.bramble.api.db.DbException: org.briarproject.bramble.db.DbStateException
at org.briarproject.bramble.db.JdbcDatabase.getMessageStatus(JdbcDatabase.java:1765)
at org.briarproject.bramble.db.JdbcDatabase.getMessageStatus(JdbcDatabase.java:73)
at org.briarproject.bramble.db.DatabaseComponentImpl.getMessageStatus(DatabaseComponentImpl.java:574)
at org.briarproject.briar.introduction.IntroductionManagerImpl.getIntroductionMessages(IntroductionManagerImpl.java:416)
at org.briarproject.briar.android.contact.ConversationActivity.lambda$loadMessages$3$ConversationActivity(ConversationActivity.java:347)
at org.briarproject.briar.android.contact.ConversationActivity$$Lambda$3.run(Unknown Source)
at org.briarproject.briar.android.controller.DbControllerImpl.lambda$runOnDbThread$0$DbControllerImpl(DbControllerImpl.java:35)
at org.briarproject.briar.android.controller.DbControllerImpl$$Lambda$0.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
```Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1216IllegalArgumentException when creating test data with zero contacts2018-05-03T16:44:00ZakwizgranIllegalArgumentException when creating test data with zero contacts```
java.lang.IllegalArgumentException: n <= 0: 0
at java.util.Random.nextInt(Random.java:182)
at org.briarproject.briar.test.TestDataCreatorImpl.createBlogPosts(TestDataCreatorImpl.java:315)
at org.briarproject.briar.test.Te...```
java.lang.IllegalArgumentException: n <= 0: 0
at java.util.Random.nextInt(Random.java:182)
at org.briarproject.briar.test.TestDataCreatorImpl.createBlogPosts(TestDataCreatorImpl.java:315)
at org.briarproject.briar.test.TestDataCreatorImpl.createTestDataOnIoExecutor(TestDataCreatorImpl.java:135)
at org.briarproject.briar.test.TestDataCreatorImpl.lambda$createTestData$0$TestDataCreatorImpl(TestDataCreatorImpl.java:120)
at org.briarproject.briar.test.TestDataCreatorImpl$$Lambda$0.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
```Android 1.0Julian DehmJulian Dehmhttps://code.briarproject.org/briar/briar/-/issues/1213DbStateException when a connection is opened2018-04-29T15:41:17ZakwizgranDbStateException when a connection is opened@grote observed this on three phones that had been used to test the introduction protocol. In all cases the exception happened at the first connection attempt after startup. The exception was thrown for both incoming and outgoing connect...@grote observed this on three phones that had been used to test the introduction protocol. In all cases the exception happened at the first connection attempt after startup. The exception was thrown for both incoming and outgoing connections, when trying to increment the stream counter for the outgoing stream.
The exception prevents the phones from connecting, so this is a release blocker.
```
04-28 08:42:31.852 I/TcpPlugin: Connected to /192.168.1.3
04-28 08:42:31.859 W/ConnectionManagerImpl: org.briarproject.bramble.api.db.DbException: org.briarproject.bramble.db.DbStateException
org.briarproject.bramble.api.db.DbException: org.briarproject.bramble.db.DbStateException
at org.briarproject.bramble.db.JdbcDatabase.incrementStreamCounter(JdbcDatabase.java:2215)
at org.briarproject.bramble.db.JdbcDatabase.incrementStreamCounter(JdbcDatabase.java:73)
at org.briarproject.bramble.db.DatabaseComponentImpl.incrementStreamCounter(DatabaseComponentImpl.java:616)
at org.briarproject.bramble.transport.TransportKeyManagerImpl.getStreamContext(TransportKeyManagerImpl.java:314)
at org.briarproject.bramble.transport.KeyManagerImpl.getStreamContext(KeyManagerImpl.java:182)
at org.briarproject.bramble.plugin.ConnectionManagerImpl$ManageOutgoingDuplexConnection.run(ConnectionManagerImpl.java:346)
```Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1212Press release for 1.02018-05-11T11:13:33ZakwizgranPress release for 1.0Android 1.0Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1211Update website for 1.0 rc12018-04-29T16:44:12ZakwizgranUpdate website for 1.0 rc1The main page and download page of the website should be updated for the first 1.0 release candidate.The main page and download page of the website should be updated for the first 1.0 release candidate.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1190Shut down cleanly when phone is shutting down or memory is low2018-04-23T10:44:40ZakwizgranShut down cleanly when phone is shutting down or memory is lowListen for `ACTION_SHUTDOWN` and `QUICKBOOT_POWEROFF` broadcasts and try to shut down the background service cleanly before the phone powers off.
Similarly, try to shut down the service cleanly before the process is killed if `BriarServ...Listen for `ACTION_SHUTDOWN` and `QUICKBOOT_POWEROFF` broadcasts and try to shut down the background service cleanly before the phone powers off.
Similarly, try to shut down the service cleanly before the process is killed if `BriarService#onLowMemory()` is called.Android Beta 2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1184RejectedExecutionException when signing out2018-03-28T11:39:16ZakwizgranRejectedExecutionException when signing outI got the following crash when signing out:
```
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@1e487d9c rejected from java.util.concurrent.ScheduledThreadPoolExe...I got the following crash when signing out:
```
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@1e487d9c rejected from java.util.concurrent.ScheduledThreadPoolExecutor@3dcb33a5[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793)
at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:298)
at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:503)
at java.util.concurrent.Executors$DelegatedScheduledExecutorService.schedule(Executors.java:644)
at org.briarproject.bramble.plugin.Poller.schedule(Poller.java:166)
at org.briarproject.bramble.plugin.Poller.reschedule(Poller.java:145)
at org.briarproject.bramble.plugin.Poller.eventOccurred(Poller.java:85)
at org.briarproject.bramble.event.EventBusImpl.broadcast(EventBusImpl.java:32)
at org.briarproject.bramble.plugin.ConnectionRegistryImpl.unregisterConnection(ConnectionRegistryImpl.java:94)
at org.briarproject.bramble.plugin.ConnectionManagerImpl$ManageOutgoingDuplexConnection.runIncomingSession(ConnectionManagerImpl.java:404)
at org.briarproject.bramble.plugin.ConnectionManagerImpl$ManageOutgoingDuplexConnection.bridge$lambda$0$ConnectionManagerImpl$ManageOutgoingDuplexConnection(ConnectionManagerImpl.java)
at org.briarproject.bramble.plugin.ConnectionManagerImpl$ManageOutgoingDuplexConnection$$Lambda$0.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
```
Looks like unregistering a connection caused the poller to reschedule polling, which crashed because the ScheduledExecutorService had already been shut down. Our other executors are configure to discard jobs submitted after shutdown, but the ScheduledExecutorService seems to be using the default policy of throwing an exception.Android Beta 2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1181Error icon is blurry on Android 42018-03-08T15:57:48ZakwizgranError icon is blurry on Android 4Screenshot from Galaxy Nexus (Android 4.3):
![device-2018-03-08-144415](/uploads/573593a3e774ea8dc657a24c4212508d/device-2018-03-08-144415.png)
The screenshot comes from the maintenance-0.16 branch, but I think master uses the same icon.Screenshot from Galaxy Nexus (Android 4.3):
![device-2018-03-08-144415](/uploads/573593a3e774ea8dc657a24c4212508d/device-2018-03-08-144415.png)
The screenshot comes from the maintenance-0.16 branch, but I think master uses the same icon.Android Beta 2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1180Transport icons show wrong state2018-04-17T14:57:44ZakwizgranTransport icons show wrong state* Android version: 7.0
* Briar version: 0.16.18 (812522a)
* Phone model: TCL Alcatel 5085C
* User feedback: "Frequently shows my internet as offline when I have lots of 4G service."
* Mobile data status: Available, enabled, connected
* W...* Android version: 7.0
* Briar version: 0.16.18 (812522a)
* Phone model: TCL Alcatel 5085C
* User feedback: "Frequently shows my internet as offline when I have lots of 4G service."
* Mobile data status: Available, enabled, connected
* Wi-Fi address: 0.0.0.0
* Wi-Fi status: Available, not enabled, not connectedAndroid Beta 2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1177Viewfinder is blank after connection fails2018-04-23T10:44:40ZakwizgranViewfinder is blank after connection failsWhen a connection fails while adding a contact, the viewfinder is shown again but it's blank. This is a regression caused by stopping the camera preview after scanning the QR code.When a connection fails while adding a contact, the viewfinder is shown again but it's blank. This is a regression caused by stopping the camera preview after scanning the QR code.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1176NPE: ScreenFilterMonitor.getApps()2018-03-08T11:33:15ZTorsten GroteNPE: ScreenFilterMonitor.getApps()When you start Briar on an outdated database, you get the notification about the database being corrupted. When you click this, you currently get this crash on `master`:
```
E/ACRA: ACRA caught a RuntimeException for org.briarproject.br...When you start Briar on an outdated database, you get the notification about the database being corrupted. When you click this, you currently get this crash on `master`:
```
E/ACRA: ACRA caught a RuntimeException for org.briarproject.briar.android.debug
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.briarproject.briar.android.debug/org.briarproject.briar.android.StartupFailureActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Collection org.briarproject.briar.api.android.ScreenFilterMonitor.getApps()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Collection org.briarproject.briar.api.android.ScreenFilterMonitor.getApps()' on a null object reference
at org.briarproject.briar.android.activity.BaseActivity.protectToolbar(BaseActivity.java:218)
at org.briarproject.briar.android.activity.BaseActivity.onStart(BaseActivity.java:106)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1334)
at android.app.Activity.performStart(Activity.java:7019)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2741)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
```Android Beta 2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1174Crash when opening link from RSS post2018-03-08T11:33:15ZakwizgranCrash when opening link from RSS postI got this crash when opening a link from an RSS post, before the link warning dialog appeared.
* Android version: 4.3
* Phone model: Samsung Galaxy Nexus (yakju)
* Briar version: 0.16.18 (812522a)
Stacktrace:
```
java.lang.ClassCastEx...I got this crash when opening a link from an RSS post, before the link warning dialog appeared.
* Android version: 4.3
* Phone model: Samsung Galaxy Nexus (yakju)
* Briar version: 0.16.18 (812522a)
Stacktrace:
```
java.lang.ClassCastException: android.support.v7.widget.TintContextWrapper cannot be cast to android.support.v7.app.AppCompatActivity
at org.briarproject.briar.android.util.UiUtils$1.onClick(UiUtils.java:125)
at org.briarproject.briar.android.view.ArticleMovementMethod.onTouchEvent(ArticleMovementMethod.java:61)
at android.widget.TextView.onTouchEvent(TextView.java:7609)
at android.view.View.dispatchTouchEvent(View.java:7384)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1966)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1418)
at android.app.Activity.dispatchTouchEvent(Activity.java:2424)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1914)
at android.view.View.dispatchPointerEvent(View.java:7564)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3883)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3778)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5419)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5399)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5370)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5493)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:132)
at android.os.Looper.loop(Looper.java:124)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
```Android Beta 2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1173Use first byte of QR code payload to indicate format version2018-02-22T17:11:38ZakwizgranUse first byte of QR code payload to indicate format versionThe QR code payload currently includes the format version as part of a BDF list, which is base64 encoded on the beta branch but not on the master branch. This makes it awkward to detect incompatible versions.
Move the format version to ...The QR code payload currently includes the format version as part of a BDF list, which is base64 encoded on the beta branch but not on the master branch. This makes it awkward to detect incompatible versions.
Move the format version to the first byte of the payload and reserve the byte that's at the start of base64-encoded BDF lists so it's never used as a format version. This will allow us to detect incompatible versions by checking the first byte without having to try different encodings.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1171Could not connect via wifi to phone running hotspot2018-04-23T10:44:40ZakwizgranCould not connect via wifi to phone running hotspotA user reported that when their phone was running a wifi hotspot, devices connected to the hotspot could connect to each other but not to the phone running the hotspot.
* Android version: 7.1
* Phone model: OnePlus5
* Briar version: 0.16.2A user reported that when their phone was running a wifi hotspot, devices connected to the hotspot could connect to each other but not to the phone running the hotspot.
* Android version: 7.1
* Phone model: OnePlus5
* Briar version: 0.16.2Android Beta 2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1169NPE when opening settings during failed startup2018-03-14T12:42:51ZakwizgranNPE when opening settings during failed startup* Android version: 7.1.2
* Phone model: Samsung GT-I9100
* Briar version: 0.16.17 (347c2f2)
* User feedback: "Infinite init loop after password entry in Contacts, Blogs, ... Entering Settings, Crash Report"
Stacktrace:
```
java.lang.Nul...* Android version: 7.1.2
* Phone model: Samsung GT-I9100
* Briar version: 0.16.17 (347c2f2)
* User feedback: "Infinite init loop after password entry in Contacts, Blogs, ... Entering Settings, Crash Report"
Stacktrace:
```
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.briarproject.bramble.api.StringMap.getBoolean(java.lang.String, boolean)' on a null object reference
at org.briarproject.briar.android.settings.SettingsFragment.lambda$onCreatePreferences$0$SettingsFragment(SettingsFragment.java:151)
at org.briarproject.briar.android.settings.SettingsFragment$$Lambda$0.onPreferenceClick(Unknown Source)
at android.support.v7.preference.Preference.performClick(Preference.java:1116)
at android.support.v7.preference.Preference.performClick(Preference.java:1099)
at android.support.v7.preference.Preference$1.onClick(Preference.java:169)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22433)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6186)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
```
The user's comment about "infinite init loop" seems to refer to the database failing to open. The log shows `LifecycleManagerImpl` starting services at 06:52, then apparently the call to `DatabaseComponent#open()` still hasn't returned at 08:37 when the user opens the settings screen.
So we seem to have two bugs here:
* Startup failed for some reason
* SettingsFragment didn't wait for startup to complete before trying to access settings
Log extract:
```
02-16 06:52:35.663 I/ACRA (21540): ACRA is enabled for org.briarproject.briar.beta, initializing...
02-16 06:52:35.804 I/BriarApplicationImpl(21540): Created
02-16 06:52:35.904 I/CryptoComponentImpl(21540): Default SecureRandom: AndroidOpenSSL SHA1PRNG
02-16 06:52:35.985 I/CryptoComponentImpl(21540): Installed SecureRandom: LinuxPRNG SHA1PRNG
02-16 06:52:36.013 I/BriarApplicationImpl(21560): Created
02-16 06:52:36.027 I/CryptoComponentImpl(21560): Default SecureRandom: AndroidOpenSSL SHA1PRNG
02-16 06:52:36.049 I/CryptoComponentImpl(21560): Installed SecureRandom: LinuxPRNG SHA1PRNG
02-16 06:52:36.052 I/LifecycleManagerImpl(21540): Registering executor TimeLoggingExecutor
02-16 06:52:36.055 I/LifecycleManagerImpl(21540): Registering executor ThreadPoolExecutor
02-16 06:52:36.055 I/LifecycleManagerImpl(21540): Registering executor DelegatedScheduledExecutorService
02-16 06:52:36.059 I/LifecycleManagerImpl(21560): Registering executor TimeLoggingExecutor
02-16 06:52:36.059 I/LifecycleManagerImpl(21560): Registering executor ThreadPoolExecutor
02-16 06:52:36.059 I/LifecycleManagerImpl(21560): Registering executor DelegatedScheduledExecutorService
02-16 06:52:36.061 I/LifecycleManagerImpl(21540): Registering service KeyManagerImpl
02-16 06:52:36.061 I/LifecycleManagerImpl(21540): Registering executor TimeLoggingExecutor
02-16 06:52:36.064 I/LifecycleManagerImpl(21560): Registering service KeyManagerImpl
02-16 06:52:36.064 I/LifecycleManagerImpl(21540): Registering service ValidationManagerImpl
02-16 06:52:36.064 I/LifecycleManagerImpl(21560): Registering executor TimeLoggingExecutor
02-16 06:52:36.065 I/LifecycleManagerImpl(21560): Registering service ValidationManagerImpl
02-16 06:52:36.065 I/LifecycleManagerImpl(21540): Registering client TransportPropertyManagerImpl
02-16 06:52:36.065 I/LifecycleManagerImpl(21540): Registering service PluginManagerImpl
02-16 06:52:36.069 I/LifecycleManagerImpl(21540): Registering client BlogManagerImpl
02-16 06:52:36.070 I/LifecycleManagerImpl(21540): Registering client FeedManagerImpl
02-16 06:52:36.071 I/LifecycleManagerImpl(21540): Registering client GroupInvitationManagerImpl
02-16 06:52:36.071 I/LifecycleManagerImpl(21540): Registering client MessagingManagerImpl
02-16 06:52:36.072 I/LifecycleManagerImpl(21560): Registering client TransportPropertyManagerImpl
02-16 06:52:36.072 I/LifecycleManagerImpl(21560): Registering service PluginManagerImpl
02-16 06:52:36.073 I/LifecycleManagerImpl(21560): Registering client BlogManagerImpl
02-16 06:52:36.074 I/LifecycleManagerImpl(21540): Registering client ForumSharingManagerImpl
02-16 06:52:36.074 I/LifecycleManagerImpl(21560): Registering client FeedManagerImpl
02-16 06:52:36.074 I/LifecycleManagerImpl(21540): Registering client BlogSharingManagerImpl
02-16 06:52:36.074 I/LifecycleManagerImpl(21560): Registering client GroupInvitationManagerImpl
02-16 06:52:36.074 I/LifecycleManagerImpl(21560): Registering client MessagingManagerImpl
02-16 06:52:36.075 I/LifecycleManagerImpl(21560): Registering client ForumSharingManagerImpl
02-16 06:52:36.075 I/LifecycleManagerImpl(21560): Registering client BlogSharingManagerImpl
02-16 06:52:36.075 I/LifecycleManagerImpl(21540): Registering client IntroductionManagerImpl
02-16 06:52:36.082 I/LifecycleManagerImpl(21560): Registering client IntroductionManagerImpl
02-16 06:52:36.101 I/LifecycleManagerImpl(21540): Registering service AndroidNotificationManagerImpl
02-16 06:52:36.101 I/LifecycleManagerImpl(21560): Registering service AndroidNotificationManagerImpl
02-16 06:52:36.101 I/LifecycleManagerImpl(21540): Registering service NetworkUsageLogger
02-16 06:52:36.101 I/LifecycleManagerImpl(21540): Registering service DozeWatchdogImpl
02-16 06:52:36.101 I/LifecycleManagerImpl(21560): Registering service NetworkUsageLogger
02-16 06:52:36.101 I/LifecycleManagerImpl(21560): Registering service DozeWatchdogImpl
02-16 06:52:36.925 I/BriarRecyclerView(21540): Adding Handler Callback
02-16 06:52:36.994 I/TextInputLayout(21540): EditText added is not a TextInputEditText. Please switch to using that class instead.
02-16 06:52:37.744 I/BriarRecyclerView(21540): Removing Handler Callback
02-16 06:52:42.510 I/BriarRecyclerView(21540): Adding Handler Callback
02-16 06:52:42.526 I/BriarService(21540): Created
02-16 06:52:42.554 I/LifecycleManagerImpl(21540): Starting services
02-16 06:52:43.037 W/IInputConnectionWrapper(21540): finishComposingText on inactive InputConnection
02-16 06:52:45.991 I/BriarRecyclerView(21540): Removing Handler Callback
02-16 07:14:58.613 I/BriarRecyclerView(21540): Adding Handler Callback
02-16 07:15:04.718 I/BriarRecyclerView(21540): Removing Handler Callback
02-16 08:34:42.669 I/BriarRecyclerView(21540): Adding Handler Callback
02-16 08:34:54.789 I/BriarRecyclerView(21540): Removing Handler Callback
02-16 08:34:54.798 I/BriarRecyclerView(21540): Adding Handler Callback
02-16 08:35:54.856 I/BriarRecyclerView(21540): Updating Content...
02-16 08:36:54.916 I/BriarRecyclerView(21540): Updating Content...
02-16 08:37:11.963 I/BriarRecyclerView(21540): Removing Handler Callback
02-16 08:37:34.413 E/ACRA (21540): ACRA caught a NullPointerException for org.briarproject.briar.beta
```Android Beta 2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1168Show status message while opening and migrating DB2018-03-08T11:33:15ZakwizgranShow status message while opening and migrating DBAndroid Beta 2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1164Bluetooth address and UUID aren't stored until contact connections are enabled2018-02-22T17:11:39ZakwizgranBluetooth address and UUID aren't stored until contact connections are enabledThe fix for #1001 caused a regression: the Bluetooth address and UUID aren't stored in the local transport properties until contact connections are enabled. This causes the following issue:
* Turn off wifi
* Start Briar with a fresh acc...The fix for #1001 caused a regression: the Bluetooth address and UUID aren't stored in the local transport properties until contact connections are enabled. This causes the following issue:
* Turn off wifi
* Start Briar with a fresh account, add a contact via Bluetooth
* Messages can be exchanged with the contact
* Sign out and back in
* Enable Bluetooth contact connections in Briar settings
* Bluetooth plugin can't connect to contact because it doesn't have contact's address or UUID
On the beta branch, which doesn't have the fix for #1001, the Bluetooth plugin connects in the last step.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1163Check whether our key agreement procotols assume contributory behaviour2018-04-28T13:38:03ZakwizgranCheck whether our key agreement procotols assume contributory behaviourWe're migrating to Curve25519 for key agreement, and RFC 7748 [warns](https://tools.ietf.org/html/rfc7748#section-7) that protocols based on Curve25519 should not assume contributory behaviour:
> Protocol designers using Diffie-Hellman ...We're migrating to Curve25519 for key agreement, and RFC 7748 [warns](https://tools.ietf.org/html/rfc7748#section-7) that protocols based on Curve25519 should not assume contributory behaviour:
> Protocol designers using Diffie-Hellman over the curves defined in this document must not assume "contributory behaviour". Specially, contributory behaviour means that both parties' private keys contribute to the resulting shared key. Since curve25519 and curve448 have cofactors of 8 and 4 (respectively), an input point of small order will eliminate any contribution from the other party's private key. This situation can be detected by checking for the all-zero output, which implementations MAY do, as specified in Section 6. However, a large number of existing implementations do not do this.
The Curve25519 website also has a [warning](https://cr.yp.to/ecdh.html#validate):
> There are some unusual non-Diffie-Hellman elliptic-curve protocols that need to ensure ``contributory'' behavior. In those protocols, you should reject the 32-byte strings that, in little-endian form, represent 0, 1, 325606250916557431795983626356110631294008115727848805560023387167927233504 (which has order 8), 39382357235489614581723060781553021112529911719440698176882885853963445705823 (which also has order 8), 2^255 - 19 - 1, 2^255 - 19, 2^255 - 19 + 1, 2^255 - 19 + 325606250916557431795983626356110631294008115727848805560023387167927233504, 2^255 - 19 + 39382357235489614581723060781553021112529911719440698176882885853963445705823, 2(2^255 - 19) - 1, 2(2^255 - 19), and 2(2^255 - 19) + 1. But these exclusions are unnecessary for Diffie-Hellman.
It's not clear to me whether the special public keys listed in the second quote will produce the all-zero output as described in the first quote. This is something we can confirm, and we can check for the all-zero output in our usage of Curve25519. But for defence in depth we should also check whether our key agreement protocols (BQP, the contact exchange protocol and the introduction protocol) assume contributory behaviour.
One thing we need to clarify is whether hashing both public keys into the shared secret (which we already do) is enough to ensure contributory behaviour.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1159Overhaul notifications for Android 82018-03-28T11:39:16ZakwizgranOverhaul notifications for Android 8On Android 8, notification settings for each notification channel are managed through the system settings app. Changes made through Briar's settings screen are ineffective.
* Check that the default behaviour of our notifications (sound,...On Android 8, notification settings for each notification channel are managed through the system settings app. Changes made through Briar's settings screen are ineffective.
* Check that the default behaviour of our notifications (sound, vibration, etc) is consistent across versions
* Don't show Briar's notification settings on Android 8 (maybe link to the system settings instead, if possible?)Android 1.0Torsten GroteTorsten Grote