package com.bintianqi.owndroid.dpm import android.app.PendingIntent import android.app.admin.DevicePolicyManager import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.PackageInstaller import android.os.Build.VERSION import androidx.activity.result.ActivityResultLauncher import com.bintianqi.owndroid.PackageInstallerReceiver import kotlinx.coroutines.flow.MutableStateFlow import java.io.IOException import java.io.InputStream var selectedPermission = MutableStateFlow("") lateinit var createManagedProfile: ActivityResultLauncher lateinit var addDeviceAdmin: ActivityResultLauncher fun isDeviceOwner(dpm: DevicePolicyManager): Boolean { return dpm.isDeviceOwnerApp("com.bintianqi.owndroid") } fun isProfileOwner(dpm: DevicePolicyManager): Boolean { return dpm.isProfileOwnerApp("com.bintianqi.owndroid") } fun DevicePolicyManager.isOrgProfile(receiver: ComponentName):Boolean { return VERSION.SDK_INT >= 30 && isProfileOwner(this) && isManagedProfile(receiver) && isOrganizationOwnedDeviceWithManagedProfile } @Throws(IOException::class) fun installPackage(context: Context, inputStream: InputStream) { val packageInstaller = context.packageManager.packageInstaller val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL) val sessionId = packageInstaller.createSession(params) val session = packageInstaller.openSession(sessionId) val out = session.openWrite("COSU", 0, -1) val buffer = ByteArray(65536) var c: Int while(inputStream.read(buffer).also{c = it}!=-1) { out.write(buffer, 0, c) } session.fsync(out) inputStream.close() out.close() val intent = Intent(context, PackageInstallerReceiver::class.java) val pendingIntent = PendingIntent.getBroadcast(context, sessionId, intent, PendingIntent.FLAG_IMMUTABLE).intentSender session.commit(pendingIntent) }