From 75589f1b2d13ae2bf7044b6f37a01fda4d7fd83e Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 18 May 2021 20:23:59 -0400 Subject: [PATCH] Use new expire timer dialog from overflow menu. --- .../securesms/ExpirationDialog.java | 103 ------------------ .../conversation/ConversationActivity.java | 41 +------ .../ui/managegroup/ManageGroupViewModel.java | 1 - .../ManageRecipientViewModel.java | 1 - app/src/main/res/values/strings.xml | 5 - 5 files changed, 3 insertions(+), 148 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/ExpirationDialog.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/ExpirationDialog.java b/app/src/main/java/org/thoughtcrime/securesms/ExpirationDialog.java deleted file mode 100644 index 10f11dab76..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/ExpirationDialog.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.thoughtcrime.securesms; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; - -import org.thoughtcrime.securesms.util.ExpirationUtil; - -import java.util.Arrays; - -import cn.carbswang.android.numberpickerview.library.NumberPickerView; - -public class ExpirationDialog extends AlertDialog { - - protected ExpirationDialog(Context context) { - super(context); - } - - protected ExpirationDialog(Context context, int theme) { - super(context, theme); - } - - protected ExpirationDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { - super(context, cancelable, cancelListener); - } - - public static void show(final Context context, - final int currentExpiration, - final @NonNull OnClickListener listener) - { - final View view = createNumberPickerView(context, currentExpiration); - - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(context.getString(R.string.ExpirationDialog_disappearing_messages)); - builder.setView(view); - builder.setPositiveButton(android.R.string.ok, (dialog, which) -> { - int selected = ((NumberPickerView)view.findViewById(R.id.expiration_number_picker)).getValue(); - listener.onClick(getExpirationTimes(context, currentExpiration)[selected]); - }); - builder.setNegativeButton(android.R.string.cancel, null); - builder.show(); - } - - private static View createNumberPickerView(final Context context, final int currentExpiration) { - final LayoutInflater inflater = LayoutInflater.from(context); - final View view = inflater.inflate(R.layout.expiration_dialog, null); - final NumberPickerView numberPickerView = view.findViewById(R.id.expiration_number_picker); - final TextView textView = view.findViewById(R.id.expiration_details); - final int[] expirationTimes = getExpirationTimes(context, currentExpiration); - final String[] expirationDisplayValues = new String[expirationTimes.length]; - - int selectedIndex = expirationTimes.length - 1; - - for (int i=0;i= expirationTimes[i]) && - (i == expirationTimes.length -1 || currentExpiration < expirationTimes[i+1])) { - selectedIndex = i; - } - } - - numberPickerView.setDisplayedValues(expirationDisplayValues); - numberPickerView.setMinValue(0); - numberPickerView.setMaxValue(expirationTimes.length-1); - - NumberPickerView.OnValueChangeListener listener = (picker, oldVal, newVal) -> { - if (newVal == 0) { - textView.setText(R.string.ExpirationDialog_your_messages_will_not_expire); - } else { - textView.setText(context.getString(R.string.ExpirationDialog_your_messages_will_disappear_s_after_they_have_been_seen, picker.getDisplayedValues()[newVal])); - } - }; - - numberPickerView.setOnValueChangedListener(listener); - numberPickerView.setValue(selectedIndex); - listener.onValueChange(numberPickerView, selectedIndex, selectedIndex); - - return view; - } - - private static int[] getExpirationTimes(Context context, int currentExpiration) { - int[] expirationTimes = context.getResources().getIntArray(R.array.expiration_times); - int location = Arrays.binarySearch(expirationTimes, currentExpiration); - if (location < 0) { - int[] temp = Arrays.copyOf(expirationTimes, expirationTimes.length + 1); - temp[temp.length - 1] = currentExpiration; - Arrays.sort(temp); - expirationTimes = temp; - } - - return expirationTimes; - } - - public interface OnClickListener { - public void onClick(int expirationTime); - } - -} 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 599c2fbae3..375bcb2ec1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -92,7 +92,6 @@ import org.signal.core.util.ThreadUtil; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.BlockUnblockDialog; -import org.thoughtcrime.securesms.ExpirationDialog; import org.thoughtcrime.securesms.GroupMembersDialog; import org.thoughtcrime.securesms.MainActivity; import org.thoughtcrime.securesms.MuteDialog; @@ -169,11 +168,8 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.events.GroupCallPeekEvent; import org.thoughtcrime.securesms.events.ReminderUpdateEvent; import org.thoughtcrime.securesms.giph.ui.GiphyActivity; -import org.thoughtcrime.securesms.groups.GroupChangeException; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.groups.GroupManager; import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason; -import org.thoughtcrime.securesms.groups.ui.GroupChangeResult; import org.thoughtcrime.securesms.groups.ui.GroupErrors; import org.thoughtcrime.securesms.groups.ui.LeaveGroupDialog; import org.thoughtcrime.securesms.groups.ui.invitesandrequests.ManagePendingAndRequestingMembersActivity; @@ -211,7 +207,6 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.ImageSlide; import org.thoughtcrime.securesms.mms.LocationSlide; import org.thoughtcrime.securesms.mms.MediaConstraints; -import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage; import org.thoughtcrime.securesms.mms.OutgoingMediaMessage; import org.thoughtcrime.securesms.mms.OutgoingSecureMediaMessage; import org.thoughtcrime.securesms.mms.QuoteId; @@ -237,6 +232,7 @@ import org.thoughtcrime.securesms.recipients.RecipientExporter; import org.thoughtcrime.securesms.recipients.RecipientFormattingException; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; +import org.thoughtcrime.securesms.recipients.ui.disappearingmessages.RecipientDisappearingMessagesActivity; import org.thoughtcrime.securesms.recipients.ui.managerecipient.ManageRecipientActivity; import org.thoughtcrime.securesms.registration.RegistrationNavigationActivity; import org.thoughtcrime.securesms.service.KeyCachingService; @@ -1137,42 +1133,11 @@ public class ConversationActivity extends PassphraseRequiredActivity //////// Event Handlers private void handleSelectMessageExpiration() { - boolean activeGroup = isActiveGroup(); - - if (isPushGroupConversation() && !activeGroup) { + if (isPushGroupConversation() && !isActiveGroup()) { return; } - final long thread = this.threadId; - - ExpirationDialog.show(this, recipient.get().getExpireMessages(), - expirationTime -> - SimpleTask.run( - getLifecycle(), - () -> { - if (activeGroup) { - try { - GroupManager.updateGroupTimer(ConversationActivity.this, getRecipient().requireGroupId().requirePush(), expirationTime); - } catch (GroupChangeException | IOException e) { - Log.w(TAG, e); - return GroupChangeResult.failure(GroupChangeFailureReason.fromException(e)); - } - } else { - DatabaseFactory.getRecipientDatabase(ConversationActivity.this).setExpireMessages(recipient.getId(), expirationTime); - OutgoingExpirationUpdateMessage outgoingMessage = new OutgoingExpirationUpdateMessage(getRecipient(), System.currentTimeMillis(), expirationTime * 1000L); - MessageSender.send(ConversationActivity.this, outgoingMessage, thread, false, null); - } - return GroupChangeResult.SUCCESS; - }, - (changeResult) -> { - if (!changeResult.isSuccess()) { - Toast.makeText(ConversationActivity.this, GroupErrors.getUserDisplayMessage(changeResult.getFailureReason()), Toast.LENGTH_SHORT).show(); - } else { - invalidateOptionsMenu(); - if (fragment != null) fragment.setLastSeen(0); - } - }) - ); + startActivity(RecipientDisappearingMessagesActivity.forRecipient(this, recipient.getId())); } private void handleMuteNotifications() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java index 7926e17f2a..b4bccde79a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java @@ -19,7 +19,6 @@ import androidx.lifecycle.ViewModelProvider; import org.signal.core.util.ThreadUtil; import org.thoughtcrime.securesms.BlockUnblockDialog; import org.thoughtcrime.securesms.ContactSelectionListFragment; -import org.thoughtcrime.securesms.ExpirationDialog; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.contacts.ContactsCursorLoader; import org.thoughtcrime.securesms.database.MediaDatabase; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java index f16e480c8d..a5bf88d1ba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java @@ -18,7 +18,6 @@ import com.annimon.stream.Stream; import org.signal.core.util.ThreadUtil; import org.thoughtcrime.securesms.BlockUnblockDialog; -import org.thoughtcrime.securesms.ExpirationDialog; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.VerifyIdentityActivity; import org.thoughtcrime.securesms.database.IdentityDatabase; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 52bf430d34..a37573ef51 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1291,11 +1291,6 @@ Signal needs the Camera permission in order to scan a QR code, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Camera\". Unable to scan a QR code without the Camera permission - - Disappearing messages - Your messages will not expire. - Messages sent and received in this conversation will disappear %s after they have been seen. - Update now This version of Signal will expire today. Update to the most recent version.