From 58b033f345d2d8f15de571ef18c24fb34e6ded3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A8=D0=B0=D0=BC=D0=B8=D0=BB=D1=8C?= Date: Tue, 24 Mar 2026 21:27:07 +0300 Subject: [PATCH] done --- app/build.gradle | 8 + .../java/otus/gpb/recyclerview/ChatAdapter.kt | 56 +++++++ .../otus/gpb/recyclerview/ChatDiffCallback.kt | 13 ++ .../java/otus/gpb/recyclerview/ChatItem.kt | 15 ++ .../otus/gpb/recyclerview/ChatViewHolder.kt | 6 + .../otus/gpb/recyclerview/MainActivity.kt | 128 ++++++++++++++- app/src/main/res/drawable/avatar.png | Bin 0 -> 45422 bytes app/src/main/res/drawable/check.xml | 2 + app/src/main/res/drawable/check1.xml | 14 ++ app/src/main/res/drawable/circle.xml | 2 + app/src/main/res/drawable/doublecheck.xml | 14 ++ app/src/main/res/drawable/mute.xml | 14 ++ app/src/main/res/drawable/scam.xml | 27 ++++ app/src/main/res/layout/activity_main.xml | 6 +- app/src/main/res/layout/chat_item.xml | 149 ++++++++++++++++++ gradle.properties | 3 +- 16 files changed, 453 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/otus/gpb/recyclerview/ChatAdapter.kt create mode 100644 app/src/main/java/otus/gpb/recyclerview/ChatDiffCallback.kt create mode 100644 app/src/main/java/otus/gpb/recyclerview/ChatItem.kt create mode 100644 app/src/main/java/otus/gpb/recyclerview/ChatViewHolder.kt create mode 100644 app/src/main/res/drawable/avatar.png create mode 100644 app/src/main/res/drawable/check.xml create mode 100644 app/src/main/res/drawable/check1.xml create mode 100644 app/src/main/res/drawable/circle.xml create mode 100644 app/src/main/res/drawable/doublecheck.xml create mode 100644 app/src/main/res/drawable/mute.xml create mode 100644 app/src/main/res/drawable/scam.xml create mode 100644 app/src/main/res/layout/chat_item.xml diff --git a/app/build.gradle b/app/build.gradle index 54e4eac..3302ed5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,6 +30,12 @@ android { kotlinOptions { jvmTarget = '1.8' } + buildFeatures { + viewBinding = true + } + dataBinding { + enabled = true + } } dependencies { @@ -41,4 +47,6 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + implementation 'androidx.databinding:databinding-runtime:8.10.0' + implementation 'it.xabaras.android:recyclerview-swipedecorator:1.4' } \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/recyclerview/ChatAdapter.kt b/app/src/main/java/otus/gpb/recyclerview/ChatAdapter.kt new file mode 100644 index 0000000..a2aaf83 --- /dev/null +++ b/app/src/main/java/otus/gpb/recyclerview/ChatAdapter.kt @@ -0,0 +1,56 @@ +package otus.gpb.recyclerview + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.ListAdapter +import otus.gpb.recyclerview.databinding.ChatItemBinding +import android.view.View.INVISIBLE +import android.view.View.VISIBLE + +class ChatAdapter : ListAdapter(ChatDiffCallback()) { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChatViewHolder { + val binding = ChatItemBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + return ChatViewHolder(binding) + } + + override fun onBindViewHolder(holder: ChatViewHolder, position: Int) { + val item = getItem(position) + + with(holder.binding) { + + textName.text = item.name + textStatus.text = item.status + message.text = item.message + time.text = item.time + + iconVerified.visibility = if (item.verified) VISIBLE else INVISIBLE + iconScam.visibility = if (item.scam) VISIBLE else INVISIBLE + iconMute.visibility = if (item.mute) VISIBLE else INVISIBLE + + counter.apply { + visibility = if (item.counter > 0) VISIBLE else INVISIBLE + text = item.counter.toString() + } + + val iconRes = when { + item.delivered && item.read -> R.drawable.doublecheck + item.delivered -> R.drawable.check + item.read -> R.drawable.doublecheck + else -> null + } + + if (iconRes != null) { + delivered.setImageResource(iconRes) + delivered.visibility = VISIBLE + } else { + delivered.visibility = INVISIBLE + } + } + } +} diff --git a/app/src/main/java/otus/gpb/recyclerview/ChatDiffCallback.kt b/app/src/main/java/otus/gpb/recyclerview/ChatDiffCallback.kt new file mode 100644 index 0000000..2721371 --- /dev/null +++ b/app/src/main/java/otus/gpb/recyclerview/ChatDiffCallback.kt @@ -0,0 +1,13 @@ +package otus.gpb.recyclerview + +import androidx.recyclerview.widget.DiffUtil + +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 oldItem == newItem + } +} 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..0d30d6a --- /dev/null +++ b/app/src/main/java/otus/gpb/recyclerview/ChatItem.kt @@ -0,0 +1,15 @@ +package otus.gpb.recyclerview + +data class ChatItem( + val id: Int, + val name: String, + val status: String, + val message: String, + val counter: Int, + val verified: Boolean, + val mute: Boolean, + val scam: Boolean, + val delivered: Boolean, + val read: Boolean, + val time: String, +) diff --git a/app/src/main/java/otus/gpb/recyclerview/ChatViewHolder.kt b/app/src/main/java/otus/gpb/recyclerview/ChatViewHolder.kt new file mode 100644 index 0000000..23c42b3 --- /dev/null +++ b/app/src/main/java/otus/gpb/recyclerview/ChatViewHolder.kt @@ -0,0 +1,6 @@ +package otus.gpb.recyclerview + +import androidx.recyclerview.widget.RecyclerView.ViewHolder +import otus.gpb.recyclerview.databinding.ChatItemBinding + +class ChatViewHolder(val binding: ChatItemBinding): ViewHolder(binding.root) diff --git a/app/src/main/java/otus/gpb/recyclerview/MainActivity.kt b/app/src/main/java/otus/gpb/recyclerview/MainActivity.kt index e2cdca7..8b1d435 100644 --- a/app/src/main/java/otus/gpb/recyclerview/MainActivity.kt +++ b/app/src/main/java/otus/gpb/recyclerview/MainActivity.kt @@ -1,12 +1,136 @@ package otus.gpb.recyclerview -import androidx.appcompat.app.AppCompatActivity +import android.graphics.Canvas import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.* +import it.xabaras.android.recyclerview.swipedecorator.RecyclerViewSwipeDecorator +import kotlin.random.Random +import otus.gpb.recyclerview.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { + private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) } + + private val chatList = mutableListOf() + private val adapter = ChatAdapter() + + private var lastId = 0 + private var previousItemsCount = 0 + private var pageLoad = false + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) + setContentView(binding.root) + + binding.recyclerView.adapter = adapter + binding.recyclerView.layoutManager = LinearLayoutManager(this) + + setupSwipe() + setScrollListener() + + createItems(20) + } + + private fun setupSwipe() { + + val helper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback( + 0, + ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT + ) { + + override fun onMove( + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + target: RecyclerView.ViewHolder + ) = false + + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + removeItem(viewHolder.adapterPosition) + } + + override fun onChildDraw( + c: Canvas, + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + dX: Float, + dY: Float, + actionState: Int, + isCurrentlyActive: Boolean + ) { + RecyclerViewSwipeDecorator.Builder( + c, recyclerView, viewHolder, + dX, dY, actionState, isCurrentlyActive + ).create().decorate() + + super.onChildDraw( + c, recyclerView, viewHolder, + dX, dY, actionState, isCurrentlyActive + ) + } + }) + + helper.attachToRecyclerView(binding.recyclerView) + } + + private fun setScrollListener() { + + binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { + + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + + val layoutManager = recyclerView.layoutManager as LinearLayoutManager + + val itemsCount = layoutManager.itemCount + val lastVisibleItem = layoutManager.findLastVisibleItemPosition() + + if (pageLoad && itemsCount > previousItemsCount) { + pageLoad = false + previousItemsCount = itemsCount + } + + if (!pageLoad && lastVisibleItem >= itemsCount - 5) { + getNextPage() + } + } + }) + } + + private fun getNextPage() { + pageLoad = true + createItems(20) + } + + private fun removeItem(position: Int) { + chatList.removeAt(position) + adapter.submitList(chatList.toList()) + } + + private fun createItems(size: Int) { + + repeat(size) { + + val hour = Random.nextInt(0, 24) + val minute = Random.nextInt(0, 60) + val time = "%02d:%02d".format(hour, minute) + + chatList.add( + ChatItem( + id = lastId++, + name = "Mr. Meeseeks $lastId", + status = "status $lastId", + message = "Message $lastId", + counter = Random.nextInt(10), + verified = Random.nextBoolean(), + scam = Random.nextBoolean(), + mute = Random.nextBoolean(), + delivered = Random.nextBoolean(), + read = Random.nextBoolean(), + time = time + ) + ) + } + + adapter.submitList(chatList.toList()) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/avatar.png b/app/src/main/res/drawable/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..d1724b97e498fe5a00e4af1b4a91d412e30f598d GIT binary patch literal 45422 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

V<}Epe z)@kkR+P;Os-hNsNIrhJ{mDjeuLcXbmrb$!K$`c11CC)gps_!(4NVF4F5w}SDuyPU` zCY3vn4WZVlEA9c##oUYTH-`R0z3hE)GfzG60MGt(1DhV+Kz{l(W-VFd(u&?VD_FrVJM3#j}#hJJ|fhczi~wp0Fx$8V$SRt+`Ilq7_B(8Ydc=^L}o5K109AaG}2F3 zqNbxjdsrn?$EVJk%j_kmaA4m)I`{0s^B^4PW7|tFu&-km`R0io=Z*oMG1jb3fgc{NqOlsqi0m2dT4FL@oQx_Wr$Wz zgHVqA{b*P3!9kw;!FO1H=O+pF?qots3oA}s$VYCuiR-SthFP=b;QP4|t$#GQd~gK$ zQ#P6sR|iIW&Ar26-@bj^`QAuJX7)uvza#E;ig?CE4eOAF-lSbW;&FXH4?zroA}i)n6d#@Y~LE#kK6I@E4d zMG7|(eyPktPU(8?>?9H)wl&~3qQx45!9fNObg^^mE4;R43kUb^p}(h>Fes5%;1%*r zU$lUwXRo1s$w`v1Rwyl+QiS1t>{{{4!>dVet;&0KWu8Qgf?)ttI~IqmH;Vguz!*S|)Wk9zYrE=i)ZvlDAA zmtTH4Pd)z%0gBm6S9AGaex9k*W-w3;vD(A9g>x-Yx5KqYL4c=a4oG)r7mq)3AKRaK z0w0Z^%Mpq)OH*4rGv+N~?xH2km^GW`2`zYeU;4!s=R@Iqfvso_q?{p*BLZpVon%-; zSPCc(mKZqHL+9Sz?0RiGox3~e?K*%h1>~$n1tE9^ny0og_k@!<;k474&^`m}d4xuc zmMIRBkq$^n+|VLht5PK4L*HNPYOU}DQCF)hC=Rz)h!!jJZ7g6y(a?NlFiO+?!qYtb zmH*AoZO=i`Fr#e>SH5Kpx4icTmMmUEE|)8_KOBqtHlKGn1Hd0 zFf2vJ5sXO@PdxCF{?rwsScY1aVz?y15HV_n1Fp;Ekop;iM`01UT8ptV_r`_+uReGm z8^3iY-QD}iX`hADr*YL~>$v8s%UQB`357!C{usxq{*4qyJAdPvB*HM{_K*Dzcinp* zojPwacUbAr?xYF?gFOIUqrrjGS>4Gjlubi8)<6Agc|jH%GTH#N<_<1 zt71s_@Y1OjD#~QqxPk+yTe(}{W@$y4=QNmEj`>Z*0H8=d` zRh;vtGijSLm0T{DPBg}`s(&Me(aztvCJBJ;zuv)FYcBJWpcI4{ z1IB41Ws99elZ+w(Q5xSvkCnbV68-8=l7(%f-_c+3o>Yhn`u;61 z@t=2olFlv9lPlzzJfVd%S1skXo8QA}t5z|wb>fiz5680pjRZzJf8&}Ydi(nLy+8Ok zci(qEI+rKJqu>?j>+50V2mU)3zW+m*{s5yyxU6%-c1@LQp;c@%(8i*STN}}euLVFD z1_Z@^277zy>+T{PEK(XAq*NSau)mLizCMD%B0;HyF#%f3RP}tJKt5j}*W65@rG@;2 zR+=WXQfO(#%QfK@@@U@&rJb=;e8iPopjAd_RN_pUT9-4jL6m>o>LOb&5+ap$y;cRP zcv=+Ejp#V0jDlh)M59wU+k?B;8nGbxCP3%%1c$nL=KJ5~v3tIT>g~qQ6__`B8t-}M zRlMb*3s|&Z(XjjhCm?C-*#Jd@cg&PEx< zuC33|y<aB#~5_ zYGmXLw&g)(KeBQg5dm&dm?#ZvTvx-0nOQ4~($Mq#^E~{ue_;FO$MLLULZOM1mn`6h zcV5M1>n^5!+H`!sdiNrWk*t3-xO{K~`5PA`5r!c@`}t%1<)=Qyj~{u2P-zNYp2>3- zGyklMS$@&mnJ{BMxt1n^;vgN{euXYfqILd!3R<=aw3=v>KtSA_lbRi=$C+KiqNdO~ zg0OBPnJ6Dgtkj5x)Oh(>{tPEL%C*h05V;#{Vu+MaCWcm0EqSU(Qz?a6p*;+e*xBkK zSFBQ^wb)cx`dzZOWspukdM}(_5_JqBtxZRp^yWN@16@4(o&Vs;?|*~7fqpzR)2Fm@ z!FgwK%{#7O#nNR=n_AxjF-KefvS>8<$fDl-jcJnD+0nrl|LIG7`D_2o!9#s$6h&ic zZJ)!cw_MGVH($=g*$c3~+g#WORcHdODOpXa7+_5pk8q>~A}W@Y2+C!Zo}-am0z}hD z$zmj@WoZ!2HLIYSxQpZ1Baw3j)~N;Z_#`jsT*qJXC<%hHJK{v+kR;S5)&UxGLcRGLlO(Za>lXg@v!CW0-}x><7*YxXT3ef$Hh&SPod0%C zx!_82ZF4CZMW`(JTK4AfJgn9j8}-?v<<;Hqlzhcnft)1|Pqo(RiXELhMIsJJ3wjoD zP?V0$EJiClTbrJQ^ASjt-=5I`qL}yngfAsN>^RNH$O;oOcH6hl^GkfVOR=)K*=AU*x-h?R_?O}ru zr4?3*8@6$~2V1R^PDM(hQ+3@{{zL#IikxIiOQNTlA^8~xMG8hn2}y2AMkgYoh~lSX z#`k9OoS>F~)CwOSc6H$*ef#B=Y$jyE=AJEEQ>+I)&LYXEAYNE4g9XAF5%v^>4TsE%_KO>djxn zl7w|0bpWrvx|Kiv)Bnlc>mR^iDV72zwYM>M`D#vGcO7$9ufaC8QYwa`A$U?Ttu>qm=doaC9$$WRt&7MA|^InaIWN50m{lu+n6L=dI*y!7hiT;GvuwsM`27z-;Q6= z@skHwKC_w2FImg#l`ELo+KN(&{rmUJX1&U-9#)6_p&F{yzoWtHAs{~dBXIP9 zA=Rv>DIyzIvskK-hf|p|K}kHr2tcsDeE>hWkoB|)Z{MrE#o2+f<}DQVq1euk_+*HVE=x0ZhVNs!L7Xg;x)Ya qO=mHG?wqnM^^Rrz8wrfJ{QZAz;hB&SSI-Cl0000 + diff --git a/app/src/main/res/drawable/check1.xml b/app/src/main/res/drawable/check1.xml new file mode 100644 index 0000000..48b7d4d --- /dev/null +++ b/app/src/main/res/drawable/check1.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/circle.xml b/app/src/main/res/drawable/circle.xml new file mode 100644 index 0000000..27cde7b --- /dev/null +++ b/app/src/main/res/drawable/circle.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/main/res/drawable/doublecheck.xml b/app/src/main/res/drawable/doublecheck.xml new file mode 100644 index 0000000..c71c8ba --- /dev/null +++ b/app/src/main/res/drawable/doublecheck.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/mute.xml b/app/src/main/res/drawable/mute.xml new file mode 100644 index 0000000..dc59ee4 --- /dev/null +++ b/app/src/main/res/drawable/mute.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/scam.xml b/app/src/main/res/drawable/scam.xml new file mode 100644 index 0000000..b77d9ab --- /dev/null +++ b/app/src/main/res/drawable/scam.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2d026df..14b87f2 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -3,11 +3,15 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/white" + xmlns:app="http://schemas.android.com/apk/res-auto" tools:context=".MainActivity"> + android:layout_height="match_parent" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + tools:listitem="@layout/chat_item" /> \ No newline at end of file diff --git a/app/src/main/res/layout/chat_item.xml b/app/src/main/res/layout/chat_item.xml new file mode 100644 index 0000000..92efb23 --- /dev/null +++ b/app/src/main/res/layout/chat_item.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gradle.properties b/gradle.properties index cd0519b..bd6aecb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,5 @@ kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +android.overridePathCheck=true \ No newline at end of file