From 771a0de3bc9bec3ec5a8e4f8b02edfa9df7b1997 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Mon, 4 Mar 2024 20:36:24 +0100 Subject: [PATCH] feat(YouTube - External downloader): Add ability to use in-app download button --- .../youtube/patches/DownloadsPatch.java | 57 +++++++++++++++++++ .../youtube/settings/Settings.java | 1 + .../videoplayer/ExternalDownloadButton.java | 39 +------------ 3 files changed, 60 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/app/revanced/integrations/youtube/patches/DownloadsPatch.java diff --git a/app/src/main/java/app/revanced/integrations/youtube/patches/DownloadsPatch.java b/app/src/main/java/app/revanced/integrations/youtube/patches/DownloadsPatch.java new file mode 100644 index 00000000..7147284d --- /dev/null +++ b/app/src/main/java/app/revanced/integrations/youtube/patches/DownloadsPatch.java @@ -0,0 +1,57 @@ +package app.revanced.integrations.youtube.patches; + +import android.content.Intent; +import android.content.pm.PackageManager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import app.revanced.integrations.shared.Logger; +import app.revanced.integrations.shared.StringRef; +import app.revanced.integrations.shared.Utils; +import app.revanced.integrations.youtube.settings.Settings; + +public final class DownloadsPatch { + public static boolean inAppDownloadButtonOnClick() { + if (!Settings.USE_IN_APP_DOWNLOAD_BUTTON.get()) + return false; + + launchExternalDownloader(); + return true; + } + + public static void launchExternalDownloader() { + Logger.printDebug(() -> "Launching external downloader"); + + final var context = Utils.getContext(); + + // Trim string to avoid any accidental whitespace. + var downloaderPackageName = Settings.EXTERNAL_DOWNLOADER_PACKAGE_NAME.get().trim(); + + boolean packageEnabled = false; + try { + packageEnabled = context.getPackageManager().getApplicationInfo(downloaderPackageName, 0).enabled; + } catch (PackageManager.NameNotFoundException error) { + Logger.printDebug(() -> "External downloader could not be found: " + error); + } + + // If the package is not installed, show the toast + if (!packageEnabled) { + Utils.showToastLong(StringRef.str("revanced_external_downloader_not_installed_warning", downloaderPackageName)); + return; + } + + // Launch intent + try { + String content = String.format("https://youtu.be/%s", VideoInformation.getVideoId()); + + Intent intent = new Intent("android.intent.action.SEND"); + intent.setType("text/plain"); + intent.setPackage(downloaderPackageName); + intent.putExtra("android.intent.extra.TEXT", content); + context.startActivity(intent); + + Logger.printDebug(() -> "Launched the intent with the content: " + content); + } catch (Exception error) { + Logger.printException(() -> "Failed to launch the intent: " + error, error); + } + } +} diff --git a/app/src/main/java/app/revanced/integrations/youtube/settings/Settings.java b/app/src/main/java/app/revanced/integrations/youtube/settings/Settings.java index 5467e366..2ed879db 100644 --- a/app/src/main/java/app/revanced/integrations/youtube/settings/Settings.java +++ b/app/src/main/java/app/revanced/integrations/youtube/settings/Settings.java @@ -18,6 +18,7 @@ public class Settings extends BaseSettings { public static final BooleanSetting EXTERNAL_DOWNLOADER = new BooleanSetting("revanced_external_downloader", FALSE); public static final StringSetting EXTERNAL_DOWNLOADER_PACKAGE_NAME = new StringSetting("revanced_external_downloader_name", "org.schabi.newpipe" /* NewPipe */, parent(EXTERNAL_DOWNLOADER)); + public static final BooleanSetting USE_IN_APP_DOWNLOAD_BUTTON = new BooleanSetting("revanced_use_in_app_download_button", TRUE); // Copy video URL public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE); diff --git a/app/src/main/java/app/revanced/integrations/youtube/videoplayer/ExternalDownloadButton.java b/app/src/main/java/app/revanced/integrations/youtube/videoplayer/ExternalDownloadButton.java index 5d1498fc..a02c2023 100644 --- a/app/src/main/java/app/revanced/integrations/youtube/videoplayer/ExternalDownloadButton.java +++ b/app/src/main/java/app/revanced/integrations/youtube/videoplayer/ExternalDownloadButton.java @@ -1,17 +1,14 @@ package app.revanced.integrations.youtube.videoplayer; -import android.content.Intent; -import android.content.pm.PackageManager; import android.view.View; import android.view.ViewGroup; import androidx.annotation.Nullable; +import app.revanced.integrations.youtube.patches.DownloadsPatch; import app.revanced.integrations.youtube.patches.VideoInformation; import app.revanced.integrations.youtube.settings.Settings; import app.revanced.integrations.shared.Logger; -import app.revanced.integrations.shared.Utils; -import app.revanced.integrations.shared.StringRef; @SuppressWarnings("unused") public class ExternalDownloadButton extends BottomControlButton { @@ -47,39 +44,7 @@ public class ExternalDownloadButton extends BottomControlButton { } private static void onDownloadClick(View view) { - Logger.printDebug(() -> "External download button clicked"); - - final var context = view.getContext(); - // Trim string to avoid any accidental whitespace. - var downloaderPackageName = Settings.EXTERNAL_DOWNLOADER_PACKAGE_NAME.get().trim(); - - boolean packageEnabled = false; - try { - packageEnabled = context.getPackageManager().getApplicationInfo(downloaderPackageName, 0).enabled; - } catch (PackageManager.NameNotFoundException error) { - Logger.printDebug(() -> "External downloader could not be found: " + error); - } - - // If the package is not installed, show the toast - if (!packageEnabled) { - Utils.showToastLong(StringRef.str("revanced_external_downloader_not_installed_warning", downloaderPackageName)); - return; - } - - // Launch PowerTube intent - try { - String content = String.format("https://youtu.be/%s", VideoInformation.getVideoId()); - - Intent intent = new Intent("android.intent.action.SEND"); - intent.setType("text/plain"); - intent.setPackage(downloaderPackageName); - intent.putExtra("android.intent.extra.TEXT", content); - context.startActivity(intent); - - Logger.printDebug(() -> "Launched the intent with the content: " + content); - } catch (Exception error) { - Logger.printException(() -> "Failed to launch the intent: " + error, error); - } + DownloadsPatch.launchExternalDownloader(); } }