Skip to content

Commit 0ff0d38

Browse files
committed
add : RV impl and UI updates.
1 parent 21d8039 commit 0ff0d38

File tree

10 files changed

+131
-8
lines changed

10 files changed

+131
-8
lines changed

app/build.gradle

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,8 @@ dependencies {
7676
// Viewpager
7777
implementation "androidx.viewpager2:viewpager2:1.0.0"
7878

79-
// Material Dialogs
80-
def material_afollestad_version = "3.3.0"
81-
implementation "com.afollestad.material-dialogs:core:$material_afollestad_version"
82-
implementation "com.afollestad.material-dialogs:bottomsheets:$material_afollestad_version"
83-
implementation "com.afollestad.material-dialogs:lifecycle:$material_afollestad_version"
79+
// Alert Dialogs
80+
implementation 'com.github.tapadoo:alerter:7.2.4'
8481

8582
// logging
8683
implementation 'com.jakewharton.timber:timber:5.0.1'

app/src/main/java/com/projectdelta/zoro/ui/main/MainActivity.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import androidx.navigation.ui.setupWithNavController
88
import com.projectdelta.zoro.R
99
import com.projectdelta.zoro.databinding.ActivityMainBinding
1010
import com.projectdelta.zoro.ui.base.BaseViewBindingActivity
11+
import com.projectdelta.zoro.util.system.lang.chop
12+
import com.projectdelta.zoro.util.system.lang.getResourceColor
13+
import com.tapadoo.alerter.Alerter
1114
import dagger.hilt.android.AndroidEntryPoint
1215

1316
@AndroidEntryPoint
@@ -42,6 +45,15 @@ class MainActivity : BaseViewBindingActivity<ActivityMainBinding>() {
4245
}
4346
}
4447
}
48+
49+
viewModel.data.observe(this){
50+
Alerter.create(this)
51+
.setTitle("New Message from ${it?.senderId?.chop(20)}")
52+
.setText(it?.data!!)
53+
.setDuration(5000L)
54+
.setBackgroundColorInt(getResourceColor(R.attr.colorAccent))
55+
.show()
56+
}
4557
}
4658

4759
private fun setupNavController(){

app/src/main/java/com/projectdelta/zoro/ui/main/home/HomeFragment.kt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,55 @@ import androidx.fragment.app.Fragment
55
import android.view.LayoutInflater
66
import android.view.View
77
import android.view.ViewGroup
8+
import androidx.lifecycle.lifecycleScope
9+
import com.projectdelta.zoro.data.model.User
810
import com.projectdelta.zoro.databinding.FragmentHomeBinding
911
import com.projectdelta.zoro.ui.base.BaseViewBindingFragment
12+
import com.projectdelta.zoro.ui.main.home.adapter.HomeRecyclerViewAdapter
1013
import dagger.hilt.android.AndroidEntryPoint
14+
import kotlinx.coroutines.launch
15+
import timber.log.Timber
16+
import java.util.*
1117

1218
@AndroidEntryPoint
1319
class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>() {
1420

21+
private var adapter : HomeRecyclerViewAdapter? = null
22+
23+
override fun onCreate(savedInstanceState: Bundle?) {
24+
super.onCreate(savedInstanceState)
25+
26+
adapter = HomeRecyclerViewAdapter {
27+
Timber.d(it.toString())
28+
}
29+
}
30+
1531
override fun onCreateView(inflater: LayoutInflater, c: ViewGroup?, savedInstanceState: Bundle?): View {
1632
_binding = FragmentHomeBinding.inflate(inflater)
1733
return binding.root
1834
}
35+
36+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
37+
super.onViewCreated(view, savedInstanceState)
38+
39+
jobs += viewLifecycleOwner.lifecycleScope.launch {
40+
adapter?.submitList(
41+
(0..15).map { User(id = it.toString() ,
42+
name = UUID.randomUUID().toString() , connections = listOf() )
43+
}
44+
)
45+
}
46+
47+
binding.userRv.adapter = adapter
48+
}
49+
50+
override fun onDestroyView() {
51+
binding.userRv.adapter = null
52+
super.onDestroyView()
53+
}
54+
55+
override fun onDestroy() {
56+
adapter = null
57+
super.onDestroy()
58+
}
1959
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.projectdelta.zoro.ui.main.home.adapter
2+
3+
import android.view.LayoutInflater
4+
import android.view.ViewGroup
5+
import androidx.recyclerview.widget.ListAdapter
6+
import androidx.recyclerview.widget.RecyclerView
7+
import com.bumptech.glide.Glide
8+
import com.bumptech.glide.load.engine.DiskCacheStrategy
9+
import com.bumptech.glide.request.RequestOptions
10+
import com.projectdelta.zoro.R
11+
import com.projectdelta.zoro.data.model.User
12+
import com.projectdelta.zoro.databinding.ItemHomeBinding
13+
import com.projectdelta.zoro.util.UserDiffUtil
14+
import com.projectdelta.zoro.util.networking.NetworkingConstants
15+
16+
class HomeRecyclerViewAdapter(
17+
private val onClickCallback : ( User ) -> Unit
18+
) : ListAdapter<User ,HomeRecyclerViewAdapter.ViewHolder>(UserDiffUtil) {
19+
20+
inner class ViewHolder(
21+
private val binding : ItemHomeBinding
22+
) : RecyclerView.ViewHolder(binding.root){
23+
24+
fun bind( user : User , onClickCallback : ( User ) -> Unit ){
25+
with(binding){
26+
val context = root.context
27+
28+
root.setOnClickListener {
29+
onClickCallback(user)
30+
}
31+
32+
Glide
33+
.with(context)
34+
.load(NetworkingConstants.getAvatarURIByUserId(user.id!!))
35+
.apply(RequestOptions().diskCacheStrategy(DiskCacheStrategy.DATA))
36+
.into(ivUser)
37+
38+
tvTitle.text = user.name
39+
tvTitle.isSelected = true
40+
tvSubTitle.setText(R.string.home)
41+
}
42+
}
43+
}
44+
45+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
46+
val binding = ItemHomeBinding.inflate(LayoutInflater.from(parent.context), parent, false)
47+
return ViewHolder(binding)
48+
}
49+
50+
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
51+
holder.bind( getItem(position) , onClickCallback )
52+
}
53+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.projectdelta.zoro.util
2+
3+
import androidx.recyclerview.widget.DiffUtil
4+
import com.projectdelta.zoro.data.model.User
5+
6+
object UserDiffUtil : DiffUtil.ItemCallback<User>(){
7+
override fun areItemsTheSame(oldItem: User, newItem: User): Boolean {
8+
return oldItem == newItem
9+
}
10+
11+
override fun areContentsTheSame(oldItem: User, newItem: User): Boolean {
12+
return oldItem.id == newItem.id &&
13+
oldItem.name == newItem.name &&
14+
oldItem.connections == newItem.connections
15+
}
16+
}

