[Android] Setup view models sooner to avoid crashes
Nicolas Pomepuy
git at videolan.org
Tue Nov 15 09:29:38 UTC 2022
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Nov 15 09:20:04 2022 +0100| [217a8a8aacc0f3e7470f478b51f560357ef75cba] | committer: Nicolas Pomepuy
Setup view models sooner to avoid crashes
> https://code.videolan.org/videolan/vlc-android/commit/217a8a8aacc0f3e7470f478b51f560357ef75cba
---
.../vlc-android/src/org/videolan/vlc/gui/HistoryFragment.kt | 6 +++++-
application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt | 4 ++--
.../src/org/videolan/vlc/gui/browser/FileBrowserFragment.kt | 8 ++++----
.../src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt | 6 +++---
.../src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.kt | 2 +-
5 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/HistoryFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/HistoryFragment.kt
index e37484a0d5..765955f8c7 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/HistoryFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/HistoryFragment.kt
@@ -62,6 +62,11 @@ class HistoryFragment : MediaBrowserFragment<HistoryModel>(), IRefreshable, IHis
private lateinit var list: RecyclerView
private lateinit var empty: TextView
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ viewModel = ViewModelProvider(requireActivity(), HistoryModel.Factory(requireContext()))[HistoryModel::class.java]
+ }
+
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.history_list, container, false)
}
@@ -70,7 +75,6 @@ class HistoryFragment : MediaBrowserFragment<HistoryModel>(), IRefreshable, IHis
super.onViewCreated(view, savedInstanceState)
list = view.findViewById(R.id.list)
empty = view.findViewById(R.id.empty)
- viewModel = ViewModelProvider(requireActivity(), HistoryModel.Factory(requireContext()))[HistoryModel::class.java]
viewModel.dataset.observe(viewLifecycleOwner) { list ->
list?.let {
historyAdapter.update(it)
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt
index fd574750c9..cd715ed69c 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt
@@ -88,6 +88,8 @@ class MoreFragment : BaseFragment(), IRefreshable, IHistory, IDialogManager,
super.onCreate(savedInstanceState)
(savedInstanceState?.getIntegerArrayList(KEY_SELECTION))?.let { savedSelection = it }
dialogsDelegate.observeDialogs(this, this)
+ viewModel = ViewModelProvider(requireActivity(), HistoryModel.Factory(requireContext()))[HistoryModel::class.java]
+ streamsViewModel = ViewModelProvider(requireActivity(), StreamsModel.Factory(requireContext(), showDummy = true))[StreamsModel::class.java]
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@@ -103,7 +105,6 @@ class MoreFragment : BaseFragment(), IRefreshable, IHistory, IDialogManager,
aboutButton = view.findViewById(R.id.aboutButton)
donationsButton = view.findViewById(R.id.donationsButton)
if (!Settings.getInstance(requireActivity()).getBoolean(PLAYBACK_HISTORY, true)) historyEntry.setGone()
- viewModel = ViewModelProvider(requireActivity(), HistoryModel.Factory(requireContext())).get(HistoryModel::class.java)
viewModel.dataset.observe(viewLifecycleOwner) { list ->
list?.let {
historyAdapter.update(it)
@@ -125,7 +126,6 @@ class MoreFragment : BaseFragment(), IRefreshable, IHistory, IDialogManager,
historyAdapter.events.onEach { it.process() }.launchWhenStarted(lifecycleScope)
streamsEntry = view.findViewById(R.id.streams_entry)
- streamsViewModel = ViewModelProvider(requireActivity(), StreamsModel.Factory(requireContext(), showDummy = true)).get(StreamsModel::class.java)
setup(this, streamsViewModel, object : KeyboardListener {
override fun hideKeyboard() {}
})
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.kt
index c9c5debbaa..6fed8d0d04 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.kt
@@ -56,14 +56,14 @@ open class FileBrowserFragment : BaseBrowserFragment() {
return FileBrowserFragment()
}
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
- (requireActivity() as? SecondaryActivity)?.supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_close_up)
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setupBrowser()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- setupBrowser()
+ (requireActivity() as? SecondaryActivity)?.supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_close_up)
}
override fun onStart() {
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt
index a0fc711ec2..05ea686cf0 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt
@@ -158,6 +158,9 @@ class MainBrowserFragment : BaseFragment(), View.OnClickListener, CtxActionRecei
browserFavRepository = BrowserFavRepository.getInstance(requireContext())
networkMonitor = NetworkMonitor.getInstance(requireContext())
super.onCreate(savedInstanceState)
+ localViewModel = getBrowserModel(category = TYPE_FILE, url = null)
+ favoritesViewModel = BrowserFavoritesModel(requireContext())
+ networkViewModel = getBrowserModel(category = TYPE_NETWORK, url = null)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -170,7 +173,6 @@ class MainBrowserFragment : BaseFragment(), View.OnClickListener, CtxActionRecei
val storageBrowserContainer = MainBrowserContainer(isNetwork = false, isFile = true, inCards = !displayInList)
val storageBrowserAdapter = BaseBrowserAdapter(storageBrowserContainer)
localEntry.list.adapter = storageBrowserAdapter
- localViewModel = getBrowserModel(category = TYPE_FILE, url = null)
containerAdapterAssociation[storageBrowserContainer] = Pair(storageBrowserAdapter, localViewModel)
localViewModel.dataset.observe(viewLifecycleOwner) { list ->
list?.let {
@@ -197,7 +199,6 @@ class MainBrowserFragment : BaseFragment(), View.OnClickListener, CtxActionRecei
val favoritesBrowserContainer = MainBrowserContainer(isNetwork = false, isFile = true, inCards = !displayInList)
val favoritesAdapter = BaseBrowserAdapter(favoritesBrowserContainer)
favoritesEntry.list.adapter = favoritesAdapter
- favoritesViewModel = BrowserFavoritesModel(requireContext())
containerAdapterAssociation[favoritesBrowserContainer] = Pair(favoritesAdapter, favoritesViewModel)
favoritesViewModel.favorites.observe(viewLifecycleOwner) { list ->
list.let {
@@ -223,7 +224,6 @@ class MainBrowserFragment : BaseFragment(), View.OnClickListener, CtxActionRecei
val networkBrowserContainer = MainBrowserContainer(isNetwork = true, isFile = false, inCards = !displayInList)
val networkAdapter = BaseBrowserAdapter(networkBrowserContainer)
networkEntry.list.adapter = networkAdapter
- networkViewModel = getBrowserModel(category = TYPE_NETWORK, url = null)
containerAdapterAssociation[networkBrowserContainer] = Pair(networkAdapter, networkViewModel)
networkViewModel.dataset.observe(viewLifecycleOwner) { list ->
list?.let {
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.kt
index cb5be6cee7..84c197c5f1 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.kt
@@ -62,11 +62,11 @@ class NetworkBrowserFragment : BaseBrowserFragment(), IDialogManager {
dialogsDelegate.observeDialogs(this, this)
networkMonitor = NetworkMonitor.getInstance(requireContext())
(requireActivity() as? SecondaryActivity)?.supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_close_up)
+ viewModel = getBrowserModel(TYPE_NETWORK, mrl)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- viewModel = getBrowserModel(TYPE_NETWORK, mrl)
if (isRootDirectory) swipeRefreshLayout.isEnabled = false
}
More information about the Android
mailing list