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)