diff --git a/detekt-baseline-debug.xml b/detekt-baseline-debug.xml
index 7efed888..7edc104a 100644
--- a/detekt-baseline-debug.xml
+++ b/detekt-baseline-debug.xml
@@ -26,9 +26,9 @@
ComplexCondition:SongView.kt$SongView$TextUtils.isEmpty(transcodedSuffix) || transcodedSuffix == suffix || song.isVideo && Util.getVideoPlayerType() !== VideoPlayerType.FLASH
ComplexMethod:DownloadFile.kt$DownloadFile.DownloadTask$override fun execute()
ComplexMethod:FilePickerAdapter.kt$FilePickerAdapter$private fun fileLister(currentDirectory: File)
- ComplexMethod:SelectAlbumFragment.kt$SelectAlbumFragment$private fun enableButtons()
- ComplexMethod:SelectAlbumFragment.kt$SelectAlbumFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory)
ComplexMethod:SongView.kt$SongView$fun setSong(song: MusicDirectory.Entry, checkable: Boolean, draggable: Boolean)
+ ComplexMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun enableButtons()
+ ComplexMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory)
EmptyCatchBlock:LocalMediaPlayer.kt$LocalMediaPlayer${ }
EmptyDefaultConstructor:VideoPlayer.kt$VideoPlayer$()
EmptyFunctionBlock:SongView.kt$SongView${}
@@ -49,21 +49,21 @@
ImplicitDefaultLocale:SongView.kt$SongView$String.format("%s > %s", suffix, transcodedSuffix)
LargeClass:MediaPlayerService.kt$MediaPlayerService : Service
LargeClass:RESTMusicService.kt$RESTMusicService : MusicService
- LargeClass:SelectAlbumFragment.kt$SelectAlbumFragment : Fragment
+ LargeClass:TrackCollectionFragment.kt$TrackCollectionFragment : Fragment
+ LongMethod:ArtistListFragment.kt$ArtistListFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
+ LongMethod:ArtistListFragment.kt$ArtistListFragment$private fun onArtistMenuItemSelected(menuItem: MenuItem, artist: Artist): Boolean
LongMethod:DownloadFile.kt$DownloadFile.DownloadTask$override fun execute()
LongMethod:EditServerFragment.kt$EditServerFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
LongMethod:FilePickerAdapter.kt$FilePickerAdapter$private fun fileLister(currentDirectory: File)
LongMethod:LocalMediaPlayer.kt$LocalMediaPlayer$@Synchronized private fun doPlay(downloadFile: DownloadFile, position: Int, start: Boolean)
LongMethod:MediaPlayerService.kt$MediaPlayerService$private fun updateMediaSession(currentPlaying: DownloadFile?, playerState: PlayerState)
LongMethod:NavigationActivity.kt$NavigationActivity$override fun onCreate(savedInstanceState: Bundle?)
- LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean
- LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
- LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$private fun updateDisplay(refresh: Boolean)
- LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory)
- LongMethod:SelectArtistFragment.kt$SelectArtistFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
- LongMethod:SelectArtistFragment.kt$SelectArtistFragment$private fun onArtistMenuItemSelected(menuItem: MenuItem, artist: Artist): Boolean
LongMethod:ShareHandler.kt$ShareHandler$private fun showDialog( fragment: Fragment, shareDetails: ShareDetails, swipe: SwipeRefreshLayout?, cancellationToken: CancellationToken )
LongMethod:SongView.kt$SongView$fun setSong(song: MusicDirectory.Entry, checkable: Boolean, draggable: Boolean)
+ LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean
+ LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
+ LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun updateDisplay(refresh: Boolean)
+ LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory)
LongParameterList:DownloadHandler.kt$DownloadHandler$( fragment: Fragment, append: Boolean, save: Boolean, autoPlay: Boolean, playNext: Boolean, shuffle: Boolean, songs: List<MusicDirectory.Entry?> )
LongParameterList:DownloadHandler.kt$DownloadHandler$( fragment: Fragment, id: String, name: String?, isShare: Boolean, isDirectory: Boolean, save: Boolean, append: Boolean, autoPlay: Boolean, shuffle: Boolean, background: Boolean, playNext: Boolean, unpin: Boolean, isArtist: Boolean )
LongParameterList:DownloadHandler.kt$DownloadHandler$( fragment: Fragment, id: String, name: String?, save: Boolean, append: Boolean, autoplay: Boolean, shuffle: Boolean, background: Boolean, playNext: Boolean, unpin: Boolean )
@@ -103,11 +103,11 @@
MagicNumber:MediaPlayerService.kt$MediaPlayerService.Companion$50L
MagicNumber:RESTMusicService.kt$RESTMusicService$206
MagicNumber:RESTMusicService.kt$RESTMusicService$5
- MagicNumber:SelectAlbumFragment.kt$SelectAlbumFragment$10
MagicNumber:SelectMusicFolderView.kt$SelectMusicFolderView$10
MagicNumber:SongView.kt$SongView$3
MagicNumber:SongView.kt$SongView$4
MagicNumber:SongView.kt$SongView$60
+ MagicNumber:TrackCollectionFragment.kt$TrackCollectionFragment$10
NestedBlockDepth:DownloadFile.kt$DownloadFile.DownloadTask$override fun execute()
NestedBlockDepth:DownloadHandler.kt$DownloadHandler$private fun downloadRecursively( fragment: Fragment, id: String, name: String?, isShare: Boolean, isDirectory: Boolean, save: Boolean, append: Boolean, autoPlay: Boolean, shuffle: Boolean, background: Boolean, playNext: Boolean, unpin: Boolean, isArtist: Boolean )
NestedBlockDepth:MediaPlayerService.kt$MediaPlayerService$private fun setupOnSongCompletedHandler()
@@ -117,9 +117,9 @@
ReturnCount:MediaPlayerService.kt$MediaPlayerService$private fun generateAction(context: Context, requestCode: Int): NotificationCompat.Action?
ReturnCount:RESTMusicService.kt$RESTMusicService$@Throws(Exception::class) override fun getAvatar( username: String?, size: Int, saveToFile: Boolean, highQuality: Boolean ): Bitmap?
ReturnCount:RESTMusicService.kt$RESTMusicService$@Throws(Exception::class) override fun getCoverArt( entry: MusicDirectory.Entry?, size: Int, saveToFile: Boolean, highQuality: Boolean ): Bitmap?
- ReturnCount:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean
- ReturnCount:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onOptionsItemSelected(item: MenuItem): Boolean
ReturnCount:ServerRowAdapter.kt$ServerRowAdapter$ private fun popupMenuItemClick(menuItem: MenuItem, position: Int): Boolean
+ ReturnCount:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean
+ ReturnCount:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onOptionsItemSelected(item: MenuItem): Boolean
SpreadOperator:MediaPlayerService.kt$MediaPlayerService$(*compactActions)
SwallowedException:DownloadFile.kt$DownloadFile$catch (e: Exception) { Timber.w("Failed to set last-modified date on %s", file) }
SwallowedException:DownloadFile.kt$DownloadFile$catch (ex: IOException) { Timber.w("Failed to rename file %s to %s", completeFile, saveFile) }
@@ -146,7 +146,7 @@
TooManyFunctions:LocalMediaPlayer.kt$LocalMediaPlayer
TooManyFunctions:MediaPlayerService.kt$MediaPlayerService : Service
TooManyFunctions:RESTMusicService.kt$RESTMusicService : MusicService
- TooManyFunctions:SelectAlbumFragment.kt$SelectAlbumFragment : Fragment
+ TooManyFunctions:TrackCollectionFragment.kt$TrackCollectionFragment : Fragment
TopLevelPropertyNaming:SubsonicUncaughtExceptionHandler.kt$private const val filename = "ultrasonic-stacktrace.txt"
UnusedPrivateMember:RESTMusicService.kt$RESTMusicService.Companion$private const val INDEXES_FOLDER_STORAGE_NAME = "indexes_folder"
UselessCallOnNotNull:FileLoggerTree.kt$FileLoggerTree$fileList.isNullOrEmpty()
diff --git a/detekt-baseline-release.xml b/detekt-baseline-release.xml
index 7efed888..7edc104a 100644
--- a/detekt-baseline-release.xml
+++ b/detekt-baseline-release.xml
@@ -26,9 +26,9 @@
ComplexCondition:SongView.kt$SongView$TextUtils.isEmpty(transcodedSuffix) || transcodedSuffix == suffix || song.isVideo && Util.getVideoPlayerType() !== VideoPlayerType.FLASH
ComplexMethod:DownloadFile.kt$DownloadFile.DownloadTask$override fun execute()
ComplexMethod:FilePickerAdapter.kt$FilePickerAdapter$private fun fileLister(currentDirectory: File)
- ComplexMethod:SelectAlbumFragment.kt$SelectAlbumFragment$private fun enableButtons()
- ComplexMethod:SelectAlbumFragment.kt$SelectAlbumFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory)
ComplexMethod:SongView.kt$SongView$fun setSong(song: MusicDirectory.Entry, checkable: Boolean, draggable: Boolean)
+ ComplexMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun enableButtons()
+ ComplexMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory)
EmptyCatchBlock:LocalMediaPlayer.kt$LocalMediaPlayer${ }
EmptyDefaultConstructor:VideoPlayer.kt$VideoPlayer$()
EmptyFunctionBlock:SongView.kt$SongView${}
@@ -49,21 +49,21 @@
ImplicitDefaultLocale:SongView.kt$SongView$String.format("%s > %s", suffix, transcodedSuffix)
LargeClass:MediaPlayerService.kt$MediaPlayerService : Service
LargeClass:RESTMusicService.kt$RESTMusicService : MusicService
- LargeClass:SelectAlbumFragment.kt$SelectAlbumFragment : Fragment
+ LargeClass:TrackCollectionFragment.kt$TrackCollectionFragment : Fragment
+ LongMethod:ArtistListFragment.kt$ArtistListFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
+ LongMethod:ArtistListFragment.kt$ArtistListFragment$private fun onArtistMenuItemSelected(menuItem: MenuItem, artist: Artist): Boolean
LongMethod:DownloadFile.kt$DownloadFile.DownloadTask$override fun execute()
LongMethod:EditServerFragment.kt$EditServerFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
LongMethod:FilePickerAdapter.kt$FilePickerAdapter$private fun fileLister(currentDirectory: File)
LongMethod:LocalMediaPlayer.kt$LocalMediaPlayer$@Synchronized private fun doPlay(downloadFile: DownloadFile, position: Int, start: Boolean)
LongMethod:MediaPlayerService.kt$MediaPlayerService$private fun updateMediaSession(currentPlaying: DownloadFile?, playerState: PlayerState)
LongMethod:NavigationActivity.kt$NavigationActivity$override fun onCreate(savedInstanceState: Bundle?)
- LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean
- LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
- LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$private fun updateDisplay(refresh: Boolean)
- LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory)
- LongMethod:SelectArtistFragment.kt$SelectArtistFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
- LongMethod:SelectArtistFragment.kt$SelectArtistFragment$private fun onArtistMenuItemSelected(menuItem: MenuItem, artist: Artist): Boolean
LongMethod:ShareHandler.kt$ShareHandler$private fun showDialog( fragment: Fragment, shareDetails: ShareDetails, swipe: SwipeRefreshLayout?, cancellationToken: CancellationToken )
LongMethod:SongView.kt$SongView$fun setSong(song: MusicDirectory.Entry, checkable: Boolean, draggable: Boolean)
+ LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean
+ LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)
+ LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun updateDisplay(refresh: Boolean)
+ LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory)
LongParameterList:DownloadHandler.kt$DownloadHandler$( fragment: Fragment, append: Boolean, save: Boolean, autoPlay: Boolean, playNext: Boolean, shuffle: Boolean, songs: List<MusicDirectory.Entry?> )
LongParameterList:DownloadHandler.kt$DownloadHandler$( fragment: Fragment, id: String, name: String?, isShare: Boolean, isDirectory: Boolean, save: Boolean, append: Boolean, autoPlay: Boolean, shuffle: Boolean, background: Boolean, playNext: Boolean, unpin: Boolean, isArtist: Boolean )
LongParameterList:DownloadHandler.kt$DownloadHandler$( fragment: Fragment, id: String, name: String?, save: Boolean, append: Boolean, autoplay: Boolean, shuffle: Boolean, background: Boolean, playNext: Boolean, unpin: Boolean )
@@ -103,11 +103,11 @@
MagicNumber:MediaPlayerService.kt$MediaPlayerService.Companion$50L
MagicNumber:RESTMusicService.kt$RESTMusicService$206
MagicNumber:RESTMusicService.kt$RESTMusicService$5
- MagicNumber:SelectAlbumFragment.kt$SelectAlbumFragment$10
MagicNumber:SelectMusicFolderView.kt$SelectMusicFolderView$10
MagicNumber:SongView.kt$SongView$3
MagicNumber:SongView.kt$SongView$4
MagicNumber:SongView.kt$SongView$60
+ MagicNumber:TrackCollectionFragment.kt$TrackCollectionFragment$10
NestedBlockDepth:DownloadFile.kt$DownloadFile.DownloadTask$override fun execute()
NestedBlockDepth:DownloadHandler.kt$DownloadHandler$private fun downloadRecursively( fragment: Fragment, id: String, name: String?, isShare: Boolean, isDirectory: Boolean, save: Boolean, append: Boolean, autoPlay: Boolean, shuffle: Boolean, background: Boolean, playNext: Boolean, unpin: Boolean, isArtist: Boolean )
NestedBlockDepth:MediaPlayerService.kt$MediaPlayerService$private fun setupOnSongCompletedHandler()
@@ -117,9 +117,9 @@
ReturnCount:MediaPlayerService.kt$MediaPlayerService$private fun generateAction(context: Context, requestCode: Int): NotificationCompat.Action?
ReturnCount:RESTMusicService.kt$RESTMusicService$@Throws(Exception::class) override fun getAvatar( username: String?, size: Int, saveToFile: Boolean, highQuality: Boolean ): Bitmap?
ReturnCount:RESTMusicService.kt$RESTMusicService$@Throws(Exception::class) override fun getCoverArt( entry: MusicDirectory.Entry?, size: Int, saveToFile: Boolean, highQuality: Boolean ): Bitmap?
- ReturnCount:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean
- ReturnCount:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onOptionsItemSelected(item: MenuItem): Boolean
ReturnCount:ServerRowAdapter.kt$ServerRowAdapter$ private fun popupMenuItemClick(menuItem: MenuItem, position: Int): Boolean
+ ReturnCount:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean
+ ReturnCount:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onOptionsItemSelected(item: MenuItem): Boolean
SpreadOperator:MediaPlayerService.kt$MediaPlayerService$(*compactActions)
SwallowedException:DownloadFile.kt$DownloadFile$catch (e: Exception) { Timber.w("Failed to set last-modified date on %s", file) }
SwallowedException:DownloadFile.kt$DownloadFile$catch (ex: IOException) { Timber.w("Failed to rename file %s to %s", completeFile, saveFile) }
@@ -146,7 +146,7 @@
TooManyFunctions:LocalMediaPlayer.kt$LocalMediaPlayer
TooManyFunctions:MediaPlayerService.kt$MediaPlayerService : Service
TooManyFunctions:RESTMusicService.kt$RESTMusicService : MusicService
- TooManyFunctions:SelectAlbumFragment.kt$SelectAlbumFragment : Fragment
+ TooManyFunctions:TrackCollectionFragment.kt$TrackCollectionFragment : Fragment
TopLevelPropertyNaming:SubsonicUncaughtExceptionHandler.kt$private const val filename = "ultrasonic-stacktrace.txt"
UnusedPrivateMember:RESTMusicService.kt$RESTMusicService.Companion$private const val INDEXES_FOLDER_STORAGE_NAME = "indexes_folder"
UselessCallOnNotNull:FileLoggerTree.kt$FileLoggerTree$fileList.isNullOrEmpty()
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectArtistFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListFragment.kt
similarity index 99%
rename from ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectArtistFragment.kt
rename to ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListFragment.kt
index b2c4414d..69a8d055 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectArtistFragment.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListFragment.kt
@@ -26,7 +26,7 @@ import org.moire.ultrasonic.view.SelectMusicFolderView
/**
* Displays the list of Artists from the media library
*/
-class SelectArtistFragment : Fragment() {
+class ArtistListFragment : Fragment() {
private val activeServerProvider: ActiveServerProvider by inject()
private val serverSettingsModel: ServerSettingsModel by viewModel()
private val artistListModel: ArtistListModel by viewModel()
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt
similarity index 98%
rename from ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumFragment.kt
rename to ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt
index 43d1915c..1e0984a3 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumFragment.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt
@@ -62,7 +62,7 @@ import timber.log.Timber
* TODO: Break up this class into smaller more specific classes, extending a base class if necessary
*/
@KoinApiExtension
-class SelectAlbumFragment : Fragment() {
+class TrackCollectionFragment : Fragment() {
private var refreshAlbumListView: SwipeRefreshLayout? = null
private var albumListView: ListView? = null
@@ -93,7 +93,7 @@ class SelectAlbumFragment : Fragment() {
private var cancellationToken: CancellationToken? = null
private val activeServerProvider: ActiveServerProvider by inject()
- private val model: SelectAlbumModel by viewModels()
+ private val model: TrackCollectionModel by viewModels()
private val random: Random = SecureRandom()
@@ -197,7 +197,7 @@ class SelectAlbumFragment : Fragment() {
}
playNextButton!!.setOnClickListener {
downloadHandler.download(
- this@SelectAlbumFragment, append = true,
+ this@TrackCollectionFragment, append = true,
save = false, autoPlay = false, playNext = true, shuffle = false,
songs = getSelectedSongs(albumListView)
)
@@ -260,11 +260,11 @@ class SelectAlbumFragment : Fragment() {
)
fun setTitle(name: String?) {
- setTitle(this@SelectAlbumFragment, name)
+ setTitle(this@TrackCollectionFragment, name)
}
fun setTitle(name: Int) {
- setTitle(this@SelectAlbumFragment, name)
+ setTitle(this@TrackCollectionFragment, name)
}
model.viewModelScope.launch {
@@ -847,7 +847,7 @@ class SelectAlbumFragment : Fragment() {
val albumHeader = AlbumHeader.processEntries(context, entries)
val titleView = header!!.findViewById(R.id.select_album_title) as TextView
- titleView.text = name ?: getTitle(this@SelectAlbumFragment) // getActionBarSubtitle());
+ titleView.text = name ?: getTitle(this@TrackCollectionFragment) // getActionBarSubtitle());
// Don't show a header if all entries are videos
if (albumHeader.isAllVideo) {
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumModel.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionModel.kt
similarity index 99%
rename from ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumModel.kt
rename to ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionModel.kt
index 536d3690..d8800ad6 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumModel.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionModel.kt
@@ -20,7 +20,7 @@ import org.moire.ultrasonic.util.Util
// TODO: Break up this class into smaller more specific classes, extending a base class if necessary
@KoinApiExtension
-class SelectAlbumModel(application: Application) : AndroidViewModel(application), KoinComponent {
+class TrackCollectionModel(application: Application) : AndroidViewModel(application), KoinComponent {
private val context: Context
get() = getApplication().applicationContext
diff --git a/ultrasonic/src/main/res/navigation/navigation_graph.xml b/ultrasonic/src/main/res/navigation/navigation_graph.xml
index a33cf59a..1d89f6df 100644
--- a/ultrasonic/src/main/res/navigation/navigation_graph.xml
+++ b/ultrasonic/src/main/res/navigation/navigation_graph.xml
@@ -19,7 +19,7 @@
+ android:name="org.moire.ultrasonic.fragment.TrackCollectionFragment" >