Skip to content

Commit

Permalink
Disable call action buttons when call is ended
Browse files Browse the repository at this point in the history
Closes #181
  • Loading branch information
naveensingh committed May 4, 2024
1 parent a262501 commit 5236b03
Showing 1 changed file with 24 additions and 13 deletions.
37 changes: 24 additions & 13 deletions app/src/main/kotlin/org/fossify/phone/activities/CallActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import android.view.animation.AccelerateDecelerateInterpolator
import android.view.animation.OvershootInterpolator
import android.widget.ImageView
import androidx.core.content.res.ResourcesCompat
import androidx.core.os.postDelayed
import androidx.core.view.children
import androidx.core.view.setPadding
import androidx.core.view.updatePadding
Expand Down Expand Up @@ -508,9 +509,8 @@ class CallActivity : SimpleActivity() {
}

private fun findVisibleViewsUnderDialpad(): Sequence<Pair<View, Float>> {
val ignored = listOf(binding.buttonGrid, binding.controlsSingleCall, binding.controlsTwoCalls)
return binding.ongoingCallHolder.children
.filter { it !in ignored && it.isVisible() }
.filter { it is ImageView && it.isVisible() }
.map { view -> Pair(view, view.alpha) }
}

Expand Down Expand Up @@ -660,9 +660,9 @@ class CallActivity : SimpleActivity() {
callStatusLabel.text = getString(statusTextId)
}

callManage.beVisibleIf(call.hasCapability(Call.Details.CAPABILITY_MANAGE_CONFERENCE))
setActionButtonEnabled(callSwap, state == Call.STATE_ACTIVE)
setActionButtonEnabled(callMerge, state == Call.STATE_ACTIVE)
callManage.beVisibleIf(!isCallEnded && call.hasCapability(Call.Details.CAPABILITY_MANAGE_CONFERENCE))
setActionButtonEnabled(callSwap, enabled = !isCallEnded && state == Call.STATE_ACTIVE)
setActionButtonEnabled(callMerge, enabled = !isCallEnded && state == Call.STATE_ACTIVE)
}
}

Expand All @@ -672,7 +672,7 @@ class CallActivity : SimpleActivity() {
updateCallState(phoneState.call)
updateCallOnHoldState(null)
val state = phoneState.call.getStateCompat()
val isSingleCallActionsEnabled = (state == Call.STATE_ACTIVE || state == Call.STATE_DISCONNECTED
val isSingleCallActionsEnabled = !isCallEnded && (state == Call.STATE_ACTIVE || state == Call.STATE_DISCONNECTED
|| state == Call.STATE_DISCONNECTING || state == Call.STATE_HOLDING)
setActionButtonEnabled(binding.callToggleHold, isSingleCallActionsEnabled)
setActionButtonEnabled(binding.callAdd, isSingleCallActionsEnabled)
Expand Down Expand Up @@ -762,16 +762,19 @@ class CallActivity : SimpleActivity() {
}

isCallEnded = true
if (callDuration > 0) {
runOnUiThread {
runOnUiThread {
if (callDuration > 0) {
disableAllActionButtons()
@SuppressLint("SetTextI18n")
binding.callStatusLabel.text = "${callDuration.getFormattedDuration()} (${getString(R.string.call_ended)})"
Handler().postDelayed({
Handler(mainLooper).postDelayed(3000) {
finishAndRemoveTask()
}, 3000)
}
} else {
disableAllActionButtons()
binding.callStatusLabel.text = getString(R.string.call_ended)
finish()
}
} else {
binding.callStatusLabel.text = getString(R.string.call_ended)
finish()
}
}

Expand Down Expand Up @@ -843,6 +846,14 @@ class CallActivity : SimpleActivity() {
}
}

private fun disableAllActionButtons() {
(binding.ongoingCallHolder.children + binding.callEnd)
.filter { it is ImageView && it.isVisible() }
.forEach { view ->
setActionButtonEnabled(button = view as ImageView, enabled = false)
}
}

private fun setActionButtonEnabled(button: ImageView, enabled: Boolean) {
button.apply {
isEnabled = enabled
Expand Down

0 comments on commit 5236b03

Please sign in to comment.