@@ -5,15 +5,19 @@ import android.appwidget.AppWidgetManager
55import android.content.ComponentName
66import android.content.Context
77import android.content.Intent
8+ import android.database.ContentObserver
89import android.graphics.Bitmap
910import android.graphics.BitmapFactory
1011import android.graphics.drawable.Icon
1112import android.os.Build
1213import android.os.Bundle
14+ import android.os.Handler
15+ import android.os.Looper
1316import android.os.PowerManager
1417import android.provider.Settings
1518import android.util.Log
1619import android.widget.Toast
20+ import android.view.accessibility.AccessibilityManager
1721import androidx.activity.ComponentActivity
1822import androidx.activity.compose.rememberLauncherForActivityResult
1923import androidx.activity.compose.setContent
@@ -530,6 +534,36 @@ fun TapLockScreen() {
530534
531535 DisposableEffect (Unit ) {
532536 val lifecycleOwner = context as ComponentActivity
537+ val accessibilityManager =
538+ context.getSystemService(Context .ACCESSIBILITY_SERVICE ) as AccessibilityManager
539+
540+ val refreshAccessibilityState = {
541+ isAccessibilityEnabled = isAccessibilityEnabled(context)
542+ }
543+
544+ val accessibilityObserver =
545+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
546+ val listener =
547+ AccessibilityManager .AccessibilityServicesStateChangeListener {
548+ refreshAccessibilityState()
549+ }
550+ accessibilityManager.addAccessibilityServicesStateChangeListener(listener)
551+ listener
552+ } else {
553+ val observer = object : ContentObserver (Handler (Looper .getMainLooper())) {
554+ override fun onChange (selfChange : Boolean ) {
555+ refreshAccessibilityState()
556+ }
557+ }
558+ context.contentResolver.registerContentObserver(
559+ Settings .Secure .getUriFor(Settings .Secure .ENABLED_ACCESSIBILITY_SERVICES ),
560+ false ,
561+ observer
562+ )
563+ observer
564+ }
565+ refreshAccessibilityState()
566+
533567 val observer = LifecycleEventObserver { _, event ->
534568 if (event == Lifecycle .Event .ON_RESUME ) {
535569 isAccessibilityEnabled = isAccessibilityEnabled(context)
@@ -600,6 +634,13 @@ fun TapLockScreen() {
600634 }
601635 lifecycleOwner.lifecycle.addObserver(observer)
602636 onDispose {
637+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
638+ accessibilityManager.removeAccessibilityServicesStateChangeListener(
639+ accessibilityObserver as AccessibilityManager .AccessibilityServicesStateChangeListener
640+ )
641+ } else {
642+ context.contentResolver.unregisterContentObserver(accessibilityObserver as ContentObserver )
643+ }
603644 lifecycleOwner.lifecycle.removeObserver(observer)
604645 }
605646 }
0 commit comments