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") - } } }