briar issueshttps://code.briarproject.org/groups/briar/-/issues2018-06-12T11:32:33Zhttps://code.briarproject.org/briar/briar/-/issues/244IllegalStateException: ContactListFragment not attached to Activity2018-06-12T11:32:33ZTorsten GroteIllegalStateException: ContactListFragment not attached to ActivityWhile testing my own work, I noticed this unrelated crash:
```
java.lang.IllegalStateException: Fragment ContactListFragment{8b90f25} not attached to Activity
at android.support.v4.app.Fragment....While testing my own work, I noticed this unrelated crash:
```
java.lang.IllegalStateException: Fragment ContactListFragment{8b90f25} not attached to Activity
at android.support.v4.app.Fragment.getResources(Fragment.java:639)
at org.briarproject.android.contact.ContactListFragment.onCreateOptionsMenu(ContactListFragment.java:133)
at android.support.v4.app.Fragment.performCreateOptionsMenu(Fragment.java:2044)
at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:2114)
at android.support.v4.app.FragmentController.dispatchCreateOptionsMenu(FragmentController.java:270)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:299)
at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:241)
at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85)
at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:443)
at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:60)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5466)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
```Milestone Dhttps://code.briarproject.org/briar/briar/-/issues/243Rotating ReadForumPostActivity causes post to appear anonymous2018-06-12T11:32:33ZakwizgranRotating ReadForumPostActivity causes post to appear anonymousWhen viewing a pseudonymous forum post in ReadForumPostActivity, rotating the screen causes the post to appear anonymous.When viewing a pseudonymous forum post in ReadForumPostActivity, rotating the screen causes the post to appear anonymous.Milestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/242Anonymous forum post crashes ReadForumPostActivity2018-06-12T11:32:33ZakwizgranAnonymous forum post crashes ReadForumPostActivityThe crash is caused by an IllegalStateException thrown when no author reference is retrieved from the ReferenceManager.The crash is caused by an IllegalStateException thrown when no author reference is retrieved from the ReferenceManager.Milestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/241Don't show persistent notification on lock screen2018-06-12T11:32:33ZakwizgranDon't show persistent notification on lock screenAndroid 5 and 6 allow notifications to be shown on the lock screen. Configure Briar's persistent notification so it doesn't appear there.Android 5 and 6 allow notifications to be shown on the lock screen. Configure Briar's persistent notification so it doesn't appear there.Milestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/239Implement proguard and clean up the gradle dependencies2018-06-12T11:32:33ZErnir ErlingssonImplement proguard and clean up the gradle dependenciesFelt right to make this atomicFelt right to make this atomicMilestone Bhttps://code.briarproject.org/briar/briar/-/issues/238Allow messages to be deleted2018-06-12T11:32:33ZakwizgranAllow messages to be deletedAllow messages to be deleted from the database. If a message being deleted is shared, we need to keep enough information about it to avoid syncing it back to life.Allow messages to be deleted from the database. If a message being deleted is shared, we need to keep enough information about it to avoid syncing it back to life.Milestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/237Create client for negotiating supported clients2018-04-29T16:28:05ZakwizgranCreate client for negotiating supported clientsIn future we'll add support for new clients (blogs, group messaging) and we'll need to know which contacts support those clients. Create a BSP client supported by all versions of Briar that syncs a list of supported clients with each con...In future we'll add support for new clients (blogs, group messaging) and we'll need to know which contacts support those clients. Create a BSP client supported by all versions of Briar that syncs a list of supported clients with each contact. The list should include a device ID for future multi-device support.Android 1.0akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/236Migrate to Curve25519 and Ed255192018-02-16T18:19:21Zstr4dMigrate to Curve25519 and Ed25519See comments in #117.See comments in #117.Android 1.0https://code.briarproject.org/briar/briar/-/issues/235Potential deadlock in TransportKeyManager2018-06-12T11:32:33ZakwizgranPotential deadlock in TransportKeyManagerTransportKeyManager uses the single-threaded DatabaseExecutor to ensure its DB tasks write to the DB in the same order as they're queued. This makes it possible to keep TransportKeyManager's internal state consistent with the state of th...TransportKeyManager uses the single-threaded DatabaseExecutor to ensure its DB tasks write to the DB in the same order as they're queued. This makes it possible to keep TransportKeyManager's internal state consistent with the state of the DB without holding locks during DB calls.
To ensure that a StreamContext is never used twice, the two getStreamContext() methods wait for their DB tasks to complete before returning. This will cause deadlock: if the methods are called on the DatabaseExecutor thread, as their DB tasks will be queued behind them and will never complete.
One way to fix this would be for TransportKeyManager to keep its own single-threaded executor for running its DB tasks. KeyManagerImpl already has a Timer thread that could be converted into an executor.
Another possibility would be to return a Future<StreamContext>.Milestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/234Remove consumers from BdfWriter2018-06-12T11:32:33ZakwizgranRemove consumers from BdfWriterMilestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/233Add MAC to messages in private groups2018-01-28T11:30:28ZakwizgranAdd MAC to messages in private groupsFor future multi-device support it would be useful for private groups (i.e. groups shared between a pair of contacts) to be shared by all the contacts' devices, so that messages are automatically synchronised among all devices.
A user...For future multi-device support it would be useful for private groups (i.e. groups shared between a pair of contacts) to be shared by all the contacts' devices, so that messages are automatically synchronised among all devices.
A user's devices need to be able to distinguish remote messages created by the user's other devices from remote messages created by the contact's devices.
A simple way to achieve that is to add a MAC to all messages and share the MAC key between the user's devices. Any message with a valid MAC was created by one of the user's devices, any other message was created by one of the contact's devices.
We're not implementing multi-device support yet, but we should add this now so we don't have to change the wire format later.https://code.briarproject.org/briar/briar/-/issues/231Missing Author names when chatting2018-06-12T11:32:33ZErnir ErlingssonMissing Author names when chattingThe Author names should be displayed while private messaging so that it is easy for the user to figure out which messages belong to him and which belong to the respective contact. Also, this is important to remind the app's user of which...The Author names should be displayed while private messaging so that it is easy for the user to figure out which messages belong to him and which belong to the respective contact. Also, this is important to remind the app's user of which author he used to connect with the contact.https://code.briarproject.org/briar/briar/-/issues/230Make timestamps prettier and more useful2018-06-12T11:32:33ZErnir ErlingssonMake timestamps prettier and more usefulFor recent timestamps we should display the duration since that timestamp, "prettify" it. We don't want the user to have to subtract the current time from the timestamp to find out how long ago something is.
Examples
"2 minutes ago"
...For recent timestamps we should display the duration since that timestamp, "prettify" it. We don't want the user to have to subtract the current time from the timestamp to find out how long ago something is.
Examples
"2 minutes ago"
"3 hours ago"
etc.
Relevant links:
http://stackoverflow.com/questions/13018550/time-since-ago-library-for-android-java
http://www.ocpsoft.org/prettytime/
Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/229Convert TransportPropertyManager into a BSP client2018-04-16T16:24:37ZakwizgranConvert TransportPropertyManager into a BSP clientSubtask of #112Subtask of #112Milestone Aakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/228Briar crashes when TorPlugin tries to create a connection2018-06-12T11:32:33Zstr4dBriar crashes when TorPlugin tries to create a connection```
java.lang.NullPointerException: Attempt to write to field 'java.io.OutputStream net.sourceforge.jsocks.Proxy.out' on a null object reference
at net.sourceforge.jsocks.SocksSocket.doDirect(SocksSocket.java:279)
at net.sourceforge...```
java.lang.NullPointerException: Attempt to write to field 'java.io.OutputStream net.sourceforge.jsocks.Proxy.out' on a null object reference
at net.sourceforge.jsocks.SocksSocket.doDirect(SocksSocket.java:279)
at net.sourceforge.jsocks.SocksSocket.<init>(SocksSocket.java:100)
at org.briarproject.plugins.tor.TorPlugin.createConnection(TorPlugin.java:536)
at org.briarproject.plugins.tor.TorPlugin$2.run(TorPlugin.java:515)
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)
```
In the library sources that Gradle downloaded for me, it looks like the proxy field of the jsocks `SocksSocket` constructor is ignored completely, but the `doDirect()` internal function called by that constructor uses the unset `proxy` variable. This looks like an upstream bug. I don't know how this is working for anyone else, given that the jsocks library is verified by Gradle Witness.Milestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/227Contact list not updating when contact is removed2018-06-12T11:32:33ZakwizgranContact list not updating when contact is removedMilestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/226Fix logic for disabling Bluetooth at shutdown2018-06-12T11:32:33ZakwizgranFix logic for disabling Bluetooth at shutdownIf Bluetooth is disabled when the app starts and the user or another app subsequently enables it, Briar will disable it when shutting down.
The current logic checks whether Bluetooth was disable at startup, and if si, disables it at s...If Bluetooth is disabled when the app starts and the user or another app subsequently enables it, Briar will disable it when shutting down.
The current logic checks whether Bluetooth was disable at startup, and if si, disables it at shutdown. What it should do instead is check whether Bluetooth was disabled startup *and* Briar enabled it at startup, and if so, disable it at shutdown.Milestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/225Bluetooth plugin is broken on Android 62018-06-12T11:32:33ZakwizgranBluetooth plugin is broken on Android 6Android 6 no longer allows access to the local Bluetooth address. `BluetoothAdapter.getAddress()` now returns a fixed value. This will break our ability to give our address to contacts so they can connect without performing discovery.
...Android 6 no longer allows access to the local Bluetooth address. `BluetoothAdapter.getAddress()` now returns a fixed value. This will break our ability to give our address to contacts so they can connect without performing discovery.
https://developer.android.com/intl/ko/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id
The plugin still uses BluetoothAdapter.getAddress(), it's only `TestingActivity` and `CrashReportActivity` that look at the value in `Settings.Secure`. we need to add a method (maybe in `AndroidUtils`?) for getting the value from the adapter, checking whether it's valid, getting the value from `Settings.Secure` if it's not, and throwing an exception if there's not a valid address there either.Milestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/224Adding existing contact with another identity fails2018-06-12T11:32:33ZTorsten GroteAdding existing contact with another identity failsSteps to reproduce:
* Add contact X with first identity A
* Create second identity B
* Add contact X with second identity B
Observe how adding contact X fails while it succeeds for user X.Steps to reproduce:
* Add contact X with first identity A
* Create second identity B
* Add contact X with second identity B
Observe how adding contact X fails while it succeeds for user X.Milestone Bakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/223Unable to add contacts via Bluetooth with Android 62018-06-12T11:32:34ZTorsten GroteUnable to add contacts via Bluetooth with Android 6Apparently, you need the `ACCESS_COARSE_LOCATION` permission to use Bluetooth on Android 6. So we need to ask the user to grant this permission before contacts can be added via Bluetooth.
To quote from the [issue report](https://code....Apparently, you need the `ACCESS_COARSE_LOCATION` permission to use Bluetooth on Android 6. So we need to ask the user to grant this permission before contacts can be added via Bluetooth.
To quote from the [issue report](https://code.google.com/p/android/issues/detail?id=189090):
> To access the hardware identifiers of nearby external devices via Bluetooth and Wi-Fi scans, your app
> must now have the `ACCESS_FINE_LOCATION` or `ACCESS_COARSE_LOCATION` permissions
This is a sub-issue of #158.Milestone BTorsten GroteTorsten Grote