diff --git a/app/build.gradle b/app/build.gradle index 22a985fcd7..c47d4629f6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ configurations.configureEach { exclude module: "commons-logging" } -def canonicalVersionCode = 397 -def canonicalVersionName = "1.21.1" +def canonicalVersionCode = 399 +def canonicalVersionName = "1.21.3" def postFixSize = 10 def abiPostFix = ['armeabi-v7a' : 1, @@ -350,7 +350,6 @@ dependencies { implementation "nl.komponents.kovenant:kovenant:$kovenantVersion" implementation "nl.komponents.kovenant:kovenant-android:$kovenantVersion" implementation "com.jakewharton.rxbinding3:rxbinding:3.1.0" - implementation "com.github.ybq:Android-SpinKit:1.4.0" implementation "com.opencsv:opencsv:4.6" testImplementation "junit:junit:$junitVersion" testImplementation 'org.assertj:assertj-core:3.11.1' diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index d12cc78dc7..bc59fb80b9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -690,7 +690,11 @@ class ConversationActivityV2 : ScreenLockActionBarActivity(), InputBarDelegate, if (author != null && messageTimestamp >= 0) { jumpToMessage(author, messageTimestamp, firstLoad.get(), null) } else { - if (firstLoad.getAndSet(false)) scrollToFirstUnreadMessageIfNeeded(true) + if (firstLoad.getAndSet(false)) { + lifecycleScope.launch(Dispatchers.Main) { + scrollToFirstUnreadMessageIfNeeded(true) + } + } handleRecyclerViewScrolled() } } @@ -1041,9 +1045,13 @@ class ConversationActivityV2 : ScreenLockActionBarActivity(), InputBarDelegate, } } - private fun scrollToFirstUnreadMessageIfNeeded(isFirstLoad: Boolean = false, shouldHighlight: Boolean = false): Int { - val lastSeenTimestamp = threadDb.getLastSeenAndHasSent(viewModel.threadId).first() - val lastSeenItemPosition = adapter.findLastSeenItemPosition(lastSeenTimestamp) ?: return -1 + private suspend fun scrollToFirstUnreadMessageIfNeeded(isFirstLoad: Boolean = false, shouldHighlight: Boolean = false): Int { + val lastSeenItemPosition = withContext(Dispatchers.Default) { + val lastSeenTimestamp = threadDb.getLastSeenAndHasSent(viewModel.threadId).first() + adapter.findLastSeenItemPosition(lastSeenTimestamp) + } + + if(lastSeenItemPosition == null) return -1 // If this is triggered when first opening a conversation then we want to position the top // of the first unread message in the middle of the screen diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/search/SearchBottomBar.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/search/SearchBottomBar.kt index a379a23445..5f2fd73ab6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/search/SearchBottomBar.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/search/SearchBottomBar.kt @@ -5,11 +5,8 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import android.widget.LinearLayout -import com.squareup.phrase.Phrase import network.loki.messenger.R import network.loki.messenger.databinding.ViewSearchBottomBarBinding -import org.session.libsession.utilities.StringSubstitutionConstants.COUNT_KEY -import org.session.libsession.utilities.StringSubstitutionConstants.TOTAL_COUNT_KEY class SearchBottomBar : LinearLayout { private lateinit var binding: ViewSearchBottomBarBinding diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java index 13dac4d440..235a4e9dfa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java @@ -79,6 +79,7 @@ public class MediaSendFragment extends Fragment implements ViewTreeObserver.OnGl private ViewGroup playbackControlsContainer; private TextView charactersLeft; private View closeButton; + private View loader; private ControllableViewPager fragmentPager; private MediaSendFragmentPagerAdapter fragmentPagerAdapter; @@ -137,6 +138,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat playbackControlsContainer = view.findViewById(R.id.mediasend_playback_controls_container); charactersLeft = view.findViewById(R.id.mediasend_characters_left); closeButton = view.findViewById(R.id.mediasend_close_button); + loader = view.findViewById(R.id.loader); View sendButtonBkg = view.findViewById(R.id.mediasend_send_button_bkg); @@ -342,18 +344,12 @@ private void processMedia(@NonNull List mediaList, @NonNull Map { - dialog = new AlertDialog.Builder(new ContextThemeWrapper(requireContext(), R.style.Theme_TextSecure_Dialog_MediaSendProgress)) - .setView(R.layout.progress_dialog) - .setCancelable(false) - .create(); - dialog.show(); - dialog.getWindow().setLayout(getResources().getDimensionPixelSize(R.dimen.mediasend_progress_dialog_size), getResources().getDimensionPixelSize(R.dimen.mediasend_progress_dialog_size)); + loader.setVisibility(View.VISIBLE); }; Util.runOnMainDelayed(progressTimer, 250); } @@ -394,9 +390,7 @@ protected List doInBackground(Void... voids) { protected void onPostExecute(List media) { controller.onSendClicked(media, composeText.getTextTrimmed()); Util.cancelRunnableOnMain(progressTimer); - if (dialog != null) { - dialog.dismiss(); - } + loader.setVisibility(View.GONE); renderTimer.stop(TAG); } }.execute(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java index c1391b9a8f..09c6c37c43 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java @@ -109,7 +109,7 @@ protected Void doInBackground(Void... params) { case GroupMessage: { OutgoingMediaMessage reply = OutgoingMediaMessage.from(message, recipient, Collections.emptyList(), null, null, expiresInMillis, 0); try { - mmsDatabase.insertMessageOutbox(reply, threadId, false, null, true); + message.setId(mmsDatabase.insertMessageOutbox(reply, threadId, false, null, true)); MessageSender.send(message, address); } catch (MmsException e) { Log.w(TAG, e); @@ -118,7 +118,7 @@ protected Void doInBackground(Void... params) { } case SecureMessage: { OutgoingTextMessage reply = OutgoingTextMessage.from(message, recipient, expiresInMillis, expireStartedAt); - smsDatabase.insertMessageOutbox(threadId, reply, false, System.currentTimeMillis(), null, true); + message.setId(smsDatabase.insertMessageOutbox(threadId, reply, false, System.currentTimeMillis(), null, true)); MessageSender.send(message, address); break; } diff --git a/app/src/main/res/layout/activity_conversation_v2.xml b/app/src/main/res/layout/activity_conversation_v2.xml index 03eba07adf..0fc8401524 100644 --- a/app/src/main/res/layout/activity_conversation_v2.xml +++ b/app/src/main/res/layout/activity_conversation_v2.xml @@ -291,13 +291,13 @@ android:clickable="true" android:visibility="gone"> - + android:layout_gravity="center" + android:indeterminateTint="?colorAccent" + android:indeterminate="true"/> diff --git a/app/src/main/res/layout/activity_edit_closed_group.xml b/app/src/main/res/layout/activity_edit_closed_group.xml index 69a892d5cc..7dda30a28b 100644 --- a/app/src/main/res/layout/activity_edit_closed_group.xml +++ b/app/src/main/res/layout/activity_edit_closed_group.xml @@ -165,13 +165,13 @@ android:visibility="gone" android:alpha="0"> - + android:indeterminateTint="?colorAccent" + android:indeterminate="true"/> diff --git a/app/src/main/res/layout/activity_path.xml b/app/src/main/res/layout/activity_path.xml index 6c8198c06f..b91b0ccbe9 100644 --- a/app/src/main/res/layout/activity_path.xml +++ b/app/src/main/res/layout/activity_path.xml @@ -34,13 +34,13 @@ android:orientation="vertical" android:layout_centerInParent="true" /> - + android:indeterminateTint="?colorAccent" + android:indeterminate="true"/> diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 95ae48f389..b07fee7000 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -127,13 +127,13 @@ android:background="#A4000000" android:visibility="gone"> - + android:layout_centerInParent="true" + android:indeterminateTint="?colorAccent" + android:indeterminate="true"/> diff --git a/app/src/main/res/layout/activity_webrtc.xml b/app/src/main/res/layout/activity_webrtc.xml index 6cfeab7787..68c484a185 100644 --- a/app/src/main/res/layout/activity_webrtc.xml +++ b/app/src/main/res/layout/activity_webrtc.xml @@ -124,13 +124,14 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center"/> - diff --git a/app/src/main/res/layout/contact_selection_list_fragment.xml b/app/src/main/res/layout/contact_selection_list_fragment.xml index 943eae9567..910191c1ad 100644 --- a/app/src/main/res/layout/contact_selection_list_fragment.xml +++ b/app/src/main/res/layout/contact_selection_list_fragment.xml @@ -31,13 +31,12 @@ tools:visibility="visible" tools:listitem="@layout/view_user"/> - - + android:indeterminateTint="?colorAccent" + android:indeterminate="true"/> diff --git a/app/src/main/res/layout/dialog_clear_all_data.xml b/app/src/main/res/layout/dialog_clear_all_data.xml index ba8bf82283..0d60ea8551 100644 --- a/app/src/main/res/layout/dialog_clear_all_data.xml +++ b/app/src/main/res/layout/dialog_clear_all_data.xml @@ -39,7 +39,7 @@