diff --git a/.gitignore b/.gitignore
index 754c2ef48c..facee09b70 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,12 @@
*.iml
.gradle
/local.properties
-/.idea/caches
-/.idea/libraries
-/.idea/modules.xml
-/.idea/workspace.xml
-/.idea/navEditor.xml
-/.idea/assetWizardSettings.xml
+/.idea
+/.vscode
+.DS_Store
/build
/captures
.externalNativeBuild
.cxx
-/.idea
-/.vscode
-/*.log
-node_modules
\ No newline at end of file
+local.properties
+node_modules
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 365cf5e3c3..7a7086f54a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+# [1.4.0-dev.4](https://github.com/ReVanced/revanced-integrations/compare/v1.4.0-dev.3...v1.4.0-dev.4) (2024-02-21)
+
+
+### Features
+
+* **X:** Add `Open links as query` patch ([#570](https://github.com/ReVanced/revanced-integrations/issues/570)) ([95ca632](https://github.com/ReVanced/revanced-integrations/commit/95ca632d40b90ea8160dbbf33fd5d7f2281cf711))
+
# [1.4.0-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v1.4.0-dev.2...v1.4.0-dev.3) (2024-02-13)
diff --git a/app/.gitignore b/app/.gitignore
index 3543521e9f..42afabfd2a 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -1 +1 @@
-/build
+/build
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 2b425557e6..234dc43aea 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,11 +1,19 @@
plugins {
- id("com.android.application")
- id("org.jetbrains.kotlin.android")
+ alias(libs.plugins.android.application)
+ alias(libs.plugins.kotlin)
}
android {
- compileSdk = 33
namespace = "app.revanced.integrations"
+ compileSdk = 33
+
+ applicationVariants.all {
+ outputs.all {
+ this as com.android.build.gradle.internal.api.ApkVariantOutputImpl
+
+ outputFileName = "${rootProject.name}-$versionName.apk"
+ }
+ }
defaultConfig {
applicationId = "app.revanced.integrations"
@@ -20,32 +28,37 @@ android {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
- "proguard-rules.pro"
+ "proguard-rules.pro",
)
}
- applicationVariants.all {
- outputs.all {
- this as com.android.build.gradle.internal.api.ApkVariantOutputImpl
-
- outputFileName = "${rootProject.name}-$versionName.apk"
- }
- }
}
+
compileOptions {
- sourceCompatibility(JavaVersion.VERSION_11)
- targetCompatibility(JavaVersion.VERSION_11)
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
}
+
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
}
dependencies {
- compileOnly(project(mapOf("path" to ":dummy")))
- compileOnly("androidx.annotation:annotation:1.7.0")
- compileOnly("androidx.appcompat:appcompat:1.7.0-alpha03")
- compileOnly("com.squareup.okhttp3:okhttp:5.0.0-alpha.11")
- compileOnly("com.squareup.retrofit2:retrofit:2.9.0")
+ compileOnly(libs.appcompat)
+ compileOnly(libs.annotation)
+ compileOnly(libs.okhttp)
+ compileOnly(libs.retrofit)
+
+ compileOnly(project(":stub"))
}
-tasks.register("publish") { dependsOn("build") }
+tasks {
+ // Needed by gradle-semantic-release-plugin.
+ // Tracking: https://github.com/KengoTODA/gradle-semantic-release-plugin/issues/435
+ register("publish") {
+ group = "publishing"
+ description = "Publishes all publications produced by this project."
+
+ dependsOn(build)
+ }
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 214329989d..8f804140d6 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -1,27 +1,6 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
-dontobfuscate
-dontoptimize
--keepattributes * # https://www.guardsquare.com/manual/configuration/attributes
+-keepattributes *
-keep class app.revanced.** {
*;
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 431b54ad65..e52a1167f2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
+
-
diff --git a/app/src/main/java/app/revanced/integrations/twitch/settings/AppCompatActivityHook.java b/app/src/main/java/app/revanced/integrations/twitch/settings/AppCompatActivityHook.java
index f08fec13b2..42da779848 100644
--- a/app/src/main/java/app/revanced/integrations/twitch/settings/AppCompatActivityHook.java
+++ b/app/src/main/java/app/revanced/integrations/twitch/settings/AppCompatActivityHook.java
@@ -28,7 +28,7 @@ public class AppCompatActivityHook {
public static void startSettingsActivity() {
Logger.printDebug(() -> "Launching ReVanced settings");
- final var context = app.revanced.integrations.shared.Utils.getContext();
+ final var context = Utils.getContext();
if (context != null) {
Intent intent = new Intent(context, SettingsActivity.class);
diff --git a/app/src/main/java/app/revanced/integrations/twitter/patches/hook/twifucker/TwiFucker.kt b/app/src/main/java/app/revanced/integrations/twitter/patches/hook/twifucker/TwiFucker.kt
index 247ef0a344..282c0c60df 100644
--- a/app/src/main/java/app/revanced/integrations/twitter/patches/hook/twifucker/TwiFucker.kt
+++ b/app/src/main/java/app/revanced/integrations/twitter/patches/hook/twifucker/TwiFucker.kt
@@ -9,8 +9,7 @@ import org.json.JSONObject
// https://raw.githubusercontent.com/Dr-TSNG/TwiFucker/880cdf1c1622e54ab45561ffcb4f53d94ed97bae/app/src/main/java/icu/nullptr/twifucker/hook/JsonHook.kt
internal object TwiFucker {
// root
- private fun JSONObject.jsonGetInstructions(): JSONArray? =
- optJSONObject("timeline")?.optJSONArray("instructions")
+ private fun JSONObject.jsonGetInstructions(): JSONArray? = optJSONObject("timeline")?.optJSONArray("instructions")
private fun JSONObject.jsonGetData(): JSONObject? = optJSONObject("data")
@@ -42,10 +41,11 @@ internal object TwiFucker {
// data
private fun JSONObject.dataGetInstructions(): JSONArray? {
- val timeline = optJSONObject("user_result")?.optJSONObject("result")
- ?.optJSONObject("timeline_response")?.optJSONObject("timeline")
- ?: optJSONObject("timeline_response")?.optJSONObject("timeline")
- ?: optJSONObject("timeline_response")
+ val timeline =
+ optJSONObject("user_result")?.optJSONObject("result")
+ ?.optJSONObject("timeline_response")?.optJSONObject("timeline")
+ ?: optJSONObject("timeline_response")?.optJSONObject("timeline")
+ ?: optJSONObject("timeline_response")
return timeline?.optJSONArray("instructions")
}
@@ -64,7 +64,6 @@ internal object TwiFucker {
}
}?.optJSONObject("legacy")
-
// entry
private fun JSONObject.entryHasPromotedMetadata(): Boolean =
optJSONObject("content")?.optJSONObject("item")?.optJSONObject("content")
@@ -77,11 +76,9 @@ internal object TwiFucker {
optJSONObject("content")?.optJSONArray("items")
?: optJSONObject("content")?.optJSONObject("timelineModule")?.optJSONArray("items")
- private fun JSONObject.entryIsTweetDetailRelatedTweets(): Boolean =
- optString("entryId").startsWith("tweetdetailrelatedtweets-")
+ private fun JSONObject.entryIsTweetDetailRelatedTweets(): Boolean = optString("entryId").startsWith("tweetdetailrelatedtweets-")
- private fun JSONObject.entryGetTrends(): JSONArray? =
- optJSONObject("content")?.optJSONObject("timelineModule")?.optJSONArray("items")
+ private fun JSONObject.entryGetTrends(): JSONArray? = optJSONObject("content")?.optJSONObject("timelineModule")?.optJSONArray("items")
// trend
private fun JSONObject.trendHasPromotedMetadata(): Boolean =
@@ -104,8 +101,7 @@ internal object TwiFucker {
// instruction
private fun JSONObject.instructionTimelineAddEntries(): JSONArray? = optJSONArray("entries")
- private fun JSONObject.instructionGetAddEntries(): JSONArray? =
- optJSONObject("addEntries")?.optJSONArray("entries")
+ private fun JSONObject.instructionGetAddEntries(): JSONArray? = optJSONObject("addEntries")?.optJSONArray("entries")
private fun JSONObject.instructionCheckAndRemove(action: (JSONArray) -> Unit) {
instructionTimelineAddEntries()?.let(action)
@@ -164,9 +160,10 @@ internal object TwiFucker {
entriesRemoveTweetDetailRelatedTweets()
}
- private fun JSONObject.entryIsWhoToFollow(): Boolean = optString("entryId").let {
- it.startsWith("whoToFollow-") || it.startsWith("who-to-follow-") || it.startsWith("connect-module-")
- }
+ private fun JSONObject.entryIsWhoToFollow(): Boolean =
+ optString("entryId").let {
+ it.startsWith("whoToFollow-") || it.startsWith("who-to-follow-") || it.startsWith("connect-module-")
+ }
private fun JSONObject.itemContainsPromotedUser(): Boolean =
optJSONObject("item")?.optJSONObject("content")
@@ -217,4 +214,4 @@ internal object TwiFucker {
instruction.instructionCheckAndRemove(action)
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/app/revanced/integrations/twitter/patches/links/OpenLinksWithAppChooserPatch.java b/app/src/main/java/app/revanced/integrations/twitter/patches/links/OpenLinksWithAppChooserPatch.java
new file mode 100644
index 0000000000..e781f19af7
--- /dev/null
+++ b/app/src/main/java/app/revanced/integrations/twitter/patches/links/OpenLinksWithAppChooserPatch.java
@@ -0,0 +1,12 @@
+package app.revanced.integrations.twitter.patches.links;
+
+import android.content.Context;
+import android.content.Intent;
+
+public final class OpenLinksWithAppChooserPatch {
+ public static void openWithChooser(final Context context, final Intent intent) {
+ intent.setAction("android.intent.action.VIEW");
+
+ context.startActivity(Intent.createChooser(intent, null));
+ }
+}
diff --git a/app/src/main/java/app/revanced/integrations/youtube/patches/AlternativeThumbnailsPatch.java b/app/src/main/java/app/revanced/integrations/youtube/patches/AlternativeThumbnailsPatch.java
index 9cedb96e2e..a16d481ae1 100644
--- a/app/src/main/java/app/revanced/integrations/youtube/patches/AlternativeThumbnailsPatch.java
+++ b/app/src/main/java/app/revanced/integrations/youtube/patches/AlternativeThumbnailsPatch.java
@@ -422,7 +422,7 @@ private static class VerifiedQualities {
private static final int CACHE_LIMIT = 1000;
@Override
- protected boolean removeEldestEntry(Map.Entry eldest) {
+ protected boolean removeEldestEntry(Entry eldest) {
return size() > CACHE_LIMIT; // Evict the oldest entry if over the cache limit.
}
};
diff --git a/app/src/main/java/app/revanced/integrations/youtube/patches/ReturnYouTubeDislikePatch.java b/app/src/main/java/app/revanced/integrations/youtube/patches/ReturnYouTubeDislikePatch.java
index 51774f04ea..0cb687f638 100644
--- a/app/src/main/java/app/revanced/integrations/youtube/patches/ReturnYouTubeDislikePatch.java
+++ b/app/src/main/java/app/revanced/integrations/youtube/patches/ReturnYouTubeDislikePatch.java
@@ -667,7 +667,7 @@ private static boolean videoIdIsSame(@Nullable ReturnYouTubeDislike fetch, @Null
*
* Called when the user likes or dislikes.
*
- * @param vote int that matches {@link ReturnYouTubeDislike.Vote#value}
+ * @param vote int that matches {@link Vote#value}
*/
public static void sendVote(int vote) {
try {
diff --git a/app/src/main/java/app/revanced/integrations/youtube/patches/components/ReturnYouTubeDislikeFilterPatch.java b/app/src/main/java/app/revanced/integrations/youtube/patches/components/ReturnYouTubeDislikeFilterPatch.java
index f8ac724b74..605b48beac 100644
--- a/app/src/main/java/app/revanced/integrations/youtube/patches/components/ReturnYouTubeDislikeFilterPatch.java
+++ b/app/src/main/java/app/revanced/integrations/youtube/patches/components/ReturnYouTubeDislikeFilterPatch.java
@@ -45,7 +45,7 @@ public final class ReturnYouTubeDislikeFilterPatch extends Filter {
private static final int NUMBER_OF_LAST_VIDEO_IDS_TO_TRACK = 5;
@Override
- protected boolean removeEldestEntry(Map.Entry eldest) {
+ protected boolean removeEldestEntry(Entry eldest) {
return size() > NUMBER_OF_LAST_VIDEO_IDS_TO_TRACK;
}
};
diff --git a/app/src/main/java/app/revanced/integrations/youtube/requests/Route.java b/app/src/main/java/app/revanced/integrations/youtube/requests/Route.java
index 877a364c90..afbc24506f 100644
--- a/app/src/main/java/app/revanced/integrations/youtube/requests/Route.java
+++ b/app/src/main/java/app/revanced/integrations/youtube/requests/Route.java
@@ -2,10 +2,10 @@
public class Route {
private final String route;
- private final Route.Method method;
+ private final Method method;
private final int paramCount;
- public Route(Route.Method method, String route) {
+ public Route(Method method, String route) {
this.method = method;
this.route = route;
this.paramCount = countMatches(route, '{');
@@ -14,11 +14,11 @@ public Route(Route.Method method, String route) {
throw new IllegalArgumentException("Not enough parameters");
}
- public Route.Method getMethod() {
+ public Method getMethod() {
return method;
}
- public Route.CompiledRoute compile(String... params) {
+ public CompiledRoute compile(String... params) {
if (params.length != paramCount)
throw new IllegalArgumentException("Error compiling route [" + route + "], incorrect amount of parameters provided. " +
"Expected: " + paramCount + ", provided: " + params.length);
@@ -29,7 +29,7 @@ public Route.CompiledRoute compile(String... params) {
int paramEnd = compiledRoute.indexOf("}");
compiledRoute.replace(paramStart, paramEnd + 1, params[i]);
}
- return new Route.CompiledRoute(this, compiledRoute.toString());
+ return new CompiledRoute(this, compiledRoute.toString());
}
public static class CompiledRoute {
@@ -45,7 +45,7 @@ public String getCompiledRoute() {
return compiledRoute;
}
- public Route.Method getMethod() {
+ public Method getMethod() {
return baseRoute.method;
}
}
diff --git a/build.gradle.kts b/build.gradle.kts
index 14233df2aa..2e8dffc6bc 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,28 +1,5 @@
-buildscript {
- repositories {
- google()
- mavenCentral()
- }
- dependencies {
- classpath("com.android.tools.build:gradle:8.0.2")
- classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20")
- }
-}
-
-allprojects {
- repositories {
- google()
- maven { url = uri("https://jitpack.io") }
- mavenCentral()
- }
-}
-
-// Tracking issue https://github.com/semantic-release/semantic-release/issues/963
-tasks.register("publish", DefaultTask::class) {
- group = "publish"
- description = "Dummy publish to pass the verification phase of the gradle-semantic-release-plugin"
-}
-
-tasks.register("clean", Delete::class) {
- delete(rootProject.buildDir)
+plugins {
+ alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.android.library) apply false
+ alias(libs.plugins.kotlin) apply false
}
diff --git a/dummy/src/main/AndroidManifest.xml b/dummy/src/main/AndroidManifest.xml
deleted file mode 100644
index a5918e68ab..0000000000
--- a/dummy/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index f735686b7f..2090c4b424 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,4 +1,4 @@
org.gradle.parallel = true
org.gradle.caching = true
android.useAndroidX = true
-version = 1.4.0-dev.3
+version = 1.4.0-dev.4
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
new file mode 100644
index 0000000000..5bd1fbd4f4
--- /dev/null
+++ b/gradle/libs.versions.toml
@@ -0,0 +1,18 @@
+[versions]
+agp = "8.2.2"
+annotation = "1.7.1"
+kotlin = "1.9.22"
+appcompat = "1.7.0-alpha03"
+okhttp = "5.0.0-alpha.12"
+retrofit = "2.9.0"
+
+[libraries]
+annotation = { module = "androidx.annotation:annotation", version.ref = "annotation" }
+appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
+okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
+retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
+
+[plugins]
+android-application = { id = "com.android.application", version.ref = "agp" }
+android-library = { id = "com.android.library", version.ref = "agp" }
+kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 033e24c4cd..e708b1c023 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 3f203e9f9d..6e3d0903f9 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
distributionSha256Sum=9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c
zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dist
\ No newline at end of file
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index fcb6fca147..4f906e0c81 100755
--- a/gradlew
+++ b/gradlew
@@ -1,7 +1,7 @@
-#!/bin/sh
+#!/usr/bin/env sh
#
-# Copyright © 2015-2021 the original authors.
+# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,98 +17,67 @@
#
##############################################################################
-#
-# Gradle start up script for POSIX generated by Gradle.
-#
-# Important for running:
-#
-# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-# noncompliant, but you have some other compliant shell such as ksh or
-# bash, then to run this script, type that shell name before the whole
-# command line, like:
-#
-# ksh Gradle
-#
-# Busybox and similar reduced shells will NOT work, because this script
-# requires all of these POSIX shell features:
-# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
-#
-# Important for patching:
-#
-# (2) This script targets any POSIX shell, so it avoids extensions provided
-# by Bash, Ksh, etc; in particular arrays are avoided.
-#
-# The "traditional" practice of packing multiple parameters into a
-# space-separated string is a well documented source of bugs and security
-# problems, so this is (mostly) avoided, by progressively accumulating
-# options in "$@", and eventually passing that to Java.
-#
-# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-# see the in-line comments for details.
-#
-# There are tweaks for specific operating systems such as AIX, CygWin,
-# Darwin, MinGW, and NonStop.
-#
-# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-# within the Gradle project.
-#
-# You can find Gradle at https://github.com/gradle/gradle/.
-#
+##
+## Gradle start up script for UN*X
+##
##############################################################################
# Attempt to set APP_HOME
-
# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
- APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
- [ -h "$app_path" ]
-do
- ls=$( ls -ld "$app_path" )
- link=${ls#*' -> '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
-# This is normally unused
-# shellcheck disable=SC2034
-APP_BASE_NAME=${0##*/}
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
+MAX_FD="maximum"
warn () {
echo "$*"
-} >&2
+}
die () {
echo
echo "$*"
echo
exit 1
-} >&2
+}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
-case "$( uname )" in #(
- CYGWIN* ) cygwin=true ;; #(
- Darwin* ) darwin=true ;; #(
- MSYS* | MINGW* ) msys=true ;; #(
- NONSTOP* ) nonstop=true ;;
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -118,9 +87,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
- JAVACMD=$JAVA_HOME/jre/sh/java
+ JAVACMD="$JAVA_HOME/jre/sh/java"
else
- JAVACMD=$JAVA_HOME/bin/java
+ JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -129,120 +98,88 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
- JAVACMD=java
- if ! command -v java >/dev/null 2>&1
- then
- die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
- fi
fi
# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
fi
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
+ i=`expr $i + 1`
done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
fi
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Stop when "xargs" is not available.
-if ! command -v xargs >/dev/null 2>&1
-then
- die "xargs is not available"
-fi
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
index 93e3f59f13..107acd32c4 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -14,7 +14,7 @@
@rem limitations under the License.
@rem
-@if "%DEBUG%"=="" @echo off
+@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -25,8 +25,7 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-@rem This is normally unused
+if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@@ -41,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
+if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -76,15 +75,13 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end
@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
+if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
diff --git a/settings.gradle.kts b/settings.gradle.kts
index b06d31dfe4..61d1baa72a 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1,5 +1,21 @@
rootProject.name = "revanced-integrations"
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+@Suppress("UnstableApiUsage")
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
buildCache {
local {
isEnabled = "CI" !in System.getenv()
@@ -7,4 +23,4 @@ buildCache {
}
include(":app")
-include(":dummy")
+include(":stub")
diff --git a/dummy/.gitignore b/stub/.gitignore
similarity index 100%
rename from dummy/.gitignore
rename to stub/.gitignore
diff --git a/dummy/build.gradle.kts b/stub/build.gradle.kts
similarity index 78%
rename from dummy/build.gradle.kts
rename to stub/build.gradle.kts
index 60bab80733..d16c19b7a5 100644
--- a/dummy/build.gradle.kts
+++ b/stub/build.gradle.kts
@@ -1,15 +1,14 @@
plugins {
- id("com.android.library")
+ alias(libs.plugins.android.library)
}
android {
- namespace = "app.revanced.dummy"
+ namespace = "app.revanced.integrations.stub"
compileSdk = 33
- buildToolsVersion = "33.0.1"
defaultConfig {
+ multiDexEnabled = false
minSdk = 23
- targetSdk = 33
}
buildTypes {
@@ -25,4 +24,4 @@ android {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
-}
\ No newline at end of file
+}
diff --git a/dummy/proguard-rules.pro b/stub/proguard-rules.pro
similarity index 100%
rename from dummy/proguard-rules.pro
rename to stub/proguard-rules.pro
diff --git a/stub/src/main/AndroidManifest.xml b/stub/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..568741e54f
--- /dev/null
+++ b/stub/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/dummy/src/main/java/android/support/constraint/ConstraintLayout.java b/stub/src/main/java/android/support/constraint/ConstraintLayout.java
similarity index 100%
rename from dummy/src/main/java/android/support/constraint/ConstraintLayout.java
rename to stub/src/main/java/android/support/constraint/ConstraintLayout.java
diff --git a/dummy/src/main/java/android/support/v7/widget/RecyclerView.java b/stub/src/main/java/android/support/v7/widget/RecyclerView.java
similarity index 100%
rename from dummy/src/main/java/android/support/v7/widget/RecyclerView.java
rename to stub/src/main/java/android/support/v7/widget/RecyclerView.java
diff --git a/dummy/src/main/java/com/bytedance/ies/ugc/aweme/commercialize/compliance/personalization/AdPersonalizationActivity.java b/stub/src/main/java/com/bytedance/ies/ugc/aweme/commercialize/compliance/personalization/AdPersonalizationActivity.java
similarity index 100%
rename from dummy/src/main/java/com/bytedance/ies/ugc/aweme/commercialize/compliance/personalization/AdPersonalizationActivity.java
rename to stub/src/main/java/com/bytedance/ies/ugc/aweme/commercialize/compliance/personalization/AdPersonalizationActivity.java
diff --git a/dummy/src/main/java/com/google/android/apps/youtube/app/ui/SlimMetadataScrollableButtonContainerLayout.java b/stub/src/main/java/com/google/android/apps/youtube/app/ui/SlimMetadataScrollableButtonContainerLayout.java
similarity index 100%
rename from dummy/src/main/java/com/google/android/apps/youtube/app/ui/SlimMetadataScrollableButtonContainerLayout.java
rename to stub/src/main/java/com/google/android/apps/youtube/app/ui/SlimMetadataScrollableButtonContainerLayout.java
diff --git a/dummy/src/main/java/com/google/android/libraries/youtube/rendering/ui/pivotbar/PivotBar.java b/stub/src/main/java/com/google/android/libraries/youtube/rendering/ui/pivotbar/PivotBar.java
similarity index 100%
rename from dummy/src/main/java/com/google/android/libraries/youtube/rendering/ui/pivotbar/PivotBar.java
rename to stub/src/main/java/com/google/android/libraries/youtube/rendering/ui/pivotbar/PivotBar.java
diff --git a/dummy/src/main/java/com/reddit/domain/model/ILink.java b/stub/src/main/java/com/reddit/domain/model/ILink.java
similarity index 100%
rename from dummy/src/main/java/com/reddit/domain/model/ILink.java
rename to stub/src/main/java/com/reddit/domain/model/ILink.java
diff --git a/dummy/src/main/java/com/ss/android/ugc/aweme/feed/model/Aweme.java b/stub/src/main/java/com/ss/android/ugc/aweme/feed/model/Aweme.java
similarity index 100%
rename from dummy/src/main/java/com/ss/android/ugc/aweme/feed/model/Aweme.java
rename to stub/src/main/java/com/ss/android/ugc/aweme/feed/model/Aweme.java
diff --git a/dummy/src/main/java/com/ss/android/ugc/aweme/feed/model/AwemeStatistics.java b/stub/src/main/java/com/ss/android/ugc/aweme/feed/model/AwemeStatistics.java
similarity index 100%
rename from dummy/src/main/java/com/ss/android/ugc/aweme/feed/model/AwemeStatistics.java
rename to stub/src/main/java/com/ss/android/ugc/aweme/feed/model/AwemeStatistics.java
diff --git a/dummy/src/main/java/com/ss/android/ugc/aweme/feed/model/FeedItemList.java b/stub/src/main/java/com/ss/android/ugc/aweme/feed/model/FeedItemList.java
similarity index 100%
rename from dummy/src/main/java/com/ss/android/ugc/aweme/feed/model/FeedItemList.java
rename to stub/src/main/java/com/ss/android/ugc/aweme/feed/model/FeedItemList.java
diff --git a/dummy/src/main/java/com/tumblr/rumblr/model/TimelineObject.java b/stub/src/main/java/com/tumblr/rumblr/model/TimelineObject.java
similarity index 100%
rename from dummy/src/main/java/com/tumblr/rumblr/model/TimelineObject.java
rename to stub/src/main/java/com/tumblr/rumblr/model/TimelineObject.java
diff --git a/dummy/src/main/java/com/tumblr/rumblr/model/TimelineObjectType.java b/stub/src/main/java/com/tumblr/rumblr/model/TimelineObjectType.java
similarity index 100%
rename from dummy/src/main/java/com/tumblr/rumblr/model/TimelineObjectType.java
rename to stub/src/main/java/com/tumblr/rumblr/model/TimelineObjectType.java
diff --git a/dummy/src/main/java/com/tumblr/rumblr/model/Timelineable.java b/stub/src/main/java/com/tumblr/rumblr/model/Timelineable.java
similarity index 100%
rename from dummy/src/main/java/com/tumblr/rumblr/model/Timelineable.java
rename to stub/src/main/java/com/tumblr/rumblr/model/Timelineable.java
diff --git a/dummy/src/main/java/org/chromium/net/UrlRequest.java b/stub/src/main/java/org/chromium/net/UrlRequest.java
similarity index 100%
rename from dummy/src/main/java/org/chromium/net/UrlRequest.java
rename to stub/src/main/java/org/chromium/net/UrlRequest.java
diff --git a/dummy/src/main/java/org/chromium/net/UrlResponseInfo.java b/stub/src/main/java/org/chromium/net/UrlResponseInfo.java
similarity index 100%
rename from dummy/src/main/java/org/chromium/net/UrlResponseInfo.java
rename to stub/src/main/java/org/chromium/net/UrlResponseInfo.java
diff --git a/dummy/src/main/java/org/chromium/net/impl/CronetUrlRequest.java b/stub/src/main/java/org/chromium/net/impl/CronetUrlRequest.java
similarity index 100%
rename from dummy/src/main/java/org/chromium/net/impl/CronetUrlRequest.java
rename to stub/src/main/java/org/chromium/net/impl/CronetUrlRequest.java
diff --git a/dummy/src/main/java/tv/twitch/android/feature/settings/menu/SettingsMenuGroup.java b/stub/src/main/java/tv/twitch/android/feature/settings/menu/SettingsMenuGroup.java
similarity index 100%
rename from dummy/src/main/java/tv/twitch/android/feature/settings/menu/SettingsMenuGroup.java
rename to stub/src/main/java/tv/twitch/android/feature/settings/menu/SettingsMenuGroup.java
diff --git a/dummy/src/main/java/tv/twitch/android/settings/SettingsActivity.java b/stub/src/main/java/tv/twitch/android/settings/SettingsActivity.java
similarity index 100%
rename from dummy/src/main/java/tv/twitch/android/settings/SettingsActivity.java
rename to stub/src/main/java/tv/twitch/android/settings/SettingsActivity.java
diff --git a/dummy/src/main/java/tv/twitch/android/shared/chat/util/ClickableUsernameSpan.java b/stub/src/main/java/tv/twitch/android/shared/chat/util/ClickableUsernameSpan.java
similarity index 100%
rename from dummy/src/main/java/tv/twitch/android/shared/chat/util/ClickableUsernameSpan.java
rename to stub/src/main/java/tv/twitch/android/shared/chat/util/ClickableUsernameSpan.java