add similar media to MediaFragment
* parse similar media in AoDParser
This commit is contained in:
		@ -13,7 +13,7 @@
 | 
			
		||||
        android:supportsRtl="true"
 | 
			
		||||
        android:theme="@style/AppTheme.Dark">
 | 
			
		||||
        <activity
 | 
			
		||||
            android:name=".activity.SplashActivity"
 | 
			
		||||
            android:name="org.mosad.teapod.ui.activity.SplashActivity"
 | 
			
		||||
            android:label="@string/app_name"
 | 
			
		||||
            android:theme="@style/SplashTheme"
 | 
			
		||||
            android:screenOrientation="portrait">
 | 
			
		||||
@ -23,24 +23,24 @@
 | 
			
		||||
            </intent-filter>
 | 
			
		||||
        </activity>
 | 
			
		||||
        <activity
 | 
			
		||||
            android:name=".activity.onboarding.OnboardingActivity"
 | 
			
		||||
            android:name="org.mosad.teapod.ui.activity.onboarding.OnboardingActivity"
 | 
			
		||||
            android:label="@string/app_name"
 | 
			
		||||
            android:screenOrientation="portrait"
 | 
			
		||||
            android:launchMode="singleTop"
 | 
			
		||||
            android:windowSoftInputMode="adjustPan">
 | 
			
		||||
        </activity>
 | 
			
		||||
        <activity
 | 
			
		||||
            android:name=".activity.main.MainActivity"
 | 
			
		||||
            android:name="org.mosad.teapod.ui.activity.main.MainActivity"
 | 
			
		||||
            android:label="@string/app_name"
 | 
			
		||||
            android:screenOrientation="portrait">
 | 
			
		||||
        </activity>
 | 
			
		||||
        <activity
 | 
			
		||||
            android:name="org.mosad.teapod.activity.player.PlayerActivity"
 | 
			
		||||
            android:name="org.mosad.teapod.ui.activity.player.PlayerActivity"
 | 
			
		||||
            android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|layoutDirection"
 | 
			
		||||
            android:excludeFromRecents="true"
 | 
			
		||||
            android:label="@string/app_name"
 | 
			
		||||
            android:launchMode="singleTask"
 | 
			
		||||
            android:parentActivityName=".activity.main.MainActivity"
 | 
			
		||||
            android:parentActivityName="org.mosad.teapod.ui.activity.main.MainActivity"
 | 
			
		||||
            android:supportsPictureInPicture="true"
 | 
			
		||||
            android:taskAffinity=".player.PlayerActivity"
 | 
			
		||||
            android:theme="@style/PlayerTheme"
 | 
			
		||||
 | 
			
		||||
@ -1,18 +0,0 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import androidx.fragment.app.Fragment
 | 
			
		||||
import org.mosad.teapod.databinding.FragmentMediaSimilarBinding
 | 
			
		||||
 | 
			
		||||
class MediaSimilarFragment : Fragment()  {
 | 
			
		||||
 | 
			
		||||
    private lateinit var binding: FragmentMediaSimilarBinding
 | 
			
		||||
 | 
			
		||||
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
 | 
			
		||||
        binding = FragmentMediaSimilarBinding.inflate(inflater, container, false)
 | 
			
		||||
        return binding.root
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -323,7 +323,7 @@ object AoDParser {
 | 
			
		||||
        }
 | 
			
		||||
        Log.i(javaClass.name, "Loaded playlists successfully")
 | 
			
		||||
 | 
			
		||||
        // parse additional info from the media page
 | 
			
		||||
        // additional info from the media page
 | 
			
