mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
implement the first version of SIM picker
This commit is contained in:
@ -16,10 +16,8 @@ import android.util.Size
|
|||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.widget.RemoteViews
|
import android.widget.RemoteViews
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.*
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.extensions.audioManager
|
import com.simplemobiletools.contacts.pro.extensions.audioManager
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.contacts.pro.extensions.config
|
||||||
@ -202,29 +200,10 @@ class CallActivity : SimpleActivity() {
|
|||||||
callTimer.scheduleAtFixedRate(getCallTimerUpdateTask(), 1000, 1000)
|
callTimer.scheduleAtFixedRate(getCallTimerUpdateTask(), 1000, 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("MissingPermission")
|
|
||||||
private fun showPhoneAccountPicker() {
|
private fun showPhoneAccountPicker() {
|
||||||
if (!hasPermission(PERMISSION_READ_PHONE_STATE)) {
|
if (!hasPermission(PERMISSION_READ_PHONE_STATE)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val items = ArrayList<RadioItem>()
|
|
||||||
telecomManager.callCapablePhoneAccounts.forEachIndexed { index, account ->
|
|
||||||
val phoneAccount = telecomManager.getPhoneAccount(account)
|
|
||||||
var label = phoneAccount.label.toString()
|
|
||||||
var address = phoneAccount.address.toString()
|
|
||||||
if (address.startsWith("tel:") && address.substringAfter("tel:").isNotEmpty()) {
|
|
||||||
address = Uri.decode(address.substringAfter("tel:"))
|
|
||||||
label += " ($address)"
|
|
||||||
}
|
|
||||||
|
|
||||||
val radioItem = RadioItem(index, label, phoneAccount.accountHandle)
|
|
||||||
items.add(radioItem)
|
|
||||||
}
|
|
||||||
|
|
||||||
RadioGroupDialog(this, items, titleId = R.string.select_sim) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun endCall() {
|
private fun endCall() {
|
||||||
|
@ -5,14 +5,17 @@ import android.content.Intent
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.telecom.PhoneAccount
|
import android.telecom.PhoneAccount
|
||||||
|
import android.telecom.PhoneAccountHandle
|
||||||
import android.telecom.TelecomManager
|
import android.telecom.TelecomManager
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import com.simplemobiletools.commons.extensions.isDefaultDialer
|
import com.simplemobiletools.commons.extensions.isDefaultDialer
|
||||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||||
import com.simplemobiletools.commons.extensions.telecomManager
|
import com.simplemobiletools.commons.extensions.telecomManager
|
||||||
import com.simplemobiletools.commons.extensions.toast
|
import com.simplemobiletools.commons.extensions.toast
|
||||||
|
import com.simplemobiletools.commons.helpers.PERMISSION_READ_PHONE_STATE
|
||||||
import com.simplemobiletools.commons.helpers.REQUEST_CODE_SET_DEFAULT_DIALER
|
import com.simplemobiletools.commons.helpers.REQUEST_CODE_SET_DEFAULT_DIALER
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
|
import com.simplemobiletools.contacts.pro.dialogs.SelectSIMDialog
|
||||||
|
|
||||||
class DialerActivity : SimpleActivity() {
|
class DialerActivity : SimpleActivity() {
|
||||||
private var callNumber: Uri? = null
|
private var callNumber: Uri? = null
|
||||||
@ -43,11 +46,13 @@ class DialerActivity : SimpleActivity() {
|
|||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
private fun initOutgoingCall() {
|
private fun initOutgoingCall() {
|
||||||
try {
|
try {
|
||||||
Bundle().apply {
|
getHandleToUse {
|
||||||
putParcelable(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, telecomManager.getDefaultOutgoingPhoneAccount(PhoneAccount.SCHEME_TEL))
|
Bundle().apply {
|
||||||
putBoolean(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE, false)
|
putParcelable(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, it)
|
||||||
putBoolean(TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, false)
|
putBoolean(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE, false)
|
||||||
telecomManager.placeCall(callNumber, this)
|
putBoolean(TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, false)
|
||||||
|
telecomManager.placeCall(callNumber, this)
|
||||||
|
}
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
@ -56,6 +61,22 @@ class DialerActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("MissingPermission")
|
||||||
|
private fun getHandleToUse(callback: (PhoneAccountHandle) -> Unit) {
|
||||||
|
val defaultHandle = telecomManager.getDefaultOutgoingPhoneAccount(PhoneAccount.SCHEME_TEL)
|
||||||
|
if (defaultHandle != null) {
|
||||||
|
callback(defaultHandle)
|
||||||
|
} else {
|
||||||
|
handlePermission(PERMISSION_READ_PHONE_STATE) {
|
||||||
|
if (it) {
|
||||||
|
SelectSIMDialog(this) { handle ->
|
||||||
|
callback(handle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||||
super.onActivityResult(requestCode, resultCode, resultData)
|
super.onActivityResult(requestCode, resultCode, resultData)
|
||||||
if (requestCode == REQUEST_CODE_SET_DEFAULT_DIALER) {
|
if (requestCode == REQUEST_CODE_SET_DEFAULT_DIALER) {
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.simplemobiletools.contacts.pro.dialogs
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.net.Uri
|
||||||
|
import android.telecom.PhoneAccountHandle
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.RadioButton
|
||||||
|
import android.widget.RadioGroup
|
||||||
|
import androidx.appcompat.app.AlertDialog
|
||||||
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||||
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
|
import com.simplemobiletools.commons.extensions.telecomManager
|
||||||
|
import com.simplemobiletools.contacts.pro.R
|
||||||
|
import kotlinx.android.synthetic.main.dialog_select_sim.view.*
|
||||||
|
|
||||||
|
@SuppressLint("MissingPermission")
|
||||||
|
class SelectSIMDialog(val activity: BaseSimpleActivity, val callback: (handle: PhoneAccountHandle) -> Unit) {
|
||||||
|
private var dialog: AlertDialog? = null
|
||||||
|
|
||||||
|
init {
|
||||||
|
val view = activity.layoutInflater.inflate(R.layout.dialog_select_sim, null)
|
||||||
|
val radioGroup = view.select_sim_radio_group
|
||||||
|
|
||||||
|
activity.telecomManager.callCapablePhoneAccounts.forEachIndexed { index, account ->
|
||||||
|
val phoneAccount = activity.telecomManager.getPhoneAccount(account)
|
||||||
|
var label = phoneAccount.label.toString()
|
||||||
|
var address = phoneAccount.address.toString()
|
||||||
|
if (address.startsWith("tel:") && address.substringAfter("tel:").isNotEmpty()) {
|
||||||
|
address = Uri.decode(address.substringAfter("tel:"))
|
||||||
|
label += " ($address)"
|
||||||
|
}
|
||||||
|
|
||||||
|
val radioButton = (activity.layoutInflater.inflate(R.layout.radio_button, null) as RadioButton).apply {
|
||||||
|
text = label
|
||||||
|
id = index
|
||||||
|
setOnClickListener { selectedSIM(phoneAccount.accountHandle) }
|
||||||
|
}
|
||||||
|
radioGroup!!.addView(radioButton, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog = AlertDialog.Builder(activity)
|
||||||
|
.create().apply {
|
||||||
|
activity.setupDialogStuff(view, this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun selectedSIM(handle: PhoneAccountHandle) {
|
||||||
|
callback(handle)
|
||||||
|
dialog?.dismiss()
|
||||||
|
}
|
||||||
|
}
|
23
app/src/main/res/layout/dialog_select_sim.xml
Normal file
23
app/src/main/res/layout/dialog_select_sim.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/select_sim_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MyTextView
|
||||||
|
android:id="@+id/select_sim_label"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingStart="@dimen/small_margin"
|
||||||
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
|
android:text="@string/select_sim"
|
||||||
|
android:textSize="@dimen/normal_text_size" />
|
||||||
|
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/select_sim_radio_group"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
Reference in New Issue
Block a user