add similar media to MediaFragment

* parse similar media in AoDParser
This commit is contained in:
2021-01-31 22:11:08 +01:00
parent f44dc4ddac
commit a21ef195c9
31 changed files with 133 additions and 83 deletions
+5 -5
View File
@@ -13,7 +13,7 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme.Dark"> android:theme="@style/AppTheme.Dark">
<activity <activity
android:name=".activity.SplashActivity" android:name="org.mosad.teapod.ui.activity.SplashActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/SplashTheme" android:theme="@style/SplashTheme"
android:screenOrientation="portrait"> android:screenOrientation="portrait">
@@ -23,24 +23,24 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity <activity
android:name=".activity.onboarding.OnboardingActivity" android:name="org.mosad.teapod.ui.activity.onboarding.OnboardingActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:launchMode="singleTop" android:launchMode="singleTop"
android:windowSoftInputMode="adjustPan"> android:windowSoftInputMode="adjustPan">
</activity> </activity>
<activity <activity
android:name=".activity.main.MainActivity" android:name="org.mosad.teapod.ui.activity.main.MainActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:screenOrientation="portrait"> android:screenOrientation="portrait">
</activity> </activity>
<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:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|layoutDirection"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleTask" android:launchMode="singleTask"
android:parentActivityName=".activity.main.MainActivity" android:parentActivityName="org.mosad.teapod.ui.activity.main.MainActivity"
android:supportsPictureInPicture="true" android:supportsPictureInPicture="true"
android:taskAffinity=".player.PlayerActivity" android:taskAffinity=".player.PlayerActivity"
android:theme="@style/PlayerTheme" 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") 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 -> res.select("table.vertical-table").select("tr").forEach { row ->
when (row.select("th").text().toLowerCase(Locale.ROOT)) { when (row.select("th").text().toLowerCase(Locale.ROOT)) {
"produktionsjahr" -> media.info.year = row.select("td").text().toInt() "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) { if (media.type == MediaType.TVSHOW) {
res.select("div.three-box-container > div.episodebox").forEach { episodebox -> res.select("div.three-box-container > div.episodebox").forEach { episodebox ->
// make sure the episode has a streaming link // 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.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import org.mosad.teapod.activity.main.MainActivity import org.mosad.teapod.ui.activity.main.MainActivity
class SplashActivity : AppCompatActivity() { 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.content.Intent
import android.os.Bundle import android.os.Bundle
@@ -31,27 +31,25 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.commit import androidx.fragment.app.commit
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.callbacks.onDismiss import com.afollestad.materialdialogs.callbacks.onDismiss
import com.afollestad.materialdialogs.utils.MDUtil.isLandscape
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.coroutines.joinAll import kotlinx.coroutines.joinAll
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.mosad.teapod.R import org.mosad.teapod.R
import org.mosad.teapod.databinding.ActivityMainBinding import org.mosad.teapod.databinding.ActivityMainBinding
import org.mosad.teapod.parser.AoDParser 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.EncryptedPreferences
import org.mosad.teapod.preferences.Preferences import org.mosad.teapod.preferences.Preferences
import org.mosad.teapod.ui.components.LoginDialog import org.mosad.teapod.ui.components.LoginDialog
import org.mosad.teapod.activity.main.fragments.AccountFragment import org.mosad.teapod.ui.activity.main.fragments.AccountFragment
import org.mosad.teapod.activity.main.fragments.HomeFragment import org.mosad.teapod.ui.activity.main.fragments.HomeFragment
import org.mosad.teapod.activity.main.fragments.LibraryFragment import org.mosad.teapod.ui.activity.main.fragments.LibraryFragment
import org.mosad.teapod.activity.main.fragments.SearchFragment import org.mosad.teapod.ui.activity.main.fragments.SearchFragment
import org.mosad.teapod.activity.onboarding.OnboardingActivity import org.mosad.teapod.ui.activity.onboarding.OnboardingActivity
import org.mosad.teapod.util.DataTypes import org.mosad.teapod.util.DataTypes
import org.mosad.teapod.util.StorageController import org.mosad.teapod.util.StorageController
import org.mosad.teapod.util.exitAndRemoveTask import org.mosad.teapod.util.exitAndRemoveTask
import java.net.SocketTimeoutException import java.net.SocketTimeoutException
import kotlin.system.exitProcess
import kotlin.system.measureTimeMillis import kotlin.system.measureTimeMillis
class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener { 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.content.Intent
import android.net.Uri 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.os.Bundle
import android.util.Log import android.util.Log
@@ -9,7 +9,7 @@ import androidx.fragment.app.Fragment
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.listItemsSingleChoice import com.afollestad.materialdialogs.list.listItemsSingleChoice
import org.mosad.teapod.BuildConfig 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.R
import org.mosad.teapod.databinding.FragmentAccountBinding import org.mosad.teapod.databinding.FragmentAccountBinding
import org.mosad.teapod.parser.AoDParser 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.os.Bundle
import android.util.Log import android.util.Log
@@ -11,7 +11,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.mosad.teapod.R 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.databinding.FragmentHomeBinding
import org.mosad.teapod.parser.AoDParser import org.mosad.teapod.parser.AoDParser
import org.mosad.teapod.util.ItemMedia 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.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@@ -9,7 +9,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.mosad.teapod.activity.main.MainActivity
import org.mosad.teapod.databinding.FragmentLibraryBinding import org.mosad.teapod.databinding.FragmentLibraryBinding
import org.mosad.teapod.parser.AoDParser import org.mosad.teapod.parser.AoDParser
import org.mosad.teapod.util.adapter.MediaItemAdapter 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.Color
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
@@ -17,14 +17,16 @@ import com.google.android.material.tabs.TabLayoutMediator
import jp.wasabeef.glide.transformations.BlurTransformation import jp.wasabeef.glide.transformations.BlurTransformation
import kotlinx.coroutines.* import kotlinx.coroutines.*
import org.mosad.teapod.R import org.mosad.teapod.R
import org.mosad.teapod.activity.main.MainActivity import org.mosad.teapod.ui.activity.main.MainActivity
import org.mosad.teapod.activity.main.viewmodel.MediaFragmentViewModel import org.mosad.teapod.ui.activity.main.viewmodel.MediaFragmentViewModel
import org.mosad.teapod.databinding.FragmentMediaBinding import org.mosad.teapod.databinding.FragmentMediaBinding
import org.mosad.teapod.util.* import org.mosad.teapod.util.*
import org.mosad.teapod.util.DataTypes.MediaType 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() { 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) 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 // specific gui
if (media.type == MediaType.TVSHOW) { if (media.type == MediaType.TVSHOW) {
// get next episode // get next episode
@@ -134,8 +140,10 @@ class MediaFragment(private val mediaId: Int) : Fragment() {
} }
// if has similar titles // if has similar titles
fragments.add(MediaSimilarFragment()) if (media.info.similar.isNotEmpty()) {
fragments.add(MediaFragmentSimilar())
pagerAdapter.notifyDataSetChanged() pagerAdapter.notifyDataSetChanged()
}
binding.frameLoading.visibility = View.GONE // hide loading indicator 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.os.Bundle
import android.util.Log import android.util.Log
@@ -7,8 +7,8 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import org.mosad.teapod.activity.main.MainActivity import org.mosad.teapod.ui.activity.main.MainActivity
import org.mosad.teapod.activity.main.viewmodel.MediaFragmentViewModel import org.mosad.teapod.ui.activity.main.viewmodel.MediaFragmentViewModel
import org.mosad.teapod.databinding.FragmentMediaEpisodesBinding import org.mosad.teapod.databinding.FragmentMediaEpisodesBinding
import org.mosad.teapod.util.Episode import org.mosad.teapod.util.Episode
import org.mosad.teapod.util.adapter.EpisodeItemAdapter 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.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@@ -7,7 +7,6 @@ import android.view.ViewGroup
import android.widget.SearchView import android.widget.SearchView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import kotlinx.coroutines.* import kotlinx.coroutines.*
import org.mosad.teapod.activity.main.MainActivity
import org.mosad.teapod.databinding.FragmentSearchBinding import org.mosad.teapod.databinding.FragmentSearchBinding
import org.mosad.teapod.parser.AoDParser import org.mosad.teapod.parser.AoDParser
import org.mosad.teapod.util.decoration.MediaItemDecoration 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 android.app.Application
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.AndroidViewModel
@@ -18,6 +18,9 @@ class MediaFragmentViewModel(application: Application) : AndroidViewModel(applic
var tmdb = TMDBResponse() var tmdb = TMDBResponse()
internal set internal set
/**
* set media, tmdb and nextEpisode
*/
suspend fun load(mediaId: Int) { suspend fun load(mediaId: Int) {
media = AoDParser.getMediaById(mediaId) media = AoDParser.getMediaById(mediaId)
tmdb = TMDBApiController().search(media.info.title, media.type) 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.os.Bundle
import android.view.LayoutInflater 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.os.Bundle
import android.view.LayoutInflater 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.content.Intent
import android.os.Bundle import android.os.Bundle
@@ -8,7 +8,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediator 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 import org.mosad.teapod.databinding.ActivityOnboardingBinding
class OnboardingActivity : AppCompatActivity() { 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.Animator
import android.animation.AnimatorListenerAdapter 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.app.Application
import android.net.Uri import android.net.Uri
@@ -6,7 +6,7 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import org.mosad.teapod.databinding.PlayerEpisodesListBinding 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 import org.mosad.teapod.util.adapter.PlayerEpisodeItemAdapter
class EpisodesListPlayer @JvmOverloads constructor( class EpisodesListPlayer @JvmOverloads constructor(
@@ -13,7 +13,7 @@ import android.widget.TextView
import androidx.core.view.children import androidx.core.view.children
import org.mosad.teapod.R import org.mosad.teapod.R
import org.mosad.teapod.databinding.PlayerLanguageSettingsBinding import org.mosad.teapod.databinding.PlayerLanguageSettingsBinding
import org.mosad.teapod.activity.player.PlayerViewModel import org.mosad.teapod.ui.activity.player.PlayerViewModel
import java.util.* import java.util.*
class LanguageSettingsPlayer @JvmOverloads constructor( class LanguageSettingsPlayer @JvmOverloads constructor(
@@ -62,7 +62,8 @@ data class Info(
var description: String = "", var description: String = "",
var year: Int = 0, var year: Int = 0,
var age: Int = 0, var age: Int = 0,
var episodesCount: Int = 0 var episodesCount: Int = 0,
var similar: List<ItemMedia> = listOf()
) )
/** /**
+1 -1
View File
@@ -7,7 +7,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#000000" android:background="#000000"
android:keepScreenOn="true" android:keepScreenOn="true"
tools:context=".activity.player.PlayerActivity"> tools:context=".ui.activity.player.PlayerActivity">
<com.google.android.exoplayer2.ui.StyledPlayerView <com.google.android.exoplayer2.ui.StyledPlayerView
android:id="@+id/video_view" android:id="@+id/video_view"
+1 -1
View File
@@ -6,7 +6,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?themePrimary" android:background="?themePrimary"
tools:context=".activity.main.fragments.AboutFragment"> tools:context=".ui.activity.main.fragments.AboutFragment">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
+1 -1
View File
@@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?themePrimary" android:background="?themePrimary"
tools:context=".activity.main.fragments.AccountFragment"> tools:context=".ui.activity.main.fragments.AccountFragment">
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
+1 -1
View File
@@ -6,7 +6,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?themePrimary" android:background="?themePrimary"
tools:context=".activity.main.fragments.HomeFragment"> tools:context=".ui.activity.main.fragments.HomeFragment">
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
+1 -1
View File
@@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?themePrimary" android:background="?themePrimary"
tools:context=".activity.main.fragments.LibraryFragment"> tools:context=".ui.activity.main.fragments.LibraryFragment">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_media_library" android:id="@+id/recycler_media_library"
+1 -1
View File
@@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?themePrimary" android:background="?themePrimary"
tools:context=".activity.main.fragments.MediaFragment"> tools:context=".ui.activity.main.fragments.MediaFragment">
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -2,17 +2,24 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<TextView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/textView2" android:id="@+id/recycler_media_similar"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_marginTop="7dp" android:layout_marginTop="3dp"
android:text="similar media" android:clipToPadding="false"
android:textColor="?textPrimary" android:orientation="vertical"
android:padding="3dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="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> </androidx.constraintlayout.widget.ConstraintLayout>
+1 -1
View File
@@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?themePrimary" android:background="?themePrimary"
tools:context=".activity.main.fragments.SearchFragment"> tools:context=".ui.activity.main.fragments.SearchFragment">
<SearchView <SearchView
android:id="@+id/search_text" android:id="@+id/search_text"
@@ -7,25 +7,25 @@
<fragment <fragment
android:id="@+id/navigation_home" 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" android:label="@string/title_home"
tools:layout="@layout/fragment_home" /> tools:layout="@layout/fragment_home" />
<fragment <fragment
android:id="@+id/navigation_library" 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" android:label="@string/title_library"
tools:layout="@layout/fragment_library" /> tools:layout="@layout/fragment_library" />
<fragment <fragment
android:id="@+id/navigation_search" 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" android:label="@string/title_search"
tools:layout="@layout/fragment_search" /> tools:layout="@layout/fragment_search" />
<fragment <fragment
android:id="@+id/navigation_account" 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" android:label="@string/title_account"
tools:layout="@layout/fragment_account" /> tools:layout="@layout/fragment_account" />