Skip to content

Commit

Permalink
Merge pull request #2 from emartech/MV-254-Automation
Browse files Browse the repository at this point in the history
Feat: Use viewBinding
  • Loading branch information
eduzatoni committed Apr 12, 2022
2 parents 3336924 + 5fc9d81 commit 4309ac7
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 44 deletions.
32 changes: 16 additions & 16 deletions emarsys-mobile-inbox/build.gradle
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
compileSdkVersion 30
compileSdkVersion 29

buildFeatures {
viewBinding true
}

defaultConfig {
minSdkVersion 19
targetSdkVersion 30
targetSdkVersion 29
versionCode emarsys_sdk_version_code
versionName emarsys_sdk_version

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
jvmTarget = JavaVersion.VERSION_1_8.toString()
}

buildTypes {
Expand All @@ -34,18 +33,19 @@ android {
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation "com.emarsys:emarsys-sdk:$emarsys_sdk_version"
implementation "com.emarsys:emarsys-firebase:$emarsys_sdk_version"
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation "androidx.fragment:fragment-ktx:1.2.5"
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation "androidx.fragment:fragment-ktx:1.4.1"
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,27 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.bumptech.glide.Glide
import com.emarsys.plugnplay.inbox.R
import kotlinx.android.synthetic.main.ems_inbox_detail_fragment.*
import kotlinx.android.synthetic.main.ems_inbox_detail_fragment_item.view.*
import com.emarsys.plugnplay.inbox.databinding.EmsInboxDetailFragmentBinding
import com.emarsys.plugnplay.inbox.databinding.EmsInboxDetailFragmentItemBinding

class EmarsysInboxDetailFragment : Fragment() {
private val viewModel: EmarsysInboxViewModel by activityViewModels()
private var _binding: EmsInboxDetailFragmentBinding? = null
private val binding get() = _binding!!

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.ems_inbox_detail_fragment, container, false)
_binding = EmsInboxDetailFragmentBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

pager.adapter = object : RecyclerView.Adapter<EmarsysInboxDetailViewHolder>() {
binding.pager.adapter = object : RecyclerView.Adapter<EmarsysInboxDetailViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
Expand All @@ -47,24 +51,25 @@ class EmarsysInboxDetailFragment : Fragment() {
viewModel.messages.value?.get(position)?.let { holder.bindTo(it) }
}
}
viewModel.selectedItem.value?.let { pager.setCurrentItem(it, false) }
viewModel.selectedItem.value?.let { binding.pager.setCurrentItem(it, false) }

pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
binding.pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
viewModel.selectedItem.value = pager.currentItem
viewModel.selectedItem.value = binding.pager.currentItem
}
})

viewModel.messages.observe(viewLifecycleOwner) {
(pager.adapter as RecyclerView.Adapter<*>).notifyDataSetChanged()
(binding.pager.adapter as RecyclerView.Adapter<*>).notifyDataSetChanged()
}
}

private class EmarsysInboxDetailViewHolder(itemView: View, val fragment: Fragment) :
RecyclerView.ViewHolder(itemView) {
val title = itemView.title
val body = itemView.body
val image = itemView.image
val binding = EmsInboxDetailFragmentItemBinding.bind(itemView)
val title = binding.title
val body = binding.body
val image = binding.image

fun bindTo(message: EmarsysInboxMessage) {
title.text = message.title
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,30 @@ import androidx.lifecycle.observe
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.emarsys.plugnplay.inbox.R
import com.emarsys.plugnplay.inbox.databinding.EmsInboxListFragmentBinding
import com.google.android.material.snackbar.Snackbar
import kotlinx.android.synthetic.main.ems_inbox_list_fragment.*

class EmarsysInboxListFragment : Fragment() {
private val viewModel: EmarsysInboxViewModel by activityViewModels()
private var _binding: EmsInboxListFragmentBinding? = null
private val binding get() = _binding!!

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.ems_inbox_list_fragment, container, false)
_binding = EmsInboxListFragmentBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
notificationRecycleView.layoutManager =
binding.notificationRecycleView.layoutManager =
LinearLayoutManager(context, RecyclerView.VERTICAL, false)
notificationRecycleView.adapter = EmarsysInboxRecyclerViewAdapter(viewModel)
binding.notificationRecycleView.adapter = EmarsysInboxRecyclerViewAdapter(viewModel)

swipeRefreshLayout.setOnRefreshListener {
binding.swipeRefreshLayout.setOnRefreshListener {
viewModel.refresh()
}
ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
Expand All @@ -46,17 +48,17 @@ class EmarsysInboxListFragment : Fragment() {
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
viewModel.removed(viewHolder.adapterPosition)
}
}).attachToRecyclerView(notificationRecycleView)
}).attachToRecyclerView(binding.notificationRecycleView)

viewModel.messages.observe(viewLifecycleOwner) {
(notificationRecycleView.adapter as EmarsysInboxRecyclerViewAdapter).submitList(it)
(binding.notificationRecycleView.adapter as EmarsysInboxRecyclerViewAdapter).submitList(it)
}
viewModel.isRefreshing.observe(viewLifecycleOwner) {
swipeRefreshLayout.isRefreshing = it
binding.swipeRefreshLayout.isRefreshing = it
}
viewModel.error.observe(viewLifecycleOwner) {
viewModel.error.value?.let {
Snackbar.make(swipeRefreshLayout, it, Snackbar.LENGTH_LONG).show()
Snackbar.make(binding.swipeRefreshLayout, it, Snackbar.LENGTH_LONG).show()
viewModel.error.value = null
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.emarsys.plugnplay.inbox.R
import kotlinx.android.synthetic.main.ems_inbox_list_item.view.*
import com.emarsys.plugnplay.inbox.databinding.EmsInboxListItemBinding

class EmarsysInboxRecyclerViewAdapter(private val viewModel: EmarsysInboxViewModel) :
ListAdapter<EmarsysInboxMessage, EmarsysInboxRecyclerViewAdapter.ViewHolder>(DiffCallback) {
Expand Down Expand Up @@ -48,11 +47,12 @@ class EmarsysInboxRecyclerViewAdapter(private val viewModel: EmarsysInboxViewMod
}
}

class ViewHolder(val view: View, val viewModel: EmarsysInboxViewModel) :
class ViewHolder(private val view: View, private val viewModel: EmarsysInboxViewModel) :
RecyclerView.ViewHolder(view) {
val title: TextView = view.notification_title
val date: TextView = view.notification_date
val pin: ImageButton = view.notification_pin
private val binding = EmsInboxListItemBinding.bind(view)
private val title: TextView = binding.notificationTitle
private val date: TextView = binding.notificationDate
private val pin: ImageButton = binding.notificationPin

fun bindTo(message: EmarsysInboxMessage) {
title.text = message.title
Expand Down

0 comments on commit 4309ac7

Please sign in to comment.