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