2018-01-25 04:17:44 +01:00
|
|
|
/*
|
2016-12-26 04:00:33 +01:00
|
|
|
* Copyright (C) 2016 Open Whisper Systems
|
2015-05-19 10:24:08 +02:00
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package org.thoughtcrime.securesms.notifications;
|
|
|
|
|
2018-01-25 04:17:44 +01:00
|
|
|
import android.annotation.SuppressLint;
|
2018-02-02 04:22:48 +01:00
|
|
|
import android.content.BroadcastReceiver;
|
2015-05-19 10:24:08 +02:00
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.os.AsyncTask;
|
|
|
|
import android.os.Bundle;
|
2021-10-04 09:51:19 +02:00
|
|
|
|
2020-08-19 02:06:26 +02:00
|
|
|
import androidx.core.app.RemoteInput;
|
2015-05-19 10:24:08 +02:00
|
|
|
|
2021-10-04 09:51:19 +02:00
|
|
|
import org.session.libsession.messaging.messages.signal.OutgoingMediaMessage;
|
2021-03-02 02:24:09 +01:00
|
|
|
import org.session.libsession.messaging.messages.signal.OutgoingTextMessage;
|
|
|
|
import org.session.libsession.messaging.messages.visible.VisibleMessage;
|
2021-03-11 05:56:40 +01:00
|
|
|
import org.session.libsession.messaging.sending_receiving.MessageSender;
|
2021-10-04 09:51:19 +02:00
|
|
|
import org.session.libsession.utilities.Address;
|
|
|
|
import org.session.libsession.utilities.recipients.Recipient;
|
2021-05-18 01:12:33 +02:00
|
|
|
import org.session.libsignal.utilities.Log;
|
2020-06-26 08:18:19 +02:00
|
|
|
import org.thoughtcrime.securesms.ApplicationContext;
|
2016-10-10 20:13:37 +02:00
|
|
|
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
|
2021-10-04 09:51:19 +02:00
|
|
|
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
|
|
|
import org.thoughtcrime.securesms.dependencies.DatabaseComponent;
|
2021-03-02 02:24:09 +01:00
|
|
|
import org.thoughtcrime.securesms.mms.MmsException;
|
2015-05-19 10:24:08 +02:00
|
|
|
|
2018-04-27 02:03:54 +02:00
|
|
|
import java.util.Collections;
|
2016-02-20 02:07:41 +01:00
|
|
|
import java.util.List;
|
2015-10-13 03:25:05 +02:00
|
|
|
|
2015-05-19 10:24:08 +02:00
|
|
|
/**
|
|
|
|
* Get the response text from the Wearable Device and sends an message as a reply
|
|
|
|
*/
|
2018-02-02 04:22:48 +01:00
|
|
|
public class RemoteReplyReceiver extends BroadcastReceiver {
|
2015-05-19 10:24:08 +02:00
|
|
|
|
2017-08-01 17:56:00 +02:00
|
|
|
public static final String TAG = RemoteReplyReceiver.class.getSimpleName();
|
2020-03-11 23:52:42 +01:00
|
|
|
public static final String REPLY_ACTION = "network.loki.securesms.notifications.WEAR_REPLY";
|
2017-08-01 17:56:00 +02:00
|
|
|
public static final String ADDRESS_EXTRA = "address";
|
2019-05-06 23:18:58 +02:00
|
|
|
public static final String REPLY_METHOD = "reply_method";
|
2015-05-19 10:24:08 +02:00
|
|
|
|
2018-01-25 04:17:44 +01:00
|
|
|
@SuppressLint("StaticFieldLeak")
|
2015-05-19 10:24:08 +02:00
|
|
|
@Override
|
2018-02-02 04:22:48 +01:00
|
|
|
public void onReceive(final Context context, Intent intent) {
|
2015-06-14 05:23:30 +02:00
|
|
|
if (!REPLY_ACTION.equals(intent.getAction())) return;
|
2015-05-19 10:24:08 +02:00
|
|
|
|
|
|
|
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
|
|
|
|
|
2015-06-14 05:23:30 +02:00
|
|
|
if (remoteInput == null) return;
|
2015-05-19 10:24:08 +02:00
|
|
|
|
2017-08-01 17:56:00 +02:00
|
|
|
final Address address = intent.getParcelableExtra(ADDRESS_EXTRA);
|
2019-05-06 23:18:58 +02:00
|
|
|
final ReplyMethod replyMethod = (ReplyMethod) intent.getSerializableExtra(REPLY_METHOD);
|
2020-06-26 08:18:19 +02:00
|
|
|
final CharSequence responseText = remoteInput.getCharSequence(DefaultMessageNotifier.EXTRA_REMOTE_REPLY);
|
2015-05-19 10:24:08 +02:00
|
|
|
|
2019-05-06 23:18:58 +02:00
|
|
|
if (address == null) throw new AssertionError("No address specified");
|
|
|
|
if (replyMethod == null) throw new AssertionError("No reply method specified");
|
|
|
|
|
2018-02-02 04:22:48 +01:00
|
|
|
if (responseText != null) {
|
2015-05-19 10:24:08 +02:00
|
|
|
new AsyncTask<Void, Void, Void>() {
|
|
|
|
@Override
|
|
|
|
protected Void doInBackground(Void... params) {
|
2017-08-22 03:32:38 +02:00
|
|
|
Recipient recipient = Recipient.from(context, address, false);
|
2021-10-04 09:51:19 +02:00
|
|
|
ThreadDatabase threadDatabase = DatabaseComponent.get(context).threadDatabase();
|
|
|
|
long threadId = threadDatabase.getOrCreateThreadIdFor(recipient);
|
2021-03-02 02:24:09 +01:00
|
|
|
VisibleMessage message = new VisibleMessage();
|
2021-03-11 05:56:40 +01:00
|
|
|
message.setSentTimestamp(System.currentTimeMillis());
|
2021-03-02 02:24:09 +01:00
|
|
|
message.setText(responseText.toString());
|
2016-02-06 01:10:33 +01:00
|
|
|
|
2019-05-06 23:18:58 +02:00
|
|
|
switch (replyMethod) {
|
|
|
|
case GroupMessage: {
|
2021-03-02 02:24:09 +01:00
|
|
|
OutgoingMediaMessage reply = OutgoingMediaMessage.from(message, recipient, Collections.emptyList(), null, null);
|
|
|
|
try {
|
Performance improvements and bug fixes (#869)
* refactor: fail on testSnode instead of recursively using up snode list. add call timeout on http client
* refactor: refactoring batch message receives and pollers
* refactor: reduce thread utils pool count to a 2 thread fixed pool. Do a check against pubkey instead of room names for oxenHostedOpenGroup
* refactor: caching lib with potential loader fixes and no-cache for giphy
* refactor: remove store and instead use ConcurrentHashMap with a backing update coroutine
* refactor: queue trim thread jobs instead of add every message processed
* fix: wrapping auth token and initial sync for open groups in a threadutils queued runnable, getting initial sync times down
* fix: fixing the user contacts cache in ConversationAdapter.kt
* refactor: improve polling and initial sync, move group joins from config messages into a background job fetching image.
* refactor: improving the job queuing for open groups, replacing placeholder avatar generation with a custom glide loader and archiving initial sync of open groups
* feat: add OpenGroupDeleteJob.kt
* feat: add open group delete job to process deletions after batch adding
* feat: add vacuum and fix job queue re-adding jobs forever, only try to set message hash values in DB if they have changed
* refactor: remove redundant inflation for profile image views throughout app
* refactor(wip): reducing layout inflation and starting to refactor the open group deletion issues taking a long time
* refactor(wip): refactoring group deletion to not iterate through and delete messages individually
* refactor(wip): refactoring group deletion to not iterate through and delete messages individually
* fix: group deletion optimisation
* build: bump build number
* build: bump build number and fix batch message receive retry logic
* fix: clear out open group deletes
* fix: update visible ConversationAdapter.kt binding for initial contact fetching and better traces for debugging background jobs
* fix: add in check for / force sync latest encryption key pair from linked devices if we already have that closed group
* Rename .java to .kt
* refactor: change MmsDatabase to kotlin to make list operations easier
* fix: nullable type
* fix: compilation issues and constants in .kt instead of .java
* fix: bug fix expiration timer on closed group recipient
* feat: use the job queue properly across executors
* feat: start on open group dispatcher-specific logic, probably a queue factory based on openGroupId if that is the same across new message and deletion jobs to ensure consistent entry and removal
* refactor: removing redundant code and fixing jobqueue per opengroup
* fix: allow attachments in note to self
* fix: make the minWidth in quote view bind max of text / title and body, wrapped ?
* fix: fixing up layouts and code view layouts
* fix: remove TODO, remove timestamp binding
* feat: fix view logic, avatars and padding, downloading attachments lazily (on bind), fixing potential crash, add WindowDebouncer.kt
* fix: NPE on viewModel recipient from removed thread while tearing down the Recipient observer in ConversationActivityV2.kt
* refactor: replace conversation notification debouncer handler with handlerthread, same as conversation list debouncer
* refactor: UI for groups and poller improvements
* fix: revert some changes in poller
* feat: add header back in for message requests
* refactor: remove Trace calls, add more conditions to the HomeDiffUtil for updating more efficiently
* feat: try update the home adapter if we get a profile picture modified event
* feat: bump build numbers
* fix: try to start with list in homeViewModel if we don't have already, render quotes to be width of attachment slide view instead of fixed
* fix: set channel to be conflated instead of no buffer
* fix: set unreads based off last local user message vs incrementing unreads to be all amount
* feat: add profile update flag, update build number
* fix: link preview thumbnails download on bind
* fix: centercrop placeholder in glide request
* feat: recycle the contact selection list and profile image in unbind
* fix: try to prevent user KP crash at weird times
* fix: remove additional log, improve attachment download success rate, fix share logs dialog issue
2022-06-08 09:12:34 +02:00
|
|
|
DatabaseComponent.get(context).mmsDatabase().insertMessageOutbox(reply, threadId, false, null, true);
|
2021-03-11 05:56:40 +01:00
|
|
|
MessageSender.send(message, address);
|
2021-03-02 02:24:09 +01:00
|
|
|
} catch (MmsException e) {
|
|
|
|
Log.w(TAG, e);
|
|
|
|
}
|
2019-05-06 23:18:58 +02:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case SecureMessage: {
|
2021-03-02 02:24:09 +01:00
|
|
|
OutgoingTextMessage reply = OutgoingTextMessage.from(message, recipient);
|
Performance improvements and bug fixes (#869)
* refactor: fail on testSnode instead of recursively using up snode list. add call timeout on http client
* refactor: refactoring batch message receives and pollers
* refactor: reduce thread utils pool count to a 2 thread fixed pool. Do a check against pubkey instead of room names for oxenHostedOpenGroup
* refactor: caching lib with potential loader fixes and no-cache for giphy
* refactor: remove store and instead use ConcurrentHashMap with a backing update coroutine
* refactor: queue trim thread jobs instead of add every message processed
* fix: wrapping auth token and initial sync for open groups in a threadutils queued runnable, getting initial sync times down
* fix: fixing the user contacts cache in ConversationAdapter.kt
* refactor: improve polling and initial sync, move group joins from config messages into a background job fetching image.
* refactor: improving the job queuing for open groups, replacing placeholder avatar generation with a custom glide loader and archiving initial sync of open groups
* feat: add OpenGroupDeleteJob.kt
* feat: add open group delete job to process deletions after batch adding
* feat: add vacuum and fix job queue re-adding jobs forever, only try to set message hash values in DB if they have changed
* refactor: remove redundant inflation for profile image views throughout app
* refactor(wip): reducing layout inflation and starting to refactor the open group deletion issues taking a long time
* refactor(wip): refactoring group deletion to not iterate through and delete messages individually
* refactor(wip): refactoring group deletion to not iterate through and delete messages individually
* fix: group deletion optimisation
* build: bump build number
* build: bump build number and fix batch message receive retry logic
* fix: clear out open group deletes
* fix: update visible ConversationAdapter.kt binding for initial contact fetching and better traces for debugging background jobs
* fix: add in check for / force sync latest encryption key pair from linked devices if we already have that closed group
* Rename .java to .kt
* refactor: change MmsDatabase to kotlin to make list operations easier
* fix: nullable type
* fix: compilation issues and constants in .kt instead of .java
* fix: bug fix expiration timer on closed group recipient
* feat: use the job queue properly across executors
* feat: start on open group dispatcher-specific logic, probably a queue factory based on openGroupId if that is the same across new message and deletion jobs to ensure consistent entry and removal
* refactor: removing redundant code and fixing jobqueue per opengroup
* fix: allow attachments in note to self
* fix: make the minWidth in quote view bind max of text / title and body, wrapped ?
* fix: fixing up layouts and code view layouts
* fix: remove TODO, remove timestamp binding
* feat: fix view logic, avatars and padding, downloading attachments lazily (on bind), fixing potential crash, add WindowDebouncer.kt
* fix: NPE on viewModel recipient from removed thread while tearing down the Recipient observer in ConversationActivityV2.kt
* refactor: replace conversation notification debouncer handler with handlerthread, same as conversation list debouncer
* refactor: UI for groups and poller improvements
* fix: revert some changes in poller
* feat: add header back in for message requests
* refactor: remove Trace calls, add more conditions to the HomeDiffUtil for updating more efficiently
* feat: try update the home adapter if we get a profile picture modified event
* feat: bump build numbers
* fix: try to start with list in homeViewModel if we don't have already, render quotes to be width of attachment slide view instead of fixed
* fix: set channel to be conflated instead of no buffer
* fix: set unreads based off last local user message vs incrementing unreads to be all amount
* feat: add profile update flag, update build number
* fix: link preview thumbnails download on bind
* fix: centercrop placeholder in glide request
* feat: recycle the contact selection list and profile image in unbind
* fix: try to prevent user KP crash at weird times
* fix: remove additional log, improve attachment download success rate, fix share logs dialog issue
2022-06-08 09:12:34 +02:00
|
|
|
DatabaseComponent.get(context).smsDatabase().insertMessageOutbox(threadId, reply, false, System.currentTimeMillis(), null, true);
|
2021-03-11 05:56:40 +01:00
|
|
|
MessageSender.send(message, address);
|
2019-05-06 23:18:58 +02:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
throw new AssertionError("Unknown Reply method");
|
2015-06-14 05:23:30 +02:00
|
|
|
}
|
2015-05-19 10:24:08 +02:00
|
|
|
|
2021-10-04 09:51:19 +02:00
|
|
|
List<MarkedMessageInfo> messageIds = threadDatabase.setRead(threadId, true);
|
2017-02-14 07:35:47 +01:00
|
|
|
|
2020-06-26 08:18:19 +02:00
|
|
|
ApplicationContext.getInstance(context).messageNotifier.updateNotification(context);
|
2016-10-10 20:13:37 +02:00
|
|
|
MarkReadReceiver.process(context, messageIds);
|
2016-02-20 02:07:41 +01:00
|
|
|
|
2015-05-19 10:24:08 +02:00
|
|
|
return null;
|
|
|
|
}
|
2017-10-23 22:03:32 +02:00
|
|
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
2015-05-19 10:24:08 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|