diff --git a/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.java b/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.java deleted file mode 100644 index acca9f8375..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.thoughtcrime.securesms; - -import android.content.Context; -import android.content.DialogInterface; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; - -import java.util.concurrent.TimeUnit; - -import network.loki.messenger.R; - -public class MuteDialog extends AlertDialog { - - - protected MuteDialog(Context context) { - super(context); - } - - protected MuteDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { - super(context, cancelable, cancelListener); - } - - protected MuteDialog(Context context, int theme) { - super(context, theme); - } - - public static void show(final Context context, final @NonNull MuteSelectionListener listener) { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(R.string.MuteDialog_mute_notifications); - builder.setItems(R.array.mute_durations, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, final int which) { - final long muteUntil; - - switch (which) { - case 1: muteUntil = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(2); break; - case 2: muteUntil = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1); break; - case 3: muteUntil = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(7); break; - case 4: muteUntil = Long.MAX_VALUE; break; - default: muteUntil = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(1); break; - } - - listener.onMuted(muteUntil); - } - }); - - builder.show(); - - } - - public interface MuteSelectionListener { - public void onMuted(long until); - } - -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.kt new file mode 100644 index 0000000000..96523d2e7d --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.kt @@ -0,0 +1,31 @@ +package org.thoughtcrime.securesms + +import android.content.Context +import android.content.DialogInterface +import androidx.annotation.StringRes +import androidx.appcompat.app.AlertDialog +import network.loki.messenger.R +import java.math.BigInteger +import java.time.Instant +import java.util.* +import java.util.concurrent.TimeUnit + +fun showMuteDialog( + context: Context, + onMuteDuration: (Long) -> Unit +): AlertDialog = context.sessionDialog { + title(R.string.MuteDialog_mute_notifications) + items(Option.values().map { it.stringRes }.map(context::getString).toTypedArray()) { + onMuteDuration(Option.values()[it].getTime()) + } +} + +private enum class Option(@StringRes val stringRes: Int, val getTime: () -> Long) { + ONE_HOUR(R.string.arrays__mute_for_one_hour, duration = TimeUnit.HOURS.toMillis(1)), + TWO_HOURS(R.string.arrays__mute_for_two_hours, duration = TimeUnit.DAYS.toMillis(2)), + ONE_DAY(R.string.arrays__mute_for_one_day, duration = TimeUnit.DAYS.toMillis(1)), + SEVEN_DAYS(R.string.arrays__mute_for_seven_days, duration = TimeUnit.DAYS.toMillis(7)), + FOREVER(R.string.arrays__mute_forever, getTime = { Long.MAX_VALUE }); + + constructor(@StringRes stringRes: Int, duration: Long): this(stringRes, { System.currentTimeMillis() + duration }) +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/SessionDialogBuilder.kt b/app/src/main/java/org/thoughtcrime/securesms/SessionDialogBuilder.kt index 8ed60cce1e..10d86e4a9f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/SessionDialogBuilder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/SessionDialogBuilder.kt @@ -96,6 +96,13 @@ class SessionDialogBuilder(val context: Context) { currentSelected ) { dialog, it -> onSelect(it); dialog.dismiss() } + fun items( + options: Array, + onSelect: (Int) -> Unit + ): AlertDialog.Builder = dialogBuilder.setItems( + options, + ) { dialog, it -> onSelect(it); dialog.dismiss() } + fun destructiveButton( @StringRes text: Int, @StringRes contentDescription: Int, diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt index 365d11c152..20335aec59 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt @@ -34,7 +34,6 @@ import org.session.libsession.utilities.recipients.Recipient import org.session.libsignal.utilities.guava.Optional import org.session.libsignal.utilities.toHexString import org.thoughtcrime.securesms.MediaOverviewActivity -import org.thoughtcrime.securesms.MuteDialog import org.thoughtcrime.securesms.ShortcutLauncherActivity import org.thoughtcrime.securesms.calls.WebRtcCallActivity import org.thoughtcrime.securesms.contacts.SelectContactsActivity @@ -46,6 +45,7 @@ import org.thoughtcrime.securesms.groups.EditClosedGroupActivity.Companion.group import org.thoughtcrime.securesms.preferences.PrivacySettingsActivity import org.thoughtcrime.securesms.service.WebRtcCallService import org.thoughtcrime.securesms.sessionDialog +import org.thoughtcrime.securesms.showMuteDialog import org.thoughtcrime.securesms.util.BitmapUtil import java.io.IOException @@ -333,7 +333,7 @@ object ConversationMenuHelper { } private fun mute(context: Context, thread: Recipient) { - MuteDialog.show(ContextThemeWrapper(context, context.theme)) { until: Long -> + showMuteDialog(ContextThemeWrapper(context, context.theme)) { until -> DatabaseComponent.get(context).recipientDatabase().setMuted(thread, until) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt index a29dfc69c4..adcae62f58 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt @@ -41,7 +41,6 @@ import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.ThreadUtils import org.session.libsignal.utilities.toHexString import org.thoughtcrime.securesms.ApplicationContext -import org.thoughtcrime.securesms.MuteDialog import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity import org.thoughtcrime.securesms.conversation.start.NewConversationFragment import org.thoughtcrime.securesms.conversation.v2.ConversationActivityV2 @@ -64,6 +63,7 @@ import org.thoughtcrime.securesms.onboarding.SeedActivity import org.thoughtcrime.securesms.onboarding.SeedReminderViewDelegate import org.thoughtcrime.securesms.preferences.SettingsActivity import org.thoughtcrime.securesms.sessionDialog +import org.thoughtcrime.securesms.showMuteDialog import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities import org.thoughtcrime.securesms.util.DateUtils import org.thoughtcrime.securesms.util.IP2Country @@ -522,7 +522,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(), private fun setConversationMuted(thread: ThreadRecord, isMuted: Boolean) { if (isMuted) { - MuteDialog.show(this) { until: Long -> + showMuteDialog(this) { until -> lifecycleScope.launch(Dispatchers.IO) { recipientDatabase.setMuted(thread.recipient, until) withContext(Dispatchers.Main) { diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 566ee7e36c..8d0d714e49 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -169,14 +169,6 @@ @string/arrays__use_custom - - @string/arrays__mute_for_one_hour - @string/arrays__mute_for_two_hours - @string/arrays__mute_for_one_day - @string/arrays__mute_for_seven_days - @string/arrays__mute_forever - - @string/arrays__name_and_message @string/arrays__name_only