diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f24097dde..839c395a0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,7 +34,8 @@ android:supportsPictureInPicture="true" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" android:hardwareAccelerated="true" - android:screenOrientation="userPortrait"> + android:screenOrientation="userPortrait" + android:launchMode="singleTop"> diff --git a/app/src/main/java/com/github/libretube/BackgroundMode.kt b/app/src/main/java/com/github/libretube/BackgroundMode.kt index ebd851e01..79ff8a319 100644 --- a/app/src/main/java/com/github/libretube/BackgroundMode.kt +++ b/app/src/main/java/com/github/libretube/BackgroundMode.kt @@ -77,7 +77,8 @@ class BackgroundMode { DescriptionAdapter( response?.title!!, response?.uploader!!, - response?.thumbnailUrl!! + response?.thumbnailUrl!!, + c ) ) .build() diff --git a/app/src/main/java/com/github/libretube/Constants.kt b/app/src/main/java/com/github/libretube/Constants.kt index 521bc3a7c..52a5d0ef3 100644 --- a/app/src/main/java/com/github/libretube/Constants.kt +++ b/app/src/main/java/com/github/libretube/Constants.kt @@ -5,3 +5,4 @@ const val WEBSITE_URL = "https://libre-tube.github.io/" const val AUTHORS_URL = "https://github.com/libre-tube/LibreTube/graphs/contributors" const val DONATE_URL = "https://libre-tube.github.io/#donate" const val CONTRIBUTING_URL = "https://github.com/libre-tube/LibreTube#donate" +const val PIPED_GITHUB_URL = "https://github.com/TeamPiped/Piped" diff --git a/app/src/main/java/com/github/libretube/MainActivity.kt b/app/src/main/java/com/github/libretube/MainActivity.kt index 2799f6b25..e6e7beee0 100644 --- a/app/src/main/java/com/github/libretube/MainActivity.kt +++ b/app/src/main/java/com/github/libretube/MainActivity.kt @@ -58,9 +58,9 @@ class MainActivity : AppCompatActivity() { RetrofitInstance.url = sharedPreferences.getString("selectInstance", "https://pipedapi.kavin.rocks/")!! SponsorBlockSettings.sponsorBlockEnabled = - sharedPreferences.getBoolean("sb_enabled_key", false) + sharedPreferences.getBoolean("sb_enabled_key", true) SponsorBlockSettings.sponsorNotificationsEnabled = - sharedPreferences.getBoolean("sb_notifications_key", false) + sharedPreferences.getBoolean("sb_notifications_key", true) SponsorBlockSettings.introEnabled = sharedPreferences.getBoolean("intro_category_key", false) SponsorBlockSettings.selfPromoEnabled = @@ -68,7 +68,7 @@ class MainActivity : AppCompatActivity() { SponsorBlockSettings.interactionEnabled = sharedPreferences.getBoolean("interaction_category_key", false) SponsorBlockSettings.sponsorsEnabled = - sharedPreferences.getBoolean("sponsors_category_key", false) + sharedPreferences.getBoolean("sponsors_category_key", true) SponsorBlockSettings.outroEnabled = sharedPreferences.getBoolean("outro_category_key", false) SponsorBlockSettings.fillerEnabled = 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 55b74e3b3..65891c22e 100644 --- a/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt @@ -27,7 +27,6 @@ import android.widget.TextView import android.widget.Toast import androidx.constraintlayout.motion.widget.MotionLayout import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.content.ContentProviderCompat.requireContext import androidx.core.net.toUri import androidx.core.os.bundleOf import androidx.core.view.isVisible @@ -87,8 +86,6 @@ import com.squareup.picasso.Picasso import java.io.IOException import java.util.concurrent.Executors import kotlin.math.abs -import kotlinx.coroutines.NonCancellable.isActive -import org.chromium.base.ThreadUtils.runOnUiThread import org.chromium.net.CronetEngine import retrofit2.HttpException @@ -721,11 +718,11 @@ class PlayerFragment : Fragment() { } // create a list of subtitles val subtitle = mutableListOf() - if (response.subtitles!!.isNotEmpty()) { + response.subtitles!!.forEach { subtitle.add( - SubtitleConfiguration.Builder(response.subtitles[0].url!!.toUri()) - .setMimeType(response.subtitles[0].mimeType!!) // The correct MIME type (required). - .setLanguage(response.subtitles[0].code) // The subtitle language (optional). + SubtitleConfiguration.Builder(it.url!!.toUri()) + .setMimeType(it.mimeType!!) // The correct MIME type (required). + .setLanguage(it.code) // The subtitle language (optional). .build() ) } @@ -867,7 +864,7 @@ class PlayerFragment : Fragment() { playerNotification = PlayerNotificationManager .Builder(c, 1, "background_mode") .setMediaDescriptionAdapter( - DescriptionAdapter(title, uploader, thumbnailUrl) + DescriptionAdapter(title, uploader, thumbnailUrl, requireContext()) ) .build() diff --git a/app/src/main/java/com/github/libretube/preferences/AboutFragment.kt b/app/src/main/java/com/github/libretube/preferences/AboutFragment.kt index e04676f48..eb9f25da5 100644 --- a/app/src/main/java/com/github/libretube/preferences/AboutFragment.kt +++ b/app/src/main/java/com/github/libretube/preferences/AboutFragment.kt @@ -12,9 +12,9 @@ import android.widget.LinearLayout import android.widget.TextView import androidx.fragment.app.Fragment import com.github.libretube.AUTHORS_URL -import com.github.libretube.BuildConfig import com.github.libretube.CONTRIBUTING_URL import com.github.libretube.DONATE_URL +import com.github.libretube.PIPED_GITHUB_URL import com.github.libretube.R import com.github.libretube.WEBSITE_URL import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -33,9 +33,6 @@ class AboutFragment : Fragment() { val topBarText = activity?.findViewById(R.id.topBar_textView) topBarText?.text = getString(R.string.about) - val appVersion = view.findViewById(R.id.app_version) - appVersion.text = BuildConfig.VERSION_NAME - val website = view.findViewById(R.id.website) website.setOnClickListener { openLinkFromHref(WEBSITE_URL) @@ -44,6 +41,10 @@ class AboutFragment : Fragment() { authors.setOnClickListener { openLinkFromHref(AUTHORS_URL) } + val piped = view.findViewById(R.id.piped) + piped.setOnClickListener { + openLinkFromHref(PIPED_GITHUB_URL) + } val donate = view.findViewById(R.id.donate) donate.setOnClickListener { openLinkFromHref(DONATE_URL) diff --git a/app/src/main/java/com/github/libretube/util/DescriptionAdapter.kt b/app/src/main/java/com/github/libretube/util/DescriptionAdapter.kt index 25ed99fbb..ad8feb7ae 100644 --- a/app/src/main/java/com/github/libretube/util/DescriptionAdapter.kt +++ b/app/src/main/java/com/github/libretube/util/DescriptionAdapter.kt @@ -1,8 +1,11 @@ package com.github.libretube.util import android.app.PendingIntent +import android.content.Context +import android.content.Intent import android.graphics.Bitmap import android.graphics.BitmapFactory +import com.github.libretube.MainActivity import com.google.android.exoplayer2.Player import com.google.android.exoplayer2.ui.PlayerNotificationManager import java.net.URL @@ -14,32 +17,58 @@ import java.net.URL class DescriptionAdapter( private val title: String, private val channelName: String, - private val thumbnailUrl: String + private val thumbnailUrl: String, + private val context: Context ) : PlayerNotificationManager.MediaDescriptionAdapter { + /** + * sets the title of the notification + */ override fun getCurrentContentTitle(player: Player): CharSequence { // return controller.metadata.description.title.toString() return title } + /** + * overrides the action when clicking the notification + */ override fun createCurrentContentIntent(player: Player): PendingIntent? { // return controller.sessionActivity - return null + /** + * starts a new MainActivity Intent when the player notification is clicked + * it doesn't start a completely new MainActivity because the MainActivity's launchMode + * is set to "singleTop" in the AndroidManifest (important!!!) + * that's the only way to launch back into the previous activity (e.g. the player view + */ + val intent = Intent(context, MainActivity::class.java) + return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) } + /** + * the description of the notification (below the title) + */ override fun getCurrentContentText(player: Player): CharSequence? { // return controller.metadata.description.subtitle.toString() return channelName } + /** + * return the icon/thumbnail of the video + */ override fun getCurrentLargeIcon( player: Player, callback: PlayerNotificationManager.BitmapCallback ): Bitmap? { lateinit var bitmap: Bitmap + + /** + * running on a new thread to prevent a NetworkMainThreadException + */ val thread = Thread { try { - // try to parse the thumbnailUrl to a Bitmap + /** + * try to GET the thumbnail from the URL + */ val inputStream = URL(thumbnailUrl).openStream() bitmap = BitmapFactory.decodeStream(inputStream) } catch (ex: java.lang.Exception) { @@ -48,9 +77,14 @@ class DescriptionAdapter( } thread.start() thread.join() - // return bitmap if initialized + /** + * returns the scaled bitmap if it got fetched successfully + */ return try { - bitmap + val resizedBitmap = Bitmap.createScaledBitmap( + bitmap, 1080, 1080, false + ) + resizedBitmap } catch (e: Exception) { null } diff --git a/app/src/main/res/drawable/ic_history.xml b/app/src/main/res/drawable/ic_history.xml index 8523a3ace..be5660627 100644 --- a/app/src/main/res/drawable/ic_history.xml +++ b/app/src/main/res/drawable/ic_history.xml @@ -1,10 +1,11 @@ - - + android:viewportHeight="24"> + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_history_filled.xml b/app/src/main/res/drawable/ic_history_filled.xml new file mode 100644 index 000000000..b191e731a --- /dev/null +++ b/app/src/main/res/drawable/ic_history_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_login.xml b/app/src/main/res/drawable/ic_login.xml index 94b8099d1..aff40998d 100644 --- a/app/src/main/res/drawable/ic_login.xml +++ b/app/src/main/res/drawable/ic_login.xml @@ -4,11 +4,11 @@ android:viewportWidth="24" android:viewportHeight="24" android:tint="?android:attr/colorControlNormal"> - + diff --git a/app/src/main/res/drawable/ic_login_filled.xml b/app/src/main/res/drawable/ic_login_filled.xml index a680b6bb5..3446db2fd 100644 --- a/app/src/main/res/drawable/ic_login_filled.xml +++ b/app/src/main/res/drawable/ic_login_filled.xml @@ -4,7 +4,7 @@ android:viewportWidth="24" android:viewportHeight="24" android:tint="?android:attr/colorControlNormal"> - + diff --git a/app/src/main/res/layout/exo_styled_player_control_view.xml b/app/src/main/res/layout/exo_styled_player_control_view.xml index 49bcf8f62..5cb5f3347 100644 --- a/app/src/main/res/layout/exo_styled_player_control_view.xml +++ b/app/src/main/res/layout/exo_styled_player_control_view.xml @@ -225,21 +225,21 @@ android:padding="@dimen/exo_styled_controls_padding" android:clipToPadding="false"> - - - +