forked from recloudstream/cloudstream
viewmodel fix I think + small fixes
This commit is contained in:
parent
9b4690f1bb
commit
7cb545f7c9
7 changed files with 50 additions and 30 deletions
|
@ -13,7 +13,7 @@ import android.widget.FrameLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
@ -97,15 +97,15 @@ class HomeFragment : Fragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var homeViewModel: HomeViewModel
|
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
homeViewModel =
|
//homeViewModel =
|
||||||
ViewModelProvider(this).get(HomeViewModel::class.java)
|
// ViewModelProvider(this).get(HomeViewModel::class.java)
|
||||||
|
|
||||||
return inflater.inflate(R.layout.fragment_home, container, false)
|
return inflater.inflate(R.layout.fragment_home, container, false)
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ import android.widget.Toast.LENGTH_SHORT
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.transition.Fade
|
import androidx.transition.Fade
|
||||||
import androidx.transition.Transition
|
import androidx.transition.Transition
|
||||||
|
@ -86,7 +86,6 @@ import com.lagradost.cloudstream3.utils.CastHelper.startCast
|
||||||
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
||||||
import com.lagradost.cloudstream3.utils.DataStore.setKey
|
import com.lagradost.cloudstream3.utils.DataStore.setKey
|
||||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.setLastWatched
|
import com.lagradost.cloudstream3.utils.DataStoreHelper.setLastWatched
|
||||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.setViewPos
|
|
||||||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
|
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute
|
import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.getNavigationBarHeight
|
import com.lagradost.cloudstream3.utils.UIHelper.getNavigationBarHeight
|
||||||
|
@ -248,7 +247,7 @@ class PlayerFragment : Fragment() {
|
||||||
|
|
||||||
private var isFullscreen = false
|
private var isFullscreen = false
|
||||||
private var isPlayerPlaying = true
|
private var isPlayerPlaying = true
|
||||||
private lateinit var viewModel: ResultViewModel
|
private val viewModel: ResultViewModel by activityViewModels()
|
||||||
private lateinit var playerData: PlayerData
|
private lateinit var playerData: PlayerData
|
||||||
private lateinit var uriData: UriData
|
private lateinit var uriData: UriData
|
||||||
private var isDownloadedFile = false
|
private var isDownloadedFile = false
|
||||||
|
@ -791,20 +790,20 @@ class PlayerFragment : Fragment() {
|
||||||
if (this::exoPlayer.isInitialized) {
|
if (this::exoPlayer.isInitialized) {
|
||||||
if (exoPlayer.duration > 0 && exoPlayer.currentPosition > 0) {
|
if (exoPlayer.duration > 0 && exoPlayer.currentPosition > 0) {
|
||||||
context?.let { ctx ->
|
context?.let { ctx ->
|
||||||
if (this::viewModel.isInitialized) {
|
//if (this::viewModel.isInitialized) {
|
||||||
viewModel.setViewPos(
|
viewModel.setViewPos(
|
||||||
ctx,
|
ctx,
|
||||||
if (isDownloadedFile) uriData.id else getEpisode()?.id,
|
if (isDownloadedFile) uriData.id else getEpisode()?.id,
|
||||||
exoPlayer.currentPosition,
|
exoPlayer.currentPosition,
|
||||||
exoPlayer.duration
|
exoPlayer.duration
|
||||||
)
|
)
|
||||||
} else {
|
/*} else {
|
||||||
ctx.setViewPos(
|
ctx.setViewPos(
|
||||||
if (isDownloadedFile) uriData.id else getEpisode()?.id,
|
if (isDownloadedFile) uriData.id else getEpisode()?.id,
|
||||||
exoPlayer.currentPosition,
|
exoPlayer.currentPosition,
|
||||||
exoPlayer.duration
|
exoPlayer.duration
|
||||||
)
|
)
|
||||||
}
|
}*/
|
||||||
|
|
||||||
if (isDownloadedFile) {
|
if (isDownloadedFile) {
|
||||||
ctx.setLastWatched(uriData.parentId, uriData.id, uriData.episode, uriData.season, true)
|
ctx.setLastWatched(uriData.parentId, uriData.id, uriData.episode, uriData.season, true)
|
||||||
|
@ -880,6 +879,7 @@ class PlayerFragment : Fragment() {
|
||||||
val isClick = !isLocked
|
val isClick = !isLocked
|
||||||
|
|
||||||
exo_play?.isClickable = isClick
|
exo_play?.isClickable = isClick
|
||||||
|
sources_btt?.isClickable = isClick
|
||||||
exo_pause?.isClickable = isClick
|
exo_pause?.isClickable = isClick
|
||||||
exo_ffwd?.isClickable = isClick
|
exo_ffwd?.isClickable = isClick
|
||||||
exo_rew?.isClickable = isClick
|
exo_rew?.isClickable = isClick
|
||||||
|
@ -1055,8 +1055,9 @@ class PlayerFragment : Fragment() {
|
||||||
showToast(activity, resizeModes[resizeMode].second, LENGTH_SHORT)
|
showToast(activity, resizeModes[resizeMode].second, LENGTH_SHORT)
|
||||||
}
|
}
|
||||||
PlayerEventType.ShowSpeed.value -> {
|
PlayerEventType.ShowSpeed.value -> {
|
||||||
val speedsText = listOf("0.5x", "0.75x", "1x", "1.25x", "1.5x", "1.75x", "2x")
|
val speedsText =
|
||||||
val speedsNumbers = listOf(0.5f, 0.75f, 1f, 1.25f, 1.5f, 1.75f, 2f)
|
listOf("0.5x", "0.75x", "0.85x", "1x", "1.15x", "1.25x", "1.4x", "1.5x", "1.75x", "2x")
|
||||||
|
val speedsNumbers = listOf(0.5f, 0.75f, 0.85f, 1f, 1.15f, 1.25f, 1.4f, 1.5f, 1.75f, 2f)
|
||||||
val speedIndex = speedsNumbers.indexOf(playbackSpeed)
|
val speedIndex = speedsNumbers.indexOf(playbackSpeed)
|
||||||
|
|
||||||
context?.let { ctx ->
|
context?.let { ctx ->
|
||||||
|
@ -1383,7 +1384,7 @@ class PlayerFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isDownloadedFile) {
|
if (!isDownloadedFile) {
|
||||||
viewModel = ViewModelProvider(activity ?: this).get(ResultViewModel::class.java)
|
//viewModel = ViewModelProvider(activity ?: this).get(ResultViewModel::class.java)
|
||||||
|
|
||||||
observeDirectly(viewModel.episodes) { _episodes ->
|
observeDirectly(viewModel.episodes) { _episodes ->
|
||||||
episodes = _episodes
|
episodes = _episodes
|
||||||
|
|
|
@ -23,7 +23,7 @@ import androidx.core.text.color
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.widget.NestedScrollView
|
import androidx.core.widget.NestedScrollView
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
@ -165,7 +165,7 @@ class ResultFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private var currentLoadingCount = 0 // THIS IS USED TO PREVENT LATE EVENTS, AFTER DISMISS WAS CLICKED
|
private var currentLoadingCount = 0 // THIS IS USED TO PREVENT LATE EVENTS, AFTER DISMISS WAS CLICKED
|
||||||
private lateinit var viewModel: ResultViewModel
|
private val viewModel: ResultViewModel by activityViewModels()
|
||||||
private var allEpisodes: HashMap<Int, ArrayList<ExtractorLink>> = HashMap()
|
private var allEpisodes: HashMap<Int, ArrayList<ExtractorLink>> = HashMap()
|
||||||
private var allEpisodesSubs: HashMap<Int, ArrayList<SubtitleFile>> = HashMap()
|
private var allEpisodesSubs: HashMap<Int, ArrayList<SubtitleFile>> = HashMap()
|
||||||
private var currentHeaderName: String? = null
|
private var currentHeaderName: String? = null
|
||||||
|
@ -178,8 +178,8 @@ class ResultFragment : Fragment() {
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?,
|
savedInstanceState: Bundle?,
|
||||||
): View? {
|
): View? {
|
||||||
viewModel =
|
// viewModel =
|
||||||
ViewModelProvider(activity ?: this).get(ResultViewModel::class.java)
|
// ViewModelProvider(activity ?: this).get(ResultViewModel::class.java)
|
||||||
return inflater.inflate(R.layout.fragment_result, container, false)
|
return inflater.inflate(R.layout.fragment_result, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1161,6 +1161,7 @@ class ResultFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (restart || viewModel.resultResponse.value == null) {
|
if (restart || viewModel.resultResponse.value == null) {
|
||||||
|
viewModel.clear()
|
||||||
viewModel.load(ctx, tempUrl, apiName, showFillers)
|
viewModel.load(ctx, tempUrl, apiName, showFillers)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,22 @@ const val EPISODE_RANGE_SIZE = 50
|
||||||
const val EPISODE_RANGE_OVERLOAD = 60
|
const val EPISODE_RANGE_OVERLOAD = 60
|
||||||
|
|
||||||
class ResultViewModel : ViewModel() {
|
class ResultViewModel : ViewModel() {
|
||||||
|
fun clear() {
|
||||||
|
repo = null
|
||||||
|
_resultResponse.value = null
|
||||||
|
_episodes.value = null
|
||||||
|
episodeById.value = null
|
||||||
|
_publicEpisodes.value = null
|
||||||
|
_publicEpisodesCount.value = null
|
||||||
|
_rangeOptions.value = null
|
||||||
|
selectedRange.value = null
|
||||||
|
selectedRangeInt.value = null
|
||||||
|
_dubStatus.value = null
|
||||||
|
id.value = null
|
||||||
|
selectedSeason.value = -2
|
||||||
|
_dubSubEpisodes.value = null
|
||||||
|
}
|
||||||
|
|
||||||
private var repo: APIRepository? = null
|
private var repo: APIRepository? = null
|
||||||
|
|
||||||
private val _resultResponse: MutableLiveData<Resource<Any?>> = MutableLiveData()
|
private val _resultResponse: MutableLiveData<Resource<Any?>> = MutableLiveData()
|
||||||
|
@ -55,7 +71,7 @@ class ResultViewModel : ViewModel() {
|
||||||
val publicEpisodes: LiveData<Resource<List<ResultEpisode>>> get() = _publicEpisodes
|
val publicEpisodes: LiveData<Resource<List<ResultEpisode>>> get() = _publicEpisodes
|
||||||
val publicEpisodesCount: LiveData<Int> get() = _publicEpisodesCount
|
val publicEpisodesCount: LiveData<Int> get() = _publicEpisodesCount
|
||||||
|
|
||||||
val dubStatus: MutableLiveData<DubStatus> get() = _dubStatus
|
val dubStatus: LiveData<DubStatus> get() = _dubStatus
|
||||||
private val _dubStatus: MutableLiveData<DubStatus> = MutableLiveData()
|
private val _dubStatus: MutableLiveData<DubStatus> = MutableLiveData()
|
||||||
|
|
||||||
private val page: MutableLiveData<LoadResponse> = MutableLiveData()
|
private val page: MutableLiveData<LoadResponse> = MutableLiveData()
|
||||||
|
@ -63,10 +79,10 @@ class ResultViewModel : ViewModel() {
|
||||||
val selectedSeason: MutableLiveData<Int> = MutableLiveData(-2)
|
val selectedSeason: MutableLiveData<Int> = MutableLiveData(-2)
|
||||||
val seasonSelections: MutableLiveData<List<Int?>> = MutableLiveData()
|
val seasonSelections: MutableLiveData<List<Int?>> = MutableLiveData()
|
||||||
|
|
||||||
val dubSubSelections: MutableLiveData<Set<DubStatus>> get() = _dubSubSelections
|
val dubSubSelections: LiveData<Set<DubStatus>> get() = _dubSubSelections
|
||||||
private val _dubSubSelections: MutableLiveData<Set<DubStatus>> = MutableLiveData()
|
private val _dubSubSelections: MutableLiveData<Set<DubStatus>> = MutableLiveData()
|
||||||
|
|
||||||
val dubSubEpisodes: MutableLiveData<Map<DubStatus, List<ResultEpisode>>?> get() = _dubSubEpisodes
|
val dubSubEpisodes: LiveData<Map<DubStatus, List<ResultEpisode>>?> get() = _dubSubEpisodes
|
||||||
private val _dubSubEpisodes: MutableLiveData<Map<DubStatus, List<ResultEpisode>>?> = MutableLiveData()
|
private val _dubSubEpisodes: MutableLiveData<Map<DubStatus, List<ResultEpisode>>?> = MutableLiveData()
|
||||||
|
|
||||||
private val _watchStatus: MutableLiveData<WatchType> = MutableLiveData()
|
private val _watchStatus: MutableLiveData<WatchType> = MutableLiveData()
|
||||||
|
@ -180,7 +196,7 @@ class ResultViewModel : ViewModel() {
|
||||||
|
|
||||||
fun changeDubStatus(context: Context, status: DubStatus?) {
|
fun changeDubStatus(context: Context, status: DubStatus?) {
|
||||||
dubSubEpisodes.value?.get(status)?.let { episodes ->
|
dubSubEpisodes.value?.get(status)?.let { episodes ->
|
||||||
dubStatus.postValue(status)
|
_dubStatus.postValue(status)
|
||||||
updateEpisodes(context, null, episodes, null)
|
updateEpisodes(context, null, episodes, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,9 +75,11 @@ object AppUtils {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//private val viewModel: ResultViewModel by activityViewModels()
|
||||||
|
|
||||||
fun AppCompatActivity.loadResult(url: String, apiName: String, startAction: Int = 0, startValue: Int = 0) {
|
fun AppCompatActivity.loadResult(url: String, apiName: String, startAction: Int = 0, startValue: Int = 0) {
|
||||||
this.runOnUiThread {
|
this.runOnUiThread {
|
||||||
viewModelStore.clear()
|
// viewModelStore.clear()
|
||||||
this.navigate(R.id.global_to_navigation_results, ResultFragment.newInstance(url, apiName, startAction, startValue))
|
this.navigate(R.id.global_to_navigation_results, ResultFragment.newInstance(url, apiName, startAction, startValue))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
<vector android:height="24dp" android:tint="?attr/white"
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M8,5v14l11,-7z"/>
|
<path android:fillColor="@android:color/white" android:pathData="M8,5v14l11,-7z"/>
|
||||||
|
|
|
@ -25,16 +25,16 @@
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/home_loading_statusbar"
|
android:id="@+id/home_loading_statusbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="60dp">
|
android:layout_height="70dp">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/home_change_api_loading"
|
android:id="@+id/home_change_api_loading"
|
||||||
android:layout_margin="10dp"
|
android:layout_margin="10dp"
|
||||||
android:layout_gravity="center_vertical|end"
|
android:layout_gravity="center_vertical|end"
|
||||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
|
||||||
android:src="@drawable/ic_outline_settings_24"
|
android:src="@drawable/ic_baseline_keyboard_arrow_down_24"
|
||||||
android:layout_width="25dp"
|
android:layout_width="30dp"
|
||||||
android:layout_height="25dp"
|
android:layout_height="30dp"
|
||||||
android:contentDescription="@string/home_change_provider_img_des">
|
android:contentDescription="@string/home_change_provider_img_des">
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
@ -146,9 +146,9 @@
|
||||||
android:layout_gravity="center|end"
|
android:layout_gravity="center|end"
|
||||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
|
||||||
android:src="@drawable/ic_outline_settings_24"
|
android:src="@drawable/ic_baseline_keyboard_arrow_down_24"
|
||||||
android:layout_width="25dp"
|
android:layout_width="30dp"
|
||||||
android:layout_height="25dp"
|
android:layout_height="30dp"
|
||||||
android:contentDescription="@string/home_change_provider_img_des">
|
android:contentDescription="@string/home_change_provider_img_des">
|
||||||
<requestFocus/>
|
<requestFocus/>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
|
|
Loading…
Reference in a new issue