briar issueshttps://code.briarproject.org/briar/briar/-/issues2024-02-13T07:33:58Zhttps://code.briarproject.org/briar/briar/-/issues/2458Detect whether phone is rooted2024-02-13T07:33:58ZakwizgranDetect whether phone is rootedOWASP guidelines recommend that Android apps should detect whether the phone is rooted. There are libraries that can check for this.OWASP guidelines recommend that Android apps should detect whether the phone is rooted. There are libraries that can check for this.https://code.briarproject.org/briar/briar/-/issues/2457Feature request: bulk share/accept forums/groups/introductions2024-02-10T12:16:00ZAminda SuomalainenFeature request: bulk share/accept forums/groups/introductionsI would like to introduce multiple contacts and share multiple forums from my old phone to new phone without having to go through so many menus per forum/contact which currently also includes long waiting times.
I was also having bad lu...I would like to introduce multiple contacts and share multiple forums from my old phone to new phone without having to go through so many menus per forum/contact which currently also includes long waiting times.
I was also having bad luck with the new phone requiring multiple factory resets which again require the initial Briar setup again and thus I have decreased my use of it a lot.
Related issues: https://code.briarproject.org/briar/briar-desktop/-/issues/521 & https://code.briarproject.org/briar/briar-desktop/-/issues/522https://code.briarproject.org/briar/briar/-/issues/2456Wich ports does the LanTcpPlugin use?2024-02-01T10:45:41ZJack oggWich ports does the LanTcpPlugin use?We are working on a Project to send Briar Messages through a LoRa Network and we used the `LanTcpPlugin` as a reference for our own LoRa Plugin How does Briar know wich port it should use to send a message via WiFi? We have two devices (...We are working on a Project to send Briar Messages through a LoRa Network and we used the `LanTcpPlugin` as a reference for our own LoRa Plugin How does Briar know wich port it should use to send a message via WiFi? We have two devices (Honor 6X). We figured out that one has `53099` as preferred port, the other has `55244` (in `org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java`). But how do they agree on these ports?https://code.briarproject.org/briar/briar/-/issues/2455Use theme colours for Android navigation bar2023-12-12T16:12:12ZakwizgranUse theme colours for Android navigation barA user asked for Briar's theme colours to be applied to the system navigation bar, and specifically for the bar to be light when using the light theme.A user asked for Briar's theme colours to be applied to the system navigation bar, and specifically for the bar to be light when using the light theme.https://code.briarproject.org/briar/briar/-/issues/2454Honor 70 Lite is seen as offline by contacts shortly after screen turns off2023-11-08T18:00:23ZakwizgranHonor 70 Lite is seen as offline by contacts shortly after screen turns offWhen the Honor 70 Lite is connected to a contact via Tor or wifi, the contact sees the Honor going offline a short time after the Honor's screen turns off. Sometimes the connection is lost and then quickly restored, only to be lost again...When the Honor 70 Lite is connected to a contact via Tor or wifi, the contact sees the Honor going offline a short time after the Honor's screen turns off. Sometimes the connection is lost and then quickly restored, only to be lost again.
The connection is quickly restored when the Honor's screen is turned on again.
This is probably some new power management hijinks from Huawei/Honor.https://code.briarproject.org/briar/briar/-/issues/2453Implement forums API endpoint for briar-headless2024-03-18T14:32:57Zre tiolusImplement forums API endpoint for briar-headlessThe API endpoint for forums is not fully implemented, it is possible to list forums but not to accept an invitation, this should be implemented.The API endpoint for forums is not fully implemented, it is possible to list forums but not to accept an invitation, this should be implemented.https://code.briarproject.org/briar/briar/-/issues/2452Suggest editing documenation to reflect that Briar portions can work over Eth...2023-11-02T16:22:54ZBrad KaralSuggest editing documenation to reflect that Briar portions can work over Ethernet LAN (other layer 1/2 media) and not just WiFiWhen reading the documentation, I, and others I spoke with, found the terminology about underlying network infrastructure that could be used a bit inconsistent.
Most of the docs list "WiFi", but the mailbox app page or some other page s...When reading the documentation, I, and others I spoke with, found the terminology about underlying network infrastructure that could be used a bit inconsistent.
Most of the docs list "WiFi", but the mailbox app page or some other page says "WiFi direct", which is not the same thing. That makes it sound like it only works with Ad Hoc WiFi connections. Another documents says "LAN", which of course might also mean Ethernet and other wired/wireless infrastructure, and not just WiFi.
I had to guess, and then test, to figure out I could my mailbox on an Ethernet connected device and my Briar app on my smartphone (LTE/WiFi).
I was very glad that it worked, but I'd like to suggest that the docs be changed to make them more clear/consistent around this subject.https://code.briarproject.org/briar/briar/-/issues/2451Automatically delete old RSS posts2023-10-18T17:03:39ZakwizgranAutomatically delete old RSS postsA user suggested that old RSS posts should be deleted automatically to improve performance. Potentially this could be applied to all blogs (it's more complex for forums and groups due to threading).A user suggested that old RSS posts should be deleted automatically to improve performance. Potentially this could be applied to all blogs (it's more complex for forums and groups due to threading).https://code.briarproject.org/briar/briar/-/issues/2450Add fallback mailbox pairing option to Briar2023-10-06T14:23:30ZLaurens NikolaisenAdd fallback mailbox pairing option to BriarIf pairing with the mailbox app using a QR Code does not work on the Android Briar App, there is no way to pair the App with the mailbox. Please do add an option to paste the pairing link instead.
Like seen in #2449 this could be the ca...If pairing with the mailbox app using a QR Code does not work on the Android Briar App, there is no way to pair the App with the mailbox. Please do add an option to paste the pairing link instead.
Like seen in #2449 this could be the case sometimes.
Thankshttps://code.briarproject.org/briar/briar/-/issues/2449InvalidQrCode - Briar fails to pair with Mailbox2023-10-06T16:19:42ZLaurens NikolaisenInvalidQrCode - Briar fails to pair with MailboxWhen trying to pair Briar with a working Mailbox-Server hosted on a Linux Server, it fails with the following error:
`InvalidQrCode`
The Mailbox works with the Linux Desktop client without any issues. I did test on a Pixel 5 as well as ...When trying to pair Briar with a working Mailbox-Server hosted on a Linux Server, it fails with the following error:
`InvalidQrCode`
The Mailbox works with the Linux Desktop client without any issues. I did test on a Pixel 5 as well as a Pixel 4a running CalyxOS. Using older versions of the App did not work as well for me.
Relevant logs:
```
0-05 23:26:56.750 I/TorWrapper: V3 descriptor uploaded for f24[scrubbed]
10-05 23:26:57.735 I/CameraView: Setting preview consumer
10-05 23:26:57.736 I/CameraView: Opening camera
10-05 23:26:57.740 I/CameraView: Using back-facing camera
10-05 23:26:57.769 I/CameraView: Screen rotation 0 degrees, camera orientation 90 degrees
10-05 23:26:57.775 I/CameraView: Focus modes: [infinity, auto, macro, continuous-video, continuous-picture]
10-05 23:26:57.776 I/CameraView: Video stabilisation enabled: true
10-05 23:26:57.776 I/CameraView: Scene mode: null
10-05 23:26:57.776 I/CameraView: Focus mode: continuous-picture
10-05 23:26:57.776 I/CameraView: Flash mode: off
10-05 23:26:57.776 I/CameraView: Preview size: 1920x1080
10-05 23:26:57.783 I/CameraView: Surface created
10-05 23:26:57.783 I/CameraView: Surface changed: 1080x1984
10-05 23:26:57.784 I/CameraView: Size 2560x1280, stretch 1.0887097, zoom 6.5536, score 0.14015481
10-05 23:26:57.784 I/CameraView: Size 2048x1536, stretch 1.3777777, zoom 6.291456, score 0.11536383
10-05 23:26:57.784 I/CameraView: Size 1920x1440, stretch 1.3777777, zoom 5.5296, score 0.1312584
10-05 23:26:57.784 I/CameraView: Size 1920x1080, stretch 1.0333333, zoom 4.1472, score 0.23334827
10-05 23:26:57.784 I/CameraView: Size 1920x960, stretch 1.0887097, zoom 3.6864, score 0.24916407
10-05 23:26:57.784 I/CameraView: Size 1600x1200, stretch 1.3777777, zoom 3.84, score 0.18901211
10-05 23:26:57.784 I/CameraView: Size 1440x1080, stretch 1.3777777, zoom 3.1104, score 0.2333483
10-05 23:26:57.784 I/CameraView: Size 1280x960, stretch 1.3777777, zoom 2.4576, score 0.29533142
10-05 23:26:57.784 I/CameraView: Size 1280x720, stretch 1.0333333, zoom 1.8432, score 0.5250336
10-05 23:26:57.784 I/CameraView: Size 1024x768, stretch 1.3777777, zoom 1.572864, score 0.46145532
10-05 23:26:57.784 I/CameraView: Size 800x600, stretch 1.3777777, zoom 1.0416666, score 0.69677424
10-05 23:26:57.784 I/CameraView: Size 720x480, stretch 1.2246914, zoom 1.4467592, score 0.5643871
10-05 23:26:57.784 I/CameraView: Size 640x480, stretch 1.3777777, zoom 1.6276041, score 0.44593552
10-05 23:26:57.784 I/CameraView: Size 640x360, stretch 1.0333333, zoom 2.1701388, score 0.44593552
10-05 23:26:57.784 I/CameraView: Size 352x288, stretch 1.5030303, zoom 4.9321337, score 0.13489549
10-05 23:26:57.784 I/CameraView: Size 320x240, stretch 1.3777777, zoom 6.5104165, score 0.11148388
10-05 23:26:57.784 I/CameraView: Size 176x144, stretch 1.5030303, zoom 19.728535, score 0.033723872
10-05 23:26:57.784 I/CameraView: Best size 800x600
10-05 23:26:57.785 I/CameraView: Video stabilisation enabled: true
10-05 23:26:57.785 I/CameraView: Scene mode: null
10-05 23:26:57.785 I/CameraView: Focus mode: continuous-picture
10-05 23:26:57.785 I/CameraView: Flash mode: off
10-05 23:26:57.785 I/CameraView: Preview size: 800x600
10-05 23:26:57.785 I/CameraView: Starting preview
10-05 23:27:02.136 I/TorWrapper: V3 descriptor uploaded for f24[scrubbed]
10-05 23:27:03.534 I/MailboxViewModel: Got result from decoder
10-05 23:27:03.540 I/MailboxViewModel: New pairing state: QrCodeReceived
10-05 23:27:03.542 I/MailboxViewModel: New pairing state: InvalidQrCode
10-05 23:27:03.549 I/CameraView: Stopping preview
10-05 23:27:03.565 I/CameraView: Releasing camera
10-05 23:27:03.854 I/CameraView: Surface destroyed
10-05 23:27:06.620 I/BaseActivity: Pausing MailboxActivity
```
Additional Logs:
```
# Timestamp
ReportTime: 2023-10-05 23:27:10.844
# Build Information
BuildTimestamp: 2023-08-23 09:45:39.000
BuildType: release
Debug: false
Flavor: official
GitHash: b68d24d
# Device Information
AndroidApi: 33
AndroidVersion: 13
AppStandbyBucket: 5
Brand: google
Model: Pixel 5
Product: redfin
android.hardware.audio.low_latency: true
android.hardware.audio.output: true
android.hardware.audio.pro: true
android.hardware.bluetooth: true
android.hardware.bluetooth_le: true
android.hardware.camera: true
android.hardware.camera.any: true
android.hardware.camera.autofocus: true
android.hardware.camera.capability.manual_post_processing: true
android.hardware.camera.capability.manual_sensor: true
android.hardware.camera.capability.raw: true
android.hardware.camera.concurrent: true
android.hardware.camera.flash: true
android.hardware.camera.front: true
android.hardware.camera.level.full: true
android.hardware.context_hub: true
android.hardware.device_unique_attestation: true
android.hardware.faketouch: true
android.hardware.fingerprint: true
android.hardware.identity_credential: true
android.hardware.location: true
android.hardware.location.gps: true
android.hardware.location.network: true
android.hardware.microphone: true
android.hardware.nfc: true
android.hardware.nfc.any: true
android.hardware.nfc.ese: true
android.hardware.nfc.hce: true
android.hardware.nfc.hcef: true
android.hardware.nfc.uicc: true
android.hardware.opengles.aep: true
android.hardware.ram.normal: true
android.hardware.reboot_escrow: true
android.hardware.screen.landscape: true
android.hardware.screen.portrait: true
android.hardware.se.omapi.ese: true
android.hardware.se.omapi.uicc: true
android.hardware.security.model.compatible: true
android.hardware.sensor.accelerometer: true
android.hardware.sensor.barometer: true
android.hardware.sensor.compass: true
android.hardware.sensor.gyroscope: true
android.hardware.sensor.hifi_sensors: true
android.hardware.sensor.light: true
android.hardware.sensor.proximity: true
android.hardware.sensor.stepcounter: true
android.hardware.sensor.stepdetector: true
android.hardware.strongbox_keystore: true
android.hardware.telephony: true
android.hardware.telephony.calling: true
android.hardware.telephony.carrierlock: true
android.hardware.telephony.cdma: true
android.hardware.telephony.data: true
android.hardware.telephony.euicc: true
android.hardware.telephony.gsm: true
android.hardware.telephony.ims: true
android.hardware.telephony.messaging: true
android.hardware.telephony.radio.access: true
android.hardware.telephony.subscription: true
android.hardware.touchscreen: true
android.hardware.touchscreen.multitouch: true
android.hardware.touchscreen.multitouch.distinct: true
android.hardware.touchscreen.multitouch.jazzhand: true
android.hardware.usb.accessory: true
android.hardware.usb.host: true
android.hardware.vulkan.compute: true
android.hardware.vulkan.level: true
android.hardware.vulkan.version: true
android.hardware.wifi: true
android.hardware.wifi.aware: true
android.hardware.wifi.direct: true
android.hardware.wifi.passpoint: true
android.hardware.wifi.rtt: true
android.software.activities_on_secondary_displays: true
android.software.app_enumeration: true
android.software.app_widgets: true
android.software.autofill: true
android.software.backup: true
android.software.cant_save_state: true
android.software.companion_device_setup: true
android.software.controls: true
android.software.cts: true
android.software.device_admin: true
android.software.device_id_attestation: true
android.software.file_based_encryption: true
android.software.home_screen: true
android.software.incremental_delivery: true
android.software.input_methods: true
android.software.ipsec_tunnels: true
android.software.live_wallpaper: true
android.software.managed_users: true
android.software.midi: true
android.software.opengles.deqp.level: true
android.software.picture_in_picture: true
android.software.print: true
android.software.secure_lock_screen: true
android.software.securely_removes_users: true
android.software.sip: true
android.software.sip.voip: true
android.software.telecom: true
android.software.verified_boot: true
android.software.voice_recognizers: true
android.software.vulkan.deqp.level: true
android.software.webview: true
android.software.window_magnification: true
com.google.android.feature.GOOGLE_EXPERIENCE: true
com.google.android.feature.PIXEL_2017_EXPERIENCE: true
com.google.android.feature.PIXEL_2018_EXPERIENCE: true
com.google.android.feature.PIXEL_2019_EXPERIENCE: true
com.google.android.feature.PIXEL_2019_MIDYEAR_EXPERIENCE: true
com.google.android.feature.PIXEL_2020_EXPERIENCE: true
com.google.android.feature.PIXEL_2020_MIDYEAR_EXPERIENCE: true
com.google.android.feature.PIXEL_EXPERIENCE: true
com.nxp.mifare: true
glEsVersion: 3.2
org.lineageos.globalactions: true
org.lineageos.hardware: true
org.lineageos.health: true
org.lineageos.livedisplay: true
org.lineageos.settings: true
org.lineageos.trust: true
```https://code.briarproject.org/briar/briar/-/issues/2448Briar prompts for Bluetooth permission when toggling Tor connectivity2023-09-28T16:06:06ZakwizgranBriar prompts for Bluetooth permission when toggling Tor connectivity* Android version: 12
* Phone model: Samsung Galaxy A21s
* Briar version: 1.5.7 debug (6ae601e39588b47f157799c2e5a813786b56c3d8)
Steps to reproduce:
* Start from a fresh install (no Bluetooth permissions granted)
* Tap globe icon in nav...* Android version: 12
* Phone model: Samsung Galaxy A21s
* Briar version: 1.5.7 debug (6ae601e39588b47f157799c2e5a813786b56c3d8)
Steps to reproduce:
* Start from a fresh install (no Bluetooth permissions granted)
* Tap globe icon in nav menu to open connections screen
* Turn Tor connections off
* Turn Tor connections on again
Also happens when toggling wifi connections.https://code.briarproject.org/briar/briar/-/issues/2447AssertionError when choosing images to send2024-03-18T17:19:45ZakwizgranAssertionError when choosing images to sendPossibly the same issue as #2057, but the stacktrace is different.
* Android version: 13
* Phone model: Redmi 21091116AI (evergo_in)
* Briar version: 1.5.4 (7d76171)
Edited log:
```
08-29 15:32:16.062 I/BaseActivity: Pausing Conversati...Possibly the same issue as #2057, but the stacktrace is different.
* Android version: 13
* Phone model: Redmi 21091116AI (evergo_in)
* Briar version: 1.5.4 (7d76171)
Edited log:
```
08-29 15:32:16.062 I/BaseActivity: Pausing ConversationActivity
08-29 15:32:16.076 I/BaseActivity: Creating ImageActivity
08-29 15:32:16.094 I/BaseActivity: Starting ImageActivity
08-29 15:32:16.097 I/BaseActivity: Resuming ImageActivity
08-29 15:32:16.507 I/BaseActivity: Stopping ConversationActivity
08-29 15:32:18.346 I/BaseActivity: Starting ConversationActivity
08-29 15:32:18.793 I/BaseActivity: Pausing ImageActivity
08-29 15:32:18.819 I/BaseActivity: Resuming ConversationActivity
08-29 15:32:18.821 I/BaseActivity: Stopping ImageActivity
08-29 15:32:18.822 I/BaseActivity: Destroying ImageActivity
08-29 15:32:19.415 I/BaseActivity: Pausing ConversationActivity
08-29 15:32:19.902 I/BaseActivity: Stopping ConversationActivity
08-29 15:32:20.246 I/BaseActivity: Starting ConversationActivity
08-29 15:32:20.257 I/BaseActivity: Resuming ConversationActivity
08-29 15:32:21.080 I/BaseActivity: Pausing ConversationActivity
08-29 15:32:24.972 I/AutoDeleteManagerImpl: Mirroring auto-delete timer 604800000
08-29 15:32:24.995 I/ConversationActivity: Message received, adding
08-29 15:32:24.998 I/ContactsViewModel: Conversation message tracked, updating item
```
Stacktrace:
```
java.lang.AssertionError
at org.briarproject.briar.android.view.TextAttachmentController.onImageReceived(TextAttachmentController.java:159)
at org.briarproject.briar.android.conversation.ConversationActivity.onImagesChosen(ConversationActivity.java:788)
at org.briarproject.briar.android.conversation.ConversationActivity.$r8$lambda$Yw3fl1gK9EIeGMTHPyKDfNfoOkI(Unknown Source:0)
at org.briarproject.briar.android.conversation.ConversationActivity$$ExternalSyntheticLambda2.onActivityResult(Unknown Source:4)
at androidx.activity.result.ActivityResultRegistry.doDispatch(ActivityResultRegistry.java:418)
at androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.java:375)
at androidx.activity.ComponentActivity.onActivityResult(ComponentActivity.java:777)
at androidx.fragment.app.FragmentActivity.onActivityResult(FragmentActivity.java:152)
at org.briarproject.briar.android.activity.BriarActivity.onActivityResult(BriarActivity.java:75)
at org.briarproject.briar.android.conversation.ConversationActivity.onActivityResult(ConversationActivity.java:320)
at android.app.Activity.dispatchActivityResult(Activity.java:8923)
at android.app.ActivityThread.deliverResults(ActivityThread.java:5592)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5638)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:67)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2437)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:211)
at android.os.Looper.loop(Looper.java:300)
at android.app.ActivityThread.main(ActivityThread.java:8294)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1028)
```Android 1.4https://code.briarproject.org/briar/briar/-/issues/2446IllegalStateException in HotspotActivity2024-03-28T13:34:33ZakwizgranIllegalStateException in HotspotActivity* Android version: 13
* Phone model: OnePlus CPH2415 (CPH2415EEA)
* Briar version: 1.5.6 (b68d24d)
Stacktrace:
```
java.lang.IllegalStateException: LifecycleOwner org.briarproject.briar.android.hotspot.HotspotActivity@52aa2cb is attempt...* Android version: 13
* Phone model: OnePlus CPH2415 (CPH2415EEA)
* Briar version: 1.5.6 (b68d24d)
Stacktrace:
```
java.lang.IllegalStateException: LifecycleOwner org.briarproject.briar.android.hotspot.HotspotActivity@52aa2cb is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.
at androidx.activity.result.ActivityResultRegistry.register(ActivityResultRegistry.java:123)
at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:817)
at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:826)
at org.briarproject.briar.android.hotspot.AbstractConditionManager.init(AbstractConditionManager.java:50)
at org.briarproject.briar.android.hotspot.HotspotIntroFragment.onCreateView(HotspotIntroFragment.java:79)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3104)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:524)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1890)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1817)
at androidx.fragment.app.FragmentManager.popBackStackImmediate(FragmentManager.java:871)
at androidx.fragment.app.FragmentManager.popBackStackImmediate(FragmentManager.java:778)
at androidx.fragment.app.FragmentManager.handleOnBackPressed(FragmentManager.java:699)
at androidx.fragment.app.FragmentManager$1.handleOnBackPressed(FragmentManager.java:429)
at androidx.activity.OnBackPressedDispatcher.onBackPressed(OnBackPressedDispatcher.java:192)
at androidx.activity.ComponentActivity.onBackPressed(ComponentActivity.java:657)
at android.app.Activity.onKeyUp(Activity.java:3926)
at android.view.KeyEvent.dispatch(KeyEvent.java:2933)
at android.app.Activity.dispatchKeyEvent(Activity.java:4304)
at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:124)
at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)
at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:142)
at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:601)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:60)
at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3106)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:442)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6870)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6731)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6186)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6248)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6209)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6379)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6217)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6436)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6190)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6248)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6209)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6217)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6190)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6248)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6209)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6412)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6592)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3778)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:3291)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:3282)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3755)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:349)
at android.os.Looper.loopOnce(Looper.java:186)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8427)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
```
Looks like the crash happens when the back button is pressed, popping a fragment off the back stack and causing HotspotIntroFragment to be recreated.Android 1.4https://code.briarproject.org/briar/briar/-/issues/2445ProtocolStateException when trying to share a forum2023-09-19T10:47:04ZakwizgranProtocolStateException when trying to share a forumA user reported that every time they try to share a forum, Briar fails to load the list of contacts to share it with.
* Android version: 13
* Phone model: Honor NTH-NX9
* Briar version: 1.5.7 (6ae601e)
Edited log:
```
09-14 09:48:26.87...A user reported that every time they try to share a forum, Briar fails to load the list of contacts to share it with.
* Android version: 13
* Phone model: Honor NTH-NX9
* Briar version: 1.5.7 (6ae601e)
Edited log:
```
09-14 09:48:26.873 I/BaseActivity: Pausing ForumActivity
09-14 09:48:26.884 I/BaseActivity: Creating ShareForumActivity
09-14 09:48:26.895 I/BaseActivity: Starting ShareForumActivity
09-14 09:48:26.895 I/BaseActivity: Resuming ShareForumActivity
09-14 09:48:27.331 I/BaseActivity: Stopping ForumActivity
09-14 09:48:30.376 W/ContactSelectorControllerImpl: org.briarproject.briar.api.client.ProtocolStateException
org.briarproject.briar.api.client.ProtocolStateException
at org.briarproject.briar.sharing.SharingManagerImpl.getSharingStatus(SharingManagerImpl.java:510)
at org.briarproject.briar.sharing.SharingManagerImpl.getSharingStatus(SharingManagerImpl.java:480)
at org.briarproject.briar.android.sharing.ShareForumControllerImpl.getSharingStatus(ShareForumControllerImpl.java:53)
at org.briarproject.briar.android.contactselection.ContactSelectorControllerImpl.lambda$loadContacts$0(ContactSelectorControllerImpl.java:58)
at org.briarproject.briar.android.contactselection.ContactSelectorControllerImpl.$r8$lambda$3abQlDMLIGMlOAkNr01IGOPM62Q(Unknown Source:0)
at org.briarproject.briar.android.contactselection.ContactSelectorControllerImpl$$ExternalSyntheticLambda0.run(Unknown Source:8)
at org.briarproject.briar.android.controller.DbControllerImpl.lambda$runOnDbThread$0(DbControllerImpl.java:36)
at org.briarproject.briar.android.controller.DbControllerImpl.$r8$lambda$JAD5-f_MagcCZjTRNXknhcwg-tw(Unknown Source:0)
at org.briarproject.briar.android.controller.DbControllerImpl$$ExternalSyntheticLambda0.run(Unknown Source:4)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
09-14 09:48:30.381 I/BaseActivity: Pausing ShareForumActivity
09-14 09:48:30.390 I/BaseActivity: Starting ForumActivity
09-14 09:48:30.390 I/BaseActivity: Resuming ForumActivity
09-14 09:48:30.831 I/BaseActivity: Stopping ShareForumActivity
09-14 09:48:30.831 I/BaseActivity: Destroying ShareForumActivity
```
The exception is thrown because the [state machine](https://code.briarproject.org/briar/briar-spec/blob/master/clients/Forum-Sharing-Client.md#state-machine) is in the `LOCAL_LEFT` or `REMOTE_HANGING` state.
We had a [discussion](https://code.briarproject.org/briar/briar/-/merge_requests/1758#note_74062) about how to handle these states and I suggested throwing this exception on the assumption that the states should only be seen in the rare case where the user has left the forum more-or-less simultaneously with trying to share it. Clearly that assumption was wrong, because this user reports that they can reproduce the bug reliably. So the state machine has ended up in one of those states despite the user still belonging to the forum.
My guess would be that the user left and then rejoined the forum.https://code.briarproject.org/briar/briar/-/issues/2444ActivityNotFoundException for CHOOSER intent when adding contact remotely2023-09-06T15:36:50ZakwizgranActivityNotFoundException for CHOOSER intent when adding contact remotely* Android version: 14
* Phone model: Google Pixel 6
* Briar version: 1.5.4 (7d76171)
Stacktrace:
```
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CHOOSER (has extras) }
...* Android version: 14
* Phone model: Google Pixel 6
* Briar version: 1.5.4 (7d76171)
Stacktrace:
```
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CHOOSER (has extras) }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2239)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1878)
at android.app.Activity.startActivityForResult(Activity.java:5589)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:712)
at android.app.Activity.startActivityForResult(Activity.java:5547)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:693)
at android.app.Activity.startActivity(Activity.java:6045)
at android.app.Activity.startActivity(Activity.java:6012)
at androidx.core.app.ShareCompat$IntentBuilder.startChooser(ShareCompat.java:436)
at org.briarproject.briar.android.contact.add.remote.LinkExchangeFragment.lambda$onHandshakeLinkLoaded$2(LinkExchangeFragment.java:123)
at org.briarproject.briar.android.contact.add.remote.LinkExchangeFragment.$r8$lambda$rc2OESX5RIoUPUdisIlqrX1uomc(Unknown Source:0)
at org.briarproject.briar.android.contact.add.remote.LinkExchangeFragment$$ExternalSyntheticLambda3.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7659)
at android.view.View.performClickInternal(View.java:7636)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:30155)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8176)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
```
Puzzling, but easy to catch.Android 1.4https://code.briarproject.org/briar/briar/-/issues/2443OOM error when polling large number of contacts2023-08-24T15:00:10ZakwizgranOOM error when polling large number of contacts* Android version: 13
* Phone model: Realme RMX3516 (RMX3516EEA)
* Briar version: 1.5.4 (7d76171)
Stacktrace:
```
java.lang.OutOfMemoryError: Failed to allocate a 48 byte allocation with 252528 free bytes and 246KB until OOM, target foo...* Android version: 13
* Phone model: Realme RMX3516 (RMX3516EEA)
* Briar version: 1.5.4 (7d76171)
Stacktrace:
```
java.lang.OutOfMemoryError: Failed to allocate a 48 byte allocation with 252528 free bytes and 246KB until OOM, target footprint 201326592, growth limit 201326592; giving up on allocation because <1% of heap free after GC.
at java.util.regex.Pattern.matcher(Pattern.java:1040)
at org.briarproject.bramble.plugin.tor.TorPlugin.createConnection(TorPlugin.java:361)
at org.briarproject.bramble.plugin.tor.TorPlugin.lambda$connect$2(TorPlugin.java:349)
at org.briarproject.bramble.plugin.tor.TorPlugin.$r8$lambda$dsAekyWijvXWn3loJi16FAklboE(Unknown Source:0)
at org.briarproject.bramble.plugin.tor.TorPlugin$$ExternalSyntheticLambda4.run(Unknown Source:6)
at org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManagerImpl.lambda$executeWakefully$0(AndroidWakeLockManagerImpl.java:71)
at org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManagerImpl.$r8$lambda$YrcWd5iwE_LXXUj-LlmRNhzP9-U(Unknown Source:0)
at org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManagerImpl$$ExternalSyntheticLambda0.run(Unknown Source:4)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
```
* NativeHeapAllocated: 467,674,320
* NativeHeapFree: 57,465,872
* NativeHeapTotal: 539,607,040
* SystemMemoryFree: 1,281,261,568
* SystemMemoryLow: false
* SystemMemoryThreshold: 339,738,624
* SystemMemoryTotal: 3,834,589,184
* VirtualMachineMemoryFree: 4,663,224
* VirtualMachineMemoryMaximum: 201,326,592
* VirtualMachineMemoryTotal: 201,326,592
The log shows that the crash happened about 9 seconds after polling the Tor plugin. Connection attempts from the previous two polls were still in progress, as shown by the messages logged when those attempts timed out. The previous two polls appear to have happened in quick succession, as two failures for the same address were often logged back-to-back. (This can happen when the plugin's enabled, as the first poll happens immediately and the second is scheduled after a randomised interval.)
The log shows that the user has at least 54 contacts. I'd speculate that this may cause polling to take longer than the polling interval, causing pending connection attempts to pile up.
All of the connection failures except the last are logged as "java.io.IOException: Connection failed: Host unreachable". The last connection failure is logged as "java.net.SocketTimeoutException: failed to connect to /127.0.0.1 (port 59050) from /127.0.0.1 (port 57012) after 5000ms", indicating that the connection to Tor's SOCKS port on localhost timed out. Perhaps the Tor process had become unresponsive, or perhaps the Java process was spending too much time in GC to service the connection.
The memory stats show 539 MB of native heap, which is a lot! Maybe there's a large backlog of socket connections, each with some native heap allocations, and each with an IoExecutor thread waiting on it that might have its own native heap allocations?
`VirtualMemoryFree` doesn't match the amount in the OOM error message, which is an issue we've seen before (https://code.briarproject.org/briar/briar/-/issues/1898#note_76643).
It's useful to know that the allocator gives up if it can't free more than 1% of the max heap space after GC.https://code.briarproject.org/briar/briar/-/issues/2442ArrayIndexOutOfBoundsException in Editor#onDraw()2023-08-24T15:00:04ZakwizgranArrayIndexOutOfBoundsException in Editor#onDraw()This looks like it's most likely a platform bug.
* Android version: 8.1.0
* Phone model: Samsung SM-A260F (a2coreltejx)
* Briar version: 1.5.4 (7d76171)
Stacktrace:
```
java.lang.ArrayIndexOutOfBoundsException: length=3; index=-1
...This looks like it's most likely a platform bug.
* Android version: 8.1.0
* Phone model: Samsung SM-A260F (a2coreltejx)
* Briar version: 1.5.4 (7d76171)
Stacktrace:
```
java.lang.ArrayIndexOutOfBoundsException: length=3; index=-1
at android.text.DynamicLayout.getBlockIndex(DynamicLayout.java:648)
at android.widget.Editor.drawHardwareAccelerated(Editor.java:1729)
at android.widget.Editor.onDraw(Editor.java:1698)
at android.widget.TextView.onDraw(TextView.java:6973)
at android.view.View.draw(View.java:19215)
at android.view.View.updateDisplayListIfDirty(View.java:18162)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4231)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4211)
at android.view.View.updateDisplayListIfDirty(View.java:18121)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:669)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:675)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:783)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:3050)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2864)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2417)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1429)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6823)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6543)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
```https://code.briarproject.org/briar/briar/-/issues/2441Feature request: Acoustic channel2023-11-16T17:29:50ZAlex TimofeevFeature request: Acoustic channel**Overview**
Along with BT, WiFi, Internet and file exchange channels, I propose implementing an acoustic channel, based on already existing FLOSS library.
**Pros of the feature**
- Landline and cell phone lines may remain intact duri...**Overview**
Along with BT, WiFi, Internet and file exchange channels, I propose implementing an acoustic channel, based on already existing FLOSS library.
**Pros of the feature**
- Landline and cell phone lines may remain intact during the internet outages, as they usually raise way less concern of censorship authorities. Acoustic channel can be employed for long distance messaging if there is a working phone nearby. _Note: while I didn't test this use case myself, I can predict no technical challenges here._
- Acoustic channel can be run over any kind of two-way radio. While BT and Wi-Fi have a range limit of hundred meters, cheap license-free VHF/UHF radios can make up to 10 km link, 27MHz CB radio up to 100km. HF ham radios, as well as Satcom/Meridian satellites, used by some anarchic hams, both provide a worldwide link. _Note: recently I tested the library suggested below over a UHF radio with a fellow ham and it works. We used simple mic-to-speaker coupling, the connection can be more stable if you make a special cable (our test will follow)_
- Acoustic channel can be used per se, as a super-close-range wireless channel, despite I can't imagine a probable use case. _Note: of course, I tested that way of operation for the library proposed and it works._
**Cons of the feature**
- Use of acoustic channel required the microphone active for data reception. Despite Briar being FLOSS, some users surely will have a privacy concern. _Solution:_ Make the acoustic channel to be optional, disabled by default, and showing a warning before the first activation. Only if user consent is obtained we will ask for mic access permission.
- Accidental transmission of a large file can congest the channel for a long time, but it must not be absolutely forbidden as the file may have life-critical value (e.g. ID papers of a war journalist). _Solution:_ by default we display a warning on the both sides, stating that transmitting that file via audio will be at least xx:xx long (algorithmic estimation for the best luck). Though, if both conversation sides insist on transmitting and both click their warnings, Briar will proceed. This will protect from accidental channel congestion, but as well obey operators' will.
**Backend technology**
There are a library and some impelementation examples at https://github.com/aicodix. All code there is licensed under 0BSD, making it perfectly legal to include into any FLOSS project.
The library acts as a software modem. It can transmit and receive any digital data using COFDM modulation of a sound carrier, and have buult-in error correction capabilities.
A notable implementation example is Android software named Rattlegram, avialable in the same repo and in Google Play. You can play around the technology without need to write code. My aforementioned tests of direct and radio-borne transmissions were performed using Rattlegram.
**Promises**
- I have a bit of Android development skills myself and can contribute to the implementation if approved.
- Feel free requesting me to conduct any other tests, I will be glad to help.https://code.briarproject.org/briar/briar/-/issues/2440Biometric login as an additional authentication method2023-07-31T16:12:24ZPatrick MaydellBiometric login as an additional authentication methodSometimes the briar app logs out and I have to enter the password again to unlock the database. Therefore it would be nice to have an additional authentication method like the biometric fingerprint to unlock briar's database by using And...Sometimes the briar app logs out and I have to enter the password again to unlock the database. Therefore it would be nice to have an additional authentication method like the biometric fingerprint to unlock briar's database by using Android's Biometric library.
https://developer.android.com/codelabs/biometric-login
I would like to try to commit this functionality to briar if you generally think this feature would be nice to have.https://code.briarproject.org/briar/briar/-/issues/2439Live Location Share with Duration2024-01-23T11:39:23ZVladislavLive Location Share with DurationWith this functionality, users will be able to share their real-time location with friends, family, or contacts in a secure and privacy-conscious manner.
Key Features:
1. Real-Time Location Sharing: Users should have the ability to ini...With this functionality, users will be able to share their real-time location with friends, family, or contacts in a secure and privacy-conscious manner.
Key Features:
1. Real-Time Location Sharing: Users should have the ability to initiate live location sharing, which enables their contacts to view their current location on a map for the duration of the sharing session.
2. Customizable Sharing Duration: The feature should allow users to set a specific duration for which they wish to share their live location. After the duration expires, the location sharing should automatically stop, ensuring users have complete control over their shared information.
3. Granular Control: Users should have the flexibility to choose whom they wish to share their live location with on a case-by-case basis, or to revoke location sharing at any time during an active session.
Benefits:
The addition of live location sharing with duration would offer several benefits to the Briar Messenger community:
1. Enhanced Safety: Users will have a practical tool for sharing their real-time location during critical situations, providing an extra layer of safety and reassurance.
2. Seamless Coordination: Friends and family can coordinate meet-ups more efficiently, as they'll be able to see each other's locations in real-time.
3. Increased User Engagement: The introduction of such a feature could attract new users to the platform and increase overall user engagement.
4. Comprehensive Application: By incorporating live location sharing, Briar Messenger can become a more comprehensive communication tool for both everyday use and emergency situations