mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-05 07:52:30 +00:00
Removed 'Muted for' strings and fixed it up to use 'Mute for {large_time_unit}' across the board
This commit is contained in:
@@ -3,25 +3,135 @@ package org.thoughtcrime.securesms
|
||||
import android.content.Context
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.squareup.phrase.Phrase
|
||||
import network.loki.messenger.R
|
||||
import org.session.libsession.LocalisedTimeUtil
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.TIME_LARGE_KEY
|
||||
import org.session.libsignal.utilities.Log
|
||||
import java.time.Duration
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
fun showMuteDialog(
|
||||
context: Context,
|
||||
onMuteDuration: (Long) -> Unit
|
||||
): AlertDialog = context.showSessionDialog {
|
||||
title(R.string.notificationsMute)
|
||||
items(Option.values().map { it.stringRes }.map(context::getString).toTypedArray()) {
|
||||
onMuteDuration(Option.values()[it].getTime())
|
||||
|
||||
items(Option.entries.mapIndexed { index, entry ->
|
||||
|
||||
if (entry.stringRes == R.string.notificationsMute) {
|
||||
context.getString(R.string.notificationsMute)
|
||||
} else {
|
||||
val largeTimeUnitText = LocalisedTimeUtil.getDurationWithSingleLargestTimeUnit(context, Option.entries[index].getTime().milliseconds)
|
||||
Phrase.from(context, entry.stringRes)
|
||||
.put(TIME_LARGE_KEY, largeTimeUnitText)
|
||||
.format().toString()
|
||||
}
|
||||
}.toTypedArray()) {
|
||||
// Note: We add the current timestamp to the mute duration to get the un-mute timestamp
|
||||
// that gets stored in the database via ConversationMenuHelper.mute().
|
||||
onMuteDuration(Option.entries[it].getTime() + System.currentTimeMillis())
|
||||
}
|
||||
}
|
||||
|
||||
private enum class Option(@StringRes val stringRes: Int, val getTime: () -> Long) {
|
||||
ONE_HOUR(R.string.notificationsMute1Hour, duration = TimeUnit.HOURS.toMillis(1)),
|
||||
TWO_HOURS(R.string.notificationsMute2Hours, duration = TimeUnit.DAYS.toMillis(2)),
|
||||
ONE_DAY(R.string.notificationsMute1Day, duration = TimeUnit.DAYS.toMillis(1)),
|
||||
SEVEN_DAYS(R.string.notificationsMute1Week, duration = TimeUnit.DAYS.toMillis(7)),
|
||||
ONE_HOUR(R.string.notificationsMuteFor, duration = TimeUnit.HOURS.toMillis(1)),
|
||||
TWO_HOURS(R.string.notificationsMuteFor, duration = TimeUnit.HOURS.toMillis(2)),
|
||||
ONE_DAY(R.string.notificationsMuteFor, duration = TimeUnit.DAYS.toMillis(1)),
|
||||
SEVEN_DAYS(R.string.notificationsMuteFor, duration = TimeUnit.DAYS.toMillis(7)),
|
||||
FOREVER(R.string.notificationsMute, getTime = { Long.MAX_VALUE } );
|
||||
|
||||
constructor(@StringRes stringRes: Int, duration: Long): this(stringRes, { duration } )
|
||||
}
|
||||
|
||||
/*
|
||||
package org.thoughtcrime.securesms
|
||||
|
||||
import android.content.Context
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import com.squareup.phrase.Phrase
|
||||
import network.loki.messenger.R
|
||||
import org.session.libsession.LocalisedTimeUtil
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.TIME_LARGE_KEY
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.time.Duration.Companion.days
|
||||
import kotlin.time.Duration.Companion.hours
|
||||
|
||||
private fun getTimestampOfNowPlusDuration(menuItemIndex: Int): (Int) -> Unit {
|
||||
when (menuItemIndex) {
|
||||
0 -> System.currentTimeMillis() + 1.hours.inWholeMilliseconds
|
||||
1 -> System.currentTimeMillis() + 2.hours.inWholeMilliseconds
|
||||
2 -> System.currentTimeMillis() + 1.days.inWholeMilliseconds
|
||||
3 -> System.currentTimeMillis() + 7.days.inWholeMilliseconds
|
||||
else Long.MAX_VALUE
|
||||
}
|
||||
}
|
||||
|
||||
fun showMuteDialog(
|
||||
context: Context,
|
||||
onMuteDuration: (Long) -> Unit
|
||||
): AlertDialog {
|
||||
val c = context
|
||||
|
||||
val oneHourString = Phrase.from(c, R.string.notificationsMuteFor)
|
||||
.put(TIME_LARGE_KEY, LocalisedTimeUtil.getDurationWithSingleLargestTimeUnit(c, 1.hours))
|
||||
.format().toString()
|
||||
val oneHourOption:Pair<String, Long> = oneHourString to System.currentTimeMillis() + 1.hours.inWholeMilliseconds
|
||||
|
||||
val twoHoursString = Phrase.from(c, R.string.notificationsMuteFor)
|
||||
.put(TIME_LARGE_KEY, LocalisedTimeUtil.getDurationWithSingleLargestTimeUnit(c, 2.hours))
|
||||
.format().toString()
|
||||
val twoHoursOption:Pair<String, Long> = twoHoursString to System.currentTimeMillis() + 2.hours.inWholeMilliseconds
|
||||
|
||||
val oneDayString = Phrase.from(c, R.string.notificationsMuteFor)
|
||||
.put(TIME_LARGE_KEY, LocalisedTimeUtil.getDurationWithSingleLargestTimeUnit(c, 1.days))
|
||||
.format().toString()
|
||||
val oneDayOption:Pair<String, Long> = twoHoursString to System.currentTimeMillis() + 1.days.inWholeMilliseconds
|
||||
|
||||
val oneWeekString = Phrase.from(c, R.string.notificationsMuteFor)
|
||||
.put(TIME_LARGE_KEY, LocalisedTimeUtil.getDurationWithSingleLargestTimeUnit(c, 7.days))
|
||||
.format().toString()
|
||||
val oneWeekOption:Pair<String, Long> = twoHoursString to System.currentTimeMillis() + 7.days.inWholeMilliseconds
|
||||
|
||||
val foreverString = c.getString(R.string.notificationsMute)
|
||||
val foreverOption = foreverString to Long.MAX_VALUE
|
||||
|
||||
val allStrings = arrayOf(oneHourString, twoHoursString, oneDayString, oneWeekString, foreverString)
|
||||
|
||||
val allOptions = listOf(oneHourOption, twoHoursOption, oneDayOption, oneWeekOption, foreverOption)
|
||||
|
||||
val foo: (Int) -> Unit = { getTimestampOfNowPlusDuration(3) }
|
||||
|
||||
context.showSessionDialog {
|
||||
title(R.string.notificationsMute)
|
||||
|
||||
//items(allStrings, onMuteDuration(getTimestampOfNowPlusDuration(allStrings.val))
|
||||
|
||||
items(allOptions.map { it.first }.toTypedArray() { allOptions.entries[it].getTime() } )
|
||||
|
||||
|
||||
|
||||
items(allOptions.map { it.first }.map(it.)) { it.second } Option.entries.map { it.stringRes }.map(
|
||||
Phrase.from(context, R.string.notificationsMuteFor)
|
||||
.put(TIME_LARGE_KEY, LocalisedTimeUtil.getDurationWithSingleLargestTimeUnit(context, it.getTime())..format().toString()toType,
|
||||
|
||||
context::getString).toTypedArray()) {
|
||||
onMuteDuration(Option.entries[it].getTime())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private enum class Option(@StringRes val stringRes: Int, val getTime: () -> Long) {
|
||||
|
||||
ONE_HOUR(R.string.notificationsMuteFor, duration = 1.hours.inWholeMilliseconds),
|
||||
TWO_HOURS(R.string.notificationsMuteFor, duration = 2.hours.inWholeMilliseconds),
|
||||
ONE_DAY(R.string.notificationsMuteFor, duration = 1.days.inWholeMilliseconds),
|
||||
SEVEN_DAYS(R.string.notificationsMuteFor, duration = 7.days.inWholeMilliseconds),
|
||||
FOREVER(R.string.notificationsMute, getTime = { Long.MAX_VALUE });
|
||||
|
||||
constructor(@StringRes stringRes: Int, duration: Long): this(stringRes, { System.currentTimeMillis() + duration })
|
||||
}
|
||||
*/
|
||||
@@ -45,7 +45,7 @@ class ContactSelectionListLoader(context: Context, val mode: Int, val filter: St
|
||||
}
|
||||
|
||||
private fun getContacts(contacts: List<Recipient>): List<ContactSelectionListItem> {
|
||||
return getItems(contacts, context.getString(R.string.contactsContacts)) {
|
||||
return getItems(contacts, context.getString(R.string.contactContacts)) {
|
||||
!it.isGroupRecipient
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ class ConversationActionBarView @JvmOverloads constructor(
|
||||
settings += ConversationSetting(
|
||||
recipient.mutedUntil.takeUnless { it == Long.MAX_VALUE }
|
||||
?.let {
|
||||
val mutedDuration = it.milliseconds
|
||||
val mutedDuration = (it - System.currentTimeMillis()).milliseconds
|
||||
val durationString = LocalisedTimeUtil.getDurationWithSingleLargestTimeUnit(context, mutedDuration)
|
||||
Phrase.from(context, R.string.notificationsMuteFor)
|
||||
.put(TIME_LARGE_KEY, durationString)
|
||||
|
||||
@@ -19,12 +19,14 @@ import androidx.core.graphics.drawable.IconCompat
|
||||
import com.squareup.phrase.Phrase
|
||||
import java.io.IOException
|
||||
import network.loki.messenger.R
|
||||
import org.session.libsession.LocalisedTimeUtil
|
||||
import org.session.libsession.messaging.sending_receiving.MessageSender
|
||||
import org.session.libsession.messaging.sending_receiving.leave
|
||||
import org.session.libsession.utilities.GroupUtil.doubleDecodeGroupID
|
||||
import org.session.libsession.utilities.StringSubstitutionConstants.GROUP_NAME_KEY
|
||||
import org.session.libsession.utilities.TextSecurePreferences
|
||||
import org.session.libsession.utilities.recipients.Recipient
|
||||
import org.session.libsignal.utilities.Log
|
||||
import org.session.libsignal.utilities.guava.Optional
|
||||
import org.session.libsignal.utilities.toHexString
|
||||
import org.thoughtcrime.securesms.MediaOverviewActivity
|
||||
@@ -41,6 +43,7 @@ import org.thoughtcrime.securesms.service.WebRtcCallService
|
||||
import org.thoughtcrime.securesms.showMuteDialog
|
||||
import org.thoughtcrime.securesms.showSessionDialog
|
||||
import org.thoughtcrime.securesms.util.BitmapUtil
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
object ConversationMenuHelper {
|
||||
|
||||
@@ -322,7 +325,7 @@ object ConversationMenuHelper {
|
||||
}
|
||||
|
||||
private fun mute(context: Context, thread: Recipient) {
|
||||
showMuteDialog(ContextThemeWrapper(context, context.theme)) { until ->
|
||||
showMuteDialog(ContextThemeWrapper(context, context.theme)) { until: Long ->
|
||||
DatabaseComponent.get(context).recipientDatabase().setMuted(thread, until)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,10 +37,7 @@ class SearchBottomBar : LinearLayout {
|
||||
}
|
||||
}
|
||||
if (count > 0) {
|
||||
searchPosition.text = Phrase.from(context, R.string.searchMatches)
|
||||
.put(COUNT_KEY, position + 1)
|
||||
.put(TOTAL_COUNT_KEY, count)
|
||||
.format()
|
||||
searchPosition.text = resources.getQuantityString(R.plurals.searchMatches, count, position + 1, count)
|
||||
} else {
|
||||
searchPosition.text = ""
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ public class ThreadRecord extends DisplayRecord {
|
||||
if (expireStarted >= dateSent) {
|
||||
return context.getString(R.string.disappearingMessagesSent);
|
||||
}
|
||||
return context.getString(R.string.disappearingMessagesRead);
|
||||
return context.getString(R.string.read);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -521,7 +521,9 @@ public class DefaultMessageNotifier implements MessageNotifier {
|
||||
|
||||
// If we received some manner of notification but Session is locked..
|
||||
} else if (KeyCachingService.isLocked(context)) {
|
||||
body = SpanUtil.italic(context.getString(R.string.messageNewYouveGotA));
|
||||
// Note: We provide 0 because `messageNewYouveGot` is now a plurals string and we don't have a count yet, so just
|
||||
// giving it zero will result in "You got a new message".
|
||||
body = SpanUtil.italic(context.getResources().getQuantityString(R.plurals.messageNewYouveGot, 0, 0));
|
||||
|
||||
// ----- All further cases assume we know the contact and that Session isn't locked -----
|
||||
|
||||
|
||||
@@ -55,7 +55,10 @@ class PushReceiver @Inject constructor(@ApplicationContext val context: Context)
|
||||
.setSmallIcon(R.drawable.ic_notification)
|
||||
.setColor(context.getColor(R.color.textsecure_primary))
|
||||
.setContentTitle(getString(context, R.string.sessionMessenger))
|
||||
.setContentText(getString(context, R.string.messageNewYouveGotA))
|
||||
|
||||
// Note: We set the count to zero in the below plurals string so it says "You've got a new message" (singular)
|
||||
.setContentText(context.resources.getQuantityString(R.plurals.messageNewYouveGot, 0, 0))
|
||||
|
||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||
.setAutoCancel(true)
|
||||
NotificationManagerCompat.from(context).notify(11111, builder.build())
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
android:paddingHorizontal="@dimen/large_spacing"
|
||||
android:paddingTop="@dimen/medium_spacing"
|
||||
android:paddingBottom="@dimen/small_spacing"
|
||||
android:text="@string/contactsContacts"
|
||||
android:text="@string/contactContacts"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/medium_font_size"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
||||
Reference in New Issue
Block a user