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 androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.Text
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.res.stringResource
import androidx.fragment.app.FragmentActivity
@@ -29,6 +37,7 @@ class InstallAppActivity: FragmentActivity() {
val sharedPref = applicationContext.getSharedPreferences("data", Context.MODE_PRIVATE)
window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
setContent {
var installing by remember { mutableStateOf(false) }
OwnDroidTheme(
sharedPref.getBoolean("material_you", true),
sharedPref.getBoolean("black_theme", false)
@@ -40,13 +49,19 @@ class InstallAppActivity: FragmentActivity() {
onDismissRequest = {
finish()
},
text = {
AnimatedVisibility(installing) {
LinearProgressIndicator(modifier = Modifier.fillMaxWidth())
}
},
dismissButton = {
TextButton(onClick = { finish() }) { Text(stringResource(R.string.cancel)) }
},
confirmButton = {
TextButton(
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))
@@ -55,6 +70,10 @@ class InstallAppActivity: FragmentActivity() {
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 com.bintianqi.owndroid.dpm.isDeviceOwner
import com.bintianqi.owndroid.dpm.isProfileOwner
import kotlinx.coroutines.flow.MutableStateFlow
class Receiver : DeviceAdminReceiver() {
override fun onEnabled(context: Context, intent: Intent) {
@@ -35,23 +36,28 @@ class Receiver : DeviceAdminReceiver() {
}
val installAppDone = MutableStateFlow(false)
class PackageInstallerReceiver:BroadcastReceiver(){
override fun onReceive(context: Context, intent: Intent) {
val toastText = when(intent.getIntExtra(EXTRA_STATUS,999)){
STATUS_PENDING_USER_ACTION->R.string.status_pending_action
STATUS_SUCCESS->R.string.success
STATUS_FAILURE->R.string.failed
STATUS_FAILURE_BLOCKED->R.string.status_fail_blocked
STATUS_FAILURE_ABORTED->R.string.status_fail_aborted
STATUS_FAILURE_INVALID->R.string.status_fail_invalid
STATUS_FAILURE_CONFLICT->R.string.status_fail_conflict
STATUS_FAILURE_STORAGE->R.string.status_fail_storage
STATUS_FAILURE_INCOMPATIBLE->R.string.status_fail_incompatible
STATUS_FAILURE_TIMEOUT->R.string.status_fail_timeout
else->R.string.unknown
val toastText = when(intent.getIntExtra(EXTRA_STATUS, 999)){
STATUS_PENDING_USER_ACTION -> R.string.status_pending_action
STATUS_SUCCESS -> R.string.success
STATUS_FAILURE -> R.string.failed
STATUS_FAILURE_BLOCKED -> R.string.status_fail_blocked
STATUS_FAILURE_ABORTED -> R.string.status_fail_aborted
STATUS_FAILURE_INVALID -> R.string.status_fail_invalid
STATUS_FAILURE_CONFLICT -> R.string.status_fail_conflict
STATUS_FAILURE_STORAGE -> R.string.status_fail_storage
STATUS_FAILURE_INCOMPATIBLE -> R.string.status_fail_incompatible
STATUS_FAILURE_TIMEOUT -> R.string.status_fail_timeout
else -> 999
}
Log.e("OwnDroid", intent.getIntExtra(EXTRA_STATUS,999).toString())
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)
if(toastText!=999){Toast.makeText(context, text, Toast.LENGTH_SHORT).show()}
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.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.InstallAppActivity
import com.bintianqi.owndroid.PackageInstallerReceiver
import com.bintianqi.owndroid.R
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.SwitchItem
import com.bintianqi.owndroid.ui.TopBar
import com.bintianqi.owndroid.uriToStream
import java.util.concurrent.Executors
private var dialogConfirmButtonAction = {}
@@ -949,7 +949,11 @@ private fun InstallApp() {
Spacer(Modifier.padding(vertical = 3.dp))
Column(modifier = Modifier.fillMaxWidth()) {
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()
) {
Text(stringResource(R.string.silent_install))