From aa932d4b9ffe5cce2c50a4ac3925c82910125da6 Mon Sep 17 00:00:00 2001
From: Nick <64551534+null-nick@users.noreply.github.com>
Date: Tue, 6 Jun 2023 20:38:46 +0200
Subject: [PATCH] Added Resolution menu selector
---
.../filegen/TdlibFileGenerationManager.java | 18 ++++++++-
.../ui/SettingsThemeController.java | 37 +++++++++++++++++++
.../challegram/unsorted/Settings.java | 18 +++++++++
app/src/main/res/values/ids.xml | 7 ++++
app/src/main/res/values/strings.xml | 7 ++++
5 files changed, 86 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/thunderdog/challegram/filegen/TdlibFileGenerationManager.java b/app/src/main/java/org/thunderdog/challegram/filegen/TdlibFileGenerationManager.java
index f809248421..87206416a8 100644
--- a/app/src/main/java/org/thunderdog/challegram/filegen/TdlibFileGenerationManager.java
+++ b/app/src/main/java/org/thunderdog/challegram/filegen/TdlibFileGenerationManager.java
@@ -1025,7 +1025,23 @@ private void generatePhoto (PhotoGenerationInfo info) throws Throwable {
final boolean applyLessCompression = U.isScreenshotFolder(originalPath);
boolean isTransparent = info.getAllowTransparency() || (!applyLessCompression && isTransparent(originalPath, uri));
- final int maxSize = info.getResolutionLimit() != 0 ? info.getResolutionLimit() : PhotoGenerationInfo.SIZE_LIMIT;
+ final int maxSize;
+
+ switch (Settings.instance().getResolutionOption()) {
+ case Settings.RESOLUTION_OPTION_LOW:
+ maxSize = info.getResolutionLimit() != 0 ? info.getResolutionLimit() : 800;
+ break;
+ /*case Settings.RESOLUTION_OPTION_MEDIUM:
+ maxSize = info.getResolutionLimit() != 0 ? info.getResolutionLimit() : 1280;
+ break;*/
+ case Settings.RESOLUTION_OPTION_HIGH:
+ maxSize = info.getResolutionLimit() != 0 ? info.getResolutionLimit() : 2560;
+ break;
+ default:
+ maxSize = info.getResolutionLimit() != 0 ? info.getResolutionLimit() : 1280;
+ break;
+ }
+
final boolean saveToGallery = Settings.instance().needSaveEditedMediaToGallery() && info.isEdited();
Bitmap bitmap = null;
diff --git a/app/src/main/java/org/thunderdog/challegram/ui/SettingsThemeController.java b/app/src/main/java/org/thunderdog/challegram/ui/SettingsThemeController.java
index f3378f4283..a3996bef07 100644
--- a/app/src/main/java/org/thunderdog/challegram/ui/SettingsThemeController.java
+++ b/app/src/main/java/org/thunderdog/challegram/ui/SettingsThemeController.java
@@ -331,6 +331,18 @@ protected void setValuedSetting (ListItem item, SettingView v, boolean isUpdate)
v.setData(R.string.AutoInstantViewNone);
break;
}
+ } else if (itemId == R.id.btn_resolutionOption) {
+ switch (Settings.instance().getResolutionOption()) {
+ case Settings.RESOLUTION_OPTION_LOW:
+ v.setData(R.string.ResolutionLow);
+ break;
+ case Settings.RESOLUTION_OPTION_MEDIUM:
+ v.setData(R.string.ResolutionMedium);
+ break;
+ case Settings.RESOLUTION_OPTION_HIGH:
+ v.setData(R.string.ResolutionHigh);
+ break;
+ }
} else if (itemId == R.id.btn_hqRounds) {
v.getToggler().setRadioEnabled(Settings.instance().needHqRoundVideos(), isUpdate);
} else if (itemId == R.id.btn_rearRounds) {
@@ -666,6 +678,8 @@ public void onRemove (RecyclerView.ViewHolder viewHolder) {
items.add(new ListItem(ListItem.TYPE_SEPARATOR_FULL));
items.add(new ListItem(ListItem.TYPE_VALUED_SETTING_COMPACT, R.id.btn_instantViewMode, 0, R.string.AutoInstantView));
items.add(new ListItem(ListItem.TYPE_SEPARATOR_FULL));
+ items.add(new ListItem(ListItem.TYPE_VALUED_SETTING_COMPACT, R.id.btn_resolutionOption, 0, R.string.ResolutionOption));
+ items.add(new ListItem(ListItem.TYPE_SEPARATOR_FULL));
items.add(new ListItem(ListItem.TYPE_RADIO_SETTING, R.id.btn_toggleNewSetting, 0, R.string.OpenEmbed).setLongId(Settings.SETTING_FLAG_NO_EMBEDS).setBoolValue(true));
items.add(new ListItem(ListItem.TYPE_SHADOW_BOTTOM));
items.add(new ListItem(ListItem.TYPE_DESCRIPTION, 0, 0, Lang.getMarkdownString(this, R.string.OpenEmbedDesc), false));
@@ -1320,6 +1334,8 @@ public void onClick (View v) {
showChatListOptions();
} else if (viewId == R.id.btn_instantViewMode) {
showInstantViewOptions();
+ } else if (viewId == R.id.btn_resolutionOption) {
+ showResolutionOption();
} else if (viewId == R.id.btn_chatSwipes) {
showSettings(R.id.btn_chatSwipes, new ListItem[] {
new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_messageShare, 0, R.string.Share, R.id.btn_messageShare, Settings.instance().needChatQuickShare()),
@@ -1908,6 +1924,27 @@ private void showInstantViewOptions () {
}));
}
+ private void showResolutionOption () {
+ int resolutionOption = Settings.instance().getResolutionOption();
+ showSettings(new SettingsWrapBuilder(R.id.btn_resolutionOption).setRawItems(new ListItem[] {
+ new ListItem(ListItem.TYPE_RADIO_OPTION, R.id.btn_resolutionLow, 0, R.string.ResolutionLow, R.id.btn_resolutionOption, resolutionOption == Settings.RESOLUTION_OPTION_LOW),
+ new ListItem(ListItem.TYPE_RADIO_OPTION, R.id.btn_resolutionMedium, 0, R.string.ResolutionMedium, R.id.btn_resolutionOption, resolutionOption == Settings.RESOLUTION_OPTION_MEDIUM),
+ new ListItem(ListItem.TYPE_RADIO_OPTION, R.id.btn_resolutionHigh, 0, R.string.ResolutionHigh, R.id.btn_resolutionOption, resolutionOption == Settings.RESOLUTION_OPTION_HIGH),
+ }).setAllowResize(false).addHeaderItem(Lang.getString(R.string.ResolutionDesc)).setIntDelegate((id, result) -> {
+ int newResolutionOption = Settings.instance().getResolutionOption();
+ int resolutionResult = result.get(R.id.btn_resolutionOption);
+ if (resolutionResult == R.id.btn_resolutionLow) {
+ newResolutionOption = Settings.RESOLUTION_OPTION_LOW;
+ } else if (resolutionResult == R.id.btn_resolutionMedium) {
+ newResolutionOption = Settings.RESOLUTION_OPTION_MEDIUM;
+ } else if (resolutionResult == R.id.btn_resolutionHigh) {
+ newResolutionOption = Settings.RESOLUTION_OPTION_HIGH;
+ }
+ Settings.instance().setResolutionOption(newResolutionOption);
+ adapter.updateValuedSettingById(R.id.btn_resolutionOption);
+ }));
+ }
+
/*private void showMarkdownOptions () {
int markdownOption = Settings.instance().getMarkdownMode();
showSettings(new SettingsWrapBuilder(R.id.btn_markdown).setRawItems(new SettingItem[]{
diff --git a/app/src/main/java/org/thunderdog/challegram/unsorted/Settings.java b/app/src/main/java/org/thunderdog/challegram/unsorted/Settings.java
index 00d66c1aaf..e32aab93f3 100644
--- a/app/src/main/java/org/thunderdog/challegram/unsorted/Settings.java
+++ b/app/src/main/java/org/thunderdog/challegram/unsorted/Settings.java
@@ -225,6 +225,7 @@ public static Settings instance () {
private static final String KEY_CHAT_DO_NOT_TRANSLATE_LIST = "settings_chat_do_not_translate_list";
private static final String KEY_CHAT_TRANSLATE_RECENTS = "language_recents";
private static final String KEY_INSTANT_VIEW = "settings_iv_mode";
+ private static final String KEY_RESOLUTION_OPTION = "settings_resolution_options";
private static final String KEY_RESTRICT_CONTENT = "settings_restrict_content";
private static final String KEY_CAMERA_ASPECT_RATIO = "settings_camera_ratio";
private static final String KEY_CAMERA_TYPE = "settings_camera_type";
@@ -722,6 +723,11 @@ public void apply (boolean async) {
public static final int INSTANT_VIEW_MODE_INTERNAL = 1;
public static final int INSTANT_VIEW_MODE_ALL = 2;
+ public static final int RESOLUTION_OPTION_DEFAULT = 1;
+ public static final int RESOLUTION_OPTION_LOW = 0;
+ public static final int RESOLUTION_OPTION_MEDIUM = 1;
+ public static final int RESOLUTION_OPTION_HIGH = 2;
+
@Nullable
private Float _chatFontSize;
@@ -2546,6 +2552,18 @@ public void setInstantViewMode (int mode) {
}
}
+ public int getResolutionOption () {
+ return getInt(KEY_RESOLUTION_OPTION, RESOLUTION_OPTION_DEFAULT);
+ }
+
+ public void setResolutionOption (int option) {
+ if (option == RESOLUTION_OPTION_DEFAULT) {
+ remove(KEY_RESOLUTION_OPTION);
+ } else {
+ putInt(KEY_RESOLUTION_OPTION, option);
+ }
+ }
+
public int getStickerMode () {
if (_stickerMode == null)
_stickerMode = pmc.getInt(KEY_STICKER_MODE, STICKER_MODE_ALL);
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
index a36c853fa9..e4e8e9c881 100644
--- a/app/src/main/res/values/ids.xml
+++ b/app/src/main/res/values/ids.xml
@@ -1269,4 +1269,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4b888d9d6b..1cae7d3a9d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -4660,4 +4660,11 @@
%1$s language
%1$s languages
+
+
+ Photo Resolution Selector
+ Resolution Selector (Experimental): Possible instability or app crashes.
+ Low (800px)
+ Medium (1280px)
+ High (2560px)