Newer
Older
LeftoverRecipe / app / src / main / kotlin / org / ntlab / leftoverrecipe / viewmodel / DetailRecipeViewModel.kt
MatsumotoKeiju on 10 Jul 2017 2 KB [add] menu, calendar
package org.ntlab.leftoverrecipe.viewmodel

import android.app.Activity
import android.databinding.BaseObservable
import android.databinding.BindingAdapter
import android.databinding.ObservableField
import android.databinding.ObservableInt
import android.view.View
import android.widget.ImageView
import com.bumptech.glide.Glide
import org.ntlab.leftoverrecipe.api.recipe.DetailApiClient
import org.ntlab.leftoverrecipe.api.recipe.DetailApiResponse
import org.ntlab.leftoverrecipe.api.recipe.RecipeApiResponse
import org.ntlab.leftoverrecipe.fragment.RegistDialogFragment
import org.ntlab.leftoverrecipe.model.RxBus
import org.ntlab.leftoverrecipe.model.registerInBus

/**
 * Created by matsumoto_k on 2017/05/20
 */
class DetailRecipeViewModel(var context: Activity, var recipeData: RecipeApiResponse.RecipeData) : BaseObservable() {
    val recipeTitle = ObservableField<String>()
    val detailTextView = ObservableField<String>()
    val imageUrl = ObservableField<String>()
    val stepText = ObservableField<String>()
    val anyone = ObservableField<String>()
    val material = ObservableField<String>()
    var descriptionText: ObservableField<String> = ObservableField()

    val loadVisible = ObservableInt(View.VISIBLE)
    val fabVisible = ObservableInt(View.GONE)

    var imageLoad = false
    var recipeLoad = false

    object CustomBindingAdapter {
        @JvmStatic @BindingAdapter("imageUrl")
        fun imageUrl(imageView: ImageView, url: String) {
            Glide.with(imageView.context).load(url).into(imageView)
        }
    }

    init {
        recipeTitle.set(recipeData.recipeTitle)
        imageUrl.set(recipeData.foodImageUrl)

        load(recipeData.recipeUrl!!)

        RxBus.observe<DetailApiResponse>().subscribe {
            var stepText = ""
            var material = ""
            var count = 1
            for (data in it.howto) {
                stepText += "(${count})\n${data.step}\n\n"
                count++
            }
            for (data in it.material) {
                material += "${data.amount}\n${data.material}\n\n"
            }
            this.stepText.set(stepText)
            this.anyone.set(it.anyone)
            this.material.set(material)
            this.descriptionText.set(recipeData.recipeDescription)

            fabVisible.set(View.VISIBLE)
            loadVisible.set(View.GONE)
        }.registerInBus(this)
    }

    fun load(recipeUrl: String) {
        val recipeClient = DetailApiClient
        recipeClient.getRecipeData(recipeUrl)
    }

    fun onClickFab(view: View) {
        val dialog = RegistDialogFragment(recipeData)
        dialog.show(context.fragmentManager, "hoge")
    }
}