Skip to content
Snippets Groups Projects
Commit 4aed670f authored by Geoffrey Métais's avatar Geoffrey Métais
Browse files

Pass application context to browsers providers

parent 706a814b
No related branches found
No related tags found
No related merge requests found
Showing
with 46 additions and 38 deletions
......@@ -64,8 +64,8 @@ public class FileBrowserFragment extends BaseBrowserFragment {
}
protected void setupBrowser() {
if (isRootDirectory()) viewModel = ViewModelProviders.of(requireActivity(), new BrowserModel.Factory(null, BrowserModelKt.TYPE_FILE, getShowHiddenFiles())).get(BrowserModel.class);
else viewModel = ViewModelProviders.of(this, new BrowserModel.Factory(getMrl(), BrowserModelKt.TYPE_FILE, getShowHiddenFiles())).get(BrowserModel.class);
if (isRootDirectory()) viewModel = ViewModelProviders.of(requireActivity(), new BrowserModel.Factory(requireContext(), null, BrowserModelKt.TYPE_FILE, getShowHiddenFiles())).get(BrowserModel.class);
else viewModel = ViewModelProviders.of(this, new BrowserModel.Factory(requireContext(), getMrl(), BrowserModelKt.TYPE_FILE, getShowHiddenFiles())).get(BrowserModel.class);
}
public String getTitle() {
......
......@@ -72,7 +72,7 @@ public class FilePickerFragment extends FileBrowserFragment {
@Override
protected void setupBrowser() {
viewModel = ViewModelProviders.of(this, new BrowserModel.Factory(getMrl(), BrowserModelKt.TYPE_PICKER, false)).get(BrowserModel.class);
viewModel = ViewModelProviders.of(this, new BrowserModel.Factory(requireContext(), getMrl(), BrowserModelKt.TYPE_PICKER, false)).get(BrowserModel.class);
}
@Override
......
......@@ -64,7 +64,7 @@ public class NetworkBrowserFragment extends BaseBrowserFragment implements Simpl
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
viewModel = ViewModelProviders.of(this, new NetworkModel.Factory(getMrl(), getShowHiddenFiles())).get(NetworkModel.class);
viewModel = ViewModelProviders.of(this, new NetworkModel.Factory(requireContext(), getMrl(), getShowHiddenFiles())).get(NetworkModel.class);
}
@Override
......
......@@ -23,10 +23,12 @@
package org.videolan.vlc.gui.browser;
import android.annotation.TargetApi;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Context;
import android.content.DialogInterface;
import android.databinding.DataBindingUtil;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
......@@ -83,6 +85,7 @@ public class StorageBrowserFragment extends FileBrowserFragment implements Entry
if (bundle != null) mScannedDirectory = bundle.getBoolean(KEY_IN_MEDIALIB);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
......@@ -93,7 +96,7 @@ public class StorageBrowserFragment extends FileBrowserFragment implements Entry
}
protected void setupBrowser() {
viewModel = ViewModelProviders.of(this, new BrowserModel.Factory(getMrl(), BrowserModelKt.TYPE_STORAGE, getShowHiddenFiles())).get(BrowserModel.class);
viewModel = ViewModelProviders.of(this, new BrowserModel.Factory(requireContext(), getMrl(), BrowserModelKt.TYPE_STORAGE, getShowHiddenFiles())).get(BrowserModel.class);
}
@Override
......
......@@ -61,7 +61,7 @@ public class BrowserGridFragment extends GridFragment implements OnItemViewSelec
super.onCreate(savedInstanceState);
setOnItemViewSelectedListener(this);
setOnItemViewClickedListener(this); mShowHiddenFiles = PreferenceManager.getDefaultSharedPreferences(requireContext()).getBoolean("browser_show_hidden_files", false);
provider = ViewModelProviders.of(this, new NetworkModel.Factory(null, mShowHiddenFiles)).get(NetworkModel.class);
provider = ViewModelProviders.of(this, new NetworkModel.Factory(requireContext(), null, mShowHiddenFiles)).get(NetworkModel.class);
provider.getDataset().observe(this, new Observer<List<MediaLibraryItem>>() {
@Override
public void onChanged(@Nullable List<MediaLibraryItem> mediaLibraryItems) {
......
......@@ -45,7 +45,7 @@ public class DirectoryBrowserFragment extends MediaSortedFragment<BrowserModel>
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = ViewModelProviders.of(this, new BrowserModel.Factory(mUri.toString(), BrowserModelKt.TYPE_FILE, mShowHiddenFiles)).get(BrowserModel.class);
viewModel = ViewModelProviders.of(this, new BrowserModel.Factory(requireContext(), mUri.toString(), BrowserModelKt.TYPE_FILE, mShowHiddenFiles)).get(BrowserModel.class);
viewModel.getCategories().observe(this, new Observer<Map<String, List<MediaLibraryItem>>>() {
@Override
public void onChanged(@Nullable Map<String, List<MediaLibraryItem>> stringListMap) {
......
......@@ -53,7 +53,7 @@ public class NetworkBrowserFragment extends MediaSortedFragment<NetworkModel> {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = ViewModelProviders.of(this, new NetworkModel.Factory(mUri.toString(), mShowHiddenFiles)).get(NetworkModel.class);
viewModel = ViewModelProviders.of(this, new NetworkModel.Factory(requireContext(), mUri.toString(), mShowHiddenFiles)).get(NetworkModel.class);
viewModel.getCategories().observe(this, new Observer<Map<String, List<MediaLibraryItem>>>() {
@Override
public void onChanged(@Nullable Map<String, List<MediaLibraryItem>> stringListMap) {
......
......@@ -21,6 +21,7 @@
package org.videolan.vlc.providers
import android.arch.lifecycle.MutableLiveData
import android.content.Context
import android.net.Uri
import android.os.Handler
import android.os.HandlerThread
......@@ -39,7 +40,6 @@ import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.medialibrary.media.MediaWrapper
import org.videolan.medialibrary.media.Storage
import org.videolan.vlc.R
import org.videolan.vlc.VLCApplication
import org.videolan.vlc.util.LiveDataset
import org.videolan.vlc.util.VLCIO
import org.videolan.vlc.util.VLCInstance
......@@ -48,11 +48,12 @@ import java.util.*
const val TAG = "VLC/BrowserProvider"
abstract class BrowserProvider(val dataset: LiveDataset<MediaLibraryItem>, val url: String?, private val showHiddenFiles: Boolean) : EventListener {
abstract class BrowserProvider(val context: Context, val dataset: LiveDataset<MediaLibraryItem>, val url: String?, private val showHiddenFiles: Boolean) : EventListener {
init {
fetch()
}
protected var mediabrowser: MediaBrowser? = null
private val foldersContentMap = SimpleArrayMap<MediaLibraryItem, MutableList<MediaLibraryItem>>()
......@@ -168,7 +169,7 @@ abstract class BrowserProvider(val dataset: LiveDataset<MediaLibraryItem>, val u
private val sb = StringBuilder()
private fun getDescription(folderCount: Int, mediaFileCount: Int): String {
val res = VLCApplication.getAppResources()
val res = context.resources
sb.setLength(0)
if (folderCount > 0) {
sb.append(res.getQuantityString(R.plurals.subfolders_quantity, folderCount, folderCount))
......
......@@ -21,6 +21,7 @@
package org.videolan.vlc.providers
import android.arch.lifecycle.Observer
import android.content.Context
import android.hardware.usb.UsbDevice
import android.net.Uri
import android.text.TextUtils
......@@ -33,7 +34,6 @@ import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.medialibrary.media.MediaWrapper
import org.videolan.vlc.ExternalMonitor
import org.videolan.vlc.R
import org.videolan.vlc.VLCApplication
import org.videolan.vlc.database.models.BrowserFav
import org.videolan.vlc.gui.helpers.hf.getDocumentFiles
import org.videolan.vlc.repository.BrowserFavRepository
......@@ -41,16 +41,17 @@ import org.videolan.vlc.util.*
import java.io.File
open class FileBrowserProvider(
context: Context,
dataset: LiveDataset<MediaLibraryItem>,
url: String?, private val filePicker: Boolean = false,
showHiddenFiles: Boolean) : BrowserProvider(dataset,
showHiddenFiles: Boolean) : BrowserProvider(context, dataset,
url, showHiddenFiles
), Observer<MutableList<UsbDevice>> {
private var storagePosition = -1
private var otgPosition = -1
private val showFavorites : Boolean
private val favorites = if (url == null && !filePicker) BrowserFavRepository(VLCApplication.getAppContext()).localFavorites else null
private val favorites = if (url == null && !filePicker) BrowserFavRepository(context).localFavorites else null
private val favoritesObserver by lazy { Observer<List<BrowserFav>> {
val favs = convertFavorites(it)
......@@ -73,7 +74,7 @@ open class FileBrowserProvider(
data.add(fav)
}
if (favAdded) {
val quickAccess = VLCApplication.getAppResources().getString(R.string.browser_quick_access)
val quickAccess = context.getString(R.string.browser_quick_access)
data.add(position, DummyItem(quickAccess))
}
}
......@@ -91,8 +92,8 @@ open class FileBrowserProvider(
}
override fun browseRoot() {
val internalmemoryTitle = VLCApplication.getAppResources().getString(R.string.internal_memory)
val browserStorage = VLCApplication.getAppResources().getString(R.string.browser_storages)
val internalmemoryTitle = context.getString(R.string.internal_memory)
val browserStorage = context.getString(R.string.browser_storages)
val storages = AndroidDevices.getMediaDirectories()
val devices = mutableListOf<MediaLibraryItem>()
if (!filePicker) devices.add(DummyItem(browserStorage))
......@@ -123,7 +124,7 @@ open class FileBrowserProvider(
override fun browse(url: String?) {
when {
url == "otg://" || url?.startsWith("content:") == true -> uiJob {
dataset.value = withContext(VLCIO) { getDocumentFiles(VLCApplication.getAppContext(), Uri.parse(url).path.substringAfterLast(':')) as? MutableList<MediaLibraryItem> ?: mutableListOf() }
dataset.value = withContext(VLCIO) { getDocumentFiles(context, Uri.parse(url).path.substringAfterLast(':')) as? MutableList<MediaLibraryItem> ?: mutableListOf() }
}
else -> super.browse(url)
}
......@@ -147,7 +148,7 @@ open class FileBrowserProvider(
}
} else if (otgPosition == -1) {
val otg = MediaWrapper(Uri.parse("otg://")).apply {
title = VLCApplication.getAppResources().getString(R.string.otg_device_title)
title = context.getString(R.string.otg_device_title)
type = MediaWrapper.TYPE_DIR
}
otgPosition = storagePosition+1
......
......@@ -20,13 +20,14 @@
package org.videolan.vlc.providers
import android.content.Context
import org.videolan.libvlc.util.MediaBrowser
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.medialibrary.media.MediaWrapper
import org.videolan.vlc.util.LiveDataset
class FilePickerProvider(dataset: LiveDataset<MediaLibraryItem>, url: String?) : FileBrowserProvider(dataset, url, true, false) {
class FilePickerProvider(context: Context, dataset: LiveDataset<MediaLibraryItem>, url: String?) : FileBrowserProvider(context, dataset, url, true, false) {
override fun getFlags(): Int {
return MediaBrowser.Flag.Interact or MediaBrowser.Flag.NoSlavesAutodetect
......
......@@ -21,19 +21,19 @@
package org.videolan.vlc.providers
import android.arch.lifecycle.Observer
import android.content.Context
import kotlinx.coroutines.experimental.Job
import org.videolan.medialibrary.media.DummyItem
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.medialibrary.media.MediaWrapper
import org.videolan.vlc.ExternalMonitor
import org.videolan.vlc.R
import org.videolan.vlc.VLCApplication
import org.videolan.vlc.repository.BrowserFavRepository
import org.videolan.vlc.util.LiveDataset
class NetworkProvider(dataset: LiveDataset<MediaLibraryItem>, url: String? = null, showHiddenFiles: Boolean): BrowserProvider(dataset, url, showHiddenFiles), Observer<List<MediaWrapper>> {
class NetworkProvider(context: Context, dataset: LiveDataset<MediaLibraryItem>, url: String? = null, showHiddenFiles: Boolean): BrowserProvider(context, dataset, url, showHiddenFiles), Observer<List<MediaWrapper>> {
private val favorites = if (url == null) BrowserFavRepository(VLCApplication.getAppContext()).networkFavorites else null
private val favorites = if (url == null) BrowserFavRepository(context).networkFavorites else null
init {
favorites?.observeForever(this)
......@@ -78,9 +78,9 @@ class NetworkProvider(dataset: LiveDataset<MediaLibraryItem>, url: String? = nul
private fun getFavoritesList(favs: List<MediaWrapper>?): MutableList<MediaLibraryItem>? {
if (favs?.isNotEmpty() == true) {
val list = mutableListOf<MediaLibraryItem>()
list.add(0, DummyItem(VLCApplication.getAppResources().getString(R.string.network_favorites)))
list.add(0, DummyItem(context.getString(R.string.network_favorites)))
for ((index, fav) in favs.withIndex()) list.add(index + 1, fav)
list.add(DummyItem(VLCApplication.getAppResources().getString(R.string.network_shared_folders)))
list.add(DummyItem(context.getString(R.string.network_shared_folders)))
return list
}
return null
......
......@@ -20,20 +20,20 @@
package org.videolan.vlc.providers
import android.content.Context
import android.net.Uri
import android.text.TextUtils
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.medialibrary.media.MediaWrapper
import org.videolan.medialibrary.media.Storage
import org.videolan.vlc.R
import org.videolan.vlc.VLCApplication
import org.videolan.vlc.util.AndroidDevices
import org.videolan.vlc.util.CustomDirectories
import org.videolan.vlc.util.LiveDataset
import java.io.File
import java.util.*
class StorageProvider(dataset: LiveDataset<MediaLibraryItem>, url: String?, showHiddenFiles: Boolean): FileBrowserProvider(dataset, url, false, showHiddenFiles) {
class StorageProvider(context: Context, dataset: LiveDataset<MediaLibraryItem>, url: String?, showHiddenFiles: Boolean): FileBrowserProvider(context, dataset, url, false, showHiddenFiles) {
override fun browseRoot() {
val storages = AndroidDevices.getMediaDirectories()
......@@ -44,7 +44,7 @@ class StorageProvider(dataset: LiveDataset<MediaLibraryItem>, url: String?, show
if (TextUtils.isEmpty(mediaDirLocation)) continue
storage = Storage(Uri.fromFile(File(mediaDirLocation)))
if (TextUtils.equals(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY, mediaDirLocation))
storage.name = VLCApplication.getAppResources().getString(R.string.internal_memory)
storage.name = context.getString(R.string.internal_memory)
storagesList.add(storage)
}
customLoop@ for (customDir in customDirectories) {
......
......@@ -22,6 +22,7 @@ package org.videolan.vlc.viewmodels.browser
import android.arch.lifecycle.ViewModel
import android.arch.lifecycle.ViewModelProvider
import android.content.Context
import android.support.annotation.MainThread
import kotlinx.coroutines.experimental.CommonPool
import kotlinx.coroutines.experimental.CoroutineStart
......@@ -38,13 +39,13 @@ const val TYPE_NETWORK = 1
const val TYPE_PICKER = 2
const val TYPE_STORAGE = 3
open class BrowserModel(val url: String?, type: Int, showHiddenFiles: Boolean) : BaseModel<MediaLibraryItem>() {
open class BrowserModel(val context: Context, val url: String?, type: Int, showHiddenFiles: Boolean) : BaseModel<MediaLibraryItem>() {
protected val provider: BrowserProvider = when (type) {
TYPE_PICKER -> FilePickerProvider(dataset, url)
TYPE_NETWORK -> NetworkProvider(dataset, url, showHiddenFiles)
TYPE_STORAGE -> StorageProvider(dataset, url, showHiddenFiles)
else -> FileBrowserProvider(dataset, url, showHiddenFiles = showHiddenFiles)
TYPE_PICKER -> FilePickerProvider(context, dataset, url)
TYPE_NETWORK -> NetworkProvider(context, dataset, url, showHiddenFiles)
TYPE_STORAGE -> StorageProvider(context, dataset, url, showHiddenFiles)
else -> FileBrowserProvider(context, dataset, url, showHiddenFiles = showHiddenFiles)
}
public override fun fetch() {}
......@@ -74,10 +75,10 @@ open class BrowserModel(val url: String?, type: Int, showHiddenFiles: Boolean) :
provider.release()
}
class Factory(val url: String?, private val type: Int, private val showHiddenFiles: Boolean): ViewModelProvider.NewInstanceFactory() {
class Factory(val context: Context, val url: String?, private val type: Int, private val showHiddenFiles: Boolean): ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
@Suppress("UNCHECKED_CAST")
return BrowserModel(url, type, showHiddenFiles) as T
return BrowserModel(context.applicationContext, url, type, showHiddenFiles) as T
}
}
}
......
......@@ -22,17 +22,18 @@ package org.videolan.vlc.viewmodels.browser
import android.arch.lifecycle.ViewModel
import android.arch.lifecycle.ViewModelProvider
import android.content.Context
class NetworkModel(url: String? = null, showHiddenFiles: Boolean): BrowserModel(url, TYPE_NETWORK, showHiddenFiles) {
class NetworkModel(context: Context, url: String? = null, showHiddenFiles: Boolean): BrowserModel(context, url, TYPE_NETWORK, showHiddenFiles) {
override fun refresh() : Boolean {
return provider.refresh()
}
class Factory(val url: String?, private val showHiddenFiles: Boolean): ViewModelProvider.NewInstanceFactory() {
class Factory(val context: Context, val url: String?, private val showHiddenFiles: Boolean): ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
@Suppress("UNCHECKED_CAST")
return NetworkModel(url, showHiddenFiles) as T
return NetworkModel(context.applicationContext, url, showHiddenFiles) as T
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment