Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ユーザータグが表示されない問題を修正 #37

Merged
merged 1 commit into from
Oct 23, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.ayatk.biblio.R
import com.ayatk.biblio.databinding.FragmentNovelInfoBinding
import com.ayatk.biblio.model.Novel
import com.ayatk.biblio.repository.library.LibraryRepository
Expand All @@ -33,35 +31,22 @@ class NovelInfoFragment : BaseFragment() {
Parcels.unwrap<Novel>(arguments.getParcelable(BUNDLE_ARGS_NOVEL))
}

private lateinit var viewModel: NovelInfoViewModel

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
binding = FragmentNovelInfoBinding.inflate(inflater, container, false)
binding.viewModel = NovelInfoViewModel(context, navigator, libraryRepository, novel)

novel.novelTags.map {
val tagItem = this.onGetLayoutInflater(savedInstanceState).inflate(R.layout.view_tag, null)
val textView = tagItem.findViewById<TextView>(R.id.tag)
textView.text = it
binding.tagContainer.addView(textView)
}

libraryRepository.find(novel)
.subscribe(
{
it.tag.map {
val tagItem = this.onGetLayoutInflater(savedInstanceState).inflate(
R.layout.view_tag,
null)
val textView = tagItem.findViewById<TextView>(R.id.tag)
textView.text = it
binding.userTagContainer.addView(textView)
}
}
)
viewModel = NovelInfoViewModel(navigator, libraryRepository, novel)
binding.viewModel = viewModel

return binding.root
}

override fun onResume() {
super.onResume()
viewModel.start()
}

override fun onAttach(context: Context?) {
super.onAttach(context)
component().inject(this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,31 @@

package com.ayatk.biblio.view.helper

import android.content.Context
import android.databinding.BindingAdapter
import android.databinding.BindingConversion
import android.graphics.drawable.ColorDrawable
import android.view.LayoutInflater
import android.widget.TextView
import com.ayatk.biblio.R
import com.google.android.flexbox.FlexboxLayout

object DataBindingHelper {

@JvmStatic
@BindingConversion
fun convertColorToDrawable(color: Int): ColorDrawable = ColorDrawable(color)

@JvmStatic
@BindingAdapter("tags")
fun FlexboxLayout.setTags(tags: List<String>) {
this.removeAllViews()
val inflater = this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
tags.map {
val tagItem = inflater.inflate(R.layout.view_tag, null)
val textView = tagItem.findViewById<TextView>(R.id.tag)
textView.text = it
this.addView(textView)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ package com.ayatk.biblio.viewmodel
import android.app.AlertDialog
import android.content.Context
import android.databinding.BaseObservable
import android.databinding.Bindable
import android.view.View
import android.view.inputmethod.InputMethodManager
import com.ayatk.biblio.BR
import com.ayatk.biblio.model.Library
import com.ayatk.biblio.model.Novel
import com.ayatk.biblio.repository.library.LibraryRepository
Expand All @@ -17,8 +19,7 @@ import com.ayatk.biblio.view.helper.Navigator
import mabbas007.tagsedittext.TagsEditText

class NovelInfoViewModel
constructor(private val context: Context,
private val navigator: Navigator,
constructor(private val navigator: Navigator,
private val libraryRepository: LibraryRepository,
val novel: Novel) : BaseObservable(), ViewModel {

Expand Down Expand Up @@ -48,10 +49,21 @@ constructor(private val context: Context,
// }
// }

@Bindable
var tags = listOf<String>()

fun lastUpdate(): String = FORMAT_yyyyMMdd_kkmm_JP.format(novel.lastUpdateDate)

fun url(): String = novel.publisher.url + novel.code.toLowerCase()

fun start() {
libraryRepository.find(novel)
.subscribe({ library ->
tags = library.tag
notifyPropertyChanged(BR.tags)
})
}

fun onClickWriter(@Suppress("UNUSED_PARAMETER") view: View) {
navigator.navigateToWebPage("http://mypage.syosetu.com/" + novel.writerId)
}
Expand All @@ -60,7 +72,7 @@ constructor(private val context: Context,
navigator.navigateToWebPage("http://ncode.syosetu.com/" + novel.code.toLowerCase())
}

fun onClickUserTag(@Suppress("UNUSED_PARAMETER") view: View) {
fun onClickUserTag(context: Context) {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

val editView = TagsEditText(context)
Expand All @@ -71,8 +83,9 @@ constructor(private val context: Context,
.setTitle("タグの追加")
.setView(editView)
.setPositiveButton("OK") { _, _ ->
libraryRepository.save(Library(novel = novel, tag = editView.tags))
.subscribe()
libraryRepository.save(Library(novel = novel, tag = editView.tags)).subscribe()
tags = editView.tags
notifyPropertyChanged(BR.tags)
imm.hideSoftInputFromWindow(editView.windowToken, 0)
}
.setNegativeButton("キャンセル") { _, _ ->
Expand All @@ -82,11 +95,7 @@ constructor(private val context: Context,


libraryRepository.find(novel)
.subscribe(
{ library ->
editView.setTags(*library.tag.toTypedArray())
}
)
.subscribe({ library -> editView.setTags(*library.tag.toTypedArray()) })

dialog.show()
editView.requestFocus()
Expand Down
8 changes: 5 additions & 3 deletions app/src/main/res/layout/fragment_novel_info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -148,15 +148,16 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/img_tag"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
app:layout_constraintTop_toTopOf="parent"
app:tags="@{viewModel.novel.novelTags}"/>

</android.support.constraint.ConstraintLayout>

<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:onClick="@{viewModel::onClickUserTag}"
android:onClick="@{() -> viewModel.onClickUserTag(context)}"
android:padding="@dimen/space_16dp">

<ImageView
Expand All @@ -181,7 +182,8 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/img_user_tag"
app:layout_constraintTop_toTopOf="parent"/>
app:layout_constraintTop_toTopOf="parent"
app:tags="@{viewModel.tags}"/>

</android.support.constraint.ConstraintLayout>

Expand Down
5 changes: 4 additions & 1 deletion app/src/main/res/layout/view_library_item.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,12 @@
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="@{viewModel.showTag ? android.view.View.VISIBLE : android.view.View.GONE}"
app:flexDirection="row"
app:flexWrap="wrap"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/publisher">
app:layout_constraintTop_toBottomOf="@+id/publisher"
app:tags="@{viewModel.library.tag}">

<TextView
android:id="@+id/tag_icon"
Expand Down