From f3bb40e0242847e73198b756a0700d54f3e8abbf Mon Sep 17 00:00:00 2001 From: Anton Chekulaev Date: Fri, 28 Aug 2020 17:38:19 +1000 Subject: [PATCH 01/11] Loading indicator for message thumbnail view. --- res/layout/conversation_item_thumbnail.xml | 15 +++++++- .../components/ConversationItemThumbnail.java | 37 ++++++++++++++----- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/res/layout/conversation_item_thumbnail.xml b/res/layout/conversation_item_thumbnail.xml index 23544e8e68..fe438060da 100644 --- a/res/layout/conversation_item_thumbnail.xml +++ b/res/layout/conversation_item_thumbnail.xml @@ -42,7 +42,18 @@ android:layout_marginStart="@dimen/message_bubble_horizontal_padding" android:layout_marginEnd="@dimen/message_bubble_horizontal_padding" android:layout_marginBottom="@dimen/message_bubble_bottom_padding" - app:footer_text_color="@color/core_white" - app:footer_icon_color="@color/core_white"/> + app:footer_text_color="@android:color/white" + app:footer_icon_color="@android:color/white"/> + + diff --git a/src/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java b/src/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java index 4b4e791ab2..ef7db1abb1 100644 --- a/src/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java +++ b/src/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java @@ -3,15 +3,16 @@ package org.thoughtcrime.securesms.components; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; +import android.util.AttributeSet; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.ProgressBar; + import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.UiThread; -import android.util.AttributeSet; -import android.widget.FrameLayout; -import android.widget.ImageView; -import network.loki.messenger.R; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.Slide; @@ -21,12 +22,15 @@ import org.thoughtcrime.securesms.util.ThemeUtil; import java.util.List; +import network.loki.messenger.R; + public class ConversationItemThumbnail extends FrameLayout { private ThumbnailView thumbnail; private AlbumThumbnailView album; private ImageView shade; private ConversationItemFooter footer; + private ProgressBar loadIndicator; private CornerMask cornerMask; private Outliner outliner; private boolean borderless; @@ -49,12 +53,13 @@ public class ConversationItemThumbnail extends FrameLayout { private void init(@Nullable AttributeSet attrs) { inflate(getContext(), R.layout.conversation_item_thumbnail, this); - this.thumbnail = findViewById(R.id.conversation_thumbnail_image); - this.album = findViewById(R.id.conversation_thumbnail_album); - this.shade = findViewById(R.id.conversation_thumbnail_shade); - this.footer = findViewById(R.id.conversation_thumbnail_footer); - this.cornerMask = new CornerMask(this); - this.outliner = new Outliner(); + this.thumbnail = findViewById(R.id.conversation_thumbnail_image); + this.album = findViewById(R.id.conversation_thumbnail_album); + this.shade = findViewById(R.id.conversation_thumbnail_shade); + this.footer = findViewById(R.id.conversation_thumbnail_footer); + this.loadIndicator = findViewById(R.id.conversation_thumbnail_load_indicator); + this.cornerMask = new CornerMask(this); + this.outliner = new Outliner(); outliner.setColor(ThemeUtil.getThemedColor(getContext(), R.attr.conversation_item_image_outline_color)); @@ -136,6 +141,18 @@ public class ConversationItemThumbnail extends FrameLayout { album.setSlides(glideRequests, slides, showControls); setTouchDelegate(album.getTouchDelegate()); } + + // Display loading indicator if any attachment is in loading state. + { + boolean anyLoading = false; + for (int i = 0; i < slides.size(); i++) { + if (slides.get(i).asAttachment().isInProgress()) { + anyLoading = true; + break; + } + } + loadIndicator.setVisibility(anyLoading ? VISIBLE : GONE); + } } public void setConversationColor(@ColorInt int color) { From 7cc67daf80603e204fb0c669607aab0623e6bf18 Mon Sep 17 00:00:00 2001 From: Anton Chekulaev Date: Mon, 31 Aug 2020 19:46:05 +1000 Subject: [PATCH 02/11] DB attachment record gets properly updated on upload error. Individual loading indicators per conversation item thumbnail. --- res/layout/conversation_item_thumbnail.xml | 11 ---------- res/layout/thumbnail_view.xml | 9 ++++++++ .../components/AlbumThumbnailView.java | 7 ++----- .../components/ConversationItemThumbnail.java | 21 ++++--------------- .../securesms/components/ThumbnailView.java | 12 ++++++++--- .../database/AttachmentDatabase.java | 11 +++++++++- .../securesms/jobs/AttachmentUploadJob.java | 19 +++++++++++------ 7 files changed, 47 insertions(+), 43 deletions(-) diff --git a/res/layout/conversation_item_thumbnail.xml b/res/layout/conversation_item_thumbnail.xml index fe438060da..bff1a90fa8 100644 --- a/res/layout/conversation_item_thumbnail.xml +++ b/res/layout/conversation_item_thumbnail.xml @@ -45,15 +45,4 @@ app:footer_text_color="@android:color/white" app:footer_icon_color="@android:color/white"/> - - diff --git a/res/layout/thumbnail_view.xml b/res/layout/thumbnail_view.xml index a9f979014c..96ec33477e 100644 --- a/res/layout/thumbnail_view.xml +++ b/res/layout/thumbnail_view.xml @@ -22,6 +22,15 @@ android:src="@drawable/ic_caption_28" android:visibility="gone" /> + + insertAttachmentsForMessage(long mmsId, @NonNull List attachments, @NonNull List quoteAttachment) throws MmsException { diff --git a/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java b/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java index 766e8f20f6..a356deabec 100644 --- a/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java +++ b/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java @@ -87,13 +87,20 @@ public class AttachmentUploadJob extends BaseJob implements InjectableType { // Only upload attachment if necessary if (databaseAttachment.getUrl().isEmpty()) { - MediaConstraints mediaConstraints = MediaConstraints.getPushMediaConstraints(); - Attachment scaledAttachment = scaleAndStripExif(database, mediaConstraints, databaseAttachment); - SignalServiceAttachment localAttachment = getAttachmentFor(scaledAttachment); - SignalServiceAttachmentPointer remoteAttachment = messageSender.uploadAttachment(localAttachment.asStream(), databaseAttachment.isSticker(), new SignalServiceAddress(destination.serialize())); - Attachment attachment = PointerAttachment.forPointer(Optional.of(remoteAttachment), null, databaseAttachment.getFastPreflightId()).get(); + final Attachment attachment; + try { + MediaConstraints mediaConstraints = MediaConstraints.getPushMediaConstraints(); + Attachment scaledAttachment = scaleAndStripExif(database, mediaConstraints, databaseAttachment); + SignalServiceAttachment localAttachment = getAttachmentFor(scaledAttachment); + SignalServiceAttachmentPointer remoteAttachment = messageSender.uploadAttachment(localAttachment.asStream(), databaseAttachment.isSticker(), new SignalServiceAddress(destination.serialize())); + attachment = PointerAttachment.forPointer(Optional.of(remoteAttachment), null, databaseAttachment.getFastPreflightId()).get(); + } catch (Exception e) { + // On any error make sure we mark the related DB record's transfer state as failed. + database.updateAttachmentAfterUploadFailed(databaseAttachment.getAttachmentId()); + throw e; + } - database.updateAttachmentAfterUpload(databaseAttachment.getAttachmentId(), attachment); + database.updateAttachmentAfterUploadSucceeded(databaseAttachment.getAttachmentId(), attachment); } } From f0ad59370acb067182a7d0468443b6adbe2fc112 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 1 Sep 2020 09:10:23 +1000 Subject: [PATCH 03/11] Minor refactoring --- res/layout/thumbnail_view.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/res/layout/thumbnail_view.xml b/res/layout/thumbnail_view.xml index 96ec33477e..a22164f376 100644 --- a/res/layout/thumbnail_view.xml +++ b/res/layout/thumbnail_view.xml @@ -24,12 +24,14 @@ + android:indeterminateTint="@android:color/white" + android:indeterminateTintMode="src_in" + tools:visibility="visible" /> Date: Tue, 1 Sep 2020 11:43:12 +1000 Subject: [PATCH 04/11] Update version number --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 137160529e..d067aea8fd 100644 --- a/build.gradle +++ b/build.gradle @@ -185,8 +185,8 @@ dependencies { implementation "com.opencsv:opencsv:4.6" } -def canonicalVersionCode = 75 -def canonicalVersionName = "1.4.6" +def canonicalVersionCode = 76 +def canonicalVersionName = "1.4.7" def postFixSize = 10 def abiPostFix = ['armeabi-v7a' : 1, From 12f35fea04c33af73be54258ee0fe76915a71f11 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 1 Sep 2020 13:20:03 +1000 Subject: [PATCH 05/11] Update build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d067aea8fd..b6cf63b384 100644 --- a/build.gradle +++ b/build.gradle @@ -185,7 +185,7 @@ dependencies { implementation "com.opencsv:opencsv:4.6" } -def canonicalVersionCode = 76 +def canonicalVersionCode = 77 def canonicalVersionName = "1.4.7" def postFixSize = 10 From ef509d3c58665d581a069b5a52deaa94a9bdcf79 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 1 Sep 2020 16:27:10 +1000 Subject: [PATCH 06/11] Show build number in app settings --- .../thoughtcrime/securesms/loki/activities/SettingsActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/thoughtcrime/securesms/loki/activities/SettingsActivity.kt b/src/org/thoughtcrime/securesms/loki/activities/SettingsActivity.kt index c79812b15a..e7016b4636 100644 --- a/src/org/thoughtcrime/securesms/loki/activities/SettingsActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/activities/SettingsActivity.kt @@ -95,7 +95,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { // linkedDevicesButton.setOnClickListener { showLinkedDevices() } seedButton.setOnClickListener { showSeed() } clearAllDataButton.setOnClickListener { clearAllData() } - versionTextView.text = String.format(getString(R.string.version_s), BuildConfig.VERSION_NAME) + versionTextView.text = String.format(getString(R.string.version_s), "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})") } public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { From ae956b732a51f22a6a493489b72fd4a7f57a820f Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 1 Sep 2020 16:30:35 +1000 Subject: [PATCH 07/11] Update build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b6cf63b384..4c08277274 100644 --- a/build.gradle +++ b/build.gradle @@ -185,7 +185,7 @@ dependencies { implementation "com.opencsv:opencsv:4.6" } -def canonicalVersionCode = 77 +def canonicalVersionCode = 78 def canonicalVersionName = "1.4.7" def postFixSize = 10 From d26712bdb40713fe2edfbc9314a8affe647aca10 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 1 Sep 2020 17:02:08 +1000 Subject: [PATCH 08/11] Slightly reduce background poll interval --- src/org/thoughtcrime/securesms/loki/api/BackgroundPollWorker.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/thoughtcrime/securesms/loki/api/BackgroundPollWorker.kt b/src/org/thoughtcrime/securesms/loki/api/BackgroundPollWorker.kt index 9cd363823e..e4eb12df94 100644 --- a/src/org/thoughtcrime/securesms/loki/api/BackgroundPollWorker.kt +++ b/src/org/thoughtcrime/securesms/loki/api/BackgroundPollWorker.kt @@ -15,7 +15,7 @@ import java.util.concurrent.TimeUnit class BackgroundPollWorker : PersistentAlarmManagerListener() { companion object { - private val pollInterval = TimeUnit.MINUTES.toMillis(20) + private val pollInterval = TimeUnit.MINUTES.toMillis(15) @JvmStatic fun schedule(context: Context) { From fcc63042470ac23cda8c8d3f451b2c15d0d81f1a Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 1 Sep 2020 18:30:54 +1000 Subject: [PATCH 09/11] Fix path rebuilding --- src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt b/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt index d41ef58791..18fae93b87 100644 --- a/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt +++ b/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt @@ -137,7 +137,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( return listOf( listOf( path0Snode0, path0Snode1, path0Snode2 ), listOf( path1Snode0, path1Snode1, path1Snode2 ) ) } - fun clearOnionRequestPaths() { + override fun clearOnionRequestPaths() { val database = databaseHelper.writableDatabase fun delete(indexPath: String) { database.delete(onionRequestPathTable, "${Companion.indexPath} = ?", wrap(indexPath)) From 6b75d3338f7a553463ff5ed77b8f8b31c2fa40e9 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 1 Sep 2020 18:31:34 +1000 Subject: [PATCH 10/11] Update build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4c08277274..df676f76fc 100644 --- a/build.gradle +++ b/build.gradle @@ -185,7 +185,7 @@ dependencies { implementation "com.opencsv:opencsv:4.6" } -def canonicalVersionCode = 78 +def canonicalVersionCode = 79 def canonicalVersionName = "1.4.7" def postFixSize = 10 From a12d9b4d98e3ab4c6bc5e0dc72c05dbd6ea95428 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Wed, 2 Sep 2020 08:54:14 +1000 Subject: [PATCH 11/11] Update build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index df676f76fc..1853404371 100644 --- a/build.gradle +++ b/build.gradle @@ -185,7 +185,7 @@ dependencies { implementation "com.opencsv:opencsv:4.6" } -def canonicalVersionCode = 79 +def canonicalVersionCode = 80 def canonicalVersionName = "1.4.7" def postFixSize = 10