From 18782bd3a70065aaaae59259abc0474216064ec6 Mon Sep 17 00:00:00 2001 From: Dmitriy Bulygin Date: Sun, 26 Oct 2025 11:33:56 +0300 Subject: [PATCH] added tasks solutions --- app/build.gradle | 8 + app/src/main/AndroidManifest.xml | 2 + .../otus/gpb/recyclerview/AppGlideModule.kt | 11 + .../java/otus/gpb/recyclerview/ChatAdapter.kt | 261 ++++++++++++++++ .../java/otus/gpb/recyclerview/ChatItem.kt | 5 + .../otus/gpb/recyclerview/CustomDecorator.kt | 51 +++ .../java/otus/gpb/recyclerview/GroupChat.kt | 192 ++++++++++++ .../otus/gpb/recyclerview/MainActivity.kt | 290 +++++++++++++++++- .../java/otus/gpb/recyclerview/PersonChat.kt | 204 ++++++++++++ app/src/main/res/drawable/circle_online.xml | 9 + app/src/main/res/drawable/fake_badge.xml | 23 ++ app/src/main/res/drawable/group_badge.xml | 11 + app/src/main/res/drawable/icon_archive.xml | 11 + app/src/main/res/drawable/icon_checkbox.xml | 11 + app/src/main/res/drawable/icon_checked.xml | 14 + app/src/main/res/drawable/icon_locked.xml | 11 + app/src/main/res/drawable/icon_mention.xml | 13 + app/src/main/res/drawable/icon_mute.xml | 14 + app/src/main/res/drawable/icon_pencil.xml | 10 + app/src/main/res/drawable/icon_pinned.xml | 18 ++ app/src/main/res/drawable/icon_read.xml | 14 + app/src/main/res/drawable/icon_verified.xml | 11 + app/src/main/res/drawable/menu_19x13.xml | 10 + app/src/main/res/drawable/person_badge.xml | 11 + app/src/main/res/drawable/voip_badge.xml | 22 ++ app/src/main/res/font/roboto.ttf | Bin 0 -> 81044 bytes app/src/main/res/font/roboto_medium.ttf | Bin 0 -> 82628 bytes app/src/main/res/layout/activity_main.xml | 54 +++- app/src/main/res/layout/view_holder_group.xml | 162 ++++++++++ .../main/res/layout/view_holder_person.xml | 185 +++++++++++ app/src/main/res/values-night/themes.xml | 29 +- app/src/main/res/values/Integers.xml | 4 + app/src/main/res/values/attrs.xml | 13 + app/src/main/res/values/colors.xml | 21 +- app/src/main/res/values/strings.xml | 25 +- app/src/main/res/values/styles.xml | 216 +++++++++++++ app/src/main/res/values/themes.xml | 29 +- 37 files changed, 1939 insertions(+), 36 deletions(-) create mode 100644 app/src/main/java/otus/gpb/recyclerview/AppGlideModule.kt create mode 100644 app/src/main/java/otus/gpb/recyclerview/ChatAdapter.kt create mode 100644 app/src/main/java/otus/gpb/recyclerview/ChatItem.kt create mode 100644 app/src/main/java/otus/gpb/recyclerview/CustomDecorator.kt create mode 100644 app/src/main/java/otus/gpb/recyclerview/GroupChat.kt create mode 100644 app/src/main/java/otus/gpb/recyclerview/PersonChat.kt create mode 100644 app/src/main/res/drawable/circle_online.xml create mode 100644 app/src/main/res/drawable/fake_badge.xml create mode 100644 app/src/main/res/drawable/group_badge.xml create mode 100644 app/src/main/res/drawable/icon_archive.xml create mode 100644 app/src/main/res/drawable/icon_checkbox.xml create mode 100644 app/src/main/res/drawable/icon_checked.xml create mode 100644 app/src/main/res/drawable/icon_locked.xml create mode 100644 app/src/main/res/drawable/icon_mention.xml create mode 100644 app/src/main/res/drawable/icon_mute.xml create mode 100644 app/src/main/res/drawable/icon_pencil.xml create mode 100644 app/src/main/res/drawable/icon_pinned.xml create mode 100644 app/src/main/res/drawable/icon_read.xml create mode 100644 app/src/main/res/drawable/icon_verified.xml create mode 100644 app/src/main/res/drawable/menu_19x13.xml create mode 100644 app/src/main/res/drawable/person_badge.xml create mode 100644 app/src/main/res/drawable/voip_badge.xml create mode 100644 app/src/main/res/font/roboto.ttf create mode 100644 app/src/main/res/font/roboto_medium.ttf create mode 100644 app/src/main/res/layout/view_holder_group.xml create mode 100644 app/src/main/res/layout/view_holder_person.xml create mode 100644 app/src/main/res/values/Integers.xml create mode 100644 app/src/main/res/values/attrs.xml create mode 100644 app/src/main/res/values/styles.xml diff --git a/app/build.gradle b/app/build.gradle index 54e4eac..833401f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,6 +17,10 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } + buildFeatures { + viewBinding = true + } + buildTypes { release { minifyEnabled false @@ -41,4 +45,8 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + + // Glide для оптимизированной загрузки изображений + implementation 'com.github.bumptech.glide:glide:4.16.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef75335..227131a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + Unit) : + ListAdapter(ChatDiffCallback()) { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return when (ViewTypes.fromId(viewType)) { + ViewTypes.GROUP -> { + val binding = ViewHolderGroupBinding.inflate(LayoutInflater.from(parent.context), parent, false) + GroupChatViewHolder(binding) + } + ViewTypes.PERSON -> { + val binding = ViewHolderPersonBinding.inflate(LayoutInflater.from(parent.context), parent, false) + PersonChatViewHolder(binding) + } + null -> throw IllegalArgumentException("Unknown view type: $viewType") + } + } + + override fun getItemViewType(position: Int): Int { + return when (getItem(position)) { + is GroupChat -> ViewTypes.GROUP.id + is PersonChat -> ViewTypes.PERSON.id + else -> throw IllegalArgumentException("Unknown item type: ${getItem(position)}") + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + // привязка данных с проверкой типа и границ + if (position < 0 || position >= itemCount) return + + try { + when (holder) { + is GroupChatViewHolder -> { + val item = getItem(position) + if (item is GroupChat) { + holder.bind(item) + } + } + is PersonChatViewHolder -> { + val item = getItem(position) + if (item is PersonChat) { + holder.bind(item) + } + } + } + resetViewAppearance(holder.itemView) + } catch (e: Exception) { + // логируем ошибку и сбрасываем внешний вид View + e.printStackTrace() + resetViewAppearance(holder.itemView) + } + } + + fun removeItem(position: Int) { + if (position >= 0 && position < currentList.size) { + val newList = currentList.toMutableList().apply { removeAt(position) } + submitList(newList) + } + } + + private fun resetViewAppearance(view: View) { + view.alpha = 1f + view.scaleX = 1f + view.scaleY = 1f + } + + inner class GroupChatViewHolder(private val binding: ViewHolderGroupBinding) : + RecyclerView.ViewHolder(binding.root) { + + fun bind(item: GroupChat) { + // кэшируем часто используемые View + with(binding) { + // Аватар с оптимизацией + loadAvatar(item.avatarUrl, imgGroupAvatar, R.drawable.group_badge) + // бейджи и иконки + imgVoipBadgeContainer.visibility = item.voip.toVisibility() + imgVerifiedIcon.visibility = item.verified.toVisibility() + imgMuteIcon.visibility = item.muted.toVisibility() + // тексты + txtGroupName.text = item.groupName + txtLastAuthor.text = item.lastAuthor + txtLastMessage.text = item.lastMessage + txtTimeValue.text = item.time + // preview сообщения + setupMessagePreview(item.messagePreviewUrl, imgMessagePreviewContainer, imgMessagePreview) + // статусы прочтения + setupReadStatus(item.checked, item.read, imgCheckedIcon, imgReadIcon) + // счетчик + setupCounter(item.counter, imgCounterContainer, txtCounterContainer) + // дополнительные иконки + imgPinnedIcon.visibility = item.pinned.toVisibility() + imgMentionIconContainer.visibility = item.mentioned.toVisibility() + + root.setOnClickListener { onItemClick(item.id) } + } + } + } + + inner class PersonChatViewHolder(private val binding: ViewHolderPersonBinding) : + RecyclerView.ViewHolder(binding.root) { + + fun bind(item: PersonChat) { + with(binding) { + // аватар + loadAvatar(item.avatarUrl, imgPersonAvatar, R.drawable.person_badge) + // бейджи статусов + setupPersonBadges(item.checkbox, item.online, item.locked) + // тексты + txtPersonName.text = item.personName + txtLastMessage.text = item.lastMessage + txtTimeValue.text = item.time + // иконки верификации и scam + setupVerificationAndScam(item.verified, item.scam) + imgMuteIcon.visibility = item.muted.toVisibility() + // preview сообщения с оптимизацией + setupMessagePreview(item.messagePreviewUrl, imgMessagePreviewContainer, imgMessagePreview) + // статусы прочтения + setupReadStatus(item.checked, item.read, imgCheckedIcon, imgReadIcon) + // счётчик + setupCounter(item.counter, imgCounterContainer, txtCounterContainer) + // дополнительные иконки + imgPinnedIcon.visibility = item.pinned.toVisibility() + imgMentionIconContainer.visibility = item.mentioned.toVisibility() + + root.setOnClickListener { onItemClick(item.id) } + } + } + + private fun setupPersonBadges(checkbox: Boolean, online: Boolean, locked: Boolean) { + with(binding) { + imgCheckboxBadgeContainer.visibility = (checkbox && !online).toVisibility() + imgOnlineBadgeContainer.visibility = online.toVisibility() + imgLockedIcon.visibility = locked.toVisibility() + } + } + + private fun setupVerificationAndScam(verified: Boolean, scam: Boolean) { + with(binding) { + imgScamPatch.visibility = scam.toVisibility() + imgVerifiedIcon.visibility = (verified && !scam).toVisibility() + } + } + } + + // extension functions для загрузки изображений (эксперимент с оптимизацией) + private fun loadAvatar(avatarUrl: String, imageView: ImageView, placeholder: Int) { + if (avatarUrl.isNotEmpty()) { + Glide.with(imageView.context) + .load(avatarUrl) + .centerCrop() + .placeholder(placeholder) + .error(placeholder) // Добавляем error placeholder + .diskCacheStrategy(com.bumptech.glide.load.engine.DiskCacheStrategy.ALL) // Кэшируем все + .skipMemoryCache(false) // Используем память для быстрого доступа + .thumbnail(0.1f) // Показываем уменьшенную версию сначала + .into(imageView) + } else { + imageView.setImageResource(placeholder) + } + } + + private fun setupMessagePreview(previewUrl: String, container: View, imageView: ImageView) { + if (previewUrl.isNotEmpty()) { + container.visibility = View.VISIBLE + Glide.with(imageView.context) + .load(previewUrl) + .centerCrop() + .diskCacheStrategy(com.bumptech.glide.load.engine.DiskCacheStrategy.ALL) + .skipMemoryCache(false) + .thumbnail(0.1f) + .into(imageView) + } else { + container.visibility = View.GONE + } + } + + private fun setupReadStatus(checked: Boolean, read: Boolean, checkedIcon: ImageView, readIcon: ImageView) { + checkedIcon.visibility = (checked && !read).toVisibility() + readIcon.visibility = read.toVisibility() + } + + private fun setupCounter(counter: Int, container: View, counterText: TextView) { + if (counter == 0) { + container.visibility = View.GONE + } else { + container.visibility = View.VISIBLE + counterText.text = counter.toString() + } + } + + private fun Boolean.toVisibility() = if (this) View.VISIBLE else View.GONE + + enum class ViewTypes(val id: Int) { + GROUP(R.layout.view_holder_group), + PERSON(R.layout.view_holder_person); + + companion object { + fun fromId(id: Int) = ViewTypes.entries.find { it.id == id } + } + } +} + +class ChatDiffCallback : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: ChatItem, newItem: ChatItem): Boolean { + return oldItem.id == newItem.id + } + + override fun areContentsTheSame(oldItem: ChatItem, newItem: ChatItem): Boolean { + // сравнение содержимого для избежания лишних перерисовок + return when { + oldItem is GroupChat && newItem is GroupChat -> { + oldItem.groupName == newItem.groupName && + oldItem.lastAuthor == newItem.lastAuthor && + oldItem.lastMessage == newItem.lastMessage && + oldItem.avatarUrl == newItem.avatarUrl && + oldItem.messagePreviewUrl == newItem.messagePreviewUrl && + oldItem.voip == newItem.voip && + oldItem.verified == newItem.verified && + oldItem.muted == newItem.muted && + oldItem.time == newItem.time && + oldItem.checked == newItem.checked && + oldItem.read == newItem.read && + oldItem.mentioned == newItem.mentioned && + oldItem.pinned == newItem.pinned && + oldItem.counter == newItem.counter + } + oldItem is PersonChat && newItem is PersonChat -> { + oldItem.personName == newItem.personName && + oldItem.lastMessage == newItem.lastMessage && + oldItem.avatarUrl == newItem.avatarUrl && + oldItem.messagePreviewUrl == newItem.messagePreviewUrl && + oldItem.checkbox == newItem.checkbox && + oldItem.online == newItem.online && + oldItem.locked == newItem.locked && + oldItem.scam == newItem.scam && + oldItem.verified == newItem.verified && + oldItem.muted == newItem.muted && + oldItem.time == newItem.time && + oldItem.checked == newItem.checked && + oldItem.read == newItem.read && + oldItem.mentioned == newItem.mentioned && + oldItem.pinned == newItem.pinned && + oldItem.counter == newItem.counter + } + else -> false + } + } +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/recyclerview/ChatItem.kt b/app/src/main/java/otus/gpb/recyclerview/ChatItem.kt new file mode 100644 index 0000000..fe34b3e --- /dev/null +++ b/app/src/main/java/otus/gpb/recyclerview/ChatItem.kt @@ -0,0 +1,5 @@ +package otus.gpb.recyclerview + +interface ChatItem { + val id: Int +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/recyclerview/CustomDecorator.kt b/app/src/main/java/otus/gpb/recyclerview/CustomDecorator.kt new file mode 100644 index 0000000..c88596f --- /dev/null +++ b/app/src/main/java/otus/gpb/recyclerview/CustomDecorator.kt @@ -0,0 +1,51 @@ +package otus.gpb.recyclerview + +import android.content.Context +import android.content.res.Resources +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.Rect +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.RecyclerView + +class CustomDecorator(private val context: Context) : DividerItemDecoration(context, VERTICAL) { + + private val bounds = Rect() + private val paint = Paint() + private var offset = 0 + private var color = 0xFF000000.toInt() + + override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) { + paint.color = color + + val childCount = parent.childCount + for (index: Int in 0 until childCount) { + val child = parent.getChildAt(index) + parent.getDecoratedBoundsWithMargins(child, bounds) + bounds.left += offset + + val positionCurrent = parent.getChildAdapterPosition(child) + if (positionCurrent != RecyclerView.NO_POSITION) { + val lastElementPosition = parent.adapter?.itemCount?.minus(1) + if (positionCurrent != lastElementPosition) { + c.drawLine( + (bounds.left).toFloat(), + bounds.bottom.toFloat(), + bounds.right.toFloat(), + bounds.bottom.toFloat(), + paint + ) + } + } + } + } + + fun setColor(id: Int) { + color = context.getColor(id) + } + + fun setOffset(id: Int) { //73 + offset = + (context.resources.getInteger(id) * Resources.getSystem().displayMetrics.density).toInt() + } +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/recyclerview/GroupChat.kt b/app/src/main/java/otus/gpb/recyclerview/GroupChat.kt new file mode 100644 index 0000000..2eb7af5 --- /dev/null +++ b/app/src/main/java/otus/gpb/recyclerview/GroupChat.kt @@ -0,0 +1,192 @@ +package otus.gpb.recyclerview + +data class GroupChat ( + override var id: Int, + val groupName: String, + val lastAuthor: String, + val lastMessage: String, + val avatarUrl: String, + val messagePreviewUrl: String, + var voip: Boolean, + var verified: Boolean, + var muted: Boolean, + val time: String, + var checked: Boolean, + var read: Boolean, + var mentioned: Boolean, + var pinned: Boolean, + var counter: Int +) : ChatItem + +val groupChatList = listOf( + GroupChat( + id = 1, + groupName = "Новости Уренгоя", + lastAuthor = "Рустам", + lastMessage = "Ямы в асфальте", + avatarUrl = "https://upload.wikimedia.org/wikipedia/commons/0/07/Coat_of_Arms_of_Novy_Urengoy_%28Yamal_Nenetsia%29.png", + messagePreviewUrl = "https://s.ura.news/1200_900/images/news/upload/news/563/455/1052563455/61347_Yama_v_asfalyte_Chelyabinsk_yama_na_asfalyte_250x0_3920.2208.0.0.jpg", + voip = true, + verified = false, + muted = true, + time = "12:01", + checked = false, + read = false, + mentioned = true, + pinned = true, + counter = 0 + ), + GroupChat( + id = 2, + groupName = "Наука и техника", + lastAuthor = "Наука 2.0", + lastMessage = "Сегоня русскими учёными был открыт..", + avatarUrl = "https://img.freepik.com/free-vector/cheerful-professor-giving-lecture_1308-166876.jpg", + messagePreviewUrl = "", + voip = true, + verified = false, + muted = true, + time = "23:08", + checked = false, + read = true, + mentioned = true, + pinned = false, + counter = 0 + ), + GroupChat( + id = 3, + groupName = "Космос", + lastAuthor = "admin", + lastMessage = "Космическое пространство, космос...", + avatarUrl = "https://abrakadabra.fun/uploads/posts/2022-02/1644750437_4-abrakadabra-fun-p-kosmicheskie-avatarki-10.jpg", + messagePreviewUrl = "", + voip = false, + verified = false, + muted = true, + time = "16:22", + checked = true, + read = false, + mentioned = false, + pinned = false, + counter = 0 + ), + GroupChat( + id = 4, + groupName = "Растения России", + lastAuthor = "админ", + lastMessage = "В Россия вы можете найти Тысячелистник...", + avatarUrl = "https://www.picturethisai.com/image-handle/website_cmsname/image/1080/201229495676567552.jpeg?x-oss-process=image/format,webp", + messagePreviewUrl = "", + voip = false, + verified = true, + muted = false, + time = "14:56", + checked = true, + read = false, + mentioned = false, + pinned = false, + counter = 50 + ), + GroupChat( + id = 5, + groupName = "Быстрее всех", + lastAuthor = "Руслан", + lastMessage = "Кто хочет стать миллионером?", + avatarUrl = "https://info.sibnet.ru/ni/285/285233b.jpg", + messagePreviewUrl = "", + voip = false, + verified = true, + muted = false, + time = "16:08", + checked = true, + read = false, + mentioned = false, + pinned = false, + counter = 312 + ), + GroupChat( + id = 6, + groupName = "Собаки и кошки", + lastAuthor = "Женя", + lastMessage = "Коротко о братьях меньших..", + avatarUrl = "https://www.kadrof.ru/sites/default/files/illustrations/cat_dogs_0_0.jpg", + messagePreviewUrl = "", + voip = false, + verified = true, + muted = false, + time = "Вт", + checked = true, + read = false, + mentioned = false, + pinned = false, + counter = 1 + ), + GroupChat( + id = 7, + groupName = "Гоночные машины", + lastAuthor = "Олег", + lastMessage = "машина как пушка!", + avatarUrl = "https://avtorinok.ru/storage/news/pics/2011/19684.jpg", + messagePreviewUrl = "", + voip = false, + verified = true, + muted = false, + time = "14:56", + checked = true, + read = false, + mentioned = false, + pinned = false, + counter = 5 + ), + GroupChat( + id = 8, + groupName = "Памяти предков", + lastAuthor = "Аркадий", + lastMessage = "Тогда, под Сталниградом..", + avatarUrl = "https://stihi.ru/pics/2016/05/20/6502.jpg", + messagePreviewUrl = "", + voip = false, + verified = true, + muted = false, + time = "14:56", + checked = true, + read = false, + mentioned = false, + pinned = false, + counter = 14 + ), + GroupChat( + id = 9, + groupName = "Звезда", + lastAuthor = "Генерал", + lastMessage = "Тонкая грань между..", + avatarUrl = "https://avatarko.ru/img/avatar/2/prazdnik_zvezda_1360.jpg", + messagePreviewUrl = "", + voip = false, + verified = true, + muted = false, + time = "00:14", + checked = true, + read = true, + mentioned = false, + pinned = false, + counter = 4 + ), + GroupChat( + id = 10, + groupName = "Мисс Египет", + lastAuthor = "Ра", + lastMessage = "...она была недовольна!", + avatarUrl = "https://i.pinimg.com/236x/95/be/a6/95bea63153271f1ea054eacf99ba85c2.jpg", + messagePreviewUrl = "", + voip = false, + verified = true, + muted = false, + time = "Чт", + checked = true, + read = false, + mentioned = false, + pinned = false, + counter = 2 + ) +) \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/recyclerview/MainActivity.kt b/app/src/main/java/otus/gpb/recyclerview/MainActivity.kt index e2cdca7..0c1b122 100644 --- a/app/src/main/java/otus/gpb/recyclerview/MainActivity.kt +++ b/app/src/main/java/otus/gpb/recyclerview/MainActivity.kt @@ -1,12 +1,300 @@ package otus.gpb.recyclerview +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Drawable import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.ItemTouchHelper +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import otus.gpb.recyclerview.databinding.ActivityMainBinding +import kotlin.random.Random +import androidx.core.graphics.drawable.toDrawable +import kotlin.math.abs class MainActivity : AppCompatActivity() { + private lateinit var binding: ActivityMainBinding + private lateinit var adapter: ChatAdapter + private var chatItems: List = emptyList() + + // Кэшируем Random для оптимизации производительности + private val random = Random(System.currentTimeMillis()) + + // Счетчик для генерации уникальных ID + private var nextId = 1 + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) + + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + + binding.recyclerView.addItemDecoration(CustomDecorator(this).apply { + setColor(R.color.color_chat_divider_light) + setOffset(R.integer.dividerOffset) + }) + + // Настройка RecyclerView с оптимизацией производительности + binding.recyclerView.layoutManager = LinearLayoutManager(this) + + // Настройка RecycledViewPool для переиспользования ViewHolder + val viewPool = RecyclerView.RecycledViewPool().apply { + setMaxRecycledViews(ChatAdapter.ViewTypes.GROUP.id, 15) // Увеличиваем пул для групп + setMaxRecycledViews(ChatAdapter.ViewTypes.PERSON.id, 15) // Увеличиваем пул для персон + } + binding.recyclerView.setRecycledViewPool(viewPool) + + // Включаем оптимизацию для стабильных ID + binding.recyclerView.setHasFixedSize(true) + + // Отключаем анимацию по умолчанию для лучшей производительности + binding.recyclerView.itemAnimator = null + + // Включаем кэширование для лучшей производительности + binding.recyclerView.setItemViewCacheSize(20) + + adapter = ChatAdapter() { id -> + println(id) + } + + binding.recyclerView.adapter = adapter + ItemTouchHelper( + ItemTouchHelperCallback( + adapter, + this + ) + ).attachToRecyclerView(binding.recyclerView) + + + + // Инициализируем nextId после загрузки начальных данных + chatItems = generateList(isInitial = true) + nextId = chatItems.maxOfOrNull { it.id }?.plus(1) ?: 1 + adapter.submitList(chatItems) + + // Оптимизированный scroll listener для предотвращения пропуска кадров + binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { + private var isLoading = false + private val pageSize = 20 // Размер страницы для пагинации + + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + + // Проверяем только при прокрутке вниз и если не загружаем уже + if (dy > 0 && !isLoading) { + val layoutManager = recyclerView.layoutManager as LinearLayoutManager + val totalItemCount = layoutManager.itemCount + val lastVisible = layoutManager.findLastVisibleItemPosition() + + // Загружаем новые элементы заранее, когда остается 5 элементов + if (lastVisible >= totalItemCount - 5) { + isLoading = true + loadMoreItems() + } + } + } + + private fun loadMoreItems() { + // Используем post для выполнения в следующем цикле UI + binding.recyclerView.post { + val newItems = generateList(isInitial = false) + chatItems = chatItems + newItems + adapter.submitList(chatItems) { + isLoading = false + } + } + } + }) + } + + private fun getRandomBool() = random.nextInt(0, 2) > 0 + + @SuppressLint("DefaultLocale") + private fun getRandomTime(): String { + val hour = random.nextInt(0, 24) + val min = random.nextInt(0, 60) + return String.format("%d:%02d", hour, min) + } + + private fun generateRandomMessage(): String { + val messages = listOf( + "Привет! Как дела?", + "Посмотри на это фото", + "Что думаешь об этом?", + "Интересная новость", + "Встречаемся завтра?", + "Спасибо за помощь", + "Отличная идея!", + "Не могу поверить", + "Это потрясающе!", + "Давай обсудим", + "Нужна твоя помощь", + "Как прошла встреча?", + "Всё готово", + "Отлично получилось", + "Не забудь про завтра" + ) + return messages[random.nextInt(messages.size)] + } + + private fun randomizeGroupChat(item: GroupChat): GroupChat { + return GroupChat( + id = nextId++, // Генерируем уникальный ID + groupName = "${item.groupName} ${random.nextInt(1, 1000)}", // Добавляем номер для уникальности + lastAuthor = item.lastAuthor, + lastMessage = generateRandomMessage(), + avatarUrl = item.avatarUrl, + messagePreviewUrl = if (random.nextInt(0, 3) == 0) item.messagePreviewUrl else "", + voip = getRandomBool(), + verified = getRandomBool(), + muted = getRandomBool(), + time = getRandomTime(), + checked = getRandomBool(), + read = getRandomBool(), + mentioned = getRandomBool(), + pinned = getRandomBool(), + counter = if (random.nextInt(0, 10) > 0) 0 else { + random.nextInt(1, 199) + } + ) + } + + private fun randomizePersonChat(item: PersonChat): PersonChat { + return PersonChat( + id = nextId++, // Генерируем уникальный ID + personName = "${item.personName} ${random.nextInt(1, 1000)}", // Добавляем номер для уникальности + lastMessage = generateRandomMessage(), + avatarUrl = item.avatarUrl, + messagePreviewUrl = if (random.nextInt(0, 3) == 0) item.messagePreviewUrl else "", + checkbox = getRandomBool(), + online = getRandomBool(), + locked = getRandomBool(), + scam = if (random.nextInt(0, 10) > 0) false else getRandomBool(), + verified = getRandomBool(), + muted = getRandomBool(), + time = getRandomTime(), + checked = getRandomBool(), + read = getRandomBool(), + mentioned = getRandomBool(), + pinned = getRandomBool(), + counter = if (random.nextInt(0, 10) > 0) 0 else { + random.nextInt(1, 19) + } + ) } + + private fun generateList(isInitial: Boolean = false): List { + val pairs = minOf(personChatList.size, groupChatList.size) + + return if (isInitial) { + // Для начальной загрузки используем оригинальные данные + (0 until pairs).flatMap { i -> + listOf(personChatList[i], groupChatList[i]) + } + } else { + // Для пагинации генерируем новые элементы с уникальными ID + (0 until pairs).flatMap { i -> + listOf( + randomizePersonChat(personChatList[i]), + randomizeGroupChat(groupChatList[i]) + ) + } + } + } + + class ItemTouchHelperCallback( + private val adapter: ChatAdapter, + private val context: Context + ) : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) { + + private var background: ColorDrawable? = null + private var archiveIcon: Drawable? = null + private var textPaint: Paint = Paint().apply { + textSize = 40f + color = ContextCompat.getColor(context, android.R.color.white) + textAlign = Paint.Align.CENTER + isAntiAlias = true + } + + override fun onMove( + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + target: RecyclerView.ViewHolder + ): Boolean = false + + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + val position = viewHolder.adapterPosition + if (position != RecyclerView.NO_POSITION) { + adapter.removeItem(position) + } + } + + override fun onChildDraw( + c: Canvas, + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + dX: Float, + dY: Float, + actionState: Int, + isCurrentlyActive: Boolean + ) { + val itemView = viewHolder.itemView + val itemHeight = itemView.bottom - itemView.top + + if (background == null) { + background = ContextCompat.getColor(context, R.color.color_chat_background_light) + .toDrawable() + } + + if (archiveIcon == null) { + archiveIcon = ContextCompat.getDrawable(context, R.drawable.icon_archive) + } + + if (dX < 0) { // Свайп влево + // Рисуем подложку + background?.apply { + setBounds( + itemView.right + dX.toInt(), + itemView.top, + itemView.right, + itemView.bottom + ) + draw(c) + } + + if (abs(dX) > 0) { + archiveIcon?.apply { + val iconMargin = (itemHeight - intrinsicHeight) / 2 + val iconTop = itemView.top + iconMargin + val iconBottom = iconTop + intrinsicHeight + val iconLeft = itemView.right - iconMargin - intrinsicWidth + val iconRight = itemView.right - iconMargin + + setBounds(iconLeft, iconTop, iconRight, iconBottom) + draw(c) + + val textX = (iconLeft + iconRight) / 2f // Центр иконки по X + val textY = iconBottom + 40f // Под иконкой с отступом + + c.drawText( + context.getString(R.string.archive_text_for_icon), + textX, + textY, + textPaint + ) + } + } + } + + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) + } + } + + } \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/recyclerview/PersonChat.kt b/app/src/main/java/otus/gpb/recyclerview/PersonChat.kt new file mode 100644 index 0000000..9e0d033 --- /dev/null +++ b/app/src/main/java/otus/gpb/recyclerview/PersonChat.kt @@ -0,0 +1,204 @@ +package otus.gpb.recyclerview + +data class PersonChat( + override var id: Int, + val personName: String, + val lastMessage: String, + val avatarUrl: String, + val messagePreviewUrl: String = "", + var checkbox: Boolean, + var online: Boolean, + var locked: Boolean, + var scam: Boolean, + var verified: Boolean, + var muted: Boolean, + val time: String, + var checked: Boolean, + var read: Boolean, + var mentioned: Boolean, + var pinned: Boolean, + var counter: Int +) : ChatItem + +val personChatList = listOf( + PersonChat( + id = 1, + personName = "Дима Булыгин", + lastMessage = "Как дела?", + avatarUrl = "https://99px.ru/cms/temp/module_temp1/image1_image_111102521392452924164x64.jpg", + checkbox = false, + online = true, + locked = false, + scam = false, + verified = true, + muted = false, + time = "Ср", + checked = true, + read = false, + mentioned = false, + pinned = true, + counter = 0 + ), + PersonChat( + id = 2, + personName = "Оксана Политковская", + lastMessage = "Ничего не бойся, я с тобой", + avatarUrl = "https://shapka-youtube.ru/wp-content/uploads/2021/03/kartinka-na-avatarku-dlya-devushek.jpg", + checkbox = false, + online = true, + locked = false, + scam = false, + verified = true, + muted = false, + time = "Ср", + checked = true, + read = false, + mentioned = false, + pinned = true, + counter = 0 + ), + PersonChat( + id = 3, + personName = "Олег Кошевой", + lastMessage = "Будь моложе", + avatarUrl = "https://99px.ru/sstorage/1/2025/08/image_11508251524124353275.jpg", + checkbox = false, + online = false, + locked = false, + scam = false, + verified = false, + muted = false, + time = "Вт", + checked = true, + read = false, + mentioned = false, + pinned = true, + counter = 0 + ), + PersonChat( + id = 4, + personName = "Павлик Дуров", + lastMessage = "Блин, я в тюрьме, в Париже..", + avatarUrl = "https://images.techinsider.ru/upload/img_cache/c61/c61b042b8f2cb917787a0968a8753d52_cropped_510x340.webp", + checkbox = false, + online = true, + locked = true, + scam = true, + verified = false, + muted = true, + time = "06:43", + checked = false, + read = false, + mentioned = false, + pinned = false, + counter = 999 + ), + PersonChat( + id = 5, + personName = "Баста", + lastMessage = "Йо, братан, как дела?", + avatarUrl = "https://cdn.kassir.ru/krd/poster/8e/8e58de873fcd911b8ac6c2ea20f17062.jpg", + checkbox = false, + online = false, + locked = false, + scam = false, + verified = true, + muted = false, + time = "15:01", + checked = true, + read = false, + mentioned = false, + pinned = false, + counter = 0 + ), + PersonChat( + id = 6, + personName = "CatBird", + lastMessage = "Что ты будешь делать?", + avatarUrl = "https://img.freepik.com/premium-vector/vector-hand-drawn-doodle-sketch-catbird-bird_982534-5454.jpg", + checkbox = false, + online = false, + locked = false, + scam = false, + verified = true, + muted = false, + time = "Вс", + checked = false, + read = false, + mentioned = false, + pinned = true, + counter = 0 + ), + PersonChat( + id = 7, + personName = "Moonlight", + lastMessage = "Сегодня ночью дождь", + avatarUrl = "https://img.freepik.com/premium-vector/white-moon-cartoon-with-star-sky_43633-3705.jpg", + checkbox = false, + online = true, + locked = false, + scam = false, + verified = true, + muted = false, + time = "Ср", + checked = true, + read = false, + mentioned = false, + pinned = true, + counter = 0 + ), + PersonChat( + id = 8, + personName = "trololo", + lastMessage = "Ахахаха", + avatarUrl = "https://i.pinimg.com/736x/da/a8/5b/daa85b83a914eeaef3151dd019f207bf.jpg", + checkbox = false, + online = false, + locked = false, + scam = false, + verified = false, + muted = false, + time = "Вт", + checked = true, + read = false, + mentioned = false, + pinned = true, + counter = 0 + ), + PersonChat( + id = 9, + personName = "Oleg", + lastMessage = "Кто тут?", + avatarUrl = "https://cdn.dprofile.ru/public/29275/profile/fd8a6309071b165f6fb1d30b3747cf4eb6137177.jpg", + checkbox = false, + online = false, + locked = true, + scam = true, + verified = false, + muted = false, + time = "06:43", + checked = false, + read = false, + mentioned = false, + pinned = false, + counter = 0 + ), + PersonChat( + id = 10, + personName = "Котёнок", + lastMessage = "Новые машины завезли...", + avatarUrl = "https://w7.pngwing.com/pngs/873/489/png-transparent-avatar-youtube-cat-cute-dog-heroes-cat-like-mammal-carnivoran.png", + checkbox = false, + online = false, + locked = false, + scam = false, + verified = true, + muted = false, + time = "15:01", + checked = true, + read = false, + mentioned = false, + pinned = false, + counter = 0 + ) +) \ No newline at end of file diff --git a/app/src/main/res/drawable/circle_online.xml b/app/src/main/res/drawable/circle_online.xml new file mode 100644 index 0000000..6d3f693 --- /dev/null +++ b/app/src/main/res/drawable/circle_online.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/fake_badge.xml b/app/src/main/res/drawable/fake_badge.xml new file mode 100644 index 0000000..8cf1c5c --- /dev/null +++ b/app/src/main/res/drawable/fake_badge.xml @@ -0,0 +1,23 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/group_badge.xml b/app/src/main/res/drawable/group_badge.xml new file mode 100644 index 0000000..6fd00a0 --- /dev/null +++ b/app/src/main/res/drawable/group_badge.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_archive.xml b/app/src/main/res/drawable/icon_archive.xml new file mode 100644 index 0000000..0e9d0f4 --- /dev/null +++ b/app/src/main/res/drawable/icon_archive.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_checkbox.xml b/app/src/main/res/drawable/icon_checkbox.xml new file mode 100644 index 0000000..aabd6df --- /dev/null +++ b/app/src/main/res/drawable/icon_checkbox.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_checked.xml b/app/src/main/res/drawable/icon_checked.xml new file mode 100644 index 0000000..ed05956 --- /dev/null +++ b/app/src/main/res/drawable/icon_checked.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_locked.xml b/app/src/main/res/drawable/icon_locked.xml new file mode 100644 index 0000000..9162c2c --- /dev/null +++ b/app/src/main/res/drawable/icon_locked.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_mention.xml b/app/src/main/res/drawable/icon_mention.xml new file mode 100644 index 0000000..504eda9 --- /dev/null +++ b/app/src/main/res/drawable/icon_mention.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_mute.xml b/app/src/main/res/drawable/icon_mute.xml new file mode 100644 index 0000000..d797962 --- /dev/null +++ b/app/src/main/res/drawable/icon_mute.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_pencil.xml b/app/src/main/res/drawable/icon_pencil.xml new file mode 100644 index 0000000..b2c0854 --- /dev/null +++ b/app/src/main/res/drawable/icon_pencil.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_pinned.xml b/app/src/main/res/drawable/icon_pinned.xml new file mode 100644 index 0000000..e9b96b9 --- /dev/null +++ b/app/src/main/res/drawable/icon_pinned.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_read.xml b/app/src/main/res/drawable/icon_read.xml new file mode 100644 index 0000000..f8355ec --- /dev/null +++ b/app/src/main/res/drawable/icon_read.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_verified.xml b/app/src/main/res/drawable/icon_verified.xml new file mode 100644 index 0000000..b332cd8 --- /dev/null +++ b/app/src/main/res/drawable/icon_verified.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/menu_19x13.xml b/app/src/main/res/drawable/menu_19x13.xml new file mode 100644 index 0000000..0fb075b --- /dev/null +++ b/app/src/main/res/drawable/menu_19x13.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/person_badge.xml b/app/src/main/res/drawable/person_badge.xml new file mode 100644 index 0000000..72c670b --- /dev/null +++ b/app/src/main/res/drawable/person_badge.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/voip_badge.xml b/app/src/main/res/drawable/voip_badge.xml new file mode 100644 index 0000000..4fc404e --- /dev/null +++ b/app/src/main/res/drawable/voip_badge.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/font/roboto.ttf b/app/src/main/res/font/roboto.ttf new file mode 100644 index 0000000000000000000000000000000000000000..440843aa785f02d5f91099ba083a2b681b451604 GIT binary patch literal 81044 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/font/roboto_medium.ttf b/app/src/main/res/font/roboto_medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3e87dbd486fe328a11370eb2618a1d50dd8312d7 GIT binary patch literal 82628 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 - - + + + + + + + + + + + + + + + android:layout_height="match_parent"> + + + + + + - \ No newline at end of file + diff --git a/app/src/main/res/layout/view_holder_group.xml b/app/src/main/res/layout/view_holder_group.xml new file mode 100644 index 0000000..f5bf23a --- /dev/null +++ b/app/src/main/res/layout/view_holder_group.xml @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_holder_person.xml b/app/src/main/res/layout/view_holder_person.xml new file mode 100644 index 0000000..45e1356 --- /dev/null +++ b/app/src/main/res/layout/view_holder_person.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 114f376..ad4c034 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,16 +1,23 @@ - \ No newline at end of file diff --git a/app/src/main/res/values/Integers.xml b/app/src/main/res/values/Integers.xml new file mode 100644 index 0000000..d19e039 --- /dev/null +++ b/app/src/main/res/values/Integers.xml @@ -0,0 +1,4 @@ + + + 73 + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..873dfa7 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f8c6127..ddc0dc1 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,10 +1,17 @@ - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 - #FFFFFFFF + #FFFFFFFF + #FF517DA2 + #FFD5E8F7 + #FF8D8E90 + #FF222222 + #FF434449 + #FF8D8E90 + #FF95999A + #FF3D95D4 + #FF868686 + #FFC5C9CC + #FFD9D9D9 + #FF32A8E6 + #FF51AEE7 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3d78b1f..d2b11b3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,26 @@ - RecyclerView + Telegram + All Chats + Work + Bots + Group chat avatar + Person chat avatar + group_name? + person_name? + last_author? + last_message? + time_value? + Voip badge + Verified icon + Mute icon + Pinned icon + Mention icon + Checked icon + Checkbox badge + Locked icon + Scam patch + Scam patch + Unknown view type + FAB description + Archive \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..59bf5e7 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 2187cf1..ad4c034 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,16 +1,23 @@ - \ No newline at end of file