Merge pull request #353 from Bnyro/structure

structured the project a bit and some cleanup
This commit is contained in:
Bnyro 2022-06-02 22:07:03 +02:00 committed by GitHub
commit 55dcfee570
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 137 additions and 128 deletions

View File

@ -3,6 +3,7 @@ package com.github.libretube
import android.content.Context
import android.support.v4.media.session.MediaSessionCompat
import com.github.libretube.obj.Streams
import com.github.libretube.util.RetrofitInstance
import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem

View File

@ -14,6 +14,7 @@ import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.github.libretube.adapters.TrendingAdapter
import com.github.libretube.util.RetrofitInstance
import java.io.IOException
import retrofit2.HttpException

View File

@ -16,6 +16,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.github.libretube.adapters.PlaylistsAdapter
import com.github.libretube.dialogs.CreatePlaylistDialog
import com.github.libretube.util.RetrofitInstance
import java.io.IOException
import retrofit2.HttpException

View File

@ -30,7 +30,10 @@ import androidx.navigation.NavController
import androidx.navigation.findNavController
import androidx.navigation.ui.setupWithNavController
import androidx.preference.PreferenceManager
import com.github.libretube.fragments.PlayerFragment
import com.github.libretube.fragments.isFullScreen
import com.github.libretube.util.CronetHelper
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.color.DynamicColors

View File

@ -27,6 +27,8 @@ import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import com.github.libretube.dialogs.LoginDialog
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.color.DynamicColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.IOException

View File

@ -24,6 +24,7 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.github.libretube.adapters.SubscriptionAdapter
import com.github.libretube.adapters.SubscriptionChannelAdapter
import com.github.libretube.util.RetrofitInstance
import java.io.IOException
import retrofit2.HttpException

View File

@ -9,9 +9,9 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.PlayerFragment
import com.github.libretube.R
import com.github.libretube.formatShort
import com.github.libretube.fragments.PlayerFragment
import com.github.libretube.obj.StreamItem
import com.squareup.picasso.Picasso

View File

@ -13,12 +13,12 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.PlayerFragment
import com.github.libretube.R
import com.github.libretube.RetrofitInstance
import com.github.libretube.VideoOptionsDialog
import com.github.libretube.dialogs.VideoOptionsDialog
import com.github.libretube.fragments.PlayerFragment
import com.github.libretube.obj.PlaylistId
import com.github.libretube.obj.StreamItem
import com.github.libretube.util.RetrofitInstance
import com.squareup.picasso.Picasso
import java.io.IOException
import kotlinx.coroutines.GlobalScope

View File

@ -12,9 +12,9 @@ import androidx.core.os.bundleOf
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.MainActivity
import com.github.libretube.R
import com.github.libretube.RetrofitInstance
import com.github.libretube.obj.PlaylistId
import com.github.libretube.obj.Playlists
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.squareup.picasso.Picasso
import java.io.IOException

View File

@ -12,10 +12,10 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.MainActivity
import com.github.libretube.PlayerFragment
import com.github.libretube.R
import com.github.libretube.VideoOptionsDialog
import com.github.libretube.dialogs.VideoOptionsDialog
import com.github.libretube.formatShort
import com.github.libretube.fragments.PlayerFragment
import com.github.libretube.obj.SearchItem
import com.squareup.picasso.Picasso

View File

@ -13,10 +13,10 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.MainActivity
import com.github.libretube.PlayerFragment
import com.github.libretube.R
import com.github.libretube.VideoOptionsDialog
import com.github.libretube.dialogs.VideoOptionsDialog
import com.github.libretube.formatShort
import com.github.libretube.fragments.PlayerFragment
import com.github.libretube.obj.StreamItem
import com.squareup.picasso.Picasso

View File

