add top ten to home screen & minor fixes
* use plural for runtime and episodes * code clean up
This commit is contained in:
		@ -1,27 +1,24 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.graphics.drawable.Drawable
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.util.Log
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import android.widget.TextView
 | 
			
		||||
import androidx.fragment.app.Fragment
 | 
			
		||||
import com.bumptech.glide.Glide
 | 
			
		||||
import com.bumptech.glide.request.target.CustomTarget
 | 
			
		||||
import com.bumptech.glide.request.transition.Transition
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.GlobalScope
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.R
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.databinding.FragmentHomeBinding
 | 
			
		||||
import org.mosad.teapod.parser.AoDParser
 | 
			
		||||
import org.mosad.teapod.util.ItemMedia
 | 
			
		||||
import org.mosad.teapod.util.StorageController
 | 
			
		||||
import org.mosad.teapod.util.adapter.MediaItemAdapter
 | 
			
		||||
import org.mosad.teapod.util.decoration.MediaItemDecoration
 | 
			
		||||
import org.mosad.teapod.util.setDrawableTop
 | 
			
		||||
import org.mosad.teapod.util.showFragment
 | 
			
		||||
 | 
			
		||||
class HomeFragment : Fragment() {
 | 
			
		||||
@ -31,6 +28,7 @@ class HomeFragment : Fragment() {
 | 
			
		||||
    private lateinit var adapterNewEpisodes: MediaItemAdapter
 | 
			
		||||
    private lateinit var adapterNewSimulcasts: MediaItemAdapter
 | 
			
		||||
    private lateinit var adapterNewTitles: MediaItemAdapter
 | 
			
		||||
    private lateinit var adapterTopTen: MediaItemAdapter
 | 
			
		||||
 | 
			
		||||
    private lateinit var highlightMedia: ItemMedia
 | 
			
		||||
 | 
			
		||||
@ -60,9 +58,9 @@ class HomeFragment : Fragment() {
 | 
			
		||||
                .into(binding.imageHighlight)
 | 
			
		||||
 | 
			
		||||
            if (StorageController.myList.contains(highlightMedia.id)) {
 | 
			
		||||
                loadIntoCompoundDrawable(R.drawable.ic_baseline_check_24, binding.textHighlightMyList)
 | 
			
		||||
                binding.textHighlightMyList.setDrawableTop(R.drawable.ic_baseline_check_24)
 | 
			
		||||
            } else {
 | 
			
		||||
                loadIntoCompoundDrawable(R.drawable.ic_baseline_add_24, binding.textHighlightMyList)
 | 
			
		||||
                binding.textHighlightMyList.setDrawableTop(R.drawable.ic_baseline_add_24)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -72,6 +70,7 @@ class HomeFragment : Fragment() {
 | 
			
		||||
        binding.recyclerNewEpisodes.addItemDecoration(MediaItemDecoration(9))
 | 
			
		||||
        binding.recyclerNewSimulcasts.addItemDecoration(MediaItemDecoration(9))
 | 
			
		||||
        binding.recyclerNewTitles.addItemDecoration(MediaItemDecoration(9))
 | 
			
		||||
        binding.recyclerTopTen.addItemDecoration(MediaItemDecoration(9))
 | 
			
		||||
 | 
			
		||||
        // my list
 | 
			
		||||
        val myListMedia = StorageController.myList.map { elementId ->
 | 
			
		||||
@ -93,6 +92,10 @@ class HomeFragment : Fragment() {
 | 
			
		||||
        // new titles
 | 
			
		||||
        adapterNewTitles = MediaItemAdapter(AoDParser.newTitlesList)
 | 
			
		||||
        binding.recyclerNewTitles.adapter = adapterNewTitles
 | 
			
		||||
 | 
			
		||||
        // top ten
 | 
			
		||||
        adapterTopTen = MediaItemAdapter(AoDParser.topTenList)
 | 
			
		||||
        binding.recyclerTopTen.adapter = adapterTopTen
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun initActions() {
 | 
			
		||||
@ -109,10 +112,10 @@ class HomeFragment : Fragment() {
 | 
			
		||||
        binding.textHighlightMyList.setOnClickListener {
 | 
			
		||||
            if (StorageController.myList.contains(highlightMedia.id)) {
 | 
			
		||||
                StorageController.myList.remove(highlightMedia.id)
 | 
			
		||||
                loadIntoCompoundDrawable(R.drawable.ic_baseline_add_24, binding.textHighlightMyList)
 | 
			
		||||
                binding.textHighlightMyList.setDrawableTop(R.drawable.ic_baseline_add_24)
 | 
			
		||||
            } else {
 | 
			
		||||
                StorageController.myList.add(highlightMedia.id)
 | 
			
		||||
                loadIntoCompoundDrawable(R.drawable.ic_baseline_check_24, binding.textHighlightMyList)
 | 
			
		||||
                binding.textHighlightMyList.setDrawableTop(R.drawable.ic_baseline_check_24)
 | 
			
		||||
            }
 | 
			
		||||
            StorageController.saveMyList(requireContext())
 | 
			
		||||
 | 
			
		||||
@ -138,6 +141,10 @@ class HomeFragment : Fragment() {
 | 
			
		||||
        adapterNewTitles.onItemClick = { mediaId, _ ->
 | 
			
		||||
            activity?.showFragment(MediaFragment(mediaId))
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        adapterTopTen.onItemClick = { mediaId, _ ->
 | 
			
		||||
            activity?.showFragment(MediaFragment(mediaId))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -157,18 +164,4 @@ class HomeFragment : Fragment() {
 | 
			
		||||
        adapterMyList.notifyDataSetChanged()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun loadIntoCompoundDrawable(drawable: Int, textView: TextView) {
 | 
			
		||||
        Glide.with(requireContext())
 | 
			
		||||
            .load(drawable)
 | 
			
		||||
            .into(object : CustomTarget<Drawable>(48, 48) {
 | 
			
		||||
                override fun onLoadCleared(drawable: Drawable?) {
 | 
			
		||||
                    textView.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onResourceReady(res: Drawable, transition: Transition<in Drawable>?) {
 | 
			
		||||
                    textView.setCompoundDrawablesWithIntrinsicBounds(null, res, null, null)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            })
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -56,7 +56,7 @@ class MediaFragment(private val mediaId: Int) : Fragment() {
 | 
			
		||||
        // only notify adapter, if initialized
 | 
			
		||||
        if (this::adapterRecEpisodes.isInitialized) {
 | 
			
		||||
            // TODO find a better solution for this
 | 
			
		||||
            media.episodes.forEachIndexed() { index, episode ->
 | 
			
		||||
            media.episodes.forEachIndexed { index, episode ->
 | 
			
		||||
                adapterRecEpisodes.updateWatchedState(episode.watched, index)
 | 
			
		||||
            }
 | 
			
		||||
            adapterRecEpisodes.notifyDataSetChanged()
 | 
			
		||||
@ -94,7 +94,12 @@ class MediaFragment(private val mediaId: Int) : Fragment() {
 | 
			
		||||
            adapterRecEpisodes = EpisodeItemAdapter(media.episodes)
 | 
			
		||||
            recyclerEpisodes.adapter = adapterRecEpisodes
 | 
			
		||||
 | 
			
		||||
            binding.textEpisodesOrRuntime.text = getString(R.string.text_episodes_count, media.info.episodesCount)
 | 
			
		||||
            // episodes count
 | 
			
		||||
            binding.textEpisodesOrRuntime.text = resources.getQuantityString(
 | 
			
		||||
                R.plurals.text_episodes_count,
 | 
			
		||||
                media.info.episodesCount,
 | 
			
		||||
                media.info.episodesCount
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            // get next episode
 | 
			
		||||
            nextEpisode = if (media.episodes.firstOrNull{ !it.watched } != null) {
 | 
			
		||||
@ -109,7 +114,11 @@ class MediaFragment(private val mediaId: Int) : Fragment() {
 | 
			
		||||
            recyclerEpisodes.visibility = View.GONE
 | 
			
		||||
 | 
			
		||||
            if (tmdb.runtime > 0) {
 | 
			
		||||
                textEpisodesOrRuntime.text = getString(R.string.text_runtime, tmdb.runtime)
 | 
			
		||||
                textEpisodesOrRuntime.text = resources.getQuantityString(
 | 
			
		||||
                    R.plurals.text_runtime,
 | 
			
		||||
                    tmdb.runtime,
 | 
			
		||||
                    tmdb.runtime
 | 
			
		||||
                )
 | 
			
		||||
            } else {
 | 
			
		||||
                textEpisodesOrRuntime.visibility = View.GONE
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -53,6 +53,10 @@ class OnboardingActivity : AppCompatActivity() {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun btnNextClick(@Suppress("UNUSED_PARAMETER")v: View) {
 | 
			
		||||
        //nextFragment() // currently not used in Teapod
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun btnSkipClick(@Suppress("UNUSED_PARAMETER")v: View) {
 | 
			
		||||
        //launchMainActivity() // currently not used in Teapod
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -53,6 +53,7 @@ object AoDParser {
 | 
			
		||||
    val newEpisodesList = arrayListOf<ItemMedia>()
 | 
			
		||||
    val newSimulcastsList = arrayListOf<ItemMedia>()
 | 
			
		||||
    val newTitlesList = arrayListOf<ItemMedia>()
 | 
			
		||||
    val topTenList = arrayListOf<ItemMedia>()
 | 
			
		||||
 | 
			
		||||
    fun login(): Boolean = runBlocking {
 | 
			
		||||
 | 
			
		||||
@ -236,6 +237,19 @@ object AoDParser {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // get top ten from AoD
 | 
			
		||||
        topTenList.clear()
 | 
			
		||||
        resHome.select("h2:contains(Anime Top 10)").next().select("li").forEach {
 | 
			
		||||
            val mediaId = it.select("a.thumbs").attr("href")
 | 
			
		||||
                .substringAfterLast("/").toIntOrNull()
 | 
			
		||||
            val mediaImage = it.select("a.thumbs > img").attr("src")
 | 
			
		||||
            val mediaTitle = it.select("a").text()
 | 
			
		||||
 | 
			
		||||
            if (mediaId != null) {
 | 
			
		||||
                topTenList.add(ItemMedia(mediaId, mediaTitle, mediaImage))
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // if highlights is empty, add a random new title
 | 
			
		||||
        if (highlightsList.isEmpty()) {
 | 
			
		||||
            if (newTitlesList.isNotEmpty()) {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								app/src/main/java/org/mosad/teapod/util/Utils.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/main/java/org/mosad/teapod/util/Utils.kt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
package org.mosad.teapod.util
 | 
			
		||||
 | 
			
		||||
import android.widget.TextView
 | 
			
		||||
 | 
			
		||||
fun TextView.setDrawableTop(drawable: Int) {
 | 
			
		||||
    this.setCompoundDrawablesWithIntrinsicBounds(0, drawable, 0, 0)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user