refactor: optimize code & improve ui

This commit is contained in:
rhunk
2023-05-28 17:27:49 +02:00
parent 88bcfe9651
commit 0f711b698e
17 changed files with 88 additions and 84 deletions

View File

@@ -31,7 +31,7 @@ If the software is redistributed, it must remain under the same GPLv3 license an
</details> </details>
<details open> <details open>
<summary>Spy</summary> <summary>Spying</summary>
- Anonymous story viewing (other users won't know you viewed their story) - Anonymous story viewing (other users won't know you viewed their story)
- Message logger (log all messages sent and received, you will be able to see deleted messages) - Message logger (log all messages sent and received, you will be able to see deleted messages)
@@ -59,3 +59,8 @@ You can also download the latest build from the [actions](https://github.com/rhu
- BCH: qpu57a05kqljjadvpgjc6t894apprvth9slvlj4vpj - BCH: qpu57a05kqljjadvpgjc6t894apprvth9slvlj4vpj
- Bitcoin: bc1qaqnfn6mauzhmx0e6kkenh2wh4r6js0vh5vel92 - Bitcoin: bc1qaqnfn6mauzhmx0e6kkenh2wh4r6js0vh5vel92
- ETH: 0x0760987491e9de53A73fd87F092Bd432a227Ee92 - ETH: 0x0760987491e9de53A73fd87F092Bd432a227Ee92
## Contributors
- [rathmerdominik](https://github.com/rathmerdominik)
- [Flole998](https://github.com/Flole998)
- [authorisation](https://github.com/authorisation/)

View File

@@ -1,13 +1,14 @@
{ {
"category": { "category": {
"general": "General", "general": "General",
"spy": "Spy", "spying": "Spying",
"media_download": "Media Downloader", "media_download": "Media Downloader",
"privacy": "Privacy", "privacy": "Privacy",
"ui": "UI", "ui": "UI",
"extras": "Extras", "extras": "Extras",
"tweaks": "Tweaks", "tweaks": "Tweaks",
"experimental": "Experimental" "experimental": "Experimental",
"debugging": "Debugging"
}, },
"action": { "action": {
@@ -21,7 +22,7 @@
"prevent_read_receipts": "Prevent Read Receipts", "prevent_read_receipts": "Prevent Read Receipts",
"hide_bitmoji_presence": "Hide Bitmoji Presence", "hide_bitmoji_presence": "Hide Bitmoji Presence",
"show_message_content_in_notifications": "Show Message Content In Notifications", "show_message_content_in_notifications": "Show Message Content In Notifications",
"notification_filter": "Notification Filter", "notification_blacklist": "Notification Blacklist",
"message_logger": "Message Logger", "message_logger": "Message Logger",
"unlimited_snap_view_time": "Unlimited Snap View Time", "unlimited_snap_view_time": "Unlimited Snap View Time",
"auto_download_snaps": "Auto Download Snaps", "auto_download_snaps": "Auto Download Snaps",
@@ -61,7 +62,7 @@
"option": { "option": {
"property": { "property": {
"notification_filter": { "notification_blacklist": {
"chat": "Chat", "chat": "Chat",
"snap": "Snap", "snap": "Snap",
"typing": "Typing" "typing": "Typing"

View File

@@ -4,7 +4,7 @@ enum class ConfigCategory(
val key: String val key: String
) { ) {
GENERAL("category.general"), GENERAL("category.general"),
SPY("category.spy"), SPYING("category.spying"),
MEDIA_DOWNLOADER("category.media_download"), MEDIA_DOWNLOADER("category.media_download"),
PRIVACY("category.privacy"), PRIVACY("category.privacy"),
UI("category.ui"), UI("category.ui"),

View File

@@ -25,25 +25,25 @@ enum class ConfigProperty(
PREVENT_READ_RECEIPTS( PREVENT_READ_RECEIPTS(
"property.prevent_read_receipts", "property.prevent_read_receipts",
"description.prevent_read_receipts", "description.prevent_read_receipts",
ConfigCategory.SPY, ConfigCategory.SPYING,
ConfigStateValue(false) ConfigStateValue(false)
), ),
HIDE_BITMOJI_PRESENCE( HIDE_BITMOJI_PRESENCE(
"property.hide_bitmoji_presence", "property.hide_bitmoji_presence",
"description.hide_bitmoji_presence", "description.hide_bitmoji_presence",
ConfigCategory.SPY, ConfigCategory.SPYING,
ConfigStateValue(false) ConfigStateValue(false)
), ),
SHOW_MESSAGE_CONTENT_IN_NOTIFICATIONS( SHOW_MESSAGE_CONTENT_IN_NOTIFICATIONS(
"property.show_message_content_in_notifications", "property.show_message_content_in_notifications",
"description.show_message_content_in_notifications", "description.show_message_content_in_notifications",
ConfigCategory.SPY, ConfigCategory.SPYING,
ConfigStateValue(false) ConfigStateValue(false)
), ),
NOTIFICATION_FILTER( NOTIFICATION_BLACKLIST(
"property.notification_filter", "property.notification_blacklist",
"description.notification_filter", "description.notification_blacklist",
ConfigCategory.SPY, ConfigCategory.SPYING,
ConfigStateListValue( ConfigStateListValue(
listOf("snap", "chat", "typing"), listOf("snap", "chat", "typing"),
mutableMapOf( mutableMapOf(
@@ -54,8 +54,8 @@ enum class ConfigProperty(
) )
), ),
MESSAGE_LOGGER("property.message_logger", "description.message_logger", ConfigCategory.SPY, ConfigStateValue(false)), MESSAGE_LOGGER("property.message_logger", "description.message_logger", ConfigCategory.SPYING, ConfigStateValue(false)),
UNLIMITED_SNAP_VIEW_TIME("property.unlimited_snap_view_time", "description.unlimited_snap_view_time", ConfigCategory.SPY, ConfigStateValue(false)), UNLIMITED_SNAP_VIEW_TIME("property.unlimited_snap_view_time", "description.unlimited_snap_view_time", ConfigCategory.SPYING, ConfigStateValue(false)),
AUTO_DOWNLOAD_SNAPS( AUTO_DOWNLOAD_SNAPS(
"property.auto_download_snaps", "property.auto_download_snaps",
@@ -134,6 +134,36 @@ enum class ConfigProperty(
ConfigIntegerValue(20) ConfigIntegerValue(20)
), ),
AUTO_SAVE("property.auto_save", "description.auto_save", ConfigCategory.EXTRAS, ConfigStateValue(false)),
ANTI_AUTO_SAVE("property.anti_auto_save", "description.anti_auto_save", ConfigCategory.EXTRAS, ConfigStateValue(false)),
SNAPCHAT_PLUS("property.snapchat_plus", "description.snapchat_plus", ConfigCategory.EXTRAS, ConfigStateValue(false)),
DISABLE_SNAP_SPLITTING(
"property.disable_snap_splitting",
"description.disable_snap_splitting",
ConfigCategory.EXTRAS,
ConfigStateValue(false)
),
DISABLE_VIDEO_LENGTH_RESTRICTION(
"property.disable_video_length_restriction",
"description.disable_video_length_restriction",
ConfigCategory.EXTRAS,
ConfigStateValue(false)
),
OVERRIDE_MEDIA_QUALITY(
"property.override_media_quality",
"description.override_media_quality",
ConfigCategory.EXTRAS,
ConfigStateValue(false)
),
MEDIA_QUALITY_LEVEL(
"property.media_quality_level",
"description.media_quality_level",
ConfigCategory.EXTRAS,
ConfigStateSelection(
listOf("LEVEL_NONE", "LEVEL_1", "LEVEL_2", "LEVEL_3", "LEVEL_4", "LEVEL_5", "LEVEL_6", "LEVEL_7", "LEVEL_MAX"),
"LEVEL_NONE"
)
),
GALLERY_MEDIA_SEND_OVERRIDE( GALLERY_MEDIA_SEND_OVERRIDE(
"property.gallery_media_send_override", "property.gallery_media_send_override",
"description.gallery_media_send_override", "description.gallery_media_send_override",
@@ -143,37 +173,7 @@ enum class ConfigProperty(
"OFF" "OFF"
) )
), ),
AUTO_SAVE("property.auto_save", "description.auto_save", ConfigCategory.EXTRAS, ConfigStateValue(false)),
ANTI_AUTO_SAVE("property.anti_auto_save", "description.anti_auto_save", ConfigCategory.EXTRAS, ConfigStateValue(false)),
SNAPCHAT_PLUS("property.snapchat_plus", "description.snapchat_plus", ConfigCategory.EXTRAS, ConfigStateValue(false)),
DISABLE_SNAP_SPLITTING(
"property.disable_snap_splitting",
"description.disable_snap_splitting",
ConfigCategory.TWEAKS,
ConfigStateValue(false)
),
DISABLE_VIDEO_LENGTH_RESTRICTION(
"property.disable_video_length_restriction",
"description.disable_video_length_restriction",
ConfigCategory.TWEAKS,
ConfigStateValue(false)
),
OVERRIDE_MEDIA_QUALITY(
"property.override_media_quality",
"description.override_media_quality",
ConfigCategory.TWEAKS,
ConfigStateValue(false)
),
MEDIA_QUALITY_LEVEL(
"property.media_quality_level",
"description.media_quality_level",
ConfigCategory.TWEAKS,
ConfigStateSelection(
listOf("LEVEL_NONE", "LEVEL_1", "LEVEL_2", "LEVEL_3", "LEVEL_4", "LEVEL_5", "LEVEL_6", "LEVEL_7", "LEVEL_MAX"),
"LEVEL_NONE"
)
),
REMOVE_VOICE_RECORD_BUTTON( REMOVE_VOICE_RECORD_BUTTON(
"property.remove_voice_record_button", "property.remove_voice_record_button",
"description.remove_voice_record_button", "description.remove_voice_record_button",
@@ -233,10 +233,6 @@ enum class ConfigProperty(
); );
companion object { companion object {
fun fromNameKey(nameKey: String): ConfigProperty? {
return values().find { it.nameKey == nameKey }
}
fun sortedByCategory(): List<ConfigProperty> { fun sortedByCategory(): List<ConfigProperty> {
return values().sortedBy { it.category.ordinal } return values().sortedBy { it.category.ordinal }
} }

View File

@@ -21,7 +21,7 @@ import me.rhunk.snapenhance.data.wrapper.impl.media.opera.ParamMap
import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.Feature
import me.rhunk.snapenhance.features.FeatureLoadParams import me.rhunk.snapenhance.features.FeatureLoadParams
import me.rhunk.snapenhance.features.impl.Messaging import me.rhunk.snapenhance.features.impl.Messaging
import me.rhunk.snapenhance.features.impl.spy.MessageLogger import me.rhunk.snapenhance.features.impl.spying.MessageLogger
import me.rhunk.snapenhance.hook.HookAdapter import me.rhunk.snapenhance.hook.HookAdapter
import me.rhunk.snapenhance.hook.HookStage import me.rhunk.snapenhance.hook.HookStage
import me.rhunk.snapenhance.hook.Hooker import me.rhunk.snapenhance.hook.Hooker
@@ -62,7 +62,7 @@ class MediaDownloader : Feature("MediaDownloader", loadParams = FeatureLoadParam
return isFFmpegPresent return isFFmpegPresent
} }
private fun createNewFilePath(hash: Int, author: String, fileType: FileType): String? { private fun createNewFilePath(hash: Int, author: String, fileType: FileType): String {
val hexHash = Integer.toHexString(hash) val hexHash = Integer.toHexString(hash)
return author + "/" + hexHash + "." + fileType.fileExtension return author + "/" + hexHash + "." + fileType.fileExtension
} }

View File

@@ -8,8 +8,8 @@ import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID
import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.Feature
import me.rhunk.snapenhance.features.FeatureLoadParams import me.rhunk.snapenhance.features.FeatureLoadParams
import me.rhunk.snapenhance.features.impl.Messaging import me.rhunk.snapenhance.features.impl.Messaging
import me.rhunk.snapenhance.features.impl.spy.MessageLogger import me.rhunk.snapenhance.features.impl.spying.MessageLogger
import me.rhunk.snapenhance.features.impl.spy.StealthMode import me.rhunk.snapenhance.features.impl.spying.StealthMode
import me.rhunk.snapenhance.hook.HookStage import me.rhunk.snapenhance.hook.HookStage
import me.rhunk.snapenhance.hook.Hooker import me.rhunk.snapenhance.hook.Hooker
import me.rhunk.snapenhance.util.CallbackBuilder import me.rhunk.snapenhance.util.CallbackBuilder

View File

@@ -155,8 +155,7 @@ class Notifications : Feature("Notifications", loadParams = FeatureLoadParams.IN
} }
private fun shouldIgnoreNotification(type: String): Boolean { private fun shouldIgnoreNotification(type: String): Boolean {
Logger.debug("notification type: $type") val states = context.config.options(ConfigProperty.NOTIFICATION_BLACKLIST)
val states = context.config.options(ConfigProperty.NOTIFICATION_FILTER)
states["snap"]?.let { if (type.endsWith("SNAP") && it) return true } states["snap"]?.let { if (type.endsWith("SNAP") && it) return true }
states["chat"]?.let { if (type.endsWith("CHAT") && it) return true } states["chat"]?.let { if (type.endsWith("CHAT") && it) return true }

View File

@@ -29,14 +29,14 @@ class DisableMetrics : Feature("DisableMetrics", loadParams = FeatureLoadParams.
Hooker.hook(context.classCache.networkApi, "submit", HookStage.BEFORE, disableMetricsFilter) { param -> Hooker.hook(context.classCache.networkApi, "submit", HookStage.BEFORE, disableMetricsFilter) { param ->
val httpRequest: Any = param.arg(0) val httpRequest: Any = param.arg(0)
val url = XposedHelpers.getObjectField(httpRequest, "mUrl").toString() val url = XposedHelpers.getObjectField(httpRequest, "mUrl").toString()
if (url.contains("resolve?co=")) { /*if (url.contains("resolve?co=")) {
val index = url.indexOf("co=") val index = url.indexOf("co=")
val end = url.lastIndexOf("&") val end = url.lastIndexOf("&")
val co = url.substring(index + 3, end) val co = url.substring(index + 3, end)
val decoded = Base64.getDecoder().decode(co.toByteArray(StandardCharsets.UTF_8)) val decoded = Base64.getDecoder().decode(co.toByteArray(StandardCharsets.UTF_8))
debug("decoded : " + decoded.toString(Charsets.UTF_8)) debug("decoded : " + decoded.toString(Charsets.UTF_8))
debug("content: $co") debug("content: $co")
} }*/
if (url.contains("app-analytics") || url.endsWith("v1/metrics")) { if (url.contains("app-analytics") || url.endsWith("v1/metrics")) {
param.setResult(null) param.setResult(null)
} }

View File

@@ -1,4 +1,4 @@
package me.rhunk.snapenhance.features.impl.spy package me.rhunk.snapenhance.features.impl.spying
import me.rhunk.snapenhance.config.ConfigProperty import me.rhunk.snapenhance.config.ConfigProperty
import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.Feature

View File

@@ -1,4 +1,4 @@
package me.rhunk.snapenhance.features.impl.spy package me.rhunk.snapenhance.features.impl.spying
import com.google.gson.JsonParser import com.google.gson.JsonParser
import me.rhunk.snapenhance.config.ConfigProperty import me.rhunk.snapenhance.config.ConfigProperty

View File

@@ -1,4 +1,4 @@
package me.rhunk.snapenhance.features.impl.spy package me.rhunk.snapenhance.features.impl.spying
import me.rhunk.snapenhance.config.ConfigProperty import me.rhunk.snapenhance.config.ConfigProperty
import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID

View File

@@ -1,4 +1,4 @@
package me.rhunk.snapenhance.features.impl.spy package me.rhunk.snapenhance.features.impl.spying
import me.rhunk.snapenhance.bridge.common.impl.file.BridgeFileType import me.rhunk.snapenhance.bridge.common.impl.file.BridgeFileType
import me.rhunk.snapenhance.features.BridgeFileFeature import me.rhunk.snapenhance.features.BridgeFileFeature

View File

@@ -11,25 +11,24 @@ import android.widget.TextView
import me.rhunk.snapenhance.Constants import me.rhunk.snapenhance.Constants
object ViewAppearanceHelper { object ViewAppearanceHelper {
fun applyIndentation(view: TextView) {
view.setPadding(70, 0, 55, 0)
}
@SuppressLint("UseSwitchCompatOrMaterialCode", "RtlHardcoded", "DiscouragedApi") @SuppressLint("UseSwitchCompatOrMaterialCode", "RtlHardcoded", "DiscouragedApi")
fun applyTheme(viewModel: View, view: TextView) { fun applyTheme(viewModel: View, view: TextView) {
val snapchatFontResId = view.context.resources.getIdentifier("avenir_next_medium", "font", "com.snapchat.android")
//remove the shadow //remove the shadow
view.setBackgroundColor(0x00000000) view.setBackgroundColor(0x00000000)
view.setTextColor(viewModel.resources.getColor(viewModel.resources.getIdentifier("sig_color_text_primary_light", "color", Constants.SNAPCHAT_PACKAGE_NAME), null)) view.setTextColor(viewModel.resources.getColor(viewModel.resources.getIdentifier("sig_color_text_primary_light", "color", Constants.SNAPCHAT_PACKAGE_NAME), null))
view.setShadowLayer(0f, 0f, 0f, 0) view.setShadowLayer(0F, 0F, 0F, 0)
view.outlineProvider = null view.outlineProvider = null
view.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL view.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL
view.width = viewModel.width view.width = viewModel.width
//FIXME: hardcoded dimensions
view.height = 160 //DPI Calculator
view.setPadding(35, 0, 55, 0) val scalingFactor = view.context.resources.displayMetrics.densityDpi.toDouble() / 400
view.height = (150 * scalingFactor).toInt()
view.setPadding((40 * scalingFactor).toInt(), 0, (25 * scalingFactor).toInt(), 0)
view.isAllCaps = false view.isAllCaps = false
view.textSize = 15f view.textSize = 16f
view.typeface = Typeface.DEFAULT view.typeface = view.context.resources.getFont(snapchatFontResId)
//remove click effect //remove click effect
if (view.javaClass == TextView::class.java) { if (view.javaClass == TextView::class.java) {

View File

@@ -2,9 +2,8 @@ package me.rhunk.snapenhance.features.impl.ui.menus.impl
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.res.Resources import android.content.res.Resources
import android.graphics.BlendMode
import android.graphics.BlendModeColorFilter
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.SystemClock import android.os.SystemClock
import android.util.TypedValue import android.util.TypedValue
import android.view.MotionEvent import android.view.MotionEvent
@@ -27,7 +26,7 @@ class ChatActionMenu : AbstractMenu() {
} }
private fun applyButtonTheme(parent: View, button: Button) { private fun applyButtonTheme(parent: View, button: Button) {
button.background.colorFilter = BlendModeColorFilter(Color.WHITE, BlendMode.SRC_ATOP) button.background = ColorDrawable(Color.WHITE)
button.setTextColor(Color.BLACK) button.setTextColor(Color.BLACK)
button.transformationMethod = null button.transformationMethod = null
val margin = TypedValue.applyDimension( val margin = TypedValue.applyDimension(

View File

@@ -22,7 +22,7 @@ import me.rhunk.snapenhance.database.objects.UserConversationLink
import me.rhunk.snapenhance.features.impl.Messaging import me.rhunk.snapenhance.features.impl.Messaging
import me.rhunk.snapenhance.features.impl.downloader.AntiAutoDownload import me.rhunk.snapenhance.features.impl.downloader.AntiAutoDownload
import me.rhunk.snapenhance.features.impl.extras.AntiAutoSave import me.rhunk.snapenhance.features.impl.extras.AntiAutoSave
import me.rhunk.snapenhance.features.impl.spy.StealthMode import me.rhunk.snapenhance.features.impl.spying.StealthMode
import me.rhunk.snapenhance.features.impl.ui.menus.AbstractMenu import me.rhunk.snapenhance.features.impl.ui.menus.AbstractMenu
import me.rhunk.snapenhance.features.impl.ui.menus.ViewAppearanceHelper.applyTheme import me.rhunk.snapenhance.features.impl.ui.menus.ViewAppearanceHelper.applyTheme
import java.net.HttpURLConnection import java.net.HttpURLConnection

View File

@@ -2,6 +2,7 @@ package me.rhunk.snapenhance.features.impl.ui.menus.impl
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.AlertDialog import android.app.AlertDialog
import android.graphics.Typeface
import android.text.InputType import android.text.InputType
import android.view.View import android.view.View
import android.widget.Button import android.widget.Button
@@ -24,7 +25,8 @@ class SettingsMenu : AbstractMenu() {
val categoryText = TextView(viewModel.context) val categoryText = TextView(viewModel.context)
categoryText.text = context.translation.get(key) categoryText.text = context.translation.get(key)
ViewAppearanceHelper.applyTheme(viewModel, categoryText) ViewAppearanceHelper.applyTheme(viewModel, categoryText)
categoryText.textSize = 18f categoryText.textSize = 20f
categoryText.typeface = categoryText.typeface?.let { Typeface.create(it, Typeface.BOLD) }
return categoryText return categoryText
} }
@@ -33,6 +35,9 @@ class SettingsMenu : AbstractMenu() {
val updateButtonText: (TextView, String) -> Unit = { textView, text -> val updateButtonText: (TextView, String) -> Unit = { textView, text ->
textView.text = "${context.translation.get(property.nameKey)} $text" textView.text = "${context.translation.get(property.nameKey)} $text"
} }
val updateStateSelectionText: (TextView, String) -> Unit = { textView, text ->
updateButtonText(textView, text.let { if (it.isEmpty()) "(empty)" else ": $it" })
}
val textEditor: ((String) -> Unit) -> Unit = { updateValue -> val textEditor: ((String) -> Unit) -> Unit = { updateValue ->
val builder = AlertDialog.Builder(viewModel.context) val builder = AlertDialog.Builder(viewModel.context)
@@ -116,7 +121,7 @@ class SettingsMenu : AbstractMenu() {
} }
is ConfigStateListValue -> { is ConfigStateListValue -> {
val button = Button(viewModel.context) val button = Button(viewModel.context)
updateButtonText(button, property.valueContainer.toString()) updateStateSelectionText(button, property.valueContainer.toString())
button.setOnClickListener {_ -> button.setOnClickListener {_ ->
val builder = AlertDialog.Builder(viewModel.context) val builder = AlertDialog.Builder(viewModel.context)
@@ -134,7 +139,7 @@ class SettingsMenu : AbstractMenu() {
} }
builder.setPositiveButton("OK") { _, _ -> builder.setPositiveButton("OK") { _, _ ->
updateButtonText(button, property.valueContainer.toString()) updateStateSelectionText(button, property.valueContainer.toString())
} }
builder.show() builder.show()
@@ -177,7 +182,8 @@ class SettingsMenu : AbstractMenu() {
} }
} }
//actions addView(createCategoryTitle(viewModel, "category.debugging"))
context.actionManager.getActions().forEach { context.actionManager.getActions().forEach {
val button = Button(viewModel.context) val button = Button(viewModel.context)
button.text = context.translation.get(it.nameKey) button.text = context.translation.get(it.nameKey)

View File

@@ -20,10 +20,10 @@ import me.rhunk.snapenhance.features.impl.extras.SnapchatPlus
import me.rhunk.snapenhance.features.impl.extras.UnlimitedSnapViewTime import me.rhunk.snapenhance.features.impl.extras.UnlimitedSnapViewTime
import me.rhunk.snapenhance.features.impl.privacy.DisableMetrics import me.rhunk.snapenhance.features.impl.privacy.DisableMetrics
import me.rhunk.snapenhance.features.impl.privacy.PreventMessageSending import me.rhunk.snapenhance.features.impl.privacy.PreventMessageSending
import me.rhunk.snapenhance.features.impl.spy.AnonymousStoryViewing import me.rhunk.snapenhance.features.impl.spying.AnonymousStoryViewing
import me.rhunk.snapenhance.features.impl.spy.MessageLogger import me.rhunk.snapenhance.features.impl.spying.MessageLogger
import me.rhunk.snapenhance.features.impl.spy.PreventReadReceipts import me.rhunk.snapenhance.features.impl.spying.PreventReadReceipts
import me.rhunk.snapenhance.features.impl.spy.StealthMode import me.rhunk.snapenhance.features.impl.spying.StealthMode
import me.rhunk.snapenhance.features.impl.ui.UITweaks import me.rhunk.snapenhance.features.impl.ui.UITweaks
import me.rhunk.snapenhance.features.impl.ui.menus.MenuViewInjector import me.rhunk.snapenhance.features.impl.ui.menus.MenuViewInjector
import me.rhunk.snapenhance.manager.Manager import me.rhunk.snapenhance.manager.Manager
@@ -37,7 +37,6 @@ class FeatureManager(private val context: ModContext) : Manager {
private fun register(featureClass: KClass<out Feature>) { private fun register(featureClass: KClass<out Feature>) {
runCatching { runCatching {
with(featureClass.java.newInstance()) { with(featureClass.java.newInstance()) {
if (loadParams and FeatureLoadParams.NO_INIT != 0) return@with
context = this@FeatureManager.context context = this@FeatureManager.context
features.add(this) features.add(this)
} }