		||||
        res.select("table.vertical-table").select("tr").forEach { row ->
 | 
			
		||||
            when (row.select("th").text().toLowerCase(Locale.ROOT)) {
 | 
			
		||||
                "produktionsjahr" -> media.info.year = row.select("td").text().toInt()
 | 
			
		||||
@ -337,7 +337,21 @@ object AoDParser {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // parse additional information for tv shows the episode title (description) is loaded from the "api"
 | 
			
		||||
        // similar titles from media page
 | 
			
		||||
        media.info.similar = res.select("h2:contains(Ähnliche Animes)").next().select("li").mapNotNull {
 | 
			
		||||
            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) {
 | 
			
		||||
                ItemMedia(mediaId, mediaTitle, mediaImage)
 | 
			
		||||
            } else {
 | 
			
		||||
                null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // additional information for tv shows the episode title (description) is loaded from the "api"
 | 
			
		||||
        if (media.type == MediaType.TVSHOW) {
 | 
			
		||||
            res.select("div.three-box-container > div.episodebox").forEach { episodebox ->
 | 
			
		||||
                // make sure the episode has a streaming link
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,9 @@
 | 
			
		||||
package org.mosad.teapod.activity
 | 
			
		||||
package org.mosad.teapod.ui.activity
 | 
			
		||||
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.MainActivity
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SplashActivity : AppCompatActivity() {
 | 
			
		||||
@ -20,7 +20,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.mosad.teapod.activity.main
 | 
			
		||||
package org.mosad.teapod.ui.activity.main
 | 
			
		||||
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
@ -31,27 +31,25 @@ import androidx.fragment.app.Fragment
 | 
			
		||||
import androidx.fragment.app.commit
 | 
			
		||||
import com.afollestad.materialdialogs.MaterialDialog
 | 
			
		||||
import com.afollestad.materialdialogs.callbacks.onDismiss
 | 
			
		||||
import com.afollestad.materialdialogs.utils.MDUtil.isLandscape
 | 
			
		||||
import com.google.android.material.bottomnavigation.BottomNavigationView
 | 
			
		||||
import kotlinx.coroutines.joinAll
 | 
			
		||||
import kotlinx.coroutines.runBlocking
 | 
			
		||||
import org.mosad.teapod.R
 | 
			
		||||
import org.mosad.teapod.databinding.ActivityMainBinding
 | 
			
		||||
import org.mosad.teapod.parser.AoDParser
 | 
			
		||||
import org.mosad.teapod.activity.player.PlayerActivity
 | 
			
		||||
import org.mosad.teapod.ui.activity.player.PlayerActivity
 | 
			
		||||
import org.mosad.teapod.preferences.EncryptedPreferences
 | 
			
		||||
import org.mosad.teapod.preferences.Preferences
 | 
			
		||||
import org.mosad.teapod.ui.components.LoginDialog
 | 
			
		||||
import org.mosad.teapod.activity.main.fragments.AccountFragment
 | 
			
		||||
import org.mosad.teapod.activity.main.fragments.HomeFragment
 | 
			
		||||
import org.mosad.teapod.activity.main.fragments.LibraryFragment
 | 
			
		||||
import org.mosad.teapod.activity.main.fragments.SearchFragment
 | 
			
		||||
import org.mosad.teapod.activity.onboarding.OnboardingActivity
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.fragments.AccountFragment
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.fragments.HomeFragment
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.fragments.LibraryFragment
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.fragments.SearchFragment
 | 
			
		||||
import org.mosad.teapod.ui.activity.onboarding.OnboardingActivity
 | 
			
		||||
import org.mosad.teapod.util.DataTypes
 | 
			
		||||
import org.mosad.teapod.util.StorageController
 | 
			
		||||
import org.mosad.teapod.util.exitAndRemoveTask
 | 
			
		||||
import java.net.SocketTimeoutException
 | 
			
		||||
import kotlin.system.exitProcess
 | 
			
		||||
import kotlin.system.measureTimeMillis
 | 
			
		||||
 | 
			
		||||
class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener {
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.fragments
 | 
			
		||||
package org.mosad.teapod.ui.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.fragments
 | 
			
		||||
package org.mosad.teapod.ui.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.util.Log
 | 
			
		||||
@ -9,7 +9,7 @@ import androidx.fragment.app.Fragment
 | 
			
		||||
import com.afollestad.materialdialogs.MaterialDialog
 | 
			
		||||
import com.afollestad.materialdialogs.list.listItemsSingleChoice
 | 
			
		||||
import org.mosad.teapod.BuildConfig
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.R
 | 
			
		||||
import org.mosad.teapod.databinding.FragmentAccountBinding
 | 
			
		||||
import org.mosad.teapod.parser.AoDParser
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.fragments
 | 
			
		||||
package org.mosad.teapod.ui.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.util.Log
 | 
			
		||||
@ -11,7 +11,7 @@ import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.GlobalScope
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
import org.mosad.teapod.R
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.databinding.FragmentHomeBinding
 | 
			
		||||
import org.mosad.teapod.parser.AoDParser
 | 
			
		||||
import org.mosad.teapod.util.ItemMedia
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.fragments
 | 
			
		||||
package org.mosad.teapod.ui.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
@ -9,7 +9,6 @@ import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.GlobalScope
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
import kotlinx.coroutines.withContext
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.databinding.FragmentLibraryBinding
 | 
			
		||||
import org.mosad.teapod.parser.AoDParser
 | 
			
		||||
import org.mosad.teapod.util.adapter.MediaItemAdapter
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.fragments
 | 
			
		||||
package org.mosad.teapod.ui.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.graphics.Color
 | 
			
		||||
import android.graphics.drawable.ColorDrawable
 | 
			
		||||
@ -17,14 +17,16 @@ import com.google.android.material.tabs.TabLayoutMediator
 | 
			
		||||
import jp.wasabeef.glide.transformations.BlurTransformation
 | 
			
		||||
import kotlinx.coroutines.*
 | 
			
		||||
import org.mosad.teapod.R
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.activity.main.viewmodel.MediaFragmentViewModel
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.viewmodel.MediaFragmentViewModel
 | 
			
		||||
import org.mosad.teapod.databinding.FragmentMediaBinding
 | 
			
		||||
import org.mosad.teapod.util.*
 | 
			
		||||
import org.mosad.teapod.util.DataTypes.MediaType
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * TODO use a shared ViewModel for MediaFragment and it's sibling Fragments (episodes and similar)
 | 
			
		||||
 * The media detail fragment.
 | 
			
		||||
 * Note: the fragment is created only once, when selecting a similar title etc.
 | 
			
		||||
 * therefore fragments may be not empty and model may be the old one
 | 
			
		||||
 */
 | 
			
		||||
class MediaFragment(private val mediaId: Int) : Fragment() {
 | 
			
		||||
 | 
			
		||||
@ -98,6 +100,10 @@ class MediaFragment(private val mediaId: Int) : Fragment() {
 | 
			
		||||
            Glide.with(requireContext()).load(R.drawable.ic_baseline_add_24).into(binding.imageMyListAction)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // clear fragments, since it lives in onCreate scope (don't do this in onPause/onStop -> FragmentManager transaction)
 | 
			
		||||
        fragments.clear()
 | 
			
		||||
        pagerAdapter.notifyDataSetChanged()
 | 
			
		||||
 | 
			
		||||
        // specific gui
 | 
			
		||||
        if (media.type == MediaType.TVSHOW) {
 | 
			
		||||
            // get next episode
 | 
			
		||||
@ -134,8 +140,10 @@ class MediaFragment(private val mediaId: Int) : Fragment() {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // if has similar titles
 | 
			
		||||
        fragments.add(MediaSimilarFragment())
 | 
			
		||||
        if (media.info.similar.isNotEmpty()) {
 | 
			
		||||
            fragments.add(MediaFragmentSimilar())
 | 
			
		||||
            pagerAdapter.notifyDataSetChanged()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding.frameLoading.visibility = View.GONE // hide loading indicator
 | 
			
		||||
    }
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.fragments
 | 
			
		||||
package org.mosad.teapod.ui.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.util.Log
 | 
			
		||||
@ -7,8 +7,8 @@ import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import androidx.fragment.app.Fragment
 | 
			
		||||
import androidx.fragment.app.activityViewModels
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.activity.main.viewmodel.MediaFragmentViewModel
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.viewmodel.MediaFragmentViewModel
 | 
			
		||||
import org.mosad.teapod.databinding.FragmentMediaEpisodesBinding
 | 
			
		||||
import org.mosad.teapod.util.Episode
 | 
			
		||||
import org.mosad.teapod.util.adapter.EpisodeItemAdapter
 | 
			
		||||
@ -0,0 +1,39 @@
 | 
			
		||||
package org.mosad.teapod.ui.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import androidx.fragment.app.Fragment
 | 
			
		||||
import androidx.fragment.app.activityViewModels
 | 
			
		||||
import org.mosad.teapod.databinding.FragmentMediaSimilarBinding
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.viewmodel.MediaFragmentViewModel
 | 
			
		||||
import org.mosad.teapod.util.adapter.MediaItemAdapter
 | 
			
		||||
import org.mosad.teapod.util.showFragment
 | 
			
		||||
 | 
			
		||||
class MediaFragmentSimilar : Fragment()  {
 | 
			
		||||
 | 
			
		||||
    private lateinit var binding: FragmentMediaSimilarBinding
 | 
			
		||||
    private val model: MediaFragmentViewModel by activityViewModels()
 | 
			
		||||
 | 
			
		||||
    private lateinit var adapterSimilar: MediaItemAdapter
 | 
			
		||||
 | 
			
		||||
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
 | 
			
		||||
        binding = FragmentMediaSimilarBinding.inflate(inflater, container, false)
 | 
			
		||||
        return binding.root
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onViewCreated(view, savedInstanceState)
 | 
			
		||||
 | 
			
		||||
        adapterSimilar = MediaItemAdapter(model.media.info.similar)
 | 
			
		||||
        binding.recyclerMediaSimilar.adapter = adapterSimilar
 | 
			
		||||
 | 
			
		||||
        // set onItemClick only in adapter is initialized
 | 
			
		||||
        if (this::adapterSimilar.isInitialized) {
 | 
			
		||||
            adapterSimilar.onItemClick = { mediaId, _ ->
 | 
			
		||||
                activity?.showFragment(MediaFragment(mediaId))
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.fragments
 | 
			
		||||
package org.mosad.teapod.ui.activity.main.fragments
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
@ -7,7 +7,6 @@ import android.view.ViewGroup
 | 
			
		||||
import android.widget.SearchView
 | 
			
		||||
import androidx.fragment.app.Fragment
 | 
			
		||||
import kotlinx.coroutines.*
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.databinding.FragmentSearchBinding
 | 
			
		||||
import org.mosad.teapod.parser.AoDParser
 | 
			
		||||
import org.mosad.teapod.util.decoration.MediaItemDecoration
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.main.viewmodel
 | 
			
		||||
package org.mosad.teapod.ui.activity.main.viewmodel
 | 
			
		||||
 | 
			
		||||
import android.app.Application
 | 
			
		||||
import androidx.lifecycle.AndroidViewModel
 | 
			
		||||
@ -18,6 +18,9 @@ class MediaFragmentViewModel(application: Application) : AndroidViewModel(applic
 | 
			
		||||
    var tmdb = TMDBResponse()
 | 
			
		||||
        internal set
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * set media, tmdb and nextEpisode
 | 
			
		||||
     */
 | 
			
		||||
    suspend fun load(mediaId: Int) {
 | 
			
		||||
        media = AoDParser.getMediaById(mediaId)
 | 
			
		||||
        tmdb = TMDBApiController().search(media.info.title, media.type)
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.onboarding
 | 
			
		||||
package org.mosad.teapod.ui.activity.onboarding
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.onboarding
 | 
			
		||||
package org.mosad.teapod.ui.activity.onboarding
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.onboarding
 | 
			
		||||
package org.mosad.teapod.ui.activity.onboarding
 | 
			
		||||
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
@ -8,7 +8,7 @@ import androidx.fragment.app.Fragment
 | 
			
		||||
import androidx.fragment.app.FragmentActivity
 | 
			
		||||
import androidx.viewpager2.adapter.FragmentStateAdapter
 | 
			
		||||
import com.google.android.material.tabs.TabLayoutMediator
 | 
			
		||||
import org.mosad.teapod.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.ui.activity.main.MainActivity
 | 
			
		||||
import org.mosad.teapod.databinding.ActivityOnboardingBinding
 | 
			
		||||
 | 
			
		||||
class OnboardingActivity : AppCompatActivity() {
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.player
 | 
			
		||||
package org.mosad.teapod.ui.activity.player
 | 
			
		||||
 | 
			
		||||
import android.animation.Animator
 | 
			
		||||
import android.animation.AnimatorListenerAdapter
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
package org.mosad.teapod.activity.player
 | 
			
		||||
package org.mosad.teapod.ui.activity.player
 | 
			
		||||
 | 
			
		||||
import android.app.Application
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
@ -6,7 +6,7 @@ import android.view.LayoutInflater
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import android.widget.LinearLayout
 | 
			
		||||
import org.mosad.teapod.databinding.PlayerEpisodesListBinding
 | 
			
		||||
import org.mosad.teapod.activity.player.PlayerViewModel
 | 
			
		||||
import org.mosad.teapod.ui.activity.player.PlayerViewModel
 | 
			
		||||
import org.mosad.teapod.util.adapter.PlayerEpisodeItemAdapter
 | 
			
		||||
 | 
			
		||||
class EpisodesListPlayer @JvmOverloads constructor(
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@ import android.widget.TextView
 | 
			
		||||
import androidx.core.view.children
 | 
			
		||||
import org.mosad.teapod.R
 | 
			
		||||
import org.mosad.teapod.databinding.PlayerLanguageSettingsBinding
 | 
			
		||||
import org.mosad.teapod.activity.player.PlayerViewModel
 | 
			
		||||
import org.mosad.teapod.ui.activity.player.PlayerViewModel
 | 
			
		||||
import java.util.*
 | 
			
		||||
 | 
			
		||||
class LanguageSettingsPlayer @JvmOverloads constructor(
 | 
			
		||||
 | 
			
		||||
@ -62,7 +62,8 @@ data class Info(
 | 
			
		||||
    var description: String = "",
 | 
			
		||||
    var year: Int = 0,
 | 
			
		||||
    var age: Int = 0,
 | 
			
		||||
    var episodesCount: Int = 0
 | 
			
		||||
    var episodesCount: Int = 0,
 | 
			
		||||
    var similar: List<ItemMedia> = listOf()
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@
 | 
			
		||||
    android:layout_height="match_parent"
 | 
			
		||||
    android:background="#000000"
 | 
			
		||||
    android:keepScreenOn="true"
 | 
			
		||||
    tools:context=".activity.player.PlayerActivity">
 | 
			
		||||
    tools:context=".ui.activity.player.PlayerActivity">
 | 
			
		||||
 | 
			
		||||
    <com.google.android.exoplayer2.ui.StyledPlayerView
 | 
			
		||||
        android:id="@+id/video_view"
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
    android:layout_width="match_parent"
 | 
			
		||||
    android:layout_height="match_parent"
 | 
			
		||||
    android:background="?themePrimary"
 | 
			
		||||
    tools:context=".activity.main.fragments.AboutFragment">
 | 
			
		||||
    tools:context=".ui.activity.main.fragments.AboutFragment">
 | 
			
		||||
 | 
			
		||||
    <LinearLayout
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@
 | 
			
		||||
    android:layout_width="match_parent"
 | 
			
		||||
    android:layout_height="match_parent"
 | 
			
		||||
    android:background="?themePrimary"
 | 
			
		||||
    tools:context=".activity.main.fragments.AccountFragment">
 | 
			
		||||
    tools:context=".ui.activity.main.fragments.AccountFragment">
 | 
			
		||||
 | 
			
		||||
    <ScrollView
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
    android:layout_width="match_parent"
 | 
			
		||||
    android:layout_height="match_parent"
 | 
			
		||||
    android:background="?themePrimary"
 | 
			
		||||
    tools:context=".activity.main.fragments.HomeFragment">
 | 
			
		||||
    tools:context=".ui.activity.main.fragments.HomeFragment">
 | 
			
		||||
 | 
			
		||||
    <ScrollView
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@
 | 
			
		||||
    android:layout_width="match_parent"
 | 
			
		||||
    android:layout_height="match_parent"
 | 
			
		||||
    android:background="?themePrimary"
 | 
			
		||||
    tools:context=".activity.main.fragments.LibraryFragment">
 | 
			
		||||
    tools:context=".ui.activity.main.fragments.LibraryFragment">
 | 
			
		||||
 | 
			
		||||
    <androidx.recyclerview.widget.RecyclerView
 | 
			
		||||
        android:id="@+id/recycler_media_library"
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@
 | 
			
		||||
    android:layout_width="match_parent"
 | 
			
		||||
    android:layout_height="match_parent"
 | 
			
		||||
    android:background="?themePrimary"
 | 
			
		||||
    tools:context=".activity.main.fragments.MediaFragment">
 | 
			
		||||
    tools:context=".ui.activity.main.fragments.MediaFragment">
 | 
			
		||||
 | 
			
		||||
    <androidx.core.widget.NestedScrollView
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
 | 
			
		||||
@ -2,17 +2,24 @@
 | 
			
		||||
<androidx.constraintlayout.widget.ConstraintLayout
 | 
			
		||||
    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"
 | 
			
		||||
    android:layout_width="match_parent"
 | 
			
		||||
    android:layout_height="match_parent">
 | 
			
		||||
 | 
			
		||||
    <TextView
 | 
			
		||||
        android:id="@+id/textView2"
 | 
			
		||||
        android:layout_width="wrap_content"
 | 
			
		||||
        android:layout_height="wrap_content"
 | 
			
		||||
        android:layout_marginTop="7dp"
 | 
			
		||||
        android:text="similar media"
 | 
			
		||||
        android:textColor="?textPrimary"
 | 
			
		||||
    <androidx.recyclerview.widget.RecyclerView
 | 
			
		||||
        android:id="@+id/recycler_media_similar"
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
        android:layout_height="match_parent"
 | 
			
		||||
        android:layout_marginTop="3dp"
 | 
			
		||||
        android:clipToPadding="false"
 | 
			
		||||
        android:orientation="vertical"
 | 
			
		||||
        android:padding="3dp"
 | 
			
		||||
        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
 | 
			
		||||
        app:layout_constraintBottom_toBottomOf="parent"
 | 
			
		||||
        app:layout_constraintEnd_toEndOf="parent"
 | 
			
		||||
        app:layout_constraintStart_toStartOf="parent"
 | 
			
		||||
        app:layout_constraintTop_toTopOf="parent" />
 | 
			
		||||
        app:layout_constraintTop_toTopOf="parent"
 | 
			
		||||
        app:spanCount="2"
 | 
			
		||||
        tools:listitem="@layout/item_media" />
 | 
			
		||||
 | 
			
		||||
</androidx.constraintlayout.widget.ConstraintLayout>
 | 
			
		||||
@ -5,7 +5,7 @@
 | 
			
		||||
    android:layout_width="match_parent"
 | 
			
		||||
    android:layout_height="match_parent"
 | 
			
		||||
    android:background="?themePrimary"
 | 
			
		||||
    tools:context=".activity.main.fragments.SearchFragment">
 | 
			
		||||
    tools:context=".ui.activity.main.fragments.SearchFragment">
 | 
			
		||||
 | 
			
		||||
    <SearchView
 | 
			
		||||
        android:id="@+id/search_text"
 | 
			
		||||
 | 
			
		||||
@ -7,25 +7,25 @@
 | 
			
		||||
 | 
			
		||||
    <fragment
 | 
			
		||||
        android:id="@+id/navigation_home"
 | 
			
		||||
        android:name="org.mosad.teapod.activity.main.fragments.HomeFragment"
 | 
			
		||||
        android:name="org.mosad.teapod.ui.activity.main.fragments.HomeFragment"
 | 
			
		||||
        android:label="@string/title_home"
 | 
			
		||||
        tools:layout="@layout/fragment_home" />
 | 
			
		||||
 | 
			
		||||
    <fragment
 | 
			
		||||
        android:id="@+id/navigation_library"
 | 
			
		||||
        android:name="org.mosad.teapod.activity.main.fragments.LibraryFragment"
 | 
			
		||||
        android:name="org.mosad.teapod.ui.activity.main.fragments.LibraryFragment"
 | 
			
		||||
        android:label="@string/title_library"
 | 
			
		||||
        tools:layout="@layout/fragment_library" />
 | 
			
		||||
 | 
			
		||||
    <fragment
 | 
			
		||||
        android:id="@+id/navigation_search"
 | 
			
		||||
        android:name="org.mosad.teapod.activity.main.fragments.SearchFragment"
 | 
			
		||||
        android:name="org.mosad.teapod.ui.activity.main.fragments.SearchFragment"
 | 
			
		||||
        android:label="@string/title_search"
 | 
			
		||||
        tools:layout="@layout/fragment_search" />
 | 
			
		||||
 | 
			
		||||
    <fragment
 | 
			
		||||
        android:id="@+id/navigation_account"
 | 
			
		||||
        android:name="org.mosad.teapod.activity.main.fragments.AccountFragment"
 | 
			
		||||
        android:name="org.mosad.teapod.ui.activity.main.fragments.AccountFragment"
 | 
			
		||||
        android:label="@string/title_account"
 | 
			
		||||
        tools:layout="@layout/fragment_account" />
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user