app/src/main/res/layout/fragment_home.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
android:layout_height="match_parent"
1313
android:paddingTop="@dimen/base_padding"
1414
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
15-
android:id="@+id/character_rv"
15+
android:id="@+id/user_rv"
1616
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
1717
tools:listitem="@layout/item_home"
1818
tools:itemCount="7"

app/src/main/res/layout/item_home.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
android:layout_width="@dimen/item_img_max_height"
1111
android:layout_height="@dimen/item_img_max_height"
1212
android:scaleType="center"
13+
app:strokeColor="@color/black"
14+
app:strokeWidth="1dp"
1315
android:id="@+id/iv_user"
1416
android:padding="@dimen/base_padding"
1517
android:src="@drawable/ic_round_person_24"
@@ -29,6 +31,8 @@
2931
android:id="@+id/tv_title"
3032
android:layout_height="wrap_content"
3133
android:textSize="20sp"
34+
android:singleLine="true"
35+
android:ellipsize="marquee"
3236
android:textColor="@color/black"/>
3337

3438
<com.google.android.material.textview.MaterialTextView

app/src/main/res/values-night/themes.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<resources xmlns:tools="http://schemas.android.com/tools">
22
<!-- Base application theme. -->
3-
<style name="Theme.Zoro" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
3+
<style name="Theme.Zoro" parent="Theme.MaterialComponents.Light.NoActionBar">
44
<!-- Primary brand color. -->
55
<item name="colorPrimary">@color/purple_200</item>
66
<item name="colorPrimaryVariant">@color/purple_700</item>

app/src/main/res/values/themes.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<resources xmlns:tools="http://schemas.android.com/tools">
22
<!-- Base application theme. -->
3-
<style name="Theme.Zoro" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
3+
<style name="Theme.Zoro" parent="Theme.MaterialComponents.Light.NoActionBar">
44
<!-- Primary brand color. -->
55
<item name="colorPrimary">@color/purple_500</item>
66
<item name="colorPrimaryVariant">@color/purple_700</item>

settings.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ dependencyResolutionManagement {
44
google()
55
mavenCentral()
66
jcenter() // Warning: this repository is going to shut down soon
7+
maven { url "https://jitpack.io" }
78
}
89
}
910
rootProject.name = "Zoro"

0 commit comments

Comments
 (0)