briar issueshttps://code.briarproject.org/groups/briar/-/issues2020-11-15T16:34:24Zhttps://code.briarproject.org/briar/briar/-/issues/1709CameraException: No camera on LineageOS2020-11-15T16:34:24ZakwizgranCameraException: No camera on LineageOS* Android version: 9
* Phone model: OnePlus 3T (reported by user - ACRA says unknown)
* Briar version: 1.2.4 (75dfa80)
* User feedback: "Camera error when adding nearby contact. Lineage 16, OnePlus 3T, microG."
Log:
```
11-21 18:59:15.3...* Android version: 9
* Phone model: OnePlus 3T (reported by user - ACRA says unknown)
* Briar version: 1.2.4 (75dfa80)
* User feedback: "Camera error when adding nearby contact. Lineage 16, OnePlus 3T, microG."
Log:
```
11-21 18:59:15.386 I/CameraView: Opening camera
11-21 18:59:15.391 W/KeyAgreementFragment: org.briarproject.briar.android.keyagreement.CameraException: No camera
org.briarproject.briar.android.keyagreement.CameraException: No camera
at org.briarproject.briar.android.keyagreement.CameraView.start(CameraView.java:106)
at org.briarproject.briar.android.keyagreement.KeyAgreementFragment.onStart(KeyAgreementFragment.java:149)
at android.support.v4.app.Fragment.performStart(Fragment.java:2477)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1494)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
```
The phone has front- and back-facing cameras.https://code.briarproject.org/briar/briar/-/issues/1708RSS feeds without dates can't be imported2020-11-15T16:35:19ZakwizgranRSS feeds without dates can't be importedThis problem was originally reported as #1003, but some idiot called @akwizgran started cluttering up that ticket with comments about Unicode parsing issues, so I'm moving it to a new ticket.
Example of a feed with no dates: https://blo...This problem was originally reported as #1003, but some idiot called @akwizgran started cluttering up that ticket with comments about Unicode parsing issues, so I'm moving it to a new ticket.
Example of a feed with no dates: https://blog.fefe.de/rss.xmlhttps://code.briarproject.org/briar/briar/-/issues/1703IllegalStateException: Drag shadow dimensions must be positive2020-11-15T16:35:50ZakwizgranIllegalStateException: Drag shadow dimensions must be positive* Android version: 9
* Phone model: OnePlus GM1915 (OnePlus7ProTMO)
* Briar version: 1.2.4 (75dfa80)
Stacktrace:
```
java.lang.IllegalStateException: Drag shadow dimensions must be positive
at android.view.View.startDragAndDrop(...* Android version: 9
* Phone model: OnePlus GM1915 (OnePlus7ProTMO)
* Briar version: 1.2.4 (75dfa80)
Stacktrace:
```
java.lang.IllegalStateException: Drag shadow dimensions must be positive
at android.view.View.startDragAndDrop(View.java:24302)
at android.widget.Editor.startDragAndDrop(Editor.java:1165)
at android.widget.Editor.performLongClick(Editor.java:1191)
at android.widget.TextView.performLongClick(TextView.java:11378)
at android.view.View.performLongClick(View.java:6734)
at android.view.View$CheckForLongPress.run(View.java:26148)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:7009)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
```
Last log lines:
```
12-29 03:09:42.778 I/BaseActivity: Starting GroupActivity
12-29 03:09:42.809 I/BaseActivity: Stopping GroupActivity
12-29 03:09:43.054 I/BaseActivity: Starting GroupActivity
12-29 03:09:43.682 I/ThreadListControllerImpl: Loaded last top visible message id MessageId(XXX)
12-29 03:09:43.696 I/ThreadListControllerImpl: Loaded last top visible message id MessageId(XXX)
12-29 03:09:43.728 I/ThreadScrollListener: Updating unread count: top=0 bottom=3
12-29 03:09:44.333 I/ThreadScrollListener: Updating unread count: top=0 bottom=2
12-29 03:09:45.502 I/ThreadScrollListener: Updating unread count: top=0 bottom=1
12-29 03:09:45.520 I/ThreadScrollListener: Updating unread count: top=0 bottom=1
12-29 03:09:45.593 I/ThreadScrollListener: Updating unread count: top=0 bottom=0
12-29 03:09:45.598 I/ThreadScrollListener: Updating unread count: top=0 bottom=0
12-29 03:09:53.389 I/BaseActivity: Stopping GroupActivity
12-29 03:10:04.225 I/BaseActivity: Starting GroupActivity
12-29 03:10:04.250 I/ThreadListControllerImpl: Loaded last top visible message id MessageId(XXX)
```
Looks like a platform bug.https://code.briarproject.org/briar/briar/-/issues/1702RuntimeException: InputChannel is not initialized2020-11-15T16:36:31ZakwizgranRuntimeException: InputChannel is not initialized* Android version: 10
* Phone model: Google Pixel 2 (walleye)
* Briar version: 1.2.4 (75dfa80)
Stacktrace:
```
java.lang.RuntimeException: InputChannel is not initialized.
at android.view.InputEventReceiver.nativeInit(Native Met...* Android version: 10
* Phone model: Google Pixel 2 (walleye)
* Briar version: 1.2.4 (75dfa80)
Stacktrace:
```
java.lang.RuntimeException: InputChannel is not initialized.
at android.view.InputEventReceiver.nativeInit(Native Method)
at android.view.InputEventReceiver.<init>(InputEventReceiver.java:71)
at android.view.ViewRootImpl$WindowInputEventReceiver.<init>(ViewRootImpl.java:7775)
at android.view.ViewRootImpl.setView(ViewRootImpl.java:980)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:387)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:95)
at android.widget.Toast$TN.handleShow(Toast.java:514)
at android.widget.Toast$TN$1.handleMessage(Toast.java:417)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
```
Log:
```
12-15 23:14:17.134 I/BriarApplicationImpl: Created
12-15 23:14:17.145 I/CryptoComponentImpl: Default SecureRandom: AndroidOpenSSL SHA1PRNG
12-15 23:14:17.172 I/CryptoComponentImpl: Installed SecureRandom: UnixPRNG SHA1PRNG
12-15 23:14:17.253 I/LifecycleManagerImpl: Registering executor TimeLoggingExecutor
12-15 23:14:17.253 I/LifecycleManagerImpl: Registering executor ThreadPoolExecutor
12-15 23:14:17.253 I/LifecycleManagerImpl: Registering executor ScheduledThreadPoolExecutor
12-15 23:14:17.253 I/LifecycleManagerImpl: Registering service AndroidNetworkManager
12-15 23:14:17.253 I/LifecycleManagerImpl: Registering service AndroidBatteryManager
12-15 23:14:17.254 I/LifecycleManagerImpl: Registering service KeyManagerImpl
12-15 23:14:17.254 I/LifecycleManagerImpl: Registering open database hook IdentityManagerImpl
12-15 23:14:17.254 I/LifecycleManagerImpl: Registering executor TimeLoggingExecutor
12-15 23:14:17.255 I/LifecycleManagerImpl: Registering service ValidationManagerImpl
12-15 23:14:17.256 I/LifecycleManagerImpl: Registering open database hook ClientVersioningManagerImpl
12-15 23:14:17.256 I/LifecycleManagerImpl: Registering service ClientVersioningManagerImpl
12-15 23:14:17.256 I/LifecycleManagerImpl: Registering open database hook TransportPropertyManagerImpl
12-15 23:14:17.257 I/LifecycleManagerImpl: Registering service PluginManagerImpl
12-15 23:14:17.257 I/LifecycleManagerImpl: Registering service RendezvousPollerImpl
12-15 23:14:17.258 I/LifecycleManagerImpl: Registering open database hook BlogManagerImpl
12-15 23:14:17.259 I/LifecycleManagerImpl: Registering open database hook FeedManagerImpl
12-15 23:14:17.260 I/LifecycleManagerImpl: Registering open database hook GroupInvitationManagerImpl
12-15 23:14:17.261 I/LifecycleManagerImpl: Registering open database hook MessagingManagerImpl
12-15 23:14:17.262 I/LifecycleManagerImpl: Registering open database hook ForumSharingManagerImpl
12-15 23:14:17.262 I/LifecycleManagerImpl: Registering open database hook BlogSharingManagerImpl
12-15 23:14:17.263 I/LifecycleManagerImpl: Registering open database hook IntroductionManagerImpl
12-15 23:14:17.264 I/LifecycleManagerImpl: Registering service AndroidNotificationManagerImpl
12-15 23:14:17.264 I/LifecycleManagerImpl: Registering service ScreenFilterMonitorImpl
12-15 23:14:17.264 I/LifecycleManagerImpl: Registering service NetworkUsageLogger
12-15 23:14:17.265 I/LifecycleManagerImpl: Registering service DozeWatchdogImpl
12-15 23:14:17.266 I/LifecycleManagerImpl: Registering service LockManagerImpl
12-15 23:14:17.266 I/LifecycleManagerImpl: Registering open database hook RecentEmojiImpl
12-15 23:14:17.348 I/BriarService: Created
12-15 23:14:17.348 I/BriarService: No database key
12-15 23:14:17.401 I/BriarService: Destroyed
```
It's hard to understand what's happening here. Judging by the last three log lines, the Briar process may have been created by the OS relaunching BriarService after an earlier shutdown or crash (otherwise the service wouldn't be created until after signing in). I have no idea why that would cause a toast to be shown, which seems to be what triggers the crash.https://code.briarproject.org/briar/briar/-/issues/1701CameraException on Nexus 7 (front-facing camera)2020-11-15T16:37:39ZakwizgranCameraException on Nexus 7 (front-facing camera)* Android version: 7.1.2
* Phone model: Google Nexus 7
* Briar version: 1.1.6 (4d26628)
* User feedback: "Add a contact is impossible due to camera error. Another way to add contacts is essential."
Log snippet:
```
09-22 09:56:22.542 I/...* Android version: 7.1.2
* Phone model: Google Nexus 7
* Briar version: 1.1.6 (4d26628)
* User feedback: "Add a contact is impossible due to camera error. Another way to add contacts is essential."
Log snippet:
```
09-22 09:56:22.542 I/CameraView: Setting preview consumer
09-22 09:56:22.543 I/CameraView: Opening camera
09-22 09:56:22.547 I/CameraView: Using front-facing camera
09-22 09:56:22.684 I/CameraView: Screen rotation 0 degrees, camera orientation 90 degrees
09-22 09:56:22.686 I/CameraView: Focus modes: [fixed]
09-22 09:56:22.693 W/KeyAgreementFragment: org.briarproject.briar.android.keyagreement.CameraException: java.lang.RuntimeException: setParameters failed
org.briarproject.briar.android.keyagreement.CameraException: java.lang.RuntimeException: setParameters failed
at org.briarproject.briar.android.keyagreement.CameraView.setBestParameters(CameraView.java:337)
at org.briarproject.briar.android.keyagreement.CameraView.start(CameraView.java:141)
at org.briarproject.briar.android.keyagreement.KeyAgreementFragment.onStart(KeyAgreementFragment.java:149)
at android.support.v4.app.Fragment.performStart(Fragment.java:2477)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1494)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
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)
Caused by: java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:2015)
at org.briarproject.briar.android.keyagreement.CameraView.setBestParameters(CameraView.java:334)
at org.briarproject.briar.android.keyagreement.CameraView.start(CameraView.java:141)
at org.briarproject.briar.android.keyagreement.KeyAgreementFragment.onStart(KeyAgreementFragment.java:149)
at android.support.v4.app.Fragment.performStart(Fragment.java:2477)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1494)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
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)
```https://code.briarproject.org/briar/briar/-/issues/1698SecurityException when binding Bluetooth socket2022-12-28T13:18:55ZakwizgranSecurityException when binding Bluetooth socket* Android version: 9
* Phone model: Honor COL-L29 (COL-L29RU)
* Briar version: 1.2.4 (75dfa80)
Stacktrace:
```
java.lang.SecurityException: Not allowed for non-active users
at android.os.Parcel.createException(Parcel.java:1953)
...* Android version: 9
* Phone model: Honor COL-L29 (COL-L29RU)
* Briar version: 1.2.4 (75dfa80)
Stacktrace:
```
java.lang.SecurityException: Not allowed for non-active users
at android.os.Parcel.createException(Parcel.java:1953)
at android.os.Parcel.readException(Parcel.java:1921)
at android.os.Parcel.readException(Parcel.java:1871)
at android.bluetooth.IBluetoothSocketManager$Stub$Proxy.createSocketChannel(IBluetoothSocketManager.java:207)
at android.bluetooth.BluetoothSocket.bindListen(BluetoothSocket.java:456)
at android.bluetooth.BluetoothAdapter.createNewRfcommSocketAndRecord(BluetoothAdapter.java:2152)
at android.bluetooth.BluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(BluetoothAdapter.java:2103)
at org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPlugin.openServerSocket(AndroidBluetoothPlugin.java:158)
at org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPlugin.openServerSocket(AndroidBluetoothPlugin.java:57)
at org.briarproject.bramble.plugin.bluetooth.BluetoothPlugin.lambda$bind$0$BluetoothPlugin(BluetoothPlugin.java:179)
at org.briarproject.bramble.plugin.bluetooth.-$$Lambda$BluetoothPlugin$5LFrMRmXQDZNSHk-RYMiHxB1iBE.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.processTask(ThreadPoolExecutor.java:1187)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
```
Edited log:
```
12-23 13:01:56.423 I/AndroidNetworkManager: Received broadcast android.intent.action.SCREEN_OFF
...
12-23 13:01:57.318 I/AndroidNetworkManager: Received broadcast android.intent.action.SCREEN_ON
...
12-23 13:02:01.460 I/AndroidBluetoothPlugin: Scan mode: None
12-23 13:02:02.034 I/AndroidBluetoothPlugin: Scan mode: None
12-23 13:02:02.051 I/BluetoothPlugin: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
12-23 13:02:02.069 I/BluetoothPlugin: Bluetooth disabled
12-23 13:02:02.070 I/BluetoothConnectionLimiterImpl: All connections closed
...
12-23 13:02:05.087 I/BluetoothPlugin: Bluetooth enabled
12-23 13:02:05.257 I/BluetoothPlugin: Local address null
```
No activities are shown stopping/starting when the screen turns off/on, which suggests Briar's running in the background. Looks like there might be a restriction on background apps binding Bluetooth sockets.Android 1.4https://code.briarproject.org/briar/briar/-/issues/1696Crash when trying to load key from keystore2022-06-13T15:00:45ZakwizgranCrash when trying to load key from keystoreI got the following crash while signing into an existing account on the API 26 emulator:
```
java.lang.RuntimeException: java.security.UnrecoverableKeyException: Failed to obtain information about key
at org.briarproject.bri...I got the following crash while signing into an existing account on the API 26 emulator:
```
java.lang.RuntimeException: java.security.UnrecoverableKeyException: Failed to obtain information about key
at org.briarproject.briar.android.AndroidKeyStrengthener.isInitialised(AndroidKeyStrengthener.java:83)
at org.briarproject.bramble.crypto.CryptoComponentImpl.decryptWithPassword(CryptoComponentImpl.java:397)
at org.briarproject.bramble.account.AccountManagerImpl.loadAndDecryptDatabaseKey(AccountManagerImpl.java:215)
at org.briarproject.bramble.account.AccountManagerImpl.signIn(AccountManagerImpl.java:198)
at org.briarproject.briar.android.login.StartupViewModel.lambda$validatePassword$0$StartupViewModel(StartupViewModel.java:108)
at org.briarproject.briar.android.login.-$$Lambda$StartupViewModel$g7VDyWGXbuZadVRd8U1dRkICyWk.run(Unknown Source:4)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.security.UnrecoverableKeyException: Failed to obtain information about key
at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreSecretKeyFromKeystore(AndroidKeyStoreProvider.java:282)
at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:98)
at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:474)
at java.security.KeyStore.getEntry(KeyStore.java:1560)
at org.briarproject.briar.android.AndroidKeyStrengthener.isInitialised(AndroidKeyStrengthener.java:75)
at org.briarproject.bramble.crypto.CryptoComponentImpl.decryptWithPassword(CryptoComponentImpl.java:397)
at org.briarproject.bramble.account.AccountManagerImpl.loadAndDecryptDatabaseKey(AccountManagerImpl.java:215)
at org.briarproject.bramble.account.AccountManagerImpl.signIn(AccountManagerImpl.java:198)
at org.briarproject.briar.android.login.StartupViewModel.lambda$validatePassword$0$StartupViewModel(StartupViewModel.java:108)
at org.briarproject.briar.android.login.-$$Lambda$StartupViewModel$g7VDyWGXbuZadVRd8U1dRkICyWk.run(Unknown Source:4)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: android.security.KeyStoreException: Invalid key blob
at android.security.KeyStore.getKeyStoreException(KeyStore.java:695)
at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreSecretKeyFromKeystore(AndroidKeyStoreProvider.java:283)
at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:98)
at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:474)
at java.security.KeyStore.getEntry(KeyStore.java:1560)
at org.briarproject.briar.android.AndroidKeyStrengthener.isInitialised(AndroidKeyStrengthener.java:75)
at org.briarproject.bramble.crypto.CryptoComponentImpl.decryptWithPassword(CryptoComponentImpl.java:397)
at org.briarproject.bramble.account.AccountManagerImpl.loadAndDecryptDatabaseKey(AccountManagerImpl.java:215)
at org.briarproject.bramble.account.AccountManagerImpl.signIn(AccountManagerImpl.java:198)
at org.briarproject.briar.android.login.StartupViewModel.lambda$validatePassword$0$StartupViewModel(StartupViewModel.java:108)
at org.briarproject.briar.android.login.-$$Lambda$StartupViewModel$g7VDyWGXbuZadVRd8U1dRkICyWk.run(Unknown Source:4)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
```
Looks like we can get a GeneralSecurityException instead of a clean failure when trying to load the key. We should handle this like a clean failure instead of crashing.https://code.briarproject.org/briar/briar/-/issues/1680Bug when turning the screen horizontally2020-11-15T16:53:27ZjomocuBug when turning the screen horizontallyThe chat should go down at all when I put the screen horizontally, currently turning the screen shows some messages above, and I have to manually go down to the last message.The chat should go down at all when I put the screen horizontally, currently turning the screen shows some messages above, and I have to manually go down to the last message.https://code.briarproject.org/briar/briar/-/issues/1673NPE when scrolling in ConversationActivity2020-11-15T17:02:04ZakwizgranNPE when scrolling in ConversationActivity* Android version: 6.0
* Phone model: Huawei DIG-L21HN
* Briar version: 1.1.6 (4d26628)
Stacktrace:
```
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object refe...* Android version: 6.0
* Phone model: Huawei DIG-L21HN
* Briar version: 1.1.6 (4d26628)
Stacktrace:
```
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at org.briarproject.briar.android.view.BriarRecyclerViewScrollListener.onItemVisible(BriarRecyclerViewScrollListener.java:55)
at org.briarproject.briar.android.view.BriarRecyclerViewScrollListener.onItemsVisible(BriarRecyclerViewScrollListener.java:50)
at org.briarproject.briar.android.view.BriarRecyclerViewScrollListener.onScrolled(BriarRecyclerViewScrollListener.java:39)
at android.support.v7.widget.RecyclerView.dispatchOnScrolled(RecyclerView.java:4961)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:4021)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3652)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4194)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:338)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1764)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1607)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1516)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:338)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:338)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1764)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1607)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1516)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:338)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1764)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1607)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1516)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:338)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2757)
at android.view.View.layout(View.java:16772)
at android.view.ViewGroup.layout(ViewGroup.java:5462)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2234)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1991)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1147)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6262)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:886)
at android.view.Choreographer.doCallbacks(Choreographer.java:698)
at android.view.Choreographer.doFrame(Choreographer.java:633)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:872)
at android.os.Handler.handleCallback(Handler.java:743)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5659)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:822)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:712)
```
Edited log:
```
11-24 10:18:33.863 I/AndroidNetworkManager: Received broadcast android.intent.action.SCREEN_ON
11-24 10:18:42.475 I/BaseActivity: Starting ConversationActivity
11-24 10:18:42.513 I/ConversationActivity: Eagerly loading text for latest message
11-24 10:18:47.418 I/KeyboardAwareLinearLayout: onKeyboardOpen(438)
11-24 10:19:29.081 I/BaseActivity: Stopping ConversationActivity
11-24 10:19:29.274 I/BaseActivity: Starting ConversationActivity
11-24 10:19:29.292 I/ConversationActivity: Eagerly loading text for latest message
11-24 10:19:33.838 I/BaseActivity: Stopping ConversationActivity
11-24 10:19:33.983 I/BaseActivity: Starting ConversationActivity
11-24 10:19:34.003 I/ConversationActivity: Eagerly loading text for latest message
11-24 10:19:35.200 I/KeyboardAwareLinearLayout: onKeyboardOpen(926)
```
Notes:
* Object#getClass() is the desugared implementation of Objects.requireNonNull()
* Possible interaction between automatically scrolling to the bottom of the conversation and opening the keyboard?
* Old Briar version - KeyboardAwareLinearLayout has been removed, we've moved to the AndroidX implementation of ConstraintLayout
* Considering the old Briar version I'm not adding this to the current milestone unless we get another reporthttps://code.briarproject.org/briar/briar/-/issues/1672IllegalStateException animating FabSpeedDial2023-05-30T16:09:33ZakwizgranIllegalStateException animating FabSpeedDial* Android version: 6.0
* Phone model: Huawei CRO-L22
* Briar version: 1.2.4 (75dfa80)
Stacktrace:
```
java.lang.IllegalStateException: Cannot start this animator on a detached view!
at android.view.RenderNode.addAnimator(RenderN...* Android version: 6.0
* Phone model: Huawei CRO-L22
* Briar version: 1.2.4 (75dfa80)
Stacktrace:
```
java.lang.IllegalStateException: Cannot start this animator on a detached view!
at android.view.RenderNode.addAnimator(RenderNode.java:812)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:300)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:282)
at android.animation.RevealAnimator.<init>(RevealAnimator.java:37)
at android.view.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:55)
at io.github.kobakei.materialfabspeeddial.FabSpeedDial$6.run(FabSpeedDial.java:491)
at android.os.Handler.handleCallback(Handler.java:820)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5811)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:802)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:692)
```
Edited log:
```
11-24 04:48:14.450 I/AndroidAccountManager: No database key in preferences
11-24 04:48:14.452 I/AccountManagerImpl: Found database key in primary file
11-24 04:48:14.456 I/BaseActivity: Starting StartupActivity
11-24 04:48:16.369 I/IdentityManagerImpl: Identity stored
11-24 04:48:16.413 I/LifecycleManagerImpl: Starting services
11-24 04:48:16.425 I/AndroidNetworkManager: Received broadcast android.net.conn.CONNECTIVITY_CHANGE
11-24 04:48:16.428 I/AndroidNetworkManager: Received broadcast android.net.wifi.WIFI_AP_STATE_CHANGED
11-24 04:48:16.471 I/PluginManagerImpl: Starting simplex plugins
11-24 04:48:16.471 I/PluginManagerImpl: Starting duplex plugins
11-24 04:48:16.618 I/BriarActivity: Recreating NavDrawerActivity after signing in
11-24 04:48:16.864 I/BaseActivity: Stopping NavDrawerActivity
11-24 04:48:17.022 I/BaseActivity: Starting NavDrawerActivity
11-24 04:48:17.339 I/BaseActivity: Stopping SetupActivity
11-24 04:48:17.507 I/BaseActivity: Stopping StartupActivity
11-24 04:48:56.433 I/BaseActivity: Stopping NavDrawerActivity
11-24 04:48:56.653 I/BaseActivity: Starting NavDrawerActivity
11-24 04:48:56.843 I/BaseActivity: Stopping NavDrawerActivity
11-24 04:48:56.982 I/BaseActivity: Starting NavDrawerActivity
```Android 1.2https://code.briarproject.org/briar/briar/-/issues/1649Messages at bottom of group scroll offscreen after being marked as read2020-11-15T17:24:43ZakwizgranMessages at bottom of group scroll offscreen after being marked as readUser feedback: "At the instant when new messages at the bottom of the group chat finish fading from black to blue (I'm using the dark theme) to indicate they've been read, the window jumps back up so that the new messages are now just of...User feedback: "At the instant when new messages at the bottom of the group chat finish fading from black to blue (I'm using the dark theme) to indicate they've been read, the window jumps back up so that the new messages are now just off the bottom of the screen."https://code.briarproject.org/briar/briar/-/issues/1637Wrong orientation of (exotic) rotated images2022-04-26T10:45:03ZTorsten GroteWrong orientation of (exotic) rotated imagesWhen sending a photo with an EXIF orientation of 90, it is shown rotated 90 degrees to the left in the preview of the sender, the conversation and image view of the receiver. However, it is shown correctly in Android's Gallery app.When sending a photo with an EXIF orientation of 90, it is shown rotated 90 degrees to the left in the preview of the sender, the conversation and image view of the receiver. However, it is shown correctly in Android's Gallery app.Android 1.4https://code.briarproject.org/briar/briar/-/issues/1620SuperNotCalledException when sharing link2020-11-15T18:04:01ZakwizgranSuperNotCalledException when sharing link* Android version: 4.0.4
* Briar version 1.1.9 (b1dfd86)
* Phone model: x86 emulator
Steps to reproduce:
* Open remote contact screen
* Tap share button
* Close the app chooser by tapping outside of the chooser or pressing back
Stackt...* Android version: 4.0.4
* Briar version 1.1.9 (b1dfd86)
* Phone model: x86 emulator
Steps to reproduce:
* Open remote contact screen
* Tap share button
* Close the app chooser by tapping outside of the chooser or pressing back
Stacktrace:
```
android.app.SuperNotCalledException: Activity {android/com.android.internal.app.ChooserActivity} did not call through to super.onStop()
at android.app.Activity.performStop(Activity.java:4606)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3071)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3130)
at android.app.ActivityThread.access$1200(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1180)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
```
This looks like a bug in the platform's ChooserActivity so I'm not adding it to the milestone.https://code.briarproject.org/briar/briar/-/issues/1613Briar dependency error (Android studio)2020-11-15T18:07:51ZjomocuBriar dependency error (Android studio)Hi, I'm trying to edit and compile briar.
I have imported the project, but it shows the following error.
**ERROR: No dependency for integrity assertion 'cglib:cglib:3.2.0:cglib-3.2.0.jar:adb13bab79712ad6bdf1bd59f2a3918018a8016e722e8a357...Hi, I'm trying to edit and compile briar.
I have imported the project, but it shows the following error.
**ERROR: No dependency for integrity assertion 'cglib:cglib:3.2.0:cglib-3.2.0.jar:adb13bab79712ad6bdf1bd59f2a3918018a8016e722e8a357065afb9e6690861'**
What am I doing wrong?
Thanks greetingshttps://code.briarproject.org/briar/briar/-/issues/1608Can't scan QR code in low light2020-11-15T18:09:33ZakwizgranCan't scan QR code in low lightSome phones can't scan QR codes from screens in low light because the camera automatically adjusts the exposure, making the other phone's screen a white blur. I've seen this before on older phones but assumed it was a dying problem. But ...Some phones can't scan QR codes from screens in low light because the camera automatically adjusts the exposure, making the other phone's screen a white blur. I've seen this before on older phones but assumed it was a dying problem. But the problem also exists on the Honor 8A (Android 9), making it impossible to add contacts between the Honor 8A and the Ascend Y330 in low light. (The Y330's low res screen contributes to the problem; the Honor 8A can scan the Nexus 5's screen in the same lighting conditions, for example.)
We should see whether auto exposure can be disabled, and whether this helps.https://code.briarproject.org/briar/briar/-/issues/1600AttachmentRetrieverIntegrationTest fails on emulator2020-11-15T18:13:33ZakwizgranAttachmentRetrieverIntegrationTest fails on emulatorSeveral tests in AttachmentRetrieverIntegrationTest fail on the API 21 emulator. It looks like some of them failed in the original commit of the test (it was called AttachmentControllerTest at the time) and others have been broken by sub...Several tests in AttachmentRetrieverIntegrationTest fail on the API 21 emulator. It looks like some of them failed in the original commit of the test (it was called AttachmentControllerTest at the time) and others have been broken by subsequent changes.
The failures from the original commit all seem to involve the same issue: the file extension being `jpeg` rather than `jpg`. I guess the platform's behaviour probably changed some time between API 21 and now, and it doesn't seem likely to cause problems beyond the test failure.
```
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.conversation.AttachmentControllerTest.testSmallJpegImageHealsWrongMimeType(AttachmentControllerTest.java:125)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.conversation.AttachmentControllerTest.testHighError(AttachmentControllerTest.java:317)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.conversation.AttachmentControllerTest.testWideError(AttachmentControllerTest.java:332)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.conversation.AttachmentControllerTest.testNoSizeJpeg(AttachmentControllerTest.java:71)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.conversation.AttachmentControllerTest.testSmallJpegImage(AttachmentControllerTest.java:109)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.conversation.AttachmentControllerTest.testBigJpegImage(AttachmentControllerTest.java:141)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.conversation.AttachmentControllerTest.testLottaPixels(AttachmentControllerTest.java:203)
```
The failures on current master involve content types as well as file extensions.
```
org.junit.ComparisonFailure: expected:<image/[gif]> but was:<image/[jpeg]>
at org.briarproject.briar.android.attachment.AttachmentRetrieverIntegrationTest.testGimpCrash(AttachmentRetrieverIntegrationTest.java:156)
...
org.junit.ComparisonFailure: expected:<image/[gif]> but was:<image/[jpeg]>
at org.briarproject.briar.android.attachment.AttachmentRetrieverIntegrationTest.testUberGif(AttachmentRetrieverIntegrationTest.java:111)
...
org.junit.ComparisonFailure: expected:<image/[pn]g> but was:<image/[jpe]g>
at org.briarproject.briar.android.attachment.AttachmentRetrieverIntegrationTest.testImageIoCrash(AttachmentRetrieverIntegrationTest.java:141)
...
org.junit.ComparisonFailure: expected:<image/[gif]> but was:<image/[jpeg]>
at org.briarproject.briar.android.attachment.AttachmentRetrieverIntegrationTest.testOptiPngAfl(AttachmentRetrieverIntegrationTest.java:171)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.attachment.AttachmentRetrieverIntegrationTest.testHighError(AttachmentRetrieverIntegrationTest.java:241)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.attachment.AttachmentRetrieverIntegrationTest.testWideError(AttachmentRetrieverIntegrationTest.java:256)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.attachment.AttachmentRetrieverIntegrationTest.testSmallJpegImage(AttachmentRetrieverIntegrationTest.java:65)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.attachment.AttachmentRetrieverIntegrationTest.testBigJpegImage(AttachmentRetrieverIntegrationTest.java:81)
...
org.junit.ComparisonFailure: expected:<jp[]g> but was:<jp[e]g>
at org.briarproject.briar.android.attachment.AttachmentRetrieverIntegrationTest.testLottaPixels(AttachmentRetrieverIntegrationTest.java:127)
```https://code.briarproject.org/briar/briar/-/issues/1582Pending contact snackbar and add contact FAB are sometimes displaced2022-04-19T11:29:51ZakwizgranPending contact snackbar and add contact FAB are sometimes displacedThe pending contact snackbar sometimes appears in the wrong place, with a blank space below it and overlapping the FAB. After the snackbar is hidden, the FAB doesn't always return to the right position.
![device-2019-06-07-162517](/uplo...The pending contact snackbar sometimes appears in the wrong place, with a blank space below it and overlapping the FAB. After the snackbar is hidden, the FAB doesn't always return to the right position.
![device-2019-06-07-162517](/uploads/9109a6a1d3e0fbeccdb1e25d1c5796b7/device-2019-06-07-162517.png)
![device-2019-06-07-162537](/uploads/01cc37afca368254ff312281f3f8d992/device-2019-06-07-162537.png)
I've seen the first problem on the Huawei Ascend Y330 (Android 4.2.2) and the Vivo Y11 (Android 4.4.4). I've seen the second problem on those phones and also the Honor 8A (Android 9).https://code.briarproject.org/briar/briar/-/issues/1569Connection manager could fail to close connection2020-11-15T18:24:37ZakwizgranConnection manager could fail to close connectionWhen the connection manager disposes of the incoming side of a duplex connection, it interrupts the outgoing sync session (if any) so the outgoing session can finish cleanly. If this happens before the outgoing session is created, it won...When the connection manager disposes of the incoming side of a duplex connection, it interrupts the outgoing sync session (if any) so the outgoing session can finish cleanly. If this happens before the outgoing session is created, it won't be interrupted.
If the incoming side of the connection is being disposed of because of an exception then the transport connection will be closed, so the outgoing session should eventually catch an exception when it tries to write to the connection. But if the incoming side of the connection is being disposed of because the end of the stream was reached then the transport connection will be left half-open, so the outgoing session could keep running indefinitely. This might also happen in the case of an exception if there's nothing to send and the transport doesn't require keepalives, which is the case for Bluetooth.
This could result in a dangling connection that's only usable in one direction. As far as I can tell it won't prevent a new connection from being made, or cause issues like !921, because the registration and unregistration of duplex connections is based on the lifetime of the incoming session, not the outgoing session.
The opposite can also happen: if the connection manager disposes of the outgoing side of the connection before the incoming session is created, the incoming session won't be interrupted. This can only happen if an exception has been thrown (in which case the transport connection will be closed, which *should* cause the incoming session to catch an exception eventually), or if the outgoing session has finished cleanly, which only happens if it's interrupted due to the incoming side of the connection being disposed of. So the only possible cause of a bug like !921 in this case would be if closing the connection didn't cause the incoming session to catch an exception (flaky Bluetooth stacks, I'm looking at you).
Labelling this as a bug because it's unintended behaviour, although it's not clear if we need to fix it.https://code.briarproject.org/briar/briar/-/issues/1563DozeView disappears when rotating screen after whitelisting Briar2020-11-15T18:27:59ZakwizgranDozeView disappears when rotating screen after whitelisting BriarSteps to reproduce:
* Use a device with Android 6+
* Ensure Briar isn't whitelisted for doze
* Create a new account
* In the power management setup screen, tap "Allow Connections" and accept the dialog
* Rotate the screen
* Expected: The...Steps to reproduce:
* Use a device with Android 6+
* Ensure Briar isn't whitelisted for doze
* Create a new account
* In the power management setup screen, tap "Allow Connections" and accept the dialog
* Rotate the screen
* Expected: The layout stays the same
* Actual: The "Allow Connections" button (with its check mark and help button) disappears
* Use the back button to return to the password setup screen
* Expected: The layout is the same as before
* Actual: The "Next" button changes to "Create Account"
The unexpected layout changes happen because we re-check whether we're whitelisted.
If the fragment instances are retained across rotations, perhaps the password and doze fragments could remember the whitelisting state when they were first created, and use that to control the text of the password fragment's "Next" / "Create Account" button and the visibilty of DozeView, so that they stay the same after we're whitelisted, while using the current whitelisting state to show/hide the "Allow Connections" button's check mark and enable/disable the power management fragment's "Create Account" button, which are the bits that are supposed to change when we're whitelisted.https://code.briarproject.org/briar/briar/-/issues/1525IllegalThreadStateException when starting contact exchange task2021-11-04T11:03:43ZakwizgranIllegalThreadStateException when starting contact exchange task* Android version: 8.1.0
* Briar version: 1.1.5 (8f4c3c4)
* Phone model: OnePlus A0001 (bacon)
* User feedback: "Tried to connect @ 35C3 during the event."
Stacktrace:
```
java.lang.IllegalThreadStateException
at java.lang.Threa...* Android version: 8.1.0
* Briar version: 1.1.5 (8f4c3c4)
* Phone model: OnePlus A0001 (bacon)
* User feedback: "Tried to connect @ 35C3 during the event."
Stacktrace:
```
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:724)
at org.briarproject.bramble.contact.ContactExchangeTaskImpl.startExchange(ContactExchangeTaskImpl.java:113)
at org.briarproject.briar.android.keyagreement.ContactExchangeActivity.lambda$startContactExchange$0(ContactExchangeActivity.java:66)
at org.briarproject.briar.android.keyagreement.-$$Lambda$ContactExchangeActivity$fyog59L3yYwzJYBvp0hzYrpHYRo.run(Unknown Source:4)
at org.briarproject.briar.android.controller.DbControllerImpl.lambda$runOnDbThread$0(DbControllerImpl.java:35)
at org.briarproject.briar.android.controller.-$$Lambda$DbControllerImpl$SwC9ndeQwlnMM-VN8yvqCJG1ESc.run(Unknown Source:4)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
```
This exception is thrown if start() is called when the thread isn't in the initial state. A couple of guesses about how this could have happened:
* A ContactExchangeTask instance was reused across multiple contacts
* A ContactExchangeActivity instance received multiple KeyAgreementFinishedEvents, possibly relating to different contacts, each of which cause it to start its ContactExchangeTask
Assigning to myself as I'm refactoring this code for remote contacts.Android 1.4