update InstallAppActivity

This commit is contained in:
BinTianqi
2024-07-02 15:21:45 +08:00
parent ea7c04a485
commit 9098335c3d
3 changed files with 47 additions and 18 deletions

View File

@@ -7,10 +7,18 @@ import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
@@ -29,6 +37,7 @@ class InstallAppActivity: FragmentActivity() {
val sharedPref = applicationContext.getSharedPreferences("data", Context.MODE_PRIVATE) val sharedPref = applicationContext.getSharedPreferences("data", Context.MODE_PRIVATE)
window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
setContent { setContent {
var installing by remember { mutableStateOf(false) }
OwnDroidTheme( OwnDroidTheme(
sharedPref.getBoolean("material_you", true), sharedPref.getBoolean("material_you", true),
sharedPref.getBoolean("black_theme", false) sharedPref.getBoolean("black_theme", false)
@@ -40,13 +49,19 @@ class InstallAppActivity: FragmentActivity() {
onDismissRequest = { onDismissRequest = {
finish() finish()
}, },
text = {
AnimatedVisibility(installing) {
LinearProgressIndicator(modifier = Modifier.fillMaxWidth())
}
},
dismissButton = { dismissButton = {
TextButton(onClick = { finish() }) { Text(stringResource(R.string.cancel)) } TextButton(onClick = { finish() }) { Text(stringResource(R.string.cancel)) }
}, },
confirmButton = { confirmButton = {
TextButton( TextButton(
onClick = { onClick = {
uriToStream(applicationContext, this.intent.data) { stream -> installPackage(applicationContext, stream)} installing = true
uriToStream(applicationContext, this.intent.data) { stream -> installPackage(applicationContext, stream) }
} }
) { ) {
Text(stringResource(R.string.confirm)) Text(stringResource(R.string.confirm))
@@ -55,6 +70,10 @@ class InstallAppActivity: FragmentActivity() {
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
) )
} }
val installDone by installAppDone.collectAsState()
LaunchedEffect(installDone) {
if(installDone) finish()
}
} }
} }
} }

View File

@@ -12,6 +12,7 @@ import android.widget.Toast
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import com.bintianqi.owndroid.dpm.isDeviceOwner import com.bintianqi.owndroid.dpm.isDeviceOwner
import com.bintianqi.owndroid.dpm.isProfileOwner import com.bintianqi.owndroid.dpm.isProfileOwner
import kotlinx.coroutines.flow.MutableStateFlow
class Receiver : DeviceAdminReceiver() { class Receiver : DeviceAdminReceiver() {
override fun onEnabled(context: Context, intent: Intent) { override fun onEnabled(context: Context, intent: Intent) {
@@ -35,23 +36,28 @@ class Receiver : DeviceAdminReceiver() {
} }
val installAppDone = MutableStateFlow(false)
class PackageInstallerReceiver:BroadcastReceiver(){ class PackageInstallerReceiver:BroadcastReceiver(){
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
val toastText = when(intent.getIntExtra(EXTRA_STATUS,999)){ val toastText = when(intent.getIntExtra(EXTRA_STATUS, 999)){
STATUS_PENDING_USER_ACTION->R.string.status_pending_action STATUS_PENDING_USER_ACTION -> R.string.status_pending_action
STATUS_SUCCESS->R.string.success STATUS_SUCCESS -> R.string.success
STATUS_FAILURE->R.string.failed STATUS_FAILURE -> R.string.failed
STATUS_FAILURE_BLOCKED->R.string.status_fail_blocked STATUS_FAILURE_BLOCKED -> R.string.status_fail_blocked
STATUS_FAILURE_ABORTED->R.string.status_fail_aborted STATUS_FAILURE_ABORTED -> R.string.status_fail_aborted
STATUS_FAILURE_INVALID->R.string.status_fail_invalid STATUS_FAILURE_INVALID -> R.string.status_fail_invalid
STATUS_FAILURE_CONFLICT->R.string.status_fail_conflict STATUS_FAILURE_CONFLICT -> R.string.status_fail_conflict
STATUS_FAILURE_STORAGE->R.string.status_fail_storage STATUS_FAILURE_STORAGE -> R.string.status_fail_storage
STATUS_FAILURE_INCOMPATIBLE->R.string.status_fail_incompatible STATUS_FAILURE_INCOMPATIBLE -> R.string.status_fail_incompatible
STATUS_FAILURE_TIMEOUT->R.string.status_fail_timeout STATUS_FAILURE_TIMEOUT -> R.string.status_fail_timeout
else->R.string.unknown else -> 999
}
Log.e("OwnDroid", intent.getIntExtra(EXTRA_STATUS, 999).toString())
installAppDone.value = true
if(toastText != 999){
val text = context.getString(R.string.app_installer_status) + context.getString(toastText)
Toast.makeText(context, text, Toast.LENGTH_SHORT).show()
} }
Log.e("OwnDroid", intent.getIntExtra(EXTRA_STATUS,999).toString())
val text = context.getString(R.string.app_installer_status) + context.getString(toastText)
if(toastText!=999){Toast.makeText(context, text, Toast.LENGTH_SHORT).show()}
} }
} }

View File

@@ -78,6 +78,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.InstallAppActivity
import com.bintianqi.owndroid.PackageInstallerReceiver import com.bintianqi.owndroid.PackageInstallerReceiver
import com.bintianqi.owndroid.R import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver import com.bintianqi.owndroid.Receiver
@@ -90,7 +91,6 @@ import com.bintianqi.owndroid.ui.RadioButtonItem
import com.bintianqi.owndroid.ui.SubPageItem import com.bintianqi.owndroid.ui.SubPageItem
import com.bintianqi.owndroid.ui.SwitchItem import com.bintianqi.owndroid.ui.SwitchItem
import com.bintianqi.owndroid.ui.TopBar import com.bintianqi.owndroid.ui.TopBar
import com.bintianqi.owndroid.uriToStream
import java.util.concurrent.Executors import java.util.concurrent.Executors
private var dialogConfirmButtonAction = {} private var dialogConfirmButtonAction = {}
@@ -949,7 +949,11 @@ private fun InstallApp() {
Spacer(Modifier.padding(vertical = 3.dp)) Spacer(Modifier.padding(vertical = 3.dp))
Column(modifier = Modifier.fillMaxWidth()) { Column(modifier = Modifier.fillMaxWidth()) {
Button( Button(
onClick = { uriToStream(context, fileUriFlow.value) { stream -> installPackage(context,stream)} }, onClick = {
val intent = Intent(context, InstallAppActivity::class.java)
intent.data = fileUriFlow.value
context.startActivity(intent)
},
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
) { ) {
Text(stringResource(R.string.silent_install)) Text(stringResource(R.string.silent_install))