commit b5c1dd0678d061d8419f034761aa597e592074e4
parent 09002821432e44b93061bcb88ed3b9e7409be488
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Thu, 25 May 2023 23:40:36 +0200
feat: anti auto save
Diffstat:
6 files changed, 64 insertions(+), 14 deletions(-)
diff --git a/app/src/main/assets/lang/en_US.json b/app/src/main/assets/lang/en_US.json
@@ -9,6 +9,10 @@
"tweaks": "Tweaks",
"experimental": "Experimental"
},
+
+ "action": {
+ "clean_cache": "Clean Cache"
+ },
"property": {
"save_folder": "Save Folder",
@@ -32,6 +36,7 @@
"message_preview_length": "Message Preview Length",
"external_media_as_snap": "External Media As Snap",
"auto_save": "Auto Save",
+ "anti_auto_save": "Anti Auto Save Button",
"snapchat_plus": "Snapchat Plus",
"remove_voice_record_button": "Remove Voice Record Button",
"remove_stickers_button": "Remove Stickers Button",
@@ -48,7 +53,8 @@
"friend_menu_option": {
"preview": "Preview",
"stealth_mode": "Stealth Mode",
- "anti_auto_download": "Anti Auto Download"
+ "anti_auto_download": "Anti Auto Download",
+ "anti_auto_save": "Anti Auto Save"
},
"message_context_menu_option": {
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt b/app/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt
@@ -121,6 +121,7 @@ enum class ConfigProperty(
false
),
AUTO_SAVE("property.auto_save", "description.auto_save", ConfigCategory.EXTRAS, false),
+ ANTI_AUTO_SAVE("property.anti_auto_save", "description.anti_auto_save", ConfigCategory.EXTRAS, false),
SNAPCHAT_PLUS("property.snapchat_plus", "description.snapchat_plus", ConfigCategory.EXTRAS, false),
REMOVE_VOICE_RECORD_BUTTON(
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/extras/AntiAutoSave.kt b/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/extras/AntiAutoSave.kt
@@ -0,0 +1,19 @@
+package me.rhunk.snapenhance.features.impl.extras
+
+import me.rhunk.snapenhance.bridge.common.impl.file.BridgeFileType
+import me.rhunk.snapenhance.features.BridgeFileFeature
+import me.rhunk.snapenhance.features.FeatureLoadParams
+
+class AntiAutoSave : BridgeFileFeature("AntiAutoSave", BridgeFileType.ANTI_AUTO_SAVE, loadParams = FeatureLoadParams.ACTIVITY_CREATE_SYNC) {
+ override fun onActivityCreate() {
+ readFile()
+ }
+
+ fun setConversationIgnored(userId: String, state: Boolean) {
+ setState(userId.hashCode().toLong().toString(16), state)
+ }
+
+ fun isConversationIgnored(userId: String): Boolean {
+ return exists(userId.hashCode().toLong().toString(16))
+ }
+}+
\ No newline at end of file
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/extras/AutoSave.kt b/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/extras/AutoSave.kt
@@ -71,7 +71,10 @@ class AutoSave : Feature("Auto Save", loadParams = FeatureLoadParams.ACTIVITY_CR
private fun canSave(): Boolean {
with(context.feature(Messaging::class)) {
- if (lastOpenedConversationUUID == null || context.feature(StealthMode::class).isStealth(lastOpenedConversationUUID.toString())) return@canSave false
+ if (lastOpenedConversationUUID == null) return@canSave false
+ val conversation = lastOpenedConversationUUID.toString()
+ if (context.feature(StealthMode::class).isStealth(conversation)) return@canSave false
+ if (context.feature(AntiAutoSave::class).isConversationIgnored(conversation)) return@canSave false
}
return true
}
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ui/menus/impl/FriendFeedInfoMenu.kt b/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ui/menus/impl/FriendFeedInfoMenu.kt
@@ -21,6 +21,7 @@ import me.rhunk.snapenhance.database.objects.FriendInfo
import me.rhunk.snapenhance.database.objects.UserConversationLink
import me.rhunk.snapenhance.features.impl.Messaging
import me.rhunk.snapenhance.features.impl.downloader.AntiAutoDownload
+import me.rhunk.snapenhance.features.impl.extras.AntiAutoSave
import me.rhunk.snapenhance.features.impl.spy.StealthMode
import me.rhunk.snapenhance.features.impl.ui.menus.AbstractMenu
import me.rhunk.snapenhance.features.impl.ui.menus.ViewAppearanceHelper.applyTheme
@@ -163,6 +164,17 @@ class FriendFeedInfoMenu : AbstractMenu() {
builder.show()
}
+ private fun createToggleFeature(viewModel: View, viewConsumer: ((View) -> Unit), text: String, isChecked: () -> Boolean, toggle: (Boolean) -> Unit) {
+ val switch = Switch(viewModel.context)
+ switch.text = context.translation.get(text)
+ switch.isChecked = isChecked()
+ applyTheme(viewModel, switch)
+ switch.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
+ toggle(isChecked)
+ }
+ viewConsumer(switch)
+ }
+
@SuppressLint("SetTextI18n", "UseSwitchCompatOrMaterialCode", "DefaultLocale")
fun inject(viewModel: View, viewConsumer: ((View) -> Unit)) {
val messaging = context.feature(Messaging::class)
@@ -201,21 +213,27 @@ class FriendFeedInfoMenu : AbstractMenu() {
)
}
- if (context.config.bool(ConfigProperty.ANTI_DOWNLOAD_BUTTON)) {
- val userId = context.database.getFriendFeedInfoByConversationId(conversationId)?.friendUserId ?: return
-
- val antiAutoDownload = Switch(viewModel.context)
- antiAutoDownload.text = context.translation.get("friend_menu_option.anti_auto_download")
- antiAutoDownload.isChecked = context.feature(AntiAutoDownload::class).isUserIgnored(userId)
- applyTheme(viewModel, antiAutoDownload)
- antiAutoDownload.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
- context.feature(AntiAutoDownload::class).setUserIgnored(
- userId,
- isChecked
+ run {
+ val userId = context.database.getFriendFeedInfoByConversationId(conversationId)?.friendUserId ?: return@run
+ if (context.config.bool(ConfigProperty.ANTI_DOWNLOAD_BUTTON)) {
+ createToggleFeature(viewModel,
+ viewConsumer,
+ "friend_menu_option.anti_auto_download",
+ { context.feature(AntiAutoDownload::class).isUserIgnored(userId) },
+ { context.feature(AntiAutoDownload::class).setUserIgnored(userId, it) }
+ )
+ }
+
+ if (context.config.bool(ConfigProperty.ANTI_AUTO_SAVE)) {
+ createToggleFeature(viewModel,
+ viewConsumer,
+ "friend_menu_option.anti_auto_save",
+ { context.feature(AntiAutoSave::class).isConversationIgnored(conversationId) },
+ { context.feature(AntiAutoSave::class).setConversationIgnored(conversationId, it) }
)
}
- viewConsumer(antiAutoDownload)
}
+
viewConsumer(stealthSwitch)
viewConsumer(previewButton)
}
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/FeatureManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/FeatureManager.kt
@@ -8,6 +8,7 @@ import me.rhunk.snapenhance.features.impl.ConfigEnumKeys
import me.rhunk.snapenhance.features.impl.Messaging
import me.rhunk.snapenhance.features.impl.downloader.AntiAutoDownload
import me.rhunk.snapenhance.features.impl.downloader.MediaDownloader
+import me.rhunk.snapenhance.features.impl.extras.AntiAutoSave
import me.rhunk.snapenhance.features.impl.extras.AutoSave
import me.rhunk.snapenhance.features.impl.extras.ExternalMediaAsSnap
import me.rhunk.snapenhance.features.impl.extras.Notifications
@@ -62,6 +63,7 @@ class FeatureManager(private val context: ModContext) : Manager {
register(ConfigEnumKeys::class)
register(AntiAutoDownload::class)
register(ExternalMediaAsSnap::class)
+ register(AntiAutoSave::class)
initializeFeatures()
}