From c1a21028e4075513e6b81dee239a8147f004ac6e Mon Sep 17 00:00:00 2001 From: luvletter2333 Date: Tue, 15 Mar 2022 17:22:27 +0800 Subject: [PATCH] allow force enabling chat blur --- .../org/telegram/messenger/SharedConfig.java | 7 +- .../Components/SizeNotifierFrameLayout.java | 4 + .../java/tw/nekomimi/nekogram/NekoConfig.java | 2 + .../config/cell/ConfigCellCustom.java | 7 +- .../settings/NekoChatSettingsActivity.java | 4 +- .../settings/NekoGeneralSettingsActivity.java | 89 +++++++++++++++++-- .../src/main/res/values/strings_neko.xml | 2 + 7 files changed, 104 insertions(+), 11 deletions(-) diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java b/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java index 99faf46b1..63e0af24f 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java @@ -54,6 +54,7 @@ import java.util.stream.Collectors; import cn.hutool.core.util.StrUtil; import okhttp3.HttpUrl; +import tw.nekomimi.nekogram.NekoConfig; import tw.nekomimi.nekogram.proxy.ProxyManager; import tw.nekomimi.nekogram.proxy.ShadowsocksLoader; import tw.nekomimi.nekogram.proxy.ShadowsocksRLoader; @@ -1227,6 +1228,7 @@ public class SharedConfig { smoothKeyboard = preferences.getBoolean("smoothKeyboard2", true); pauseMusicOnRecord = preferences.getBoolean("pauseMusicOnRecord", false); chatBlur = preferences.getBoolean("chatBlur", true); + chatBlur = chatBlur || NekoConfig.forceBlurInChat.Bool(); streamAllVideo = preferences.getBoolean("streamAllVideo", BuildVars.DEBUG_VERSION); streamMkv = preferences.getBoolean("streamMkv", false); suggestStickers = preferences.getInt("suggestStickers", 0); @@ -1844,6 +1846,7 @@ public class SharedConfig { public static void toggleChatBlur() { chatBlur = !chatBlur; + if (NekoConfig.forceBlurInChat.Bool()) chatBlur = true; SharedPreferences preferences = MessagesController.getGlobalMainSettings(); SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean("chatBlur", chatBlur); @@ -2329,10 +2332,10 @@ public class SharedConfig { } public static boolean canBlurChat() { - return getDevicePerformanceClass() == PERFORMANCE_CLASS_HIGH; + return getDevicePerformanceClass() == PERFORMANCE_CLASS_HIGH || NekoConfig.forceBlurInChat.Bool(); } public static boolean chatBlurEnabled() { - return canBlurChat() && chatBlur; + return (canBlurChat() && chatBlur) || NekoConfig.forceBlurInChat.Bool(); } public static class BackgroundActivityPrefs { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SizeNotifierFrameLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SizeNotifierFrameLayout.java index 5dc969048..2568b4900 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SizeNotifierFrameLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SizeNotifierFrameLayout.java @@ -41,6 +41,8 @@ import org.telegram.ui.BlurSettingsBottomSheet; import java.util.ArrayList; +import tw.nekomimi.nekogram.NekoConfig; + public class SizeNotifierFrameLayout extends FrameLayout { private Rect rect = new Rect(); @@ -441,6 +443,7 @@ public class SizeNotifierFrameLayout extends FrameLayout { } int blurAlpha = Color.alpha(Theme.getColor(Theme.key_chat_BlurAlpha)); + if (NekoConfig.forceBlurInChat.Bool()) blurAlpha = NekoConfig.chatBlueAlphaValue.Int(); if (blurAlpha == 255) { return; } @@ -684,6 +687,7 @@ public class SizeNotifierFrameLayout extends FrameLayout { public void drawBlur(Canvas canvas, float y, Rect rectTmp, Paint blurScrimPaint, boolean top) { int blurAlpha = Color.alpha(Theme.getColor(Theme.key_chat_BlurAlpha)); + if (NekoConfig.forceBlurInChat.Bool()) blurAlpha = NekoConfig.chatBlueAlphaValue.Int(); if (currentBitmap == null || !SharedConfig.chatBlurEnabled()) { canvas.drawRect(rectTmp, blurScrimPaint); return; diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/NekoConfig.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/NekoConfig.java index ab69d1987..eca00904a 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/NekoConfig.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/NekoConfig.java @@ -57,6 +57,8 @@ public class NekoConfig { public static ConfigItem nameOrder = addConfig("NameOrder", configTypeInt, 1); public static ConfigItem mapPreviewProvider = addConfig("MapPreviewProvider", configTypeInt, 0); public static ConfigItem transparentStatusBar = addConfig("TransparentStatusBar", configTypeBool, false); + public static ConfigItem forceBlurInChat = addConfig("forceBlurInChat", configTypeBool, false); + public static ConfigItem chatBlueAlphaValue = addConfig("forceBlurInChatAlphaValue", configTypeInt, 127); public static ConfigItem hideProxySponsorChannel = addConfig("HideProxySponsorChannel", configTypeBool, false); public static ConfigItem showAddToSavedMessages = addConfig("showAddToSavedMessages", configTypeBool, true); public static ConfigItem showReport = addConfig("showReport", configTypeBool, true); diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/config/cell/ConfigCellCustom.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/config/cell/ConfigCellCustom.java index 07cf5592b..f5ae72ab0 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/config/cell/ConfigCellCustom.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/config/cell/ConfigCellCustom.java @@ -3,8 +3,13 @@ package tw.nekomimi.nekogram.config.cell; import androidx.recyclerview.widget.RecyclerView; public class ConfigCellCustom extends AbstractConfigCell { + + public static final int CUSTOM_ITEM_ProfilePreview = 999; + public static final int CUSTOM_ITEM_StickerSize = 998; + public static final int CUSTOM_ITEM_CharBlurAlpha = 997; + public final int type; - public final boolean enabled; + public boolean enabled; public ConfigCellCustom(int type, boolean enabled) { this.type = type; diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoChatSettingsActivity.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoChatSettingsActivity.java index b7b99222d..b6f48b651 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoChatSettingsActivity.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoChatSettingsActivity.java @@ -64,7 +64,7 @@ public class NekoChatSettingsActivity extends BaseFragment implements Notificati private final CellGroup cellGroup = new CellGroup(this); private final AbstractConfigCell header0 = cellGroup.appendCell(new ConfigCellHeader(LocaleController.getString("StickerSize"))); - private final AbstractConfigCell stickerSizeRow = cellGroup.appendCell(new ConfigCellCustom(998, true)); + private final AbstractConfigCell stickerSizeRow = cellGroup.appendCell(new ConfigCellCustom(ConfigCellCustom.CUSTOM_ITEM_StickerSize, true)); private final AbstractConfigCell divider0 = cellGroup.appendCell(new ConfigCellDivider()); private final AbstractConfigCell header1 = cellGroup.appendCell(new ConfigCellHeader(LocaleController.getString("Chat"))); private final AbstractConfigCell unreadBadgeOnBackButton = cellGroup.appendCell(new ConfigCellTextCheck(NekoConfig.unreadBadgeOnBackButton)); @@ -584,7 +584,7 @@ public class NekoChatSettingsActivity extends BaseFragment implements Notificati view = new TextInfoPrivacyCell(mContext); // view.setBackground(Theme.getThemedDrawable(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); break; - case 998: + case ConfigCellCustom.CUSTOM_ITEM_StickerSize: view = stickerSizeCell = new StickerSizeCell(mContext); view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); break; diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoGeneralSettingsActivity.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoGeneralSettingsActivity.java index ec959271c..fe12c7564 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoGeneralSettingsActivity.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoGeneralSettingsActivity.java @@ -8,6 +8,9 @@ import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.content.pm.ResolveInfo; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.text.TextPaint; import android.transition.TransitionManager; import android.util.Log; import android.view.Gravity; @@ -48,14 +51,12 @@ import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.TextSettingsCell; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RecyclerListView; +import org.telegram.ui.Components.SeekBarView; import org.telegram.ui.Components.UndoView; -import java.nio.file.InvalidPathException; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -import java.util.Locale; import cn.hutool.core.util.StrUtil; import kotlin.Unit; @@ -144,6 +145,11 @@ public class NekoGeneralSettingsActivity extends BaseFragment { LocaleController.getString("Enable", R.string.Enable), LocaleController.getString("Disable", R.string.Disable) }, null)); + + private final AbstractConfigCell forceBlurInChatRow = cellGroup.appendCell(new ConfigCellTextCheck(NekoConfig.forceBlurInChat)); + private final AbstractConfigCell header_chatblur = cellGroup.appendCell(new ConfigCellHeader(LocaleController.getString("ChatBlurAlphaValue"))); + private final AbstractConfigCell chatBlurAlphaValueRow = cellGroup.appendCell(new ConfigCellCustom(ConfigCellCustom.CUSTOM_ITEM_CharBlurAlpha, NekoConfig.forceBlurInChat.Bool())); + private final AbstractConfigCell divider5 = cellGroup.appendCell(new ConfigCellDivider()); private final AbstractConfigCell header6 = cellGroup.appendCell(new ConfigCellHeader(LocaleController.getString("PrivacyTitle"))); @@ -172,7 +178,7 @@ public class NekoGeneralSettingsActivity extends BaseFragment { private final AbstractConfigCell displayPersianCalendarByLatinRow = cellGroup.appendCell(new ConfigCellTextCheck(NekoConfig.displayPersianCalendarByLatin)); private final AbstractConfigCell divider7 = cellGroup.appendCell(new ConfigCellDivider()); - + private ChatBlurAlphaSeekBar chatBlurAlphaSeekbar; private UndoView restartTooltip; @Override @@ -367,6 +373,11 @@ public class NekoGeneralSettingsActivity extends BaseFragment { } else if (key.equals(NekoConfig.disableAppBarShadow.getKey())) { ActionBarLayout.headerShadowDrawable = (boolean) newValue ? null : parentLayout.getResources().getDrawable(R.drawable.header_shadow).mutate(); parentLayout.rebuildAllFragmentViews(true, true); + } else if (NekoConfig.forceBlurInChat.getKey().equals(key)) { + boolean enabled = (Boolean) newValue; + if (chatBlurAlphaSeekbar != null) + chatBlurAlphaSeekbar.setEnabled(enabled); + ((ConfigCellCustom) chatBlurAlphaValueRow).enabled = enabled; } }; @@ -381,7 +392,7 @@ public class NekoGeneralSettingsActivity extends BaseFragment { private class ConfigCellDrawerProfilePreview extends AbstractConfigCell { public int getType() { - return 999; + return ConfigCellCustom.CUSTOM_ITEM_ProfilePreview; } public boolean isEnabled() { @@ -709,10 +720,15 @@ public class NekoGeneralSettingsActivity extends BaseFragment { view = new TextInfoPrivacyCell(mContext); // view.setBackground(Theme.getThemedDrawable(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); break; - case 999: + case ConfigCellCustom.CUSTOM_ITEM_ProfilePreview: view = profilePreviewCell = new DrawerProfilePreviewCell(mContext); view.setBackground(Theme.getThemedDrawable(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); break; + case ConfigCellCustom.CUSTOM_ITEM_CharBlurAlpha: + view = chatBlurAlphaSeekbar = new ChatBlurAlphaSeekBar(mContext); + chatBlurAlphaSeekbar.setEnabled(NekoConfig.forceBlurInChat.Bool()); + view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + break; } //noinspection ConstantConditions view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)); @@ -768,4 +784,65 @@ public class NekoGeneralSettingsActivity extends BaseFragment { keyField.requestFocus(); AndroidUtilities.showKeyboard(keyField); } + + private class ChatBlurAlphaSeekBar extends FrameLayout { + + private final SeekBarView sizeBar; + private final TextPaint textPaint; + private boolean enabled = true; + + public ChatBlurAlphaSeekBar(Context context) { + super(context); + + setWillNotDraw(false); + + textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + textPaint.setTextSize(AndroidUtilities.dp(16)); + + sizeBar = new SeekBarView(context); + sizeBar.setReportChanges(true); + sizeBar.setDelegate(new SeekBarView.SeekBarViewDelegate() { + @Override + public void onSeekBarDrag(boolean stop, float progress) { + NekoConfig.chatBlueAlphaValue.setConfigInt(Math.min(255, (int) (255 * progress))); + invalidate(); + } + + @Override + public void onSeekBarPressed(boolean pressed) { + + } + }); + sizeBar.setOnTouchListener((v, event) -> !enabled); + sizeBar.setProgress(NekoConfig.chatBlueAlphaValue.Int()); + addView(sizeBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 38, Gravity.LEFT | Gravity.TOP, 9, 5, 43, 11)); + } + + @Override + protected void onDraw(Canvas canvas) { + textPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteValueText)); + canvas.drawText(String.valueOf(NekoConfig.chatBlueAlphaValue.Int()), getMeasuredWidth() - AndroidUtilities.dp(39), AndroidUtilities.dp(28), textPaint); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + sizeBar.setProgress((NekoConfig.chatBlueAlphaValue.Int() / 255.0f)); + } + + @Override + public void invalidate() { + super.invalidate(); + sizeBar.invalidate(); + } + + @Override + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + this.enabled = enabled; + sizeBar.setAlpha(enabled ? 1.0f : 0.5f); + textPaint.setAlpha((int) ((enabled ? 1.0f : 0.3f) * 255)); + this.invalidate(); + } + } } \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values/strings_neko.xml b/TMessagesProj/src/main/res/values/strings_neko.xml index e6723e688..64f908bee 100644 --- a/TMessagesProj/src/main/res/values/strings_neko.xml +++ b/TMessagesProj/src/main/res/values/strings_neko.xml @@ -142,5 +142,7 @@ Leave blank to save directly Show bottom actions when selecting channel + Force enable Chat Blur + Chat Blur Alpha \ No newline at end of file