diff --git a/app/src/main/java/ru/vtosters/hooks/GmsHook.java b/app/src/main/java/ru/vtosters/hooks/GmsHook.java index 35a2b10af..b61b5bee1 100644 --- a/app/src/main/java/ru/vtosters/hooks/GmsHook.java +++ b/app/src/main/java/ru/vtosters/hooks/GmsHook.java @@ -11,37 +11,37 @@ import com.vtosters.lite.R; import ru.vtosters.lite.utils.AndroidUtils; public class GmsHook { - private static final boolean needToSpoof = !isGmsInstalled() && (isFakeGmsInstalled() || isFakeGms2Installed()); + private static final String[] spoofPackages = {"com.mgoogle", "app.revanced"}; + private static final String currentGms; + + static { + currentGms = getSpoofPackagePrefix(); + } + + private static boolean isPackageInstalled(String packageName) { + try { + AndroidUtils.getGlobalContext().getPackageManager().getPackageInfo(packageName, 0); + return true; + } catch (Exception unused) { + return false; + } + } public static boolean isGmsInstalled() { - try { - AndroidUtils.getGlobalContext().getPackageManager().getPackageInfo("com.google.android.gms", 0); - return true; - } catch (Exception unused) { - return false; - } - } // Google Market Services check + return isPackageInstalled("com.google.android.gms"); + } - public static boolean isFakeGmsInstalled() { - try { - AndroidUtils.getGlobalContext().getPackageManager().getPackageInfo("com.mgoogle.android.gms", 0); - return true; - } catch (Exception unused) { - return false; - } - } // Microg Google Market Services check - - public static boolean isFakeGms2Installed() { - try { - AndroidUtils.getGlobalContext().getPackageManager().getPackageInfo("app.revanced.android.gms", 0); - return true; - } catch (Exception unused) { - return false; - } - } // Microg Google Market Services check + public static boolean isSpoofPackageInstalled(String packageName) { + return isPackageInstalled(packageName + ".android.gms"); + } public static boolean isAnyServicesInstalled() { - return isGmsInstalled() || isFakeGmsInstalled() || isFakeGms2Installed(); + for (String packageName : spoofPackages) { + if (isSpoofPackageInstalled(packageName)) { + return true; + } + } + return false; } public static void fixGapps() { @@ -52,10 +52,10 @@ public class GmsHook { notificationManager.createNotificationChannel(new NotificationChannel("audio_playback_channel", AndroidUtils.getResources().getString(R.string.audio_message_play_error), NotificationManager.IMPORTANCE_LOW)); } } - } // Music channels fix + } public static String replaceGMSPackage(String str) { - return needToSpoof ? str.replaceAll("com.google", (isFakeGms2Installed() ? "app.revanced" : "com.mgoogle")) : str; + return shouldSpoof() ? str.replaceAll("com.google", currentGms) : str; } public static String getFirebaseInstanceIdReceiver() { @@ -63,6 +63,37 @@ public class GmsHook { } public static Class getFirebaseInstanceIdReceiverClass() { - return needToSpoof ? (isFakeGms2Installed() ? FirebaseInstanceIdReceiver3.class : FirebaseInstanceIdReceiver2.class) : FirebaseInstanceIdReceiver.class; + return getSpoofFirebaseInstanceIdReceiverClass(); } -} + + public static String getCurrentGms() { + return currentGms; + } + + private static boolean shouldSpoof() { + return !isGmsInstalled() && (isSpoofPackageInstalled("com.mgoogle") || isSpoofPackageInstalled("app.revanced")); + } + + private static String getSpoofPackagePrefix() { + for (String packageName : spoofPackages) { + if (isSpoofPackageInstalled(packageName)) { + return packageName; + } + } + return "com.google"; + } + + private static Class getSpoofFirebaseInstanceIdReceiverClass() { + switch (currentGms) { + case "com.mgoogle" -> { + return FirebaseInstanceIdReceiver2.class; + } + case "app.revanced" -> { + return FirebaseInstanceIdReceiver3.class; + } + default -> { + return FirebaseInstanceIdReceiver.class; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/vtosters/lite/deviceinfo/Device.java b/app/src/main/java/ru/vtosters/lite/deviceinfo/Device.java index 4d722e2af..439426d34 100644 --- a/app/src/main/java/ru/vtosters/lite/deviceinfo/Device.java +++ b/app/src/main/java/ru/vtosters/lite/deviceinfo/Device.java @@ -115,7 +115,7 @@ public class Device { + "- Manufacturer: " + this.manufacturerName + "\n" + "- Brand: " + this.brandName + "\n" + "- Model: " + this.modelName + "\n" - + (isMIUI() ? "- Miui Version Code: " + this.MiuiUiVersionCode + "\n" + "- Miui Version Name: " + this.MiuiUiVersionName + "\n" : "") + + (isMIUI() || isHyperOs() ? "- Miui/HyperOS Version Code: " + this.MiuiUiVersionCode + "\n" + "- Miui/HyperOS Version Name: " + this.MiuiUiVersionName + "\n" : "") + (isSamsung() ? "- OneUi Major Version: " + this.OneUiMajorVersion + "\n" + "- OneUi Minor Version: " + this.OneUiMinorVersion + "\n" : "") + (hasMiuiIncrCode() ? "- Miui Version Incremental Code: " + this.MiuiIncrementalCode + "\n" : "") + (isEMUI() ? "- Emui Version: " + this.EmuiVersion : ""); diff --git a/app/src/main/java/ru/vtosters/lite/deviceinfo/OEMDetector.java b/app/src/main/java/ru/vtosters/lite/deviceinfo/OEMDetector.java index 6996248da..6180066b7 100644 --- a/app/src/main/java/ru/vtosters/lite/deviceinfo/OEMDetector.java +++ b/app/src/main/java/ru/vtosters/lite/deviceinfo/OEMDetector.java @@ -56,7 +56,7 @@ public class OEMDetector { } public static boolean isOEM() { - return isMIUI() || isEMUI() || isFlyme() || isZenUI() || isSamsung() || isVivo() || isOneUi(); + return isMIUI() || isEMUI() || isFlyme() || isZenUI() || isSamsung() || isVivo() || isOneUi() || isHyperOs(); } public static boolean isMIUI() { @@ -68,6 +68,15 @@ public class OEMDetector { } } + public static boolean isHyperOs() { + try { + int prop = Integer.parseInt(getSystemProperty("ro.system.build.version.release_or_codename")); + return prop >= 14 && isMIUI(); + } catch (Exception unused) { + return false; + } + } + public static boolean isIntentResolved(Context ctx, Intent intent) { return (intent != null && ctx.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null); } @@ -124,7 +133,6 @@ public class OEMDetector { try { return (String) getPropMtd.invoke(null, prop); } catch (Throwable e) { - e.printStackTrace(); return null; } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/InstallGMS.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/InstallGMS.java index 73223b94c..30108f3dd 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/InstallGMS.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/InstallGMS.java @@ -10,7 +10,7 @@ import ru.vtosters.lite.utils.NavigatorUtils; public class InstallGMS { public static void alert(final Activity activity) { - if (!GmsHook.isAnyServicesInstalled() && Preferences.getBoolValue("showAlertGms", true)) { + if (!GmsHook.isAnyServicesInstalled() && !GmsHook.isGmsInstalled() && Preferences.getBoolValue("showAlertGms", true)) { new VkAlertDialog.Builder(activity) .setTitle(activity.getString(R.string.warning)) .setMessage(activity.getString(R.string.gmsissuesumm)) diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java index 95c94ad40..fed359699 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java @@ -60,12 +60,12 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment { return true; }); - findPreference("microgsettings").setVisible(GmsHook.isFakeGmsInstalled() && !GmsHook.isGmsInstalled()); + findPreference("microgsettings").setVisible(GmsHook.isAnyServicesInstalled() && !GmsHook.isGmsInstalled()); findPreference("microgsettings").setOnPreferenceClickListener(preference -> { try { Intent intent = new Intent(Intent.ACTION_MAIN); - intent.setComponent(new ComponentName((GmsHook.isFakeGms2Installed() ? "app.revanced.android.gms" : "com.mgoogle.android.gms"), "org.microg.gms.ui.SettingsActivity")); + intent.setComponent(new ComponentName(GmsHook.getCurrentGms() + ".android.gms", "org.microg.gms.ui.SettingsActivity")); startActivity(intent); } catch (Exception e) { e.printStackTrace(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/SystemInfo.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/SystemInfo.java index 078416b69..625897422 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/SystemInfo.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/SystemInfo.java @@ -13,6 +13,8 @@ import ru.vtosters.lite.ui.PreferenceFragmentUtils; import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.VersionReader; +import static ru.vtosters.hooks.GmsHook.isSpoofPackageInstalled; + public class SystemInfo extends TrackedMaterialPreferenceToolbarFragment { @Override @@ -46,11 +48,11 @@ public class SystemInfo extends TrackedMaterialPreferenceToolbarFragment { boolean isZenUI = OEMDetector.isZenUI(); boolean isEMUI = OEMDetector.isEMUI(); boolean hasMiuiIncrCode = OEMDetector.hasMiuiIncrCode(); + boolean isHyperOS = OEMDetector.isHyperOs(); boolean hasGMS = GmsHook.isGmsInstalled(); - boolean hasVancedMicroG = GmsHook.isFakeGmsInstalled(); - boolean hasReVancedMicroG = GmsHook.isFakeGms2Installed(); - String GMSPackageName = hasGMS ? "com.google.android.gms" : hasVancedMicroG ? "com.mgoogle.android.gms" : hasReVancedMicroG ? "app.revanced.android.gms" : "no gms or microg"; + boolean hasVancedMicroG = GmsHook.isAnyServicesInstalled(); + String GMSPackageName = hasGMS ? "com.google.android.gms" : hasVancedMicroG ? GmsHook.getCurrentGms() + ".android.gms" : "no gms or microg"; boolean isValidSignature = Preferences.isValidSignature(); boolean isTablet = AndroidUtils.isTablet(); @@ -104,9 +106,7 @@ public class SystemInfo extends TrackedMaterialPreferenceToolbarFragment { PreferenceFragmentUtils.addPreference(getPreferenceScreen(), "", "isInstalledGoogleGMS", "Value: " + hasGMS, 0, null); - PreferenceFragmentUtils.addPreference(getPreferenceScreen(), "", "isInstalledVancedMicroG", "Value: " + hasVancedMicroG, 0, null); - - PreferenceFragmentUtils.addPreference(getPreferenceScreen(), "", "isInstalledReVancedMicroG", "Value: " + hasReVancedMicroG, 0, null); + PreferenceFragmentUtils.addPreference(getPreferenceScreen(), "", "isInstalledMicroG", "Value: " + hasVancedMicroG, 0, null); PreferenceFragmentUtils.addPreference(getPreferenceScreen(), "", "Product Name", productName, 0, preference -> { ((ClipboardManager) requireActivity().getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText("MBH-ST", productName)); @@ -194,6 +194,8 @@ public class SystemInfo extends TrackedMaterialPreferenceToolbarFragment { PreferenceFragmentUtils.addPreference(getPreferenceScreen(), "", "isMiui", "Value: " + isMiui, 0, null); + PreferenceFragmentUtils.addPreference(getPreferenceScreen(), "", "isHyperOS", "Value: " + isHyperOS, 0, null); + PreferenceFragmentUtils.addPreference(getPreferenceScreen(), "", "isEMUI", "Value: " + isEMUI, 0, null); PreferenceFragmentUtils.addPreference(getPreferenceScreen(), "", "isFlyme", "Value: " + isFlyme, 0, null); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java index 221a481d8..99c9472cd 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java @@ -108,7 +108,7 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment { boolean isLinksUnverified = AndroidUtils.isLinksUnverified(requireActivity()); boolean isDozingAvailable = Build.VERSION.SDK_INT >= 23 && !manager.isIgnoringBatteryOptimizations(AndroidUtils.getPackageName()); boolean areNotificationsDisabled = !AndroidUtils.areNotificationsEnabled() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O; - boolean isGMSNotInstalled = !GmsHook.isAnyServicesInstalled(); + boolean isGMSNotInstalled = !GmsHook.isAnyServicesInstalled() && !GmsHook.isGmsInstalled(); if (AccountManagerUtils.isLogin()) { Preference accountSwitcher = PreferenceFragmentUtils.addPreference( @@ -584,7 +584,7 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment { } ); - if (Build.VERSION.SDK_INT >= 33 && !OEMDetector.isMIUI()) { + if (Build.VERSION.SDK_INT >= 33 && (!OEMDetector.isMIUI() || OEMDetector.isHyperOs())) { PreferenceFragmentUtils.addPreference( getPreferenceScreen(), "",