mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-26 03:56:00 +00:00
Add WorkModesScreen
Update dependency Remove some Shizuku features
This commit is contained in:
72
app/src/main/java/com/bintianqi/owndroid/ShizukuService.kt
Normal file
72
app/src/main/java/com/bintianqi/owndroid/ShizukuService.kt
Normal file
@@ -0,0 +1,72 @@
|
||||
package com.bintianqi.owndroid
|
||||
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.ServiceConnection
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Bundle
|
||||
import android.os.IBinder
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.Keep
|
||||
import rikka.shizuku.Shizuku
|
||||
import rikka.sui.Sui
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
@Keep
|
||||
class ShizukuService: IUserService.Stub() {
|
||||
override fun execute(command: String): Bundle? {
|
||||
try {
|
||||
val bundle = Bundle()
|
||||
val process = Runtime.getRuntime().exec(command)
|
||||
val exitCode = process.waitFor()
|
||||
bundle.putInt("code", exitCode)
|
||||
bundle.putString("output", process.inputStream.readBytes().decodeToString())
|
||||
bundle.putString("error", process.errorStream.readBytes().decodeToString())
|
||||
return bundle
|
||||
} catch(e: Exception) {
|
||||
e.printStackTrace()
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
override fun destroy() {
|
||||
exitProcess(0)
|
||||
}
|
||||
}
|
||||
|
||||
fun getShizukuArgs(context: Context): Shizuku.UserServiceArgs {
|
||||
return Shizuku.UserServiceArgs(ComponentName(context, ShizukuService::class.java))
|
||||
.daemon(false)
|
||||
.processNameSuffix("shizuku-service")
|
||||
.debuggable(false)
|
||||
.version(1)
|
||||
}
|
||||
|
||||
fun useShizuku(context: Context, action: (IBinder?) -> Unit) {
|
||||
val connection = object : ServiceConnection {
|
||||
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
|
||||
action(service)
|
||||
Shizuku.unbindUserService(getShizukuArgs(context), this, true)
|
||||
}
|
||||
override fun onServiceDisconnected(name: ComponentName?) {}
|
||||
}
|
||||
try {
|
||||
if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) {
|
||||
Shizuku.bindUserService(getShizukuArgs(context), connection)
|
||||
} else if(Shizuku.shouldShowRequestPermissionRationale()) {
|
||||
Toast.makeText(context, R.string.permission_denied, Toast.LENGTH_SHORT).show()
|
||||
} else {
|
||||
Sui.init(context.packageName)
|
||||
fun requestPermissionResultListener(requestCode: Int, grantResult: Int) {
|
||||
if(grantResult != PackageManager.PERMISSION_GRANTED) {
|
||||
Toast.makeText(context, R.string.permission_denied, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
Shizuku.removeRequestPermissionResultListener(::requestPermissionResultListener)
|
||||
}
|
||||
Shizuku.addRequestPermissionResultListener(::requestPermissionResultListener)
|
||||
Shizuku.requestPermission(0)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user