briar issueshttps://code.briarproject.org/briar/briar/-/issues2021-04-06T12:40:04Zhttps://code.briarproject.org/briar/briar/-/issues/1873Migrate GroupController to ViewModel2021-04-06T12:40:04ZTorsten GroteMigrate GroupController to ViewModelSubtask of #1800Subtask of #1800Adapt to changes in the Android platformTorsten GroteTorsten Grote2021-04-30https://code.briarproject.org/briar/briar/-/issues/1870Migrate ForumController to ViewModel2021-04-06T12:40:10ZTorsten GroteMigrate ForumController to ViewModelSubtask of #1800Subtask of #1800Adapt to changes in the Android platformTorsten GroteTorsten Grote2021-04-30https://code.briarproject.org/briar/briar/-/issues/1865Migrate SetupController to ViewModel2021-04-06T12:40:15ZTorsten GroteMigrate SetupController to ViewModelSubtask of #1800Subtask of #1800Adapt to changes in the Android platformDaniel LublinDaniel Lublin2021-04-30https://code.briarproject.org/briar/briar/-/issues/1869Introduce ViewModel for ForumListFragment2021-04-06T12:40:53ZTorsten GroteIntroduce ViewModel for ForumListFragmentThe ForumListFragment does lots of work on the UI level, this should be migrated to a ViewModel scoped to the fragment. See !1327
Subtask of #1823.The ForumListFragment does lots of work on the UI level, this should be migrated to a ViewModel scoped to the fragment. See !1327
Subtask of #1823.Adapt to changes in the Android platformTorsten GroteTorsten Grote2021-04-30https://code.briarproject.org/briar/briar/-/issues/1302Connection chooser rejects connection when retrying adding a contact2021-04-07T16:57:57ZakwizgranConnection chooser rejects connection when retrying adding a contact* Android version: 8.0.0
* Phone model: Samsung SM-G950F (dreamltexx)
* Briar version: 1.0.5 (183f0c5)
* User feedback: "Add contacts did not work. Devices were in the same WLAN."
Log:
```
05-28 10:31:56.933 I/KeyAgreementConnector: org...* Android version: 8.0.0
* Phone model: Samsung SM-G950F (dreamltexx)
* Briar version: 1.0.5 (183f0c5)
* User feedback: "Add contacts did not work. Devices were in the same WLAN."
Log:
```
05-28 10:31:56.933 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:31:57.434 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:31:57.935 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:31:58.435 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:31:58.936 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:31:59.437 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:31:59.938 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:00.197 I/TorPlugin: OR connection CLOSED
05-28 10:32:00.208 I/TorPlugin: Online: true, wifi: true
05-28 10:32:00.208 I/TorPlugin: Country code: DE
05-28 10:32:00.208 I/TorPlugin: Enabling network
05-28 10:32:00.440 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:00.940 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:01.441 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:01.941 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:02.442 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:02.943 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:03.443 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:03.944 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:04.445 I/KeyAgreementConnector: org.briarproject.bramble.lan: Waiting for data
05-28 10:32:04.528 I/KeyAgreementConnector: Stopping BQP listeners
05-28 10:32:04.530 I/ConnectionChooserImpl: Closing 0 unused connections
05-28 10:32:04.531 I/ConnectionChooserImpl: java.net.SocketException: Socket closed
05-28 10:32:04.533 I/CameraView: Opening camera
05-28 10:32:04.539 I/CameraView: Using back-facing camera
05-28 10:32:04.602 I/CameraView: Screen rotation 0 degrees, camera orientation 90 degrees
05-28 10:32:04.605 I/CameraView: Scene modes: [auto, hdr]
05-28 10:32:04.606 I/CameraView: Focus modes: [auto, infinity, macro, continuous-video, continuous-picture]
05-28 10:32:04.606 I/CameraView: Size 1920x1080, stretch 1.03125, zoom 4.1472, score 0.23381966
05-28 10:32:04.606 I/CameraView: Size 1440x1080, stretch 1.375, zoom 3.1104, score 0.23381966
05-28 10:32:04.606 I/CameraView: Size 1088x1088, stretch 1.8333333, zoom 2.367488, score 0.2303938
05-28 10:32:04.606 I/CameraView: Size 1280x720, stretch 1.03125, zoom 1.8432, score 0.52609426
05-28 10:32:04.606 I/CameraView: Size 1056x704, stretch 1.2222222, zoom 1.486848, score 0.55027944
05-28 10:32:04.606 I/CameraView: Size 1024x768, stretch 1.375, zoom 1.572864, score 0.46238753
05-28 10:32:04.606 I/CameraView: Size 960x720, stretch 1.375, zoom 1.3824, score 0.52609426
05-28 10:32:04.606 I/CameraView: Size 800x450, stretch 1.03125, zoom 1.3888888, score 0.6981818
05-28 10:32:04.606 I/CameraView: Size 720x720, stretch 1.8333333, zoom 1.0368, score 0.52609426
05-28 10:32:04.606 I/CameraView: Size 720x480, stretch 1.2222222, zoom 1.4467592, score 0.56552726
05-28 10:32:04.606 I/CameraView: Size 640x480, stretch 1.375, zoom 1.6276041, score 0.44683638
05-28 10:32:04.606 I/CameraView: Size 352x288, stretch 1.5, zoom 4.9321337, score 0.135168
05-28 10:32:04.606 I/CameraView: Size 320x240, stretch 1.375, zoom 6.5104165, score 0.111709096
05-28 10:32:04.606 I/CameraView: Size 256x144, stretch 1.03125, zoom 13.563368, score 0.07149382
05-28 10:32:04.607 I/CameraView: Size 176x144, stretch 1.5, zoom 19.728535, score 0.033792
05-28 10:32:04.607 I/CameraView: Best size 800x450
05-28 10:32:04.619 I/CameraView: Video stabilisation enabled: false
05-28 10:32:04.619 I/CameraView: Scene mode: auto
05-28 10:32:04.619 I/CameraView: Focus mode: continuous-picture
05-28 10:32:04.619 I/CameraView: Flash mode: off
05-28 10:32:04.619 I/CameraView: Preview size: 800x450
05-28 10:32:04.647 I/KeyAgreementConnector: Starting BQP listeners
05-28 10:32:04.650 I/BluetoothConnectionLimiterImpl: Key agreement ended
05-28 10:32:04.678 I/KeyAgreementConnector: Listening via org.briarproject.bramble.lan
05-28 10:32:04.681 I/BluetoothConnectionLimiterImpl: Key agreement started, closing 0 connections
05-28 10:32:04.704 I/CameraView: Surface created
05-28 10:32:04.704 I/CameraView: Surface changed: 1080x1980
05-28 10:32:04.708 I/CameraView: Size 1920x1080, stretch 1.03125, zoom 4.1472, score 0.23381966
05-28 10:32:04.708 I/CameraView: Size 1440x1080, stretch 1.375, zoom 3.1104, score 0.23381966
05-28 10:32:04.708 I/CameraView: Size 1088x1088, stretch 1.8333333, zoom 2.367488, score 0.2303938
05-28 10:32:04.708 I/CameraView: Size 1280x720, stretch 1.03125, zoom 1.8432, score 0.52609426
05-28 10:32:04.708 I/CameraView: Size 1056x704, stretch 1.2222222, zoom 1.486848, score 0.55027944
05-28 10:32:04.708 I/CameraView: Size 1024x768, stretch 1.375, zoom 1.572864, score 0.46238753
05-28 10:32:04.708 I/CameraView: Size 960x720, stretch 1.375, zoom 1.3824, score 0.52609426
05-28 10:32:04.708 I/CameraView: Size 800x450, stretch 1.03125, zoom 1.3888888, score 0.6981818
05-28 10:32:04.708 I/CameraView: Size 720x720, stretch 1.8333333, zoom 1.0368, score 0.52609426
05-28 10:32:04.708 I/CameraView: Size 720x480, stretch 1.2222222, zoom 1.4467592, score 0.56552726
05-28 10:32:04.708 I/CameraView: Size 640x480, stretch 1.375, zoom 1.6276041, score 0.44683638
05-28 10:32:04.708 I/CameraView: Size 352x288, stretch 1.5, zoom 4.9321337, score 0.135168
05-28 10:32:04.708 I/CameraView: Size 320x240, stretch 1.375, zoom 6.5104165, score 0.111709096
05-28 10:32:04.708 I/CameraView: Size 256x144, stretch 1.03125, zoom 13.563368, score 0.07149382
05-28 10:32:04.708 I/CameraView: Size 176x144, stretch 1.5, zoom 19.728535, score 0.033792
05-28 10:32:04.708 I/CameraView: Best size 800x450
05-28 10:32:04.718 I/CameraView: Video stabilisation enabled: false
05-28 10:32:04.719 I/CameraView: Scene mode: auto
05-28 10:32:04.719 I/CameraView: Focus mode: continuous-picture
05-28 10:32:04.719 I/CameraView: Flash mode: off
05-28 10:32:04.719 I/CameraView: Preview size: 800x450
05-28 10:32:04.719 I/CameraView: Starting preview
05-28 10:32:04.946 I/ConnectionChooserImpl: Got connection for org.briarproject.bramble.lan
05-28 10:32:04.946 I/ConnectionChooserImpl: Already stopped
05-28 10:32:05.046 I/ShowQrCodeFragment: Local payload is 36 bytes
05-28 10:32:06.819 I/Poller: Polling plugin org.briarproject.bramble.lan
05-28 10:32:07.890 I/CameraView: Stopping preview
05-28 10:32:07.890 I/KeyAgreementConnector: Stopping BQP listeners
05-28 10:32:07.891 I/ConnectionChooserImpl: Closing 0 unused connections
05-28 10:32:07.891 I/BluetoothConnectionLimiterImpl: Key agreement ended
05-28 10:32:07.891 I/ConnectionChooserImpl: java.net.SocketException: Socket closed
05-28 10:32:08.068 I/CameraView: Releasing camera
05-28 10:32:08.182 I/QrCodeDecoder: Camera has changed, ignoring preview frame
05-28 10:32:08.192 I/CameraView: Surface destroyed
```
Notes:
* 10:31:56.933 - At the start of the log the device has made a connection via wifi and it's waiting for data - this might be because the other device hasn't scanned this device's QR code yet.
* 10:32:04.528 - The connection attempt is cancelled and the ConnectionChooserImpl is stopped.
* 10:32:04.533 - The camera is reopened. This is too soon after the previous event to be the result of a manual action.
* 10:32:04.647 - A new connection attempt starts. The BluetoothConnectionLimiter gets a KeyAgreementStoppedListeningEvent when the old key agreement task is stopped, then a KeyAgreementListeningEvent when the new task is started.
* 10:32:04.946 - A connection is made via wifi, but the ConnectionChooserImpl rejects it because it's already been stopped
It looks like the ConnectionChooserImpl instance is being reused, which shouldn't happen. This may mean the KeyAgreementTaskImpl instance is also being reused.https://code.briarproject.org/briar/briar/-/issues/57Detect DB durability failures2021-04-12T13:18:14ZakwizgranDetect DB durability failuresIf the app or device crashes, the database may fail to store data durably:
http://www.h2database.com/html/advanced.html#durability_problems
This may cause a wide range of problems, including data sync bugs where a peer believes we've s...If the app or device crashes, the database may fail to store data durably:
http://www.h2database.com/html/advanced.html#durability_problems
This may cause a wide range of problems, including data sync bugs where a peer believes we've stored some data because we acked it, but we failed to store the data durably. The peer won't ever resend the acked data.
To detect durability problems, store a flag in the DB indicating whether the DB is dirty. At startup, if the DB is dirty then a crash has occurred. Otherwise mark the DB dirty before handling the first transaction. At shutdown, mark the DB clean after handling the last transaction.
If a crash is detected then we can attempt to recover from any problems it may have caused, for example by asking peers to forget about any acks we've sent.
This approach relies on the assumption that if transaction A is committed before transaction B is started, it's not possible for the database to durably store transaction B but not transaction A. Is that a safe assumption?Adapt to changes in the Android platformSebastianSebastian2021-04-30https://code.briarproject.org/briar/briar/-/issues/1837Conversation settings screen2021-04-13T11:49:41ZakwizgranConversation settings screenAdd a per-conversation settings screen, accessible via the conversation screen's menu.
The screen will initially have one setting: a switch that enables or disables self-destructing messages, with an explanation of the timer duration an...Add a per-conversation settings screen, accessible via the conversation screen's menu.
The screen will initially have one setting: a switch that enables or disables self-destructing messages, with an explanation of the timer duration and the fact that changes made by the contact will be followed automatically.
Subtask of #804Self-destructing messagesSebastianSebastian2021-01-31https://code.briarproject.org/briar/briar/-/issues/1527Expiry message for debug builds is out of date2021-04-15T11:43:36ZDanielExpiry message for debug builds is out of dateWhen I am running the app it says I should download the updated version how to fix this thy.When I am running the app it says I should download the updated version how to fix this thy.akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1863IllegalArgumentException when creating group invitation2021-04-15T15:24:24ZTorsten GroteIllegalArgumentException when creating group invitation
```
java.lang.IllegalArgumentException
at org.briarproject.bramble.db.DatabaseComponentImpl.mergeGroupMetadata(DatabaseComponentImpl.java:756)
at org.briarproject.bramble.client.ClientHelperImpl.mergeGroupMetadata(C...
```
java.lang.IllegalArgumentException
at org.briarproject.bramble.db.DatabaseComponentImpl.mergeGroupMetadata(DatabaseComponentImpl.java:756)
at org.briarproject.bramble.client.ClientHelperImpl.mergeGroupMetadata(ClientHelperImpl.java:217)
at org.briarproject.briar.autodelete.AutoDeleteManagerImpl.getAutoDeleteTimer(AutoDeleteManagerImpl.java:109)
at org.briarproject.briar.android.privategroup.creation.CreateGroupControllerImpl.createInvitationContexts(CreateGroupControllerImpl.java:174)
at org.briarproject.briar.android.privategroup.creation.CreateGroupControllerImpl.lambda$null$4(CreateGroupControllerImpl.java:155)
at org.briarproject.briar.android.privategroup.creation.CreateGroupControllerImpl.lambda$null$4$CreateGroupControllerImpl(CreateGroupControllerImpl.java)
at org.briarproject.briar.android.privategroup.creation.-$$Lambda$CreateGroupControllerImpl$UuIyBT5BPK-Ol5OSyYuTSxVHrEA.run(lambda)
at org.briarproject.bramble.db.DatabaseComponentImpl.transaction(DatabaseComponentImpl.java:198)
at org.briarproject.briar.android.privategroup.creation.CreateGroupControllerImpl.lambda$sendInvitation$5(CreateGroupControllerImpl.java:151)
```Self-destructing messagesIvanaIvana2021-01-31https://code.briarproject.org/briar/briar/-/issues/602Exponential backoff for RSS feeds2021-04-16T13:21:41ZakwizgranExponential backoff for RSS feedsWe fetch all RSS feeds at the same fixed interval. Some feeds update much more frequently than others, so we should adjust the interval of each feed to match its update interval. This can be done by doubling the interval whenever a fetch...We fetch all RSS feeds at the same fixed interval. Some feeds update much more frequently than others, so we should adjust the interval of each feed to match its update interval. This can be done by doubling the interval whenever a fetch succeeds without finding any new posts, and halving the interval whenever new posts are found. The intervals should be stored persistently.
Related to #44, #45.https://code.briarproject.org/briar/briar/-/issues/1998Make sharing local IP and Bluetooth address optional2021-04-16T16:55:53ZsysterMake sharing local IP and Bluetooth address optionalIf you make an introduction/discovery of a new contact, you'll each share Bluetooth address and local IP with each other. (See also: https://chat.briarproject.org/briar/pl/ygqns71cjiym8kjzfc4jyfywgw)
While this is needed to communicate ...If you make an introduction/discovery of a new contact, you'll each share Bluetooth address and local IP with each other. (See also: https://chat.briarproject.org/briar/pl/ygqns71cjiym8kjzfc4jyfywgw)
While this is needed to communicate offline, there are use cases that don't need it. OptOut/In to share such info during contact discovery could make sure to only share that data if it seem reasonable.https://code.briarproject.org/briar/briar/-/issues/1978SecurityException from Samsung clipboard manager2021-04-16T17:25:18ZakwizgranSecurityException from Samsung clipboard manager* Android version: 10
* Phone model: Samsung SM-A415F (a41ser)
* Briar version: 1.2.16 (8a534b4)
Stacktrace:
```
No access to content://com.sec.android.semclipboardprovider/images: neither user 15010232 nor current process has android.p...* Android version: 10
* Phone model: Samsung SM-A415F (a41ser)
* Briar version: 1.2.16 (8a534b4)
Stacktrace:
```
No access to content://com.sec.android.semclipboardprovider/images: neither user 15010232 nor current process has android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS
java.lang.SecurityException: No access to content://com.sec.android.semclipboardprovider/images: neither user 15010232 nor current process has android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS
at android.os.Parcel.createException(Parcel.java:2088)
at android.os.Parcel.readException(Parcel.java:2056)
at android.os.Parcel.readException(Parcel.java:2004)
at android.sec.clipboard.IClipboardService$Stub$Proxy.getClipData(IClipboardService.java:959)
at com.samsung.android.content.clipboard.SemClipboardManager.getLatestClip(SemClipboardManager.java:609)
at android.widget.EditText.updateClipboardFilter(EditText.java:316)
at android.widget.EditText.dispatchWindowFocusChanged(EditText.java:297)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1502)
at android.view.ViewRootImpl.handleWindowFocusChanged(ViewRootImpl.java:3487)
at android.view.ViewRootImpl.access$1300(ViewRootImpl.java:205)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:5393)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8167)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.content.ContentService.handleIncomingUser(ContentService.java:1355)
at com.android.server.content.ContentService.registerContentObserver(ContentService.java:355)
at android.content.ContentResolver.registerContentObserver(ContentResolver.java:2270)
at android.database.AbstractCursor.setNotificationUris(AbstractCursor.java:447)
at android.database.AbstractCursor.setNotificationUris(AbstractCursor.java:422)
```
Log:
```
03-18 10:33:23.037 I/BriarApplicationImpl: Created
03-18 10:33:23.073 I/BaseActivity: Creating SplashScreenActivity
03-18 10:33:23.095 I/BaseActivity: Starting SplashScreenActivity
03-18 10:33:23.096 I/BaseActivity: Resuming SplashScreenActivity
03-18 10:33:23.617 I/BaseActivity: Pausing SplashScreenActivity
03-18 10:33:23.644 I/BaseActivity: Creating NavDrawerActivity
03-18 10:33:23.690 I/BaseActivity: Starting NavDrawerActivity
03-18 10:33:23.691 I/BaseActivity: Resuming NavDrawerActivity
03-18 10:33:23.691 I/BriarActivity: Not signed in, launching StartupActivity
03-18 10:33:23.711 I/BaseActivity: Pausing NavDrawerActivity
03-18 10:33:23.729 I/BaseActivity: Creating StartupActivity
03-18 10:33:23.739 I/AccountManagerImpl: Found database key in primary file
03-18 10:33:23.741 I/BaseActivity: Starting StartupActivity
03-18 10:33:23.858 I/BaseActivity: Resuming StartupActivity
```
"INTERACT_ACROSS_USERS" suggests this may be a bug that happens in multi-user mode when using the Samsung clipboard manager.https://code.briarproject.org/briar/briar/-/issues/1921PluginViewModel should wait for DB to open before loading settings2021-04-21T11:29:10ZakwizgranPluginViewModel should wait for DB to open before loading settingsWhile testing something unrelated on the 1.2.12 release I noticed this exception in the log:
```
02-03 16:15:52.017 2925-2952/org.briarproject.briar.android.debug W/PluginViewModel: org.briarproject.bramble.api.db.DbClosedException
...While testing something unrelated on the 1.2.12 release I noticed this exception in the log:
```
02-03 16:15:52.017 2925-2952/org.briarproject.briar.android.debug W/PluginViewModel: org.briarproject.bramble.api.db.DbClosedException
org.briarproject.bramble.api.db.DbClosedException
at org.briarproject.bramble.db.H2Database.createConnection(H2Database.java:97)
at org.briarproject.bramble.db.JdbcDatabase.startTransaction(JdbcDatabase.java:554)
at org.briarproject.bramble.db.JdbcDatabase.startTransaction(JdbcDatabase.java:97)
at org.briarproject.bramble.db.DatabaseComponentImpl.startTransaction(DatabaseComponentImpl.java:161)
at org.briarproject.bramble.db.DatabaseComponentImpl.transactionWithResult(DatabaseComponentImpl.java:208)
at org.briarproject.bramble.settings.SettingsManagerImpl.getSettings(SettingsManagerImpl.java:26)
at org.briarproject.briar.android.navdrawer.PluginViewModel.isPluginEnabled(PluginViewModel.java:204)
at org.briarproject.briar.android.navdrawer.PluginViewModel.lambda$loadSettings$0$PluginViewModel(PluginViewModel.java:187)
at org.briarproject.briar.android.navdrawer.-$$Lambda$PluginViewModel$HPPDOnjY7Hk6kE7RpR2no4vHis8.run(lambda)
at org.briarproject.bramble.TimeLoggingExecutor.lambda$execute$0$TimeLoggingExecutor(TimeLoggingExecutor.java:36)
at org.briarproject.bramble.-$$Lambda$TimeLoggingExecutor$Bqrtbsq_8LcRPoTWBOef6xh7gJg.run(lambda)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
```
This happens at startup when NavDrawerActivity is created before signing in, as PluginViewModel tries to load the plugin settings.
This is currently harmless because a new NavDrawerActivity instance is created after signing in, with a new view model instance that successfully loads the settings. But that's just a lucky accident. To avoid depending on that, perhaps it would be better to refactor PluginViewModel to use DbViewModel#runOnDbThread()?Adapt to changes in the Android platformSebastianSebastian2021-04-30https://code.briarproject.org/briar/briar/-/issues/1141Remove navigation bar from Play Store screenshots2021-04-23T17:20:52ZakwizgranRemove navigation bar from Play Store screenshotsA user advised us to remove the navigation bar from our Play Store screenshots, as it's confusing when viewed on a mobile device. I did a quick check of three apps (Signal, Skype and Telegram). Signal and Skype use shots that show the wh...A user advised us to remove the navigation bar from our Play Store screenshots, as it's confusing when viewed on a mobile device. I did a quick check of three apps (Signal, Skype and Telegram). Signal and Skype use shots that show the whole phone with a caption describing the feature. Telegram uses screenshots with a status bar but no navigation bar.CleopatraCleopatrahttps://code.briarproject.org/briar/briar/-/issues/1102Make App Store Descriptions Localizable2021-04-23T17:22:04ZTorsten GroteMake App Store Descriptions LocalizableThe French language coordinator of Localization Lab asked us to make the app store descriptions localizable as well.
In Transportr, I just added them to the `strings.xml`, so they can be translated as part of the other strings.
There, ...The French language coordinator of Localization Lab asked us to make the app store descriptions localizable as well.
In Transportr, I just added them to the `strings.xml`, so they can be translated as part of the other strings.
There, I use [fastlane](https://docs.fastlane.tools/) to upload all descriptions with one command after extracting them from the `strings.xml` file [with a script](https://github.com/grote/Transportr/blob/master/fastlane/generate_metadata.py).
Using fastlane has the advantage that the localized descriptions will be picked up by F-Droid automatically as well. Also, it supports taking automated localized screenshots and uploading those as well.Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1989Blog post created snackbar re-appears after screen rotation2021-04-26T12:03:55ZTorsten GroteBlog post created snackbar re-appears after screen rotation* write a blog post
* wait until snackbar disappears
* rotate screen
* observe the snackbar coming back* write a blog post
* wait until snackbar disappears
* rotate screen
* observe the snackbar coming backAdapt to changes in the Android platformIvanaIvana2021-04-30https://code.briarproject.org/briar/briar/-/issues/1990Clicking re-blogged author opens blog of reblogging author2021-04-26T12:08:41ZTorsten GroteClicking re-blogged author opens blog of reblogging author* get a blog post from a contact
* re-blog this post
* click the author of the original post in the reblogged post
* observe how your own blog opens and not the one of the author of the original post* get a blog post from a contact
* re-blog this post
* click the author of the original post in the reblogged post
* observe how your own blog opens and not the one of the author of the original postAdapt to changes in the Android platformIvanaIvana2021-04-30https://code.briarproject.org/briar/briar/-/issues/1944Changing a contact name does not update the contact list immediately2021-04-26T12:09:06ZSebastianChanging a contact name does not update the contact list immediatelyTest instructions:
* Enter a conversation
* Open the menu
* Select 'change contact name'
* Enter a new alias and confirm
* Navigate back to the contact list
* Observe that the alias of the contact has already changed when arriving at the...Test instructions:
* Enter a conversation
* Open the menu
* Select 'change contact name'
* Enter a new alias and confirm
* Navigate back to the contact list
* Observe that the alias of the contact has already changed when arriving at the contact list
* Variant A: change the contact name to nothing (empty string into dialog)
* Variant B: after the contact alias was empty, change back to some non-empty aliasAdapt to changes in the Android platformIvanaIvana2021-04-30https://code.briarproject.org/briar/briar/-/issues/1914Create ViewModels immediately after injection2021-04-26T12:11:53ZakwizgranCreate ViewModels immediately after injectionVarious activities and fragments are creating their view models at different points in their lifecycles. To avoid subtle lifecycle bugs let's standardise this and create view models immediately after injection.
Subtask of #1823.
Test i...Various activities and fragments are creating their view models at different points in their lifecycles. To avoid subtle lifecycle bugs let's standardise this and create view models immediately after injection.
Subtask of #1823.
Test instructions:
This set of changes doesn't introduce new features, it only rearranges some code and is supposed not to break anything. It makes sense to test that the workflows and actions for which code has been touched. These include:
* Creating a new account on a fresh install
* Adding contacts via QR codes and make sure it works
* Add a contact remotely and before that finishes (by only completing the dialog on one of the devices first), check that the screen with the "pending contacts" works as expected
* Changing the alias for a contact
* Changing the account password
* Sending an image and opening that image full screen on both the sender and receiver device
* Opening the transports screen (by opening the navigation drawer on the left, tapping any of the connection modes at the bottom) and check that changing anything there persists (i.e. is still changed when navigating away and back to that screen)Adapt to changes in the Android platformSebastianSebastian2021-04-30https://code.briarproject.org/briar/briar/-/issues/1883Prepare for Resource IDs becoming non-final in Android Gradle Plugin version 5.02021-04-26T12:12:21ZTorsten GrotePrepare for Resource IDs becoming non-final in Android Gradle Plugin version 5.0Adapt to changes in the Android platformSebastianSebastian2021-04-30