diff --git a/README.md b/README.md
index 1f9427f71..b5c6894f0 100644
--- a/README.md
+++ b/README.md
@@ -62,3 +62,4 @@ WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OP
## Mirrors (read-only)
GitLab
+NotABug
diff --git a/app/src/main/java/com/github/libretube/DownloadService.kt b/app/src/main/java/com/github/libretube/DownloadService.kt
index e13b766b5..997b383c0 100644
--- a/app/src/main/java/com/github/libretube/DownloadService.kt
+++ b/app/src/main/java/com/github/libretube/DownloadService.kt
@@ -69,7 +69,6 @@ class DownloadService : Service() {
}
private fun downloadManager() {
-
// create folder for temporary files
tempDir = File(
applicationContext.getExternalFilesDir(DIRECTORY_DOWNLOADS),
@@ -255,10 +254,11 @@ class DownloadService : Service() {
if (returnCode.toString() != "0") downloadFailedNotification()
else downloadSucceededNotification()
onDestroy()
- }, {
- // CALLED WHEN SESSION PRINTS LOGS
- Log.e(TAG, it.message.toString())
- }
+ },
+ {
+ // CALLED WHEN SESSION PRINTS LOGS
+ Log.e(TAG, it.message.toString())
+ }
) {
// CALLED WHEN SESSION GENERATES STATISTICS
Log.e(TAG + "stat", it.time.toString())
diff --git a/app/src/main/java/com/github/libretube/adapters/CommentsAdapter.kt b/app/src/main/java/com/github/libretube/adapters/CommentsAdapter.kt
index efce52157..3ce71ac4a 100644
--- a/app/src/main/java/com/github/libretube/adapters/CommentsAdapter.kt
+++ b/app/src/main/java/com/github/libretube/adapters/CommentsAdapter.kt
@@ -19,11 +19,11 @@ import com.github.libretube.obj.CommentsPage
import com.github.libretube.util.RetrofitInstance
import com.github.libretube.util.formatShort
import com.squareup.picasso.Picasso
-import java.io.IOException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import retrofit2.HttpException
+import java.io.IOException
class CommentsAdapter(
private val videoId: String,
diff --git a/app/src/main/java/com/github/libretube/adapters/PlaylistAdapter.kt b/app/src/main/java/com/github/libretube/adapters/PlaylistAdapter.kt
index bfc1e481a..28e9065f0 100644
--- a/app/src/main/java/com/github/libretube/adapters/PlaylistAdapter.kt
+++ b/app/src/main/java/com/github/libretube/adapters/PlaylistAdapter.kt
@@ -20,11 +20,11 @@ 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.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import retrofit2.HttpException
+import java.io.IOException
class PlaylistAdapter(
private val videoFeed: MutableList,
diff --git a/app/src/main/java/com/github/libretube/adapters/PlaylistsAdapter.kt b/app/src/main/java/com/github/libretube/adapters/PlaylistsAdapter.kt
index 1d3c8e5a2..63fd37428 100644
--- a/app/src/main/java/com/github/libretube/adapters/PlaylistsAdapter.kt
+++ b/app/src/main/java/com/github/libretube/adapters/PlaylistsAdapter.kt
@@ -17,10 +17,10 @@ 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
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import retrofit2.HttpException
+import java.io.IOException
class PlaylistsAdapter(
private val playlists: MutableList,
diff --git a/app/src/main/java/com/github/libretube/adapters/SearchAdapter.kt b/app/src/main/java/com/github/libretube/adapters/SearchAdapter.kt
index 33b5c705f..d7a8d465d 100644
--- a/app/src/main/java/com/github/libretube/adapters/SearchAdapter.kt
+++ b/app/src/main/java/com/github/libretube/adapters/SearchAdapter.kt
@@ -85,10 +85,11 @@ class SearchViewHolder(
val viewsString = if (item.views?.toInt() != -1) item.views.formatShort() else ""
val uploadDate = if (item.uploadedDate != null) item.uploadedDate else ""
views.text =
- if (viewsString != "" && uploadDate != "")
+ if (viewsString != "" && uploadDate != "") {
"$viewsString • $uploadDate"
- else
+ } else {
viewsString + uploadDate
+ }
val channelName = v.findViewById(R.id.search_channel_name)
channelName.text = item.uploaderName
v.setOnClickListener {
@@ -145,9 +146,10 @@ class SearchViewHolder(
val playlistChannelName = v.findViewById(R.id.search_name)
playlistChannelName.text = item.uploaderName
val playlistVideosNumber = v.findViewById(R.id.search_playlist_videos)
- if (item.videos?.toInt() != -1)
+ if (item.videos?.toInt() != -1) {
playlistVideosNumber.text =
v.context.getString(R.string.videoCount, item.videos.toString())
+ }
v.setOnClickListener {
// playlist clicked
val activity = v.context as MainActivity
diff --git a/app/src/main/java/com/github/libretube/adapters/SubscriptionAdapter.kt b/app/src/main/java/com/github/libretube/adapters/SubscriptionAdapter.kt
index 0db923b83..a05024ce0 100644
--- a/app/src/main/java/com/github/libretube/adapters/SubscriptionAdapter.kt
+++ b/app/src/main/java/com/github/libretube/adapters/SubscriptionAdapter.kt
@@ -34,8 +34,9 @@ class SubscriptionAdapter(
fun updateItems() {
// limitedVideoFeed.add("")
i += 10
- if (i > videoFeed.size)
+ if (i > videoFeed.size) {
i = videoFeed.size
+ }
notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/github/libretube/adapters/SubscriptionChannelAdapter.kt b/app/src/main/java/com/github/libretube/adapters/SubscriptionChannelAdapter.kt
index 3ae744511..dcd3b4e03 100644
--- a/app/src/main/java/com/github/libretube/adapters/SubscriptionChannelAdapter.kt
+++ b/app/src/main/java/com/github/libretube/adapters/SubscriptionChannelAdapter.kt
@@ -15,11 +15,11 @@ import com.github.libretube.obj.Subscribe
import com.github.libretube.obj.Subscription
import com.github.libretube.util.RetrofitInstance
import com.squareup.picasso.Picasso
-import java.io.IOException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import retrofit2.HttpException
+import java.io.IOException
class SubscriptionChannelAdapter(private val subscriptions: MutableList) :
RecyclerView.Adapter() {
diff --git a/app/src/main/java/com/github/libretube/dialogs/AddtoPlaylistDialog.kt b/app/src/main/java/com/github/libretube/dialogs/AddtoPlaylistDialog.kt
index 80453c14b..126bdd7e0 100644
--- a/app/src/main/java/com/github/libretube/dialogs/AddtoPlaylistDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/AddtoPlaylistDialog.kt
@@ -19,8 +19,8 @@ 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
+import java.io.IOException
class AddtoPlaylistDialog : DialogFragment() {
private val TAG = "AddToPlaylistDialog"
diff --git a/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt b/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt
index d33cf90ee..000bf1897 100644
--- a/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt
@@ -19,8 +19,8 @@ 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
import retrofit2.HttpException
+import java.io.IOException
class CreatePlaylistDialog : DialogFragment() {
val TAG = "CreatePlaylistDialog"
diff --git a/app/src/main/java/com/github/libretube/dialogs/CustomInstanceDialog.kt b/app/src/main/java/com/github/libretube/dialogs/CustomInstanceDialog.kt
index e1f06186a..50e49356c 100644
--- a/app/src/main/java/com/github/libretube/dialogs/CustomInstanceDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/CustomInstanceDialog.kt
@@ -52,13 +52,17 @@ class CustomInstanceDialog : DialogFragment() {
} catch (e: Exception) {
// invalid URL
Toast.makeText(
- context, getString(R.string.invalid_url), Toast.LENGTH_SHORT
+ context,
+ getString(R.string.invalid_url),
+ Toast.LENGTH_SHORT
).show()
}
} else {
// at least one empty input
Toast.makeText(
- context, context?.getString(R.string.empty_instance), Toast.LENGTH_SHORT
+ context,
+ context?.getString(R.string.empty_instance),
+ Toast.LENGTH_SHORT
).show()
}
}
diff --git a/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt b/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt
index ae27c5ca2..8d1cc33f8 100644
--- a/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt
@@ -17,8 +17,8 @@ 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
+import java.io.IOException
class LoginDialog : DialogFragment() {
private val TAG = "LoginDialog"
diff --git a/app/src/main/java/com/github/libretube/dialogs/PlaylistOptionsDialog.kt b/app/src/main/java/com/github/libretube/dialogs/PlaylistOptionsDialog.kt
index 862bf8a4f..94fd2702d 100644
--- a/app/src/main/java/com/github/libretube/dialogs/PlaylistOptionsDialog.kt
+++ b/app/src/main/java/com/github/libretube/dialogs/PlaylistOptionsDialog.kt
@@ -11,11 +11,11 @@ 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 kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import retrofit2.HttpException
+import java.io.IOException
class PlaylistOptionsDialog(
private val playlistId: String,
diff --git a/app/src/main/java/com/github/libretube/fragments/ChannelFragment.kt b/app/src/main/java/com/github/libretube/fragments/ChannelFragment.kt
index f42f95b69..f2a78c4d5 100644
--- a/app/src/main/java/com/github/libretube/fragments/ChannelFragment.kt
+++ b/app/src/main/java/com/github/libretube/fragments/ChannelFragment.kt
@@ -22,8 +22,8 @@ import com.github.libretube.util.RetrofitInstance
import com.github.libretube.util.formatShort
import com.google.android.material.button.MaterialButton
import com.squareup.picasso.Picasso
-import java.io.IOException
import retrofit2.HttpException
+import java.io.IOException
class ChannelFragment : Fragment() {
@@ -201,7 +201,10 @@ class ChannelFragment : Fragment() {
channelName.text = response.name
if (response.verified) {
channelName.setCompoundDrawablesWithIntrinsicBounds(
- 0, 0, R.drawable.ic_verified, 0
+ 0,
+ 0,
+ R.drawable.ic_verified,
+ 0
)
}
view.findViewById(R.id.channel_subs).text = resources.getString(
@@ -231,7 +234,6 @@ class ChannelFragment : Fragment() {
private fun fetchNextPage() {
fun run() {
-
lifecycleScope.launchWhenCreated {
val response = try {
RetrofitInstance.api.getChannelNextPage(channel_id!!, nextPage!!)
diff --git a/app/src/main/java/com/github/libretube/fragments/Home.kt b/app/src/main/java/com/github/libretube/fragments/Home.kt
index 5235e72c7..b78d774e3 100644
--- a/app/src/main/java/com/github/libretube/fragments/Home.kt
+++ b/app/src/main/java/com/github/libretube/fragments/Home.kt
@@ -16,8 +16,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.github.libretube.R
import com.github.libretube.adapters.TrendingAdapter
import com.github.libretube.util.RetrofitInstance
-import java.io.IOException
import retrofit2.HttpException
+import java.io.IOException
class Home : Fragment() {
@@ -34,7 +34,6 @@ class Home : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
-
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false)
}
diff --git a/app/src/main/java/com/github/libretube/fragments/Library.kt b/app/src/main/java/com/github/libretube/fragments/Library.kt
index 14946625e..812411b4c 100644
--- a/app/src/main/java/com/github/libretube/fragments/Library.kt
+++ b/app/src/main/java/com/github/libretube/fragments/Library.kt
@@ -19,8 +19,8 @@ import com.github.libretube.adapters.PlaylistsAdapter
import com.github.libretube.dialogs.CreatePlaylistDialog
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.floatingactionbutton.FloatingActionButton
-import java.io.IOException
import retrofit2.HttpException
+import java.io.IOException
class Library : Fragment() {
diff --git a/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt
index 54aa2cad5..10c035f05 100644
--- a/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt
+++ b/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt
@@ -18,6 +18,7 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.Button
import android.widget.FrameLayout
import android.widget.ImageButton
import android.widget.ImageView
@@ -84,11 +85,11 @@ import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.squareup.picasso.Picasso
+import org.chromium.net.CronetEngine
+import retrofit2.HttpException
import java.io.IOException
import java.util.concurrent.Executors
import kotlin.math.abs
-import org.chromium.net.CronetEngine
-import retrofit2.HttpException
var isFullScreen = false
@@ -118,6 +119,7 @@ class PlayerFragment : Fragment() {
private lateinit var segmentData: Segments
private var relatedStreams: List? = arrayListOf()
private var relatedStreamsEnabled = true
+ private var isPlayerLocked: Boolean = false
private lateinit var relDownloadVideo: LinearLayout
@@ -182,6 +184,7 @@ class PlayerFragment : Fragment() {
val mainMotionLayout =
mainActivity.findViewById(R.id.mainMotionLayout)
mainMotionLayout.progress = abs(progress)
+ exoPlayerView.hideController()
eId = endId
sId = startId
}
@@ -192,13 +195,11 @@ class PlayerFragment : Fragment() {
val mainMotionLayout =
mainActivity.findViewById(R.id.mainMotionLayout)
if (currentId == eId) {
- exoPlayerView.hideController()
exoPlayerView.useController = false
- mainMotionLayout.progress = 1.toFloat()
+ mainMotionLayout.progress = 1F
} else if (currentId == sId) {
- exoPlayerView.showController()
exoPlayerView.useController = true
- mainMotionLayout.progress = 0.toFloat()
+ mainMotionLayout.progress = 0F
}
}
@@ -259,8 +260,9 @@ class PlayerFragment : Fragment() {
}
// FullScreen button trigger
- view.findViewById(R.id.fullscreen).setOnClickListener {
- // remember to hide everything when new thing added
+ val fullScreenButton = view.findViewById(R.id.fullscreen)
+ fullScreenButton.setOnClickListener {
+ exoPlayerView.hideController()
if (!isFullScreen) {
with(motionLayout) {
getConstraintSet(R.id.start).constrainHeight(R.id.player, -1)
@@ -268,6 +270,7 @@ class PlayerFragment : Fragment() {
}
view.findViewById(R.id.main_container).isClickable = true
view.findViewById(R.id.linLayout).visibility = View.GONE
+ fullScreenButton.setImageResource(R.drawable.ic_fullscreen_exit)
val mainActivity = activity as MainActivity
mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE
isFullScreen = true
@@ -278,6 +281,7 @@ class PlayerFragment : Fragment() {
}
view.findViewById(R.id.main_container).isClickable = false
view.findViewById(R.id.linLayout).visibility = View.VISIBLE
+ fullScreenButton.setImageResource(R.drawable.ic_fullscreen)
val mainActivity = activity as MainActivity
mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
isFullScreen = false
@@ -295,6 +299,23 @@ class PlayerFragment : Fragment() {
}
}
+ // lock and unlock the player
+ val lockPlayerButton = view.findViewById(R.id.lock_player)
+ lockPlayerButton.setOnClickListener {
+ // change the locked/unlocked icon
+ if (!isPlayerLocked) {
+ lockPlayerButton.setImageResource(R.drawable.ic_locked)
+ } else {
+ lockPlayerButton.setImageResource(R.drawable.ic_unlocked)
+ }
+
+ // show/hide all the controls
+ lockPlayer(isPlayerLocked)
+
+ // change locked status
+ isPlayerLocked = !isPlayerLocked
+ }
+
val scrollView = view.findViewById(R.id.player_scrollView)
scrollView.viewTreeObserver
.addOnScrollChangedListener {
@@ -362,8 +383,9 @@ class PlayerFragment : Fragment() {
exoPlayerView.postDelayed(this::checkForSegments, 100)
- if (!::segmentData.isInitialized || segmentData.segments.isEmpty())
+ if (!::segmentData.isInitialized || segmentData.segments.isEmpty()) {
return
+ }
segmentData.segments.forEach { segment: Segment ->
val segmentStart = (segment.segment!![0] * 1000.0f).toLong()
@@ -458,7 +480,6 @@ class PlayerFragment : Fragment() {
}
if (categories.size > 0) {
segmentData = try {
-
RetrofitInstance.api.getSegments(
videoId!!,
"[\"" + TextUtils.join("\",\"", categories) + "\"]"
@@ -523,7 +544,6 @@ class PlayerFragment : Fragment() {
playWhenReady: Boolean,
playbackState: Int
) {
-
exoPlayerView.keepScreenOn = !(
playbackState == Player.STATE_IDLE ||
playbackState == Player.STATE_ENDED ||
@@ -627,7 +647,6 @@ class PlayerFragment : Fragment() {
}
view.findViewById(R.id.player_channel).setOnClickListener {
-
val activity = view.context as MainActivity
val bundle = bundleOf("channel_id" to response.uploaderUrl)
activity.navController.navigate(R.id.channel, bundle)
@@ -717,7 +736,6 @@ class PlayerFragment : Fragment() {
}
for (vid in response.videoStreams!!) {
- Log.e(TAG, vid.toString())
// append quality to list if it has the preferred format (e.g. MPEG)
if (vid.format.equals(videoFormatPreference)) { // preferred format
videosNameArray += vid.quality!!
@@ -863,7 +881,6 @@ class PlayerFragment : Fragment() {
}
private fun initializePlayerNotification(c: Context) {
-
mediaSession = MediaSessionCompat(c, this.javaClass.name)
mediaSession.apply {
isActive = true
@@ -887,6 +904,15 @@ class PlayerFragment : Fragment() {
}
}
+ private fun lockPlayer(isLocked: Boolean) {
+ val visibility = if (isLocked) View.VISIBLE else View.GONE
+ exoPlayerView.findViewById(R.id.controls_top_right).visibility = visibility
+ exoPlayerView.findViewById(R.id.exo_play_pause).visibility = visibility
+ exoPlayerView.findViewById
-
-
-
-
@@ -158,15 +161,8 @@
-
-
-
-
+ style="@style/ExoStyledControls.Button.Bottom.FullScreen"
+ android:src="@drawable/ic_fullscreen"/>
@@ -191,30 +187,30 @@
-
-
-
-
-
+ android:layout_height="15dp">
-
+
+
+
+
+
-
-