feat: Remove Accessibility requirement for Notification and Quick Settings gestures (#1784)

* Replace Accessibility Service with reflection for Notification and Quick Settings actions

* move reflection logic to GlobalActionsService with fallback
This commit is contained in:
Aryan
2026-01-28 22:09:25 +05:30
committed by GitHub
parent 6244869a76
commit b95c9c218b
6 changed files with 45 additions and 63 deletions

View File

@@ -1,10 +1,15 @@
package de.mm20.launcher2.globalactions
import android.accessibilityservice.AccessibilityService
import android.content.Context
class GlobalActionsService {
class GlobalActionsService(private val context: Context) {
fun openNotificationDrawer() {
LauncherAccessibilityService.getInstance()?.performGlobalAction(AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS)
try {
expandNotificationPanel()
} catch (e: Exception) {
LauncherAccessibilityService.getInstance()?.performGlobalAction(AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS)
}
}
fun lockScreen() {
@@ -12,7 +17,11 @@ class GlobalActionsService {
}
fun openQuickSettings() {
LauncherAccessibilityService.getInstance()?.performGlobalAction(AccessibilityService.GLOBAL_ACTION_QUICK_SETTINGS)
try {
expandQuickSettings()
} catch (e: Exception) {
LauncherAccessibilityService.getInstance()?.performGlobalAction(AccessibilityService.GLOBAL_ACTION_QUICK_SETTINGS)
}
}
fun openPowerDialog() {
@@ -22,4 +31,19 @@ class GlobalActionsService {
fun openRecents() {
LauncherAccessibilityService.getInstance()?.performGlobalAction(AccessibilityService.GLOBAL_ACTION_RECENTS)
}
private fun expandNotificationPanel() {
val statusBarService = context.getSystemService("statusbar")
val statusBarManager = Class.forName("android.app.StatusBarManager")
val method = statusBarManager.getMethod("expandNotificationsPanel")
method.invoke(statusBarService)
}
private fun expandQuickSettings() {
val statusBarService = context.getSystemService("statusbar")
val statusBarManager = Class.forName("android.app.StatusBarManager")
val method = statusBarManager.getMethod("expandSettingsPanel")
method.invoke(statusBarService)
}
}

View File

@@ -1,7 +1,8 @@
package de.mm20.launcher2.globalactions
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module
val globalActionsModule = module {
single { GlobalActionsService() }
single { GlobalActionsService(androidContext()) }
}