briar issueshttps://code.briarproject.org/briar/briar/-/issues2019-11-07T15:30:08Zhttps://code.briarproject.org/briar/briar/-/issues/1653NPE in SettingsFragment2019-11-07T15:30:08ZakwizgranNPE in SettingsFragment* Android version: 8.1.0
* Phone model: Samsung SM-J727T1 (j7popeltemtr)
* Briar version: 1.2.3 (b464dcc)
Stacktrace:
```
java.lang.NullPointerException: Attempt to invoke virtual method 'int org.briarproject.bramble.api.StringMap.getIn...* Android version: 8.1.0
* Phone model: Samsung SM-J727T1 (j7popeltemtr)
* Briar version: 1.2.3 (b464dcc)
Stacktrace:
```
java.lang.NullPointerException: Attempt to invoke virtual method 'int org.briarproject.bramble.api.StringMap.getInt(java.lang.String, int)' on a null object reference
at org.briarproject.briar.android.settings.SettingsFragment.lambda$displaySettings$5$SettingsFragment(SettingsFragment.java:362)
at org.briarproject.briar.android.settings.-$$Lambda$SettingsFragment$xRJquGmI1azWoHeyvk2gdi8cc28.run(Unknown Source:2)
at org.briarproject.briar.android.activity.BaseActivity.lambda$runOnUiThreadUnlessDestroyed$0$BaseActivity(BaseActivity.java:216)
at org.briarproject.briar.android.activity.-$$Lambda$BaseActivity$fOFM6FuIkzfuGdAaggyXMoMGR0E.run(Unknown Source:4)
at android.app.Activity.runOnUiThread(Activity.java:6355)
at org.briarproject.briar.android.activity.BaseActivity.runOnUiThreadUnlessDestroyed(BaseActivity.java:215)
at org.briarproject.briar.android.settings.SettingsFragment.displaySettings(SettingsFragment.java:357)
at org.briarproject.briar.android.settings.SettingsFragment.eventOccurred(SettingsFragment.java:675)
at org.briarproject.bramble.event.EventBusImpl.lambda$broadcast$0$EventBusImpl(EventBusImpl.java:42)
at org.briarproject.bramble.event.-$$Lambda$EventBusImpl$bRn946wCXST7O6nsMZt_9tnkiuk.run(Unknown Source:4)
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:6958)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
```Android 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1652IllegalArgumentException: pointerIndex out of range2021-06-14T10:46:13ZakwizgranIllegalArgumentException: pointerIndex out of range* Android version: 9
* Phone model: Android Pixel 3a (aosp_sargo)
* Briar version: 1.1.7 (d145a08)
* User feedback: "Zoomed in into a picture."
Stacktrace:
```
java.lang.IllegalArgumentException: pointerIndex out of range
at and...* Android version: 9
* Phone model: Android Pixel 3a (aosp_sargo)
* Briar version: 1.1.7 (d145a08)
* User feedback: "Zoomed in into a picture."
Stacktrace:
```
java.lang.IllegalArgumentException: pointerIndex out of range
at android.view.MotionEvent.nativeGetAxisValue(Native Method)
at android.view.MotionEvent.getX(MotionEvent.java:2205)
at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:2072)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2573)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
at android.app.Activity.dispatchTouchEvent(Activity.java:3401)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398)
at android.view.View.dispatchPointerEvent(View.java:12752)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5113)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4916)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4433)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4486)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4452)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4592)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4460)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4649)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4433)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4486)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4452)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4460)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4433)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7099)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7068)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7029)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7202)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:177)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:7173)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:7225)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:690)
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:6718)
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:876)
```
Looks like a platform bug that would be hard for us to work around.https://code.briarproject.org/briar/briar/-/issues/1651ActivityNotFoundException for RINGTONE_PICKER intent2019-11-06T09:40:45ZakwizgranActivityNotFoundException for RINGTONE_PICKER intent* Android version: 5.1
* Phone model: Motorola XT1040 (peregrine_retca)
* Briar version: 1.1.7 (37d0b61)
* User feedback: "App crashed when modifying notification settings on android 7."
Stacktrace:
```
android.content.ActivityNotFoundE...* Android version: 5.1
* Phone model: Motorola XT1040 (peregrine_retca)
* Briar version: 1.1.7 (37d0b61)
* User feedback: "App crashed when modifying notification settings on android 7."
Stacktrace:
```
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.RINGTONE_PICKER (has extras) }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1872)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1568)
at android.app.Activity.startActivityForResult(Activity.java:3755)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
at android.support.v4.app.ActivityCompat.startActivityForResult(ActivityCompat.java:234)
at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:886)
at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:995)
at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:1103)
at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:1092)
at org.briarproject.briar.android.settings.SettingsFragment.onNotificationSoundClicked(SettingsFragment.java:514)
at org.briarproject.briar.android.settings.SettingsFragment.lambda$null$4$SettingsFragment(SettingsFragment.java:394)
at org.briarproject.briar.android.settings.-$$Lambda$SettingsFragment$2CspLdNI7sBMlbU-DBX3Kpz99VQ.onPreferenceClick(lambda)
at android.support.v7.preference.Preference.performClick(Preference.java:1165)
at android.support.v7.preference.Preference.performClick(Preference.java:1148)
at android.support.v7.preference.Preference$1.onClick(Preference.java:172)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
```
(User says it's Android 7, ACRA says it's Android 5.1.)Android 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1650User couldn't add contact remotely2019-11-04T15:57:31ZakwizgranUser couldn't add contact remotely* Android version: 8.1.0
* Phone model: Asus X00TD (WW_X00TD)
* Briar version: 1.1.7 (4a4d336)
* User feedback: "I failed to add remote contact using link although tried sending both links."
The log shows the LAN plugin being polled sev...* Android version: 8.1.0
* Phone model: Asus X00TD (WW_X00TD)
* Briar version: 1.1.7 (4a4d336)
* User feedback: "I failed to add remote contact using link although tried sending both links."
The log shows the LAN plugin being polled several times, but not the Tor plugin. This suggests the Tor plugin may be disabled, in which case the bug might be that the big red "no internet connection" snackbar on the pending contact list is too subtle. ;-)
Creating this ticket in case we get other reports that shed light on the issue.Android 1.2https://code.briarproject.org/briar/briar/-/issues/1648AssertionError when creating key agreement error fragment2020-11-15T17:25:51ZakwizgranAssertionError when creating key agreement error fragment* Android version: 7.0
* Phone model: Xiaomi Redmi Note 4
* Briar version: 1.1.6 (4d26628)
* Locale: az_AZ
* User set locale: false
Stacktrace:
```
java.lang.AssertionError
at org.briarproject.briar.android.util.UiUtils.onSingle...* Android version: 7.0
* Phone model: Xiaomi Redmi Note 4
* Briar version: 1.1.6 (4d26628)
* Locale: az_AZ
* User set locale: false
Stacktrace:
```
java.lang.AssertionError
at org.briarproject.briar.android.util.UiUtils.onSingleLinkClick(UiUtils.java:200)
at org.briarproject.briar.android.keyagreement.ContactExchangeErrorFragment.onCreateView(ContactExchangeErrorFragment.java:70)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:165)
at android.app.ActivityThread.main(ActivityThread.java:6375)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
```
The assertion is that the text contains a single link. I'm guessing that the translation for az_AZ may be missing the link. Perhaps we should return silently in that case instead of throwing an error?Android 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1647IllegalStateException when choosing attachments to send2023-08-24T14:33:28ZakwizgranIllegalStateException when choosing attachments to send* Android version: 7.1.1
* Phone model: BQ Aquarius X5 Plus
* Briar version: 1.1.9 (debug build, d7c9bf8)
* User feedback: "Crashed when selecting two pictures to send."
Stacktrace:
```
java.lang.RuntimeException: Failure delivering res...* Android version: 7.1.1
* Phone model: BQ Aquarius X5 Plus
* Briar version: 1.1.9 (debug build, d7c9bf8)
* User feedback: "Crashed when selecting two pictures to send."
Stacktrace:
```
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=13, result=-1, data=Intent { flg=0x43 clip={image/jpeg image/png image/gif U:content://com.android.providers.media.documents/document/image%3A87856 ...} }} to activity {org.briarproject.briar.android.debug/org.briarproject.briar.android.conversation.ConversationActivity}: java.lang.IllegalStateException
at android.app.ActivityThread.deliverResults(ActivityThread.java:4089)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.IllegalStateException
at org.briarproject.briar.android.attachment.AttachmentCreatorImpl.storeAttachments(AttachmentCreatorImpl.java:78)
at org.briarproject.briar.android.conversation.ConversationViewModel.storeAttachments(ConversationViewModel.java:206)
at org.briarproject.briar.android.view.TextAttachmentController.onNewUris(TextAttachmentController.java:185)
at org.briarproject.briar.android.view.TextAttachmentController.onImageReceived(TextAttachmentController.java:166)
at org.briarproject.briar.android.conversation.ConversationActivity.onActivityResult(ConversationActivity.java:304)
at android.app.Activity.dispatchActivityResult(Activity.java:6973)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4085)
... 9 more
java.lang.IllegalStateException
at org.briarproject.briar.android.attachment.AttachmentCreatorImpl.storeAttachments(AttachmentCreatorImpl.java:78)
at org.briarproject.briar.android.conversation.ConversationViewModel.storeAttachments(ConversationViewModel.java:206)
at org.briarproject.briar.android.view.TextAttachmentController.onNewUris(TextAttachmentController.java:185)
at org.briarproject.briar.android.view.TextAttachmentController.onImageReceived(TextAttachmentController.java:166)
at org.briarproject.briar.android.conversation.ConversationActivity.onActivityResult(ConversationActivity.java:304)
at android.app.Activity.dispatchActivityResult(Activity.java:6973)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4085)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
```Android 1.3Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1644Briar without app lock via password2019-11-04T10:02:17ZricjdjwoeownsoBriar without app lock via passwordHello I like your Briar App very much,
but I don't find it comfortable as a user.
I only use my Android devices locally. live in the countryside with my family and friends. Because there is no internet here (or very bad). We use Bluetoo...Hello I like your Briar App very much,
but I don't find it comfortable as a user.
I only use my Android devices locally. live in the countryside with my family and friends. Because there is no internet here (or very bad). We use Bluetooth connection.
I like to use the app because you can also use it without internet with your friends or families. And generally the advantages that it is not dependent on an internet server. :)
But with Briar app you always have to enter the password for app lock after restarting the device (or if the battery is empty). But I don't want to enter a password.
When I'm at work in the city. I use another Android device and from the possibilities I like Threema very much.
I enter my number or create a random username and can always open and use the app. without app lock.
Can you add an option for users like me that I don't want to app lock via password?https://code.briarproject.org/briar/briar/-/issues/1643Possible Controller Memory Leaks2019-11-07T16:33:48ZTorsten GrotePossible Controller Memory LeaksNot sure I understand these traces correctly, but they seem to indicate that our controllers are leaking their listeners?
```
019-10-28 15:47:18.340 D/LeakCanary: ┬
2019-10-28 15:47:18.340 D/LeakCanary: ├─ android.view.inputmethod.Input...Not sure I understand these traces correctly, but they seem to indicate that our controllers are leaking their listeners?
```
019-10-28 15:47:18.340 D/LeakCanary: ┬
2019-10-28 15:47:18.340 D/LeakCanary: ├─ android.view.inputmethod.InputMethodManager
2019-10-28 15:47:18.340 D/LeakCanary: │ Leaking: NO (InputMethodManager↓ is not leaking and a class is never leaking)
2019-10-28 15:47:18.341 D/LeakCanary: │ GC Root: System class
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ static InputMethodManager.sInstance
2019-10-28 15:47:18.341 D/LeakCanary: ├─ android.view.inputmethod.InputMethodManager
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (FabSpeedDial↓ is not leaking and InputMethodManager is a singleton)
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ InputMethodManager.mNextServedView
2019-10-28 15:47:18.341 D/LeakCanary: ├─ io.github.kobakei.materialfabspeeddial.FabSpeedDial
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (NavDrawerActivity↓ is not leaking and View attached)
2019-10-28 15:47:18.341 D/LeakCanary: │ mContext instance of org.briarproject.briar.android.navdrawer.NavDrawerActivity with mDestroyed = false
2019-10-28 15:47:18.341 D/LeakCanary: │ View.parent androidx.coordinatorlayout.widget.CoordinatorLayout attached as well
2019-10-28 15:47:18.341 D/LeakCanary: │ View#mParent is set
2019-10-28 15:47:18.341 D/LeakCanary: │ View#mAttachInfo is not null (view attached)
2019-10-28 15:47:18.341 D/LeakCanary: │ View.mWindowAttachCount = 1
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ FabSpeedDial.mContext
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.navdrawer.NavDrawerActivity
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (Activity#mDestroyed is false)
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ NavDrawerActivity.activityComponent
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~~~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.activity.DaggerActivityComponent
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ DaggerActivityComponent.provideFeedControllerProvider
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ dagger.internal.DoubleCheck
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ DoubleCheck.instance
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.blog.FeedControllerImpl
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ FeedControllerImpl.listener
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ╰→ org.briarproject.briar.android.blog.FeedFragment
2019-10-28 15:47:18.341 D/LeakCanary: Leaking: YES (Fragment#mFragmentManager is null and ObjectWatcher was watching this)
2019-10-28 15:47:18.341 D/LeakCanary: key = a5208355-72cd-4f49-80f3-3f6684261091
2019-10-28 15:47:18.341 D/LeakCanary: watchDurationMillis = 2266
2019-10-28 15:47:18.341 D/LeakCanary: retainedDurationMillis = -1
2019-10-28 15:47:18.341 D/LeakCanary: , retainedHeapByteSize=2548), ApplicationLeak(className=org.briarproject.briar.android.privategroup.list.GroupListFragment, leakTrace=
```
```
2019-10-28 15:47:18.341 D/LeakCanary: ┬
2019-10-28 15:47:18.341 D/LeakCanary: ├─ android.view.inputmethod.InputMethodManager
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (InputMethodManager↓ is not leaking and a class is never leaking)
2019-10-28 15:47:18.341 D/LeakCanary: │ GC Root: System class
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ static InputMethodManager.sInstance
2019-10-28 15:47:18.341 D/LeakCanary: ├─ android.view.inputmethod.InputMethodManager
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (FabSpeedDial↓ is not leaking and InputMethodManager is a singleton)
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ InputMethodManager.mNextServedView
2019-10-28 15:47:18.341 D/LeakCanary: ├─ io.github.kobakei.materialfabspeeddial.FabSpeedDial
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (NavDrawerActivity↓ is not leaking and View attached)
2019-10-28 15:47:18.341 D/LeakCanary: │ mContext instance of org.briarproject.briar.android.navdrawer.NavDrawerActivity with mDestroyed = false
2019-10-28 15:47:18.341 D/LeakCanary: │ View.parent androidx.coordinatorlayout.widget.CoordinatorLayout attached as well
2019-10-28 15:47:18.341 D/LeakCanary: │ View#mParent is set
2019-10-28 15:47:18.341 D/LeakCanary: │ View#mAttachInfo is not null (view attached)
2019-10-28 15:47:18.341 D/LeakCanary: │ View.mWindowAttachCount = 1
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ FabSpeedDial.mContext
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.navdrawer.NavDrawerActivity
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: NO (Activity#mDestroyed is false)
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ NavDrawerActivity.activityComponent
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~~~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.activity.DaggerActivityComponent
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ DaggerActivityComponent.provideGroupListControllerProvider
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ dagger.internal.DoubleCheck
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ DoubleCheck.instance
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ├─ org.briarproject.briar.android.privategroup.list.GroupListControllerImpl
2019-10-28 15:47:18.341 D/LeakCanary: │ Leaking: UNKNOWN
2019-10-28 15:47:18.341 D/LeakCanary: │ ↓ GroupListControllerImpl.listener
2019-10-28 15:47:18.341 D/LeakCanary: │ ~~~~~~~~
2019-10-28 15:47:18.341 D/LeakCanary: ╰→ org.briarproject.briar.android.privategroup.list.GroupListFragment
2019-10-28 15:47:18.341 D/LeakCanary: Leaking: YES (Fragment#mFragmentManager is null and ObjectWatcher was watching this)
2019-10-28 15:47:18.341 D/LeakCanary: key = dd89f2de-3b6e-40e3-9d63-2484dea5702a
2019-10-28 15:47:18.341 D/LeakCanary: watchDurationMillis = 30199
2019-10-28 15:47:18.341 D/LeakCanary: retainedDurationMillis = 25198
2019-10-28 15:47:18.341 D/LeakCanary: , retainedHeapByteSize=181665)], libraryLeaks=[])
```Android 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1642Search function2019-11-04T11:03:23ZjomocuSearch functionAdd an option to search contacts, or search messages from contacts.
In turn allow search for something within the chat, group, etc...
It would be a good idea :)Add an option to search contacts, or search messages from contacts.
In turn allow search for something within the chat, group, etc...
It would be a good idea :)https://code.briarproject.org/briar/briar/-/issues/1640add proxy options2019-10-25T18:22:56Zjomocuadd proxy optionsAdd options to add an proxy https, socks ...Add options to add an proxy https, socks ...https://code.briarproject.org/briar/briar/-/issues/1639Improve User profile2019-11-04T11:04:37ZjomocuImprove User profileIt would be great if everyone had their user profile, in which optional information can be added, for example, email, phone number, age, gender and biography, etc.
It would also be interesting to put states in the profile of each user (B...It would be great if everyone had their user profile, in which optional information can be added, for example, email, phone number, age, gender and biography, etc.
It would also be interesting to put states in the profile of each user (Busy, Absent, Invisible, Disconnected or Connected)https://code.briarproject.org/briar/briar/-/issues/1638Image support not updated while conversation is open2019-11-06T17:55:06ZTorsten GroteImage support not updated while conversation is open[User testing has identified an issue](https://code.briarproject.org/briar/briar/issues/1243#note_38091) that the conversation does not update its image support status when this becomes available while the conversation is already open.[User testing has identified an issue](https://code.briarproject.org/briar/briar/issues/1243#note_38091) that the conversation does not update its image support status when this becomes available while the conversation is already open.Android 1.3akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1636Compression of small images throws exception2020-01-08T16:06:41ZTorsten GroteCompression of small images throws exceptionWhen sending images on Android 10 (did not test other versions) smaller than 32KB, the app shows an error and an `IOException` is thrown.
```java
if (!bitmap.compress(JPEG, quality, out))
throw new I...When sending images on Android 10 (did not test other versions) smaller than 32KB, the app shows an error and an `IOException` is thrown.
```java
if (!bitmap.compress(JPEG, quality, out))
throw new IOException();
```
Sending images larger than 32 KB works just fine.Android 1.3Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1634Raise target API level to 282019-10-22T15:14:15ZakwizgranRaise target API level to 28From 1 November Google Play requires all updates to target API 28 or higher. Even if 1.2 is released before 1 November it might make sense to raise the target API level for that release so we don't have to worry about it later if we need...From 1 November Google Play requires all updates to target API 28 or higher. Even if 1.2 is released before 1 November it might make sense to raise the target API level for that release so we don't have to worry about it later if we need to make an urgent bugfix release.Android 1.2akwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/1633Raise minimum API level to 162019-10-14T15:37:45ZakwizgranRaise minimum API level to 16Devices running API 15 account for less than 1/1000 of our active installs according to Google Play.
Removing the non-PIE 32-bit binaries for Tor and obfsproxy, which are only needed for API 15, will make room for the 64-bit PIE binarie...Devices running API 15 account for less than 1/1000 of our active installs according to Google Play.
Removing the non-PIE 32-bit binaries for Tor and obfsproxy, which are only needed for API 15, will make room for the 64-bit PIE binaries. There may also be some conditional code we can remove. One of the test devices will have to be retired. :crying_cat_face:Android 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1632Unable to re-share Shareable2019-10-14T14:29:57ZTorsten GroteUnable to re-share ShareableA leaves, sends `REMOTE_LEAVE` to B and goes into `LOCAL_LEFT` state. Now B also leaves and since it got the leave message from A, it does nothing, just moves into `START` state. Provided that A and B get access to the forum again throug...A leaves, sends `REMOTE_LEAVE` to B and goes into `LOCAL_LEFT` state. Now B also leaves and since it got the leave message from A, it does nothing, just moves into `START` state. Provided that A and B get access to the forum again through other contacts, B can still share the forum with A while A is permanently blocked from sharing it again with B, because it is stuck in the `LOCAL_LEFT` state.
https://code.briarproject.org/briar/briar/commits/shareable-re-sharing-issueAndroid 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1630Remove anonymous author status2022-09-06T09:56:47ZakwizgranRemove anonymous author statusRemove the obsolete AuthorInfo.Status.ANONYMOUS constant and the corresponding drawable for the trust indicator.Remove the obsolete AuthorInfo.Status.ANONYMOUS constant and the corresponding drawable for the trust indicator.Android 1.4https://code.briarproject.org/briar/briar/-/issues/1629Support for deleting a subset of all conversation messages2019-10-28T16:53:17ZTorsten GroteSupport for deleting a subset of all conversation messagesSubtask of #68
* [x] method to `ConversationClient` that returns a set of `MessageId`s it is responsible for
* [x] method to `ConversationClient` to delete a set of messages identified by `MessageId`
* [x] method to `ConversationManager...Subtask of #68
* [x] method to `ConversationClient` that returns a set of `MessageId`s it is responsible for
* [x] method to `ConversationClient` to delete a set of messages identified by `MessageId`
* [x] method to `ConversationManager` for deleting a set of messages identified by `MessageId`. This will intersect the IDs from the clients with IDs to be deleted and as the client to only delete this intersection
Implementation plan for deleting messages in ConversationClients builds on work done in #1627.
* parse message visibility for session's messages (true if visible in UI)
* when looping over all sessions check that all visible messages were selected for deletion, if not, do not delete sessionAndroid 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1628Multi-select conversion messages to delete2019-11-08T15:58:43ZTorsten GroteMulti-select conversion messages to deleteSubtask of #68
Add multi-selection of messages to conversation view and add a delete action for ActionMode.
If we migrated to AndroidX when working on this ticket, we could use the [androidx.recyclerview.selection](https://developer.an...Subtask of #68
Add multi-selection of messages to conversation view and add a delete action for ActionMode.
If we migrated to AndroidX when working on this ticket, we could use the [androidx.recyclerview.selection](https://developer.android.com/reference/androidx/recyclerview/selection/package-summary) library. Article: https://proandroiddev.com/a-guide-to-recyclerview-selection-3ed9f2381504Android 1.2Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/1627Delete all invitation/introduction messages for completed sessions2019-10-14T12:57:58ZTorsten GroteDelete all invitation/introduction messages for completed sessionsSubtask of #68
* [x] Implement the no-ops from #1625 in the remaining `ConversationClient`s that deletes all completed sessions. A session is complete if it is in a completed state and all messages have been ACKed.
* [x] Introductio...Subtask of #68
* [x] Implement the no-ops from #1625 in the remaining `ConversationClient`s that deletes all completed sessions. A session is complete if it is in a completed state and all messages have been ACKed.
* [x] Introductions: If the session isn't in the start state or there are sent-but-unacked messages, refuse to delete the session. Otherwise delete all messages and their metadata, but leave the session storage message
* [x] Blogs/Forums: If the session has an invite available to answer, refuse to delete the session. Otherwise delete all visible messages and their metadata, but leave invisible messages and the session storage message
* [x] Private Groups: If the session has an invite available to answer, refuse to delete the session. Otherwise delete all visible messages and their metadata, but leave invisible messages and the session storage message
* [x] Update UI dialog to explain that ongoing invitations/introductions can't be deleted
Implementation plan:
* look up all the message metadata
* look up all message states
* loop over all message states and create hash set of message ids that are sent but not acked
* loop over all the message metadata finding session storage objects messages and creating session objects
* loop over it again assigning protocol messages to their sessions
* loop over all sessions: If session state is completed and all messages were ACKed, delete entire session, else remember non-deletion
* return false if at least one session could not be deletedAndroid 1.2Torsten GroteTorsten Grote