diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 1928c70..774f57f 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -58,7 +58,14 @@ android {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
+ packaging {
+ resources {
+ merges += "META-INF/xposed/*"
+ excludes += "**"
+ }
+ }
}
+
dependencies {
- compileOnly("de.robv.android.xposed:api:82")
+ compileOnly("io.github.libxposed:api:101.0.1")
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3f50353..4623da5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,22 +6,6 @@
android:allowBackup="true"
android:label="@string/app_name"
tools:ignore="MissingApplicationIcon">
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/assets/xposed_init b/app/src/main/assets/xposed_init
deleted file mode 100644
index cc5f956..0000000
--- a/app/src/main/assets/xposed_init
+++ /dev/null
@@ -1 +0,0 @@
-org.lyaaz.fucktoast.MainHook
\ No newline at end of file
diff --git a/app/src/main/kotlin/org/lyaaz/fucktoast/MainHook.kt b/app/src/main/kotlin/org/lyaaz/fucktoast/MainHook.kt
index 03c1026..c00ddd1 100644
--- a/app/src/main/kotlin/org/lyaaz/fucktoast/MainHook.kt
+++ b/app/src/main/kotlin/org/lyaaz/fucktoast/MainHook.kt
@@ -1,63 +1,55 @@
package org.lyaaz.fucktoast
+import android.util.Log
import android.widget.Toast
-import de.robv.android.xposed.IXposedHookLoadPackage
-import de.robv.android.xposed.XC_MethodHook
-import de.robv.android.xposed.XposedBridge
-import de.robv.android.xposed.XposedHelpers
-import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
+import io.github.libxposed.api.XposedModule
+import io.github.libxposed.api.XposedModuleInterface.PackageReadyParam
-class MainHook : IXposedHookLoadPackage {
+class MainHook : XposedModule() {
- @Throws(Throwable::class)
- override fun handleLoadPackage(lpparam: LoadPackageParam) {
+ override fun onPackageReady(param: PackageReadyParam) {
+ val classLoader = param.classLoader
+ // mozilla.components.feature.prompts.dialog.FullScreenNotificationDialog
runCatching {
- // mozilla.components.feature.prompts.dialog.FullScreenNotificationDialog
- val dialogFragment = XposedHelpers.findClass(
+ val dialogFragment = Class.forName(
"androidx.fragment.app.DialogFragment",
- lpparam.classLoader
+ true,
+ classLoader
)
- val fragmentManager = XposedHelpers.findClass(
+ val fragmentManager = Class.forName(
"androidx.fragment.app.FragmentManager",
- lpparam.classLoader
+ true,
+ classLoader
)
- XposedHelpers.findAndHookMethod(
- dialogFragment,
- "show",
- fragmentManager,
- String::class.java,
- object : XC_MethodHook() {
- @Throws(Throwable::class)
- override fun beforeHookedMethod(param: MethodHookParam) {
- if (param.args[1] == FULLSCREEN_NOTIFICATION_TAG) {
- param.result = null
- }
- }
+ val showMethod = dialogFragment.getMethod("show", fragmentManager, String::class.java)
+ hook(showMethod).intercept { chain ->
+ if (chain.args[1] == FULLSCREEN_NOTIFICATION_TAG) {
+ null
+ } else {
+ chain.proceed()
}
- )
+ }
}.onFailure {
- XposedBridge.log(it)
+ log(Log.ERROR, TAG, "Failed to hook DialogFragment.show", it)
}
// Firefox 132+
runCatching {
- XposedHelpers.findAndHookMethod(
- Toast::class.java,
- "show",
- object : XC_MethodHook() {
- override fun beforeHookedMethod(param: MethodHookParam) {
- if (Thread.currentThread().stackTrace.map { it.methodName }
- .any { it.startsWith("fullScreenChanged") }) {
- param.result = null
- }
- }
+ val showMethod = Toast::class.java.getMethod("show")
+ hook(showMethod).intercept { chain ->
+ if (Thread.currentThread().stackTrace.map { it.methodName }
+ .any { it.startsWith("fullScreenChanged") }) {
+ null
+ } else {
+ chain.proceed()
}
- )
+ }
}.onFailure {
- XposedBridge.log(it)
+ log(Log.ERROR, TAG, "Failed to hook Toast.show", it)
}
}
companion object {
+ private const val TAG = "FuckToast"
private const val FULLSCREEN_NOTIFICATION_TAG =
"mozac_feature_prompts_full_screen_notification_dialog"
}
diff --git a/app/src/main/resources/META-INF/xposed/java_init.list b/app/src/main/resources/META-INF/xposed/java_init.list
new file mode 100644
index 0000000..240ed65
--- /dev/null
+++ b/app/src/main/resources/META-INF/xposed/java_init.list
@@ -0,0 +1 @@
+org.lyaaz.fucktoast.MainHook
diff --git a/app/src/main/resources/META-INF/xposed/module.prop b/app/src/main/resources/META-INF/xposed/module.prop
new file mode 100644
index 0000000..c3975fe
--- /dev/null
+++ b/app/src/main/resources/META-INF/xposed/module.prop
@@ -0,0 +1,3 @@
+minApiVersion=101
+targetApiVersion=101
+staticScope=true
diff --git a/app/src/main/resources/META-INF/xposed/scope.list b/app/src/main/resources/META-INF/xposed/scope.list
new file mode 100644
index 0000000..90d41b7
--- /dev/null
+++ b/app/src/main/resources/META-INF/xposed/scope.list
@@ -0,0 +1,6 @@
+org.mozilla.firefox
+org.mozilla.firefox_beta
+org.mozilla.fenix
+org.mozilla.fennec_fdroid
+us.spotco.fennec_dos
+org.ironfoxoss.ironfox
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 50203ad..51c6f57 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -11,9 +11,6 @@ dependencyResolutionManagement {
repositories {
google()
mavenCentral()
- maven {
- url = uri("https://api.xposed.info")
- }
}
}