diff --git a/app/src/main/java/com/github/thepiemonster/hidemocklocation/XposedModule.java b/app/src/main/java/com/github/thepiemonster/hidemocklocation/XposedModule.java index 02146f0..52cd7c2 100644 --- a/app/src/main/java/com/github/thepiemonster/hidemocklocation/XposedModule.java +++ b/app/src/main/java/com/github/thepiemonster/hidemocklocation/XposedModule.java @@ -1,6 +1,7 @@ package com.github.thepiemonster.hidemocklocation; import android.content.ContentResolver; +import android.os.Build; import android.os.Bundle; import android.provider.Settings; @@ -22,6 +23,7 @@ public class XposedModule implements IXposedHookZygoteInit, IXposedHookLoadPacka public XC_ProcessNameMethodHook hideAllowMockSettingHook; public XC_ProcessNameMethodHook hideMockProviderHook; + public XC_ProcessNameMethodHook setFromMockProviderHook; public XC_ProcessNameMethodHook hideMockGooglePlayServicesHook; // Hook with additional member - processName @@ -111,10 +113,18 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th hideMockGooglePlayServicesHook.init(lpparam.processName, lpparam.packageName)); // New way of checking if location is mocked, SDK 18+ - if (Common.JB_MR2_NEWER) + if (Common.JB_MR2_NEWER) { + XposedHelpers.findAndHookMethod("android.location.Location", lpparam.classLoader, + "isFromMockProvider", hideMockProviderHook.init(lpparam.processName, lpparam.packageName)); + + XposedHelpers.findAndHookMethod("android.location.Location", lpparam.classLoader, + "setIsFromMockProvider", boolean.class, setFromMockProviderHook.init(lpparam.processName, lpparam.packageName)); + } + + if (Build.VERSION.SDK_INT >= 31) XposedHelpers.findAndHookMethod("android.location.Location", lpparam.classLoader, - "isFromMockProvider", hideMockProviderHook.init(lpparam.processName, lpparam.packageName)); - + "isMock", hideMockProviderHook.init(lpparam.processName, lpparam.packageName)); + // Self hook - informing Activity that Xposed module is enabled if(lpparam.packageName.equals(Common.PACKAGE_NAME)) XposedHelpers.findAndHookMethod(Common.ACTIVITY_NAME, lpparam.classLoader, "isModuleEnabled", @@ -169,6 +179,18 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } } }; + + setFromMockProviderHook = new XC_ProcessNameMethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + reloadPrefs(); + boolean isGMSWhitelisted = prefs.getBoolean(Common.PREF_GMS_WHITELISTED, false); + if (!isGMSWhitelisted || !this.packageName.equals(Common.GMS_PACKAGE)) { + if(isHidingEnabled()) + param.args[0] = false; + } + } + }; hideMockGooglePlayServicesHook = new XC_ProcessNameMethodHook() { @Override