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 fb05818ada..f3aa1bff2d 100644 --- a/app/src/main/java/org/thunderdog/challegram/filegen/TdlibFileGenerationManager.java +++ b/app/src/main/java/org/thunderdog/challegram/filegen/TdlibFileGenerationManager.java @@ -1026,7 +1026,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/SettingsBugController.java b/app/src/main/java/org/thunderdog/challegram/ui/SettingsBugController.java index a99a8dac01..755da970d2 100644 --- a/app/src/main/java/org/thunderdog/challegram/ui/SettingsBugController.java +++ b/app/src/main/java/org/thunderdog/challegram/ui/SettingsBugController.java @@ -626,6 +626,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; + } } } }; @@ -742,6 +754,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)); @@ -1435,6 +1453,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(); } } @@ -1601,4 +1621,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/unsorted/Settings.java b/app/src/main/java/org/thunderdog/challegram/unsorted/Settings.java index 717e7d7d01..c2f7a60597 100644 --- a/app/src/main/java/org/thunderdog/challegram/unsorted/Settings.java +++ b/app/src/main/java/org/thunderdog/challegram/unsorted/Settings.java @@ -234,6 +234,7 @@ public static Settings instance () { private static final String KEY_CHAT_TRANSLATE_RECENTS = "language_recents"; private static final String KEY_DEFAULT_LANGUAGE_FOR_TRANSLATE_DRAFT = "language_draft_translate"; 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"; @@ -418,6 +419,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; @@ -771,6 +774,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; @@ -2762,6 +2770,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); @@ -6981,4 +7001,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/ids.xml b/app/src/main/res/values/ids.xml index d0937a211d..03096acf2b 100644 --- a/app/src/main/res/values/ids.xml +++ b/app/src/main/res/values/ids.xml @@ -1338,6 +1338,13 @@ + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 41f12af399..b8889188d8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4965,6 +4965,15 @@ Supergroup ID Channel ID + + + Send large photo + Photo Resolution Selector + Resolution Selector (Experimental): Possible instability or app crashes. + Low (800px) + Medium (1280px) + High (2560px) + %1$s just started a giveaway of Telegram Premium subscriptions for its followers. %1$s winner of the giveaway was randomly selected by Telegram and received their gift link in a private message. %1$s winners of the giveaway were randomly selected by Telegram and received their gift link in a private message. @@ -4984,7 +4993,6 @@ This message is a reply to the message that was deleted. This message is from another chat. Tap again to view. - Swipe to choose specific link preview This is a service message from Telegram