forked from recloudstream/cloudstream
Fix homepage and fix some tv issues
This commit is contained in:
parent
ef165ad4cb
commit
318ee08366
9 changed files with 90 additions and 32 deletions
|
@ -11,6 +11,9 @@ import android.view.Menu
|
|||
import android.view.MenuItem
|
||||
import android.view.WindowManager
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.ActivityResult
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.annotation.IdRes
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.isVisible
|
||||
|
@ -33,6 +36,7 @@ import com.lagradost.cloudstream3.APIHolder.apis
|
|||
import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings
|
||||
import com.lagradost.cloudstream3.APIHolder.initAll
|
||||
import com.lagradost.cloudstream3.APIHolder.updateHasTrailers
|
||||
import com.lagradost.cloudstream3.CommonActivity.currentToast
|
||||
import com.lagradost.cloudstream3.CommonActivity.loadThemes
|
||||
import com.lagradost.cloudstream3.CommonActivity.onColorSelectedEvent
|
||||
import com.lagradost.cloudstream3.CommonActivity.onDialogDismissedEvent
|
||||
|
@ -85,7 +89,10 @@ import com.lagradost.cloudstream3.plugins.PluginManager
|
|||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringRepo
|
||||
import com.lagradost.cloudstream3.ui.setup.SetupFragmentExtensions
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.loadRepository
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.main
|
||||
import com.lagradost.cloudstream3.utils.Event
|
||||
import kotlinx.coroutines.delay
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
|
||||
const val VLC_PACKAGE = "org.videolan.vlc"
|
||||
|
@ -293,7 +300,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
if (VLC_REQUEST_CODE == requestCode) {
|
||||
if (requestCode == VLC_REQUEST_CODE) {
|
||||
if (resultCode == RESULT_OK && data != null) {
|
||||
val pos: Long =
|
||||
data.getLongExtra(
|
||||
|
@ -677,13 +684,25 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
&& PluginManager.getPluginsLocal().isEmpty()
|
||||
// && PREBUILT_REPOSITORIES.isNotEmpty()
|
||||
) {
|
||||
navController.navigate(R.id.navigation_setup_extensions, SetupFragmentExtensions.newInstance(false))
|
||||
navController.navigate(
|
||||
R.id.navigation_setup_extensions,
|
||||
SetupFragmentExtensions.newInstance(false)
|
||||
)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
logError(e)
|
||||
} finally {
|
||||
setKey(HAS_DONE_SETUP_KEY, true)
|
||||
}
|
||||
|
||||
// Used to check current focus for TV
|
||||
// main {
|
||||
// while (true) {
|
||||
// delay(1000)
|
||||
// println("Current focus: $currentFocus")
|
||||
// }
|
||||
// }
|
||||
|
||||
/*
|
||||
|
||||
val relativePath = (Environment.DIRECTORY_DOWNLOADS) + File.separatorChar
|
||||
|
|
|
@ -60,8 +60,7 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.deleteAllResumeStateIds
|
|||
import com.lagradost.cloudstream3.utils.DataStoreHelper.removeLastWatched
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.setResultWatchState
|
||||
import com.lagradost.cloudstream3.utils.Event
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import com.lagradost.cloudstream3.utils.HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showOptionSelectStringRes
|
||||
import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
||||
|
@ -455,8 +454,10 @@ class HomeFragment : Fragment() {
|
|||
homeViewModel.loadStoredData(list)
|
||||
}
|
||||
|
||||
private fun loadHomePage(successful: Boolean = true) {
|
||||
val apiName = context?.getKey<String>(HOMEPAGE_API)
|
||||
private fun loadHomePage(successful: Boolean = false) {
|
||||
val apiName = context?.getKey<String>(USER_SELECTED_HOMEPAGE_API)
|
||||
|
||||
println("LOAD HOMEPAGE $successful $apiName ${homeViewModel.apiName.value}")
|
||||
if (homeViewModel.apiName.value != apiName || apiName == null) {
|
||||
//println("Caught home: " + homeViewModel.apiName.value + " at " + apiName)
|
||||
homeViewModel.loadAndCancel(apiName)
|
||||
|
@ -512,7 +513,7 @@ class HomeFragment : Fragment() {
|
|||
|
||||
observe(homeViewModel.apiName) { apiName ->
|
||||
currentApiName = apiName
|
||||
setKey(HOMEPAGE_API, apiName)
|
||||
// setKey(USER_SELECTED_HOMEPAGE_API, apiName)
|
||||
home_api_fab?.text = apiName
|
||||
home_provider_name?.text = apiName
|
||||
try {
|
||||
|
|
|
@ -31,7 +31,7 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData
|
|||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getLastWatched
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getResultWatchState
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos
|
||||
import com.lagradost.cloudstream3.utils.HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
|
@ -227,7 +227,8 @@ class HomeViewModel : ViewModel() {
|
|||
expandable.clear()
|
||||
data.value.forEach { home ->
|
||||
home?.items?.forEach { list ->
|
||||
val filteredList = context?.filterHomePageListByFilmQuality(list) ?: list
|
||||
val filteredList =
|
||||
context?.filterHomePageListByFilmQuality(list) ?: list
|
||||
expandable[list.name] =
|
||||
ExpandableHomepageList(filteredList, 1, home.hasNext)
|
||||
}
|
||||
|
@ -244,7 +245,9 @@ class HomeViewModel : ViewModel() {
|
|||
.toList()
|
||||
|
||||
if (currentList.isNotEmpty()) {
|
||||
val randomItems = context?.filterSearchResultByFilmQuality(currentList.shuffled()) ?: currentList.shuffled()
|
||||
val randomItems =
|
||||
context?.filterSearchResultByFilmQuality(currentList.shuffled())
|
||||
?: currentList.shuffled()
|
||||
|
||||
_randomItems.postValue(randomItems)
|
||||
}
|
||||
|
@ -266,18 +269,22 @@ class HomeViewModel : ViewModel() {
|
|||
|
||||
fun loadAndCancel(preferredApiName: String?) = viewModelScope.launch {
|
||||
val api = getApiFromNameNull(preferredApiName)
|
||||
if (preferredApiName == noneApi.name)
|
||||
if (preferredApiName == noneApi.name){
|
||||
setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name)
|
||||
loadAndCancel(noneApi)
|
||||
}
|
||||
else if (preferredApiName == randomApi.name || api == null) {
|
||||
val validAPIs = context?.filterProviderByPreferredMedia()
|
||||
if (validAPIs.isNullOrEmpty()) {
|
||||
// Do not set USER_SELECTED_HOMEPAGE_API when there is no plugins loaded
|
||||
loadAndCancel(noneApi)
|
||||
} else {
|
||||
val apiRandom = validAPIs.random()
|
||||
loadAndCancel(apiRandom)
|
||||
setKey(HOMEPAGE_API, apiRandom.name)
|
||||
setKey(USER_SELECTED_HOMEPAGE_API, apiRandom.name)
|
||||
}
|
||||
} else {
|
||||
setKey(USER_SELECTED_HOMEPAGE_API, api.name)
|
||||
loadAndCancel(api)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ import com.lagradost.cloudstream3.mvvm.logError
|
|||
import com.lagradost.cloudstream3.ui.APIRepository
|
||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
|
||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
|
||||
import com.lagradost.cloudstream3.utils.HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
|
||||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
|
||||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog
|
||||
|
@ -116,7 +116,7 @@ class SettingsLang : PreferenceFragmentCompat() {
|
|||
.putInt(getString(R.string.prefer_media_type_key), prefValues[it])
|
||||
.apply()
|
||||
|
||||
removeKey(HOMEPAGE_API)
|
||||
removeKey(USER_SELECTED_HOMEPAGE_API)
|
||||
// (context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) }
|
||||
}
|
||||
return@setOnPreferenceClickListener true
|
||||
|
|
|
@ -11,7 +11,7 @@ import androidx.navigation.fragment.findNavController
|
|||
import androidx.preference.PreferenceManager
|
||||
import com.lagradost.cloudstream3.R
|
||||
import com.lagradost.cloudstream3.utils.DataStore.removeKey
|
||||
import com.lagradost.cloudstream3.utils.HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||
import kotlinx.android.synthetic.main.fragment_setup_media.*
|
||||
|
||||
|
@ -52,7 +52,7 @@ class SetupFragmentMedia : Fragment() {
|
|||
.apply()
|
||||
|
||||
// Regenerate set homepage
|
||||
removeKey(HOMEPAGE_API)
|
||||
removeKey(USER_SELECTED_HOMEPAGE_API)
|
||||
}
|
||||
|
||||
next_btt?.setOnClickListener {
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.lagradost.cloudstream3.utils
|
|||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.Activity.RESULT_CANCELED
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
|
@ -21,6 +22,7 @@ import android.provider.MediaStore
|
|||
import android.text.Spanned
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.annotation.WorkerThread
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
|
@ -41,13 +43,11 @@ import com.google.android.gms.cast.framework.CastState
|
|||
import com.google.android.gms.common.ConnectionResult
|
||||
import com.google.android.gms.common.GoogleApiAvailability
|
||||
import com.google.android.gms.common.wrappers.Wrappers
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.CommonActivity.showToast
|
||||
import com.lagradost.cloudstream3.MainActivity.Companion.afterRepositoryLoadedEvent
|
||||
import com.lagradost.cloudstream3.R
|
||||
import com.lagradost.cloudstream3.SearchResponse
|
||||
import com.lagradost.cloudstream3.isMovieType
|
||||
import com.lagradost.cloudstream3.mapper
|
||||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
|
||||
import com.lagradost.cloudstream3.plugins.RepositoryManager
|
||||
import com.lagradost.cloudstream3.ui.WebviewFragment
|
||||
import com.lagradost.cloudstream3.ui.result.ResultFragment
|
||||
|
@ -239,6 +239,7 @@ object AppUtils {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun Activity.loadRepository(url: String) {
|
||||
ioSafe {
|
||||
val repo = RepositoryManager.parseRepository(url) ?: return@ioSafe
|
||||
|
@ -259,6 +260,18 @@ object AppUtils {
|
|||
}
|
||||
}
|
||||
|
||||
private fun Context.hasWebView(): Boolean {
|
||||
return this.packageManager.hasSystemFeature("android.software.webview")
|
||||
}
|
||||
|
||||
private fun openWebView(fragment: Fragment?, url: String) {
|
||||
if (fragment?.context?.hasWebView() == true)
|
||||
normalSafeApiCall {
|
||||
fragment
|
||||
.findNavController()
|
||||
.navigate(R.id.navigation_webview, WebviewFragment.newInstance(url))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If fallbackWebview is true and a fragment is supplied then it will open a webview with the url if the browser fails.
|
||||
|
@ -266,23 +279,34 @@ object AppUtils {
|
|||
fun Context.openBrowser(
|
||||
url: String,
|
||||
fallbackWebview: Boolean = false,
|
||||
fragment: Fragment? = null
|
||||
fragment: Fragment? = null,
|
||||
) {
|
||||
try {
|
||||
val intent = Intent(Intent.ACTION_VIEW)
|
||||
intent.data = Uri.parse(url)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
|
||||
|
||||
// activityResultRegistry is used to fall back to webview if a browser is missing
|
||||
// On older versions the startActivity just crashes, but on newer android versions
|
||||
// You need to check the result to make sure it failed
|
||||
val activityResultRegistry = fragment?.activity?.activityResultRegistry
|
||||
if (activityResultRegistry != null) {
|
||||
activityResultRegistry.register(
|
||||
url,
|
||||
ActivityResultContracts.StartActivityForResult()
|
||||
) { result ->
|
||||
if (result.resultCode == RESULT_CANCELED && fallbackWebview) {
|
||||
openWebView(fragment, url)
|
||||
}
|
||||
}.launch(intent)
|
||||
} else {
|
||||
ContextCompat.startActivity(this, intent, null)
|
||||
}
|
||||
|
||||
} catch (e: Exception) {
|
||||
logError(e)
|
||||
if (fallbackWebview) {
|
||||
try {
|
||||
fragment
|
||||
?.findNavController()
|
||||
?.navigate(R.id.navigation_webview, WebviewFragment.newInstance(url))
|
||||
} catch (e: Exception) {
|
||||
logError(e)
|
||||
}
|
||||
openWebView(fragment, url)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ const val DOWNLOAD_HEADER_CACHE = "download_header_cache"
|
|||
//const val WATCH_HEADER_CACHE = "watch_header_cache"
|
||||
const val DOWNLOAD_EPISODE_CACHE = "download_episode_cache"
|
||||
const val VIDEO_PLAYER_BRIGHTNESS = "video_player_alpha_key"
|
||||
const val HOMEPAGE_API = "home_api_used"
|
||||
const val USER_SELECTED_HOMEPAGE_API = "home_api_used"
|
||||
const val USER_PROVIDER_API = "user_custom_sites"
|
||||
|
||||
const val PREFERENCES_NAME = "rebuild_preference"
|
||||
|
|
|
@ -163,7 +163,7 @@
|
|||
|
||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
android:id="@+id/add_repo_button"
|
||||
android:nextFocusUp="@id/list_repositories"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:nextFocusDown="@id/plugin_storage_appbar"
|
||||
style="@style/ExtendedFloatingActionButton"
|
||||
android:text="@string/add_repository"
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:nextFocusRight="@id/action_button"
|
||||
android:background="@drawable/outline_drawable"
|
||||
android:padding="20dp">
|
||||
|
||||
<ImageView
|
||||
|
@ -77,11 +79,16 @@
|
|||
tools:visibility="visible" />
|
||||
|
||||
<ImageView
|
||||
android:padding="10dp"
|
||||
android:background="@drawable/outline_drawable"
|
||||
android:nextFocusLeft="@id/repository_item_root"
|
||||
android:clickable="true"
|
||||
android:id="@+id/action_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical|end"
|
||||
android:layout_marginStart="10dp"
|
||||
tools:src="@drawable/ic_baseline_add_24" />
|
||||
tools:src="@drawable/ic_baseline_add_24"
|
||||
android:focusable="true" />
|
||||
|
||||
</LinearLayout>
|
Loading…
Reference in a new issue