feat(core): disable permission requests

This commit is contained in:
rhunk
2024-02-04 00:07:37 +01:00
parent 9ff818b546
commit 283f0266d9
4 changed files with 56 additions and 0 deletions

View File

@@ -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"
}
}
},

View File

@@ -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(

View File

@@ -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)
}
}
}
}

View File

@@ -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()