briar issueshttps://code.briarproject.org/briar/briar/-/issues2019-04-25T09:31:44Zhttps://code.briarproject.org/briar/briar/-/issues/1504Nokia's power management app kills Briar2019-04-25T09:31:44ZakwizgranNokia's power management app kills BriarNokia phones running Android 8+ have a power management app with the package name com.evenwell.powersaving.g3 or com.evenwell.emm that kills all background apps 20 minutes after the screen turns off, prevents alarms from firing, and prev...Nokia phones running Android 8+ have a power management app with the package name com.evenwell.powersaving.g3 or com.evenwell.emm that kills all background apps 20 minutes after the screen turns off, prevents alarms from firing, and prevents background apps from starting foreground services. Doze whitelisting doesn't help.
https://code.briarproject.org/briar/briar/issues/992#note_33135
https://code.briarproject.org/briar/briar/issues/992#note_34764
https://dontkillmyapp.com/nokia
The only known workaround for users without ADB is to force close the power saving app. Presumably this needs to be done after every boot.
We can detect whether the device is affected by this issue by looking at the list of installed packages (and maybe the manufacturer and Android version), but we can't prevent the issue from happening. Perhaps we should show a warning that Briar won't work properly on this device?
Related to #992.akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/976Dark theme2019-04-25T09:18:03ZakwizgranDark themeA user asked for a dark theme.A user asked for a dark theme.Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1510Private message send button is disabled after rotating screen2019-04-23T14:46:30ZakwizgranPrivate message send button is disabled after rotating screenSteps to reproduce:
* Start writing a private message
* Rotate the screen to landscape - the keyboard closes
* Rotate the screen back to portrait - the keyboard is still closed
* Try to send the message - the send button has no effect
* ...Steps to reproduce:
* Start writing a private message
* Rotate the screen to landscape - the keyboard closes
* Rotate the screen back to portrait - the keyboard is still closed
* Try to send the message - the send button has no effect
* Delete and re-enter the text - the send button works again
Related to #843. @grote I'm guessing this may be fixed already on your 843-landscape-keyboard branch, as some relevant code has changed - could you please test?Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1509Introduction onboarding reappears after rotating screen2019-04-23T14:46:12ZakwizgranIntroduction onboarding reappears after rotating screenSteps to reproduce:
* Create a new account
* Add two test contacts
* Open one of the conversations
* The introduction onboarding is shown (as expected)
* Dismiss the onboarding by pressing the back button or tapping inside or outside the...Steps to reproduce:
* Create a new account
* Add two test contacts
* Open one of the conversations
* The introduction onboarding is shown (as expected)
* Dismiss the onboarding by pressing the back button or tapping inside or outside the circle (doesn't matter which)
* Rotate the screen
* The onboarding is shown again (bug)
* After leaving and re-entering the conversation, the onboarding isn't shown again (as expected) - this suggests it's an issue with the ViewModel
Tested on the Moto G 4G (Android 5.1).Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1492Race between sending and validating private message attachments2019-04-23T14:46:01ZakwizgranRace between sending and validating private message attachmentsWhen writing a private message, we preview the attachments and remove any attachments that can't be loaded (either because the content provider supplies a MIME type with no known extension, or because Glide can't load the preview, or, in...When writing a private message, we preview the attachments and remove any attachments that can't be loaded (either because the content provider supplies a MIME type with no known extension, or because Glide can't load the preview, or, in the case of a single attachment, because we can't determine the image size). If the send button is clicked before an invalid attachment has been removed from the list, the invalid attachment will be sent. At the moment this causes two problems:
* Inconsistent behaviour depending on how quickly the attachments load and the user clicks the send button
* False UI feedback (the "Could not attach image" toast is shown but the attachment is sent)
Once the backend for image attachments has been implemented (#1434), we may have additional problems:
* The adapter item created for the message may not match the attachments that were actually sent
* We may not be able to display our own messages if invalid attachments were sent
Subtask of #1438.Android 1.3Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1276Remove support for inactive contacts2019-04-23T14:45:32ZakwizgranRemove support for inactive contactsSince the introduction client was rewritten we no longer need the concept of inactive contacts. However we still need to be able to specify whether transport keys should initially be active or inactive when adding a contact.Since the introduction client was rewritten we no longer need the concept of inactive contacts. However we still need to be able to specify whether transport keys should initially be active or inactive when adding a contact.akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1536Find out whether intent extras or instance state bundles are persisted by the OS2019-04-22T13:30:11ZakwizgranFind out whether intent extras or instance state bundles are persisted by the OSSince roughly Android 5, the recent apps list has been persisted across reboots. Find out whether intent extras or instance state bundles for the activities in the recent apps list are persisted. If so, this might leak confidential infor...Since roughly Android 5, the recent apps list has been persisted across reboots. Find out whether intent extras or instance state bundles for the activities in the recent apps list are persisted. If so, this might leak confidential information to disk.Android 1.1https://code.briarproject.org/briar/briar/-/issues/1535Tryin to import SharedPreferences into AccountManagerImpl2019-04-19T14:54:16ZnicedeveloperTryin to import SharedPreferences into AccountManagerImplTryin to import SharedPreferences into AccountManagerImpl in package package org.briarproject.bramble.account;
SharedPreferences highlights RedTryin to import SharedPreferences into AccountManagerImpl in package package org.briarproject.bramble.account;
SharedPreferences highlights Redhttps://code.briarproject.org/briar/briar/-/issues/1534No Blog notifications2019-04-18T08:01:37ZGhost UserNo Blog notificationsI've been using briar for a bit as my primary RSS feed reader. It's worked very well, until a few weeks ago (can't pinpoint exactly when) when the blog stopped updating itself in the background or otherwise didn't notify me of new entrie...I've been using briar for a bit as my primary RSS feed reader. It's worked very well, until a few weeks ago (can't pinpoint exactly when) when the blog stopped updating itself in the background or otherwise didn't notify me of new entries like it did. I've checked my notification settings, and it is supposed to notify, and I've had the battery settings set to "Not Optimized" since installation.
What can I do to help diagnose this issue?Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1494Allow internet access without Tor2019-04-16T14:33:11ZLeighAllow internet access without TorI understand why you may want to have Tor as the default access, however there will be many people who do not want or need to use that level of anonymity.
Is it possible to disable Tor, and use standard internet access?
I believe that...I understand why you may want to have Tor as the default access, however there will be many people who do not want or need to use that level of anonymity.
Is it possible to disable Tor, and use standard internet access?
I believe that access to Tor is potentially being blocked at my work, however that is done. I would be happy to fallback to non-tor networks where necessary.
Otherwise - Thanks, has a lot of promise!https://code.briarproject.org/briar/briar/-/issues/960Contact Introduction confusions and redundancies2019-04-16T13:38:29ZErnir ErlingssonContact Introduction confusions and redundancies***Background***
This ticket lists all the issues observed during contact introduction during user testing and a robust internal test. Some of these might be "features" or already listed as issues in other tickets.
***Results***
...***Background***
This ticket lists all the issues observed during contact introduction during user testing and a robust internal test. Some of these might be "features" or already listed as issues in other tickets.
***Results***
1 Some testers were confused why nothing happened after accepting the introduction, confirming #923 .
2 It's possible for the same user to introduce the same two contacts as in a previous introduction even when the two contact's have not yet responded to the initial introduction. Multiple simultaneous introductions, with the same pair of contacts, were confusing for the introduction recipients.
3 If A has declined the introduction that information is not displayed for B until he/she has selected decline/accept introduction. I wonder if it would not be simplest just to display the rejection immediately before B answers ?
4 If two contact's are introduced to one-another that are already contacts, unbeknown to the introducer, there is no need to propagate rejections between the two contacts.
Ex. User's A and B are already connected. User C introduces A and B to one another, A decides to reject. B receives introduction from C but also the rejection from A, which caused confusion. In this case it would have been best to skip displaying the rejection entirely because it is completely irrelevant.https://code.briarproject.org/briar/briar/-/issues/1530images doesn't get sent even after changing 'hasSupport' to true2019-04-10T13:58:50Zaleximages doesn't get sent even after changing 'hasSupport' to trueWhen attempting to send an image, an overlay comes with
> "Images unavailable" "Your contact's Briar does not yet support image attachments. Once they upgrade you'll see a different icon."
Then, I changed the constant `FEATURE_FLAG_IM...When attempting to send an image, an overlay comes with
> "Images unavailable" "Your contact's Briar does not yet support image attachments. Once they upgrade you'll see a different icon."
Then, I changed the constant `FEATURE_FLAG_IMAGE_ATTACHMENTS` to `TRUE` in TestingConstants.java
With no luck, So I changed the following code -> (in android/conversation/conversationActivity.java - Line 267)
```
observeOnce(viewModel.hasImageSupport(), this, hasSupport -> {
if (hasSupport != null && hasSupport) {
// remove cast when removing FEATURE_FLAG_IMAGE_ATTACHMENTS
((TextAttachmentController) sendController)
.setImagesSupported();
}
});
```
to
```
((TextAttachmentController) sendController).setImagesSupported();
```
also, as another attempt with the same manner, I left the code as is but I changed the value of `hasSupport=true` manually ;
After that , whenever sending an image, nothing goes and only 'null' is sent.
knowing that the same version of the build is used in both android devises.
Is it a bug ? or i am lacking something important ?
in both cases i'd love hearing from you.
By the way, thank you for this great application !https://code.briarproject.org/briar/briar/-/issues/257Consider offering user validation alternatives2019-04-10T10:39:39ZErnir ErlingssonConsider offering user validation alternativesCurrently we are only validating users with text strings but text input, on small mobile devices especially, is little fun and for that reason some users might choose comfortability, with a short password, over security. There are severa...Currently we are only validating users with text strings but text input, on small mobile devices especially, is little fun and for that reason some users might choose comfortability, with a short password, over security. There are several possibilities available to tackle this "problem":
**1. Offer more user validation possibilities besides using a password, e.g. use the device's fingerprint sensor**
if available. This will only work for one account though, if a user has multiple accounts we will need to offer some way for the user to define which account is using his fingerprint.
**2. Define access layers with different security restrictions**
This is much more tricky and maybe not desirable at all but I feel there is sufficient discussion merit nonetheless. Currently Briar employs a single access restriction on a per account basis, i.e. you either have access to everything (for the respective account) or nothing depending on your knowledge of the password.
Another approach would be to have multiple access levels, e.g. you enter the app with a four digit pin that gives you access to the app but in order to communicate with extra-secure users (this could be marked when contacts are added) you must first confirm your password on a session basis. Here we would need to make sure that the security restriction on the communication between contacts A and B would be identical, i.e. both parties would be required to confirm the passwords in order to communicate.Android 1.1https://code.briarproject.org/briar/briar/-/issues/1529Introduction accept/decline buttons don't work for second attempt2019-04-05T12:56:47ZakwizgranIntroduction accept/decline buttons don't work for second attemptSteps to reproduce:
* Add devices A and B as contacts
* Add devices B and C as contacts
* B offers to introduce A to C
* A accepts
* C declines
* B offers to introduce A to C again (A and C must receive the new offers before their screen...Steps to reproduce:
* Add devices A and B as contacts
* Add devices B and C as contacts
* B offers to introduce A to C
* A accepts
* C declines
* B offers to introduce A to C again (A and C must receive the new offers before their screens turn off)
* Expected: A and C can use the accept and decline buttons
* Actual: The accept and decline buttons are unresponsive until the screen has been turned off and on (sometimes it's necessary to leave and re-enter the conversation)
I suspect this is a view recycling issue - IIRC we disable the buttons after they've been pressed once, to avoid issues with multiple taps. If the view gets recycled, I guess the buttons are still disabled.
I saw this while testing !1067, but I don't think it was introduced by that branch - I've seen it before but never came up with steps to reproduce it. It might also happen for forum/blog/group invitations.Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1516Introducee doesn't receive second introduction request2019-04-04T16:47:45ZakwizgranIntroducee doesn't receive second introduction requestSteps to reproduce:
* Add devices A and B as contacts
* Add devices B and C as contacts
* B offers to introduce A and C
* A accepts the introduction
* C declines the introduction
* B offers to introduce A and C again
* Expected: A and C ...Steps to reproduce:
* Add devices A and B as contacts
* Add devices B and C as contacts
* B offers to introduce A and C
* A accepts the introduction
* C declines the introduction
* B offers to introduce A and C again
* Expected: A and C receive B's new introduction request
* Actual: B's new introduction request appears in the conversation with C, but not the conversation with A. After turning C's screen off and on, the accept and decline buttons disappear from B's new introduction request (this might be a separate bug, or might indicate that the request can no longer be answered because the session has been aborted)
* B can still exchange private messages with A and C, so it's not a connection issueAndroid 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1514Wrong message is shown when other introducee accepts introduction2019-04-04T16:47:33ZakwizgranWrong message is shown when other introducee accepts introductionSteps to reproduce:
* Add devices A and B as contacts
* Add devices B and C as contacts
* B offers to introduce A and C
* A declines the introduction
* As expected, A sees "You declined the introduction to C", B sees "A declined the intr...Steps to reproduce:
* Add devices A and B as contacts
* Add devices B and C as contacts
* B offers to introduce A and C
* A declines the introduction
* As expected, A sees "You declined the introduction to C", B sees "A declined the introduction to C", and C sees "B says that A declined the introduction"
* C accepts the introduction
* As expected, B sees "C accepted the introduction to A" and C sees "You accepted the introduction to A. Before A gets added to your contacts, they need to accept the introduction as well. This might take some time." (Separately from this ticket, we might think about showing different text to C in the case where A has already responded. The current text suggests we're still waiting for a response.)
* Expected: A sees "C accepted the introduction" (or "C accepted the introduction from B", or "B says that C accepted the introduction", etc)
* Actual: A sees "B accepted the introduction to C". This mixes up the roles, implying that A was introducing B to C and B accepted, whereas B was introducing A to C and C acceptedAndroid 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1522IllegalArgumentException when setting contact alias2019-04-03T10:18:21ZakwizgranIllegalArgumentException when setting contact alias* Android version: 4.4.4
* Briar version: 1.1.5 (8f4c3c4)
* Phone model: Samsung GT-S7262 (logan2gxx)
Stacktrace:
```
java.lang.IllegalArgumentException
at org.briarproject.bramble.contact.ContactManagerImpl.setContactAlias(Cont...* Android version: 4.4.4
* Briar version: 1.1.5 (8f4c3c4)
* Phone model: Samsung GT-S7262 (logan2gxx)
Stacktrace:
```
java.lang.IllegalArgumentException
at org.briarproject.bramble.contact.ContactManagerImpl.setContactAlias(ContactManagerImpl.java:138)
at org.briarproject.bramble.contact.ContactManagerImpl.lambda$setContactAlias$4(ContactManagerImpl.java:146)
at org.briarproject.bramble.contact.-$$Lambda$ContactManagerImpl$EfFGAUvRrCV355yeOOy1D8He3mI.run(lambda)
at org.briarproject.bramble.db.DatabaseComponentImpl.transaction(DatabaseComponentImpl.java:177)
at org.briarproject.bramble.contact.ContactManagerImpl.setContactAlias(ContactManagerImpl.java:146)
at org.briarproject.briar.android.conversation.ConversationViewModel.lambda$setContactAlias$2(ConversationViewModel.java:90)
at org.briarproject.briar.android.conversation.-$$Lambda$ConversationViewModel$XcyaPAb6QDHfJV0o5jdtkgo2ULo.run(lambda)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
```
This exception is thrown at ContactManagerImpl line 192 on current master if the alias is empty or too long. The ConversationViewModel checks for an empty alias, but it doesn't look like we're checking the maximum length.Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1327AssertionError when pressing back in contact list after setup2019-04-02T13:12:30ZakwizgranAssertionError when pressing back in contact list after setupLooks like SetupActivity was still on the back stack.
```
06-22 14:51:17.259 3107-3107/? E/ACRA: ACRA caught a AssertionError for org.briarproject.briar.android.debug
java.lang.AssertionError
at org.briarproject.briar.androi...Looks like SetupActivity was still on the back stack.
```
06-22 14:51:17.259 3107-3107/? E/ACRA: ACRA caught a AssertionError for org.briarproject.briar.android.debug
java.lang.AssertionError
at org.briarproject.briar.android.login.SetupActivity.onCreate(SetupActivity.java:42)
at android.app.Activity.performCreate(Activity.java:4470)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
at android.app.ActivityThread.access$600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
at dalvik.system.NativeStart.main(Native Method)
```Android 1.1Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1260Power management improvements2019-04-01T13:19:14ZakwizgranPower management improvementsUmbrella ticket for sponsor 1, objective 6.Umbrella ticket for sponsor 1, objective 6.https://code.briarproject.org/briar/briar/-/issues/1517NPE when rotating screen2019-03-29T13:58:45ZakwizgranNPE when rotating screenI got this crash on the API 28 emulator while running current master modified to target API 28. With a private group open, I rotated the screen to landscape, pressed the screen rotation button in the navigation bar to allow the app to ro...I got this crash on the API 28 emulator while running current master modified to target API 28. With a private group open, I rotated the screen to landscape, pressed the screen rotation button in the navigation bar to allow the app to rotate, then rotated the screen to portrait again without pressing the screen rotation button again.
I'll try to reproduce this on master with the normal API target.
```
ACRA caught a NullPointerException for org.briarproject.briar.android.debug
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.threaded.ThreadScrollListener.onItemsVisible(ThreadScrollListener.java:39)
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:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
at android.view.View.layout(View.java:20672)
at android.view.ViewGroup.layout(ViewGroup.java:6194)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:696)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
```Android 1.1akwizgranakwizgran