this happens only in rare cases as usually the message is always added
and errors happen far later.
but some conditions are checked very soon (webxdc sizes),
and these let an message not even being added.
note, that this pr only shows the error,
it does not change draft handling or so -
it would eg. be better if the message is re-converted to a draft,
however, that would be a larger refactoring and maybe not worth the effort.
* add new w30 APIs
* create the webview,
disable internet access,
inject deltachat.js
* connect deltachat to the webview
* promisify api
* use msgActionButton to start the w30 apps
* cleanup
- create observers in onCreate() to avoid memory leak,
- derive from WebViewActivity to easier deal with particularities
and to saves >100 loc
- reorder some methods to reflect lifetimes
* make it more clear, which uri-part is 'domain' and which one is 'path'
* unify logging
* it is 'statusUpdate' not 'stateUpdate'; not sure if promise is needed at the end, we can readd that as needed, simple code for now
* use core implementation for status updates
* disable debugging enabled by default, streamline code
* use same name for InternalJSApi for both, js and java
* getStatusUpdates() always return an array
* call JSON.stringify() on payload
* fix typo, fix equal operator
* use shorter function names in js land
* adapt to new zipped w30 format
* load any file from w30 archives
* add fallback if getMimeTypeFromExtension() fails
* rename w30 to webxdc
* add selfName()
* return selfAddr() if selfName() is empty
* rename deltachat.js to webxdc.js
* observer correct event
* rename getBlobFromArchive() to getWebxdcBlob()
* show webxdc app name in title bar
* swap payload and descr in sendUpdate() (adapt to new core api)
* allow user-defined-texts for webxdc apps, make room for icon+name
* show webxdc icon and name in chats
* render webxdc drafts accordingly
* allow configuring drafts
* do not destroy webxdc-message to be sent out by removing it via setDraft(null)
* fix crash when replying to webxdc messages
* add webxdc messages to profile's document tab
* hide 'search menu' for webxdc apps
* show app summary beside app icon
* remove outdated comment
* add precautious WebView restrictions
* Update src/org/thoughtcrime/securesms/ConversationItem.java
Co-authored-by: Asiel Díaz Benítez <adbenitez@nauta.cu>
* Update src/org/thoughtcrime/securesms/ConversationItem.java
Co-authored-by: Asiel Díaz Benítez <adbenitez@nauta.cu>
* Update src/org/thoughtcrime/securesms/ConversationActivity.java
Co-authored-by: Hocuri <hocuri@gmx.de>
* Webxdc requires at least Android 5 Lollipop
see https://github.com/deltachat/deltachat-android/pull/2174#discussion_r785436874
* recognize .xdc files on android10
based on @Hocuri's findings in #2188
Co-authored-by: Simon Laux <mobile.info@simonlaux.de>
Co-authored-by: adbenitez <asieldbenitez@gmail.com>
Co-authored-by: Asiel Díaz Benítez <adbenitez@nauta.cu>
Co-authored-by: Hocuri <hocuri@gmx.de>
it was removed to have some less menu entries,
however, on recent discussions,
it turns out clearer and clearte that this will break some workflows
(writing text first, then adding attachment).
i just had a look at other "large" messengers -
all of them support "write text, then add attachment" -
as well as our iOS and Desktop apps.
also, this order seems to be pretty normal when it comes to "E-Mail".
all in all,
i think, we should not sacrify this workflow just to save one menu entry.
at some point,
maybe we want to have the "Attach" button always visible left of the input bar
as most other messengers do (as well as iOS and Desktop),
however, this is a larger thing and also has its drawbacks on smaller screens.
so, just leave things as is seems not to be the worse idea here.
the "View Profile" menu entry, however stays, removed,
so, there is some cleanup.
* rename isGroup() to isMultiUser()
* rename isGroupConversation()/isPushGroupConversation() to isMultiUser()
* rename chatIsGroup to chatIsMultiUser
* rename isGroupRecipient() to isMultiUserRecipient()
* add broadcasts ffi
* add 'broadcast' options to menu, chat, profile etc.
* generate initial broadcast names
* reword broadcast hint
* make 'Broadcasts Lists' experimental; while on that, also add a confirmation dialog to the location streaming switch (wording taken from ios)
* Update res/values/strings.xml
Co-authored-by: Hocuri <hocuri@gmx.de>
* comment on strings.xml
* tweak 'experimental' appearing, avoid the 'test tube'-emoji that is not supported on many devices
Co-authored-by: Hocuri <hocuri@gmx.de>
Fix#2032
The problem was that after returning from the image editor, `doReinitializeDraft` was true and therefore we the draft was reinitialized to the originally shared, unedited image.
This was introduced in
https://github.com/deltachat/deltachat-android/pull/1770. I im pretty
sure that what I changed is fine, but we had so many regressions in the
past in this area that we should thoroughly test this change before
merging.
I extended
https://github.com/deltachat/interface/edit/master/user-testing/mailto-links.md
a bit; before merging this PR we should test that everything there still
works.
Steps to reproduce the bug:
- Search and select an archived chat
- Press back
Expected: Go back to the search activity.
Actual: Go to the Archived chats list activity. The user has to press
"back" again to get to the search.
Steps to reproduce the bug:
- Go to a contact request
- Go to the profile
- Block the contact
- Press back
Expected behavior: Only the compose panel is shown, not the request
buttons.
Actual behavior: Both the panel and the request buttons are shown
because the panel visibility is updated, but not the request button's.
I fixed this by always calling `initializeContactRequest()` after
`setComposePanelVisibility()`.
* stop observing DC_EVENT_CONTACTS_CHANGED events before blocking chat so the input bar is not made visible in handleEvent()
* add comment about removing DC_EVENT_CONTACTS_CHANGED observer on blocking
Co-authored-by: B. Petersen <r10s@b44t.com>
* hide question from request panel for now, if needed we can do something more specific in the future
* remove 'Done' toast to avoid problems with lost activity
for whatever reason,
i just got a crash related to the toast that could not find its activity,
probably we should have used the app context and not the activity.
however, the toast was annoying me already,
there is no point in adding it, the change is visible instantly to the user
on the screen.
the functions were part of ApplicationDcContext for no special reason,
however, now standing in the way of avoiding subclassing DcContext
(to use the DcContext objects returned from DcAccounts directly).
See deltachat/deltachat-core-rust#2514
Fixes#1963Fixes#1890
Before deleting a chat the user is asked for confirmation. Before blocking not, because blocking is not "destructive" (i.e. can be completely reverted by unblocking the contact). I'm wondering whether we should show a snackbar with an Undo button though, but we can probably wait for user feedback on this.
* Start removing deaddrop chat
* Generally works
* Fix the buttons
(it's not easy to not show one of the buttons in
ConstraintLayout; if problems turn up, we should probably
just not use ConstraintLayout)
* fix more things
* restartLoader() instead of notifyDataSetChanged() because the latter didn't do anything
* Archived badge
* Rename "Contact request" to "Request"
* oops
* Remove setStockTranslation(8, context.getString(R.string.chat_contact_request));
* Remove commented-out code, we probably won't need it
* Don't show "Delete" button for 1:1 chats
* Get rid of short flickering when declining a request
* Set the app's night mode to match the preference
This added 6ms to startup time, but I think that's OK, as
we will also be able to use more `-night` views in the future
* Make "Accept" text a bit brighter and easier to read in dark mode
* Check if the chattype is Group instead of members.length == 1
- Imediately hide the compose panel when you left the group and
EVENT_CHAT_CHANGED was sent
- Hide the "Leave" button if you are not a member of a group. I solved
this by checking `canSend()`; I could also have checked
`dc_is_contact_in_chat(CONTACT_ID_SELF)`, but this would be more
complexity for now.
When we add the possibility to leave mailing lists, the core will have
to explicitly tell the UI whether it's possible to leave a chat, but
that's not for now.
once the sticker is sent together with the quote,
the quote is cleared.
if there is some draft text, however, that is kept as draft.
tickers together with text are discouraged.
* Adapt to mailing lists
* Change the question if this is a mailing list (untested)
* rm unused fn
* Adapt to getSenderName -> getOverrideSenderName (untested)
* Use dc_msg_get_sender_first_name() because sometimes the first name was not correctly shown in mailing lists
* Don't let the user modify mailing list groups
* Fix crash
* Make Unnamed newsletter translatable, make the subtitle of mailing lists "Mailing list"
* tweak and hide some controls for mailing lists
* Update src/com/b44t/messenger/DcChat.java
Co-authored-by: bjoern <r10s@b44t.com>
* adapt to new dc_msg_get_real_chat() api, remove dc_msg_get_sender_first_name()
* remove now dead code
* add mailing list name to contact-request-question
move question-creation to a helper class
to avoid duplicated code.
* fix DcMsg.getOverrideSenderName()
* adapt to new dc_decide_on_contact_request() api
* re-allow changing name+image for mailinglists, see recent discussions on PRs
* remove memberlist- and settings-tab from mailinglist profile until there is some use for them
* adapt to new DC_CHAT_TYPE_MAILINGLIST type
Co-authored-by: Hocuri <hocuri@gmx.de>
add a static boolean doReinitializeDraft that is set to true in onPause() if this activity was started using startActivityForResult(). in onResume(), do if(doReinitializeDraft) { initializeDraft(); }.
Some people reported that drafts were disappearing, and I found a way to
reproduce it (my interpretation in brackets):
- Open Saved Messages chat, could be any other chat too
- Go to another app and share to DC
- In DC select Saved Messages
- (as sharing is done using startActivityForResult(), a second
ConversationActivity is created without affecting the existing one)
- Leave DC. (The second ConversationActivity will correctly save its
draft to the db)
- Open DC again from the "Recent apps". (The first ConversationActivity
will be loaded. It will not know that there is a newer draft and still
show the old draft, or nothing if there was none. When it's closed, it
will overwrite the draft)
I came to this conclusion by logging all writes to the draft in the db.
Also, when I set `REQUEST_RELAY` to -1 (`startActivityForResult(intent,
-1) will behave the same as `startActivity(intent)`) (but that's not a
solution, sometimes we need startActivityForResult(), see e.g.
https://github.com/deltachat/deltachat-android/pull/1412)
What's still a little weird: I tried replacing all calls to
`startActivityForResult(-intent for ConversationActivity-)` with
startActivity(), and the issue didn't go away. Apparently it's only
enough if all calls are replaced, which is the same as setting
`REQUEST_RELAY` to -1. Maybe it's enough if one activity in the call
chain is called using startActivityForResult().
The call to `initializeDraft()` makes the activity start & resume 2-3ms
slower, which is probably acceptable.
While going back and forth with activities & sharing, I also encountered
some more bugs (without trying to reproduce them), but they are not too
annoying (as opposed to losing your draft) and I'm hesitant to changing
the activity-switching logic too much as it is so easy to just break
things again.
the warning about outdated apps
was pretty unreliable in the past -
because of too short timings
and also because of the "installation date"
and the fact that an "installer" was used, is not always reliable.
also, the "installer date" could be wrong -
if the installation was done when the clock was altered badly.
as we cannot rely on the things the system provides here,
we move the whole thing to the core at
https://github.com/deltachat/deltachat-core-rust/pull/1901
which has also the advantage that this is done for all uis then.