diff --git a/app/build.gradle b/app/build.gradle
index 45d23d2bd..b12ee55d6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -72,7 +72,6 @@ dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-jackson:2.9.0'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.13.2'
- implementation 'com.squareup.retrofit2:converter-scalars:2.1.0'
implementation 'com.arthenica:ffmpeg-kit-min:4.5.1.LTS'
diff --git a/app/src/main/java/com/github/libretube/PlayerFragment.kt b/app/src/main/java/com/github/libretube/PlayerFragment.kt
index e196000db..63547cca2 100644
--- a/app/src/main/java/com/github/libretube/PlayerFragment.kt
+++ b/app/src/main/java/com/github/libretube/PlayerFragment.kt
@@ -28,6 +28,7 @@ import androidx.core.net.toUri
import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
+import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.adapters.TrendingAdapter
@@ -49,6 +50,7 @@ import com.google.android.material.button.MaterialButton
import com.squareup.picasso.Picasso
import retrofit2.HttpException
import java.io.IOException
+import java.net.URLEncoder
import kotlin.math.abs
@@ -250,10 +252,7 @@ class PlayerFragment : Fragment() {
.setMimeType(response.subtitles!![0].mimeType!!) // The correct MIME type (required).
.setLanguage(response.subtitles!![0].code) // The subtitle language (optional).
.build())}
- val mediaItem: MediaItem = MediaItem.Builder()
- .setUri(response.hls)
- .setSubtitleConfigurations(subtitle)
- .build()
+
exoPlayer = ExoPlayer.Builder(view.context)
.setSeekBackIncrementMs(5000)
.setSeekForwardIncrementMs(5000)
@@ -264,7 +263,31 @@ class PlayerFragment : Fragment() {
//exoPlayerView.controllerShowTimeoutMs = 1500
exoPlayerView.controllerHideOnTouch = true
exoPlayerView.player = exoPlayer
- exoPlayer.setMediaItem(mediaItem)
+ if (response.hls != null) {
+ val mediaItem: MediaItem = MediaItem.Builder()
+ .setUri(response.hls)
+ .setSubtitleConfigurations(subtitle)
+ .build()
+ exoPlayer.setMediaItem(mediaItem)
+ }else{
+ val dataSourceFactory: DataSource.Factory =
+ DefaultHttpDataSource.Factory()
+ val videoItem: MediaItem = MediaItem.Builder()
+ .setUri(response.videoStreams[0].url)
+ .setSubtitleConfigurations(subtitle)
+ .build()
+ val videoSource: MediaSource = DefaultMediaSourceFactory(dataSourceFactory)
+ .createMediaSource(videoItem)
+ var audioSource: MediaSource = DefaultMediaSourceFactory(dataSourceFactory)
+ .createMediaSource(fromUri(response.audioStreams!![0].url!!))
+ if (response.videoStreams[0].quality=="720p" || response.videoStreams[0].quality=="1080p" || response.videoStreams[0].quality=="480p" ){
+ audioSource = ProgressiveMediaSource.Factory(dataSourceFactory)
+ .createMediaSource(fromUri(response.audioStreams!![getMostBitRate(response.audioStreams)].url!!))
+ }
+ val mergeSource: MediaSource = MergingMediaSource(videoSource,audioSource)
+ exoPlayer.setMediaSource(mergeSource)
+ }
+
///exoPlayer.getMediaItemAt(5)
exoPlayer.prepare()
exoPlayer.play()
@@ -367,9 +390,14 @@ class PlayerFragment : Fragment() {
}
//share button
view.findViewById(R.id.relPlayer_share).setOnClickListener {
+ val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
val intent= Intent()
intent.action=Intent.ACTION_SEND
- intent.putExtra(Intent.EXTRA_TEXT, "https://piped.tokhmi.xyz/$videoId")
+ var url = "https://piped.kavin.rocks/watch?v=$videoId"
+ val instance = sharedPreferences.getString("instance", "https://pipedapi.kavin.rocks")!!
+ if (instance != "https://pipedapi.kavin.rocks")
+ url += "&instance=${URLEncoder.encode(instance, "UTF-8")}"
+ intent.putExtra(Intent.EXTRA_TEXT, url)
intent.type="text/plain"
startActivity(Intent.createChooser(intent,"Share Url To:"))
}
diff --git a/app/src/main/java/com/github/libretube/Settings.kt b/app/src/main/java/com/github/libretube/Settings.kt
index 5638a1d85..952bd09c3 100644
--- a/app/src/main/java/com/github/libretube/Settings.kt
+++ b/app/src/main/java/com/github/libretube/Settings.kt
@@ -25,6 +25,7 @@ import com.blankj.utilcode.util.UriUtils
import com.github.libretube.obj.Subscribe
import retrofit2.HttpException
import java.io.ByteArrayOutputStream
+import retrofit2.HttpException
import java.io.IOException
import java.util.zip.ZipFile
diff --git a/app/src/main/java/com/github/libretube/Subscriptions.kt b/app/src/main/java/com/github/libretube/Subscriptions.kt
index 9262fc45e..c01b5b85f 100644
--- a/app/src/main/java/com/github/libretube/Subscriptions.kt
+++ b/app/src/main/java/com/github/libretube/Subscriptions.kt
@@ -14,6 +14,7 @@ import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
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.adapters.TrendingAdapter
@@ -25,6 +26,7 @@ class Subscriptions : Fragment() {
lateinit var token: String
var isLoaded = false
private var subscriptionAdapter: SubscriptionAdapter? =null
+ private var refreshLayout: SwipeRefreshLayout? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
@@ -44,8 +46,11 @@ class Subscriptions : Fragment() {
val sharedPref = context?.getSharedPreferences("token", Context.MODE_PRIVATE)
token = sharedPref?.getString("token","")!!
Log.e(TAG,token)
+ refreshLayout = view.findViewById(R.id.sub_refresh)
if(token!=""){
view.findViewById(R.id.loginOrRegister).visibility=View.GONE
+ refreshLayout?.isEnabled = true
+
var progressBar = view.findViewById(R.id.sub_progress)
progressBar.visibility=View.VISIBLE
@@ -57,6 +62,11 @@ class Subscriptions : Fragment() {
feedRecView.layoutManager = GridLayoutManager(view.context, resources.getInteger(R.integer.grid_items))
fetchFeed(feedRecView, progressBar)
+ refreshLayout?.setOnRefreshListener {
+ fetchChannels(channelRecView)
+ fetchFeed(feedRecView, progressBar)
+ }
+
val scrollView = view.findViewById(R.id.scrollview_sub)
scrollView.viewTreeObserver
.addOnScrollChangedListener {
@@ -64,11 +74,15 @@ class Subscriptions : Fragment() {
== (scrollView.height + scrollView.scrollY)) {
//scroll view is at bottom
if(isLoaded){
+ refreshLayout?.isRefreshing = true
subscriptionAdapter?.updateItems()
+ refreshLayout?.isRefreshing = false
}
}
}
+ } else {
+ refreshLayout?.isEnabled = false
}
}
@@ -84,6 +98,8 @@ class Subscriptions : Fragment() {
} catch (e: HttpException) {
Log.e(TAG, "HttpException, unexpected response")
return@launchWhenCreated
+ } finally {
+ refreshLayout?.isRefreshing = false
}
if (response.isNotEmpty()){
subscriptionAdapter = SubscriptionAdapter(response)
@@ -109,6 +125,8 @@ class Subscriptions : Fragment() {
} catch (e: HttpException) {
Log.e(TAG, "HttpException, unexpected response")
return@launchWhenCreated
+ } finally {
+ refreshLayout?.isRefreshing = false
}
if (response.isNotEmpty()){
channelRecView?.adapter=SubscriptionChannelAdapter(response.toMutableList())
@@ -131,4 +149,4 @@ class Subscriptions : Fragment() {
super.onDestroy()
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/res/layout/fragment_subscriptions.xml b/app/src/main/res/layout/fragment_subscriptions.xml
index 401303438..a27f4ddb0 100644
--- a/app/src/main/res/layout/fragment_subscriptions.xml
+++ b/app/src/main/res/layout/fragment_subscriptions.xml
@@ -4,22 +4,21 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Subscriptions">
+
+ android:layout_centerVertical="true"
+ android:visibility="gone" />
+ android:layout_centerVertical="true">
-
-
-
+
+
+ android:orientation="vertical">
-
-
-
+ android:descendantFocusability="blocksDescendants">
-
+
+
+
-
-
-
-
\ No newline at end of file
+ android:layout_height="wrap_content"
+ android:descendantFocusability="blocksDescendants">
+
+
+
+
+
+
+