mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	Replace more Kotlin synthetics
This commit is contained in:
		| @@ -491,13 +491,13 @@ open class BrowseSourceController(bundle: Bundle) : | ||||
|      * @param manga the manga to find. | ||||
|      * @return the holder of the manga or null if it's not bound. | ||||
|      */ | ||||
|     private fun getHolder(manga: Manga): SourceHolder? { | ||||
|     private fun getHolder(manga: Manga): SourceHolder<*>? { | ||||
|         val adapter = adapter ?: return null | ||||
|  | ||||
|         adapter.allBoundViewHolders.forEach { holder -> | ||||
|             val item = adapter.getItem(holder.bindingAdapterPosition) as? SourceItem | ||||
|             if (item != null && item.manga.id!! == manga.id!!) { | ||||
|                 return holder as SourceHolder | ||||
|                 return holder as SourceHolder<*> | ||||
|             } | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -18,9 +18,9 @@ import eu.kanade.tachiyomi.widget.StateImageViewTarget | ||||
|  * @constructor creates a new catalogue holder. | ||||
|  */ | ||||
| class SourceComfortableGridHolder(private val view: View, private val adapter: FlexibleAdapter<*>) : | ||||
|     SourceGridHolder(view, adapter) { | ||||
|     SourceHolder<SourceComfortableGridItemBinding>(view, adapter) { | ||||
|  | ||||
|     private val binding = SourceComfortableGridItemBinding.bind(view) | ||||
|     override val binding = SourceComfortableGridItemBinding.bind(view) | ||||
|  | ||||
|     /** | ||||
|      * Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this | ||||
|   | ||||
| @@ -18,9 +18,9 @@ import eu.kanade.tachiyomi.widget.StateImageViewTarget | ||||
|  * @constructor creates a new catalogue holder. | ||||
|  */ | ||||
| open class SourceGridHolder(private val view: View, private val adapter: FlexibleAdapter<*>) : | ||||
|     SourceHolder(view, adapter) { | ||||
|     SourceHolder<SourceComfortableGridItemBinding>(view, adapter) { | ||||
|  | ||||
|     private val binding = SourceComfortableGridItemBinding.bind(view) | ||||
|     override val binding = SourceComfortableGridItemBinding.bind(view) | ||||
|  | ||||
|     /** | ||||
|      * Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package eu.kanade.tachiyomi.ui.browse.source.browse | ||||
|  | ||||
| import android.view.View | ||||
| import androidx.viewbinding.ViewBinding | ||||
| import eu.davidea.flexibleadapter.FlexibleAdapter | ||||
| import eu.davidea.viewholders.FlexibleViewHolder | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| @@ -11,9 +12,11 @@ import eu.kanade.tachiyomi.data.database.models.Manga | ||||
|  * @param view the inflated view for this holder. | ||||
|  * @param adapter the adapter handling this holder. | ||||
|  */ | ||||
| abstract class SourceHolder(view: View, adapter: FlexibleAdapter<*>) : | ||||
| abstract class SourceHolder<VB : ViewBinding>(view: View, adapter: FlexibleAdapter<*>) : | ||||
|     FlexibleViewHolder(view, adapter) { | ||||
|  | ||||
|     abstract val binding: VB | ||||
|  | ||||
|     /** | ||||
|      * Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this | ||||
|      * holder with the given manga. | ||||
|   | ||||
| @@ -13,12 +13,12 @@ import eu.davidea.flexibleadapter.items.IFlexible | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceValues.DisplayMode | ||||
| import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding | ||||
| import eu.kanade.tachiyomi.databinding.SourceCompactGridItemBinding | ||||
| import eu.kanade.tachiyomi.widget.AutofitRecyclerView | ||||
| import kotlinx.android.synthetic.main.source_compact_grid_item.view.card | ||||
| import kotlinx.android.synthetic.main.source_compact_grid_item.view.gradient | ||||
|  | ||||
| class SourceItem(val manga: Manga, private val displayMode: Preference<DisplayMode>) : | ||||
|     AbstractFlexibleItem<SourceHolder>() { | ||||
|     AbstractFlexibleItem<SourceHolder<*>>() { | ||||
|  | ||||
|     override fun getLayoutRes(): Int { | ||||
|         return when (displayMode.get()) { | ||||
| @@ -31,17 +31,18 @@ class SourceItem(val manga: Manga, private val displayMode: Preference<DisplayMo | ||||
|     override fun createViewHolder( | ||||
|         view: View, | ||||
|         adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>> | ||||
|     ): SourceHolder { | ||||
|     ): SourceHolder<*> { | ||||
|         return when (displayMode.get()) { | ||||
|             DisplayMode.COMPACT_GRID -> { | ||||
|                 val binding = SourceCompactGridItemBinding.bind(view) | ||||
|                 val parent = adapter.recyclerView as AutofitRecyclerView | ||||
|                 val coverHeight = parent.itemWidth / 3 * 4 | ||||
|                 view.apply { | ||||
|                     card.layoutParams = FrameLayout.LayoutParams( | ||||
|                     binding.card.layoutParams = FrameLayout.LayoutParams( | ||||
|                         MATCH_PARENT, | ||||
|                         coverHeight | ||||
|                     ) | ||||
|                     gradient.layoutParams = FrameLayout.LayoutParams( | ||||
|                     binding.gradient.layoutParams = FrameLayout.LayoutParams( | ||||
|                         MATCH_PARENT, | ||||
|                         coverHeight / 2, | ||||
|                         Gravity.BOTTOM | ||||
| @@ -50,10 +51,11 @@ class SourceItem(val manga: Manga, private val displayMode: Preference<DisplayMo | ||||
|                 SourceGridHolder(view, adapter) | ||||
|             } | ||||
|             DisplayMode.COMFORTABLE_GRID -> { | ||||
|                 val binding = SourceComfortableGridItemBinding.bind(view) | ||||
|                 val parent = adapter.recyclerView as AutofitRecyclerView | ||||
|                 val coverHeight = parent.itemWidth / 3 * 4 | ||||
|                 view.apply { | ||||
|                     card.layoutParams = ConstraintLayout.LayoutParams( | ||||
|                     binding.card.layoutParams = ConstraintLayout.LayoutParams( | ||||
|                         MATCH_PARENT, | ||||
|                         coverHeight | ||||
|                     ) | ||||
| @@ -68,7 +70,7 @@ class SourceItem(val manga: Manga, private val displayMode: Preference<DisplayMo | ||||
|  | ||||
|     override fun bindViewHolder( | ||||
|         adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>, | ||||
|         holder: SourceHolder, | ||||
|         holder: SourceHolder<*>, | ||||
|         position: Int, | ||||
|         payloads: List<Any?>? | ||||
|     ) { | ||||
|   | ||||
| @@ -22,9 +22,9 @@ import eu.kanade.tachiyomi.util.system.getResourceColor | ||||
|  * @constructor creates a new catalogue holder. | ||||
|  */ | ||||
| class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) : | ||||
|     SourceHolder(view, adapter) { | ||||
|     SourceHolder<SourceListItemBinding>(view, adapter) { | ||||
|  | ||||
|     private val binding = SourceListItemBinding.bind(view) | ||||
|     override val binding = SourceListItemBinding.bind(view) | ||||
|  | ||||
|     private val favoriteColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f) | ||||
|     private val unfavoriteColor = view.context.getResourceColor(R.attr.colorOnSurface) | ||||
|   | ||||
| @@ -183,7 +183,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att | ||||
|                 val position = adapter.indexOf(manga) | ||||
|                 if (position != -1 && !adapter.isSelected(position)) { | ||||
|                     adapter.toggleSelection(position) | ||||
|                     (recycler.findViewHolderForItemId(manga.id!!) as? LibraryHolder)?.toggleActivation() | ||||
|                     (recycler.findViewHolderForItemId(manga.id!!) as? LibraryHolder<*>)?.toggleActivation() | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -227,7 +227,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att | ||||
|         val position = adapter.indexOf(manga) | ||||
|         if (position != -1) { | ||||
|             adapter.toggleSelection(position) | ||||
|             (recycler.findViewHolderForItemId(manga.id!!) as? LibraryHolder)?.toggleActivation() | ||||
|             (recycler.findViewHolderForItemId(manga.id!!) as? LibraryHolder<*>)?.toggleActivation() | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -23,9 +23,9 @@ import eu.kanade.tachiyomi.util.isLocal | ||||
| class LibraryComfortableGridHolder( | ||||
|     private val view: View, | ||||
|     adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>> | ||||
| ) : LibraryCompactGridHolder(view, adapter) { | ||||
| ) : LibraryHolder<SourceComfortableGridItemBinding>(view, adapter) { | ||||
|  | ||||
|     private val binding = SourceComfortableGridItemBinding.bind(view) | ||||
|     override val binding = SourceComfortableGridItemBinding.bind(view) | ||||
|  | ||||
|     /** | ||||
|      * Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this | ||||
|   | ||||
| @@ -21,9 +21,9 @@ import eu.kanade.tachiyomi.util.isLocal | ||||
| open class LibraryCompactGridHolder( | ||||
|     private val view: View, | ||||
|     private val adapter: FlexibleAdapter<*> | ||||
| ) : LibraryHolder(view, adapter) { | ||||
| ) : LibraryHolder<SourceCompactGridItemBinding>(view, adapter) { | ||||
|  | ||||
|     private val binding = SourceCompactGridItemBinding.bind(view) | ||||
|     override val binding = SourceCompactGridItemBinding.bind(view) | ||||
|  | ||||
|     /** | ||||
|      * Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package eu.kanade.tachiyomi.ui.library | ||||
|  | ||||
| import android.view.View | ||||
| import androidx.viewbinding.ViewBinding | ||||
| import eu.davidea.flexibleadapter.FlexibleAdapter | ||||
| import eu.davidea.viewholders.FlexibleViewHolder | ||||
|  | ||||
| @@ -11,11 +12,13 @@ import eu.davidea.viewholders.FlexibleViewHolder | ||||
|  * @param listener a listener to react to the single tap and long tap events. | ||||
|  */ | ||||
|  | ||||
| abstract class LibraryHolder( | ||||
| abstract class LibraryHolder<VB : ViewBinding>( | ||||
|     view: View, | ||||
|     adapter: FlexibleAdapter<*> | ||||
| ) : FlexibleViewHolder(view, adapter) { | ||||
|  | ||||
|     abstract val binding: VB | ||||
|  | ||||
|     /** | ||||
|      * Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this | ||||
|      * holder with the given manga. | ||||
|   | ||||
| @@ -14,15 +14,15 @@ import eu.davidea.flexibleadapter.items.IFlexible | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.database.models.LibraryManga | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceValues.DisplayMode | ||||
| import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding | ||||
| import eu.kanade.tachiyomi.databinding.SourceCompactGridItemBinding | ||||
| import eu.kanade.tachiyomi.source.SourceManager | ||||
| import eu.kanade.tachiyomi.widget.AutofitRecyclerView | ||||
| import kotlinx.android.synthetic.main.source_compact_grid_item.view.card | ||||
| import kotlinx.android.synthetic.main.source_compact_grid_item.view.gradient | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|  | ||||
| class LibraryItem(val manga: LibraryManga, private val libraryDisplayMode: Preference<DisplayMode>) : | ||||
|     AbstractFlexibleItem<LibraryHolder>(), IFilterable<String> { | ||||
|     AbstractFlexibleItem<LibraryHolder<*>>(), IFilterable<String> { | ||||
|  | ||||
|     private val sourceManager: SourceManager = Injekt.get() | ||||
|  | ||||
| @@ -37,14 +37,15 @@ class LibraryItem(val manga: LibraryManga, private val libraryDisplayMode: Prefe | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): LibraryHolder { | ||||
|     override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): LibraryHolder<*> { | ||||
|         return when (libraryDisplayMode.get()) { | ||||
|             DisplayMode.COMPACT_GRID -> { | ||||
|                 val binding = SourceCompactGridItemBinding.bind(view) | ||||
|                 val parent = adapter.recyclerView as AutofitRecyclerView | ||||
|                 val coverHeight = parent.itemWidth / 3 * 4 | ||||
|                 view.apply { | ||||
|                     card.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, coverHeight) | ||||
|                     gradient.layoutParams = FrameLayout.LayoutParams( | ||||
|                     binding.card.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, coverHeight) | ||||
|                     binding.gradient.layoutParams = FrameLayout.LayoutParams( | ||||
|                         MATCH_PARENT, | ||||
|                         coverHeight / 2, | ||||
|                         Gravity.BOTTOM | ||||
| @@ -53,10 +54,11 @@ class LibraryItem(val manga: LibraryManga, private val libraryDisplayMode: Prefe | ||||
|                 LibraryCompactGridHolder(view, adapter) | ||||
|             } | ||||
|             DisplayMode.COMFORTABLE_GRID -> { | ||||
|                 val binding = SourceComfortableGridItemBinding.bind(view) | ||||
|                 val parent = adapter.recyclerView as AutofitRecyclerView | ||||
|                 val coverHeight = parent.itemWidth / 3 * 4 | ||||
|                 view.apply { | ||||
|                     card.layoutParams = ConstraintLayout.LayoutParams( | ||||
|                     binding.card.layoutParams = ConstraintLayout.LayoutParams( | ||||
|                         MATCH_PARENT, | ||||
|                         coverHeight | ||||
|                     ) | ||||
| @@ -71,7 +73,7 @@ class LibraryItem(val manga: LibraryManga, private val libraryDisplayMode: Prefe | ||||
|  | ||||
|     override fun bindViewHolder( | ||||
|         adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>, | ||||
|         holder: LibraryHolder, | ||||
|         holder: LibraryHolder<*>, | ||||
|         position: Int, | ||||
|         payloads: List<Any?>? | ||||
|     ) { | ||||
|   | ||||
| @@ -22,13 +22,12 @@ import eu.kanade.tachiyomi.util.isLocal | ||||
|  * @param listener a listener to react to single tap and long tap events. | ||||
|  * @constructor creates a new library holder. | ||||
|  */ | ||||
|  | ||||
| class LibraryListHolder( | ||||
|     private val view: View, | ||||
|     private val adapter: FlexibleAdapter<*> | ||||
| ) : LibraryHolder(view, adapter) { | ||||
| ) : LibraryHolder<SourceListItemBinding>(view, adapter) { | ||||
|  | ||||
|     private val binding = SourceListItemBinding.bind(view) | ||||
|     override val binding = SourceListItemBinding.bind(view) | ||||
|  | ||||
|     /** | ||||
|      * Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this | ||||
|   | ||||
| @@ -9,16 +9,8 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.glide.GlideApp | ||||
| import eu.kanade.tachiyomi.data.track.model.TrackSearch | ||||
| import eu.kanade.tachiyomi.databinding.TrackSearchItemBinding | ||||
| import eu.kanade.tachiyomi.util.view.inflate | ||||
| import kotlinx.android.synthetic.main.track_search_item.view.track_search_cover | ||||
| import kotlinx.android.synthetic.main.track_search_item.view.track_search_start | ||||
| import kotlinx.android.synthetic.main.track_search_item.view.track_search_start_result | ||||
| import kotlinx.android.synthetic.main.track_search_item.view.track_search_status | ||||
| import kotlinx.android.synthetic.main.track_search_item.view.track_search_status_result | ||||
| import kotlinx.android.synthetic.main.track_search_item.view.track_search_summary | ||||
| import kotlinx.android.synthetic.main.track_search_item.view.track_search_title | ||||
| import kotlinx.android.synthetic.main.track_search_item.view.track_search_type | ||||
| import kotlinx.android.synthetic.main.track_search_item.view.track_search_type_result | ||||
|  | ||||
| class TrackSearchAdapter(context: Context) : | ||||
|     ArrayAdapter<TrackSearch>(context, R.layout.track_search_item, mutableListOf<TrackSearch>()) { | ||||
| @@ -49,37 +41,39 @@ class TrackSearchAdapter(context: Context) : | ||||
|  | ||||
|     class TrackSearchHolder(private val view: View) { | ||||
|  | ||||
|         private val binding = TrackSearchItemBinding.bind(view) | ||||
|  | ||||
|         fun onSetValues(track: TrackSearch) { | ||||
|             view.track_search_title.text = track.title | ||||
|             view.track_search_summary.text = track.summary | ||||
|             GlideApp.with(view.context).clear(view.track_search_cover) | ||||
|             binding.trackSearchTitle.text = track.title | ||||
|             binding.trackSearchSummary.text = track.summary | ||||
|             GlideApp.with(view.context).clear(binding.trackSearchCover) | ||||
|             if (!track.cover_url.isEmpty()) { | ||||
|                 GlideApp.with(view.context) | ||||
|                     .load(track.cover_url) | ||||
|                     .diskCacheStrategy(DiskCacheStrategy.RESOURCE) | ||||
|                     .centerCrop() | ||||
|                     .into(view.track_search_cover) | ||||
|                     .into(binding.trackSearchCover) | ||||
|             } | ||||
|  | ||||
|             if (track.publishing_status.isBlank()) { | ||||
|                 view.track_search_status.isVisible = false | ||||
|                 view.track_search_status_result.isVisible = false | ||||
|                 binding.trackSearchStatus.isVisible = false | ||||
|                 binding.trackSearchStatusResult.isVisible = false | ||||
|             } else { | ||||
|                 view.track_search_status_result.text = track.publishing_status.capitalize() | ||||
|                 binding.trackSearchStatusResult.text = track.publishing_status.capitalize() | ||||
|             } | ||||
|  | ||||
|             if (track.publishing_type.isBlank()) { | ||||
|                 view.track_search_type.isVisible = false | ||||
|                 view.track_search_type_result.isVisible = false | ||||
|                 binding.trackSearchType.isVisible = false | ||||
|                 binding.trackSearchTypeResult.isVisible = false | ||||
|             } else { | ||||
|                 view.track_search_type_result.text = track.publishing_type.capitalize() | ||||
|                 binding.trackSearchTypeResult.text = track.publishing_type.capitalize() | ||||
|             } | ||||
|  | ||||
|             if (track.start_date.isBlank()) { | ||||
|                 view.track_search_start.isVisible = false | ||||
|                 view.track_search_start_result.isVisible = false | ||||
|                 binding.trackSearchStart.isVisible = false | ||||
|                 binding.trackSearchStartResult.isVisible = false | ||||
|             } else { | ||||
|                 view.track_search_start_result.text = track.start_date | ||||
|                 binding.trackSearchStartResult.text = track.start_date | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.manga.track | ||||
|  | ||||
| import android.app.Dialog | ||||
| import android.os.Bundle | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import androidx.core.os.bundleOf | ||||
| import androidx.core.view.isInvisible | ||||
| @@ -13,10 +14,8 @@ import eu.kanade.tachiyomi.data.database.models.Track | ||||
| import eu.kanade.tachiyomi.data.track.TrackManager | ||||
| import eu.kanade.tachiyomi.data.track.TrackService | ||||
| import eu.kanade.tachiyomi.data.track.model.TrackSearch | ||||
| import eu.kanade.tachiyomi.databinding.TrackSearchDialogBinding | ||||
| import eu.kanade.tachiyomi.ui.base.controller.DialogController | ||||
| import kotlinx.android.synthetic.main.track_search_dialog.view.progress | ||||
| import kotlinx.android.synthetic.main.track_search_dialog.view.track_search | ||||
| import kotlinx.android.synthetic.main.track_search_dialog.view.track_search_list | ||||
| import kotlinx.coroutines.flow.debounce | ||||
| import kotlinx.coroutines.flow.filter | ||||
| import kotlinx.coroutines.flow.launchIn | ||||
| @@ -29,7 +28,7 @@ import java.util.concurrent.TimeUnit | ||||
|  | ||||
| class TrackSearchDialog : DialogController { | ||||
|  | ||||
|     private var dialogView: View? = null | ||||
|     private var binding: TrackSearchDialogBinding? = null | ||||
|  | ||||
|     private var adapter: TrackSearchAdapter? = null | ||||
|  | ||||
| @@ -53,13 +52,13 @@ class TrackSearchDialog : DialogController { | ||||
|     } | ||||
|  | ||||
|     override fun onCreateDialog(savedViewState: Bundle?): Dialog { | ||||
|         binding = TrackSearchDialogBinding.inflate(LayoutInflater.from(activity!!)) | ||||
|         val dialog = MaterialDialog(activity!!) | ||||
|             .customView(R.layout.track_search_dialog) | ||||
|             .customView(view = binding!!.root) | ||||
|             .positiveButton(android.R.string.ok) { onPositiveButtonClick() } | ||||
|             .negativeButton(android.R.string.cancel) | ||||
|             .neutralButton(R.string.action_remove) { onRemoveButtonClick() } | ||||
|  | ||||
|         dialogView = dialog.view | ||||
|         onViewCreated(dialog.view, savedViewState) | ||||
|  | ||||
|         return dialog | ||||
| @@ -69,12 +68,12 @@ class TrackSearchDialog : DialogController { | ||||
|         // Create adapter | ||||
|         val adapter = TrackSearchAdapter(view.context) | ||||
|         this.adapter = adapter | ||||
|         view.track_search_list.adapter = adapter | ||||
|         binding!!.trackSearchList.adapter = adapter | ||||
|  | ||||
|         // Set listeners | ||||
|         selectedItem = null | ||||
|  | ||||
|         view.track_search_list.itemClicks() | ||||
|         binding!!.trackSearchList.itemClicks() | ||||
|             .onEach { position -> | ||||
|                 selectedItem = adapter.getItem(position) | ||||
|             } | ||||
| @@ -83,20 +82,20 @@ class TrackSearchDialog : DialogController { | ||||
|         // Do an initial search based on the manga's title | ||||
|         if (savedState == null) { | ||||
|             val title = trackController.presenter.manga.title | ||||
|             view.track_search.append(title) | ||||
|             binding!!.trackSearch.append(title) | ||||
|             search(title) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     override fun onDestroyView(view: View) { | ||||
|         super.onDestroyView(view) | ||||
|         dialogView = null | ||||
|         binding = null | ||||
|         adapter = null | ||||
|     } | ||||
|  | ||||
|     override fun onAttach(view: View) { | ||||
|         super.onAttach(view) | ||||
|         dialogView!!.track_search.textChanges() | ||||
|         binding!!.trackSearch.textChanges() | ||||
|             .debounce(TimeUnit.SECONDS.toMillis(1)) | ||||
|             .filter { it.isNotBlank() } | ||||
|             .onEach { search(it.toString()) } | ||||
| @@ -104,24 +103,24 @@ class TrackSearchDialog : DialogController { | ||||
|     } | ||||
|  | ||||
|     private fun search(query: String) { | ||||
|         val view = dialogView ?: return | ||||
|         view.progress.isVisible = true | ||||
|         view.track_search_list.isInvisible = true | ||||
|         val binding = binding ?: return | ||||
|         binding.progress.isVisible = true | ||||
|         binding.trackSearchList.isInvisible = true | ||||
|         trackController.presenter.search(query, service) | ||||
|     } | ||||
|  | ||||
|     fun onSearchResults(results: List<TrackSearch>) { | ||||
|         selectedItem = null | ||||
|         val view = dialogView ?: return | ||||
|         view.progress.isInvisible = true | ||||
|         view.track_search_list.isVisible = true | ||||
|         val binding = binding ?: return | ||||
|         binding.progress.isInvisible = true | ||||
|         binding.trackSearchList.isVisible = true | ||||
|         adapter?.setItems(results) | ||||
|     } | ||||
|  | ||||
|     fun onSearchResultsError() { | ||||
|         val view = dialogView ?: return | ||||
|         view.progress.isVisible = true | ||||
|         view.track_search_list.isInvisible = true | ||||
|         val binding = binding ?: return | ||||
|         binding.progress.isVisible = true | ||||
|         binding.trackSearchList.isInvisible = true | ||||
|         adapter?.setItems(emptyList()) | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -9,9 +9,6 @@ import eu.kanade.tachiyomi.data.track.TrackManager | ||||
| import eu.kanade.tachiyomi.data.track.TrackService | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import eu.kanade.tachiyomi.widget.preference.LoginDialogPreference | ||||
| import kotlinx.android.synthetic.main.pref_account_login.view.login | ||||
| import kotlinx.android.synthetic.main.pref_account_login.view.password | ||||
| import kotlinx.android.synthetic.main.pref_account_login.view.username | ||||
| import rx.android.schedulers.AndroidSchedulers | ||||
| import rx.schedulers.Schedulers | ||||
| import uy.kohesive.injekt.Injekt | ||||
| @@ -31,38 +28,36 @@ class TrackLoginDialog( | ||||
|     constructor(service: TrackService, @StringRes usernameLabelRes: Int?) : | ||||
|         this(R.string.login_title, service.name, usernameLabelRes, bundleOf("key" to service.id)) | ||||
|  | ||||
|     override fun setCredentialsOnView(view: View) = with(view) { | ||||
|         username.setText(service.getUsername()) | ||||
|         password.setText(service.getPassword()) | ||||
|     override fun setCredentialsOnView(view: View) { | ||||
|         binding?.username?.setText(service.getUsername()) | ||||
|         binding?.password?.setText(service.getPassword()) | ||||
|     } | ||||
|  | ||||
|     override fun checkLogin() { | ||||
|         requestSubscription?.unsubscribe() | ||||
|  | ||||
|         v?.apply { | ||||
|             if (username.text.isNullOrEmpty() || password.text.isNullOrEmpty()) { | ||||
|                 return | ||||
|             } | ||||
|  | ||||
|             login.progress = 1 | ||||
|             val user = username.text.toString() | ||||
|             val pass = password.text.toString() | ||||
|  | ||||
|             requestSubscription = service.login(user, pass) | ||||
|                 .subscribeOn(Schedulers.io()) | ||||
|                 .observeOn(AndroidSchedulers.mainThread()) | ||||
|                 .subscribe( | ||||
|                     { | ||||
|                         dialog?.dismiss() | ||||
|                         context.toast(R.string.login_success) | ||||
|                     }, | ||||
|                     { error -> | ||||
|                         login.progress = -1 | ||||
|                         login.setText(R.string.unknown_error) | ||||
|                         error.message?.let { context.toast(it) } | ||||
|                     } | ||||
|                 ) | ||||
|         if (binding!!.username.text.isNullOrEmpty() || binding!!.password.text.isNullOrEmpty()) { | ||||
|             return | ||||
|         } | ||||
|  | ||||
|         binding!!.login.progress = 1 | ||||
|         val user = binding!!.username.text.toString() | ||||
|         val pass = binding!!.password.text.toString() | ||||
|  | ||||
|         requestSubscription = service.login(user, pass) | ||||
|             .subscribeOn(Schedulers.io()) | ||||
|             .observeOn(AndroidSchedulers.mainThread()) | ||||
|             .subscribe( | ||||
|                 { | ||||
|                     dialog?.dismiss() | ||||
|                     view?.context?.toast(R.string.login_success) | ||||
|                 }, | ||||
|                 { error -> | ||||
|                     binding!!.login.progress = -1 | ||||
|                     binding!!.login.setText(R.string.unknown_error) | ||||
|                     error.message?.let { view?.context?.toast(it) } | ||||
|                 } | ||||
|             ) | ||||
|     } | ||||
|  | ||||
|     override fun onDialogClosed() { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.widget.preference | ||||
|  | ||||
| import android.app.Dialog | ||||
| import android.os.Bundle | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import androidx.annotation.StringRes | ||||
| import com.afollestad.materialdialogs.MaterialDialog | ||||
| @@ -9,11 +10,9 @@ import com.afollestad.materialdialogs.customview.customView | ||||
| import com.bluelinelabs.conductor.ControllerChangeHandler | ||||
| import com.bluelinelabs.conductor.ControllerChangeType | ||||
| import com.dd.processbutton.iml.ActionProcessButton | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.databinding.PrefAccountLoginBinding | ||||
| import eu.kanade.tachiyomi.ui.base.controller.DialogController | ||||
| import kotlinx.android.synthetic.main.pref_account_login.view.login | ||||
| import kotlinx.android.synthetic.main.pref_account_login.view.username_label | ||||
| import rx.Subscription | ||||
| import uy.kohesive.injekt.injectLazy | ||||
|  | ||||
| @@ -24,7 +23,7 @@ abstract class LoginDialogPreference( | ||||
|     bundle: Bundle? = null | ||||
| ) : DialogController(bundle) { | ||||
|  | ||||
|     var v: View? = null | ||||
|     var binding: PrefAccountLoginBinding? = null | ||||
|         private set | ||||
|  | ||||
|     val preferences: PreferencesHelper by injectLazy() | ||||
| @@ -32,8 +31,9 @@ abstract class LoginDialogPreference( | ||||
|     var requestSubscription: Subscription? = null | ||||
|  | ||||
|     override fun onCreateDialog(savedViewState: Bundle?): Dialog { | ||||
|         binding = PrefAccountLoginBinding.inflate(LayoutInflater.from(activity!!)) | ||||
|         var dialog = MaterialDialog(activity!!) | ||||
|             .customView(R.layout.pref_account_login) | ||||
|             .customView(view = binding!!.root) | ||||
|             .negativeButton(android.R.string.cancel) | ||||
|  | ||||
|         if (titleRes != null) { | ||||
| @@ -46,16 +46,14 @@ abstract class LoginDialogPreference( | ||||
|     } | ||||
|  | ||||
|     fun onViewCreated(view: View) { | ||||
|         v = view.apply { | ||||
|             if (usernameLabelRes != null) { | ||||
|                 username_label.hint = context.getString(usernameLabelRes) | ||||
|             } | ||||
|  | ||||
|             login.setMode(ActionProcessButton.Mode.ENDLESS) | ||||
|             login.setOnClickListener { checkLogin() } | ||||
|  | ||||
|             setCredentialsOnView(this) | ||||
|         if (usernameLabelRes != null) { | ||||
|             binding!!.usernameLabel.hint = view.context.getString(usernameLabelRes) | ||||
|         } | ||||
|  | ||||
|         binding!!.login.setMode(ActionProcessButton.Mode.ENDLESS) | ||||
|         binding!!.login.setOnClickListener { checkLogin() } | ||||
|  | ||||
|         setCredentialsOnView(view) | ||||
|     } | ||||
|  | ||||
|     override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) { | ||||
| @@ -67,6 +65,7 @@ abstract class LoginDialogPreference( | ||||
|  | ||||
|     open fun onDialogClosed() { | ||||
|         requestSubscription?.unsubscribe() | ||||
|         binding = null | ||||
|     } | ||||
|  | ||||
|     protected abstract fun checkLogin() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user