Browse Source

add recommendations to home fragment

develop
Jannik 1 month ago
parent
commit
12bbc2ef5f
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
  1. 17
      app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt
  2. 2
      app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt
  3. 10
      app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/HomeFragment.kt
  4. 9
      app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/HomeViewModel.kt
  5. 1
      app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt
  6. 28
      app/src/main/res/layout/fragment_home.xml
  7. 1
      app/src/main/res/values-de-rDE/strings.xml
  8. 1
      app/src/main/res/values/strings.xml

17
app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt

@ -646,6 +646,23 @@ object Crunchyroll {
}
}
suspend fun recommendations(n: Int = 20, start: Int = 0): RecommendationsList {
val recommendationsEndpoint = "/content/v1/$accountID/recommendations"
val parameters = listOf(
"locale" to Preferences.preferredLocale.toLanguageTag(),
"n" to n,
"start" to start,
"variant_id" to 0
)
return try {
requestGet(recommendationsEndpoint, parameters)
}catch (ex: SerializationException) {
Log.e(TAG, "SerializationException in recommendations().", ex)
NoneRecommendationsList
}
}
/**
* Account/Profile functions
*/

2
app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt

@ -124,6 +124,7 @@ typealias SimilarToResult = Collection<Item>
typealias DiscSeasonList = Collection<SeasonListItem>
typealias Watchlist = Collection<Item>
typealias ContinueWatchingList = Collection<ContinueWatchingItem>
typealias RecommendationsList = Collection<Item>
@Serializable
data class UpNextSeriesItem(
@ -224,6 +225,7 @@ val NoneBrowseResult = BrowseResult(0, emptyList())
val NoneSimilarToResult = SimilarToResult(0, emptyList())
val NoneDiscSeasonList = DiscSeasonList(0, emptyList())
val NoneContinueWatchingList = ContinueWatchingList(0, emptyList())
val NoneRecommendationsList = RecommendationsList(0, emptyList())
val NoneUpNextSeriesItem = UpNextSeriesItem(
playhead = 0,

10
app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/HomeFragment.kt

@ -61,6 +61,7 @@ class HomeFragment : Fragment() {
binding.recyclerUpNext.addItemDecoration(MediaItemDecoration(9))
binding.recyclerWatchlist.addItemDecoration(MediaItemDecoration(9))
binding.recyclerRecommendations.addItemDecoration(MediaItemDecoration(9))
binding.recyclerNewTitles.addItemDecoration(MediaItemDecoration(9))
binding.recyclerTopTen.addItemDecoration(MediaItemDecoration(9))
@ -79,6 +80,12 @@ class HomeFragment : Fragment() {
}
)
binding.recyclerRecommendations.adapter = MediaItemListAdapter(
MediaItemListAdapter.OnClickListener {
activity?.showFragment(MediaFragment(it.id))
}
)
binding.recyclerNewTitles.adapter = MediaItemListAdapter(
MediaItemListAdapter.OnClickListener {
activity?.showFragment(MediaFragment(it.id))
@ -129,6 +136,9 @@ class HomeFragment : Fragment() {
val adapterWatchlist = binding.recyclerWatchlist.adapter as MediaItemListAdapter
adapterWatchlist.submitList(uiState.watchlistItems.toItemMediaList())
val adapterRecommendations = binding.recyclerRecommendations.adapter as MediaItemListAdapter
adapterRecommendations.submitList(uiState.recommendationsItems.toItemMediaList())
val adapterNewTitles = binding.recyclerNewTitles.adapter as MediaItemListAdapter
adapterNewTitles.submitList(uiState.recentlyAddedItems.toItemMediaList())

9
app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/HomeViewModel.kt

@ -40,6 +40,7 @@ class HomeViewModel : ViewModel() {
data class Normal(
val upNextItems: List<ContinueWatchingItem>,
val watchlistItems: List<Item>,
val recommendationsItems: List<Item>,
val recentlyAddedItems: List<Item>,
val topTenItems: List<Item>,
val highlightItem: Item,
@ -63,6 +64,9 @@ class HomeViewModel : ViewModel() {
// run the loading in parallel to speed up the process
val upNextJob = viewModelScope.async { Crunchyroll.upNextAccount().items }
val watchlistJob = viewModelScope.async { Crunchyroll.watchlist(50).items }
val recommendationsJob = viewModelScope.async {
Crunchyroll.recommendations(20).items
}
val recentlyAddedJob = viewModelScope.async {
Crunchyroll.browse(sortBy = SortBy.NEWLY_ADDED, n = 50).items
}
@ -76,8 +80,9 @@ class HomeViewModel : ViewModel() {
val highlightItemIsWatchlist = Crunchyroll.isWatchlist(highlightItem.id)
uiState.emit(UiState.Normal(
upNextJob.await(), watchlistJob.await(), recentlyAddedJob.await(),
topTenJob.await(), highlightItem, highlightItemIsWatchlist
upNextJob.await(), watchlistJob.await(), recommendationsJob.await(),
recentlyAddedJob.await(), topTenJob.await(), highlightItem,
highlightItemIsWatchlist
))
} catch (e: Exception) {
uiState.emit(UiState.Error(e.message))

1
app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt

@ -462,7 +462,6 @@ class PlayerActivity : AppCompatActivity() {
playerBinding.buttonNextEp.isVisible = false
}
})
}
private fun showButtonSkipOp() {

28
app/src/main/res/layout/fragment_home.xml

@ -163,6 +163,34 @@
tools:listitem="@layout/item_media" />
</LinearLayout>
<LinearLayout
android:id="@+id/linear_recommendations"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="7dp">
<TextView
android:id="@+id/text_recommendations"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="10dp"
android:paddingTop="15dp"
android:paddingEnd="5dp"
android:paddingBottom="5dp"
android:text="@string/recommendations"
android:textSize="16sp"
android:textStyle="bold" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_recommendations"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_media" />
</LinearLayout>
<LinearLayout
android:id="@+id/linear_new_titles"
android:layout_width="match_parent"

1
app/src/main/res/values-de-rDE/strings.xml

@ -9,6 +9,7 @@
<string name="highlight_media">Highlight</string>
<string name="up_next">Weiterschauen</string>
<string name="my_list">Meine Liste</string>
<string name="recommendations">Empfehlungen</string>
<string name="new_episodes">Neue Episoden</string>
<string name="new_simulcasts">Neue Simulcasts</string>
<string name="new_titles">Neue Titel</string>

1
app/src/main/res/values/strings.xml

@ -9,6 +9,7 @@
<string name="highlight_media">Highlight</string>
<string name="up_next">Up next</string>
<string name="my_list">My list</string>
<string name="recommendations">Recommendations</string>
<string name="new_episodes">New episodes</string>
<string name="new_simulcasts">New simulcasts</string>
<string name="new_titles">New titles</string>

Loading…
Cancel
Save

Du besuchst diese Seite mit einem veralteten IPv4-Internetzugang. Möglicherweise treten in Zukunft Probleme mit der Erreichbarkeit und Performance auf. Bitte frage deinen Internetanbieter oder Netzwerkadministrator nach IPv6-Unterstützung.
You are visiting this site with an outdated IPv4 internet access. You may experience problems with accessibility and performance in the future. Please ask your ISP or network administrator for IPv6 support.
Weitere Infos | More Information
Klicke zum schließen | Click to close