From 52238e5d27952172e56f417a4021256d9e23ba49 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 22 Aug 2023 13:54:13 +0200 Subject: [PATCH] Fixed a few things with AvatarView --- .../linphone/ui/main/model/AccountModel.kt | 9 +++++- .../ui/voip/viewmodel/CurrentCallViewModel.kt | 2 +- .../main/java/org/linphone/utils/AppUtils.kt | 32 +++++++++++++++++++ .../org/linphone/utils/DataBindingUtils.kt | 29 +++++++++++++++++ app/src/main/res/layout/account_list_cell.xml | 18 +++++++---- app/src/main/res/layout/call_fragment.xml | 2 +- app/src/main/res/layout/call_list_cell.xml | 3 +- .../layout/contact_favourite_list_cell.xml | 1 + app/src/main/res/layout/contact_fragment.xml | 2 +- app/src/main/res/layout/contact_list_cell.xml | 2 +- app/src/main/res/layout/top_search_bar.xml | 22 +++++++------ .../res/layout/voip_active_call_fragment.xml | 2 +- .../layout/voip_incoming_call_fragment.xml | 2 +- .../layout/voip_outgoing_call_fragment.xml | 2 +- app/src/main/res/values/dimen.xml | 1 + 15 files changed, 103 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/org/linphone/utils/AppUtils.kt diff --git a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt index c0ee2bc62..5d9e31494 100644 --- a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt +++ b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt @@ -38,6 +38,8 @@ class AccountModel @WorkerThread constructor( val avatar = MutableLiveData() + val initials = MutableLiveData() + val registrationState = MutableLiveData() val isConnected = MutableLiveData() @@ -46,6 +48,8 @@ class AccountModel @WorkerThread constructor( val isDefault = MutableLiveData() + val showTrust = MutableLiveData() + private val accountListener = object : AccountListenerStub() { @WorkerThread override fun onRegistrationStateChanged( @@ -61,6 +65,7 @@ class AccountModel @WorkerThread constructor( account.addListener(accountListener) avatar.postValue(account.getPicturePath()) + showTrust.postValue(account.isInSecureMode()) update() } @@ -92,7 +97,9 @@ class AccountModel @WorkerThread constructor( @WorkerThread private fun update() { - displayName.postValue(LinphoneUtils.getDisplayName(account.params.identityAddress)) + val name = LinphoneUtils.getDisplayName(account.params.identityAddress) + displayName.postValue(name) + initials.postValue(LinphoneUtils.getInitials(name)) isDefault.postValue(coreContext.core.defaultAccount == account) diff --git a/app/src/main/java/org/linphone/ui/voip/viewmodel/CurrentCallViewModel.kt b/app/src/main/java/org/linphone/ui/voip/viewmodel/CurrentCallViewModel.kt index 358621ee1..b8d6e63a5 100644 --- a/app/src/main/java/org/linphone/ui/voip/viewmodel/CurrentCallViewModel.kt +++ b/app/src/main/java/org/linphone/ui/voip/viewmodel/CurrentCallViewModel.kt @@ -294,7 +294,7 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() { isMicrophoneMuted.postValue(call.microphoneMuted) isOutgoing.postValue(call.dir == Call.Dir.Outgoing) - val address = call.remoteAddress + val address = call.remoteAddress.clone() address.clean() displayedAddress.postValue(address.asStringUriOnly()) diff --git a/app/src/main/java/org/linphone/utils/AppUtils.kt b/app/src/main/java/org/linphone/utils/AppUtils.kt new file mode 100644 index 000000000..e70e32bb4 --- /dev/null +++ b/app/src/main/java/org/linphone/utils/AppUtils.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2010-2023 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.linphone.utils + +import androidx.annotation.AnyThread +import org.linphone.LinphoneApplication.Companion.coreContext + +class AppUtils { + companion object { + @AnyThread + fun getDimension(id: Int): Float { + return coreContext.context.resources.getDimension(id) + } + } +} diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index 8c8f59972..9b988a1fc 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -50,6 +50,7 @@ import org.linphone.core.ConsolidatedPresence import org.linphone.core.tools.Log import org.linphone.ui.main.MainActivity import org.linphone.ui.main.contacts.model.ContactAvatarModel +import org.linphone.ui.main.model.AccountModel /** * This file contains all the data binding necessary for the app @@ -190,6 +191,34 @@ fun ImageView.setPresenceIcon(presence: ConsolidatedPresence?) { setImageResource(icon) } +@UiThread +@BindingAdapter("accountAvatar") +fun AvatarView.loadAccountAvatar(account: AccountModel?) { + if (account == null) { + loadImage(R.drawable.contact_avatar) + } else { + val uri = account.avatar.value + loadImage( + data = uri, + onStart = { + // Use initials as placeholder + avatarInitials = account.initials.value.orEmpty() + + if (account.showTrust.value == true) { + avatarBorderColor = resources.getColor(R.color.trusted_blue, context.theme) + avatarBorderWidth = AppUtils.getDimension(R.dimen.avatar_trust_border_width).toInt() + } else { + avatarBorderWidth = AppUtils.getDimension(R.dimen.zero).toInt() + } + }, + onSuccess = { _, _ -> + // If loading is successful, remove initials otherwise image won't be visible + avatarInitials = "" + } + ) + } +} + @UiThread @BindingAdapter("contactAvatar") fun AvatarView.loadContactAvatar(contact: ContactAvatarModel?) { diff --git a/app/src/main/res/layout/account_list_cell.xml b/app/src/main/res/layout/account_list_cell.xml index b964ef242..64c430295 100644 --- a/app/src/main/res/layout/account_list_cell.xml +++ b/app/src/main/res/layout/account_list_cell.xml @@ -33,23 +33,27 @@ android:layout_marginBottom="5dp" android:adjustViewBounds="true" android:background="@drawable/shape_button_round" - coil="@{model.avatar}" + accountAvatar="@{model}" app:avatarViewPlaceholder="@drawable/contact_avatar" app:avatarViewInitialsBackgroundColor="@color/blue_outgoing_message" app:avatarViewInitialsTextColor="@color/gray_9" app:avatarViewInitialsTextSize="16sp" app:avatarViewInitialsTextStyle="bold" app:avatarViewShape="circle" - app:avatarViewBorderColor="@color/trusted_blue" - app:avatarViewBorderWidth="2dp" - app:avatarViewIndicatorSizeCriteria="3" - app:avatarViewIndicatorEnabled="true" - app:avatarViewIndicatorDrawable="@drawable/trusted" - app:avatarViewIndicatorPosition="bottomLeft" + app:avatarViewBorderWidth="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + diff --git a/app/src/main/res/layout/call_list_cell.xml b/app/src/main/res/layout/call_list_cell.xml index 2443962d2..4a9812ad1 100644 --- a/app/src/main/res/layout/call_list_cell.xml +++ b/app/src/main/res/layout/call_list_cell.xml @@ -38,14 +38,13 @@ android:adjustViewBounds="true" android:background="@drawable/shape_button_round" contactAvatar="@{model.avatarModel}" - app:avatarViewInitials="JD" app:avatarViewPlaceholder="@drawable/contact_avatar" app:avatarViewInitialsBackgroundColor="@color/blue_outgoing_message" app:avatarViewInitialsTextColor="@color/gray_9" app:avatarViewInitialsTextSize="16sp" app:avatarViewInitialsTextStyle="bold" app:avatarViewShape="circle" - app:avatarViewBorderWidth="2dp" + app:avatarViewBorderWidth="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/contact_favourite_list_cell.xml b/app/src/main/res/layout/contact_favourite_list_cell.xml index 74649347b..73b12514c 100644 --- a/app/src/main/res/layout/contact_favourite_list_cell.xml +++ b/app/src/main/res/layout/contact_favourite_list_cell.xml @@ -38,6 +38,7 @@ app:avatarViewInitialsTextSize="16sp" app:avatarViewInitialsTextStyle="bold" app:avatarViewShape="circle" + app:avatarViewBorderWidth="0dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/contact_fragment.xml b/app/src/main/res/layout/contact_fragment.xml index 82352e6b0..3b4cffd1d 100644 --- a/app/src/main/res/layout/contact_fragment.xml +++ b/app/src/main/res/layout/contact_fragment.xml @@ -109,13 +109,13 @@ android:adjustViewBounds="true" android:background="@drawable/shape_button_round" contactAvatar="@{viewModel.contact}" - app:avatarViewBorderWidth="0dp" app:avatarViewInitialsBackgroundColor="@color/blue_outgoing_message" app:avatarViewInitialsTextColor="@color/gray_9" app:avatarViewInitialsTextSize="21sp" app:avatarViewInitialsTextStyle="bold" app:avatarViewPlaceholder="@drawable/contact_avatar" app:avatarViewShape="circle" + app:avatarViewBorderWidth="0dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/contact_list_cell.xml b/app/src/main/res/layout/contact_list_cell.xml index 7c301c41d..09a9860ed 100644 --- a/app/src/main/res/layout/contact_list_cell.xml +++ b/app/src/main/res/layout/contact_list_cell.xml @@ -61,13 +61,13 @@ android:adjustViewBounds="true" android:background="@drawable/shape_button_round" contactAvatar="@{model}" - app:avatarViewInitials="SB" app:avatarViewPlaceholder="@drawable/contact_avatar" app:avatarViewInitialsBackgroundColor="@color/blue_outgoing_message" app:avatarViewInitialsTextColor="@color/gray_9" app:avatarViewInitialsTextSize="16sp" app:avatarViewInitialsTextStyle="bold" app:avatarViewShape="circle" + app:avatarViewBorderWidth="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@id/header" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/top_search_bar.xml b/app/src/main/res/layout/top_search_bar.xml index 496328a8c..9f13c3caf 100644 --- a/app/src/main/res/layout/top_search_bar.xml +++ b/app/src/main/res/layout/top_search_bar.xml @@ -41,23 +41,27 @@ android:layout_height="@dimen/avatar_list_cell_size" android:layout_marginStart="15dp" android:background="@drawable/shape_button_round" - coil="@{viewModel.account.avatar}" - app:avatarViewBorderColor="@color/trusted_blue" - app:avatarViewBorderWidth="2dp" - app:avatarViewIndicatorSizeCriteria="3" - app:avatarViewIndicatorEnabled="true" - app:avatarViewIndicatorDrawable="@drawable/trusted" - app:avatarViewIndicatorPosition="bottomLeft" + accountAvatar="@{viewModel.account}" + app:avatarViewPlaceholder="@drawable/contact_avatar" app:avatarViewInitialsBackgroundColor="@color/blue_outgoing_message" app:avatarViewInitialsTextColor="@color/gray_9" - app:avatarViewInitialsTextSize="21sp" + app:avatarViewInitialsTextSize="16sp" app:avatarViewInitialsTextStyle="bold" - app:avatarViewPlaceholder="@drawable/contact_avatar" app:avatarViewShape="circle" + app:avatarViewBorderWidth="0dp" app:layout_constraintBottom_toBottomOf="@id/title" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/title" /> + + 22dp 3dp 5dp + 2dp 55dp 70dp