Skip to content

Commit 995bff1

Browse files
author
Arvind Meshram
committed
Initial commit
1 parent bc9eeea commit 995bff1

30 files changed

+653
-120
lines changed

.idea/vcs.xml

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/arvind/moviesapp/adapter/CustomAdapterMostPopular.kt

+9-2
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ import android.content.Context
55
import android.view.LayoutInflater
66
import android.view.View
77
import android.view.ViewGroup
8+
import androidx.navigation.findNavController
89
import androidx.paging.PagingDataAdapter
910
import androidx.recyclerview.widget.DiffUtil
1011
import androidx.recyclerview.widget.RecyclerView
1112
import androidx.transition.AutoTransition
1213
import androidx.transition.TransitionManager
1314
import com.arvind.moviesapp.databinding.ItemsMostPopularTvshowsBinding
1415
import com.arvind.moviesapp.response.popular.ResponseTv_shows
16+
import com.arvind.moviesapp.view.home.HomeFragmentDirections
1517

1618

1719
class CustomAdapterMostPopular(
@@ -40,8 +42,13 @@ class CustomAdapterMostPopular(
4042
inner class MyViewHolder(private val binding: ItemsMostPopularTvshowsBinding) :
4143
RecyclerView.ViewHolder(binding.root) {
4244

43-
fun bind(item: ResponseTv_shows) = with(binding) {
44-
mostpopulartvshows = item
45+
fun bind(responsetvShows: ResponseTv_shows) = with(binding) {
46+
mostpopulartvshows = responsetvShows
47+
binding.root.setOnClickListener { v ->
48+
val direction = HomeFragmentDirections
49+
.actionHomeFragmentToDetailsFragment(responsetvShows)
50+
v.findNavController().navigate(direction)
51+
}
4552

4653
}
4754
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.arvind.moviesapp.adapter
2+
3+
import android.view.LayoutInflater
4+
import android.view.ViewGroup
5+
import androidx.databinding.DataBindingUtil
6+
import androidx.recyclerview.widget.RecyclerView
7+
import com.arvind.moviesapp.R
8+
import com.arvind.moviesapp.databinding.ItemContainerEpisodeBinding
9+
import com.arvind.moviesapp.response.episode.ResponseEpisodes
10+
11+
class CustomEpisodeAdapter( private var episodeList: List<ResponseEpisodes>? = null) : RecyclerView.Adapter<CustomEpisodeAdapter.EpisodeViewHolder>() {
12+
13+
private var layoutInflater: LayoutInflater? = null
14+
15+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EpisodeViewHolder {
16+
if (layoutInflater == null) {
17+
layoutInflater = LayoutInflater.from(parent.context)
18+
}
19+
val itemContainerEpisodeBinding: ItemContainerEpisodeBinding = DataBindingUtil.inflate(
20+
layoutInflater!!, R.layout.item_container_episode, parent, false
21+
)
22+
return EpisodeViewHolder(itemContainerEpisodeBinding)
23+
}
24+
25+
override fun onBindViewHolder(holder: EpisodeViewHolder, position: Int) {
26+
holder.bindEpisode(episodeList!![position])
27+
}
28+
29+
override fun getItemCount(): Int {
30+
return episodeList!!.size
31+
}
32+
33+
34+
class EpisodeViewHolder(itemContainerEpisodeBinding: ItemContainerEpisodeBinding) :
35+
RecyclerView.ViewHolder(itemContainerEpisodeBinding.getRoot()) {
36+
private val itemContainerEpisodeBinding: ItemContainerEpisodeBinding
37+
fun bindEpisode(episode: ResponseEpisodes) {
38+
var title = "S"
39+
var season: String = java.lang.String.valueOf(episode.season)
40+
if (season.length == 1) {
41+
season = "0$season"
42+
}
43+
var episodeNumber: String = java.lang.String.valueOf(episode.episode)
44+
if (episodeNumber.length == 1) {
45+
episodeNumber = "0$episodeNumber"
46+
}
47+
episodeNumber = "E$episodeNumber"
48+
title = title + season + episodeNumber
49+
itemContainerEpisodeBinding.setTitle(title)
50+
itemContainerEpisodeBinding.name = episode.name
51+
itemContainerEpisodeBinding.airDate = episode.air_date
52+
}
53+
54+
init {
55+
this.itemContainerEpisodeBinding = itemContainerEpisodeBinding
56+
}
57+
}
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.arvind.moviesapp.adapter
2+
3+
import android.view.LayoutInflater
4+
import android.view.ViewGroup
5+
import androidx.databinding.DataBindingUtil
6+
import androidx.recyclerview.widget.RecyclerView
7+
import com.arvind.moviesapp.R
8+
import com.arvind.moviesapp.databinding.ItemContainerSliderImageBinding
9+
10+
class ImageSliderAdapter(private var sliderImages: List<String>) :
11+
RecyclerView.Adapter<ImageSliderAdapter.ImageSliderViewHolder>() {
12+
private var layoutInflater: LayoutInflater? = null
13+
14+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImageSliderViewHolder {
15+
if (layoutInflater == null) {
16+
layoutInflater = LayoutInflater.from(parent.context)
17+
}
18+
val itemContainerSliderImageBinding: ItemContainerSliderImageBinding =
19+
DataBindingUtil.inflate(
20+
layoutInflater!!, R.layout.item_container_slider_image, parent, false
21+
)
22+
return ImageSliderViewHolder(itemContainerSliderImageBinding)
23+
}
24+
25+
override fun onBindViewHolder(holder: ImageSliderViewHolder, position: Int) {
26+
holder.bindSliderImage(sliderImages[position])
27+
}
28+
29+
override fun getItemCount(): Int {
30+
return sliderImages.size
31+
}
32+
33+
class ImageSliderViewHolder(itemContainerSliderImageBinding: ItemContainerSliderImageBinding) :
34+
RecyclerView.ViewHolder(itemContainerSliderImageBinding.getRoot()) {
35+
private val itemContainerSliderImageBinding: ItemContainerSliderImageBinding
36+
fun bindSliderImage(imageURL: String?) {
37+
itemContainerSliderImageBinding.setImageURL(imageURL)
38+
}
39+
40+
init {
41+
this.itemContainerSliderImageBinding = itemContainerSliderImageBinding
42+
}
43+
}
44+
}

app/src/main/java/com/arvind/moviesapp/bindingadapters/BindingAdapter.kt

+25
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,31 @@ class BindingAdapter @Inject constructor() {
5151
}
5252
}
5353
}
54+
55+
56+
@SuppressLint("SetTextI18n")
57+
@BindingAdapter("air_date")
58+
@JvmStatic
59+
fun SetairdateFormat(textview: TextView, air_date: String?) {
60+
if (air_date != null) {
61+
val parts = air_date.split("T00:00:00.000Z".toRegex()).toTypedArray()
62+
val datesplitnexthearingdate = parts[0]
63+
64+
@SuppressLint("SimpleDateFormat") val dateFormatprev =
65+
SimpleDateFormat("yyyy-MM-dd")
66+
var d: Date? = null
67+
try {
68+
d = dateFormatprev.parse(datesplitnexthearingdate)
69+
@SuppressLint("SimpleDateFormat") val dateFormat =
70+
SimpleDateFormat("dd MMM yyyy")
71+
val formatconvertDate = dateFormat.format(d)
72+
textview.setText("Air Date:" + formatconvertDate)
73+
} catch (e: ParseException) {
74+
e.printStackTrace()
75+
}
76+
}
77+
}
78+
5479
}
5580

5681
}

app/src/main/java/com/arvind/moviesapp/di/AppModule.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,8 @@ object AppModule {
8383
@Provides
8484
fun providesTvShowsDetailsRepository(
8585
apiService: ApiService,
86-
application: Application,
87-
id: String
8886
): TvShowsDetailsRepository {
89-
return TvShowsDetailsRepository(apiService, application, id)
87+
return TvShowsDetailsRepository(apiService)
9088
}
9189

9290
}

app/src/main/java/com/arvind/moviesapp/repository/TvShowsDetailsRepository.kt

+13-32
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,37 @@
11
package com.arvind.moviesapp.repository
22

33
import android.app.Application
4-
import android.util.Log
4+
import androidx.lifecycle.LiveData
55
import androidx.lifecycle.MutableLiveData
66
import com.arvind.moviesapp.model.showdetails.DataModelShowDetailsBase
7-
import com.arvind.moviesapp.response.showdetails.ResponseTvShowDetails
87
import com.arvind.moviesapp.webapi.ApiService
98
import retrofit2.Call
109
import retrofit2.Callback
1110
import retrofit2.Response
12-
import java.util.ArrayList
11+
import java.util.*
1312
import javax.inject.Inject
1413

1514

1615
class TvShowsDetailsRepository @Inject constructor(
17-
private val apiService: ApiService, application: Application, private val id: String
16+
private val apiService: ApiService
1817
) {
1918

20-
private var tvShowsArrayList = ArrayList<ResponseTvShowDetails>()
21-
private val mutableLiveData = MutableLiveData<List<ResponseTvShowDetails>>()
22-
23-
fun getMutableLiveData(): MutableLiveData<List<ResponseTvShowDetails>> {
24-
val userDataService = apiService
25-
val call = userDataService.getTVShowDetails(id)
26-
27-
call.enqueue(object : Callback<DataModelShowDetailsBase> {
28-
internal var message: String? = null
29-
19+
fun getTVShowDetails(id: String?): LiveData<DataModelShowDetailsBase?>? {
20+
val data: MutableLiveData<DataModelShowDetailsBase?> =
21+
MutableLiveData<DataModelShowDetailsBase?>()
22+
apiService.getTVShowDetails(id).enqueue(object : Callback<DataModelShowDetailsBase?> {
3023
override fun onResponse(
31-
call: Call<DataModelShowDetailsBase>,
32-
response: Response<DataModelShowDetailsBase>
24+
call: Call<DataModelShowDetailsBase?>,
25+
response: Response<DataModelShowDetailsBase?>
3326
) {
34-
35-
if (response.isSuccessful()) {
36-
val apiresponse: DataModelShowDetailsBase? = response.body()
37-
if (apiresponse != null) {
38-
tvShowsArrayList =
39-
apiresponse.tvShow as ArrayList<ResponseTvShowDetails>
40-
mutableLiveData.setValue(tvShowsArrayList)
41-
}
42-
}
43-
27+
data.setValue(response.body())
4428
}
4529

46-
override fun onFailure(call: Call<DataModelShowDetailsBase>, t: Throwable) {
47-
t.printStackTrace()
48-
Log.d(TAG, t.message!!)
49-
30+
override fun onFailure(call: Call<DataModelShowDetailsBase?>, t: Throwable) {
31+
data.setValue(null)
5032
}
5133
})
52-
53-
return mutableLiveData
34+
return data
5435
}
5536

5637
companion object {

app/src/main/java/com/arvind/moviesapp/response/showdetails/ResponseEpisodes.kt app/src/main/java/com/arvind/moviesapp/response/episode/ResponseEpisodes.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.arvind.moviesapp.response.showdetails
1+
package com.arvind.moviesapp.response.episode
22

33
import com.google.gson.annotations.SerializedName
44

Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package com.arvind.moviesapp.response.popular
22

3+
import android.os.Parcelable
34
import com.google.gson.annotations.SerializedName
5+
import kotlinx.android.parcel.Parcelize
46

5-
data class ResponseTv_shows(@SerializedName("id") val id : Int,
6-
@SerializedName("name") val name : String,
7-
@SerializedName("permalink") val permalink : String,
8-
@SerializedName("start_date") val start_date : String,
9-
@SerializedName("end_date") val end_date : String,
10-
@SerializedName("country") val country : String,
11-
@SerializedName("network") val network : String,
12-
@SerializedName("status") val status : String,
13-
@SerializedName("image_thumbnail_path") val image_thumbnail_path : String)
7+
@Parcelize
8+
data class ResponseTv_shows(
9+
@SerializedName("id") val id: String,
10+
@SerializedName("name") val name: String,
11+
@SerializedName("permalink") val permalink: String,
12+
@SerializedName("start_date") val start_date: String,
13+
@SerializedName("end_date") val end_date: String,
14+
@SerializedName("country") val country: String,
15+
@SerializedName("network") val network: String,
16+
@SerializedName("status") val status: String,
17+
@SerializedName("image_thumbnail_path") val image_thumbnail_path: String
18+
) : Parcelable

app/src/main/java/com/arvind/moviesapp/response/showdetails/ResponseTvShowDetails.kt

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.arvind.moviesapp.response.showdetails
22

3+
import com.arvind.moviesapp.response.episode.ResponseEpisodes
34
import com.google.gson.annotations.SerializedName
45

56
data class ResponseTvShowDetails(@SerializedName("id") val id : Int,

0 commit comments

Comments
 (0)