srctree

Roee Hershberg parent b91fdfff c49e6ff4
Use AvatarImageView for displaying avatar images

Delete profile_image_layout and replace its usage with AvatarImageView.

inlinesplit
atox/src/main/kotlin/ui/call/CallFragment.kt added: 59, removed: 103, total 0
@@ -5,7 +5,6 @@
package ltd.evilcorp.atox.ui.call
 
import android.Manifest
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.Toast
@@ -20,9 +19,7 @@ import ltd.evilcorp.atox.R
import ltd.evilcorp.atox.databinding.FragmentCallBinding
import ltd.evilcorp.atox.hasPermission
import ltd.evilcorp.atox.requireStringArg
import ltd.evilcorp.atox.ui.AvatarFactory
import ltd.evilcorp.atox.ui.BaseFragment
import ltd.evilcorp.atox.ui.Dp
import ltd.evilcorp.atox.ui.chat.CONTACT_PUBLIC_KEY
import ltd.evilcorp.atox.vmFactory
import ltd.evilcorp.domain.feature.CallState
@@ -30,8 +27,6 @@ import ltd.evilcorp.domain.tox.PublicKey
 
private const val PERMISSION = Manifest.permission.RECORD_AUDIO
 
private const val CALL_BACKGROUND_SIZE_DP = 500f
 
