commit 283f0266d9f4588d5242c719172e21cbef6eede8
parent 9ff818b546a398052e1a9e1183d507713f433354
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sun, 4 Feb 2024 00:07:37 +0100
feat(core): disable permission requests
Diffstat:
4 files changed, 57 insertions(+), 0 deletions(-)
diff --git a/common/src/main/assets/lang/en_US.json b/common/src/main/assets/lang/en_US.json
@@ -502,6 +502,10 @@
"name": "Block Ads",
"description": "Prevents Advertisements from being displayed"
},
+ "disable_permission_requests": {
+ "name": "Disable Permission Requests",
+ "description": "Prevents Snapchat from asking for specific permissions"
+ },
"disable_memories_snap_feed": {
"name": "Disable Memories Snap Feed",
"description": "Prevents Snapchat from showing recent memories when you swipe up in camera"
@@ -878,6 +882,17 @@
"disable_cameras":{
"front": "Front Camera",
"back": "Back Camera"
+ },
+ "disable_permission_requests": {
+ "notifications": "Notifications",
+ "read_media_images": "Read Media Images",
+ "read_media_video": "Read Media Video",
+ "camera": "Camera",
+ "microphone": "Microphone",
+ "location": "Location",
+ "read_contacts": "Read Contacts",
+ "nearby_devices": "Nearby Devices",
+ "phone_calls": "Phone Calls"
}
}
},
diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/Global.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/Global.kt
@@ -4,6 +4,20 @@ import me.rhunk.snapenhance.common.config.ConfigContainer
import me.rhunk.snapenhance.common.config.FeatureNotice
class Global : ConfigContainer() {
+ companion object {
+ val permissionMap = mapOf(
+ "android.permission.POST_NOTIFICATIONS" to "notifications",
+ "android.permission.READ_MEDIA_IMAGES" to "read_media_images",
+ "android.permission.READ_MEDIA_VIDEO" to "read_media_video",
+ "android.permission.CAMERA" to "camera",
+ "android.permission.ACCESS_FINE_LOCATION" to "location",
+ "android.permission.RECORD_AUDIO" to "microphone",
+ "android.permission.READ_CONTACTS" to "read_contacts",
+ "android.permission.BLUETOOTH_CONNECT" to "nearby_devices",
+ "android.permission.READ_PHONE_STATE" to "phone_calls",
+ )
+ }
+
inner class SpoofLocation : ConfigContainer(hasGlobalState = true) {
val coordinates = mapCoordinates("coordinates", 0.0 to 0.0) { requireRestart()} // lat, long
}
@@ -14,6 +28,7 @@ class Global : ConfigContainer() {
val disableMetrics = boolean("disable_metrics") { requireRestart() }
val disableStorySections = multiple("disable_story_sections", "friends", "following", "discover") { requireRestart(); requireCleanCache() }
val blockAds = boolean("block_ads")
+ val disablePermissionRequests = multiple("disable_permission_requests", *permissionMap.values.toTypedArray()) { requireRestart(); addNotices(FeatureNotice.UNSTABLE) }
val disableMemoriesSnapFeed = boolean("disable_memories_snap_feed")
val spotlightCommentsUsername = boolean("spotlight_comments_username") { requireRestart() }
val bypassVideoLengthRestriction = unique("bypass_video_length_restriction", "split", "single") { addNotices(
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/tweaks/DisablePermissionRequests.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/tweaks/DisablePermissionRequests.kt
@@ -0,0 +1,24 @@
+package me.rhunk.snapenhance.core.features.impl.tweaks
+
+import android.content.ContextWrapper
+import android.content.pm.PackageManager
+import me.rhunk.snapenhance.common.config.impl.Global
+import me.rhunk.snapenhance.core.features.Feature
+import me.rhunk.snapenhance.core.features.FeatureLoadParams
+import me.rhunk.snapenhance.core.util.hook.HookStage
+import me.rhunk.snapenhance.core.util.hook.hook
+
+class DisablePermissionRequests : Feature("Disable Permission Requests", loadParams = FeatureLoadParams.INIT_SYNC) {
+ override fun init() {
+ val deniedPermissions by context.config.global.disablePermissionRequests
+ if (deniedPermissions.isEmpty()) return
+
+ ContextWrapper::class.java.hook("checkPermission", HookStage.BEFORE) { param ->
+ val permission = param.arg<String>(0)
+ val permissionKey = Global.permissionMap[permission] ?: return@hook
+ if (deniedPermissions.contains(permissionKey)) {
+ param.setResult(PackageManager.PERMISSION_GRANTED)
+ }
+ }
+ }
+}+
\ No newline at end of file
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/manager/impl/FeatureManager.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/manager/impl/FeatureManager.kt
@@ -19,6 +19,7 @@ import me.rhunk.snapenhance.core.features.impl.messaging.*
import me.rhunk.snapenhance.core.features.impl.spying.*
import me.rhunk.snapenhance.core.features.impl.tweaks.BypassScreenshotDetection
import me.rhunk.snapenhance.core.features.impl.tweaks.CameraTweaks
+import me.rhunk.snapenhance.core.features.impl.tweaks.DisablePermissionRequests
import me.rhunk.snapenhance.core.features.impl.tweaks.PreventMessageListAutoScroll
import me.rhunk.snapenhance.core.features.impl.tweaks.UnsaveableMessages
import me.rhunk.snapenhance.core.features.impl.ui.*
@@ -117,6 +118,7 @@ class FeatureManager(
SpotlightCommentsUsername(),
OperaViewerParamsOverride(),
StealthModeIndicator(),
+ DisablePermissionRequests(),
)
initializeFeatures()