mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 11:05:59 +00:00
49 lines
1.9 KiB
Kotlin
49 lines
1.9 KiB
Kotlin
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<Intent>
|
|
lateinit var addDeviceAdmin: ActivityResultLauncher<Intent>
|
|
|
|
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)
|
|
}
|