diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index ace5c81075..62281c9079 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -136,7 +136,6 @@ import org.thoughtcrime.securesms.loki.activities.EditClosedGroupActivity; import org.thoughtcrime.securesms.loki.activities.HomeActivity; import org.thoughtcrime.securesms.loki.api.PublicChatInfoUpdateWorker; import org.thoughtcrime.securesms.loki.database.LokiThreadDatabase; -import org.thoughtcrime.securesms.loki.database.LokiThreadDatabaseDelegate; import org.thoughtcrime.securesms.loki.database.LokiUserDatabase; import org.thoughtcrime.securesms.loki.protocol.ClosedGroupsProtocolV2; import org.thoughtcrime.securesms.loki.utilities.GeneralUtilitiesKt; @@ -144,7 +143,6 @@ import org.thoughtcrime.securesms.loki.utilities.MentionManagerUtilities; import org.thoughtcrime.securesms.loki.utilities.OpenGroupUtilities; import org.thoughtcrime.securesms.loki.views.MentionCandidateSelectionView; import org.thoughtcrime.securesms.loki.views.ProfilePictureView; -import org.thoughtcrime.securesms.loki.views.SessionRestoreBannerView; import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mediasend.MediaSendActivity; import org.thoughtcrime.securesms.mms.AttachmentManager; @@ -228,8 +226,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity InputPanel.Listener, InputPanel.MediaListener, ComposeText.CursorPositionChangedListener, - ConversationSearchBottomBar.EventListener, - LokiThreadDatabaseDelegate + ConversationSearchBottomBar.EventListener { private static final String TAG = ConversationActivity.class.getSimpleName(); @@ -311,9 +308,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private ArrayList mentions = new ArrayList<>(); private String oldText = ""; - // Restoration - protected SessionRestoreBannerView sessionRestoreBannerView; - private final PushCharacterCalculator characterCalculator = new PushCharacterCalculator(); @Override @@ -383,17 +377,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } }); - sessionRestoreBannerView.setOnRestore(() -> { - updateSessionRestoreBanner(); - return Unit.INSTANCE; - }); - sessionRestoreBannerView.setOnDismiss(() -> { - // TODO: Maybe silence for x minutes? - DatabaseFactory.getLokiThreadDatabase(ConversationActivity.this).removeAllSessionRestoreDevices(threadId); - updateSessionRestoreBanner(); - return Unit.INSTANCE; - }); - MentionManagerUtilities.INSTANCE.populateUserPublicKeyCacheIfNeeded(threadId, this); PublicChat publicChat = DatabaseFactory.getLokiThreadDatabase(this).getPublicChat(threadId); @@ -483,12 +466,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity ApplicationContext.getInstance(this).messageNotifier.setVisibleThread(threadId); markThreadAsRead(); - DatabaseFactory.getLokiThreadDatabase(this).setDelegate(this); - inputPanel.setHint(getResources().getString(R.string.ConversationActivity_message)); - updateSessionRestoreBanner(); - Log.i(TAG, "onResume() Finished: " + (System.currentTimeMillis() - getIntent().getLongExtra(TIMING_EXTRA, 0))); } @@ -553,13 +532,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity case PICK_AUDIO: setMedia(data.getData(), MediaType.AUDIO); break; -// case PICK_CONTACT: -// if (isSecureText && !isSmsForced()) { -//// openContactShareEditor(data.getData()); -// } else { -// addAttachmentContactInfo(data.getData()); -// } -// break; case TAKE_PHOTO: if (attachmentManager.getCaptureUri() != null) { setMedia(attachmentManager.getCaptureUri(), MediaType.IMAGE); @@ -1322,16 +1294,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity return future; } - private void updateSessionRestoreBanner() { - Set devices = DatabaseFactory.getLokiThreadDatabase(this).getSessionRestoreDevices(threadId); - if (devices.size() > 0) { - sessionRestoreBannerView.update(recipient); - sessionRestoreBannerView.show(); - } else { - sessionRestoreBannerView.hide(); - } - } - private void initializeViews() { profilePictureView = findViewById(R.id.profilePictureView); titleTextView = findViewById(R.id.titleTextView); @@ -1350,7 +1312,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity searchNav = ViewUtil.findById(this, R.id.conversation_search_nav); mentionCandidateSelectionViewContainer = ViewUtil.findById(this, R.id.mentionCandidateSelectionViewContainer); mentionCandidateSelectionView = ViewUtil.findById(this, R.id.userSelectionView); - sessionRestoreBannerView = ViewUtil.findById(this, R.id.sessionRestoreBannerView); messageStatusProgressBar = ViewUtil.findById(this, R.id.messageStatusProgressBar); muteIndicatorImageView = ViewUtil.findById(this, R.id.muteIndicatorImageView); subtitleTextView = ViewUtil.findById(this, R.id.subtitleTextView); @@ -1825,13 +1786,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity updateLinkPreviewState(); } - @Override - public void handleSessionRestoreDevicesChanged(long threadID) { - if (threadID == this.threadId) { - runOnUiThread(this::updateSessionRestoreBanner); - } - } - private void sendMessage() { if (inputPanel.isRecordingInLockedMode()) { inputPanel.releaseRecordingLock(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index 82bcb681a8..8a629b4e74 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -251,7 +251,8 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { "SmsSendJob", "SmsSentJob", "SmsReceiveJob", - "PushGroupUpdateJob"); + "PushGroupUpdateJob", + "ResetThreadSessionJob"); } db.setTransactionSuccessful(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java index 84d2e0e93b..26640d514d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -15,13 +15,11 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkOrCellServiceConstraint import org.thoughtcrime.securesms.jobmanager.impl.SqlCipherMigrationConstraint; import org.thoughtcrime.securesms.jobmanager.impl.SqlCipherMigrationConstraintObserver; import org.thoughtcrime.securesms.loki.api.PrepareAttachmentAudioExtrasJob; -import org.thoughtcrime.securesms.loki.api.ResetThreadSessionJob; import org.thoughtcrime.securesms.loki.protocol.ClosedGroupUpdateMessageSendJobV2; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -50,7 +48,6 @@ public final class JobManagerFactories { put(TypingSendJob.KEY, new TypingSendJob.Factory()); put(UpdateApkJob.KEY, new UpdateApkJob.Factory()); put(PrepareAttachmentAudioExtrasJob.KEY, new PrepareAttachmentAudioExtrasJob.Factory()); - put(ResetThreadSessionJob.KEY, new ResetThreadSessionJob.Factory()); }}; factoryKeys.addAll(factoryHashMap.keySet()); return factoryHashMap; diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt index d4fc68b3ea..57292ae53d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt @@ -28,11 +28,9 @@ import network.loki.messenger.R import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity import org.thoughtcrime.securesms.conversation.ConversationActivity -import org.session.libsession.messaging.threads.Address import org.session.libsession.utilities.GroupUtil import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.database.model.ThreadRecord -import org.thoughtcrime.securesms.loki.api.ResetThreadSessionJob import org.thoughtcrime.securesms.loki.utilities.* import org.thoughtcrime.securesms.loki.views.ConversationView import org.thoughtcrime.securesms.loki.views.NewConversationButtonSetViewDelegate @@ -40,8 +38,6 @@ import org.thoughtcrime.securesms.loki.views.SeedReminderViewDelegate import org.thoughtcrime.securesms.mms.GlideApp import org.thoughtcrime.securesms.mms.GlideRequests import org.session.libsession.utilities.TextSecurePreferences -import org.session.libsession.utilities.TextSecurePreferences.getBooleanPreference -import org.session.libsession.utilities.TextSecurePreferences.setBooleanPreference import org.session.libsession.utilities.Util import org.session.libsignal.service.loki.utilities.mentions.MentionsManager import org.session.libsignal.utilities.ThreadUtils diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/api/ClosedGroupPoller.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/api/ClosedGroupPoller.kt index 75c973c27d..5264a1892a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/api/ClosedGroupPoller.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/api/ClosedGroupPoller.kt @@ -22,7 +22,7 @@ class ClosedGroupPoller private constructor(private val context: Context) { override fun run() { poll() - handler.postDelayed(this, ClosedGroupPoller.pollInterval) + handler.postDelayed(this, pollInterval) } } @@ -40,24 +40,24 @@ class ClosedGroupPoller private constructor(private val context: Context) { // endregion // region Error - public class InsufficientSnodesException() : Exception("No snodes left to poll.") - public class PollingCanceledException() : Exception("Polling canceled.") + class InsufficientSnodesException() : Exception("No snodes left to poll.") + class PollingCanceledException() : Exception("Polling canceled.") // endregion // region Public API - public fun startIfNeeded() { + fun startIfNeeded() { if (isPolling) { return } isPolling = true task.run() } - public fun pollOnce(): List> { + fun pollOnce(): List> { if (isPolling) { return listOf() } isPolling = true return poll() } - public fun stopIfNeeded() { + fun stopIfNeeded() { isPolling = false handler.removeCallbacks(task) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt deleted file mode 100644 index 1bc0b6c891..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt +++ /dev/null @@ -1,71 +0,0 @@ -package org.thoughtcrime.securesms.loki.api - -import org.session.libsession.messaging.jobs.Data -import org.session.libsession.messaging.threads.Address -import org.thoughtcrime.securesms.jobmanager.Job -import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint -import org.thoughtcrime.securesms.jobs.BaseJob -import org.session.libsignal.utilities.logging.Log -import org.session.libsession.messaging.threads.recipients.Recipient -import org.thoughtcrime.securesms.sms.MessageSender -import org.thoughtcrime.securesms.sms.OutgoingEndSessionMessage -import org.thoughtcrime.securesms.sms.OutgoingTextMessage -import java.util.concurrent.TimeUnit - -class ResetThreadSessionJob private constructor( - parameters: Parameters, - private val address: Address, - private val threadId: Long) - : BaseJob(parameters) { - - companion object { - const val KEY = "ResetThreadSessionJob" - const val DATA_KEY_ADDRESS = "address" - const val DATA_KEY_THREAD_ID = "thread_id" - } - - constructor(address: Address, threadId: Long) : this(Parameters.Builder() - .addConstraint(NetworkConstraint.KEY) - .setQueue(KEY) - .setLifespan(TimeUnit.DAYS.toMillis(1)) - .setMaxAttempts(Parameters.UNLIMITED) - .build(), - address, - threadId) - - override fun serialize(): Data { - return Data.Builder() - .putParcelable(DATA_KEY_ADDRESS, address) - .putLong(DATA_KEY_THREAD_ID, threadId) - .build() - } - - override fun getFactoryKey(): String { return KEY } - - public override fun onRun() { - val recipient = Recipient.from(context, address, false) - - // Only reset sessions for private chats. - if (recipient.isGroupRecipient) return - - Log.v(KEY, "Resetting session for thread: \"$threadId\", recipient: \"${address.serialize()}\"") - - val message = OutgoingEndSessionMessage(OutgoingTextMessage(recipient, "TERMINATE", 0, -1)) - MessageSender.send(context, message, threadId, false, null) - } - - public override fun onShouldRetry(e: Exception): Boolean { - return false - } - - override fun onCanceled() { } - - class Factory : Job.Factory { - - override fun create(parameters: Parameters, data: Data): ResetThreadSessionJob { - val address = data.getParcelable(DATA_KEY_ADDRESS, Address.CREATOR)!! - val threadId = data.getLong(DATA_KEY_THREAD_ID) - return ResetThreadSessionJob(parameters, address, threadId) - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabase.kt index 70cb854b2f..0c2dff9a80 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabase.kt @@ -19,7 +19,6 @@ import org.session.libsignal.service.loki.database.LokiThreadDatabaseProtocol import org.session.libsignal.service.loki.utilities.PublicKeyValidation class LokiThreadDatabase(context: Context, helper: SQLCipherOpenHelper) : Database(context, helper), LokiThreadDatabaseProtocol { - var delegate: LokiThreadDatabaseDelegate? = null companion object { private val sessionResetTable = "loki_thread_session_reset_database" @@ -83,24 +82,4 @@ class LokiThreadDatabase(context: Context, helper: SQLCipherOpenHelper) : Databa override fun removePublicChat(threadID: Long) { databaseHelper.writableDatabase.delete(publicChatTable, "${Companion.threadID} = ?", arrayOf( threadID.toString() )) } - - fun addSessionRestoreDevice(threadID: Long, publicKey: String) { - val devices = getSessionRestoreDevices(threadID).toMutableSet() - if (devices.add(publicKey)) { - TextSecurePreferences.setStringPreference(context, "session_restore_devices_$threadID", devices.joinToString(",")) - delegate?.handleSessionRestoreDevicesChanged(threadID) - } - } - - fun getSessionRestoreDevices(threadID: Long): Set { - return TextSecurePreferences.getStringPreference(context, "session_restore_devices_$threadID", "")!! - .split(",") - .filter { PublicKeyValidation.isValid(it) } - .toSet() - } - - fun removeAllSessionRestoreDevices(threadID: Long) { - TextSecurePreferences.setStringPreference(context, "session_restore_devices_$threadID", "") - delegate?.handleSessionRestoreDevicesChanged(threadID) - } } \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabaseDelegate.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabaseDelegate.kt deleted file mode 100644 index a27ea6409e..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabaseDelegate.kt +++ /dev/null @@ -1,6 +0,0 @@ -package org.thoughtcrime.securesms.loki.database - -interface LokiThreadDatabaseDelegate { - - fun handleSessionRestoreDevicesChanged(threadID: Long) -} \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/views/SessionRestoreBannerView.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/views/SessionRestoreBannerView.kt deleted file mode 100644 index 0c164b88de..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/views/SessionRestoreBannerView.kt +++ /dev/null @@ -1,40 +0,0 @@ -package org.thoughtcrime.securesms.loki.views - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.LinearLayout -import kotlinx.android.synthetic.main.session_restore_banner.view.* - -import network.loki.messenger.R -import org.session.libsession.messaging.threads.recipients.Recipient - -class SessionRestoreBannerView : LinearLayout { - lateinit var recipient: Recipient - var onDismiss: (() -> Unit)? = null - var onRestore: (() -> Unit)? = null - - constructor(context: Context) : super(context, null) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs, 0) - constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) - - init { - LayoutInflater.from(context).inflate(R.layout.session_restore_banner, this, true) - restoreButton.setOnClickListener { onRestore?.invoke() } - dismissButton.setOnClickListener { onDismiss?.invoke() } - } - - fun update(recipient: Recipient) { - this.recipient = recipient - messageTextView.text = context.getString(R.string.session_reset_banner_message, recipient.toShortString()) - } - - fun show() { - sessionRestoreBanner.visibility = View.VISIBLE - } - - fun hide() { - sessionRestoreBanner.visibility = View.GONE - } -} diff --git a/app/src/main/res/layout/conversation_activity.xml b/app/src/main/res/layout/conversation_activity.xml index a16d43c215..edf2b4b091 100644 --- a/app/src/main/res/layout/conversation_activity.xml +++ b/app/src/main/res/layout/conversation_activity.xml @@ -134,11 +134,6 @@ android:background="?android:dividerHorizontal" android:elevation="1dp" /> - -