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"> + + + + + + +