From 501f3bbb871af44c5113f43c8044af9e868c2661 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Fri, 9 Oct 2020 13:57:52 +1100 Subject: [PATCH 01/12] Match iOS path maintenance changes --- .../securesms/loki/activities/PathActivity.kt | 2 +- .../loki/database/LokiAPIDatabase.kt | 59 +++++++++++-------- .../securesms/loki/views/PathStatusView.kt | 2 +- 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/org/thoughtcrime/securesms/loki/activities/PathActivity.kt b/src/org/thoughtcrime/securesms/loki/activities/PathActivity.kt index fa96d6b2a1..9de15d852b 100644 --- a/src/org/thoughtcrime/securesms/loki/activities/PathActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/activities/PathActivity.kt @@ -82,7 +82,7 @@ class PathActivity : PassphraseRequiredActionBarActivity() { private fun update(isAnimated: Boolean) { pathRowsContainer.removeAllViews() - if (OnionRequestAPI.paths.count() >= OnionRequestAPI.pathCount) { + if (OnionRequestAPI.paths.isNotEmpty()) { val path = OnionRequestAPI.paths.firstOrNull() ?: return finish() val dotAnimationRepeatInterval = path.count().toLong() * 1000 + 1000 val pathRows = path.mapIndexed { index, snode -> diff --git a/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt b/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt index 18fae93b87..e411117150 100644 --- a/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt +++ b/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt @@ -114,6 +114,29 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( database.insertOrUpdate(snodePoolTable, row, "${Companion.dummyKey} = ?", wrap("dummy_key")) } + override fun setOnionRequestPaths(newValue: List>) { + // FIXME: This approach assumes either 1 or 2 paths of length 3 each. We should do better than this. + val database = databaseHelper.writableDatabase + fun set(indexPath: String, snode: Snode) { + var snodeAsString = "${snode.address}-${snode.port}" + val keySet = snode.publicKeySet + if (keySet != null) { + snodeAsString += "-${keySet.ed25519Key}-${keySet.x25519Key}" + } + val row = wrap(mapOf( Companion.indexPath to indexPath, Companion.snode to snodeAsString )) + database.insertOrUpdate(onionRequestPathTable, row, "${Companion.indexPath} = ?", wrap(indexPath)) + } + Log.d("Loki", "Persisting onion request paths to database.") + if (newValue.count() < 1) { return } + val path0 = newValue[0] + if (path0.count() != 3) { return } + set("0-0", path0[0]); set("0-1", path0[1]); set("0-2", path0[2]) + if (newValue.count() < 2) { return } + val path1 = newValue[1] + if (path1.count() != 3) { return } + set("1-0", path1[0]); set("1-1", path1[1]); set("1-2", path1[2]) + } + override fun getOnionRequestPaths(): List> { val database = databaseHelper.readableDatabase fun get(indexPath: String): Snode? { @@ -131,10 +154,16 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( } } } - val path0Snode0 = get("0-0") ?: return listOf(); val path0Snode1 = get("0-1") ?: return listOf() - val path0Snode2 = get("0-2") ?: return listOf(); val path1Snode0 = get("1-0") ?: return listOf() - val path1Snode1 = get("1-1") ?: return listOf(); val path1Snode2 = get("1-2") ?: return listOf() - return listOf( listOf( path0Snode0, path0Snode1, path0Snode2 ), listOf( path1Snode0, path1Snode1, path1Snode2 ) ) + val result = mutableListOf>() + val path0Snode0 = get("0-0"); val path0Snode1 = get("0-1"); val path0Snode2 = get("0-2") + if (path0Snode0 != null && path0Snode1 != null && path0Snode2 != null) { + result.add(listOf( path0Snode0, path0Snode1, path0Snode2 )) + } + val path1Snode0 = get("1-0"); val path1Snode1 = get("1-1"); val path1Snode2 = get("1-2") + if (path1Snode0 != null && path1Snode1 != null && path1Snode2 != null) { + result.add(listOf( path1Snode0, path1Snode1, path1Snode2 )) + } + return result } override fun clearOnionRequestPaths() { @@ -147,28 +176,6 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( delete("1-1"); delete("1-2") } - override fun setOnionRequestPaths(newValue: List>) { - // TODO: Make this work with arbitrary paths - if (newValue.count() != 2) { return } - val path0 = newValue[0] - val path1 = newValue[1] - if (path0.count() != 3 || path1.count() != 3) { return } - Log.d("Loki", "Persisting onion request paths to database.") - val database = databaseHelper.writableDatabase - fun set(indexPath: String, snode: Snode) { - var snodeAsString = "${snode.address}-${snode.port}" - val keySet = snode.publicKeySet - if (keySet != null) { - snodeAsString += "-${keySet.ed25519Key}-${keySet.x25519Key}" - } - val row = wrap(mapOf( Companion.indexPath to indexPath, Companion.snode to snodeAsString )) - database.insertOrUpdate(onionRequestPathTable, row, "${Companion.indexPath} = ?", wrap(indexPath)) - } - set("0-0", path0[0]); set("0-1", path0[1]) - set("0-2", path0[2]); set("1-0", path1[0]) - set("1-1", path1[1]); set("1-2", path1[2]) - } - override fun getSwarm(publicKey: String): Set? { val database = databaseHelper.readableDatabase return database.get(swarmTable, "${Companion.swarmPublicKey} = ?", wrap(publicKey)) { cursor -> diff --git a/src/org/thoughtcrime/securesms/loki/views/PathStatusView.kt b/src/org/thoughtcrime/securesms/loki/views/PathStatusView.kt index e65630c144..77cfbe2505 100644 --- a/src/org/thoughtcrime/securesms/loki/views/PathStatusView.kt +++ b/src/org/thoughtcrime/securesms/loki/views/PathStatusView.kt @@ -85,7 +85,7 @@ class PathStatusView : View { private fun handlePathsBuiltEvent() { update() } private fun update() { - if (OnionRequestAPI.paths.count() >= OnionRequestAPI.pathCount) { + if (OnionRequestAPI.paths.isNotEmpty()) { setBackgroundResource(R.drawable.accent_dot) mainColor = resources.getColorWithID(R.color.accent, context.theme) sessionShadowColor = resources.getColorWithID(R.color.accent, context.theme) From f9e8eb25497abb6cac58813187ea0c50bfbd0ba9 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Fri, 9 Oct 2020 14:38:29 +1100 Subject: [PATCH 02/12] Debug --- src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt b/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt index e411117150..329b40fef8 100644 --- a/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt +++ b/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt @@ -127,6 +127,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( database.insertOrUpdate(onionRequestPathTable, row, "${Companion.indexPath} = ?", wrap(indexPath)) } Log.d("Loki", "Persisting onion request paths to database.") + clearOnionRequestPaths() if (newValue.count() < 1) { return } val path0 = newValue[0] if (path0.count() != 3) { return } From 19c5fd8d1848cf165b1b6f185840f6c208d25702 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Wed, 21 Oct 2020 10:20:23 +1100 Subject: [PATCH 03/12] Minor UI polish --- res/layout-sw400dp/activity_restore.xml | 9 ++++++--- res/layout/activity_restore.xml | 7 ++++++- .../thoughtcrime/securesms/loki/views/FakeChatView.kt | 4 ++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/res/layout-sw400dp/activity_restore.xml b/res/layout-sw400dp/activity_restore.xml index bb241b9abf..6f3535ede0 100644 --- a/res/layout-sw400dp/activity_restore.xml +++ b/res/layout-sw400dp/activity_restore.xml @@ -34,12 +34,15 @@ style="@style/SessionEditText" android:id="@+id/mnemonicEditText" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingTop="28dp" - android:paddingBottom="28dp" + android:layout_height="80dp" android:layout_marginLeft="@dimen/very_large_spacing" android:layout_marginTop="12dp" android:layout_marginRight="@dimen/very_large_spacing" + android:paddingTop="0dp" + android:paddingBottom="0dp" + android:gravity="center_vertical" + android:inputType="textMultiLine" + android:maxLines="2" android:hint="@string/activity_restore_seed_edit_text_hint" /> Date: Mon, 26 Oct 2020 09:36:09 +1100 Subject: [PATCH 04/12] Update version number --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 734441932b..bf872b1f1d 100644 --- a/build.gradle +++ b/build.gradle @@ -181,8 +181,8 @@ dependencies { testImplementation 'org.robolectric:shadows-multidex:4.2' } -def canonicalVersionCode = 110 -def canonicalVersionName = "1.6.1" +def canonicalVersionCode = 111 +def canonicalVersionName = "1.6.2" def postFixSize = 10 def abiPostFix = ['armeabi-v7a' : 1, From 4e69a538cb09a5c2d567a8186c11f4d3a3ef8528 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 27 Oct 2020 09:42:39 +1100 Subject: [PATCH 05/12] Fix crash --- src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt b/src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt index 8095731318..cdcdc20e6b 100644 --- a/src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt +++ b/src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt @@ -24,8 +24,8 @@ class PublicChatManager(private val context: Context) { var areAllCaughtUp = true refreshChatsAndPollers() for ((threadID, chat) in chats) { - val poller = pollers[threadID] ?: PublicChatPoller(context, chat) - areAllCaughtUp = areAllCaughtUp && poller.isCaughtUp + val poller = pollers[threadID] + areAllCaughtUp = if(poller != null) areAllCaughtUp && poller.isCaughtUp else false } return areAllCaughtUp } From a959c02252c88351e8ba03125f94ccc12171592f Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 27 Oct 2020 09:59:29 +1100 Subject: [PATCH 06/12] Fix inverted boolean --- src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt b/src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt index cdcdc20e6b..c632e44eaa 100644 --- a/src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt +++ b/src/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt @@ -25,7 +25,7 @@ class PublicChatManager(private val context: Context) { refreshChatsAndPollers() for ((threadID, chat) in chats) { val poller = pollers[threadID] - areAllCaughtUp = if(poller != null) areAllCaughtUp && poller.isCaughtUp else false + areAllCaughtUp = if (poller != null) areAllCaughtUp && poller.isCaughtUp else true } return areAllCaughtUp } From ae261ebd83c75b0a91afd7ff62865c1130cdabca Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Tue, 27 Oct 2020 10:03:32 +1100 Subject: [PATCH 07/12] disable background polling when FCM is on --- .../securesms/loki/api/BackgroundPollJob.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/org/thoughtcrime/securesms/loki/api/BackgroundPollJob.kt b/src/org/thoughtcrime/securesms/loki/api/BackgroundPollJob.kt index 1cf97b3c64..b89d051554 100644 --- a/src/org/thoughtcrime/securesms/loki/api/BackgroundPollJob.kt +++ b/src/org/thoughtcrime/securesms/loki/api/BackgroundPollJob.kt @@ -50,13 +50,16 @@ class BackgroundPollJob private constructor(parameters: Parameters) : BaseJob(pa Log.d("Loki", "Performing background poll.") val userPublicKey = TextSecurePreferences.getLocalNumber(context) val promises = mutableListOf>() - val promise = SnodeAPI.shared.getMessages(userPublicKey).map { envelopes -> - envelopes.forEach { - PushContentReceiveJob(context).processEnvelope(SignalServiceEnvelope(it), false) + if (!TextSecurePreferences.isUsingFCM(context)) { + Log.d("Loki", "Not using FCM, poll for contacts and closed groups.") + val promise = SnodeAPI.shared.getMessages(userPublicKey).map { envelopes -> + envelopes.forEach { + PushContentReceiveJob(context).processEnvelope(SignalServiceEnvelope(it), false) + } } + promises.add(promise) + promises.addAll(ClosedGroupPoller.shared.pollOnce()) } - promises.add(promise) - promises.addAll(ClosedGroupPoller.shared.pollOnce()) val openGroups = DatabaseFactory.getLokiThreadDatabase(context).getAllPublicChats().map { it.value } for (openGroup in openGroups) { val poller = PublicChatPoller(context, openGroup) From 5d3c495f63dabe475e70378f7e5a59fb933fc219 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 27 Oct 2020 10:15:15 +1100 Subject: [PATCH 08/12] Reword log --- src/org/thoughtcrime/securesms/loki/api/BackgroundPollJob.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/thoughtcrime/securesms/loki/api/BackgroundPollJob.kt b/src/org/thoughtcrime/securesms/loki/api/BackgroundPollJob.kt index b89d051554..7081cefe46 100644 --- a/src/org/thoughtcrime/securesms/loki/api/BackgroundPollJob.kt +++ b/src/org/thoughtcrime/securesms/loki/api/BackgroundPollJob.kt @@ -51,7 +51,7 @@ class BackgroundPollJob private constructor(parameters: Parameters) : BaseJob(pa val userPublicKey = TextSecurePreferences.getLocalNumber(context) val promises = mutableListOf>() if (!TextSecurePreferences.isUsingFCM(context)) { - Log.d("Loki", "Not using FCM, poll for contacts and closed groups.") + Log.d("Loki", "Not using FCM; polling for contacts and closed groups.") val promise = SnodeAPI.shared.getMessages(userPublicKey).map { envelopes -> envelopes.forEach { PushContentReceiveJob(context).processEnvelope(SignalServiceEnvelope(it), false) From 00e45174e471f809625f3d1e08fa7a94263c0d0e Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 27 Oct 2020 14:41:03 +1100 Subject: [PATCH 09/12] Update build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bf872b1f1d..231d0b4760 100644 --- a/build.gradle +++ b/build.gradle @@ -181,7 +181,7 @@ dependencies { testImplementation 'org.robolectric:shadows-multidex:4.2' } -def canonicalVersionCode = 111 +def canonicalVersionCode = 112 def canonicalVersionName = "1.6.2" def postFixSize = 10 From 8070b9dd4ea27808de23413cc852f0059046dbb2 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Wed, 28 Oct 2020 10:14:53 +1100 Subject: [PATCH 10/12] Update build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 231d0b4760..70b8b428fe 100644 --- a/build.gradle +++ b/build.gradle @@ -181,7 +181,7 @@ dependencies { testImplementation 'org.robolectric:shadows-multidex:4.2' } -def canonicalVersionCode = 112 +def canonicalVersionCode = 113 def canonicalVersionName = "1.6.2" def postFixSize = 10 From 49b588a6e3d3b09e999fb5107c3b01b0b2fba38c Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Wed, 28 Oct 2020 11:31:53 +1100 Subject: [PATCH 11/12] Update build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 70b8b428fe..ae728ee7f0 100644 --- a/build.gradle +++ b/build.gradle @@ -181,7 +181,7 @@ dependencies { testImplementation 'org.robolectric:shadows-multidex:4.2' } -def canonicalVersionCode = 113 +def canonicalVersionCode = 114 def canonicalVersionName = "1.6.2" def postFixSize = 10 From 6ad688b8d024ba3076fad59bc0b987b86b7aa59c Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Wed, 28 Oct 2020 13:57:59 +1100 Subject: [PATCH 12/12] Update build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ae728ee7f0..57c098a103 100644 --- a/build.gradle +++ b/build.gradle @@ -181,7 +181,7 @@ dependencies { testImplementation 'org.robolectric:shadows-multidex:4.2' } -def canonicalVersionCode = 114 +def canonicalVersionCode = 115 def canonicalVersionName = "1.6.2" def postFixSize = 10