briar issueshttps://code.briarproject.org/briar/briar/-/issues2018-06-12T11:32:22Zhttps://code.briarproject.org/briar/briar/-/issues/534Contacts are not properly greyed out on older Android versions2018-06-12T11:32:22ZakwizgranContacts are not properly greyed out on older Android versionsWhen sharing a forum, contacts who already belong to the forum are greyed out in the contact chooser. On newer Android versions (tested on Android 5.1), the avatar, contact name and checkbox all have a light grey fade. On older versions ...When sharing a forum, contacts who already belong to the forum are greyed out in the contact chooser. On newer Android versions (tested on Android 5.1), the avatar, contact name and checkbox all have a light grey fade. On older versions (tested on Android 2.3.3), the avatar has a dark grey fade, the contact name does not appear to be faded, and the checkbox has a light grey fade. It's not obvious that the item is meant to be disabled - it looks like the avatar is just discoloured.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/535FormatException when loading contact list after receiving invitation2018-06-12T11:32:22ZakwizgranFormatException when loading contact list after receiving invitationThe following exception was logged when a forum invitation was received. The same forum had previously been shared by the same contact, accepted, and left.
```
07-27 13:57:48.047 1084-1144/org.briarproject I/InviteeEngine: Received I...The following exception was logged when a forum invitation was received. The same forum had previously been shared by the same contact, accepted, and left.
```
07-27 13:57:48.047 1084-1144/org.briarproject I/InviteeEngine: Received INVITE in state AWAIT_INVITATION with session ID 1124035826 in group 1505195939. Moving on to state AWAIT_LOCAL_RESPONSE
07-27 13:57:48.257 1084-1144/org.briarproject I/ContactListFragment: Message added, reloading
07-27 13:57:48.267 1084-1144/org.briarproject I/ContactListFragment: Message added, reloading
07-27 13:57:48.297 1084-1144/org.briarproject W/ContactListFragment: org.briarproject.api.db.DbException: org.briarproject.api.FormatException
org.briarproject.api.db.DbException: org.briarproject.api.FormatException
at org.briarproject.messaging.MessagingManagerImpl.getContactId(MessagingManagerImpl.java:132)
at org.briarproject.android.contact.ContactListFragment$4.run(ContactListFragment.java:278)
at org.briarproject.android.controller.DbControllerImpl$1.run(DbControllerImpl.java:35)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1027)
Caused by: org.briarproject.api.FormatException
at org.briarproject.api.data.BdfDictionary.getLong(BdfDictionary.java:62)
at org.briarproject.messaging.MessagingManagerImpl.getContactId(MessagingManagerImpl.java:130)
at org.briarproject.android.contact.ContactListFragment$4.run(ContactListFragment.java:278)
at org.briarproject.android.controller.DbControllerImpl$1.run(DbControllerImpl.java:35)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1027)
```
Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/536ClassNotFoundException after cancelling crash report2018-06-12T11:32:22ZakwizgranClassNotFoundException after cancelling crash reportAfter cancelling the crash report dialog for the crash recorded in https://code.briarproject.org/akwizgran/briar/issues/443#note_9088, the following crash occurred without further user interaction on Android 2.3.3:
```
07-27 14:22:22...After cancelling the crash report dialog for the crash recorded in https://code.briarproject.org/akwizgran/briar/issues/443#note_9088, the following crash occurred without further user interaction on Android 2.3.3:
```
07-27 14:22:22.237 26979-26979/org.briarproject E/Parcel: Class not found when unmarshalling: android.support.v7.widget.RecyclerView$SavedState, e: java.lang.ClassNotFoundException: android.support.v7.widget.RecyclerView$SavedState
07-27 14:22:22.237 26979-26979/org.briarproject W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x400205a0)
07-27 14:22:22.257 26979-26979/org.briarproject E/ACRA: ACRA caught a RuntimeException for org.briarproject
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.briarproject/org.briarproject.android.NavDrawerActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.RecyclerView$SavedState
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1821)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842)
at android.app.ActivityThread.access$1500(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4268)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.RecyclerView$SavedState
at android.os.Parcel.readParcelable(Parcel.java:1958)
at android.os.Parcel.readValue(Parcel.java:1846)
at android.os.Parcel.readSparseArrayInternal(Parcel.java:2112)
at android.os.Parcel.readSparseArray(Parcel.java:1568)
at android.os.Parcel.readValue(Parcel.java:1903)
at android.os.Parcel.readMapInternal(Parcel.java:2083)
at android.os.Bundle.unparcel(Bundle.java:208)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:1167)
at android.support.design.internal.NavigationMenuPresenter.onRestoreInstanceState(NavigationMenuPresenter.java:174)
at android.support.v7.view.menu.MenuBuilder.dispatchRestoreInstanceState(MenuBuilder.java:349)
at android.support.v7.view.menu.MenuBuilder.restorePresenterStates(MenuBuilder.java:361)
at android.support.design.widget.NavigationView.onRestoreInstanceState(NavigationView.java:192)
at android.view.View.dispatchRestoreInstanceState(View.java:6325)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1297)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1301)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1301)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1301)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1301)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1301)
at android.view.View.restoreHierarchyState(View.java:6304)
at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1558)
at android.app.Activity.onRestoreInstanceState(Activity.java:882)
at android.app.Activity.performRestoreInstanceState(Activity.java:854)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1162)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1799)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842)
at android.app.ActivityThread.access$1500(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4268)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
```
Milestone Dhttps://code.briarproject.org/briar/briar/-/issues/543Flicker when forum invitation is removed from list2018-06-12T11:32:22ZakwizgranFlicker when forum invitation is removed from listAfter accepting a forum invitation, there is a noticeable flicker when the list of invitations is redrawn.After accepting a forum invitation, there is a noticeable flicker when the list of invitations is redrawn.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/546Enable Briar network settings to be opened from Settings app2018-06-12T11:32:22ZakwizgranEnable Briar network settings to be opened from Settings app" If you provide a preference activity with [data usage] settings, you should include in its manifest declaration an intent filter for the ACTION_MANAGE_NETWORK_USAGE action. ... This intent filter indicates to the system that this is th..." If you provide a preference activity with [data usage] settings, you should include in its manifest declaration an intent filter for the ACTION_MANAGE_NETWORK_USAGE action. ... This intent filter indicates to the system that this is the activity that controls your application’s data usage. Thus, when the user inspects how much data your app is using from the Settings app, a “View application settings" button is available that launches your preference activity so the user can refine how much data your app uses."
https://developer.android.com/about/versions/android-4.0.html#NetworkUsagehttps://code.briarproject.org/briar/briar/-/issues/548Require a label for hashing2018-06-12T11:32:22ZakwizgranRequire a label for hashingCryptoComponent#hash() should take a mandatory label argument to ensure that hashes calculated for distinct purposes don't collide.
The labels could use the same convention as namespaced client IDs (#557), e.g. `org.briarproject.bramb...CryptoComponent#hash() should take a mandatory label argument to ensure that hashes calculated for distinct purposes don't collide.
The labels could use the same convention as namespaced client IDs (#557), e.g. `org.briarproject.bramble.messageid`. This would allow independent developers to assign labels without collisions.Milestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/549Require a label for signing2018-06-12T11:32:22ZakwizgranRequire a label for signingCreate a CryptoComponent#sign() method that takes a mandatory label argument to ensure that signatures can't be repurposed.
The labels could use the same convention as namespaced client IDs (#557), e.g. `org.briarproject.briar.forum.p...Create a CryptoComponent#sign() method that takes a mandatory label argument to ensure that signatures can't be repurposed.
The labels could use the same convention as namespaced client IDs (#557), e.g. `org.briarproject.briar.forum.post`. This would allow independent developers to assign labels without collisions.Milestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/551IllegalStateException, SettingsFragment not attached to Activity2018-06-12T11:32:22ZakwizgranIllegalStateException, SettingsFragment not attached to ActivityGot this crash several times on the HTC Wildfire S (Android 2.3.3) while navigating in and out of the settings screen:
```
07-29 17:21:52.726 19626-19626/org.briarproject E/ACRA: ACRA caught a IllegalStateException for org.briarproje...Got this crash several times on the HTC Wildfire S (Android 2.3.3) while navigating in and out of the settings screen:
```
07-29 17:21:52.726 19626-19626/org.briarproject E/ACRA: ACRA caught a IllegalStateException for org.briarproject
java.lang.IllegalStateException: Fragment SettingsFragment{40ca1ca8} not attached to Activity
at android.support.v4.app.Fragment.getResources(Fragment.java:636)
at android.support.v4.app.Fragment.getString(Fragment.java:658)
at org.briarproject.android.fragment.SettingsFragment$4.run(SettingsFragment.java:210)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4268)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
```Milestone Eakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/552Check thread safety of MessageTree2018-06-12T11:32:22ZakwizgranCheck thread safety of MessageTreeMilestone Ehttps://code.briarproject.org/briar/briar/-/issues/553Pause Periodic List Refresh when View is not Visible2018-06-12T11:32:22ZTorsten GrotePause Periodic List Refresh when View is not VisibleMR !238 introduced periodic refresh of recycler view. There is cases when the view is hidden and the refresh is still called, because `onDetachedFromWindow()` is only called when the view is removed from its parent.MR !238 introduced periodic refresh of recycler view. There is cases when the view is hidden and the refresh is still called, because `onDetachedFromWindow()` is only called when the view is removed from its parent.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/554Audit uses of ResultHandler2018-06-12T11:32:22ZakwizgranAudit uses of ResultHandler* Controllers should depend on ResultHandler/ResultExceptionHandler, not UiResultHandler/UiResultExceptionHandler, to allow us to use synchronous handlers when unit testing controllers
* Handlers shouldn't return true if everything went...* Controllers should depend on ResultHandler/ResultExceptionHandler, not UiResultHandler/UiResultExceptionHandler, to allow us to use synchronous handlers when unit testing controllers
* Handlers shouldn't return true if everything went fine or false if there was an exception - use ResultExceptionHandler if the UI needs to know about failures, and ResultExceptionHandler\<Void\> if it doesn'tMilestone Eakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/555Thread safety and blocking issues in BlogControllerImpl2018-06-12T11:32:22ZakwizgranThread safety and blocking issues in BlogControllerImplMilestone Dakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/556Thread safety and blocking issues in ForumControllerImpl2018-06-12T11:32:22ZakwizgranThread safety and blocking issues in ForumControllerImplMilestone Ehttps://code.briarproject.org/briar/briar/-/issues/557Use namespaced strings for client IDs2018-06-12T11:32:22ZakwizgranUse namespaced strings for client IDsInstead of random unique IDs, use namespaced strings to identify clients. The IDs could follow the same convention as Java packages, e.g. `org.briarproject.briar.messaging`. This would allow independent developers to assign IDs without c...Instead of random unique IDs, use namespaced strings to identify clients. The IDs could follow the same convention as Java packages, e.g. `org.briarproject.briar.messaging`. This would allow independent developers to assign IDs without collisions.Milestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/558Use namespaced strings for transport IDs2018-06-12T11:32:22ZakwizgranUse namespaced strings for transport IDsAdd a namespace to the strings used to identify transports. The IDs could follow the same convention as Java packages, e.g. `org.briarproject.bramble.bluetooth`. This would allow independent developers to assign IDs without collisions.
...Add a namespace to the strings used to identify transports. The IDs could follow the same convention as Java packages, e.g. `org.briarproject.bramble.bluetooth`. This would allow independent developers to assign IDs without collisions.
Potential downside: more data to store in QR codes.Milestone FTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/559Show elapsed time in blog feeds and individual blog posts2018-06-12T11:32:22ZakwizgranShow elapsed time in blog feeds and individual blog postsThe timestamps in blog feeds should be consistent with the rest of the app: currently they show the absolute time rather than the elapsed time.
The timestamp in the detail view for an individual blog post shows the elapsed time, but I...The timestamps in blog feeds should be consistent with the rest of the app: currently they show the absolute time rather than the elapsed time.
The timestamp in the detail view for an individual blog post shows the elapsed time, but I'm guessing it doesn't update every minute as it's not based on BriarRecyclerView.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/560Design a consistent layout for identities2018-06-12T11:32:22ZakwizgranDesign a consistent layout for identitiesThe various bits of information relating to an identity - the avatar, nickname and trust level - are displayed in inconsistent ways throughout the app.
* Contact list: trust level isn't shown, timestamp is below nickname
* Forums: id...The various bits of information relating to an identity - the avatar, nickname and trust level - are displayed in inconsistent ways throughout the app.
* Contact list: trust level isn't shown, timestamp is below nickname
* Forums: identity and timestamp are below content, avatar is 20 dp, timestamp is to the right of all other elements
* Blogs: identity and timestamp are above content, avatar is 30 dp, timestamp is below nickname
Let's decide on a consistent way of presenting this information. My preferred solution would be the one that's currently used for blogs: all elements are shown, the timestamp is shown below the nickname and trust level, if there's content it's shown below the other elements. This would involve the following changes:
* Contact list: show trust level to the right of nickname
* Forums: increase avatar to 30 dp, move timestamp below nickname, move content below identity and timestamp
We should also use the same font sizes for the header and content information in forum and blog posts.Milestone Ehttps://code.briarproject.org/briar/briar/-/issues/562NPE in ContactListFragment2018-06-12T11:32:22ZTorsten GroteNPE in ContactListFragmentThis NPE happens when quickly switching to another fragment after the app started. Maybe `getActivity()` which seems to be called from the DbThread returns no proper context when the fragment has been hidden.
```
08-01 11:53:19.814 E/A...This NPE happens when quickly switching to another fragment after the app started. Maybe `getActivity()` which seems to be called from the DbThread returns no proper context when the fragment has been hidden.
```
08-01 11:53:19.814 E/ACRA: ACRA caught a NullPointerException for org.briarproject
java.lang.NullPointerException
at org.briarproject.android.contact.ConversationItem.from(ConversationItem.java:130)
at org.briarproject.android.contact.ContactListFragment.getMessages(ContactListFragment.java:414)
at org.briarproject.android.contact.ContactListFragment.access$200(ContactListFragment.java:68)
at org.briarproject.android.contact.ContactListFragment$2.run(ContactListFragment.java:212)
at org.briarproject.android.controller.DbControllerImpl$1.run(DbControllerImpl.java:35)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
```Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/563NPE when switching between contacts and forums at startup2018-06-12T11:32:21ZakwizgranNPE when switching between contacts and forums at startupAt startup, while the contact list was loading, I switched to the forum activity and back. The app crashed with the following stacktrace:
```
08-01 15:55:43.290 10492-10726/org.briarproject E/ACRA: ACRA caught a NullPointerException ...At startup, while the contact list was loading, I switched to the forum activity and back. The app crashed with the following stacktrace:
```
08-01 15:55:43.290 10492-10726/org.briarproject E/ACRA: ACRA caught a NullPointerException for org.briarproject
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getString(int, java.lang.Object[])' on a null object reference
at org.briarproject.android.contact.ConversationItem.from(ConversationItem.java:113)
at org.briarproject.android.contact.ContactListFragment.getMessages(ContactListFragment.java:414)
at org.briarproject.android.contact.ContactListFragment.access$200(ContactListFragment.java:68)
at org.briarproject.android.contact.ContactListFragment$2.run(ContactListFragment.java:211)
at org.briarproject.android.controller.DbControllerImpl$1.run(DbControllerImpl.java:35)
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:818)
```Milestone Dhttps://code.briarproject.org/briar/briar/-/issues/564Wrong message counts in new message notifications2018-06-12T11:32:21ZakwizgranWrong message counts in new message notificationsIf messages arrive in a group while notifications are blocked for that group, AndroidNotificationManagerImpl still updates its new message count for that group and its total new message count. If the user unsubscribes from the group, e.g...If messages arrive in a group while notifications are blocked for that group, AndroidNotificationManagerImpl still updates its new message count for that group and its total new message count. If the user unsubscribes from the group, e.g. by removing a contact or leaving a forum, the wrongly counted messages are included in the total displayed in the new message notification until the user signs out.Milestone Dakwizgranakwizgran