briar issueshttps://code.briarproject.org/groups/briar/-/issues2022-05-11T14:23:37Zhttps://code.briarproject.org/briar/briar/-/issues/2312Briar fails to start if clock was unreasonably wrong on first run2022-05-11T14:23:37ZakwizgranBriar fails to start if clock was unreasonably wrong on first runSteps to reproduce:
* If a Briar account exists, delete it
* Set the system clock to a date before 1 Jan 2021
* Launch Briar and create an account
* Briar will show the startup failure screen due to the clock being wrong
* Set the system...Steps to reproduce:
* If a Briar account exists, delete it
* Set the system clock to a date before 1 Jan 2021
* Launch Briar and create an account
* Briar will show the startup failure screen due to the clock being wrong
* Set the system clock to the right date
* Launch Briar again
* The password screen will be shown
* Enter the password
* Briar will show the startup failure screen, saying the database is corrupt
Log snippet from the second run (after correcting the clock):
```
2022-04-27 08:54:55.872 22506-22542/org.briarproject.briar.android.debug I/H2Database: Contents of account directory before opening DB:
2022-04-27 08:54:55.872 22506-22542/org.briarproject.briar.android.debug I/H2Database: D /data/data/org.briarproject.briar.android.debug 4096
2022-04-27 08:54:55.872 22506-22542/org.briarproject.briar.android.debug I/H2Database: D /data/data/org.briarproject.briar.android.debug/lib 4096
2022-04-27 08:54:55.882 22506-22542/org.briarproject.briar.android.debug I/H2Database: F /data/data/org.briarproject.briar.android.debug/lib/libobfs4proxy.so 6481961
2022-04-27 08:54:55.882 22506-22542/org.briarproject.briar.android.debug I/H2Database: F /data/data/org.briarproject.briar.android.debug/lib/libtor.so 5957620
2022-04-27 08:54:55.882 22506-22542/org.briarproject.briar.android.debug I/H2Database: D /data/data/org.briarproject.briar.android.debug/cache 4096
2022-04-27 08:54:55.882 22506-22542/org.briarproject.briar.android.debug I/H2Database: D /data/data/org.briarproject.briar.android.debug/cache/com.android.renderscript.cache 4096
2022-04-27 08:54:55.882 22506-22542/org.briarproject.briar.android.debug I/H2Database: D /data/data/org.briarproject.briar.android.debug/shared_prefs 4096
2022-04-27 08:54:55.892 22506-22542/org.briarproject.briar.android.debug I/H2Database: F /data/data/org.briarproject.briar.android.debug/shared_prefs/org.briarproject.briar.android.debug_preferences.xml 115
2022-04-27 08:54:55.892 22506-22542/org.briarproject.briar.android.debug I/H2Database: F /data/data/org.briarproject.briar.android.debug/shared_prefs/_has_set_default_values.xml 126
2022-04-27 08:54:55.892 22506-22542/org.briarproject.briar.android.debug I/H2Database: F /data/data/org.briarproject.briar.android.debug/shared_prefs/db.xml 65
2022-04-27 08:54:55.892 22506-22542/org.briarproject.briar.android.debug I/H2Database: D /data/data/org.briarproject.briar.android.debug/app_key 4096
2022-04-27 08:54:55.892 22506-22542/org.briarproject.briar.android.debug I/H2Database: F /data/data/org.briarproject.briar.android.debug/app_key/db.key.bak 218
2022-04-27 08:54:55.892 22506-22542/org.briarproject.briar.android.debug I/H2Database: F /data/data/org.briarproject.briar.android.debug/app_key/db.key 218
2022-04-27 08:54:55.902 22506-22542/org.briarproject.briar.android.debug I/H2Database: D /data/data/org.briarproject.briar.android.debug/app_db 4096
2022-04-27 08:54:55.902 22506-22542/org.briarproject.briar.android.debug I/H2Database: D /data/data/org.briarproject.briar.android.debug/app_tor 4096
2022-04-27 08:54:55.902 22506-22542/org.briarproject.briar.android.debug I/H2Database: Reopening DB: false
```
Stacktrace:
```
2022-04-27 08:55:00.046 22506-22542/org.briarproject.briar.android.debug W/LifecycleManagerImpl: org.briarproject.bramble.api.db.DbException
org.briarproject.bramble.api.db.DbException
at org.briarproject.bramble.identity.IdentityManagerImpl.loadIdentityWithKeyPair(IdentityManagerImpl.java:159)
at org.briarproject.bramble.identity.IdentityManagerImpl.getCachedIdentity(IdentityManagerImpl.java:147)
at org.briarproject.bramble.identity.IdentityManagerImpl.onDatabaseOpened(IdentityManagerImpl.java:95)
at org.briarproject.bramble.lifecycle.LifecycleManagerImpl.lambda$startServices$0(LifecycleManagerImpl.java:129)
at org.briarproject.bramble.lifecycle.LifecycleManagerImpl.$r8$lambda$R30tTgoiROvN8ROsUbPogFK9rjY(LifecycleManagerImpl.java)
at org.briarproject.bramble.lifecycle.LifecycleManagerImpl$$ExternalSyntheticLambda0.run(Unknown Source)
at org.briarproject.bramble.db.DatabaseComponentImpl.transaction(DatabaseComponentImpl.java:200)
at org.briarproject.bramble.lifecycle.LifecycleManagerImpl.startServices(LifecycleManagerImpl.java:123)
at org.briarproject.briar.android.BriarService.lambda$onCreate$0(BriarService.java:141)
at org.briarproject.briar.android.BriarService.$r8$lambda$HDU85pNkqbcIvjlH9WM8JDDv2bo(BriarService.java)
at org.briarproject.briar.android.BriarService$$ExternalSyntheticLambda5.run(Unknown Source)
at org.briarproject.bramble.system.AndroidWakeLockManagerImpl.lambda$executeWakefully$1(AndroidWakeLockManagerImpl.java:95)
at org.briarproject.bramble.system.AndroidWakeLockManagerImpl.$r8$lambda$HU3N-m0ADiLNH1gKAKkCiyTw2fM(AndroidWakeLockManagerImpl.java)
at org.briarproject.bramble.system.AndroidWakeLockManagerImpl$$ExternalSyntheticLambda0.run(Unknown Source)
at java.lang.Thread.run(Thread.java:856)
```
It looks like the DB key was saved on the first run but the DB wasn't created. On the second run we assumed an identity had already been created so we didn't store one, and then we got an exception when trying to load an identity from the newly created DB.Android 1.4https://code.briarproject.org/briar/briar-gtk/-/issues/77Make taskbar icon blink when new msg / add tray options2020-11-15T13:42:36ZdanMake taskbar icon blink when new msg / add tray optionsFirst time trying Briar here. Running the flatpak v0.1.0-beta2
I could use Briar as main messenger if Briar taskbar icon/tray icon would blink when new msg.
Since Briar should be running 24/7, option to move it to tray is needed.
Tha...First time trying Briar here. Running the flatpak v0.1.0-beta2
I could use Briar as main messenger if Briar taskbar icon/tray icon would blink when new msg.
Since Briar should be running 24/7, option to move it to tray is needed.
Thank you for Briar and the desktop port.https://code.briarproject.org/briar/briar/-/issues/1765Does not reconnect despite existing Wi-Fi Direct connection2020-11-15T14:30:47ZN6P4CFB1BSRSLDoes not reconnect despite existing Wi-Fi Direct connection**Version**
Briar 1.2.9
**Android version**
Android 10
**Description**
1. Connect two Android 10 devices (smartphones) via Wi-Fi Direct
2. Install the Briar app on both Android devices
3. Open the Briar app and add the Android device...**Version**
Briar 1.2.9
**Android version**
Android 10
**Description**
1. Connect two Android 10 devices (smartphones) via Wi-Fi Direct
2. Install the Briar app on both Android devices
3. Open the Briar app and add the Android devices to contacts
4. Now can send and receive messages. A green icon will light up.
5. On the first Android device in Briar app tap "Sign out" and open Briar app again and enter the password.
6. Now there is no more green icon on both Android devices and can no longer send and receive messages.
Note:
The Wi-Fi Direct connection was not disconnected. Same problem also with Bluetooth.
Can you reproduce it?https://code.briarproject.org/briar/briar/-/issues/1748User testing for transport toggles, second round2020-11-15T15:34:28ZakwizgranUser testing for transport toggles, second roundSubtask of #1723.Subtask of #1723.https://code.briarproject.org/briar/briar/-/issues/1726Unable to "mark" text in private messages2020-11-15T15:56:26ZbafoobarUnable to "mark" text in private messagesI want to copy text from messages. I can long-tap on text on blogs, group and forum messages, but I am unable to do that on private messages. It only marks the message as a whole to delete it. In combination with beeing unable to click o...I want to copy text from messages. I can long-tap on text on blogs, group and forum messages, but I am unable to do that on private messages. It only marks the message as a whole to delete it. In combination with beeing unable to click on links, that makes it a very annoying issue.https://code.briarproject.org/briar/briar-gtk/-/issues/48Reliably scroll down for new messages2021-01-23T13:40:26ZNicoReliably scroll down for new messagesAs of now, every time a new message arrives in a private chat the list should scroll down. This doesn't work reliably because the message needs to be rendered before adjustment has effects; the used `idle_add()` does not always work to w...As of now, every time a new message arrives in a private chat the list should scroll down. This doesn't work reliably because the message needs to be rendered before adjustment has effects; the used `idle_add()` does not always work to wait for the rendering.
This may become unnecessary with #40.GTK Nexthttps://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/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/website/-/issues/15Open external links in a new tab using rel="noopener"2020-11-15T17:13:26ZakwizgranOpen external links in a new tab using rel="noopener"Before the Hugo migration, external links opened in a new tab using `rel="noopener noreferrer"`. We had to remove `noopener` because Hugo didn't support it. But @grote has pointed out that [it's now possible with Hugo](https://code.briar...Before the Hugo migration, external links opened in a new tab using `rel="noopener noreferrer"`. We had to remove `noopener` because Hugo didn't support it. But @grote has pointed out that [it's now possible with Hugo](https://code.briarproject.org/briar/website/merge_requests/24#note_39615):
> Hugo 0.62 now supports [Markdown Render Hooks](https://gohugo.io/getting-started/configuration-markup/#markdown-render-hooks) which can be used for things like adding `rel="noopener"` attributes on all links.https://code.briarproject.org/briar/briar/-/issues/1674NPE in ContactListFragment2021-11-04T11:03:44ZakwizgranNPE in ContactListFragment* Android version: 10
* Phone model: Google Pixel 2 XL (taimen)
* Briar version: 1.2.4 (75dfa80)
* User feedback: "Opened the app after many messages were sent."
Stacktrace:
```
java.lang.NullPointerException: Attempt to read from field...* Android version: 10
* Phone model: Google Pixel 2 XL (taimen)
* Briar version: 1.2.4 (75dfa80)
* User feedback: "Opened the app after many messages were sent."
Stacktrace:
```
java.lang.NullPointerException: Attempt to read from field 'android.widget.ImageView org.briarproject.briar.android.contact.ContactItemViewHolder.avatar' on a null object reference
at org.briarproject.briar.android.contact.ContactListFragment.lambda$onCreateView$0$ContactListFragment(ContactListFragment.java:140)
at org.briarproject.briar.android.contact.-$$Lambda$ContactListFragment$DvpyzIeg2gO44NHGy22U4l_irhw.onItemClick(Unknown Source:4)
at org.briarproject.briar.android.contact.ContactItemViewHolder.lambda$bind$0$ContactItemViewHolder(ContactItemViewHolder.java:58)
at org.briarproject.briar.android.contact.-$$Lambda$ContactItemViewHolder$M1B1WNtK1OEXOZpZndUVONB779k.onClick(Unknown Source:6)
at android.view.View.performClick(View.java:7140)
at android.view.View.performClickInternal(View.java:7117)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27351)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
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)
```
Edited log:
```
11-26 19:32:16.943 I/AndroidNetworkManager: Received broadcast android.intent.action.SCREEN_OFF
11-26 19:32:25.628 I/BaseActivity: Starting ConversationActivity
11-26 19:32:25.674 I/BaseActivity: Starting UnlockActivity
11-26 19:32:25.697 I/BaseActivity: Stopping UnlockActivity
11-26 19:32:25.698 I/BaseActivity: Stopping ConversationActivity
11-26 19:32:25.751 I/BaseActivity: Starting UnlockActivity
11-26 19:32:25.776 I/AndroidNetworkManager: Received broadcast android.intent.action.SCREEN_ON
11-26 19:32:25.997 I/BaseActivity: Starting NavDrawerActivity
11-26 19:32:26.025 I/BaseActivity: Starting UnlockActivity
11-26 19:32:26.103 I/BaseActivity: Stopping NavDrawerActivity
11-26 19:32:26.207 I/BaseActivity: Stopping UnlockActivity
11-26 19:32:26.830 I/BaseActivity: Starting NavDrawerActivity
11-26 19:32:27.387 I/BaseActivity: Stopping UnlockActivity
11-26 19:32:29.054 I/ConversationActivity: Eagerly loading text for latest message
11-26 19:32:29.108 I/ContactListFragment: Concurrent update, reloading
11-26 19:32:30.076 I/ContactListFragment: Conversation message received, updating item
```
There are some odd things about this log:
1. ConversationActivity and UnlockActivity seem to be started while the screen is off. I'm guessing this isn't really the case, it's just that the SCREEN_ON broadcast was received a while after the screen was actually turned on.
2. ConversationActivity is stopped at 19:32:25 and not subsequently started. But at 19:32:29 it eagerly loads the text for a new message.
* It shouldn't be doing any work while stopped.
* If we show the contact list after unlocking then we should clear the stack down to the existing instance of NavDrawerActivity, if any, which should destroy any existing instance of ConversationActivity.
3. A message arrives while ContactListFragment is loading the contact list, which presumably started at 19:32:26 when NavDrawerActivity was started. This causes ContactListFragment to reload the contact list. It's not clear whether the reload has completed before we try to update the item, triggering the crash.Android 1.4https://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/1596Make migrations idempotent where possible2020-11-15T18:14:12ZakwizgranMake migrations idempotent where possibleThe database migrations use data definition commands (`ALTER TABLE`, etc) that H2 commits automatically as soon as they're executed, even though we execute the commands within a transaction. If a crash happens during a migration, the DB ...The database migrations use data definition commands (`ALTER TABLE`, etc) that H2 commits automatically as soon as they're executed, even though we execute the commands within a transaction. If a crash happens during a migration, the DB may be left in a state where the migration has been partially applied. If the data definition commands aren't idempotent then subsequent attempts to apply the migration will fail, making it impossible to complete the migration and open the DB.
Where possible we should use data definition commands that are idempotent. For example, `DELETE COLUMN` should be `DELETE COLUMN IF EXISTS`, `CREATE COLUMN` should be `CREATE COLUMN IF NOT EXISTS`, etc.https://code.briarproject.org/briar/briar/-/issues/1555Factor out BriarActionBarActivity for ActionBar handling2020-11-15T18:31:40ZTorsten GroteFactor out BriarActionBarActivity for ActionBar handlingFrom https://code.briarproject.org/briar/briar/merge_requests/1035#note_36028
Push action bar handling code up into a BriarActionBarActivity and make current activities using it inherit it.
```java
ActionBar ab = getSupportActionBar();...From https://code.briarproject.org/briar/briar/merge_requests/1035#note_36028
Push action bar handling code up into a BriarActionBarActivity and make current activities using it inherit it.
```java
ActionBar ab = getSupportActionBar();
if (ab != null) {
ab.setDisplayHomeAsUpEnabled(true);
}
```
`onOptionsItemSelected()`https://code.briarproject.org/briar/briar/-/issues/1523RuntimeException: Camera is being used after Camera.release() was called2021-03-24T16:26:51ZakwizgranRuntimeException: Camera is being used after Camera.release() was called* Android version: 6.0.1
* Briar version: 1.1.5 (8f4c3c4)
* Phone models: Samsung GT-I9100 and GT-I9300 (m0xx)
* User feedback: "I could not scan other device. They could scan me. I have Replicant 6.003."
Stacktrace:
```
java.lang.Runti...* Android version: 6.0.1
* Briar version: 1.1.5 (8f4c3c4)
* Phone models: Samsung GT-I9100 and GT-I9300 (m0xx)
* User feedback: "I could not scan other device. They could scan me. I have Replicant 6.003."
Stacktrace:
```
java.lang.RuntimeException: Camera is being used after Camera.release() was called
at android.hardware.Camera.native_getParameters(Native Method)
at android.hardware.Camera.getParameters(Camera.java:1999)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1152)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5461)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
```
We have four reports of this crash, one on the GT-I9100 (running Replicant) and three on the GT-I9300 (probably also running Replicant, as it's the same Android version as the GT-I9100, and the version's too high to be a factory ROM).
This looks like a Replicant bug: camera calls are being made asynchronously. I'll report it upstream. I'm not adding it to the current milestone as there doesn't seem to be anything we can do.https://code.briarproject.org/briar/briar/-/issues/1419Online status in contact list can be confused with radio button2020-11-16T10:31:13ZTorsten GroteOnline status in contact list can be confused with radio buttonThe circle on the right of the avatar gives you an impression of a select radio button instead of online status.
![Online_1](/uploads/05ec34f3580ae8f05846fd807b516e9f/Online_1.png)
Placing the green circle on the corner of the avatar m...The circle on the right of the avatar gives you an impression of a select radio button instead of online status.
![Online_1](/uploads/05ec34f3580ae8f05846fd807b516e9f/Online_1.png)
Placing the green circle on the corner of the avatar might be more understandable:
![online](/uploads/055feea1e3c6de24587eb05c75b10f78/online.png)https://code.briarproject.org/briar/briar/-/issues/1394Confirmation dialog isn't shown when connecting panic button app2020-11-17T16:07:07ZakwizgranConfirmation dialog isn't shown when connecting panic button appSteps to reproduce:
* Uninstall and reinstall Briar and Ripple so they're definitely not connected
* Start Briar, create an account, go to "Settings > Panic button setup > Panic Button App"
* Choose Ripple as the panic button app
* Expe...Steps to reproduce:
* Uninstall and reinstall Briar and Ripple so they're definitely not connected
* Start Briar, create an account, go to "Settings > Panic button setup > Panic Button App"
* Choose Ripple as the panic button app
* Expected: A dialog is shown to confirm that Ripple is allowed to trigger destructive actions
* Action: No dialog is shown, Ripple can trigger destructive actionshttps://code.briarproject.org/briar/briar/-/issues/1387Keep persistent log messages2020-11-17T15:47:48ZTorsten GroteKeep persistent log messagesIt might be useful to have logs that persist across restarts (e.g. to find out why users get signed out). But that would require one of the following solutions:
* write logs to an encrypted file that we can read back after restarting...It might be useful to have logs that persist across restarts (e.g. to find out why users get signed out). But that would require one of the following solutions:
* write logs to an encrypted file that we can read back after restarting
* write logs to the system log, use the `READ_LOGS` permission to read them back after restarting - this results in a scary permission warning at installation time on API < 23
* write logs to the system log, read them back without the `READ_LOGS` permission - this only works on API >= 16, but that's nearly all our users, so we could just live without this feature on API 15. the bigger issue with using the system log is that the logs are stored in plaintexthttps://code.briarproject.org/briar/briar/-/issues/1364EOFException when adding contact2020-11-17T15:59:15ZakwizgranEOFException when adding contactSteps to reproduce:
* Device A scans device B, connects via LAN (Bluetooth would also work AFAICT)
* Wait for device A to time out
* Device A closes the connection
* Device B scans device A
* Device B tries to read from the closed conne...Steps to reproduce:
* Device A scans device B, connects via LAN (Bluetooth would also work AFAICT)
* Wait for device A to time out
* Device A closes the connection
* Device B scans device A
* Device B tries to read from the closed connection, throws EOFException
* Device B shows "Connection aborted" toast
* Adding contact failshttps://code.briarproject.org/briar/briar/-/issues/1353Create fake data for automated screenshots2020-11-17T16:08:47ZakwizgranCreate fake data for automated screenshotsCreate fake data that can be inserted into the app by an Espresso test when taking screenshots for the manual or app store.Create fake data that can be inserted into the app by an Espresso test when taking screenshots for the manual or app store.https://code.briarproject.org/briar/briar/-/issues/1347Annotate UI methods that run on background threads2020-11-17T16:09:10ZakwizgranAnnotate UI methods that run on background threadsWe tend to assume that UI components are only accessed on the UI thread and don't need to be thread-safe, but sometimes this isn't true. Create an annotation for UI methods that run on background threads. (Methods that run on particular ...We tend to assume that UI components are only accessed on the UI thread and don't need to be thread-safe, but sometimes this isn't true. Create an annotation for UI methods that run on background threads. (Methods that run on particular executors can use the existing executor annotations.)