class CallFragment : BaseFragment<FragmentCallBinding>(FragmentCallBinding::inflate) {
private val vm: CallViewModel by viewModels { vmFactory }
 
@@ -54,18 +49,7 @@ class CallFragment : BaseFragment<FragmentCallBinding>(FragmentCallBinding::infl
 
vm.setActiveContact(PublicKey(requireStringArg(CONTACT_PUBLIC_KEY)))
vm.contact.observe(viewLifecycleOwner) {
if (it.avatarUri.isNotEmpty()) {
callBackground.setImageURI(Uri.parse(it.avatarUri))
} else {
callBackground.setImageBitmap(
AvatarFactory.create(
resources,
it.name,
it.publicKey,
Dp(CALL_BACKGROUND_SIZE_DP)
)
)
}
avatarImageView.setFrom(it)
}
 
endCall.setOnClickListener {
 
atox/src/main/kotlin/ui/chat/ChatFragment.kt added: 59, removed: 103, total 0
@@ -42,9 +42,7 @@ import ltd.evilcorp.atox.R
import ltd.evilcorp.atox.databinding.FragmentChatBinding
import ltd.evilcorp.atox.requireStringArg
import ltd.evilcorp.atox.truncated
import ltd.evilcorp.atox.ui.AvatarFactory
import ltd.evilcorp.atox.ui.BaseFragment
import ltd.evilcorp.atox.ui.colorByContactStatus
import ltd.evilcorp.atox.vmFactory
import ltd.evilcorp.core.vo.ConnectionStatus
import ltd.evilcorp.core.vo.FileTransfer
@@ -189,12 +187,7 @@ class ChatFragment : BaseFragment<FragmentChatBinding>(FragmentChatBinding::infl
else -> DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT).format(it.lastMessage)
}.lowercase(Locale.getDefault())
 
profileLayout.statusIndicator.setColorFilter(colorByContactStatus(requireContext(), it))
if (it.avatarUri.isNotEmpty()) {
profileLayout.profileImage.setImageURI(Uri.parse(it.avatarUri))
} else {
profileLayout.profileImage.setImageBitmap(AvatarFactory.create(resources, it.name, it.publicKey))
}
avatarImageView.setFrom(it)
 
if (it.draftMessage.isNotEmpty() && outgoingMessage.text.isEmpty()) {
outgoingMessage.setText(it.draftMessage)
 
atox/src/main/kotlin/ui/contact_profile/ContactProfileFragment.kt added: 59, removed: 103, total 0
@@ -4,7 +4,6 @@
 
package ltd.evilcorp.atox.ui.contact_profile
 
import android.net.Uri
import android.os.Bundle
import android.view.View
import androidx.core.view.ViewCompat
@@ -14,10 +13,8 @@ import androidx.fragment.app.viewModels
import ltd.evilcorp.atox.R
import ltd.evilcorp.atox.databinding.FragmentContactProfileBinding
import ltd.evilcorp.atox.requireStringArg
import ltd.evilcorp.atox.ui.AvatarFactory
import ltd.evilcorp.atox.ui.BaseFragment
import ltd.evilcorp.atox.ui.chat.CONTACT_PUBLIC_KEY
import ltd.evilcorp.atox.ui.colorByContactStatus
import ltd.evilcorp.atox.vmFactory
import ltd.evilcorp.core.vo.ConnectionStatus
import ltd.evilcorp.domain.tox.PublicKey
@@ -43,18 +40,7 @@ class ContactProfileFragment : BaseFragment<FragmentContactProfileBinding>(Fragm
contact.name = contact.name.ifEmpty { getString(R.string.contact_default_name) }
 
headerMainText.text = contact.name
if (contact.avatarUri.isNotEmpty()) {
profileLayout.profileImage.setImageURI(Uri.parse(contact.avatarUri))
} else {
profileLayout.profileImage.setImageBitmap(
AvatarFactory.create(
resources,
contact.name,
contact.publicKey
)
)
}
profileLayout.statusIndicator.setColorFilter(colorByContactStatus(requireContext(), contact))
avatarImageView.setFrom(contact)
 
contactPublicKey.text = contact.publicKey
contactName.text = contact.name
 
atox/src/main/kotlin/ui/contactlist/ContactAdapter.kt added: 59, removed: 103, total 0
@@ -5,7 +5,6 @@
package ltd.evilcorp.atox.ui.contactlist
 
import android.content.Context
import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -17,8 +16,7 @@ import java.text.DateFormat
import ltd.evilcorp.atox.R
import ltd.evilcorp.atox.databinding.ContactListViewItemBinding
import ltd.evilcorp.atox.databinding.FriendRequestItemBinding
import ltd.evilcorp.atox.ui.AvatarFactory
import ltd.evilcorp.atox.ui.colorByContactStatus
import ltd.evilcorp.atox.ui.AvatarImageView
import ltd.evilcorp.core.vo.Contact
import ltd.evilcorp.core.vo.FriendRequest
 
@@ -112,12 +110,7 @@ class ContactAdapter(
vh.statusMessage.setTextColor(vh.lastMessage.currentTextColor)
}
}
vh.status.setColorFilter(colorByContactStatus(context, this))
if (avatarUri.isNotEmpty()) {
vh.image.setImageURI(Uri.parse(avatarUri))
} else {
vh.image.setImageBitmap(AvatarFactory.create(vh.image.resources, name, publicKey))
}
vh.avatarImageView.setFrom(this)
vh.unreadIndicator.visibility = if (hasUnreadMessages) {
View.VISIBLE
} else {
@@ -139,8 +132,7 @@ class ContactAdapter(
val publicKey: TextView = row.publicKey
val statusMessage: TextView = row.statusMessage
val lastMessage: TextView = row.lastMessage
val status: ImageView = row.profileImageLayout.statusIndicator
val image: ImageView = row.profileImageLayout.profileImage
val avatarImageView: AvatarImageView = row.avatarImageView
val unreadIndicator: ImageView = row.unreadIndicator
}
}
 
atox/src/main/res/layout/contact_list_view_item.xml added: 59, removed: 103, total 0
@@ -7,14 +7,23 @@
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:padding="10dp">
<include android:id="@+id/profileImageLayout" layout="@layout/profile_image_layout"/>
 
<ltd.evilcorp.atox.ui.AvatarImageView
android:id="@+id/avatarImageView"
android:layout_height="38dp"
android:layout_width="38dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:shapeAppearanceOverlay="@style/CircleImageView"
app:strokeColor="@null" />
 
<TextView android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textStyle="bold"
app:layout_constraintLeft_toRightOf="@id/profileImageLayout"
app:layout_constraintLeft_toRightOf="@id/avatarImageView"
app:layout_constraintTop_toTopOf="parent"
tools:text="name goes here"/>
<TextView android:id="@+id/lastMessage"
@@ -31,7 +40,7 @@
android:ellipsize="end"
android:singleLine="true"
app:layout_constraintHorizontal_weight="3"
app:layout_constraintLeft_toRightOf="@id/profileImageLayout"
app:layout_constraintLeft_toRightOf="@id/avatarImageView"
app:layout_constraintRight_toLeftOf="@id/publicKey"
app:layout_constraintTop_toBottomOf="@id/name"
tools:text="Really long and interesting status message"/>
 
atox/src/main/res/layout/fragment_call.xml added: 59, removed: 103, total 0
@@ -4,12 +4,22 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView android:id="@+id/call_background"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:adjustViewBounds="true"
android:importantForAccessibility="no"
android:scaleType="centerCrop" />
 
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_above="@id/control_container">
<ltd.evilcorp.atox.ui.AvatarImageView
android:id="@+id/avatarImageView"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_centerInParent="true"
app:statusIndicatorVisible="false"
app:strokeColor="@null" />
</RelativeLayout>
 
<RelativeLayout android:id="@+id/control_container"
android:layout_width="match_parent"
 
atox/src/main/res/layout/fragment_chat.xml added: 59, removed: 103, total 0
@@ -32,17 +32,19 @@
android:focusable="true"
android:background="?android:attr/selectableItemBackground">
 
<include android:id="@+id/profileLayout"
layout="@layout/profile_image_layout"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
<ltd.evilcorp.atox.ui.AvatarImageView
android:id="@+id/avatarImageView"
android:layout_height="38dp"
android:layout_width="38dp"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp" />
android:layout_marginEnd="10dp"
app:shapeAppearanceOverlay="@style/CircleImageView"
app:strokeColor="@null" />
 
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/profileLayout"
android:layout_toEndOf="@id/avatarImageView"
android:layout_centerVertical="true"
android:orientation="vertical">
<TextView
 
atox/src/main/res/layout/fragment_contact_profile.xml added: 59, removed: 103, total 0
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
@@ -17,7 +18,13 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp">
<include android:id="@+id/profileLayout" layout="@layout/profile_image_layout"/>
 
<ltd.evilcorp.atox.ui.AvatarImageView
android:id="@+id/avatarImageView"
android:layout_height="38dp"
android:layout_width="38dp"
app:shapeAppearanceOverlay="@style/CircleImageView"
app:strokeColor="@null" />
 
<TextView android:id="@+id/headerMainText"
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
 
ev/null added: 59, removed: 103, total 0
@@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/profileImage"
android:layout_width="38dp"
android:layout_height="38dp"
android:contentDescription="@string/profile_photo_description"
app:strokeColor="@null"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearanceOverlay="@style/CircleImageView" />
<ImageView android:id="@+id/statusIndicator"
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_margin="1dp"
android:contentDescription="@string/status_indicator"
android:src="@drawable/circle"
android:translationZ="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
tools:targetApi="LOLLIPOP" />
</androidx.constraintlayout.widget.ConstraintLayout>