2021-05-24 04:01:20 +00:00
|
|
|
/* Copyright (C) 2013 Open Whisper Systems
|
2014-07-25 22:14:29 +00: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;
|
|
|
|
|
2021-09-23 00:27:57 +00:00
|
|
|
import static nl.komponents.kovenant.android.KovenantAndroid.startKovenant;
|
|
|
|
import static nl.komponents.kovenant.android.KovenantAndroid.stopKovenant;
|
|
|
|
|
2021-07-29 07:02:58 +00:00
|
|
|
import android.app.Application;
|
2014-07-25 22:14:29 +00:00
|
|
|
import android.content.Context;
|
2019-11-21 05:31:01 +00:00
|
|
|
import android.content.Intent;
|
2017-01-11 23:37:51 +00:00
|
|
|
import android.os.AsyncTask;
|
2017-02-14 06:55:06 +00:00
|
|
|
import android.os.Build;
|
2019-11-21 05:31:01 +00:00
|
|
|
import android.os.Handler;
|
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 07:12:34 +00:00
|
|
|
import android.os.HandlerThread;
|
2021-05-27 05:00:16 +00:00
|
|
|
|
2020-08-19 00:06:26 +00:00
|
|
|
import androidx.annotation.NonNull;
|
2020-09-16 03:42:18 +00:00
|
|
|
import androidx.lifecycle.DefaultLifecycleObserver;
|
|
|
|
import androidx.lifecycle.LifecycleOwner;
|
|
|
|
import androidx.lifecycle.ProcessLifecycleOwner;
|
2021-06-07 01:53:17 +00:00
|
|
|
|
2019-05-01 16:00:26 +00:00
|
|
|
import org.conscrypt.Conscrypt;
|
2021-05-18 06:03:47 +00:00
|
|
|
import org.session.libsession.avatars.AvatarHelper;
|
2021-10-04 07:51:19 +00:00
|
|
|
import org.session.libsession.database.MessageDataProvider;
|
2021-05-19 01:12:29 +00:00
|
|
|
import org.session.libsession.messaging.MessagingModuleConfiguration;
|
2021-03-09 06:26:29 +00:00
|
|
|
import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier;
|
2021-05-21 00:30:02 +00:00
|
|
|
import org.session.libsession.messaging.sending_receiving.pollers.ClosedGroupPollerV2;
|
2021-03-09 06:26:29 +00:00
|
|
|
import org.session.libsession.messaging.sending_receiving.pollers.Poller;
|
2021-04-26 00:26:31 +00:00
|
|
|
import org.session.libsession.snode.SnodeModule;
|
2021-05-19 01:12:29 +00:00
|
|
|
import org.session.libsession.utilities.Address;
|
2021-05-13 04:24:27 +00:00
|
|
|
import org.session.libsession.utilities.ProfilePictureUtilities;
|
2021-01-13 06:11:30 +00:00
|
|
|
import org.session.libsession.utilities.SSKEnvironment;
|
2021-01-15 05:51:53 +00:00
|
|
|
import org.session.libsession.utilities.TextSecurePreferences;
|
|
|
|
import org.session.libsession.utilities.Util;
|
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 07:12:34 +00:00
|
|
|
import org.session.libsession.utilities.WindowDebouncer;
|
2021-03-09 06:26:29 +00:00
|
|
|
import org.session.libsession.utilities.dynamiclanguage.DynamicLanguageContextWrapper;
|
2021-01-21 05:01:10 +00:00
|
|
|
import org.session.libsession.utilities.dynamiclanguage.LocaleParser;
|
2023-01-20 04:24:14 +00:00
|
|
|
import org.session.libsignal.utilities.HTTP;
|
2022-09-04 11:03:32 +00:00
|
|
|
import org.session.libsignal.utilities.JsonUtil;
|
2021-05-17 23:12:33 +00:00
|
|
|
import org.session.libsignal.utilities.Log;
|
2021-05-19 01:12:29 +00:00
|
|
|
import org.session.libsignal.utilities.ThreadUtils;
|
2019-05-01 16:00:26 +00:00
|
|
|
import org.signal.aesgcmprovider.AesGcmProvider;
|
2018-10-29 22:14:31 +00:00
|
|
|
import org.thoughtcrime.securesms.components.TypingStatusSender;
|
2021-06-07 01:53:17 +00:00
|
|
|
import org.thoughtcrime.securesms.crypto.KeyPairUtilities;
|
2022-09-04 11:03:32 +00:00
|
|
|
import org.thoughtcrime.securesms.database.EmojiSearchDatabase;
|
2021-09-23 00:27:57 +00:00
|
|
|
import org.thoughtcrime.securesms.database.LokiAPIDatabase;
|
2021-10-04 07:51:19 +00:00
|
|
|
import org.thoughtcrime.securesms.database.Storage;
|
2023-01-06 04:41:26 +00:00
|
|
|
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
|
2022-09-04 11:03:32 +00:00
|
|
|
import org.thoughtcrime.securesms.database.model.EmojiSearchData;
|
2021-10-04 07:51:19 +00:00
|
|
|
import org.thoughtcrime.securesms.dependencies.DatabaseComponent;
|
|
|
|
import org.thoughtcrime.securesms.dependencies.DatabaseModule;
|
2022-09-04 11:03:32 +00:00
|
|
|
import org.thoughtcrime.securesms.emoji.EmojiSource;
|
2021-10-04 07:51:19 +00:00
|
|
|
import org.thoughtcrime.securesms.groups.OpenGroupManager;
|
|
|
|
import org.thoughtcrime.securesms.home.HomeActivity;
|
2023-01-20 04:24:14 +00:00
|
|
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
2018-07-26 14:10:46 +00:00
|
|
|
import org.thoughtcrime.securesms.logging.AndroidLogger;
|
2021-09-23 00:27:57 +00:00
|
|
|
import org.thoughtcrime.securesms.logging.PersistentLogger;
|
2018-07-26 14:10:46 +00:00
|
|
|
import org.thoughtcrime.securesms.logging.UncaughtExceptionLogger;
|
2021-07-09 03:56:38 +00:00
|
|
|
import org.thoughtcrime.securesms.notifications.BackgroundPollWorker;
|
2020-06-26 06:18:19 +00:00
|
|
|
import org.thoughtcrime.securesms.notifications.DefaultMessageNotifier;
|
2021-09-23 00:27:57 +00:00
|
|
|
import org.thoughtcrime.securesms.notifications.FcmUtils;
|
|
|
|
import org.thoughtcrime.securesms.notifications.LokiPushNotificationManager;
|
2018-08-06 16:20:24 +00:00
|
|
|
import org.thoughtcrime.securesms.notifications.NotificationChannels;
|
2020-06-26 06:18:19 +00:00
|
|
|
import org.thoughtcrime.securesms.notifications.OptimizedMessageNotifier;
|
2019-02-26 01:47:30 +00:00
|
|
|
import org.thoughtcrime.securesms.providers.BlobProvider;
|
2016-08-16 03:23:56 +00:00
|
|
|
import org.thoughtcrime.securesms.service.ExpiringMessageManager;
|
2018-10-15 20:27:21 +00:00
|
|
|
import org.thoughtcrime.securesms.service.KeyCachingService;
|
2021-03-09 06:26:29 +00:00
|
|
|
import org.thoughtcrime.securesms.sskenvironment.ProfileManager;
|
|
|
|
import org.thoughtcrime.securesms.sskenvironment.ReadReceiptManager;
|
|
|
|
import org.thoughtcrime.securesms.sskenvironment.TypingStatusRepository;
|
2021-09-23 00:27:57 +00:00
|
|
|
import org.thoughtcrime.securesms.util.Broadcaster;
|
2021-01-21 05:01:10 +00:00
|
|
|
import org.thoughtcrime.securesms.util.dynamiclanguage.LocaleParseHelper;
|
Add one on one calls over clearnet (#864)
* feat: adding basic webrtc deps and test activity
* more testing code
* feat: add protos and bump version
* feat: added basic call functionality
* feat: adding UI and flipping cameras
* feat: add stats and starting call bottom sheet
* feat: hanging up and bottom sheet behaviors should work now
* feat: add call stats report on frontend
* feat: add relay toggle for answer and offer
* fix: add keep screen on and more end call message on back pressed / on finish
* refactor: removing and replacing dagger 1 dep with android hilt
* feat: include latest proto
* feat: update to utilise call ID
* feat: add stun and turn
* refactor: playing around with deps and transport types
* feat: adding call service functionality and permissions for calls
* feat: add call manager and more static intent building functions for WebRtcCallService.kt
* feat: adding ringers and more audio boilerplate
* feat: audio manager call service boilerplate
* feat: update kotlin and add in call view model and more management functions
* refactor: moving call code around to service and viewmodel interactions
* feat: plugging CallManager.kt into view model and service, fixing up dependencies
* feat: implementing more WebRtcCallService.kt functions and handlers for actions as well as lifecycle
* feat: adding more lifecycle vm and callmanager / call service functionality
* feat: adding more command handlers in WebRtcCallService.kt
* feat: more commands handled, adding lock manager and bluetooth permissions
* feat: adding remainder of basic functionality to services and CallManager.kt
* feat: hooking up calls and fixing broken dependencies and compile errors
* fix: add timestamp to incoming call
* feat: some connection and service launching / ring lifecycle
* feat: call establishing and displaying
* fix: fixing call connect flows
* feat: ringers and better state handling
* feat: updating call layout
* feat: add fixes to bluetooth and begin the network renegotiation
* feat: add call related permissions and more network handover tests
* fix: don't display call option in conversation and don't show notification if option not enabled
* fix: incoming ringer fix on receiving call, call notification priorities and notification channel update
* build: update build number for testing
* fix: bluetooth auto-connection and re-connection fixes, removing finished todos, allowing self-send call messages for deduping answers
* feat: add pre-offer information and action handling in web rtc call service
* refactor: discard offer messages from non-matching pre-offers we are already expecting
* build: build numbers and version name update
* feat: handle discarding pending calls from linked devices
* feat: add signing props to release config build
* docs: fix comment on time being 300s (5m) instead of 30s
* feat: adding call messages for incoming/outgoing/missed
* refactor: handle in-thread call notifications better and replace deny button intent with denyCallIntent instead of hangup
* feat: add a hangup via data channel message
* feat: process microphone enabled events and remove debuggable from build.gradle
* feat: add first call notification
* refactor: set the buttons to match iOS in terms of enable disable and colours
* refactor: change the call logos in control messages
* refactor: more bluetooth improvements
* refactor: move start ringer and init of audio manager to CallManager.kt and string fix up
* build: remove debuggable for release build
* refactor: replace call icons
* feat: adding a call time display
* refactor: change the call time to update every second
* refactor: testing out the full screen intents
* refactor: wrapper use corrected session description, set title to recipient displayName, indicate session calls
* fix: crash on view with a parent already attached
* refactor: aspect ratio fit preserved
* refactor: add wantsToAnswer ability in pre-init for fullscreenintent
* refactor: prevent calls from non hasSent participants
* build: update gradle code
* refactor: replace timeout schedule with a seconds count
* fix: various bug fixes for calls
* fix: remove end call from busy
* refactor: use answerCall instead of manual intent building again
* build: new version
* feat: add silenced notifications for call notification builder. check pre-offer and connecting state for pending connection
* build: update build number
* fix: text color uses overridden style value
* fix: remove wrap content for renderers and look more at recovering from network switches
* build: update build number
* refactor: remove whitespace
* build: update build number
* refactor: used shared number for BatchMessageReceiveJob.kt parameter across pollers
* fix: glide in update crash
* fix: bug fixes for self-send answer / hangup messages
* build: update build number
* build: update build.gradle number
* refactor: compile errors and refactoring to view binding
* fix: set the content to binding.root view
* build: increase build number
* build: update build numbers
* feat: adding base for rotation and picking random subset of turn servers
* feat: starting the screen rotation processing
* feat: setting up rotation for the remote render view
* refactor: applying rotation and mirroring based on front / rear cameras that wraps nicely, only scale reworking needed
* refactor: calls video stretching but consistent
* refactor: state machine and tests for the transition events
* feat: new call state processing
* refactor: adding reconnecting logic and visuals
* feat: state machine reconnect logic wip
* feat: add reconnecting and merge fixes
* feat: check new session based off current state
* feat: reconnection logic works correctly now
* refactor: reduce TIMEOUT_SECONDS to 30 from 90
* feat: reset peer connection on DC to prevent ICE messages from old connection or stale state in reconnecting
* refactor: add null case
* fix: set approved on new outgoing threads, use approved more deeply and invalidate the options menu on recipient modified. Add approvedMe flag toggles for visible message receive
* fix: add name update in action bar on modified, change where approvedMe is set
* build: increment build number
* build: update build number
* fix: merge compile errors and increment build number
* refactor: remove negotiation based on which party dropped connection
* refactor: call reconnection improvement tested cross platform to re-establish
* refactor: failed and disconnect events only handled if either the reconnect or the timeout runnables are not set
* build: update version number
* fix: reduce timeout
* fix: fixes the incoming hangup logic for linked devices
* refactor: match iOS styling for call activity closer
* chore: upgrade build numbers
* feat: add in call settings dialog for if calls is disabled in conversation
* feat: add a first call missed control message and info popup with link to privacy settings
* fix: looking at crash for specific large transaction in NotificationManager
* refactor: removing the people in case transaction size reduces to fix notif crash
* fix: comment out the entire send multiple to see if it fixes the issue
* refactor: revert to including the full notification process in a try/catch to handle weird responses from NotificationManager
* fix: add in notification settings prompt for calls and try to fall back to dirty full screen intent / start activity if we're allowed
* build: upgrade build number
2022-04-19 04:25:40 +00:00
|
|
|
import org.thoughtcrime.securesms.webrtc.CallMessageProcessor;
|
2016-11-09 17:37:40 +00:00
|
|
|
import org.webrtc.PeerConnectionFactory;
|
2017-12-22 00:37:07 +00:00
|
|
|
import org.webrtc.PeerConnectionFactory.InitializationOptions;
|
2017-03-21 17:23:16 +00:00
|
|
|
import org.webrtc.voiceengine.WebRtcAudioManager;
|
|
|
|
import org.webrtc.voiceengine.WebRtcAudioUtils;
|
2021-06-07 01:53:17 +00:00
|
|
|
|
2021-05-13 04:24:27 +00:00
|
|
|
import java.io.ByteArrayOutputStream;
|
2022-09-04 11:03:32 +00:00
|
|
|
import java.io.IOException;
|
2021-05-13 04:24:27 +00:00
|
|
|
import java.io.InputStream;
|
2019-05-01 16:00:26 +00:00
|
|
|
import java.security.Security;
|
2022-09-04 11:03:32 +00:00
|
|
|
import java.util.Arrays;
|
2020-02-24 03:57:51 +00:00
|
|
|
import java.util.Date;
|
2017-03-21 17:23:16 +00:00
|
|
|
import java.util.HashSet;
|
2022-09-04 11:03:32 +00:00
|
|
|
import java.util.List;
|
2017-03-21 17:23:16 +00:00
|
|
|
import java.util.Set;
|
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 07:12:34 +00:00
|
|
|
import java.util.Timer;
|
2022-09-04 11:03:32 +00:00
|
|
|
import java.util.concurrent.Executors;
|
2021-06-07 01:53:17 +00:00
|
|
|
|
2021-10-04 07:51:19 +00:00
|
|
|
import javax.inject.Inject;
|
|
|
|
|
|
|
|
import dagger.hilt.EntryPoints;
|
|
|
|
import dagger.hilt.android.HiltAndroidApp;
|
2019-06-25 03:51:24 +00:00
|
|
|
import kotlin.Unit;
|
2021-03-03 04:07:37 +00:00
|
|
|
import kotlinx.coroutines.Job;
|
2014-11-12 03:57:53 +00:00
|
|
|
|
2014-07-25 22:14:29 +00:00
|
|
|
/**
|
|
|
|
* Will be called once when the TextSecure process is created.
|
2021-03-03 04:07:37 +00:00
|
|
|
* <p>
|
2014-07-25 22:14:29 +00:00
|
|
|
* We're using this as an insertion point to patch up the Android PRNG disaster,
|
|
|
|
* to initialize the job manager, and to check for GCM registration freshness.
|
|
|
|
*
|
|
|
|
* @author Moxie Marlinspike
|
|
|
|
*/
|
2021-10-04 07:51:19 +00:00
|
|
|
@HiltAndroidApp
|
|
|
|
public class ApplicationContext extends Application implements DefaultLifecycleObserver {
|
2014-07-25 22:14:29 +00:00
|
|
|
|
2021-03-03 04:07:37 +00:00
|
|
|
public static final String PREFERENCES_NAME = "SecureSMS-Preferences";
|
|
|
|
|
|
|
|
private static final String TAG = ApplicationContext.class.getSimpleName();
|
|
|
|
|
|
|
|
private ExpiringMessageManager expiringMessageManager;
|
|
|
|
private TypingStatusRepository typingStatusRepository;
|
|
|
|
private TypingStatusSender typingStatusSender;
|
|
|
|
private ReadReceiptManager readReceiptManager;
|
|
|
|
private ProfileManager profileManager;
|
|
|
|
public MessageNotifier messageNotifier = null;
|
|
|
|
public Poller poller = null;
|
|
|
|
public Broadcaster broadcaster = null;
|
|
|
|
private Job firebaseInstanceIdJob;
|
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 07:12:34 +00:00
|
|
|
private WindowDebouncer conversationListDebouncer;
|
|
|
|
private HandlerThread conversationListHandlerThread;
|
|
|
|
private Handler conversationListHandler;
|
2021-09-23 05:47:43 +00:00
|
|
|
private PersistentLogger persistentLogger;
|
2021-03-03 04:07:37 +00:00
|
|
|
|
2021-10-04 07:51:19 +00:00
|
|
|
@Inject LokiAPIDatabase lokiAPIDatabase;
|
|
|
|
@Inject Storage storage;
|
|
|
|
@Inject MessageDataProvider messageDataProvider;
|
Add one on one calls over clearnet (#864)
* feat: adding basic webrtc deps and test activity
* more testing code
* feat: add protos and bump version
* feat: added basic call functionality
* feat: adding UI and flipping cameras
* feat: add stats and starting call bottom sheet
* feat: hanging up and bottom sheet behaviors should work now
* feat: add call stats report on frontend
* feat: add relay toggle for answer and offer
* fix: add keep screen on and more end call message on back pressed / on finish
* refactor: removing and replacing dagger 1 dep with android hilt
* feat: include latest proto
* feat: update to utilise call ID
* feat: add stun and turn
* refactor: playing around with deps and transport types
* feat: adding call service functionality and permissions for calls
* feat: add call manager and more static intent building functions for WebRtcCallService.kt
* feat: adding ringers and more audio boilerplate
* feat: audio manager call service boilerplate
* feat: update kotlin and add in call view model and more management functions
* refactor: moving call code around to service and viewmodel interactions
* feat: plugging CallManager.kt into view model and service, fixing up dependencies
* feat: implementing more WebRtcCallService.kt functions and handlers for actions as well as lifecycle
* feat: adding more lifecycle vm and callmanager / call service functionality
* feat: adding more command handlers in WebRtcCallService.kt
* feat: more commands handled, adding lock manager and bluetooth permissions
* feat: adding remainder of basic functionality to services and CallManager.kt
* feat: hooking up calls and fixing broken dependencies and compile errors
* fix: add timestamp to incoming call
* feat: some connection and service launching / ring lifecycle
* feat: call establishing and displaying
* fix: fixing call connect flows
* feat: ringers and better state handling
* feat: updating call layout
* feat: add fixes to bluetooth and begin the network renegotiation
* feat: add call related permissions and more network handover tests
* fix: don't display call option in conversation and don't show notification if option not enabled
* fix: incoming ringer fix on receiving call, call notification priorities and notification channel update
* build: update build number for testing
* fix: bluetooth auto-connection and re-connection fixes, removing finished todos, allowing self-send call messages for deduping answers
* feat: add pre-offer information and action handling in web rtc call service
* refactor: discard offer messages from non-matching pre-offers we are already expecting
* build: build numbers and version name update
* feat: handle discarding pending calls from linked devices
* feat: add signing props to release config build
* docs: fix comment on time being 300s (5m) instead of 30s
* feat: adding call messages for incoming/outgoing/missed
* refactor: handle in-thread call notifications better and replace deny button intent with denyCallIntent instead of hangup
* feat: add a hangup via data channel message
* feat: process microphone enabled events and remove debuggable from build.gradle
* feat: add first call notification
* refactor: set the buttons to match iOS in terms of enable disable and colours
* refactor: change the call logos in control messages
* refactor: more bluetooth improvements
* refactor: move start ringer and init of audio manager to CallManager.kt and string fix up
* build: remove debuggable for release build
* refactor: replace call icons
* feat: adding a call time display
* refactor: change the call time to update every second
* refactor: testing out the full screen intents
* refactor: wrapper use corrected session description, set title to recipient displayName, indicate session calls
* fix: crash on view with a parent already attached
* refactor: aspect ratio fit preserved
* refactor: add wantsToAnswer ability in pre-init for fullscreenintent
* refactor: prevent calls from non hasSent participants
* build: update gradle code
* refactor: replace timeout schedule with a seconds count
* fix: various bug fixes for calls
* fix: remove end call from busy
* refactor: use answerCall instead of manual intent building again
* build: new version
* feat: add silenced notifications for call notification builder. check pre-offer and connecting state for pending connection
* build: update build number
* fix: text color uses overridden style value
* fix: remove wrap content for renderers and look more at recovering from network switches
* build: update build number
* refactor: remove whitespace
* build: update build number
* refactor: used shared number for BatchMessageReceiveJob.kt parameter across pollers
* fix: glide in update crash
* fix: bug fixes for self-send answer / hangup messages
* build: update build number
* build: update build.gradle number
* refactor: compile errors and refactoring to view binding
* fix: set the content to binding.root view
* build: increase build number
* build: update build numbers
* feat: adding base for rotation and picking random subset of turn servers
* feat: starting the screen rotation processing
* feat: setting up rotation for the remote render view
* refactor: applying rotation and mirroring based on front / rear cameras that wraps nicely, only scale reworking needed
* refactor: calls video stretching but consistent
* refactor: state machine and tests for the transition events
* feat: new call state processing
* refactor: adding reconnecting logic and visuals
* feat: state machine reconnect logic wip
* feat: add reconnecting and merge fixes
* feat: check new session based off current state
* feat: reconnection logic works correctly now
* refactor: reduce TIMEOUT_SECONDS to 30 from 90
* feat: reset peer connection on DC to prevent ICE messages from old connection or stale state in reconnecting
* refactor: add null case
* fix: set approved on new outgoing threads, use approved more deeply and invalidate the options menu on recipient modified. Add approvedMe flag toggles for visible message receive
* fix: add name update in action bar on modified, change where approvedMe is set
* build: increment build number
* build: update build number
* fix: merge compile errors and increment build number
* refactor: remove negotiation based on which party dropped connection
* refactor: call reconnection improvement tested cross platform to re-establish
* refactor: failed and disconnect events only handled if either the reconnect or the timeout runnables are not set
* build: update version number
* fix: reduce timeout
* fix: fixes the incoming hangup logic for linked devices
* refactor: match iOS styling for call activity closer
* chore: upgrade build numbers
* feat: add in call settings dialog for if calls is disabled in conversation
* feat: add a first call missed control message and info popup with link to privacy settings
* fix: looking at crash for specific large transaction in NotificationManager
* refactor: removing the people in case transaction size reduces to fix notif crash
* fix: comment out the entire send multiple to see if it fixes the issue
* refactor: revert to including the full notification process in a try/catch to handle weird responses from NotificationManager
* fix: add in notification settings prompt for calls and try to fall back to dirty full screen intent / start activity if we're allowed
* build: upgrade build number
2022-04-19 04:25:40 +00:00
|
|
|
@Inject TextSecurePreferences textSecurePreferences;
|
|
|
|
CallMessageProcessor callMessageProcessor;
|
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 07:12:34 +00:00
|
|
|
MessagingModuleConfiguration messagingModuleConfiguration;
|
2021-10-04 07:51:19 +00:00
|
|
|
|
2021-03-03 04:07:37 +00:00
|
|
|
private volatile boolean isAppVisible;
|
|
|
|
|
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 07:12:34 +00:00
|
|
|
@Override
|
|
|
|
public Object getSystemService(String name) {
|
|
|
|
if (MessagingModuleConfiguration.MESSAGING_MODULE_SERVICE.equals(name)) {
|
|
|
|
return messagingModuleConfiguration;
|
|
|
|
}
|
|
|
|
return super.getSystemService(name);
|
|
|
|
}
|
|
|
|
|
2021-03-03 04:07:37 +00:00
|
|
|
public static ApplicationContext getInstance(Context context) {
|
|
|
|
return (ApplicationContext) context.getApplicationContext();
|
|
|
|
}
|
|
|
|
|
2021-10-04 07:51:19 +00:00
|
|
|
public DatabaseComponent getDatabaseComponent() {
|
|
|
|
return EntryPoints.get(getApplicationContext(), DatabaseComponent.class);
|
|
|
|
}
|
|
|
|
|
2021-05-27 05:00:16 +00:00
|
|
|
public Handler getConversationListNotificationHandler() {
|
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 07:12:34 +00:00
|
|
|
if (this.conversationListHandlerThread == null) {
|
|
|
|
conversationListHandlerThread = new HandlerThread("ConversationListHandler");
|
|
|
|
conversationListHandlerThread.start();
|
|
|
|
}
|
|
|
|
if (this.conversationListHandler == null) {
|
|
|
|
conversationListHandler = new Handler(conversationListHandlerThread.getLooper());
|
|
|
|
}
|
|
|
|
return conversationListHandler;
|
|
|
|
}
|
|
|
|
|
|
|
|
public WindowDebouncer getConversationListDebouncer() {
|
|
|
|
if (conversationListDebouncer == null) {
|
|
|
|
conversationListDebouncer = new WindowDebouncer(1000, new Timer());
|
2021-10-12 03:32:06 +00:00
|
|
|
}
|
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 07:12:34 +00:00
|
|
|
return conversationListDebouncer;
|
2021-03-31 04:15:50 +00:00
|
|
|
}
|
|
|
|
|
2021-09-23 05:47:43 +00:00
|
|
|
public PersistentLogger getPersistentLogger() {
|
|
|
|
return this.persistentLogger;
|
|
|
|
}
|
|
|
|
|
2021-10-12 03:32:06 +00:00
|
|
|
@Override
|
2021-03-03 04:07:37 +00:00
|
|
|
public void onCreate() {
|
2021-10-04 23:58:02 +00:00
|
|
|
DatabaseModule.init(this);
|
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 07:12:34 +00:00
|
|
|
MessagingModuleConfiguration.configure(this);
|
2021-03-03 04:07:37 +00:00
|
|
|
super.onCreate();
|
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 07:12:34 +00:00
|
|
|
messagingModuleConfiguration = new MessagingModuleConfiguration(this,
|
|
|
|
storage,
|
|
|
|
messageDataProvider,
|
|
|
|
()-> KeyPairUtilities.INSTANCE.getUserED25519KeyPair(this));
|
Add one on one calls over clearnet (#864)
* feat: adding basic webrtc deps and test activity
* more testing code
* feat: add protos and bump version
* feat: added basic call functionality
* feat: adding UI and flipping cameras
* feat: add stats and starting call bottom sheet
* feat: hanging up and bottom sheet behaviors should work now
* feat: add call stats report on frontend
* feat: add relay toggle for answer and offer
* fix: add keep screen on and more end call message on back pressed / on finish
* refactor: removing and replacing dagger 1 dep with android hilt
* feat: include latest proto
* feat: update to utilise call ID
* feat: add stun and turn
* refactor: playing around with deps and transport types
* feat: adding call service functionality and permissions for calls
* feat: add call manager and more static intent building functions for WebRtcCallService.kt
* feat: adding ringers and more audio boilerplate
* feat: audio manager call service boilerplate
* feat: update kotlin and add in call view model and more management functions
* refactor: moving call code around to service and viewmodel interactions
* feat: plugging CallManager.kt into view model and service, fixing up dependencies
* feat: implementing more WebRtcCallService.kt functions and handlers for actions as well as lifecycle
* feat: adding more lifecycle vm and callmanager / call service functionality
* feat: adding more command handlers in WebRtcCallService.kt
* feat: more commands handled, adding lock manager and bluetooth permissions
* feat: adding remainder of basic functionality to services and CallManager.kt
* feat: hooking up calls and fixing broken dependencies and compile errors
* fix: add timestamp to incoming call
* feat: some connection and service launching / ring lifecycle
* feat: call establishing and displaying
* fix: fixing call connect flows
* feat: ringers and better state handling
* feat: updating call layout
* feat: add fixes to bluetooth and begin the network renegotiation
* feat: add call related permissions and more network handover tests
* fix: don't display call option in conversation and don't show notification if option not enabled
* fix: incoming ringer fix on receiving call, call notification priorities and notification channel update
* build: update build number for testing
* fix: bluetooth auto-connection and re-connection fixes, removing finished todos, allowing self-send call messages for deduping answers
* feat: add pre-offer information and action handling in web rtc call service
* refactor: discard offer messages from non-matching pre-offers we are already expecting
* build: build numbers and version name update
* feat: handle discarding pending calls from linked devices
* feat: add signing props to release config build
* docs: fix comment on time being 300s (5m) instead of 30s
* feat: adding call messages for incoming/outgoing/missed
* refactor: handle in-thread call notifications better and replace deny button intent with denyCallIntent instead of hangup
* feat: add a hangup via data channel message
* feat: process microphone enabled events and remove debuggable from build.gradle
* feat: add first call notification
* refactor: set the buttons to match iOS in terms of enable disable and colours
* refactor: change the call logos in control messages
* refactor: more bluetooth improvements
* refactor: move start ringer and init of audio manager to CallManager.kt and string fix up
* build: remove debuggable for release build
* refactor: replace call icons
* feat: adding a call time display
* refactor: change the call time to update every second
* refactor: testing out the full screen intents
* refactor: wrapper use corrected session description, set title to recipient displayName, indicate session calls
* fix: crash on view with a parent already attached
* refactor: aspect ratio fit preserved
* refactor: add wantsToAnswer ability in pre-init for fullscreenintent
* refactor: prevent calls from non hasSent participants
* build: update gradle code
* refactor: replace timeout schedule with a seconds count
* fix: various bug fixes for calls
* fix: remove end call from busy
* refactor: use answerCall instead of manual intent building again
* build: new version
* feat: add silenced notifications for call notification builder. check pre-offer and connecting state for pending connection
* build: update build number
* fix: text color uses overridden style value
* fix: remove wrap content for renderers and look more at recovering from network switches
* build: update build number
* refactor: remove whitespace
* build: update build number
* refactor: used shared number for BatchMessageReceiveJob.kt parameter across pollers
* fix: glide in update crash
* fix: bug fixes for self-send answer / hangup messages
* build: update build number
* build: update build.gradle number
* refactor: compile errors and refactoring to view binding
* fix: set the content to binding.root view
* build: increase build number
* build: update build numbers
* feat: adding base for rotation and picking random subset of turn servers
* feat: starting the screen rotation processing
* feat: setting up rotation for the remote render view
* refactor: applying rotation and mirroring based on front / rear cameras that wraps nicely, only scale reworking needed
* refactor: calls video stretching but consistent
* refactor: state machine and tests for the transition events
* feat: new call state processing
* refactor: adding reconnecting logic and visuals
* feat: state machine reconnect logic wip
* feat: add reconnecting and merge fixes
* feat: check new session based off current state
* feat: reconnection logic works correctly now
* refactor: reduce TIMEOUT_SECONDS to 30 from 90
* feat: reset peer connection on DC to prevent ICE messages from old connection or stale state in reconnecting
* refactor: add null case
* fix: set approved on new outgoing threads, use approved more deeply and invalidate the options menu on recipient modified. Add approvedMe flag toggles for visible message receive
* fix: add name update in action bar on modified, change where approvedMe is set
* build: increment build number
* build: update build number
* fix: merge compile errors and increment build number
* refactor: remove negotiation based on which party dropped connection
* refactor: call reconnection improvement tested cross platform to re-establish
* refactor: failed and disconnect events only handled if either the reconnect or the timeout runnables are not set
* build: update version number
* fix: reduce timeout
* fix: fixes the incoming hangup logic for linked devices
* refactor: match iOS styling for call activity closer
* chore: upgrade build numbers
* feat: add in call settings dialog for if calls is disabled in conversation
* feat: add a first call missed control message and info popup with link to privacy settings
* fix: looking at crash for specific large transaction in NotificationManager
* refactor: removing the people in case transaction size reduces to fix notif crash
* fix: comment out the entire send multiple to see if it fixes the issue
* refactor: revert to including the full notification process in a try/catch to handle weird responses from NotificationManager
* fix: add in notification settings prompt for calls and try to fall back to dirty full screen intent / start activity if we're allowed
* build: upgrade build number
2022-04-19 04:25:40 +00:00
|
|
|
callMessageProcessor = new CallMessageProcessor(this, textSecurePreferences, ProcessLifecycleOwner.get().getLifecycle(), storage);
|
2021-03-03 04:07:37 +00:00
|
|
|
Log.i(TAG, "onCreate()");
|
|
|
|
startKovenant();
|
|
|
|
initializeSecurityProvider();
|
|
|
|
initializeLogging();
|
|
|
|
initializeCrashHandling();
|
|
|
|
NotificationChannels.create(this);
|
|
|
|
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
|
2021-04-29 00:10:41 +00:00
|
|
|
AppContext.INSTANCE.configureKovenant();
|
2021-03-03 04:07:37 +00:00
|
|
|
messageNotifier = new OptimizedMessageNotifier(new DefaultMessageNotifier());
|
|
|
|
broadcaster = new Broadcaster(this);
|
2021-10-04 07:51:19 +00:00
|
|
|
LokiAPIDatabase apiDB = getDatabaseComponent().lokiAPIDatabase();
|
2021-04-26 00:26:31 +00:00
|
|
|
SnodeModule.Companion.configure(apiDB, broadcaster);
|
2021-05-24 05:31:46 +00:00
|
|
|
String userPublicKey = TextSecurePreferences.getLocalNumber(this);
|
2021-03-03 04:07:37 +00:00
|
|
|
if (userPublicKey != null) {
|
|
|
|
registerForFCMIfNeeded(false);
|
|
|
|
}
|
|
|
|
initializeExpiringMessageManager();
|
|
|
|
initializeTypingStatusRepository();
|
|
|
|
initializeTypingStatusSender();
|
|
|
|
initializeReadReceiptManager();
|
|
|
|
initializeProfileManager();
|
|
|
|
initializePeriodicTasks();
|
2021-03-29 03:16:49 +00:00
|
|
|
SSKEnvironment.Companion.configure(getTypingStatusRepository(), getReadReceiptManager(), getProfileManager(), messageNotifier, getExpiringMessageManager());
|
2021-03-03 04:07:37 +00:00
|
|
|
initializeWebRtc();
|
|
|
|
initializeBlobProvider();
|
2021-05-24 05:31:46 +00:00
|
|
|
resubmitProfilePictureIfNeeded();
|
2022-09-04 11:03:32 +00:00
|
|
|
loadEmojiSearchIndexIfNeeded();
|
|
|
|
EmojiSource.refresh();
|
2023-01-20 04:24:14 +00:00
|
|
|
|
|
|
|
NetworkConstraint networkConstraint = new NetworkConstraint.Factory(this).create();
|
|
|
|
HTTP.INSTANCE.setConnectedToNetwork(networkConstraint::isMet);
|
2021-03-03 04:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onStart(@NonNull LifecycleOwner owner) {
|
|
|
|
isAppVisible = true;
|
|
|
|
Log.i(TAG, "App is now visible.");
|
|
|
|
KeyCachingService.onAppForegrounded(this);
|
2021-05-24 01:35:05 +00:00
|
|
|
|
2023-01-09 04:22:29 +00:00
|
|
|
// If the user account hasn't been created or onboarding wasn't finished then don't start
|
|
|
|
// the pollers
|
|
|
|
if (TextSecurePreferences.getLocalNumber(this) == null || !TextSecurePreferences.hasSeenWelcomeScreen(this)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-07-29 07:02:58 +00:00
|
|
|
ThreadUtils.queue(()->{
|
|
|
|
if (poller != null) {
|
|
|
|
poller.setCaughtUp(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
startPollingIfNeeded();
|
2021-05-19 07:01:53 +00:00
|
|
|
|
2021-07-29 07:02:58 +00:00
|
|
|
OpenGroupManager.INSTANCE.startPolling();
|
|
|
|
});
|
2021-03-03 04:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onStop(@NonNull LifecycleOwner owner) {
|
|
|
|
isAppVisible = false;
|
|
|
|
Log.i(TAG, "App is no longer visible.");
|
|
|
|
KeyCachingService.onAppBackgrounded(this);
|
|
|
|
messageNotifier.setVisibleThread(-1);
|
|
|
|
if (poller != null) {
|
|
|
|
poller.stopIfNeeded();
|
|
|
|
}
|
2023-03-31 02:24:36 +00:00
|
|
|
ClosedGroupPollerV2.getShared().stopAll();
|
2021-03-03 04:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onTerminate() {
|
|
|
|
stopKovenant(); // Loki
|
2021-05-19 01:12:29 +00:00
|
|
|
OpenGroupManager.INSTANCE.stopPolling();
|
2021-03-03 04:07:37 +00:00
|
|
|
super.onTerminate();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void initializeLocaleParser() {
|
|
|
|
LocaleParser.Companion.configure(new LocaleParseHelper());
|
|
|
|
}
|
|
|
|
|
|
|
|
public ExpiringMessageManager getExpiringMessageManager() {
|
|
|
|
return expiringMessageManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
public TypingStatusRepository getTypingStatusRepository() {
|
|
|
|
return typingStatusRepository;
|
|
|
|
}
|
|
|
|
|
|
|
|
public TypingStatusSender getTypingStatusSender() {
|
|
|
|
return typingStatusSender;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ReadReceiptManager getReadReceiptManager() {
|
|
|
|
return readReceiptManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ProfileManager getProfileManager() {
|
|
|
|
return profileManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isAppVisible() {
|
|
|
|
return isAppVisible;
|
|
|
|
}
|
|
|
|
|
2020-05-13 23:35:34 +00:00
|
|
|
// Loki
|
2021-03-03 04:07:37 +00:00
|
|
|
|
|
|
|
private void initializeSecurityProvider() {
|
|
|
|
try {
|
|
|
|
Class.forName("org.signal.aesgcmprovider.AesGcmCipher");
|
|
|
|
} catch (ClassNotFoundException e) {
|
|
|
|
Log.e(TAG, "Failed to find AesGcmCipher class");
|
|
|
|
throw new ProviderInitializationException();
|
|
|
|
}
|
|
|
|
|
|
|
|
int aesPosition = Security.insertProviderAt(new AesGcmProvider(), 1);
|
|
|
|
Log.i(TAG, "Installed AesGcmProvider: " + aesPosition);
|
|
|
|
|
|
|
|
if (aesPosition < 0) {
|
|
|
|
Log.e(TAG, "Failed to install AesGcmProvider()");
|
|
|
|
throw new ProviderInitializationException();
|
|
|
|
}
|
|
|
|
|
|
|
|
int conscryptPosition = Security.insertProviderAt(Conscrypt.newProvider(), 2);
|
|
|
|
Log.i(TAG, "Installed Conscrypt provider: " + conscryptPosition);
|
|
|
|
|
|
|
|
if (conscryptPosition < 0) {
|
|
|
|
Log.w(TAG, "Did not install Conscrypt provider. May already be present.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeLogging() {
|
2021-09-23 05:47:43 +00:00
|
|
|
if (persistentLogger == null) {
|
|
|
|
persistentLogger = new PersistentLogger(this);
|
|
|
|
}
|
|
|
|
Log.initialize(new AndroidLogger(), persistentLogger);
|
2021-03-03 04:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeCrashHandling() {
|
|
|
|
final Thread.UncaughtExceptionHandler originalHandler = Thread.getDefaultUncaughtExceptionHandler();
|
|
|
|
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionLogger(originalHandler));
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeExpiringMessageManager() {
|
|
|
|
this.expiringMessageManager = new ExpiringMessageManager(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeTypingStatusRepository() {
|
|
|
|
this.typingStatusRepository = new TypingStatusRepository();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeReadReceiptManager() {
|
|
|
|
this.readReceiptManager = new ReadReceiptManager();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeProfileManager() {
|
|
|
|
this.profileManager = new ProfileManager();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeTypingStatusSender() {
|
|
|
|
this.typingStatusSender = new TypingStatusSender(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initializePeriodicTasks() {
|
2021-05-24 05:31:46 +00:00
|
|
|
BackgroundPollWorker.schedulePeriodic(this);
|
2021-03-03 04:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeWebRtc() {
|
|
|
|
try {
|
|
|
|
Set<String> HARDWARE_AEC_BLACKLIST = new HashSet<String>() {{
|
|
|
|
add("Pixel");
|
|
|
|
add("Pixel XL");
|
|
|
|
add("Moto G5");
|
|
|
|
add("Moto G (5S) Plus");
|
|
|
|
add("Moto G4");
|
|
|
|
add("TA-1053");
|
|
|
|
add("Mi A1");
|
|
|
|
add("E5823"); // Sony z5 compact
|
|
|
|
add("Redmi Note 5");
|
|
|
|
add("FP2"); // Fairphone FP2
|
|
|
|
add("MI 5");
|
|
|
|
}};
|
|
|
|
|
|
|
|
Set<String> OPEN_SL_ES_WHITELIST = new HashSet<String>() {{
|
|
|
|
add("Pixel");
|
|
|
|
add("Pixel XL");
|
|
|
|
}};
|
|
|
|
|
|
|
|
if (HARDWARE_AEC_BLACKLIST.contains(Build.MODEL)) {
|
|
|
|
WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!OPEN_SL_ES_WHITELIST.contains(Build.MODEL)) {
|
|
|
|
WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
PeerConnectionFactory.initialize(InitializationOptions.builder(this).createInitializationOptions());
|
|
|
|
} catch (UnsatisfiedLinkError e) {
|
|
|
|
Log.w(TAG, e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeBlobProvider() {
|
|
|
|
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
|
|
|
|
BlobProvider.getInstance().onSessionStart(this);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void attachBaseContext(Context base) {
|
|
|
|
initializeLocaleParser();
|
|
|
|
super.attachBaseContext(DynamicLanguageContextWrapper.updateContext(base, TextSecurePreferences.getLanguage(base)));
|
|
|
|
}
|
|
|
|
|
2021-05-21 05:02:34 +00:00
|
|
|
private static class ProviderInitializationException extends RuntimeException { }
|
2021-03-03 04:07:37 +00:00
|
|
|
|
|
|
|
public void registerForFCMIfNeeded(final Boolean force) {
|
2021-03-03 04:43:51 +00:00
|
|
|
if (firebaseInstanceIdJob != null && firebaseInstanceIdJob.isActive() && !force) return;
|
|
|
|
if (force && firebaseInstanceIdJob != null) {
|
|
|
|
firebaseInstanceIdJob.cancel(null);
|
|
|
|
}
|
2021-03-03 04:07:37 +00:00
|
|
|
firebaseInstanceIdJob = FcmUtils.getFcmInstanceId(task->{
|
|
|
|
if (!task.isSuccessful()) {
|
|
|
|
Log.w("Loki", "FirebaseInstanceId.getInstance().getInstanceId() failed." + task.getException());
|
|
|
|
return Unit.INSTANCE;
|
|
|
|
}
|
|
|
|
String token = task.getResult().getToken();
|
|
|
|
String userPublicKey = TextSecurePreferences.getLocalNumber(this);
|
|
|
|
if (userPublicKey == null) return Unit.INSTANCE;
|
2023-03-31 02:24:36 +00:00
|
|
|
|
|
|
|
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
|
|
|
|
if (TextSecurePreferences.isUsingFCM(this)) {
|
|
|
|
LokiPushNotificationManager.register(token, userPublicKey, this, force);
|
|
|
|
} else {
|
|
|
|
LokiPushNotificationManager.unregister(token, this);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2021-03-03 04:07:37 +00:00
|
|
|
return Unit.INSTANCE;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
private void setUpPollingIfNeeded() {
|
|
|
|
String userPublicKey = TextSecurePreferences.getLocalNumber(this);
|
|
|
|
if (userPublicKey == null) return;
|
|
|
|
if (poller != null) {
|
|
|
|
poller.setUserPublicKey(userPublicKey);
|
|
|
|
return;
|
|
|
|
}
|
2021-03-19 06:08:31 +00:00
|
|
|
poller = new Poller();
|
2021-03-03 04:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void startPollingIfNeeded() {
|
|
|
|
setUpPollingIfNeeded();
|
|
|
|
if (poller != null) {
|
|
|
|
poller.startIfNeeded();
|
|
|
|
}
|
2021-05-21 00:30:02 +00:00
|
|
|
ClosedGroupPollerV2.getShared().start();
|
2021-03-03 04:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void resubmitProfilePictureIfNeeded() {
|
2021-05-13 04:24:27 +00:00
|
|
|
// Files expire on the file server after a while, so we simply re-upload the user's profile picture
|
|
|
|
// at a certain interval to ensure it's always available.
|
2021-03-03 04:07:37 +00:00
|
|
|
String userPublicKey = TextSecurePreferences.getLocalNumber(this);
|
|
|
|
if (userPublicKey == null) return;
|
|
|
|
long now = new Date().getTime();
|
|
|
|
long lastProfilePictureUpload = TextSecurePreferences.getLastProfilePictureUpload(this);
|
|
|
|
if (now - lastProfilePictureUpload <= 14 * 24 * 60 * 60 * 1000) return;
|
2021-05-13 04:24:27 +00:00
|
|
|
ThreadUtils.queue(() -> {
|
|
|
|
// Don't generate a new profile key here; we do that when the user changes their profile picture
|
2022-12-19 00:29:05 +00:00
|
|
|
Log.d("Loki-Avatar", "Uploading Avatar Started");
|
2021-05-13 04:24:27 +00:00
|
|
|
String encodedProfileKey = TextSecurePreferences.getProfileKey(ApplicationContext.this);
|
2021-03-03 04:07:37 +00:00
|
|
|
try {
|
2021-05-13 04:24:27 +00:00
|
|
|
// Read the file into a byte array
|
|
|
|
InputStream inputStream = AvatarHelper.getInputStreamFor(ApplicationContext.this, Address.fromSerialized(userPublicKey));
|
|
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
|
|
int count;
|
|
|
|
byte[] buffer = new byte[1024];
|
|
|
|
while ((count = inputStream.read(buffer, 0, buffer.length)) != -1) {
|
|
|
|
baos.write(buffer, 0, count);
|
|
|
|
}
|
|
|
|
baos.flush();
|
|
|
|
byte[] profilePicture = baos.toByteArray();
|
|
|
|
// Re-upload it
|
|
|
|
ProfilePictureUtilities.INSTANCE.upload(profilePicture, encodedProfileKey, ApplicationContext.this).success(unit -> {
|
|
|
|
// Update the last profile picture upload date
|
|
|
|
TextSecurePreferences.setLastProfilePictureUpload(ApplicationContext.this, new Date().getTime());
|
2022-12-19 00:29:05 +00:00
|
|
|
Log.d("Loki-Avatar", "Uploading Avatar Finished");
|
2021-04-27 04:36:03 +00:00
|
|
|
return Unit.INSTANCE;
|
|
|
|
});
|
2021-03-03 04:07:37 +00:00
|
|
|
} catch (Exception exception) {
|
|
|
|
// Do nothing
|
|
|
|
}
|
2020-02-24 03:57:51 +00:00
|
|
|
});
|
2021-03-03 04:07:37 +00:00
|
|
|
}
|
|
|
|
|
2022-09-04 11:03:32 +00:00
|
|
|
private void loadEmojiSearchIndexIfNeeded() {
|
|
|
|
Executors.newSingleThreadExecutor().execute(() -> {
|
|
|
|
EmojiSearchDatabase emojiSearchDb = getDatabaseComponent().emojiSearchDatabase();
|
|
|
|
if (emojiSearchDb.query("face", 1).isEmpty()) {
|
|
|
|
try (InputStream inputStream = getAssets().open("emoji/emoji_search_index.json")) {
|
|
|
|
List<EmojiSearchData> searchIndex = Arrays.asList(JsonUtil.fromJson(inputStream, EmojiSearchData[].class));
|
|
|
|
emojiSearchDb.setSearchIndex(searchIndex);
|
|
|
|
} catch (IOException e) {
|
|
|
|
Log.e("Loki", "Failed to load emoji search index");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-03-03 04:07:37 +00:00
|
|
|
public void clearAllData(boolean isMigratingToV2KeyPair) {
|
|
|
|
String token = TextSecurePreferences.getFCMToken(this);
|
|
|
|
if (token != null && !token.isEmpty()) {
|
|
|
|
LokiPushNotificationManager.unregister(token, this);
|
|
|
|
}
|
|
|
|
if (firebaseInstanceIdJob != null && firebaseInstanceIdJob.isActive()) {
|
|
|
|
firebaseInstanceIdJob.cancel(null);
|
|
|
|
}
|
|
|
|
String displayName = TextSecurePreferences.getProfileName(this);
|
|
|
|
boolean isUsingFCM = TextSecurePreferences.isUsingFCM(this);
|
|
|
|
TextSecurePreferences.clearAll(this);
|
|
|
|
if (isMigratingToV2KeyPair) {
|
|
|
|
TextSecurePreferences.setIsUsingFCM(this, isUsingFCM);
|
|
|
|
TextSecurePreferences.setProfileName(this, displayName);
|
2019-11-28 01:49:33 +00:00
|
|
|
}
|
2021-03-03 04:07:37 +00:00
|
|
|
getSharedPreferences(PREFERENCES_NAME, 0).edit().clear().commit();
|
2023-01-06 04:41:26 +00:00
|
|
|
if (!deleteDatabase(SQLCipherOpenHelper.DATABASE_NAME)) {
|
2021-03-03 04:07:37 +00:00
|
|
|
Log.d("Loki", "Failed to delete database.");
|
2019-11-28 01:49:33 +00:00
|
|
|
}
|
2021-03-03 04:07:37 +00:00
|
|
|
Util.runOnMain(() -> new Handler().postDelayed(ApplicationContext.this::restartApplication, 200));
|
|
|
|
}
|
|
|
|
|
|
|
|
public void restartApplication() {
|
|
|
|
Intent intent = new Intent(this, HomeActivity.class);
|
|
|
|
startActivity(Intent.makeRestartActivityTask(intent.getComponent()));
|
|
|
|
Runtime.getRuntime().exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
// endregion
|
2014-07-25 22:14:29 +00:00
|
|
|
}
|