diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 398a0d5e..6ee1b793 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,16 +51,12 @@ - - >() val onDialogDismissedEvent = Event() lateinit var navOptions: NavOptions + + var currentToast: Toast? = null + fun showToast(act: Activity?, @StringRes message: Int, duration: Int) { + if (act == null) return + showToast(act, act.getString(message), duration) + } + + fun showToast(act: Activity?, message: String, duration: Int) { + if (act == null) return + try { + currentToast?.cancel() + } catch (e: Exception) { + e.printStackTrace() + } + try { + val inflater = act.getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater + + val layout: View = inflater.inflate( + R.layout.toast, + act.findViewById(R.id.toast_layout_root) as ViewGroup? + ) + + val text = layout.findViewById(R.id.text) as TextView + text.text = message.trim() + + val toast = Toast(act) + toast.setGravity(Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM, 0, 5.toPx) + toast.duration = duration + toast.view = layout + toast.show() + currentToast = toast + } catch (e: Exception) { + + } + } } private fun enterPIPMode() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/animeproviders/AnimeFlickProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/AnimeFlickProvider.kt index 0c849187..c71033b1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/animeproviders/AnimeFlickProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/AnimeFlickProvider.kt @@ -2,7 +2,8 @@ package com.lagradost.cloudstream3.animeproviders import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.getQualityFromName +import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.utils.extractorApis import org.jsoup.Jsoup import java.util.* @@ -65,14 +66,15 @@ class AnimeFlickProvider : MainAPI() { val title = doc.selectFirst("h2.title").text() val yearText = doc.selectFirst(".trending-year")?.text() - val year = if(yearText != null) Regex("""(\d{4})""").find(yearText)?.destructured?.component1()?.toIntOrNull() else null + val year = if (yearText != null) Regex("""(\d{4})""").find(yearText)?.destructured?.component1() + ?.toIntOrNull() else null val description = doc.selectFirst("p").text() val genres = doc.select("a[href*=\"genre-\"]").map { it.text() } val episodes = doc.select("#collapseOne .block-space > .row > div:nth-child(2)").map { val name = it.selectFirst("a").text() - val link = mainUrl + it.selectFirst("a").attr("href") + val link = mainUrl + it.selectFirst("a").attr("href") AnimeEpisode(link, name) }.reversed() @@ -102,19 +104,33 @@ class AnimeFlickProvider : MainAPI() { val html = khttp.get(data).text val episodeRegex = Regex("""(https://.*?\.mp4)""") - episodeRegex.findAll(html).map { + val links = episodeRegex.findAll(html).map { it.value - }.toList().forEach { - callback( - ExtractorLink( - "Animeflick", - "Animeflick - Auto", - it, - "", - getQualityFromName("1080") + }.toList() + for (link in links) { + var alreadyAdded = false + for (extractor in extractorApis) { + if (link.startsWith(extractor.mainUrl)) { + extractor.getSafeUrl(link, data)?.forEach { + callback(it) + } + alreadyAdded = true + break + } + } + if (!alreadyAdded) { + callback( + ExtractorLink( + this.name, + "${this.name} - Auto", + link, + "", + Qualities.P1080.value + ) ) - ) + } } + return true } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/receivers/VideoDownloadRestartReceiver.kt b/app/src/main/java/com/lagradost/cloudstream3/receivers/VideoDownloadRestartReceiver.kt index beabd7ab..9a7ee826 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/receivers/VideoDownloadRestartReceiver.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/receivers/VideoDownloadRestartReceiver.kt @@ -5,9 +5,6 @@ import android.content.Context import android.content.Intent import android.os.Build import android.util.Log -import com.lagradost.cloudstream3.services.RESTART_ALL_DOWNLOADS_AND_QUEUE -import com.lagradost.cloudstream3.services.START_VALUE_KEY -import com.lagradost.cloudstream3.services.VideoDownloadKeepAliveService class VideoDownloadRestartReceiver : BroadcastReceiver() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/services/VideoDownloadKeepAliveService.kt b/app/src/main/java/com/lagradost/cloudstream3/services/VideoDownloadKeepAliveService.kt deleted file mode 100644 index 9bbf846d..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/services/VideoDownloadKeepAliveService.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.lagradost.cloudstream3.services - -import android.app.Service -import android.content.Intent -import android.os.IBinder -import android.util.Log -import com.lagradost.cloudstream3.receivers.VideoDownloadRestartReceiver -import com.lagradost.cloudstream3.utils.DataStore.getKey -import com.lagradost.cloudstream3.utils.DataStore.getKeys -import com.lagradost.cloudstream3.utils.VideoDownloadManager - -const val RESTART_ALL_DOWNLOADS_AND_QUEUE = 1 -const val RESTART_NONE = 0 -const val START_VALUE_KEY = "start_value" - -class VideoDownloadKeepAliveService : Service() { - override fun onBind(p0: Intent?): IBinder? { - return null - } - - override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - val startValue = intent?.getIntExtra(START_VALUE_KEY, RESTART_NONE) ?: RESTART_NONE - Log.i("Service", "Restarted with start value of $startValue") - - if (startValue == RESTART_ALL_DOWNLOADS_AND_QUEUE) { - val keys = this.getKeys(VideoDownloadManager.KEY_RESUME_PACKAGES) - val resumePkg = keys.mapNotNull { k -> this.getKey(k) } - - for (pkg in resumePkg) { // ADD ALL CURRENT DOWNLOADS - VideoDownloadManager.downloadFromResume(this, pkg) - } - - // ADD QUEUE - val resumeQueue = - this.getKey>(VideoDownloadManager.KEY_RESUME_QUEUE_PACKAGES) - if (resumeQueue != null && resumeQueue.isNotEmpty()) { - val sorted = resumeQueue.sortedBy { item -> item.index } - for (queueItem in sorted) { - VideoDownloadManager.downloadFromResume(this, queueItem.pkg) - } - } - } - - return START_STICKY//super.onStartCommand(intent, flags, startId) - } - - override fun onDestroy() { - val broadcastIntent = Intent() - broadcastIntent.action = "restart_service" - broadcastIntent.setClass(this, VideoDownloadRestartReceiver::class.java) - this.sendBroadcast(broadcastIntent) - super.onDestroy() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt index a37660cf..e6898c79 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt @@ -57,6 +57,7 @@ import com.google.android.material.button.MaterialButton import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.MainActivity.Companion.canEnterPipMode import com.lagradost.cloudstream3.MainActivity.Companion.isInPIPMode +import com.lagradost.cloudstream3.MainActivity.Companion.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.observe @@ -1242,7 +1243,8 @@ class PlayerFragment : Fragment() { } } - val startIndexFromMap = currentSubtitles.map { it.removeSuffix(" ") }.indexOf(preferredSubtitles.removeSuffix(" ")) + 1 + val startIndexFromMap = + currentSubtitles.map { it.removeSuffix(" ") }.indexOf(preferredSubtitles.removeSuffix(" ")) + 1 var subtitleIndex = startIndexFromMap if (currentSubtitles.isEmpty()) { @@ -1805,33 +1807,30 @@ class PlayerFragment : Fragment() { when (error.type) { ExoPlaybackException.TYPE_SOURCE -> { if (currentUrl?.url != "") { - Toast.makeText( + showToast( activity, "Source error\n" + error.sourceException.message, LENGTH_SHORT ) - .show() tryNextMirror() } } ExoPlaybackException.TYPE_REMOTE -> { - Toast.makeText(activity, "Remote error", LENGTH_SHORT) - .show() + showToast(activity, "Remote error", LENGTH_SHORT) } ExoPlaybackException.TYPE_RENDERER -> { - Toast.makeText( + showToast( activity, "Renderer error\n" + error.rendererException.message, LENGTH_SHORT ) - .show() } ExoPlaybackException.TYPE_UNEXPECTED -> { - Toast.makeText( + showToast( activity, "Unexpected player error\n" + error.unexpectedException.message, LENGTH_SHORT - ).show() + ) } } } @@ -1840,8 +1839,8 @@ class PlayerFragment : Fragment() { println("Warning: Illegal state exception in PlayerFragment") } finally { setPreferredSubLanguage( - if(isDownloadedFile) { - if(activeSubtitles.isNotEmpty()) { + if (isDownloadedFile) { + if (activeSubtitles.isNotEmpty()) { activeSubtitles.first() } else null } else { @@ -1877,9 +1876,7 @@ class PlayerFragment : Fragment() { initPlayer(getCurrentUrl()) } } else { - context?.let { ctx -> - Toast.makeText(ctx, "No Links Found", LENGTH_SHORT).show() - } + showToast(activity, "No Links Found", LENGTH_SHORT) } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 421cede6..4ab73e12 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -39,6 +39,7 @@ const val ACTION_COPY_LINK = 9 const val ACTION_SHOW_OPTIONS = 10 const val ACTION_CLICK_DEFAULT = 11 +const val ACTION_SHOW_TOAST = 12 data class EpisodeClickEvent(val action: Int, val data: ResultEpisode) @@ -173,7 +174,7 @@ class EpisodeAdapter( } episodePoster?.setOnLongClickListener { - Toast.makeText(it.context, R.string.play_episode_toast, Toast.LENGTH_SHORT).show() + clickCallback.invoke(EpisodeClickEvent(ACTION_SHOW_TOAST, card)) return@setOnLongClickListener true } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index b20933e9..0f8486a2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -31,25 +31,16 @@ import com.google.android.material.button.MaterialButton import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.getApiFromName import com.lagradost.cloudstream3.APIHolder.getId -import com.lagradost.cloudstream3.utils.UIHelper.checkWrite -import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute -import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar -import com.lagradost.cloudstream3.utils.UIHelper.getStatusBarHeight -import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard -import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage -import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIcons -import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes -import com.lagradost.cloudstream3.utils.UIHelper.requestRW +import com.lagradost.cloudstream3.MainActivity.Companion.showToast import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.download.DOWNLOAD_ACTION_DOWNLOAD import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO -import com.lagradost.cloudstream3.ui.download.EasyDownloadButton import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick +import com.lagradost.cloudstream3.ui.download.EasyDownloadButton import com.lagradost.cloudstream3.ui.player.PlayerData import com.lagradost.cloudstream3.ui.player.PlayerFragment -import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment.Companion.getDownloadSubsLanguageISO639_1 import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.isAppInstalled @@ -60,16 +51,22 @@ import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DataStore.getFolderName import com.lagradost.cloudstream3.utils.DataStore.setKey import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos +import com.lagradost.cloudstream3.utils.UIHelper.checkWrite +import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar +import com.lagradost.cloudstream3.utils.UIHelper.getStatusBarHeight +import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard +import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage +import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIcons +import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes +import com.lagradost.cloudstream3.utils.UIHelper.requestRW import com.lagradost.cloudstream3.utils.UIHelper.setImage - import com.lagradost.cloudstream3.utils.VideoDownloadManager.sanitizeFilename import kotlinx.android.synthetic.main.fragment_result.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.withContext import java.io.File -import kotlin.collections.ArrayList -import kotlin.collections.HashMap const val MAX_SYNO_LENGH = 300 @@ -278,7 +275,7 @@ class ResultFragment : Fragment() { media_route_button?.alpha = if (chromecastSupport) 1f else 0.3f if (!chromecastSupport) { media_route_button.setOnClickListener { - Toast.makeText(it.context, "This provider has no chromecast support", Toast.LENGTH_LONG).show() + showToast(activity, "This provider has no chromecast support", Toast.LENGTH_LONG) } } @@ -369,7 +366,11 @@ class ResultFragment : Fragment() { return true } is Resource.Failure -> { - Toast.makeText(requireContext(), R.string.error_loading_links, Toast.LENGTH_SHORT).show() + showToast( + activity, + R.string.error_loading_links, + Toast.LENGTH_SHORT + ) } else -> { @@ -476,7 +477,7 @@ class ResultFragment : Fragment() { // DOWNLOAD VIDEO VideoDownloadManager.downloadEpisode( - ctx, + activity, src,//url ?: return, folder, meta, @@ -525,6 +526,10 @@ class ResultFragment : Fragment() { if (!isLoaded) return@main // CANT LOAD when (episodeClick.action) { + ACTION_SHOW_TOAST -> { + showToast(activity, R.string.play_episode_toast, Toast.LENGTH_SHORT) + } + ACTION_CLICK_DEFAULT -> { context?.let { ctx -> if (ctx.isConnectedToChromecast()) { @@ -584,7 +589,7 @@ class ResultFragment : Fragment() { ?: return@acquireSingeExtractorLink val clip = ClipData.newPlainText(link.name, link.url) serviceClipboard.setPrimaryClip(clip) - Toast.makeText(requireContext(), "Text Copied", Toast.LENGTH_SHORT).show() + showToast(activity, "Link copied to clipboard", Toast.LENGTH_SHORT) } } @@ -1012,7 +1017,7 @@ class ResultFragment : Fragment() { } } is Resource.Failure -> { - result_error_text.text = data.errorString + result_error_text.text = url?.plus("\n") + data.errorString updateVisStatus(1) } is Resource.Loading -> { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt index bc2ce06c..d2534bde 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt @@ -2,6 +2,7 @@ package com.lagradost.cloudstream3.ui.search import android.app.Activity import android.widget.Toast +import com.lagradost.cloudstream3.MainActivity.Companion.showToast import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult object SearchHelper { @@ -12,9 +13,7 @@ object SearchHelper { activity.loadSearchResult(card) } SEARCH_ACTION_SHOW_METADATA -> { - activity?.let { act -> - Toast.makeText(act, callback.card.name, Toast.LENGTH_SHORT).show() - } + showToast(activity, callback.card.name, Toast.LENGTH_SHORT) } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index f8dcee90..f293b3a7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.widget.Toast import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import com.lagradost.cloudstream3.MainActivity.Companion.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate @@ -19,7 +20,7 @@ class SettingsFragment : PreferenceFragmentCompat() { thread { if (!requireActivity().runAutoUpdate(false)) { activity?.runOnUiThread { - Toast.makeText(this.context, "No Update Found", Toast.LENGTH_SHORT).show() + showToast(activity, "No Update Found", Toast.LENGTH_SHORT) } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt index bca44297..4a2d4b32 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt @@ -21,6 +21,7 @@ import com.google.android.exoplayer2.text.Cue import com.google.android.exoplayer2.ui.CaptionStyleCompat import com.jaredrummler.android.colorpicker.ColorPickerDialog import com.lagradost.cloudstream3.MainActivity +import com.lagradost.cloudstream3.MainActivity.Companion.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.setKey @@ -207,7 +208,7 @@ class SubtitlesFragment : Fragment() { this.setOnLongClickListener { it.context.setColor(id, null) - Toast.makeText(it.context, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT).show() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } } @@ -248,7 +249,7 @@ class SubtitlesFragment : Fragment() { subs_subtitle_elevation.setOnLongClickListener { state.elevation = 0 it.context.updateState() - Toast.makeText(it.context, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT).show() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } @@ -276,7 +277,7 @@ class SubtitlesFragment : Fragment() { subs_edge_type.setOnLongClickListener { state.edgeType = CaptionStyleCompat.EDGE_TYPE_OUTLINE it.context.updateState() - Toast.makeText(it.context, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT).show() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } @@ -312,7 +313,7 @@ class SubtitlesFragment : Fragment() { subs_font.setOnLongClickListener { textView -> state.typeface = null textView.context.updateState() - Toast.makeText(textView.context, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT).show() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } @@ -336,7 +337,7 @@ class SubtitlesFragment : Fragment() { subs_auto_select_language.setOnLongClickListener { textView -> textView.context.setKey(SUBTITLE_AUTO_SELECT_KEY, "en") - Toast.makeText(textView.context, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT).show() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } @@ -359,7 +360,7 @@ class SubtitlesFragment : Fragment() { subs_download_languages.setOnLongClickListener { textView -> textView.context.setKey(SUBTITLE_DOWNLOAD_KEY, listOf("en")) - Toast.makeText(textView.context, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT).show() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt index 02a36991..3380cb3f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt @@ -15,8 +15,8 @@ import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.module.kotlin.KotlinModule import com.fasterxml.jackson.module.kotlin.readValue import com.lagradost.cloudstream3.BuildConfig +import com.lagradost.cloudstream3.MainActivity.Companion.showToast import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate import java.io.* import java.net.URL import java.net.URLConnection @@ -178,7 +178,7 @@ class InAppUpdater { } catch (e: Exception) { println(e) runOnUiThread { - Toast.makeText(this, "Permission error", Toast.LENGTH_SHORT).show() + showToast(this, "Permission error", Toast.LENGTH_SHORT) } return false } @@ -291,14 +291,14 @@ class InAppUpdater { val context = this builder.apply { setPositiveButton("Update") { _, _ -> - Toast.makeText(context, "Download started", Toast.LENGTH_LONG).show() + showToast(context, "Download started", Toast.LENGTH_LONG) thread { val downloadStatus = context.downloadUpdate(update.updateURL) if (!downloadStatus) { runOnUiThread { - Toast.makeText(context, + showToast(context, "Download Failed", - Toast.LENGTH_LONG).show() + Toast.LENGTH_LONG) } } /*else { activity.runOnUiThread { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 3771e38f..a5db6f20 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -1,9 +1,6 @@ package com.lagradost.cloudstream3.utils -import android.app.ActivityManager -import android.app.NotificationChannel -import android.app.NotificationManager -import android.app.PendingIntent +import android.app.* import android.content.* import android.graphics.Bitmap import android.net.Uri @@ -19,6 +16,7 @@ import androidx.core.app.NotificationManagerCompat import androidx.core.net.toUri import com.bumptech.glide.Glide import com.lagradost.cloudstream3.MainActivity +import com.lagradost.cloudstream3.MainActivity.Companion.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall @@ -908,15 +906,15 @@ object VideoDownloadManager { return context.getKey(KEY_RESUME_PACKAGES, id.toString()) } - fun downloadFromResume(context: Context, pkg: DownloadResumePackage, setKey: Boolean = true) { + fun downloadFromResume(context: Activity, pkg: DownloadResumePackage, setKey: Boolean = true) { if (!currentDownloads.any { it == pkg.item.ep.id }) { if (currentDownloads.size == maxConcurrentDownloads) { main { - Toast.makeText( + showToast( // can be replaced with regular Toast context, "${pkg.item.ep.mainName}${pkg.item.ep.episode?.let { " Episode $it " } ?: " "}queued", Toast.LENGTH_SHORT - ).show() + ) } } downloadQueue.addLast(pkg) @@ -947,12 +945,13 @@ object VideoDownloadManager { } fun downloadEpisode( - context: Context, + context: Activity?, source: String?, folder: String?, ep: DownloadEpisodeMetadata, links: List ) { + if(context == null) return val validLinks = links.filter { !it.isM3u8 } if (validLinks.isNotEmpty()) { downloadFromResume(context, DownloadResumePackage(DownloadItem(source, folder, ep, validLinks), null)) diff --git a/app/src/main/res/layout/fragment_player.xml b/app/src/main/res/layout/fragment_player.xml index 7bb3ff76..8f4f95ab 100644 --- a/app/src/main/res/layout/fragment_player.xml +++ b/app/src/main/res/layout/fragment_player.xml @@ -49,7 +49,6 @@ android:id="@+id/overlay_loading_skip_button" android:text="@string/skip_loading" - app:rippleColor="?attr/colorPrimary" android:textColor="?attr/textColor" app:iconTint="?attr/textColor" diff --git a/app/src/main/res/layout/fragment_result.xml b/app/src/main/res/layout/fragment_result.xml index 87fee9e6..d0832dd1 100644 --- a/app/src/main/res/layout/fragment_result.xml +++ b/app/src/main/res/layout/fragment_result.xml @@ -389,10 +389,13 @@ - + + + + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 6cc5f548..0c85c695 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -7,6 +7,7 @@ @color/colorAccent @drawable/splash_background ?attr/bitDarkerGrayBackground + ?attr/textColor @color/grayBackground