- Always show currently active call (if any) when application is relaunched.

This commit is contained in:
Juha Heinanen
2019-05-28 10:03:33 +03:00
parent 4a2a16ef93
commit fb54b3368b
2 changed files with 33 additions and 76 deletions
@@ -145,16 +145,12 @@ class ChatsActivity: AppCompatActivity() {
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
Log.d("Baresip", "Chats paused")
} }
/*override fun onStop() {
super.onStop()
Log.d("Baresip", "Chats stopped")
}*/
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
// Log.d("Baresip", "Chats resumed") Log.d("Baresip", "Chats resumed")
clAdapter.clear() clAdapter.clear()
uaMessages = uaMessages(aor) uaMessages = uaMessages(aor)
clAdapter = ChatListAdapter(this, uaMessages) clAdapter = ChatListAdapter(this, uaMessages)
@@ -21,6 +21,7 @@ import android.widget.*
import android.view.* import android.view.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
import android.content.Intent
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@@ -135,6 +136,7 @@ class MainActivity : AppCompatActivity() {
uaAdapter = UaSpinnerAdapter(applicationContext, UserAgent.uas(), UserAgent.status()) uaAdapter = UaSpinnerAdapter(applicationContext, UserAgent.uas(), UserAgent.status())
aorSpinner.adapter = uaAdapter aorSpinner.adapter = uaAdapter
aorSpinner.setSelection(-1)
aorSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { aorSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) { override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
Log.d("Baresip", "aorSpinner selecting $position") Log.d("Baresip", "aorSpinner selecting $position")
@@ -535,12 +537,17 @@ class MainActivity : AppCompatActivity() {
handleServiceEvent(resumeAction, arrayListOf(resumeUap, resumeUri)) handleServiceEvent(resumeAction, arrayListOf(resumeUap, resumeUri))
else -> { else -> {
if (UserAgent.uas().size > 0) { if (UserAgent.uas().size > 0) {
val currentPosition = aorSpinner.selectedItemPosition
uaAdapter = UaSpinnerAdapter(applicationContext, UserAgent.uas(), UserAgent.status()) uaAdapter = UaSpinnerAdapter(applicationContext, UserAgent.uas(), UserAgent.status())
aorSpinner.adapter = uaAdapter aorSpinner.adapter = uaAdapter
if (aorSpinner.selectedItemPosition == -1) if (currentPosition == -1) {
aorSpinner.setSelection(0) if (Call.calls().size > 0)
spinToAor(Call.calls()[0].ua.account.aor)
else else
aorSpinner.setSelection(aorSpinner.selectedItemPosition) aorSpinner.setSelection(0)
} else {
aorSpinner.setSelection(currentPosition)
}
showCall(UserAgent.uas()[aorSpinner.selectedItemPosition]) showCall(UserAgent.uas()[aorSpinner.selectedItemPosition])
updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account) updateIcons(UserAgent.uas()[aorSpinner.selectedItemPosition].account)
} }
@@ -633,30 +640,18 @@ class MainActivity : AppCompatActivity() {
Log.w("Baresip", "Incoming call $callp not found") Log.w("Baresip", "Incoming call $callp not found")
return return
} }
setVolumeControlStream(AudioManager.STREAM_RING) volumeControlStream = AudioManager.STREAM_RING
if (visible) {
if ((aorSpinner.selectedItemPosition == -1) || if ((aorSpinner.selectedItemPosition == -1) ||
(ua != UserAgent.uas()[aorSpinner.selectedItemPosition])) { (ua != UserAgent.uas()[aorSpinner.selectedItemPosition]))
aorSpinner.setSelection(account_index) aorSpinner.setSelection(account_index)
showCall(ua)
} else { } else {
callTitle.text = getString(R.string.incoming_call_from_dots) Log.d("Baresip", "Reordering to front")
callUri.setAdapter(null)
callUri.setText(Utils.friendlyUri(ContactsActivity.contactName(call.peerURI),
Utils.aorDomain(ua.account.aor)))
callUri.isFocusable = false
securityButton.visibility = View.INVISIBLE
callButton.visibility = View.INVISIBLE
hangupButton.visibility = View.INVISIBLE
answerButton.visibility = View.VISIBLE
answerButton.isEnabled = true
rejectButton.visibility = View.VISIBLE
rejectButton.isEnabled = true
holdButton.visibility = View.INVISIBLE
dtmf.visibility = View.INVISIBLE
infoButton.visibility = View.INVISIBLE
}
if (!visible) {
val i = Intent(applicationContext, MainActivity::class.java) val i = Intent(applicationContext, MainActivity::class.java)
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
i.putExtra("action", "call show")
i.putExtra("callp", callp)
startActivity(i) startActivity(i)
} }
} }
@@ -667,34 +662,11 @@ class MainActivity : AppCompatActivity() {
Log.w("Baresip", "Established call $callp not found") Log.w("Baresip", "Established call $callp not found")
return return
} }
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL) volumeControlStream = AudioManager.STREAM_VOICE_CALL
if (ua == UserAgent.uas()[aorSpinner.selectedItemPosition]) { if (ua == UserAgent.uas()[aorSpinner.selectedItemPosition]) {
if (call.dir == "in")
callTitle.text = getString(R.string.incoming_call_from_dots)
else
callTitle.text = getString(R.string.outgoing_call_to_dots)
if (acc.mediaEnc == "") {
securityButton.visibility = View.INVISIBLE
} else {
securityButton.setImageResource(call.security)
setSecurityButtonTag(securityButton, call.security)
securityButton.visibility = View.VISIBLE
}
callButton.visibility = View.INVISIBLE
hangupButton.visibility = View.VISIBLE
hangupButton.isEnabled = true
answerButton.visibility = View.INVISIBLE
rejectButton.visibility = View.INVISIBLE
holdButton.setImageResource(R.drawable.pause)
holdButton.visibility = View.VISIBLE
dtmf.setText("") dtmf.setText("")
dtmf.hint = getString(R.string.dtmf) dtmf.hint = getString(R.string.dtmf)
dtmf.visibility = View.VISIBLE showCall(ua)
dtmf.requestFocus()
if (dtmfWatcher != null) dtmf.removeTextChangedListener(dtmfWatcher)
dtmfWatcher = call.dtmfWatcher
dtmf.addTextChangedListener(dtmfWatcher)
infoButton.visibility = View.VISIBLE
} }
} }
"call verify" -> { "call verify" -> {
@@ -1014,25 +986,11 @@ class MainActivity : AppCompatActivity() {
} }
if (ua != UserAgent.uas()[aorSpinner.selectedItemPosition]) if (ua != UserAgent.uas()[aorSpinner.selectedItemPosition])
spinToAor(ua.account.aor) spinToAor(ua.account.aor)
callUri.setText(Utils.friendlyUri(ContactsActivity.contactName(uri),
Utils.aorDomain(Utils.aorDomain(ua.account.aor))))
callButton.visibility = View.INVISIBLE
val callp = Api.ua_connect(ua.uap, uri) val callp = Api.ua_connect(ua.uap, uri)
if (callp != "") { if (callp != "") {
Log.d("Baresip", "Adding outgoing call ${ua.uap}/$callp/$uri") Log.d("Baresip", "Adding outgoing call ${ua.uap}/$callp/$uri")
Call.calls().add(Call(callp, ua, uri, "out", status, Utils.dtmfWatcher(callp))) Call.calls().add(Call(callp, ua, uri, "out", status, Utils.dtmfWatcher(callp)))
imm.hideSoftInputFromWindow(callUri.windowToken, 0) showCall(ua)
callUri.isFocusable = false
securityButton.visibility = View.INVISIBLE
callButton.visibility = View.INVISIBLE
hangupButton.visibility = View.VISIBLE
hangupButton.isEnabled = true
answerButton.visibility = View.INVISIBLE
rejectButton.visibility = View.INVISIBLE
holdButton.visibility = View.INVISIBLE
dtmf.visibility = View.INVISIBLE
infoButton.visibility = View.INVISIBLE
} else { } else {
Log.e("Baresip", "ua_connect ${ua.uap}/$uri failed") Log.e("Baresip", "ua_connect ${ua.uap}/$uri failed")
callButton.visibility = View.VISIBLE callButton.visibility = View.VISIBLE
@@ -1110,16 +1068,19 @@ class MainActivity : AppCompatActivity() {
callTitle.text = getString(R.string.outgoing_call_to_dots) callTitle.text = getString(R.string.outgoing_call_to_dots)
} else { } else {
callTitle.text = getString(R.string.incoming_call_from_dots) callTitle.text = getString(R.string.incoming_call_from_dots)
callUri.setAdapter(null)
call = callsIn[callsIn.size - 1] call = callsIn[callsIn.size - 1]
} }
callUri.setText(Utils.friendlyUri(ContactsActivity.contactName(call.peerURI), callUri.setText(Utils.friendlyUri(ContactsActivity.contactName(call.peerURI),
Utils.aorDomain(ua.account.aor))) Utils.aorDomain(ua.account.aor)))
callUri.isFocusable = false callUri.isFocusable = false
imm.hideSoftInputFromWindow(callUri.windowToken, 0)
when (call.status) { when (call.status) {
"outgoing", "transferring" -> { "outgoing", "transferring" -> {
securityButton.visibility = View.INVISIBLE securityButton.visibility = View.INVISIBLE
callButton.visibility = View.INVISIBLE callButton.visibility = View.INVISIBLE
hangupButton.visibility = View.VISIBLE hangupButton.visibility = View.VISIBLE
hangupButton.isEnabled = true
answerButton.visibility = View.INVISIBLE answerButton.visibility = View.INVISIBLE
rejectButton.visibility = View.INVISIBLE rejectButton.visibility = View.INVISIBLE
holdButton.visibility = View.INVISIBLE holdButton.visibility = View.INVISIBLE
@@ -1139,12 +1100,13 @@ class MainActivity : AppCompatActivity() {
infoButton.visibility = View.INVISIBLE infoButton.visibility = View.INVISIBLE
} }
"connected" -> { "connected" -> {
if (ua.account.mediaEnc == "") {
securityButton.visibility = View.INVISIBLE
} else {
securityButton.setImageResource(call.security) securityButton.setImageResource(call.security)
setSecurityButtonTag(securityButton, call.security) setSecurityButtonTag(securityButton, call.security)
if (ua.account.mediaEnc == "")
securityButton.visibility = View.INVISIBLE
else
securityButton.visibility = View.VISIBLE securityButton.visibility = View.VISIBLE
}
callButton.visibility = View.INVISIBLE callButton.visibility = View.INVISIBLE
hangupButton.visibility = View.VISIBLE hangupButton.visibility = View.VISIBLE
hangupButton.isEnabled = true hangupButton.isEnabled = true
@@ -1186,7 +1148,6 @@ class MainActivity : AppCompatActivity() {
var resumeUap = "" var resumeUap = ""
var resumeCall: Call? = null var resumeCall: Call? = null
var resumeUri = "" var resumeUri = ""
var resumeTime = ""
const val ACCOUNTS_CODE = 1 const val ACCOUNTS_CODE = 1
const val CONTACTS_CODE = 2 const val CONTACTS_CODE = 2