mirror of
https://github.com/twinksoftware/Gearslip.git
synced 2026-11-11 08:12:26 +01:00
calls: place calls through Telecom, since the call screen can't open on the car's display
This commit is contained in:
1 parent
dc61607028
commit
068288a0e7
1 file changed
+13
-5
@@ -8,6 +8,7 @@ import android.content.pm.PackageManager
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.ContactsContract
|
import android.provider.ContactsContract
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
|
import app.seb3thehacker.gearslip.GearslipLog
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
@@ -80,14 +81,21 @@ internal fun loadContacts(context: Context): List<Contact> {
|
|||||||
return out.distinctBy { it.number }
|
return out.distinctBy { it.number }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Places the call through Telecom directly. Starting ACTION_CALL from here launched the system's
|
||||||
|
* call activity onto the car's display, which Android refuses for another app's activity, and
|
||||||
|
* from the background, which it blocks too - so the call never went out.
|
||||||
|
*/
|
||||||
internal fun placeCall(context: Context, number: String) {
|
internal fun placeCall(context: Context, number: String) {
|
||||||
if (number.isBlank()) return
|
if (number.isBlank()) return
|
||||||
if (context.checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) return
|
if (context.checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
|
||||||
runCatching {
|
GearslipLog.w("calls: can't place a call without CALL_PHONE")
|
||||||
context.startActivity(
|
return
|
||||||
Intent(Intent.ACTION_CALL, Uri.parse("tel:${Uri.encode(number)}")).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
val telecom = context.getSystemService(android.telecom.TelecomManager::class.java)
|
||||||
|
runCatching { telecom!!.placeCall(Uri.fromParts("tel", number, null), null) }
|
||||||
|
.onSuccess { GearslipLog.i("calls: placing a call") }
|
||||||
|
.onFailure { GearslipLog.w("calls: placing a call failed: ${it.message}") }
|
||||||
}
|
}
|
||||||
|
|
||||||
/** A call another car screen wants to place - a number on a place page - waiting on the driver. */
|
/** A call another car screen wants to place - a number on a place page - waiting on the driver. */
|
||||||
|
|||||||
Reference in new issue
Block a user