From 5458b43354472d6ece5a37d79efee0195500ef75 Mon Sep 17 00:00:00 2001 From: Jannik Date: Fri, 16 Oct 2020 18:24:34 +0200 Subject: [PATCH] fix #9 & replace my list checkbox with layout for easier gui building --- .../java/org/mosad/teapod/parser/AoDParser.kt | 28 ++++++------- .../teapod/ui/fragments/MediaFragment.kt | 34 +++++++-------- .../teapod/util/adapter/EpisodeItemAdapter.kt | 12 ++++-- ...favorite_24.xml => ic_baseline_add_24.xml} | 2 +- .../res/drawable/ic_baseline_check_24.xml | 10 +++++ .../ic_baseline_favorite_border_24.xml | 10 ----- .../main/res/drawable/sl_favourite_24dp.xml | 11 ----- app/src/main/res/layout/fragment_media.xml | 41 +++++++++++++------ 8 files changed, 81 insertions(+), 67 deletions(-) rename app/src/main/res/drawable/{ic_baseline_favorite_24.xml => ic_baseline_add_24.xml} (58%) create mode 100644 app/src/main/res/drawable/ic_baseline_check_24.xml delete mode 100644 app/src/main/res/drawable/ic_baseline_favorite_border_24.xml delete mode 100644 app/src/main/res/drawable/sl_favourite_24dp.xml diff --git a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt index 40b8bab..1904398 100644 --- a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt +++ b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt @@ -11,7 +11,6 @@ import org.mosad.teapod.util.Episode import org.mosad.teapod.util.Media import java.io.IOException import java.util.* -import kotlin.collections.ArrayList /** * maybe AoDParser as object would be useful @@ -43,8 +42,8 @@ class AoDParser { val authenticityToken = resAuth.parse().select("meta[name=csrf-token]").attr("content") val authCookies = resAuth.cookies() - Log.i(javaClass.name, "Received authenticity token: $authenticityToken") - Log.i(javaClass.name, "Received authenticity cookies: $authCookies") + //Log.d(javaClass.name, "Received authenticity token: $authenticityToken") + //Log.d(javaClass.name, "Received authenticity cookies: $authCookies") val data = mapOf( Pair("user[login]", EncryptedPreferences.login), @@ -62,6 +61,7 @@ class AoDParser { .execute() //println(resLogin.body()) + sessionCookies = resLogin.cookies() loginSuccess = resLogin.body().contains("Hallo, du bist jetzt angemeldet.") Log.i(javaClass.name, "Status: ${resLogin.statusCode()} (${resLogin.statusMessage()}), login successful: $loginSuccess") @@ -167,14 +167,12 @@ class AoDParser { if (csrfToken.isEmpty()) { csrfToken = res.select("meta[name=csrf-token]").attr("content") + //Log.i(javaClass.name, "New csrf token is $csrfToken") } - // has attr data-lag (ger or jap) + // TODO has attr data-lag (ger or jap) val playlists = res.select("input.streamstarter_html5").eachAttr("data-playlist") - //println("first entry: ${playlists.first()}") - //println("csrf token is: $csrfToken") - return@withContext if (playlists.size > 0) { loadStreamInfo(playlists.first(), csrfToken, media.type, episodes) } else { @@ -197,7 +195,7 @@ class AoDParser { Pair("X-Requested-With", "XMLHttpRequest"), ) - println("loading streaminfo with cstf: $csrfToken") + //println("loading streaminfo with cstf: $csrfToken") val res = Jsoup.connect(baseUrl + playlistPath) .ignoreContentType(true) @@ -262,13 +260,15 @@ class AoDParser { ) try { - Jsoup.connect(baseUrl + callbackPath) - .ignoreContentType(true) - .cookies(sessionCookies) - .headers(headers) - .execute() + withContext(Dispatchers.IO) { + Jsoup.connect(baseUrl + callbackPath) + .ignoreContentType(true) + .cookies(sessionCookies) + .headers(headers) + .execute() + } } catch (ex: IOException) { - Log.e(javaClass.name, "Callback for $callbackPath failed.") + Log.e(javaClass.name, "Callback for $callbackPath failed.", ex) } } diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt b/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt index 8cd66b4..4324c5f 100644 --- a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt +++ b/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt @@ -4,10 +4,10 @@ import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.util.Log -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide @@ -17,11 +17,11 @@ import kotlinx.android.synthetic.main.fragment_media.* import org.mosad.teapod.MainActivity import org.mosad.teapod.R import org.mosad.teapod.parser.AoDParser -import org.mosad.teapod.util.StorageController import org.mosad.teapod.util.DataTypes.MediaType -import org.mosad.teapod.util.adapter.EpisodeItemAdapter import org.mosad.teapod.util.Media +import org.mosad.teapod.util.StorageController import org.mosad.teapod.util.TMDBResponse +import org.mosad.teapod.util.adapter.EpisodeItemAdapter class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) : Fragment() { @@ -60,11 +60,15 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) : text_year.text = media.info.year.toString() text_age.text = media.info.age.toString() text_overview.text = media.info.shortDesc - check_my_list.isChecked = StorageController.myList.contains(media.link) + if (StorageController.myList.contains(media.link)) { + Glide.with(requireContext()).load(R.drawable.ic_baseline_check_24).into(image_my_list_action) + } else { + Glide.with(requireContext()).load(R.drawable.ic_baseline_add_24).into(image_my_list_action) + } // specific gui if (media.type == MediaType.TVSHOW) { - adapterRecEpisodes = EpisodeItemAdapter(media.episodes, requireContext()) + adapterRecEpisodes = EpisodeItemAdapter(media.episodes) viewManager = LinearLayoutManager(context) recycler_episodes.layoutManager = viewManager recycler_episodes.adapter = adapterRecEpisodes @@ -91,15 +95,16 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) : } // add or remove media from myList - check_my_list.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - StorageController.myList.add(media.link) - } else { + linear_my_list_action.setOnClickListener { + if (StorageController.myList.contains(media.link)) { StorageController.myList.remove(media.link) + Glide.with(requireContext()).load(R.drawable.ic_baseline_add_24).into(image_my_list_action) + } else { + StorageController.myList.add(media.link) + Glide.with(requireContext()).load(R.drawable.ic_baseline_check_24).into(image_my_list_action) } - StorageController.saveMyList(requireContext()) - // TODO notify home fragment on change + // notify home fragment on change parentFragmentManager.findFragmentByTag("HomeFragment")?.let { (it as HomeFragment).updateMyListMedia() } @@ -119,11 +124,8 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) : } private fun playStream(url: String) { - val mainActivity = activity as MainActivity - - println("url is: $url") - - mainActivity.startPlayer(url) + Log.d(javaClass.name, "Playing stream: $url") + (activity as MainActivity).startPlayer(url) } } \ No newline at end of file diff --git a/app/src/main/java/org/mosad/teapod/util/adapter/EpisodeItemAdapter.kt b/app/src/main/java/org/mosad/teapod/util/adapter/EpisodeItemAdapter.kt index ad5aac6..eedc150 100644 --- a/app/src/main/java/org/mosad/teapod/util/adapter/EpisodeItemAdapter.kt +++ b/app/src/main/java/org/mosad/teapod/util/adapter/EpisodeItemAdapter.kt @@ -1,9 +1,9 @@ package org.mosad.teapod.util.adapter -import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions @@ -12,7 +12,7 @@ import kotlinx.android.synthetic.main.item_episode.view.* import org.mosad.teapod.R import org.mosad.teapod.util.Episode -class EpisodeItemAdapter(private val episodes: List, private val context: Context) : RecyclerView.Adapter() { +class EpisodeItemAdapter(private val episodes: List) : RecyclerView.Adapter() { var onItemClick: ((String, Int) -> Unit)? = null var onImageClick: ((String, Int) -> Unit)? = null @@ -24,6 +24,8 @@ class EpisodeItemAdapter(private val episodes: List, private val contex } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { + val context = holder.view.context + holder.view.text_episode_title.text = context.getString( R.string.component_episode_title, episodes[position].number, @@ -37,7 +39,11 @@ class EpisodeItemAdapter(private val episodes: List, private val contex .into(holder.view.image_episode) } - if (!episodes[position].watched) { + if (episodes[position].watched) { + holder.view.image_watched.setImageDrawable( + ContextCompat.getDrawable(context, R.drawable.ic_baseline_check_circle_24) + ) + } else { holder.view.image_watched.setImageDrawable(null) } } diff --git a/app/src/main/res/drawable/ic_baseline_favorite_24.xml b/app/src/main/res/drawable/ic_baseline_add_24.xml similarity index 58% rename from app/src/main/res/drawable/ic_baseline_favorite_24.xml rename to app/src/main/res/drawable/ic_baseline_add_24.xml index 52d4d9b..eb23254 100644 --- a/app/src/main/res/drawable/ic_baseline_favorite_24.xml +++ b/app/src/main/res/drawable/ic_baseline_add_24.xml @@ -6,5 +6,5 @@ android:tint="?attr/colorControlNormal"> + android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/> diff --git a/app/src/main/res/drawable/ic_baseline_check_24.xml b/app/src/main/res/drawable/ic_baseline_check_24.xml new file mode 100644 index 0000000..0432fa6 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_check_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml b/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml deleted file mode 100644 index 3edfe1d..0000000 --- a/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/sl_favourite_24dp.xml b/app/src/main/res/drawable/sl_favourite_24dp.xml deleted file mode 100644 index ba8bf14..0000000 --- a/app/src/main/res/drawable/sl_favourite_24dp.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_media.xml b/app/src/main/res/layout/fragment_media.xml index 9ed9d99..c79e977 100644 --- a/app/src/main/res/layout/fragment_media.xml +++ b/app/src/main/res/layout/fragment_media.xml @@ -113,19 +113,36 @@ android:layout_marginEnd="12dp" android:text="@string/text_overview_ex" /> - + android:layout_marginEnd="12dp" + android:orientation="horizontal"> + + + + + + + +