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)