diff --git a/app/src/main/java/com/parallelc/micts/ModuleMain.kt b/app/src/main/java/com/parallelc/micts/ModuleMain.kt index 92b1a20..9a92275 100644 --- a/app/src/main/java/com/parallelc/micts/ModuleMain.kt +++ b/app/src/main/java/com/parallelc/micts/ModuleMain.kt @@ -13,6 +13,7 @@ import com.parallelc.micts.config.XposedConfig.KEY_SPOOF_MODEL import com.parallelc.micts.hooker.CSMSHooker import com.parallelc.micts.hooker.InvokeOmniHooker import com.parallelc.micts.hooker.LongPressHomeHooker +import com.parallelc.micts.hooker.NavBarActionsConfigHooker import com.parallelc.micts.hooker.NavStubGestureEventManagerHooker import com.parallelc.micts.hooker.NavStubViewHooker import com.parallelc.micts.hooker.VIMSHooker @@ -101,6 +102,14 @@ class ModuleMain(base: XposedInterface, param: ModuleLoadedParam) : XposedModule DEVICE.isAccessible = true DEVICE.set(null, prefs.getString(KEY_SPOOF_DEVICE, DEFAULT_CONFIG[KEY_SPOOF_DEVICE] as String)) } + "com.android.systemui" -> { + if (Build.MANUFACTURER != "meizu") return + runCatching { + NavBarActionsConfigHooker.hook(param) + }.onFailure { e -> + log("hook NavBarActionsConfig fail", e) + } + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/parallelc/micts/config/XposedConfig.kt b/app/src/main/java/com/parallelc/micts/config/XposedConfig.kt index 2c50caf..583b5c5 100644 --- a/app/src/main/java/com/parallelc/micts/config/XposedConfig.kt +++ b/app/src/main/java/com/parallelc/micts/config/XposedConfig.kt @@ -40,7 +40,7 @@ object XposedConfig { val DEFAULT_CONFIG = mapOf( KEY_TRIGGER_SERVICE to TriggerService.getSupportedServices().last().ordinal, KEY_GESTURE_TRIGGER to (Build.MANUFACTURER == "Xiaomi"), - KEY_HOME_TRIGGER to (Build.MANUFACTURER == "Xiaomi"), + KEY_HOME_TRIGGER to (Build.MANUFACTURER == "Xiaomi" || Build.MANUFACTURER == "meizu"), KEY_DEVICE_SPOOF to true, KEY_SPOOF_MANUFACTURER to "Google", KEY_SPOOF_BRAND to "google", diff --git a/app/src/main/java/com/parallelc/micts/hooker/NavBarActionsConfigHooker.kt b/app/src/main/java/com/parallelc/micts/hooker/NavBarActionsConfigHooker.kt new file mode 100644 index 0000000..f5b87c7 --- /dev/null +++ b/app/src/main/java/com/parallelc/micts/hooker/NavBarActionsConfigHooker.kt @@ -0,0 +1,51 @@ +package com.parallelc.micts.hooker + +import android.content.Context +import com.parallelc.micts.config.XposedConfig.CONFIG_NAME +import com.parallelc.micts.config.XposedConfig.DEFAULT_CONFIG +import com.parallelc.micts.config.XposedConfig.KEY_HOME_TRIGGER +import com.parallelc.micts.config.XposedConfig.KEY_VIBRATE +import com.parallelc.micts.module +import com.parallelc.micts.ui.activity.triggerCircleToSearch +import io.github.libxposed.api.XposedInterface.BeforeHookCallback +import io.github.libxposed.api.XposedInterface.Hooker +import io.github.libxposed.api.XposedModuleInterface.PackageLoadedParam +import io.github.libxposed.api.annotations.BeforeInvocation +import io.github.libxposed.api.annotations.XposedHooker + +class NavBarActionsConfigHooker { + companion object { + fun hook(param: PackageLoadedParam) { + val navBarActionsConfig = + param.classLoader.loadClass("com.flyme.systemui.navigationbar.actions.NavBarActionsConfig") + module!!.hook( + navBarActionsConfig.getDeclaredMethod( + "helpStartAI", + Context::class.java, + String::class.java + ), + HelpStartAiHooker::class.java + ) + } + } + + @XposedHooker + class HelpStartAiHooker : Hooker { + companion object { + @JvmStatic + @BeforeInvocation + fun before(callback: BeforeHookCallback) { + val prefs = module!!.getRemotePreferences(CONFIG_NAME) + if (!prefs.getBoolean(KEY_HOME_TRIGGER, DEFAULT_CONFIG[KEY_HOME_TRIGGER] as Boolean)) { + return + } + triggerCircleToSearch( + 1, + callback.args[0] as? Context, + prefs.getBoolean(KEY_VIBRATE, DEFAULT_CONFIG[KEY_VIBRATE] as Boolean) + ) + callback.returnAndSkip(null) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/parallelc/micts/ui/activity/SettingsActivity.kt b/app/src/main/java/com/parallelc/micts/ui/activity/SettingsActivity.kt index 7529190..1a943f8 100644 --- a/app/src/main/java/com/parallelc/micts/ui/activity/SettingsActivity.kt +++ b/app/src/main/java/com/parallelc/micts/ui/activity/SettingsActivity.kt @@ -334,7 +334,9 @@ fun SettingsPage( ) } - if (Build.MANUFACTURER == "Xiaomi") { + val isXiaomi = Build.MANUFACTURER == "Xiaomi" + val isMeizu = Build.MANUFACTURER == "meizu" + if (isXiaomi) { ListItem( headlineContent = { Text(stringResource(R.string.trigger_by_long_press_gesture_handle)) }, trailingContent = { @@ -344,7 +346,9 @@ fun SettingsPage( ) } ) + } + if (isXiaomi || isMeizu) { ListItem( headlineContent = { Text(stringResource(R.string.trigger_by_long_press_home_button)) }, trailingContent = { diff --git a/app/src/main/java/com/parallelc/micts/ui/viewmodel/SettingsViewModel.kt b/app/src/main/java/com/parallelc/micts/ui/viewmodel/SettingsViewModel.kt index cf74e23..105cced 100644 --- a/app/src/main/java/com/parallelc/micts/ui/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/com/parallelc/micts/ui/viewmodel/SettingsViewModel.kt @@ -123,6 +123,9 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application if (Build.BRAND == "POCO" && scope.contains("com.mi.android.globallauncher") == false) { _xposedService.value?.requestScope("com.mi.android.globallauncher", object: OnScopeEventListener{}) } + if (Build.MANUFACTURER == "meizu" && scope.contains("com.android.systemui") == false) { + _xposedService.value?.requestScope("com.android.systemui", object : OnScopeEventListener {}) + } } XposedConfig.KEY_DEVICE_SPOOF -> { if (scope.contains("com.google.android.googlequicksearchbox") == false) {