Horis 2 лет назад
Родитель
Сommit
a46f1d80d6
1 измененных файлов с 21 добавлено и 14 удалено
  1. 21 14
      app/src/main/java/io/legado/app/service/BaseReadAloudService.kt

+ 21 - 14
app/src/main/java/io/legado/app/service/BaseReadAloudService.kt

@@ -42,6 +42,7 @@ import io.legado.app.model.ReadBook
 import io.legado.app.receiver.MediaButtonReceiver
 import io.legado.app.ui.book.read.ReadBookActivity
 import io.legado.app.ui.book.read.page.entities.TextChapter
+import io.legado.app.utils.LogUtils
 import io.legado.app.utils.activityPendingIntent
 import io.legado.app.utils.broadcastPendingIntent
 import io.legado.app.utils.getPrefBoolean
@@ -634,35 +635,41 @@ abstract class BaseReadAloudService : BaseService(),
         }
     }
 
-    @Suppress("DEPRECATION")
     private fun unregisterPhoneStateListener(l: PhoneStateListener) {
         if (registeredPhoneStateListener) {
-            registerPhoneStateListener(l, true)
+            withReadPhoneStatePermission {
+                telephonyManager.listen(l, PhoneStateListener.LISTEN_NONE)
+                registeredPhoneStateListener = false
+            }
+        }
+    }
+
+    private fun registerPhoneStateListener(l: PhoneStateListener) {
+        withReadPhoneStatePermission {
+            telephonyManager.listen(l, PhoneStateListener.LISTEN_CALL_STATE)
+            registeredPhoneStateListener = true
         }
     }
 
-    @Suppress("DEPRECATION")
-    private fun registerPhoneStateListener(l: PhoneStateListener, unregister: Boolean = false) {
+    private fun withReadPhoneStatePermission(block: () -> Unit) {
         try {
-            if (unregister) {
-                telephonyManager.listen(l, PhoneStateListener.LISTEN_NONE)
-                registeredPhoneStateListener = false
-            } else {
-                telephonyManager.listen(l, PhoneStateListener.LISTEN_CALL_STATE)
-                registeredPhoneStateListener = true
-            }
-        } catch (e: SecurityException) {
+            block.invoke()
+        } catch (_: SecurityException) {
             PermissionsCompat.Builder()
                 .addPermissions(Permissions.READ_PHONE_STATE)
                 .rationale(R.string.read_aloud_read_phone_state_permission_rationale)
                 .onGranted {
-                    registerPhoneStateListener(l, unregister)
+                    try {
+                        block.invoke()
+                    } catch (_: SecurityException) {
+                        LogUtils.d(TAG, "Grant read phone state permission fail.")
+                    }
                 }
                 .request()
         }
     }
 
-    @Suppress("DEPRECATION", "OVERRIDE_DEPRECATION")
+    @Suppress("OVERRIDE_DEPRECATION")
     inner class ReadAloudPhoneStateListener : PhoneStateListener() {
         override fun onCallStateChanged(state: Int, phoneNumber: String?) {
             super.onCallStateChanged(state, phoneNumber)