From 943edf94ad89defd3072ffbc2f702cb20897deed Mon Sep 17 00:00:00 2001
From: Nick <64551534+null-nick@users.noreply.github.com>
Date: Wed, 12 Jul 2023 09:29:29 +0200
Subject: [PATCH 1/2] Added Resolution 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 66cd1b7ced..a276cde41c 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";
@@ -729,6 +730,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;
@@ -2553,6 +2559,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 d04ee3b7f7..99e01f4264 100644
--- a/app/src/main/res/values/ids.xml
+++ b/app/src/main/res/values/ids.xml
@@ -1284,4 +1284,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 f3b9601133..33c52d4252 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -4679,4 +4679,11 @@
Set until tomorrow at %1$s
Set until %1$s at %2$s
+
+
+ Photo Resolution Selector
+ Resolution Selector (Experimental): Possible instability or app crashes.
+ Low (800px)
+ Medium (1280px)
+ High (2560px)
From 32956a18c695cae074a0e118b6951cb97b896583 Mon Sep 17 00:00:00 2001
From: N <64551534+null-nick@users.noreply.github.com>
Date: Wed, 29 Nov 2023 13:56:50 +0100
Subject: [PATCH 2/2] The `Photo resolution selector` setting has been moved to
the `Experimental settings` menu
---
.../challegram/ui/SettingsBugController.java | 41 +++++++++++++++++++
.../ui/SettingsThemeController.java | 37 -----------------
.../challegram/unsorted/Settings.java | 6 +++
app/src/main/res/values/strings.xml | 5 ++-
4 files changed, 50 insertions(+), 39 deletions(-)
diff --git a/app/src/main/java/org/thunderdog/challegram/ui/SettingsBugController.java b/app/src/main/java/org/thunderdog/challegram/ui/SettingsBugController.java
index 85318cdb96..4c5c3f2190 100644
--- a/app/src/main/java/org/thunderdog/challegram/ui/SettingsBugController.java
+++ b/app/src/main/java/org/thunderdog/challegram/ui/SettingsBugController.java
@@ -600,6 +600,18 @@ protected void setValuedSetting (ListItem item, SettingView view, boolean isUpda
view.setData(Strings.buildSize(logSize[1]));
} else if (itemId == R.id.btn_tdlib_androidLogs) {
view.getToggler().setRadioEnabled(Settings.instance().getLogSettings().needAndroidLog(), isUpdate);
+ } else if (itemId == R.id.btn_resolutionOption) {
+ switch (Settings.instance().getResolutionOption()) {
+ case Settings.RESOLUTION_OPTION_LOW:
+ view.setData(R.string.ResolutionLow);
+ break;
+ case Settings.RESOLUTION_OPTION_MEDIUM:
+ view.setData(R.string.ResolutionMedium);
+ break;
+ case Settings.RESOLUTION_OPTION_HIGH:
+ view.setData(R.string.ResolutionHigh);
+ break;
+ }
}
}
};
@@ -716,6 +728,12 @@ protected void setValuedSetting (ListItem item, SettingView view, boolean isUpda
items.add(new ListItem(ListItem.TYPE_SHADOW_BOTTOM));
items.add(new ListItem(ListItem.TYPE_DESCRIPTION, 0, 0, Lang.getMarkdownStringSecure(this, R.string.Experiment_ChatFoldersInfo)));
+ if (testerLevel >= Tdlib.TESTER_LEVEL_TESTER || Settings.instance().isExperimentEnabled(Settings.EXPERIMENT_FLAG_SEND_HQ_PHOTO)) {
+ items.add(new ListItem(ListItem.TYPE_SEPARATOR_FULL));
+ items.add(new ListItem(ListItem.TYPE_VALUED_SETTING_COMPACT, R.id.btn_resolutionOption, 0, R.string.Experiment_ResolutionOption));
+ items.add(new ListItem(ListItem.TYPE_DESCRIPTION, 0, 0, Lang.getMarkdownStringSecure(this, R.string.Experiment_ResolutionInfo)));
+ }
+
if (testerLevel >= Tdlib.TESTER_LEVEL_TESTER || Settings.instance().isExperimentEnabled(Settings.EXPERIMENT_FLAG_SHOW_PEER_IDS)) {
items.add(new ListItem(ListItem.TYPE_SHADOW_TOP));
items.add(new ListItem(ListItem.TYPE_RADIO_SETTING, R.id.btn_experiment, 0, R.string.Experiment_PeerIds).setLongValue(Settings.EXPERIMENT_FLAG_SHOW_PEER_IDS));
@@ -1409,6 +1427,8 @@ public boolean onAcceptInput (MaterialEditTextGroup inputView, String result) {
viewTdlibLog(v, true);
} else if (viewId == R.id.btn_tdlib_androidLogs) {
Settings.instance().getLogSettings().setNeedAndroidLog(adapter.toggleView(v));
+ } else if (viewId == R.id.btn_resolutionOption) {
+ showResolutionOption();
}
}
@@ -1575,4 +1595,25 @@ public void onApplySettings (@IdRes int id, SparseIntArray result) {
adapter.updateValuedSettingById(R.id.btn_log_tags);
}
}
+
+ 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.Experiment_ResolutionInfo)).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);
+ }));
+ }
}
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 b16560eefe..a5f85eac62 100644
--- a/app/src/main/java/org/thunderdog/challegram/ui/SettingsThemeController.java
+++ b/app/src/main/java/org/thunderdog/challegram/ui/SettingsThemeController.java
@@ -274,18 +274,6 @@ 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) {
@@ -590,8 +578,6 @@ 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));
@@ -1200,8 +1186,6 @@ 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()),
@@ -1759,27 +1743,6 @@ 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 91fd54cf5f..dd8129690e 100644
--- a/app/src/main/java/org/thunderdog/challegram/unsorted/Settings.java
+++ b/app/src/main/java/org/thunderdog/challegram/unsorted/Settings.java
@@ -418,6 +418,8 @@ private static String key (String key, int accountId) {
public static final long EXPERIMENT_FLAG_ENABLE_FOLDERS = 1 << 1;
public static final long EXPERIMENT_FLAG_SHOW_PEER_IDS = 1 << 2;
+ public static final long EXPERIMENT_FLAG_SEND_HQ_PHOTO = 1 << 3;
+
private static final @Deprecated int DISABLED_FLAG_OTHER_NEED_RAISE_TO_SPEAK = 1 << 2;
private static final @Deprecated int DISABLED_FLAG_OTHER_AUTODOWNLOAD_IN_BACKGROUND = 1 << 3;
private static final @Deprecated int DISABLED_FLAG_OTHER_DEFAULT_CRASH_MANAGER = 1 << 5;
@@ -6977,4 +6979,8 @@ public boolean chatFoldersEnabled () {
public boolean showPeerIds () {
return isExperimentEnabled(EXPERIMENT_FLAG_SHOW_PEER_IDS);
}
+
+ public boolean sendHqPhotos () {
+ return isExperimentEnabled(EXPERIMENT_FLAG_SEND_HQ_PHOTO);
+ }
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9bfa0612d5..bd7d0a486d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -4916,8 +4916,9 @@
- Photo Resolution Selector
- Resolution Selector (Experimental): Possible instability or app crashes.
+ Send large photo
+ Photo Resolution Selector
+ Resolution Selector (Experimental): Possible instability or app crashes.
Low (800px)
Medium (1280px)
High (2560px)