diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt index ac8718f904..b9b61e8831 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt @@ -8,6 +8,7 @@ import androidx.core.content.ContextCompat import androidx.core.widget.TextViewCompat import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.database.CallTable +import org.thoughtcrime.securesms.database.MessageTypes import org.thoughtcrime.securesms.databinding.CallLogAdapterItemBinding import org.thoughtcrime.securesms.databinding.CallLogCreateCallLinkItemBinding import org.thoughtcrime.securesms.databinding.ConversationListItemClearFilterBinding @@ -151,30 +152,27 @@ class CallLogAdapter( return } - val event = model.call.call.event - val direction = model.call.call.direction - binding.callRecipientAvatar.setAvatar(GlideApp.with(binding.callRecipientAvatar), model.call.peer, true) binding.callRecipientBadge.setBadgeFromRecipient(model.call.peer) binding.callRecipientName.text = model.call.peer.getDisplayName(context) - presentCallInfo(event, direction, model.call.date) + presentCallInfo(model.call.call, model.call.date) presentCallType(model) } - private fun presentCallInfo(event: CallTable.Event, direction: CallTable.Direction, date: Long) { + private fun presentCallInfo(call: CallTable.Call, date: Long) { binding.callInfo.text = context.getString( R.string.CallLogAdapter__s_dot_s, - context.getString(getCallStateStringRes(event, direction)), + context.getString(getCallStateStringRes(call)), DateUtils.getBriefRelativeTimeSpanString(context, Locale.getDefault(), date) ) binding.callInfo.setRelativeDrawables( - start = getCallStateDrawableRes(event, direction) + start = getCallStateDrawableRes(call) ) val color = ContextCompat.getColor( context, - if (event == CallTable.Event.MISSED) { + if (call.event == CallTable.Event.MISSED) { R.color.signal_colorError } else { R.color.signal_colorOnSurface @@ -233,28 +231,39 @@ class CallLogAdapter( } @DrawableRes - private fun getCallStateDrawableRes(callEvent: CallTable.Event, callDirection: CallTable.Direction): Int { - if (callEvent == CallTable.Event.MISSED) { - return R.drawable.symbol_missed_incoming_compact_16 - } - - return if (callDirection == CallTable.Direction.INCOMING) { - R.drawable.symbol_arrow_downleft_compact_16 - } else { - R.drawable.symbol_arrow_upright_compact_16 + private fun getCallStateDrawableRes(call: CallTable.Call): Int { + return when (call.messageType) { + MessageTypes.MISSED_VIDEO_CALL_TYPE, MessageTypes.MISSED_AUDIO_CALL_TYPE -> R.drawable.symbol_missed_incoming_compact_16 + MessageTypes.INCOMING_AUDIO_CALL_TYPE, MessageTypes.INCOMING_VIDEO_CALL_TYPE -> R.drawable.symbol_arrow_downleft_compact_16 + MessageTypes.OUTGOING_AUDIO_CALL_TYPE, MessageTypes.OUTGOING_VIDEO_CALL_TYPE -> R.drawable.symbol_arrow_upright_compact_16 + MessageTypes.GROUP_CALL_TYPE -> when { + call.event == CallTable.Event.MISSED -> R.drawable.symbol_missed_incoming_24 + call.event == CallTable.Event.GENERIC_GROUP_CALL || call.event == CallTable.Event.JOINED -> R.drawable.symbol_group_compact_16 + call.direction == CallTable.Direction.INCOMING -> R.drawable.symbol_arrow_downleft_compact_16 + call.direction == CallTable.Direction.OUTGOING -> R.drawable.symbol_arrow_upright_compact_16 + else -> throw AssertionError() + } + else -> error("Unexpected type ${call.type}") } } @StringRes - private fun getCallStateStringRes(callEvent: CallTable.Event, callDirection: CallTable.Direction): Int { - if (callEvent == CallTable.Event.MISSED) { - return R.string.CallLogAdapter__missed - } - - return if (callDirection == CallTable.Direction.INCOMING) { - R.string.CallLogAdapter__incoming - } else { - R.string.CallLogAdapter__outgoing + private fun getCallStateStringRes(call: CallTable.Call): Int { + return when (call.messageType) { + MessageTypes.MISSED_VIDEO_CALL_TYPE -> R.string.CallLogAdapter__missed + MessageTypes.MISSED_AUDIO_CALL_TYPE -> R.string.CallLogAdapter__missed + MessageTypes.INCOMING_AUDIO_CALL_TYPE -> R.string.CallLogAdapter__incoming + MessageTypes.INCOMING_VIDEO_CALL_TYPE -> R.string.CallLogAdapter__incoming + MessageTypes.OUTGOING_AUDIO_CALL_TYPE -> R.string.CallLogAdapter__outgoing + MessageTypes.OUTGOING_VIDEO_CALL_TYPE -> R.string.CallLogAdapter__outgoing + MessageTypes.GROUP_CALL_TYPE -> when { + call.event == CallTable.Event.MISSED -> R.string.CallPreference__missed_group_call + call.event == CallTable.Event.GENERIC_GROUP_CALL || call.event == CallTable.Event.JOINED -> R.string.CallPreference__group_call + call.direction == CallTable.Direction.INCOMING -> R.string.CallLogAdapter__incoming + call.direction == CallTable.Direction.OUTGOING -> R.string.CallLogAdapter__outgoing + else -> throw AssertionError() + } + else -> error("Unexpected type ${call.messageType}") } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/CallPreference.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/CallPreference.kt index 87bd91aabb..c34dc91616 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/CallPreference.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/CallPreference.kt @@ -51,6 +51,7 @@ object CallPreference { MessageTypes.OUTGOING_AUDIO_CALL_TYPE, MessageTypes.OUTGOING_VIDEO_CALL_TYPE -> R.drawable.symbol_arrow_upright_24 MessageTypes.GROUP_CALL_TYPE -> when { call.event == CallTable.Event.MISSED -> R.drawable.symbol_missed_incoming_24 + call.event == CallTable.Event.GENERIC_GROUP_CALL || call.event == CallTable.Event.JOINED -> R.drawable.symbol_group_24 call.direction == CallTable.Direction.INCOMING -> R.drawable.symbol_arrow_downleft_24 call.direction == CallTable.Direction.OUTGOING -> R.drawable.symbol_arrow_upright_24 else -> throw AssertionError() @@ -69,6 +70,7 @@ object CallPreference { MessageTypes.OUTGOING_VIDEO_CALL_TYPE -> R.string.MessageRecord_outgoing_video_call MessageTypes.GROUP_CALL_TYPE -> when { call.event == CallTable.Event.MISSED -> R.string.CallPreference__missed_group_call + call.event == CallTable.Event.GENERIC_GROUP_CALL || call.event == CallTable.Event.JOINED -> R.string.CallPreference__group_call call.direction == CallTable.Direction.INCOMING -> R.string.CallPreference__incoming_group_call call.direction == CallTable.Direction.OUTGOING -> R.string.CallPreference__outgoing_group_call else -> throw AssertionError() diff --git a/app/src/main/res/drawable/symbol_group_compact_16.xml b/app/src/main/res/drawable/symbol_group_compact_16.xml new file mode 100644 index 0000000000..f25455f7e5 --- /dev/null +++ b/app/src/main/res/drawable/symbol_group_compact_16.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4d42585a8a..c18f0bbd87 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5861,6 +5861,8 @@ Continue Button + + Group call Missed group call