Skip to content

Commit

Permalink
feat(YouTube - External downloader): Add ability to use in-app downlo…
Browse files Browse the repository at this point in the history
…ad button
  • Loading branch information
oSumAtrIX committed Mar 4, 2024
1 parent 6aacd1a commit 771a0de
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 37 deletions.
@@ -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);
}
}
}
Expand Up @@ -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);
Expand Down
@@ -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 {
Expand Down Expand Up @@ -47,39 +44,7 @@ public static void changeVisibility(boolean showing) {
}

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();
}
}

0 comments on commit 771a0de

Please sign in to comment.