Fix crash that can occur when using non-standard font sizes.

fork-5.53.8
Greyson Parrelli 2022-06-14 17:32:26 -04:00
rodzic fb9a9b7c96
commit fcef6f965d
4 zmienionych plików z 32 dodań i 12 usunięć

Wyświetl plik

@ -19,7 +19,7 @@ class AppearanceSettingsFragment : DSLSettingsFragment(R.string.preferences__app
private val themeValues by lazy { resources.getStringArray(R.array.pref_theme_values) }
private val messageFontSizeLabels by lazy { resources.getStringArray(R.array.pref_message_font_size_entries) }
private val messageFontSizeValues by lazy { resources.getStringArray(R.array.pref_message_font_size_values) }
private val messageFontSizeValues by lazy { resources.getIntArray(R.array.pref_message_font_size_values) }
private val languageLabels by lazy { resources.getStringArray(R.array.language_entries) }
private val languageValues by lazy { resources.getStringArray(R.array.language_values) }
@ -53,7 +53,7 @@ class AppearanceSettingsFragment : DSLSettingsFragment(R.string.preferences__app
radioListPref(
title = DSLSettingsText.from(R.string.preferences_chats__message_text_size),
listItems = messageFontSizeLabels,
selected = messageFontSizeValues.indexOf(state.messageFontSize.toString()),
selected = messageFontSizeValues.indexOf(state.messageFontSize),
onSelected = {
viewModel.setMessageFontSize(messageFontSizeValues[it].toInt())
}

Wyświetl plik

@ -23,6 +23,7 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.webrtc.CallBandwidthMode;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@SuppressWarnings("deprecation")
@ -196,12 +197,31 @@ public final class SettingsValues extends SignalStoreValues {
}
public int getMessageQuoteFontSize(@NonNull Context context) {
String messageFontSize = String.valueOf(getMessageFontSize());
String[] messageSizes = context.getResources().getStringArray(R.array.pref_message_font_size_values);
String[] quoteSizes = context.getResources().getStringArray(R.array.pref_message_font_quote_size_values);
int index = Arrays.binarySearch(messageSizes, messageFontSize);
int currentMessageSize = getMessageFontSize();
int[] possibleMessageSizes = context.getResources().getIntArray(R.array.pref_message_font_size_values);
int[] possibleQuoteSizes = context.getResources().getIntArray(R.array.pref_message_font_quote_size_values);
int sizeIndex = Arrays.binarySearch(possibleMessageSizes, currentMessageSize);
return Integer.parseInt(quoteSizes[index]);
if (sizeIndex < 0) {
int closestSizeIndex = 0;
int closestSizeDiff = Integer.MAX_VALUE;
for (int i = 0; i < possibleMessageSizes.length; i++) {
int diff = Math.abs(possibleMessageSizes[i] - currentMessageSize);
if (diff < closestSizeDiff) {
closestSizeIndex = i;
closestSizeDiff = diff;
}
}
int newSize = possibleMessageSizes[closestSizeIndex];
Log.w(TAG, "Using non-standard font size of " + currentMessageSize + ". Closest match was " + newSize + ". Updating.");
setMessageFontSize(newSize);
sizeIndex = Arrays.binarySearch(possibleMessageSizes, newSize);
}
return possibleQuoteSizes[sizeIndex];
}
public void setMessageFontSize(int messageFontSize) {

Wyświetl plik

@ -498,7 +498,7 @@ public class TextSecurePreferences {
* @deprecated Use {@link SettingsValues#getMessageFontSize()} via {@link org.thoughtcrime.securesms.keyvalue.SignalStore} instead.
*/
public static int getMessageBodyTextSize(Context context) {
return Integer.valueOf(getStringPreference(context, MESSAGE_BODY_TEXT_SIZE_PREF, "16"));
return Integer.parseInt(getStringPreference(context, MESSAGE_BODY_TEXT_SIZE_PREF, "16"));
}
public static boolean isTurnOnly(Context context) {

Wyświetl plik

@ -343,19 +343,19 @@
<item>@string/arrays__extra_large</item>
</string-array>
<string-array name="pref_message_font_size_values">
<integer-array name="pref_message_font_size_values">
<item>14</item>
<item>16</item>
<item>22</item>
<item>28</item>
</string-array>
</integer-array>
<string-array name="pref_message_font_quote_size_values">
<integer-array name="pref_message_font_quote_size_values">
<item>12</item>
<item>14</item>
<item>18</item>
<item>22</item>
</string-array>
</integer-array>
<string-array name="pref_notification_priority_entries">
<item>@string/arrays__default</item>