briar issueshttps://code.briarproject.org/briar/briar/-/issues2020-11-19T04:51:10Zhttps://code.briarproject.org/briar/briar/-/issues/1125"Failed to inflate ColorStateList" when showing setup wizard2020-11-19T04:51:10Zakwizgran"Failed to inflate ColorStateList" when showing setup wizardThe Huawei Ascend Y330 logs the following stacktrace when showing the new setup wizard:
```
12-01 12:48:16.402 19705-19705/org.briarproject.briar.beta.debug E/AppCompatResources: Failed to inflate ColorStateList, leaving it to the frame...The Huawei Ascend Y330 logs the following stacktrace when showing the new setup wizard:
```
12-01 12:48:16.402 19705-19705/org.briarproject.briar.beta.debug E/AppCompatResources: Failed to inflate ColorStateList, leaving it to the framework
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
at android.content.res.TypedArray.getColor(TypedArray.java:334)
at android.support.v7.content.res.AppCompatColorStateListInflater.inflate(AppCompatColorStateListInflater.java:114)
at android.support.v7.content.res.AppCompatColorStateListInflater.createFromXmlInner(AppCompatColorStateListInflater.java:88)
at android.support.v7.content.res.AppCompatColorStateListInflater.createFromXml(AppCompatColorStateListInflater.java:67)
at android.support.v7.content.res.AppCompatResources.inflateColorStateList(AppCompatResources.java:116)
at android.support.v7.content.res.AppCompatResources.getColorStateList(AppCompatResources.java:74)
at android.support.v7.widget.TintTypedArray.getColorStateList(TintTypedArray.java:170)
at android.support.v7.widget.AppCompatTextHelper.onSetTextAppearance(AppCompatTextHelper.java:296)
at android.support.v7.widget.AppCompatTextView.setTextAppearance(AppCompatTextView.java:160)
at android.support.v4.widget.TextViewCompat$TextViewCompatBaseImpl.setTextAppearance(TextViewCompat.java:155)
at android.support.v4.widget.TextViewCompat.setTextAppearance(TextViewCompat.java:476)
at android.support.design.widget.TextInputLayout.setErrorEnabled(TextInputLayout.java:632)
at android.support.design.widget.TextInputLayout.<init>(TextInputLayout.java:255)
at android.support.design.widget.TextInputLayout.<init>(TextInputLayout.java:185)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:587)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at org.briarproject.briar.android.login.AuthorNameFragment.onCreateView(AuthorNameFragment.java:36)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at org.briarproject.briar.android.activity.BaseActivity.onStart(BaseActivity.java:95)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1167)
at android.app.Activity.performStart(Activity.java:5221)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2337)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.access$600(ActivityThread.java:166)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
```
The same exception is logged for the two TextInputLayouts in the PasswordFragment.
There's no apparent issue with the appearance or behaviour of the TextInputLayouts, so this may be harmless.https://code.briarproject.org/briar/briar/-/issues/1123Two Briar processes2020-11-19T04:51:47ZakwizgranTwo Briar processesA user sent a log that shows two Briar processes starting at almost the same time. Only one of the processes continues logging past the sign in stage.
```
10-18 23:34:46.295 I/BriarApplicationImpl(12758): Created
10-18 23:34:46.365 I/Br...A user sent a log that shows two Briar processes starting at almost the same time. Only one of the processes continues logging past the sign in stage.
```
10-18 23:34:46.295 I/BriarApplicationImpl(12758): Created
10-18 23:34:46.365 I/BriarApplicationImpl(12786): Created
10-18 23:34:46.373 I/CryptoComponentImpl(12758): Default SecureRandom: AndroidOpenSSL SHA1PRNG
10-18 23:34:46.395 E/WifiManager(12758): mWifiServiceMessenger == null
10-18 23:34:46.408 I/CryptoComponentImpl(12786): Default SecureRandom: AndroidOpenSSL SHA1PRNG
10-18 23:34:46.417 E/WifiManager(12786): mWifiServiceMessenger == null
10-18 23:34:46.501 I/CryptoComponentImpl(12786): Installed SecureRandom: LinuxPRNG SHA1PRNG
10-18 23:34:46.501 I/CryptoComponentImpl(12758): Installed SecureRandom: LinuxPRNG SHA1PRNG
10-18 23:34:46.528 I/LifecycleManagerImpl(12786): Registering executor TimeLoggingExecutor
10-18 23:34:46.528 I/LifecycleManagerImpl(12758): Registering executor TimeLoggingExecutor
10-18 23:34:46.531 I/LifecycleManagerImpl(12758): Registering executor ThreadPoolExecutor
10-18 23:34:46.531 I/LifecycleManagerImpl(12786): Registering executor ThreadPoolExecutor
10-18 23:34:46.539 I/LifecycleManagerImpl(12758): Registering executor DelegatedScheduledExecutorService
10-18 23:34:46.539 I/LifecycleManagerImpl(12786): Registering executor DelegatedScheduledExecutorService
10-18 23:34:46.539 I/LifecycleManagerImpl(12758): Registering service KeyManagerImpl
10-18 23:34:46.539 I/LifecycleManagerImpl(12786): Registering service KeyManagerImpl
10-18 23:34:46.540 I/LifecycleManagerImpl(12758): Registering executor TimeLoggingExecutor
10-18 23:34:46.540 I/LifecycleManagerImpl(12786): Registering executor TimeLoggingExecutor
10-18 23:34:46.549 I/LifecycleManagerImpl(12758): Registering client TransportPropertyManagerImpl
10-18 23:34:46.549 I/LifecycleManagerImpl(12786): Registering client TransportPropertyManagerImpl
10-18 23:34:46.549 I/LifecycleManagerImpl(12758): Registering service PluginManagerImpl
10-18 23:34:46.549 I/LifecycleManagerImpl(12786): Registering service PluginManagerImpl
10-18 23:34:46.550 I/LifecycleManagerImpl(12786): Registering service ValidationManagerImpl
10-18 23:34:46.550 I/LifecycleManagerImpl(12758): Registering service ValidationManagerImpl
10-18 23:34:46.554 I/LifecycleManagerImpl(12758): Registering client BlogManagerImpl
10-18 23:34:46.554 I/LifecycleManagerImpl(12786): Registering client BlogManagerImpl
10-18 23:34:46.556 I/LifecycleManagerImpl(12758): Registering client FeedManagerImpl
10-18 23:34:46.556 I/LifecycleManagerImpl(12786): Registering client FeedManagerImpl
10-18 23:34:46.563 I/LifecycleManagerImpl(12758): Registering client GroupInvitationManagerImpl
10-18 23:34:46.563 I/LifecycleManagerImpl(12786): Registering client GroupInvitationManagerImpl
10-18 23:34:46.564 I/LifecycleManagerImpl(12758): Registering client MessagingManagerImpl
10-18 23:34:46.564 I/LifecycleManagerImpl(12786): Registering client MessagingManagerImpl
10-18 23:34:46.567 I/LifecycleManagerImpl(12786): Registering client ForumSharingManagerImpl
10-18 23:34:46.567 I/LifecycleManagerImpl(12758): Registering client ForumSharingManagerImpl
10-18 23:34:46.568 I/LifecycleManagerImpl(12758): Registering client BlogSharingManagerImpl
10-18 23:34:46.568 I/LifecycleManagerImpl(12786): Registering client BlogSharingManagerImpl
10-18 23:34:46.571 I/LifecycleManagerImpl(12758): Registering client IntroductionManagerImpl
10-18 23:34:46.571 I/LifecycleManagerImpl(12786): Registering client IntroductionManagerImpl
10-18 23:34:46.575 I/LifecycleManagerImpl(12786): Registering service AndroidNotificationManagerImpl
10-18 23:34:46.575 I/LifecycleManagerImpl(12758): Registering service AndroidNotificationManagerImpl
10-18 23:34:47.354 I/BriarRecyclerView(12758): Adding Handler Callback
10-18 23:34:47.389 I/TextInputLayout(12758): EditText added is not a TextInputEditText. Please switch to using that class instead.
10-18 23:34:48.111 I/BriarRecyclerView(12758): Removing Handler Callback
10-18 23:34:52.446 I/BriarRecyclerView(12758): Adding Handler Callback
10-18 23:34:52.533 I/BriarService(12758): Created
10-18 23:34:52.561 I/LifecycleManagerImpl(12758): Starting services
10-18 23:34:56.318 I/LifecycleManagerImpl(12758): Reopening database took 3757 ms
10-18 23:34:56.323 I/LifecycleManagerImpl(12758): Starting client TransportPropertyManagerImpl took 3 ms
10-18 23:34:56.323 I/IdentityManagerImpl(12758): Local author loaded
10-18 23:34:56.324 I/LifecycleManagerImpl(12758): Starting client BlogManagerImpl took 1 ms
10-18 23:34:56.325 I/LifecycleManagerImpl(12758): Starting client FeedManagerImpl took 1 ms
10-18 23:34:56.326 I/LifecycleManagerImpl(12758): Starting client GroupInvitationManagerImpl took 0 ms
10-18 23:34:56.326 I/LifecycleManagerImpl(12758): Starting client MessagingManagerImpl took 0 ms
10-18 23:34:56.327 I/LifecycleManagerImpl(12758): Starting client ForumSharingManagerImpl took 0 ms
10-18 23:34:56.623 I/LifecycleManagerImpl(12758): Starting client BlogSharingManagerImpl took 296 ms
10-18 23:34:56.624 I/LifecycleManagerImpl(12758): Starting client IntroductionManagerImpl took 1 ms
10-18 23:34:56.696 I/LifecycleManagerImpl(12758): Starting service KeyManagerImpl took 71 ms
10-18 23:34:56.696 I/PluginManagerImpl(12758): Starting simplex plugins
10-18 23:34:56.696 I/PluginManagerImpl(12758): Starting duplex plugins
10-18 23:34:56.718 I/LifecycleManagerImpl(12758): Starting service PluginManagerImpl took 22 ms
10-18 23:34:56.720 I/LifecycleManagerImpl(12758): Starting service ValidationManagerImpl took 1 ms
10-18 23:34:56.723 I/TorPlugin(12758): Starting Tor
10-18 23:34:56.727 I/PluginManagerImpl(12758): Starting plugin org.briarproject.bramble.lan took 7 ms
10-18 23:34:56.753 I/AndroidLanTcpPlugin(12758): Not connected to Wi-Fi
10-18 23:34:56.757 I/NavDrawerControllerImpl(12758): TransportDisabledEvent: org.briarproject.bramble.lan
10-18 23:34:56.764 I/LifecycleManagerImpl(12758): Starting service AndroidNotificationManagerImpl took 43 ms
10-18 23:34:56.764 I/DroidtoothPlugin(12758): Not enabling Bluetooth
10-18 23:34:56.764 I/PluginManagerImpl(12758): Starting plugin org.briarproject.bramble.bluetooth took 47 ms
10-18 23:34:56.892 I/ContactListFragment(12758): Full load took 573 ms
```
The user reported an issue that may be related:
"I think there is a bug, before I introduce one of my phone's id to another of my brother's phone installed briar app on android, the message didn't go through, it does not matter, wifi, bluetooth or internet, my phone is xiaomi redmi note 2 on android lollipop, while my brother's phone is on htc mate on android marshmallow. I have to reboot both phone, which is now works without problem, could you check the 'Introduce' module?"
* Android version: 5.0.2
* Phone model: Redmi Note 2 (hermes)
* Briar version: 0.16.10 (ef2286a)https://code.briarproject.org/briar/briar/-/issues/1122Different identities in different contexts2020-11-19T04:52:52ZakwizgranDifferent identities in different contextsA user asked for the ability to "change my name or have different names in different contexts".A user asked for the ability to "change my name or have different names in different contexts".https://code.briarproject.org/briar/briar/-/issues/1121Possible bypass of tapjacking protection?2020-11-19T04:55:20ZakwizgranPossible bypass of tapjacking protection?A user reported what sounds like a way to bypass tapjacking protection: "When the app notifies for an overlay, I can bypass that by pressing continue and then redoing what I wanted to do."
After the dialog is dismissed we should continu...A user reported what sounds like a way to bypass tapjacking protection: "When the app notifies for an overlay, I can bypass that by pressing continue and then redoing what I wanted to do."
After the dialog is dismissed we should continue to block touch events that have passed through the overlay. I'll contact the user to clarify what's happening.https://code.briarproject.org/briar/briar/-/issues/1119More information about message status2020-11-19T12:54:43ZakwizgranMore information about message statusA user asked for more information about message status "(sent/unsent/when/scheduled next try/force it...)".A user asked for more information about message status "(sent/unsent/when/scheduled next try/force it...)".https://code.briarproject.org/briar/briar/-/issues/1118Cryptocurrency payments2023-04-24T12:23:55ZakwizgranCryptocurrency paymentsUsers have asked for the ability to make payments with Monero or Taler.Users have asked for the ability to make payments with Monero or Taler.https://code.briarproject.org/briar/briar/-/issues/1115Edit unsent messages2020-11-19T13:31:22ZakwizgranEdit unsent messagesA user asked for the ability to edit messages that haven't been sent yet.
Related to #420, maybe a duplicate depending on the user's intent.A user asked for the ability to edit messages that haven't been sent yet.
Related to #420, maybe a duplicate depending on the user's intent.https://code.briarproject.org/briar/briar/-/issues/1113Private replies to group posts2020-11-19T13:10:03ZakwizgranPrivate replies to group postsA user asked for the ability to reply privately to messages in private groups.
Related to #43, but easier to achieve.A user asked for the ability to reply privately to messages in private groups.
Related to #43, but easier to achieve.https://code.briarproject.org/briar/briar/-/issues/1111Show latest message in contact list2020-11-19T13:10:24ZakwizgranShow latest message in contact listA user asked to be able to see the latest message from each contact in the contact list, as well as the time when the message was sent.A user asked to be able to see the latest message from each contact in the contact list, as well as the time when the message was sent.https://code.briarproject.org/briar/briar/-/issues/1107Contact List Sorting (message received, online status)2020-11-19T13:30:41ZTorsten GroteContact List Sorting (message received, online status)Having now ~30 contacts reveals some small inconveniences that only happen with a larger contact list.
For example, the list is currently sorted by the time messages have been created. So when you finally manage to get an old message sy...Having now ~30 contacts reveals some small inconveniences that only happen with a larger contact list.
For example, the list is currently sorted by the time messages have been created. So when you finally manage to get an old message synced, the unread message bubble and the contact might already be way down, so you overlook the new messages. Sorting the list by the time a message was received might help with that.
Also, when you have many contacts, some might be inactive and never come online. Usually, only a small subset of users is online and users have a higher interest in knowing which users are online and can be communicated with right away. Taking a users online status into account for sorting or offering the option to hide offline users might improve things here.https://code.briarproject.org/briar/briar/-/issues/1106User unable to add contacts to group after creation2022-04-17T11:32:14ZTorsten GroteUser unable to add contacts to group after creationAt an event last week, I was testing Briar with a few people and noticed that someone was unable to add contacts to a group after creating it.
In the past, the "Add Users" screen came up as part of the creation process. We changed this ...At an event last week, I was testing Briar with a few people and noticed that someone was unable to add contacts to a group after creating it.
In the past, the "Add Users" screen came up as part of the creation process. We changed this for technical reasons if I remember correctly. So after a creating the group, this is what the user currently sees:
![device-2017-11-20-120338](/uploads/88a8281b0f72bd3e9ec5b21a12d539a2/device-2017-11-20-120338.png)
So there's also no empty state message with a hint, because the first join message is always there.
The user I observed tried everything they could and I didn't help. They clicked everywhere, but the share icon. So they failed the task and gave up. Afterwards, I asked why they didn't try the share icon and apparently the expectation is that this is always used to share something from the app with other apps.
The user suggested to change the UI as follows as this would make it clearer how to add users:
![device-2017-11-20-120705](/uploads/08b4bc666763fff00c18e464baac9e9f/device-2017-11-20-120705.png)
To increase the chance of success, we could add the same button to the member list screen.https://code.briarproject.org/briar/briar/-/issues/1104Load messages on demand (paged/lazy)2022-05-16T19:53:45ZakwizgranLoad messages on demand (paged/lazy)If a group contains a lot of messages, it's expensive to load all the messages when the user views the group.
Some clients use metadata to avoid loading messages. Message bodies can then be loaded on demand as they become visible. But t...If a group contains a lot of messages, it's expensive to load all the messages when the user views the group.
Some clients use metadata to avoid loading messages. Message bodies can then be loaded on demand as they become visible. But this is still expensive if there are lots of messages and/or lots of metadata per message.
Ideally we'd use something like the MessageTracker to store summary information, then load the messages and/or metadata on demand.
One of the tasks here is to determine what summary information each client needs. For example, the forum client needs to know the number of unread posts above and below the viewport. It may also need to know the sort position of the first unread post above and below the viewport so it can jump to those posts.
Sort order will be relevant to any client that loads messages on demand. If we want to load messages a page at a time, the database needs to know how to sort the messages. But sort order is client-dependent. For example, the blog client may want to sort posts by date, whereas the forum client sorts them by depth-first traversal order of the reply tree.
We can capture both of these orders (and hopefully others) by adding a label to each message. From the database's point of view, the label is just an opaque string of bytes. The database sorts the labels in lexicographic order, and messages and metadata can be retrieved by their positions in the sort order. The client is reponsible for labelling messages to achieve the desired sort order.
For the blog client, the label can just be a big-endian representation of the timestamp. For the forum client, the label can be the concatenated timestamps of the post's ancestors and the post itself. These labels will sort in the same order as depth-first traversal of the tree, visiting siblings in timestamp order.
```
123
+-123/234
+-123/345
234
+-234/345
+-234/345/456
345
567
```
(This doesn't rely on the rule that a post has a higher timestamp than its parent.)
This approach wouldn't be efficient for dynamic sort orders. For example, if the forum client wanted to sort siblings by the number of upvotes, we could calculate the labels as with timestamps, but adding an upvote to a post would require relabelling the post and all its descendents.https://code.briarproject.org/briar/briar/-/issues/1101Research whether NotificationCleanupService needs to be migrated to JobIntent...2020-11-19T13:24:10ZakwizgranResearch whether NotificationCleanupService needs to be migrated to JobIntentServiceNotificationCleanupService extends IntentService, which may not work properly on Android 8 [according to the docs](https://developer.android.com/about/versions/oreo/background.html). Find out whether the changes apply to us. If so, upgra...NotificationCleanupService extends IntentService, which may not work properly on Android 8 [according to the docs](https://developer.android.com/about/versions/oreo/background.html). Find out whether the changes apply to us. If so, upgrade the support library to version 26 and migrate NotificationCleanupService to JobIntentService.https://code.briarproject.org/briar/briar/-/issues/1098Use Tor consensus to detect local clock skew2020-11-16T11:07:53ZakwizgranUse Tor consensus to detect local clock skewIf the valid-after and valid-until timestamps on the Tor consensus seem to be far in the future then our local clock is probably skewed. We should warn the user in this case, to avoid connectivity issues (#18) and potential anonymity iss...If the valid-after and valid-until timestamps on the Tor consensus seem to be far in the future then our local clock is probably skewed. We should warn the user in this case, to avoid connectivity issues (#18) and potential anonymity issues caused by inaccurate message timestamps.
We shouldn't warn if the consensus seems to be far in the past, as Tor may may not have downloaded the latest consensus yet.
We can get the timestamps via the control port with `GETINFO consensus/valid-after` and `GETINFO consensus/valid-until`.https://code.briarproject.org/briar/briar/-/issues/1095Save chat as text2022-02-16T13:50:27ZakwizgranSave chat as textA tester asked for the option to export a private conversation as text.A tester asked for the option to export a private conversation as text.https://code.briarproject.org/briar/briar/-/issues/1094Splash screen makes app feel slow to start up2020-11-19T13:22:14ZakwizgranSplash screen makes app feel slow to start upA user commented that the splash screen makes the app feel slow to start up.
We originally added the splash because the app *was* slow to start up when we were using Guice. Now that we're using Dagger, perhaps the splash isn't needed an...A user commented that the splash screen makes the app feel slow to start up.
We originally added the splash because the app *was* slow to start up when we were using Guice. Now that we're using Dagger, perhaps the splash isn't needed any more?https://code.briarproject.org/briar/briar/-/issues/1089Setup Wizard page for Sony's power manager2020-11-19T13:20:26ZJulian DehmSetup Wizard page for Sony's power managerStamina mode, Sony's powersaving mode, kills Briar once the screen is turned off. This can be prevented by whitelisting Briar.
Similar to #1088 we could explain it to the user and offer to open the stamina activity.Stamina mode, Sony's powersaving mode, kills Briar once the screen is turned off. This can be prevented by whitelisting Briar.
Similar to #1088 we could explain it to the user and offer to open the stamina activity.https://code.briarproject.org/briar/briar/-/issues/1082Add Self-Update Mechanism2020-11-19T13:18:23ZTorsten GroteAdd Self-Update MechanismIt would be nice if Briar would keep itself up-to-date.It would be nice if Briar would keep itself up-to-date.https://code.briarproject.org/briar/briar/-/issues/1073Remember position in blog feed2020-11-19T13:12:57ZakwizgranRemember position in blog feedUser feedback: "When reading an article in the RSS feed you should be able to switch to another screen then switch back to the RSS feed article without losing your place."User feedback: "When reading an article in the RSS feed you should be able to switch to another screen then switch back to the RSS feed article without losing your place."https://code.briarproject.org/briar/briar/-/issues/1072Reply to messages from the notification2020-11-19T13:12:06ZakwizgranReply to messages from the notificationUser feedback: "Another complaint I hear is that my friends can't reply from the notification. I work with a lot of multitaskers."User feedback: "Another complaint I hear is that my friends can't reply from the notification. I work with a lot of multitaskers."