Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import android.os.Build
import androidx.annotation.ChecksSdkIntAtLeast

object BuildCompat {
@get:ChecksSdkIntAtLeast(api = 37)
val atLeastC get() = Build.VERSION.SDK_INT >= 37

@get:ChecksSdkIntAtLeast(api = Build.VERSION_CODES.VANILLA_ICE_CREAM)
val atLeastV get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package android.content.pm;

import android.os.IInterface;
import android.os.RemoteException;

import androidx.annotation.RequiresApi;

import dev.rikka.tools.refine.RefineAs;

@RequiresApi(37)
@RefineAs(IPackageManager.class)
public interface IPackageManagerV37 extends IInterface {
PackageInfoList getInstalledPackages(long flags, int userId) throws RemoteException;
}
18 changes: 18 additions & 0 deletions hidden-api/src/main/java/android/content/pm/PackageInfoList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package android.content.pm;

import android.content.pm.PackageInfo;
import java.util.List;

import androidx.annotation.RequiresApi;

@RequiresApi(37)
public final class PackageInfoList extends ParceledListSlice<PackageInfo> {
public static PackageInfoList emptyList() {
throw new RuntimeException("Stub!");
}

public PackageInfoList(List<PackageInfo> list) {
super(list);
throw new RuntimeException("Stub!");
}
}
4 changes: 3 additions & 1 deletion platform/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ plugins {
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.ksp)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.rikka.refine)
}

android {
Expand Down Expand Up @@ -91,6 +92,7 @@ dependencies {
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.serialization.protobuf)
implementation(libs.square.moshi)
implementation(libs.rikka.refine.runtime)
ksp(libs.square.moshi.kotlin)
}

Expand All @@ -104,4 +106,4 @@ fun generateRandomName(
return (1..length)
.map { chars[random.nextInt(chars.length)] }
.joinToString("")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package com.dergoogler.mmrl.platform.hiddenApi
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.IPackageManager
import android.content.pm.IPackageManagerV37
import android.content.pm.PackageInfo
import android.content.pm.ResolveInfo
import android.os.SystemProperties
Expand All @@ -13,6 +14,8 @@ import com.dergoogler.mmrl.compat.BuildCompat
import com.dergoogler.mmrl.platform.PlatformManager.getSystemService
import com.dergoogler.mmrl.platform.stub.IServiceManager

import dev.rikka.tools.refine.Refine;

class HiddenPackageManager(
private val service: IServiceManager,
) {
Expand Down Expand Up @@ -59,7 +62,9 @@ class HiddenPackageManager(
flags: Int,
userId: Int,
): List<PackageInfo> =
if (BuildCompat.atLeastT) {
if (BuildCompat.atLeastC) {
Refine.unsafeCast<IPackageManagerV37>(packageManager).getInstalledPackages(flags.toLong(), userId).list
} else if (BuildCompat.atLeastT) {
packageManager.getInstalledPackages(flags.toLong(), userId)
} else {
packageManager.getInstalledPackages(flags, userId)
Expand Down