From 805182722acfc95e6028661579598ba38ff4f22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Marczak?= Date: Thu, 18 Jun 2020 22:48:04 +0200 Subject: [PATCH] refactor regarding viewBinding, update kotlin and gradle plugin --- app/build.gradle | 6 +++ .../uamp/fragments/MediaItemFragment.kt | 25 +++++------- .../uamp/fragments/NowPlayingFragment.kt | 38 +++++++++---------- .../viewmodels/NowPlayingFragmentViewModel.kt | 4 +- .../res/layout/fragment_mediaitem_list.xml | 5 ++- build.gradle | 4 +- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 8 files changed, 42 insertions(+), 46 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0fd24ad42..fdceb5f2a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,9 +38,15 @@ android { useSupportLibrary true } } + + viewBinding { + enabled = true + } + dataBinding { enabled = true } + buildTypes { release { minifyEnabled false diff --git a/app/src/main/java/com/example/android/uamp/fragments/MediaItemFragment.kt b/app/src/main/java/com/example/android/uamp/fragments/MediaItemFragment.kt index 1c29673ce..eb4b8bb83 100644 --- a/app/src/main/java/com/example/android/uamp/fragments/MediaItemFragment.kt +++ b/app/src/main/java/com/example/android/uamp/fragments/MediaItemFragment.kt @@ -23,17 +23,11 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView import com.example.android.uamp.MediaItemAdapter -import com.example.android.uamp.MediaItemData -import com.example.android.uamp.R +import com.example.android.uamp.databinding.FragmentMediaitemListBinding import com.example.android.uamp.utils.InjectorUtils import com.example.android.uamp.viewmodels.MainActivityViewModel import com.example.android.uamp.viewmodels.MediaItemFragmentViewModel -import kotlinx.android.synthetic.main.fragment_mediaitem_list.list -import kotlinx.android.synthetic.main.fragment_mediaitem_list.loadingSpinner -import kotlinx.android.synthetic.main.fragment_mediaitem_list.networkError /** * A fragment representing a list of MediaItems. @@ -42,6 +36,7 @@ class MediaItemFragment : Fragment() { private lateinit var mediaId: String private lateinit var mainActivityViewModel: MainActivityViewModel private lateinit var mediaItemFragmentViewModel: MediaItemFragmentViewModel + private lateinit var binding: FragmentMediaitemListBinding private val listAdapter = MediaItemAdapter { clickedItem -> mainActivityViewModel.mediaItemClicked(clickedItem) @@ -62,7 +57,8 @@ class MediaItemFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_mediaitem_list, container, false) + binding = FragmentMediaitemListBinding.inflate(inflater, container, false) + return binding.root } override fun onActivityCreated(savedInstanceState: Bundle?) { @@ -80,21 +76,18 @@ class MediaItemFragment : Fragment() { .of(this, InjectorUtils.provideMediaItemFragmentViewModel(context, mediaId)) .get(MediaItemFragmentViewModel::class.java) mediaItemFragmentViewModel.mediaItems.observe(this, - Observer> { list -> - loadingSpinner.visibility = + Observer { list -> + binding.loadingSpinner.visibility = if (list?.isNotEmpty() == true) View.GONE else View.VISIBLE listAdapter.submitList(list) }) mediaItemFragmentViewModel.networkError.observe(this, - Observer { error -> - networkError.visibility = if (error) View.VISIBLE else View.GONE + Observer { error -> + binding.networkError.visibility = if (error) View.VISIBLE else View.GONE }) // Set the adapter - if (list is RecyclerView) { - list.layoutManager = LinearLayoutManager(list.context) - list.adapter = listAdapter - } + binding.list.adapter = listAdapter } } diff --git a/app/src/main/java/com/example/android/uamp/fragments/NowPlayingFragment.kt b/app/src/main/java/com/example/android/uamp/fragments/NowPlayingFragment.kt index d86152bf3..81e515524 100644 --- a/app/src/main/java/com/example/android/uamp/fragments/NowPlayingFragment.kt +++ b/app/src/main/java/com/example/android/uamp/fragments/NowPlayingFragment.kt @@ -21,14 +21,12 @@ import android.os.Bundle 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.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.bumptech.glide.Glide import com.example.android.uamp.R +import com.example.android.uamp.databinding.FragmentNowplayingBinding import com.example.android.uamp.utils.InjectorUtils import com.example.android.uamp.viewmodels.MainActivityViewModel import com.example.android.uamp.viewmodels.NowPlayingFragmentViewModel @@ -40,7 +38,8 @@ import com.example.android.uamp.viewmodels.NowPlayingFragmentViewModel.NowPlayin class NowPlayingFragment : Fragment() { private lateinit var mainActivityViewModel: MainActivityViewModel private lateinit var nowPlayingViewModel: NowPlayingFragmentViewModel - private lateinit var positionTextView: TextView + + lateinit var binding: FragmentNowplayingBinding companion object { fun newInstance() = NowPlayingFragment() @@ -50,7 +49,8 @@ class NowPlayingFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_nowplaying, container, false) + binding = FragmentNowplayingBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -72,40 +72,36 @@ class NowPlayingFragment : Fragment() { Observer { mediaItem -> updateUI(view, mediaItem) }) nowPlayingViewModel.mediaButtonRes.observe(this, Observer { res -> - view.findViewById(R.id.media_button).setImageResource(res) + binding.mediaButton.setImageResource(res) }) nowPlayingViewModel.mediaPosition.observe(this, Observer { pos -> - positionTextView.text = - NowPlayingMetadata.timestampToMSS(context, pos) + binding.position.text = NowPlayingMetadata.timestampToMSS(context, pos) }) // Setup UI handlers for buttons - view.findViewById(R.id.media_button).setOnClickListener { + binding.mediaButton.setOnClickListener { nowPlayingViewModel.mediaMetadata.value?.let { mainActivityViewModel.playMediaId(it.id) } } // Initialize playback duration and position to zero - view.findViewById(R.id.duration).text = - NowPlayingMetadata.timestampToMSS(context, 0L) - positionTextView = view.findViewById(R.id.position) - .apply { text = NowPlayingMetadata.timestampToMSS(context, 0L) } + binding.duration.text = NowPlayingMetadata.timestampToMSS(context, 0L) + binding.position.text = NowPlayingMetadata.timestampToMSS(context, 0L) } /** * Internal function used to update all UI elements except for the current item playback */ - private fun updateUI(view: View, metadata: NowPlayingFragmentViewModel.NowPlayingMetadata) { - val albumArtView = view.findViewById(R.id.albumArt) + private fun updateUI(view: View, metadata: NowPlayingMetadata) = with(binding) { if (metadata.albumArtUri == Uri.EMPTY) { - albumArtView.setImageResource(R.drawable.ic_album_black_24dp) + albumArt.setImageResource(R.drawable.ic_album_black_24dp) } else { Glide.with(view) .load(metadata.albumArtUri) - .into(albumArtView) + .into(albumArt) } - view.findViewById(R.id.title).text = metadata.title - view.findViewById(R.id.subtitle).text = metadata.subtitle - view.findViewById(R.id.duration).text = metadata.duration + title.text = metadata.title + subtitle.text = metadata.subtitle + duration.text = metadata.duration } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/android/uamp/viewmodels/NowPlayingFragmentViewModel.kt b/app/src/main/java/com/example/android/uamp/viewmodels/NowPlayingFragmentViewModel.kt index 88ab34261..7757c0e40 100644 --- a/app/src/main/java/com/example/android/uamp/viewmodels/NowPlayingFragmentViewModel.kt +++ b/app/src/main/java/com/example/android/uamp/viewmodels/NowPlayingFragmentViewModel.kt @@ -84,7 +84,7 @@ class NowPlayingFragmentViewModel( postValue(0L) } val mediaButtonRes = MutableLiveData().apply { - postValue(com.example.android.uamp.R.drawable.ic_album_black_24dp) + postValue(R.drawable.ic_album_black_24dp) } private var updatePosition = true @@ -201,4 +201,4 @@ class NowPlayingFragmentViewModel( } private const val TAG = "NowPlayingFragmentVM" -private const val POSITION_UPDATE_INTERVAL_MILLIS = 100L \ No newline at end of file +private const val POSITION_UPDATE_INTERVAL_MILLIS = 100L diff --git a/app/src/main/res/layout/fragment_mediaitem_list.xml b/app/src/main/res/layout/fragment_mediaitem_list.xml index 3f7000b74..9191e2f76 100644 --- a/app/src/main/res/layout/fragment_mediaitem_list.xml +++ b/app/src/main/res/layout/fragment_mediaitem_list.xml @@ -1,5 +1,4 @@ - -