forked from recloudstream/cloudstream
moved to nav_view
This commit is contained in:
parent
58b131ec49
commit
0f7745449e
11 changed files with 302 additions and 104 deletions
|
@ -5,6 +5,7 @@ import android.app.PictureInPictureParams
|
|||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.res.ColorStateList
|
||||
import android.content.res.Configuration
|
||||
|
@ -12,14 +13,23 @@ import android.content.res.Resources
|
|||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.*
|
||||
import android.view.View.GONE
|
||||
import android.view.View.VISIBLE
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.marginBottom
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import androidx.navigation.ui.setupWithNavController
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.transition.ChangeBounds
|
||||
import androidx.transition.TransitionManager
|
||||
import com.google.android.gms.cast.framework.CastButtonFactory
|
||||
import com.jaredrummler.android.colorpicker.ColorPickerDialogListener
|
||||
import com.lagradost.cloudstream3.APIHolder.apis
|
||||
|
@ -43,6 +53,7 @@ import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate
|
|||
import com.lagradost.cloudstream3.utils.UIHelper.checkWrite
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.getResourceColor
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.hasPIPPermission
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.requestRW
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.shouldShowPIPMode
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.toPx
|
||||
|
@ -172,7 +183,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
}
|
||||
|
||||
private fun AppCompatActivity.backPressed(): Boolean {
|
||||
val currentFragment = supportFragmentManager.fragments.last {
|
||||
/*val currentFragment = supportFragmentManager.fragments.last {
|
||||
it.isVisible
|
||||
}
|
||||
|
||||
|
@ -200,8 +211,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
backEvent.invoke(true)
|
||||
return true
|
||||
}
|
||||
*/
|
||||
backEvent.invoke(false)
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
|
@ -282,16 +293,60 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
|
||||
val navController = findNavController(R.id.nav_host_fragment)
|
||||
|
||||
navOptions = NavOptions.Builder()
|
||||
/*navOptions = NavOptions.Builder()
|
||||
.setLaunchSingleTop(true)
|
||||
.setEnterAnim(R.anim.nav_enter_anim)
|
||||
.setExitAnim(R.anim.nav_exit_anim)
|
||||
.setPopEnterAnim(R.anim.nav_pop_enter)
|
||||
.setPopExitAnim(R.anim.nav_pop_exit)
|
||||
.setPopUpTo(navController.graph.startDestination, false)
|
||||
.build()
|
||||
.build()*/
|
||||
nav_view.setupWithNavController(navController)
|
||||
|
||||
nav_view.setOnNavigationItemSelectedListener { item ->
|
||||
var startUp = true
|
||||
navController.addOnDestinationChangedListener { _, destination, _ ->
|
||||
// nav_view.hideKeyboard()
|
||||
/*if (destination.id != R.id.navigation_player) {
|
||||
requestedOrientation = if (settingsManager?.getBoolean("force_landscape", false) == true) {
|
||||
ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE
|
||||
} else {
|
||||
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||
}
|
||||
}*/
|
||||
|
||||
// Fucks up anime info layout since that has its own layout
|
||||
cast_mini_controller_holder?.isVisible = destination.id != R.id.navigation_results
|
||||
|
||||
if (listOf(
|
||||
R.id.navigation_home,
|
||||
R.id.navigation_search,
|
||||
R.id.navigation_downloads,
|
||||
R.id.navigation_settings,
|
||||
R.id.navigation_download_child
|
||||
).contains(destination.id)
|
||||
) {
|
||||
nav_view.visibility = VISIBLE
|
||||
if (nav_view.marginBottom < 0) {
|
||||
nav_view.layoutParams = nav_view.layoutParams.apply {
|
||||
val transition = ChangeBounds()
|
||||
transition.duration = 100 // DURATION OF ANIMATION IN MS
|
||||
TransitionManager.beginDelayedTransition(homeRoot, transition)
|
||||
(this as ConstraintLayout.LayoutParams).setMargins(0, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (startUp) nav_view.visibility = GONE
|
||||
nav_view.layoutParams = nav_view.layoutParams.apply {
|
||||
val transition = ChangeBounds()
|
||||
transition.duration = 100 // DURATION OF ANIMATION IN MS
|
||||
TransitionManager.beginDelayedTransition(homeRoot, transition)
|
||||
(this as ConstraintLayout.LayoutParams).setMargins(0, 0, 0, -nav_view.height)
|
||||
}
|
||||
}
|
||||
startUp = false
|
||||
}
|
||||
|
||||
/*nav_view.setOnNavigationItemSelectedListener { item ->
|
||||
when (item.itemId) {
|
||||
R.id.navigation_home -> {
|
||||
navController.navigate(R.id.navigation_home, null, navOptions)
|
||||
|
@ -307,7 +362,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
}*/
|
||||
|
||||
nav_view.itemRippleColor = ColorStateList.valueOf(getResourceColor(R.attr.colorPrimary, 0.1f))
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ import android.app.Activity
|
|||
import android.content.DialogInterface
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import com.lagradost.cloudstream3.MainActivity
|
||||
import com.lagradost.cloudstream3.R
|
||||
import com.lagradost.cloudstream3.ui.player.PlayerFragment
|
||||
|
@ -12,6 +11,7 @@ import com.lagradost.cloudstream3.ui.player.UriData
|
|||
import com.lagradost.cloudstream3.utils.AppUtils.getNameFull
|
||||
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.navigate
|
||||
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
|
||||
import com.lagradost.cloudstream3.utils.VideoDownloadManager
|
||||
|
||||
|
@ -85,30 +85,20 @@ object DownloadButtonSetup {
|
|||
VideoDownloadManager.KEY_DOWNLOAD_INFO,
|
||||
click.data.id.toString()
|
||||
) ?: return
|
||||
(act as FragmentActivity).supportFragmentManager.beginTransaction()
|
||||
.setCustomAnimations(
|
||||
R.anim.enter_anim,
|
||||
R.anim.exit_anim,
|
||||
R.anim.pop_enter,
|
||||
R.anim.pop_exit
|
||||
)
|
||||
.add(
|
||||
R.id.homeRoot,
|
||||
PlayerFragment.newInstance(
|
||||
UriData(
|
||||
info.path.toString(),
|
||||
keyInfo.relativePath,
|
||||
keyInfo.displayName,
|
||||
click.data.parentId,
|
||||
click.data.id,
|
||||
headerName ?: "null",
|
||||
if (click.data.episode <= 0) null else click.data.episode,
|
||||
click.data.season
|
||||
),
|
||||
act.getViewPos(click.data.id)?.position ?: 0
|
||||
)
|
||||
)
|
||||
.commit()
|
||||
|
||||
act.navigate(R.id.global_to_navigation_player, PlayerFragment.newInstance(
|
||||
UriData(
|
||||
info.path.toString(),
|
||||
keyInfo.relativePath,
|
||||
keyInfo.displayName,
|
||||
click.data.parentId,
|
||||
click.data.id,
|
||||
headerName ?: "null",
|
||||
if (click.data.episode <= 0) null else click.data.episode,
|
||||
click.data.season
|
||||
),
|
||||
act.getViewPos(click.data.id)?.position ?: 0
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,13 +21,12 @@ import kotlinx.coroutines.withContext
|
|||
|
||||
class DownloadChildFragment : Fragment() {
|
||||
companion object {
|
||||
fun newInstance(headerName: String, folder: String) =
|
||||
DownloadChildFragment().apply {
|
||||
arguments = Bundle().apply {
|
||||
putString("folder", folder)
|
||||
putString("name", headerName)
|
||||
}
|
||||
fun newInstance(headerName: String, folder: String) : Bundle {
|
||||
return Bundle().apply {
|
||||
putString("folder", folder)
|
||||
putString("name", headerName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
|
|
@ -13,6 +13,7 @@ import android.widget.FrameLayout
|
|||
import android.widget.TextView
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -92,15 +93,15 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
private lateinit var homeViewModel: HomeViewModel
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
homeViewModel =
|
||||
ViewModelProvider(this).get(HomeViewModel::class.java)
|
||||
// homeViewModel =
|
||||
// ViewModelProvider(activity ?: this).get(HomeViewModel::class.java)
|
||||
|
||||
return inflater.inflate(R.layout.fragment_home, container, false)
|
||||
}
|
||||
|
@ -406,6 +407,10 @@ class HomeFragment : Fragment() {
|
|||
home_master_recycler.layoutManager = GridLayoutManager(context, 1)
|
||||
|
||||
reloadStored()
|
||||
homeViewModel.loadAndCancel(context?.getKey<String>(HOMEPAGE_API))
|
||||
val apiName = context?.getKey<String>(HOMEPAGE_API)
|
||||
if(homeViewModel.apiName.value != apiName) {
|
||||
println("COUGHT HOME : " + homeViewModel.apiName.value + " AT " + apiName)
|
||||
homeViewModel.loadAndCancel(apiName)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -169,6 +169,7 @@ class PlayerFragment : Fragment() {
|
|||
// ============ TORRENT ============
|
||||
//private var torrentStream: TorrentStream? = null
|
||||
private var lastTorrentUrl = ""
|
||||
|
||||
//private val isTorrent: Boolean get() = torrentStream != null
|
||||
private fun initTorrentStream(torrentUrl: String) {
|
||||
if (lastTorrentUrl == torrentUrl) return
|
||||
|
@ -751,29 +752,27 @@ class PlayerFragment : Fragment() {
|
|||
private var volumeObserver: SettingsContentObserver? = null
|
||||
|
||||
companion object {
|
||||
fun newInstance(data: PlayerData, startPos: Long? = null) =
|
||||
PlayerFragment().apply {
|
||||
arguments = Bundle().apply {
|
||||
//println(data)
|
||||
putString("data", mapper.writeValueAsString(data))
|
||||
println("PUT START: " + startPos)
|
||||
if (startPos != null) {
|
||||
putLong(STATE_RESUME_POSITION, startPos)
|
||||
}
|
||||
fun newInstance(data: PlayerData, startPos: Long? = null): Bundle {
|
||||
return Bundle().apply {
|
||||
//println(data)
|
||||
putString("data", mapper.writeValueAsString(data))
|
||||
println("PUT START: " + startPos)
|
||||
if (startPos != null) {
|
||||
putLong(STATE_RESUME_POSITION, startPos)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun newInstance(uriData: UriData, startPos: Long? = null) =
|
||||
PlayerFragment().apply {
|
||||
arguments = Bundle().apply {
|
||||
//println(data)
|
||||
putString("uriData", mapper.writeValueAsString(uriData))
|
||||
fun newInstance(uriData: UriData, startPos: Long? = null): Bundle {
|
||||
return Bundle().apply {
|
||||
//println(data)
|
||||
putString("uriData", mapper.writeValueAsString(uriData))
|
||||
|
||||
if (startPos != null) {
|
||||
putLong(STATE_RESUME_POSITION, startPos)
|
||||
}
|
||||
if (startPos != null) {
|
||||
putLong(STATE_RESUME_POSITION, startPos)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun savePos() {
|
||||
|
@ -1662,8 +1661,8 @@ class PlayerFragment : Fragment() {
|
|||
savePos()
|
||||
SubtitlesFragment.applyStyleEvent -= ::onSubStyleChanged
|
||||
|
||||
// torrentStream?.stopStream()
|
||||
// torrentStream = null
|
||||
// torrentStream?.stopStream()
|
||||
// torrentStream = null
|
||||
|
||||
super.onDestroy()
|
||||
canEnterPipMode = false
|
||||
|
@ -1680,7 +1679,7 @@ class PlayerFragment : Fragment() {
|
|||
override fun onPause() {
|
||||
savePos()
|
||||
super.onPause()
|
||||
// torrentStream?.currentTorrent?.pause()
|
||||
// torrentStream?.currentTorrent?.pause()
|
||||
if (Util.SDK_INT <= 23) {
|
||||
if (player_view != null) player_view.onPause()
|
||||
releasePlayer()
|
||||
|
@ -1987,12 +1986,12 @@ class PlayerFragment : Fragment() {
|
|||
video_title_rez?.text =
|
||||
if (height == null || width == null) currentUrl?.name
|
||||
?: "" else
|
||||
// if (isTorrent) "${width}x${height}" else
|
||||
if (isDownloadedFile || currentUrl?.name == null) "${width}x${height}" else "${currentUrl.name} - ${width}x${height}"
|
||||
// if (isTorrent) "${width}x${height}" else
|
||||
if (isDownloadedFile || currentUrl?.name == null) "${width}x${height}" else "${currentUrl.name} - ${width}x${height}"
|
||||
|
||||
if (!hasUsedFirstRender) { // DON'T WANT TO SET MULTIPLE MESSAGES
|
||||
//&& !isTorrent
|
||||
if (!isDownloadedFile && exoPlayer.duration in 5_000..10_000) {
|
||||
if (!isDownloadedFile && exoPlayer.duration in 5_000..10_000) {
|
||||
// if(getapi apiName )
|
||||
showToast(activity, R.string.vpn_might_be_needed, LENGTH_SHORT)
|
||||
}
|
||||
|
|
|
@ -62,6 +62,7 @@ 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.navigate
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIcons
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes
|
||||
|
@ -152,15 +153,15 @@ fun ResultEpisode.getWatchProgress(): Float {
|
|||
|
||||
class ResultFragment : Fragment() {
|
||||
companion object {
|
||||
fun newInstance(url: String, apiName: String, startAction: Int = 0, startValue: Int = 0) =
|
||||
ResultFragment().apply {
|
||||
arguments = Bundle().apply {
|
||||
putString("url", url)
|
||||
putString("apiName", apiName)
|
||||
putInt("startAction", startAction)
|
||||
putInt("startValue", startValue)
|
||||
}
|
||||
fun newInstance(url: String, apiName: String, startAction: Int = 0, startValue: Int = 0): Bundle {
|
||||
return Bundle().apply {
|
||||
putString("url", url)
|
||||
putString("apiName", apiName)
|
||||
putInt("startAction", startAction)
|
||||
putInt("startValue", startValue)
|
||||
putBoolean("restart", true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var currentLoadingCount = 0 // THIS IS USED TO PREVENT LATE EVENTS, AFTER DISMISS WAS CLICKED
|
||||
|
@ -262,6 +263,11 @@ class ResultFragment : Fragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val restart = arguments?.getBoolean("restart") ?: false
|
||||
if (restart) {
|
||||
arguments?.putBoolean("restart", false)
|
||||
}
|
||||
|
||||
activity?.window?.decorView?.clearFocus()
|
||||
hideKeyboard()
|
||||
|
||||
|
@ -284,6 +290,7 @@ class ResultFragment : Fragment() {
|
|||
startAction = arguments?.getInt("startAction") ?: START_ACTION_NORMAL
|
||||
startValue = arguments?.getInt("startValue") ?: START_VALUE_NORMAL
|
||||
|
||||
|
||||
val api = getApiFromName(apiName)
|
||||
if (media_route_button != null) {
|
||||
val chromecastSupport = api.hasChromecastSupport
|
||||
|
@ -701,19 +708,12 @@ class ResultFragment : Fragment() {
|
|||
|
||||
ACTION_PLAY_EPISODE_IN_PLAYER -> {
|
||||
if (buildInPlayer) {
|
||||
(activity as AppCompatActivity?)?.supportFragmentManager?.beginTransaction()
|
||||
?.setCustomAnimations(
|
||||
R.anim.enter_anim,
|
||||
R.anim.exit_anim,
|
||||
R.anim.pop_enter,
|
||||
R.anim.pop_exit
|
||||
)?.add(
|
||||
R.id.homeRoot,
|
||||
PlayerFragment.newInstance(
|
||||
PlayerData(index, null, 0),
|
||||
episodeClick.data.getRealPosition()
|
||||
)
|
||||
)?.commit()
|
||||
activity.navigate(
|
||||
R.id.global_to_navigation_player, PlayerFragment.newInstance(
|
||||
PlayerData(index, null, 0),
|
||||
episodeClick.data.getRealPosition()
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -827,13 +827,16 @@ class ResultFragment : Fragment() {
|
|||
observe(viewModel.publicEpisodes) { episodes ->
|
||||
when (episodes) {
|
||||
is Resource.Failure -> {
|
||||
result_episode_loading.isVisible = false
|
||||
result_episode_loading?.isVisible = false
|
||||
//result_episodes?.isVisible = false
|
||||
}
|
||||
is Resource.Loading -> {
|
||||
result_episode_loading.isVisible = true
|
||||
result_episode_loading?.isVisible = true
|
||||
// result_episodes?.isVisible = false
|
||||
}
|
||||
is Resource.Success -> {
|
||||
result_episode_loading.isVisible = false
|
||||
//result_episodes?.isVisible = true
|
||||
result_episode_loading?.isVisible = false
|
||||
if (result_episodes == null || result_episodes.adapter == null) return@observe
|
||||
currentEpisodes = episodes.value
|
||||
(result_episodes?.adapter as EpisodeAdapter?)?.cardList = episodes.value
|
||||
|
@ -862,8 +865,13 @@ class ResultFragment : Fragment() {
|
|||
}
|
||||
|
||||
observe(viewModel.publicEpisodesCount) { count ->
|
||||
result_episodes_text.text =
|
||||
"$count ${if (count == 1) getString(R.string.episode) else getString(R.string.episodes)}"
|
||||
if (count < 0) {
|
||||
result_episodes_text?.isVisible = false
|
||||
} else {
|
||||
// result_episodes_text?.isVisible = true
|
||||
result_episodes_text?.text =
|
||||
"$count ${if (count == 1) getString(R.string.episode) else getString(R.string.episodes)}"
|
||||
}
|
||||
}
|
||||
|
||||
observe(viewModel.id) {
|
||||
|
@ -1117,7 +1125,7 @@ class ResultFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
if (viewModel.resultResponse.value == null) {
|
||||
if (restart || viewModel.resultResponse.value == null) {
|
||||
viewModel.load(ctx, tempUrl, apiName, showFillers)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
|||
|
||||
// idk, if you find a way of automating this it would be great
|
||||
private val languages = arrayListOf(
|
||||
Triple("\uD83C\uDDEC\uD83C\uDDE7", "Spanish", "es"),
|
||||
Triple("\uD83C\uDDEA\uD83C\uDDF8", "Spanish", "es"),
|
||||
Triple("\uD83C\uDDEC\uD83C\uDDE7", "English", "en"),
|
||||
Triple("\uD83C\uDDFB\uD83C\uDDF3", "Viet Nam", "vi"),
|
||||
Triple("\uD83C\uDDF3\uD83C\uDDF1", "Dutch", "nl"),
|
||||
|
|
|
@ -32,6 +32,7 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog
|
|||
import com.lagradost.cloudstream3.utils.SubtitleHelper
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.navigate
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage
|
||||
import kotlinx.android.synthetic.main.subtitle_settings.*
|
||||
|
||||
|
@ -67,7 +68,10 @@ class SubtitlesFragment : Fragment() {
|
|||
}
|
||||
|
||||
fun push(activity: Activity?, hide: Boolean = true) {
|
||||
(activity as FragmentActivity?)?.supportFragmentManager?.beginTransaction()
|
||||
activity.navigate(R.id.global_to_navigation_subtitles, Bundle().apply {
|
||||
putBoolean("hide", hide)
|
||||
})
|
||||
/*(activity as FragmentActivity?)?.supportFragmentManager?.beginTransaction()
|
||||
?.setCustomAnimations(
|
||||
R.anim.enter_anim,
|
||||
R.anim.exit_anim,
|
||||
|
@ -82,7 +86,7 @@ class SubtitlesFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
)
|
||||
?.commit()
|
||||
?.commit()*/
|
||||
}
|
||||
|
||||
private fun getDefColor(id: Int): Int {
|
||||
|
|
|
@ -21,6 +21,7 @@ import com.google.android.gms.common.wrappers.Wrappers
|
|||
import com.lagradost.cloudstream3.R
|
||||
import com.lagradost.cloudstream3.SearchResponse
|
||||
import com.lagradost.cloudstream3.ui.result.ResultFragment
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.navigate
|
||||
|
||||
object AppUtils {
|
||||
fun getVideoContentUri(context: Context, videoFilePath: String): Uri? {
|
||||
|
@ -77,10 +78,7 @@ object AppUtils {
|
|||
fun AppCompatActivity.loadResult(url: String, apiName: String, startAction: Int = 0, startValue: Int = 0) {
|
||||
this.runOnUiThread {
|
||||
viewModelStore.clear()
|
||||
this.supportFragmentManager.beginTransaction()
|
||||
.setCustomAnimations(R.anim.enter_anim, R.anim.exit_anim, R.anim.pop_enter, R.anim.pop_exit)
|
||||
.add(R.id.homeRoot, ResultFragment.newInstance(url, apiName, startAction, startValue))
|
||||
.commit()
|
||||
this.navigate(R.id.global_to_navigation_results, ResultFragment.newInstance(url, apiName, startAction, startValue))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,15 +9,14 @@ import android.content.pm.PackageManager
|
|||
import android.content.res.Resources
|
||||
import android.graphics.Color
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.ImageView
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.annotation.*
|
||||
import androidx.appcompat.view.ContextThemeWrapper
|
||||
import androidx.appcompat.view.menu.MenuBuilder
|
||||
import androidx.appcompat.widget.PopupMenu
|
||||
|
@ -29,6 +28,7 @@ import androidx.core.graphics.green
|
|||
import androidx.core.graphics.red
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.model.GlideUrl
|
||||
|
@ -71,6 +71,14 @@ object UIHelper {
|
|||
}
|
||||
}
|
||||
|
||||
fun Activity?.navigate(@IdRes navigation : Int, arguments : Bundle? = null) {
|
||||
if(this is FragmentActivity) {
|
||||
(supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as? NavHostFragment?)?.navController?.navigate(
|
||||
navigation, arguments
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ColorInt
|
||||
fun Context.getResourceColor(@AttrRes resource: Int, alphaFactor: Float = 1f): Int {
|
||||
val typedArray = obtainStyledAttributes(intArrayOf(resource))
|
||||
|
@ -131,7 +139,8 @@ object UIHelper {
|
|||
}
|
||||
|
||||
fun FragmentActivity.popCurrentPage() {
|
||||
val currentFragment = supportFragmentManager.fragments.lastOrNull {
|
||||
this.onBackPressed()
|
||||
/*val currentFragment = supportFragmentManager.fragments.lastOrNull {
|
||||
it.isVisible
|
||||
} ?: return
|
||||
|
||||
|
@ -143,7 +152,7 @@ object UIHelper {
|
|||
R.anim.pop_exit
|
||||
)
|
||||
.remove(currentFragment)
|
||||
.commitAllowingStateLoss()
|
||||
.commitAllowingStateLoss()*/
|
||||
}
|
||||
/*
|
||||
fun FragmentActivity.popCurrentPage(isInPlayer: Boolean, isInExpandedView: Boolean, isInResults: Boolean) {
|
||||
|
|
|
@ -5,6 +5,109 @@
|
|||
android:id="@+id/mobile_navigation"
|
||||
app:startDestination="@+id/navigation_home">
|
||||
|
||||
<action android:id="@+id/global_to_navigation_results"
|
||||
app:destination="@id/navigation_results"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popExitAnim="@anim/exit_anim"
|
||||
>
|
||||
<argument
|
||||
android:name="url"
|
||||
app:argType="string"/>
|
||||
<argument
|
||||
android:name="apiName"
|
||||
app:argType="string"
|
||||
/>
|
||||
<argument
|
||||
android:name="startAction"
|
||||
app:argType="integer"
|
||||
android:defaultValue="0"
|
||||
/>
|
||||
<argument
|
||||
android:name="startValue"
|
||||
app:argType="integer"
|
||||
android:defaultValue="0"
|
||||
/>
|
||||
<argument
|
||||
android:name="restart"
|
||||
app:argType="boolean"
|
||||
android:defaultValue="false"
|
||||
/>
|
||||
</action>
|
||||
<action android:id="@+id/global_to_navigation_player"
|
||||
app:destination="@id/navigation_player"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popExitAnim="@anim/exit_anim"
|
||||
>
|
||||
<argument
|
||||
android:name="data"
|
||||
app:argType="string"
|
||||
android:defaultValue="@null"
|
||||
/>
|
||||
<argument
|
||||
android:name="uriData"
|
||||
app:argType="string"
|
||||
android:defaultValue="@null"
|
||||
/>
|
||||
<argument
|
||||
android:name="resumePosition"
|
||||
app:argType="long"
|
||||
android:defaultValue="0L"
|
||||
/>
|
||||
</action>
|
||||
|
||||
<action android:id="@+id/global_to_navigation_home"
|
||||
app:destination="@id/navigation_home"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popExitAnim="@anim/exit_anim"
|
||||
>
|
||||
</action>
|
||||
|
||||
<action android:id="@+id/global_to_navigation_subtitles"
|
||||
app:destination="@id/navigation_subtitles"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popExitAnim="@anim/exit_anim">
|
||||
<argument
|
||||
android:name="hide"
|
||||
app:argType="boolean"
|
||||
android:defaultValue="true"
|
||||
/>
|
||||
</action>
|
||||
|
||||
<action android:id="@+id/global_to_navigation_settings"
|
||||
app:destination="@id/navigation_settings"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popExitAnim="@anim/exit_anim"
|
||||
>
|
||||
</action>
|
||||
|
||||
<action android:id="@+id/global_to_navigation_downloads"
|
||||
app:destination="@id/navigation_downloads"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popExitAnim="@anim/exit_anim"
|
||||
>
|
||||
</action>
|
||||
|
||||
<action android:id="@+id/global_to_navigation_search"
|
||||
app:destination="@id/navigation_search"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popExitAnim="@anim/exit_anim"
|
||||
>
|
||||
</action>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/navigation_home"
|
||||
android:name="com.lagradost.cloudstream3.ui.home.HomeFragment"
|
||||
|
@ -21,16 +124,44 @@
|
|||
android:id="@+id/navigation_downloads"
|
||||
android:name="com.lagradost.cloudstream3.ui.download.DownloadFragment"
|
||||
android:label="@string/title_downloads"
|
||||
tools:layout="@layout/fragment_downloads"/>
|
||||
tools:layout="@layout/fragment_downloads">
|
||||
|
||||
<action android:id="@+id/action_navigation_downloads_to_navigation_download_child"
|
||||
app:destination="@id/navigation_download_child">
|
||||
<argument
|
||||
android:name="name"
|
||||
app:argType="string"/>
|
||||
<argument
|
||||
android:name="folder"
|
||||
app:argType="string"
|
||||
/>
|
||||
</action>
|
||||
</fragment>
|
||||
<fragment
|
||||
android:id="@+id/navigation_settings"
|
||||
android:layout_height="match_parent"
|
||||
android:name="com.lagradost.cloudstream3.ui.settings.SettingsFragment"
|
||||
android:label="@string/title_settings"/>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/navigation_subtitles"
|
||||
android:layout_height="match_parent"
|
||||
android:name="com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment"
|
||||
android:label="@string/subtitles_settings"/>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/navigation_download_child"
|
||||
android:layout_height="match_parent"
|
||||
android:name="com.lagradost.cloudstream3.ui.download.DownloadChildFragment"
|
||||
android:label="@string/title_settings"/>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/navigation_results"
|
||||
android:layout_height="match_parent"
|
||||
android:name="com.lagradost.cloudstream3.ui.result.ResultFragment"/>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/navigation_player"
|
||||
android:layout_height="match_parent"
|
||||
android:name="com.lagradost.cloudstream3.ui.player.PlayerFragment"/>
|
||||
</navigation>
|
Loading…
Reference in a new issue