@ -13,10 +13,10 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.MainActivity
import com.github.libretube.PlayerFragment
import com.github.libretube.R
import com.github.libretube.VideoOptionsDialog
import com.github.libretube.dialogs.VideoOptionsDialog
import com.github.libretube.formatShort
import com.github.libretube.fragments.PlayerFragment
import com.github.libretube.obj.StreamItem
import com.squareup.picasso.Picasso

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.dialogs
import android.app.Dialog
import android.content.Context
@ -15,7 +15,9 @@ import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.github.libretube.R
import com.github.libretube.obj.PlaylistId
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.IOException
import retrofit2.HttpException

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.dialogs
import android.app.Dialog
import android.content.Context
@ -14,7 +14,9 @@ import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.setFragmentResult
import androidx.lifecycle.lifecycleScope
import com.github.libretube.R
import com.github.libretube.obj.Playlists
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.textfield.TextInputEditText
import java.io.IOException

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.dialogs
import android.app.Dialog
import android.content.Intent
@ -15,6 +15,8 @@ import android.widget.Spinner
import android.widget.TextView
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import com.github.libretube.DownloadService
import com.github.libretube.R
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class DownloadDialog : DialogFragment() {

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.dialogs
import android.app.Dialog
import android.content.Context
@ -13,7 +13,9 @@ import android.widget.Toast
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope
import com.github.libretube.R
import com.github.libretube.obj.Login
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.IOException
import retrofit2.HttpException

View File

@ -0,0 +1,41 @@
package com.github.libretube.dialogs
import android.content.Context
import android.content.Intent
import androidx.preference.PreferenceManager
import com.github.libretube.R
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.net.URLEncoder
fun showShareDialog(context: Context, videoId: String) {
val sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(context)
val instancePref = sharedPreferences.getString(
"instance",
"https://pipedapi.kavin.rocks"
)!!
val instance = "&instance=${URLEncoder.encode(instancePref, "UTF-8")}"
val shareOptions = arrayOf(
context.getString(R.string.piped),
context.getString(R.string.instance),
context.getString(R.string.youtube)
)
MaterialAlertDialogBuilder(context)
.setTitle(context.getString(R.string.share))
.setItems(
shareOptions
) { _, id ->
val url = when (id) {
0 -> "https://piped.kavin.rocks/watch?v=$videoId"
1 -> "https://piped.kavin.rocks/watch?v=$videoId$instance"
2 -> "https://youtu.be/$videoId"
else -> "https://piped.kavin.rocks/watch?v=$videoId"
}
val intent = Intent()
intent.action = Intent.ACTION_SEND
intent.putExtra(Intent.EXTRA_TEXT, url)
intent.type = "text/plain"
context.startActivity(Intent.createChooser(intent, "Share Url To:"))
}
.show()
}

View File

@ -1,12 +1,13 @@
package com.github.libretube
package com.github.libretube.dialogs
import android.app.Dialog
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.fragment.app.DialogFragment
import com.github.libretube.BackgroundMode
import com.github.libretube.R
import com.google.android.material.dialog.MaterialAlertDialogBuilder
/**
@ -44,8 +45,7 @@ class VideoOptionsDialog(private val videoId: String, context: Context) : Dialog
when (which) {
// This for example will be the "Background mode" option
0 -> {
BackgroundMode
.getInstance()
BackgroundMode.getInstance()
.playOnBackgroundMode(requireContext(), videoId, 0)
}
// Add Video to Playlist Dialog
@ -66,47 +66,7 @@ class VideoOptionsDialog(private val videoId: String, context: Context) : Dialog
}
}
2 -> {
/* crashes
val sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(requireContext())
val instancePref = sharedPreferences.getString(
"instance",
"https://pipedapi.kavin.rocks"
)!!
val instance = "&instance=${URLEncoder.encode(instancePref, "UTF-8")}"
val shareOptions = arrayOf(
getString(R.string.piped),
getString(R.string.instance),
getString(R.string.youtube)
)
MaterialAlertDialogBuilder(requireContext())
.setTitle(getString(R.string.share))
.setItems(
shareOptions
) { _, id ->
val url = when (id) {
0 -> "https://piped.kavin.rocks/watch?v=$videoId"
1 -> "https://piped.kavin.rocks/watch?v=$videoId$instance"
2 -> "https://youtu.be/$videoId"
else -> "https://piped.kavin.rocks/watch?v=$videoId"
}
dismiss()
val intent = Intent()
intent.action = Intent.ACTION_SEND
intent.putExtra(Intent.EXTRA_TEXT, url)
intent.type = "text/plain"
startActivity(Intent.createChooser(intent, "Share Url To:"))
}
.show()
*/
val intent = Intent()
intent.action = Intent.ACTION_SEND
intent.putExtra(
Intent.EXTRA_TEXT,
"https://piped.kavin.rocks/watch?v=$videoId"
)
intent.type = "text/plain"
startActivity(Intent.createChooser(intent, "Share Url To:"))
showShareDialog(requireContext(), videoId)
}
else -> {
dialog.dismiss()

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.fragments
import android.annotation.SuppressLint
import android.content.Context
@ -15,8 +15,11 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.github.libretube.R
import com.github.libretube.adapters.ChannelAdapter
import com.github.libretube.formatShort
import com.github.libretube.obj.Subscribe
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.button.MaterialButton
import com.squareup.picasso.Picasso
import java.io.IOException

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.fragments
import android.Manifest
import android.annotation.SuppressLint
@ -44,14 +44,24 @@ import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.IS_DOWNLOAD_RUNNING
import com.github.libretube.MainActivity
import com.github.libretube.R
import com.github.libretube.SponsorBlockSettings
import com.github.libretube.adapters.CommentsAdapter
import com.github.libretube.adapters.TrendingAdapter
import com.github.libretube.dialogs.AddtoPlaylistDialog
import com.github.libretube.dialogs.DownloadDialog
import com.github.libretube.dialogs.showShareDialog
import com.github.libretube.formatShort
import com.github.libretube.hideKeyboard
import com.github.libretube.obj.PipedStream
import com.github.libretube.obj.Segment
import com.github.libretube.obj.Segments
import com.github.libretube.obj.Streams
import com.github.libretube.obj.Subscribe
import com.github.libretube.util.CronetHelper
import com.github.libretube.util.RetrofitInstance
import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem
@ -76,7 +86,6 @@ import com.google.android.material.button.MaterialButton
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.squareup.picasso.Picasso
import java.io.IOException
import java.net.URLEncoder
import java.util.concurrent.Executors
import kotlin.math.abs
import org.chromium.net.CronetEngine
@ -423,6 +432,16 @@ class PlayerFragment : Fragment() {
private fun initializePlayerView(view: View, response: Streams) {
isLoading = false
runOnUiThread {
createExoPlayer(view)
exoPlayerView.setShowSubtitleButton(true)
exoPlayerView.setShowNextButton(false)
exoPlayerView.setShowPreviousButton(false)
exoPlayerView.setRepeatToggleModes(RepeatModeUtil.REPEAT_TOGGLE_MODE_ALL)
// exoPlayerView.controllerShowTimeoutMs = 1500
exoPlayerView.controllerHideOnTouch = true
exoPlayerView.player = exoPlayer
var videosNameArray: Array<CharSequence> = arrayOf()
videosNameArray += "HLS"
for (vid in response.videoStreams!!) {
@ -438,16 +457,6 @@ class PlayerFragment : Fragment() {
.build()
)
}
createExoPlayer(view)
exoPlayerView.setShowSubtitleButton(true)
exoPlayerView.setShowNextButton(false)
exoPlayerView.setShowPreviousButton(false)
exoPlayerView.setRepeatToggleModes(RepeatModeUtil.REPEAT_TOGGLE_MODE_ALL)
// exoPlayerView.controllerShowTimeoutMs = 1500
exoPlayerView.controllerHideOnTouch = true
exoPlayerView.player = exoPlayer
val sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(requireContext())
val defres = sharedPreferences.getString("default_res", "")!!
@ -713,37 +722,7 @@ class PlayerFragment : Fragment() {
}
// share button
view.findViewById<LinearLayout>(R.id.relPlayer_share).setOnClickListener {
val sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(requireContext())
val instancePref = sharedPreferences.getString(
"instance",
"https://pipedapi.kavin.rocks"
)!!
val instance = "&instance=${URLEncoder.encode(instancePref, "UTF-8")}"
val shareOptions = arrayOf(
getString(R.string.piped),
getString(R.string.instance),
getString(R.string.youtube)
)
MaterialAlertDialogBuilder(requireContext())
.setTitle(getString(R.string.share))
.setItems(
shareOptions,
DialogInterface.OnClickListener { _, id ->
val url = when (id) {
0 -> "https://piped.kavin.rocks/watch?v=$videoId"
1 -> "https://piped.kavin.rocks/watch?v=$videoId$instance"
2 -> "https://youtu.be/$videoId"
else -> "https://piped.kavin.rocks/watch?v=$videoId"
}
val intent = Intent()
intent.action = Intent.ACTION_SEND
intent.putExtra(Intent.EXTRA_TEXT, url)
intent.type = "text/plain"
startActivity(Intent.createChooser(intent, "Share Url To:"))
}
)
.show()
showShareDialog(requireContext(), videoId!!)
}
// check if livestream
if (response.duration!! > 0) {

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.fragments
import android.content.Context
import android.os.Bundle
@ -12,7 +12,9 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R
import com.github.libretube.adapters.PlaylistAdapter
import com.github.libretube.util.RetrofitInstance
import java.io.IOException
import retrofit2.HttpException

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.fragments
import android.content.Context
import android.content.DialogInterface
@ -24,8 +24,11 @@ import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R
import com.github.libretube.adapters.SearchAdapter
import com.github.libretube.adapters.SearchHistoryAdapter
import com.github.libretube.hideKeyboard
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.IOException
import kotlinx.coroutines.GlobalScope

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.util
import android.annotation.SuppressLint
import android.content.Context

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.util
import android.content.Context
import android.util.AttributeSet

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.util
import com.github.libretube.obj.Channel
import com.github.libretube.obj.CommentsPage

View File

@ -1,6 +1,6 @@
package com.github.libretube
import java.util.LinkedList
import java.util.*
import kotlin.reflect.KProperty
class ResettableLazyManager {

View File

@ -1,5 +1,7 @@
package com.github.libretube
package com.github.libretube.util
import com.github.libretube.resettableLazy
import com.github.libretube.resettableManager
import retrofit2.Retrofit
import retrofit2.converter.jackson.JacksonConverterFactory

View File

@ -1,4 +1,4 @@
package com.github.libretube
package com.github.libretube.util
import android.content.Context
import android.graphics.Rect
@ -7,6 +7,7 @@ import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import androidx.constraintlayout.motion.widget.MotionLayout
import com.github.libretube.R
/**
*

View File

@ -8,7 +8,7 @@
android:background="@color/black"
>
<com.github.libretube.CustomExoPlayerView
<com.github.libretube.util.CustomExoPlayerView
android:id="@+id/fullscreen_player"
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<com.github.libretube.CustomSwipeToRefresh xmlns:android="http://schemas.android.com/apk/res/android"
<com.github.libretube.util.CustomSwipeToRefresh xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/channel_refresh"
android:layout_width="match_parent"
@ -10,7 +10,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ChannelFragment"
tools:context=".fragments.ChannelFragment"
android:visibility="invisible">
<LinearLayout
@ -115,4 +115,4 @@
</RelativeLayout>
</LinearLayout>
</ScrollView>
</com.github.libretube.CustomSwipeToRefresh>
</com.github.libretube.util.CustomSwipeToRefresh>

View File

@ -33,7 +33,7 @@
android:textStyle="bold" />
</RelativeLayout>
<com.github.libretube.CustomSwipeToRefresh
<com.github.libretube.util.CustomSwipeToRefresh
android:id="@+id/playlist_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -62,7 +62,7 @@
</RelativeLayout>
</LinearLayout>
</ScrollView>
</com.github.libretube.CustomSwipeToRefresh>
</com.github.libretube.util.CustomSwipeToRefresh>
<FrameLayout
android:layout_width="match_parent"

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<com.github.libretube.SingleViewTouchableMotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
<com.github.libretube.util.SingleViewTouchableMotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/playerMotionLayout"
@ -329,7 +329,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.github.libretube.CustomExoPlayerView
<com.github.libretube.util.CustomExoPlayerView
android:id="@+id/player"
android:layout_width="match_parent"
android:layout_height="0dp"
@ -379,4 +379,4 @@
app:layout_constraintStart_toEndOf="@+id/player"
app:layout_constraintTop_toTopOf="@+id/play_imageView" />
</com.github.libretube.SingleViewTouchableMotionLayout>
</com.github.libretube.util.SingleViewTouchableMotionLayout>

View File

@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".PlaylistFragment"
tools:context=".fragments.PlaylistFragment"
android:id="@+id/playlist_scrollview">
<LinearLayout
android:orientation="vertical"

View File

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SearchFragment">
tools:context=".fragments.SearchFragment">
<LinearLayout
android:id="@+id/searchbar_holder"

View File

@ -39,7 +39,7 @@
android:textStyle="bold" />
</RelativeLayout>
<com.github.libretube.CustomSwipeToRefresh
<com.github.libretube.util.CustomSwipeToRefresh
android:id="@+id/sub_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -103,5 +103,5 @@
</RelativeLayout>
</LinearLayout>
</ScrollView>
</com.github.libretube.CustomSwipeToRefresh>
</com.github.libretube.util.CustomSwipeToRefresh>
</RelativeLayout>

View File

@ -23,12 +23,12 @@
</fragment>
<fragment
android:id="@+id/searchFragment"
android:name="com.github.libretube.SearchFragment"
android:name="com.github.libretube.fragments.SearchFragment"
android:label="fragment_search"
tools:layout="@layout/fragment_search" />
<fragment
android:id="@+id/channel"
android:name="com.github.libretube.ChannelFragment"
android:name="com.github.libretube.fragments.ChannelFragment"
android:label="channel"
tools:layout="@layout/fragment_channel" >
<argument
@ -37,7 +37,7 @@
</fragment>
<fragment
android:id="@+id/playlistFragment"
android:name="com.github.libretube.PlaylistFragment"
android:name="com.github.libretube.fragments.PlaylistFragment"
android:label="fragment_playlist"
tools:layout="@layout/fragment_playlist" >
<argument