Skip to content

Commit

Permalink
hyperos support + gms refactored
Browse files Browse the repository at this point in the history
  • Loading branch information
gdlbo committed Mar 29, 2024
1 parent 126f525 commit 46c4f1c
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 39 deletions.
81 changes: 56 additions & 25 deletions app/src/main/java/ru/vtosters/hooks/GmsHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,37 +11,37 @@
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;

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
static {
currentGms = getSpoofPackagePrefix();
}

public static boolean isFakeGmsInstalled() {
private static boolean isPackageInstalled(String packageName) {
try {
AndroidUtils.getGlobalContext().getPackageManager().getPackageInfo("com.mgoogle.android.gms", 0);
AndroidUtils.getGlobalContext().getPackageManager().getPackageInfo(packageName, 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 isGmsInstalled() {
return isPackageInstalled("com.google.android.gms");
}

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() {
Expand All @@ -52,17 +52,48 @@ public static void fixGapps() {
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() {
return getFirebaseInstanceIdReceiverClass().getName();
}

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;
}
}
}
}
}
2 changes: 1 addition & 1 deletion app/src/main/java/ru/vtosters/lite/deviceinfo/Device.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public String forLogging() {
+ "- 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 : "");
Expand Down
12 changes: 10 additions & 2 deletions app/src/main/java/ru/vtosters/lite/deviceinfo/OEMDetector.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public static float getOneUiMinorVersion() {
}

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() {
Expand All @@ -68,6 +68,15 @@ public static boolean isMIUI() {
}
}

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);
}
Expand Down Expand Up @@ -124,7 +133,6 @@ public static String getSystemProperty(String prop) {
try {
return (String) getPropMtd.invoke(null, prop);
} catch (Throwable e) {
e.printStackTrace();
return null;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

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))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,12 @@ private void prefs() {
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();
Expand Down
14 changes: 8 additions & 6 deletions app/src/main/java/ru/vtosters/lite/ui/fragments/SystemInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
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
Expand Down Expand Up @@ -46,11 +48,11 @@ public void onCreate(Bundle bundle) {
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();
Expand Down Expand Up @@ -104,9 +106,7 @@ public void onCreate(Bundle bundle) {

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));
Expand Down Expand Up @@ -194,6 +194,8 @@ public void onCreate(Bundle bundle) {

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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public void onCreate(Bundle bundle) {
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(
Expand Down Expand Up @@ -584,7 +584,7 @@ public void onCreate(Bundle bundle) {
}
);

if (Build.VERSION.SDK_INT >= 33 && !OEMDetector.isMIUI()) {
if (Build.VERSION.SDK_INT >= 33 && (!OEMDetector.isMIUI() || OEMDetector.isHyperOs())) {
PreferenceFragmentUtils.addPreference(
getPreferenceScreen(),
"",
Expand Down

0 comments on commit 46c4f1c

Please sign in to comment.