Skip to content

Commit 43f63ba

Browse files
committed
fix: #271 Button remap overriding volume button triggers in camera
1 parent 1c71c06 commit 43f63ba

2 files changed

Lines changed: 42 additions & 3 deletions

File tree

app/src/main/java/com/sameerasw/essentials/services/handlers/AppFlowHandler.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class AppFlowHandler(
2929
// App Lock State
3030
private var lockingPackage: String? = null
3131
private var lastLockRequestTime: Long = 0
32+
var currentPackage: String? = null
33+
private set
3234

3335
// App Automation State
3436
private val activeAppAutomationIds = mutableSetOf<String>()
@@ -49,6 +51,8 @@ class AppFlowHandler(
4951
val prefs = context.getSharedPreferences("essentials_prefs", Context.MODE_PRIVATE)
5052
val useUsageAccess = prefs.getBoolean("use_usage_access", false)
5153

54+
currentPackage = packageName
55+
5256
if (packageName != context.packageName && packageName != lockingPackage) {
5357
lockingPackage = null
5458
}
@@ -228,4 +232,26 @@ class AppFlowHandler(
228232
}
229233
}
230234
}
235+
236+
fun isCameraApp(packageName: String? = currentPackage): Boolean {
237+
if (packageName == null) return false
238+
239+
// Known camera packages
240+
val cameraPackages = listOf(
241+
"com.google.android.GoogleCamera",
242+
"com.android.camera",
243+
"com.sec.android.app.camera",
244+
"com.huawei.camera",
245+
"com.oneplus.camera",
246+
"com.oppo.camera",
247+
"com.miui.camera",
248+
"com.sonyericsson.android.camera",
249+
"com.sonymobile.android.camera"
250+
)
251+
if (cameraPackages.any { packageName.startsWith(it) }) return true
252+
253+
if (packageName.lowercase().contains("camera")) return true
254+
255+
return false
256+
}
231257
}

app/src/main/java/com/sameerasw/essentials/services/tiles/ScreenOffAccessibilityService.kt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,17 @@ class ScreenOffAccessibilityService : AccessibilityService(), SensorEventListene
173173
override fun onAccessibilityEvent(event: AccessibilityEvent?) {
174174
if (event == null) return
175175

176-
securityHandler.onAccessibilityEvent(event)
177-
178176
if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
179177
val packageName = event.packageName?.toString() ?: return
180178
appFlowHandler.onPackageChanged(packageName)
181179
}
180+
181+
// Bypass security scanning for camera apps to avoid performance interference
182+
if (appFlowHandler.isCameraApp()) {
183+
return
184+
}
185+
186+
securityHandler.onAccessibilityEvent(event)
182187
}
183188

184189
override fun onInterrupt() {}
@@ -197,7 +202,15 @@ class ScreenOffAccessibilityService : AccessibilityService(), SensorEventListene
197202

198203
override fun onKeyEvent(event: KeyEvent): Boolean {
199204
val keyCode = event.keyCode
200-
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
205+
val isVolumeKey = keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
206+
207+
if (isVolumeKey) {
208+
// Bypass logic for Camera apps to resolve conflicts with shutter/zoom functions
209+
val foregroundPackage = rootInActiveWindow?.packageName?.toString() ?: appFlowHandler.currentPackage
210+
if (appFlowHandler.isCameraApp(foregroundPackage)) {
211+
return false
212+
}
213+
201214
val powerManager = getSystemService(POWER_SERVICE) as android.os.PowerManager
202215
if (!powerManager.isInteractive && event.action == KeyEvent.ACTION_DOWN) {
203216
triggerAmbientGlanceVolume(keyCode)

0 commit comments

Comments
 (0)