Removed 'Muted for' strings and fixed it up to use 'Mute for {large_time_unit}' across the board

This commit is contained in:
alansley
2024-07-30 16:20:20 +10:00
parent 84f6f19cf4
commit d568a86649
112 changed files with 142 additions and 199 deletions

View File

@@ -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 })
}
*/

View File

@@ -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
}
}

View File

@@ -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)

View File

@@ -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)
}
}

View File

@@ -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 = ""
}

View File

@@ -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

View File

@@ -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 -----

View File

@@ -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())

View File

@@ -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"