Skip to content

Instantly share code, notes, and snippets.

View enginebai's full-sized avatar
📈
Focusing, Learning, Improving, Evolving

Engine Bai enginebai

📈
Focusing, Learning, Improving, Evolving
View GitHub Profile
@enginebai
enginebai / MovieListController.kt
Created December 14, 2020 23:38
MovieHunt blog part5. movie list controller
class MovieListController(
private val context: Context,
private val clickListener: MovieClickListener
) : PagedListEpoxyController<MovieModel>() {
private val loadMoreView = LoadMoreView_().apply { id(LoadMoreView::class.java.simpleName) }
var loadingMore = false
set(value) {
field = value
requestModelBuild()
@enginebai
enginebai / MovieListEpoxyModel.kt
Created December 14, 2020 23:20
MovieHunt blog part5 view model pattern model
@EpoxyModelClass(layout = R.layout.holder_movie_landscape)
abstract class MovieListEpoxyModel : EpoxyModelWithHolder<MovieListEpoxyModel.Holder>() {
@EpoxyAttribute
var movieId = ""
@EpoxyAttribute
var imagePoster = ""
...
@EpoxyAttribute(EpoxyAttribute.Option.DoNotHash)
var itemClickListener: (String) -> Unit = {}
@enginebai
enginebai / MovieHomeLargeBindingModel.kt
Created December 8, 2020 14:49
MovieHunt blog part5. epoxy model for data binding
MovieHomeLargeBindingModel_()
.id("${movieCategory}${this.id}")
.movieId(this.id)
.posterImage(this.getPosterUrl())
.title(this.displayTitle())
.rating(this.voteAverage)
.voteCount(this.displayVoteCount())
.duration(this.displayDuration())
.clickListener(clickListener)
@enginebai
enginebai / item_movie_home_normal.xml
Created December 8, 2020 14:48
MovieHunt blog part5. data binding xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="movieId"
type="String" />
<variable
@enginebai
enginebai / package-info.java
Created December 8, 2020 14:46
MovieHunt blog part 5 epoxy model data binding setup
@EpoxyDataBindingPattern(rClass = R.class, layoutPrefix = "item")
package com.enginebai.moviehunt;
import com.airbnb.epoxy.EpoxyDataBindingPattern;
@enginebai
enginebai / DropdownItemView.kt
Created December 8, 2020 14:43
MovieHunt blog part5. epoxy model custom view sample
@ModelView(autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT)
class DropdownItemView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
@TextProp
var itemText: CharSequence? = null
@enginebai
enginebai / MovieController.kt
Created December 8, 2020 14:38
MovieHunt blog part5. epoxy model and controller sample
class LargeEpoxyModel : EpoxyModel {
override fun bind() {
// binding implementation
}
}
class NormalEpoxyModel : EpoxyModel {
override fun bind() {
// binding implementation
}
@enginebai
enginebai / MovieHomeAdapter.kt
Created December 8, 2020 14:25
MovieHunt blog part 5. movie home adapter
data class MovieModel(
...
val largeSize: Boolean
)
class MovieHomeAdapter(private val movieList: List<MovieModel>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemViewType(position: Int): Int {
return if (movieList.get(position).largeSize) {
R.layout.item_movie_large
@enginebai
enginebai / MovieDetailViewModel.kt
Created November 2, 2020 23:05
MovieHunt blog part4. detail view model
class MovieDetailViewModel : BaseViewModel() {
private val movieRepo: MovieRepo by inject()
private val _movieDetail = MutableLiveData<MovieModel>()
val posterUrl: LiveData<String> = Transformations.map(_movieDetail) { it.getPosterUrl() }
val title: LiveData<String> = Transformations.map(_movieDetail) { it.displayTitle() }
val rating: LiveData<Float> = Transformations.map(_movieDetail) { it.display5StarsRating() }
val voteCount: LiveData<String> = Transformations.map(_movieDetail) { it.displayVoteCount() }
val duration: LiveData<String> = Transformations.map(_movieDetail) { it.displayDuration() }
val releaseDate: LiveData<String> = Transformations.map(_movieDetail) { it.displayReleaseDate() }
@enginebai
enginebai / MovieListFragment.kt
Created November 2, 2020 22:57
MovieHunt blog part4. list fragment
class MovieListFragment : BaseFragment(), MovieClickListener {
private val viewModel by sharedViewModel<MovieListViewModelV1>()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
...
viewModel.fetchMovieList(movieCategory)