From 9098335c3df92ff0a666e7412dbeea2a20e3f054 Mon Sep 17 00:00:00 2001 From: BinTianqi Date: Tue, 2 Jul 2024 15:21:45 +0800 Subject: [PATCH] update InstallAppActivity --- .../bintianqi/owndroid/InstallAppActivity.kt | 21 ++++++++++- .../java/com/bintianqi/owndroid/Receiver.kt | 36 +++++++++++-------- .../owndroid/dpm/ApplicationManage.kt | 8 +++-- 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/bintianqi/owndroid/InstallAppActivity.kt b/app/src/main/java/com/bintianqi/owndroid/InstallAppActivity.kt index d5ef323..84f8802 100644 --- a/app/src/main/java/com/bintianqi/owndroid/InstallAppActivity.kt +++ b/app/src/main/java/com/bintianqi/owndroid/InstallAppActivity.kt @@ -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() + } } } } diff --git a/app/src/main/java/com/bintianqi/owndroid/Receiver.kt b/app/src/main/java/com/bintianqi/owndroid/Receiver.kt index 9837487..07e3597 100644 --- a/app/src/main/java/com/bintianqi/owndroid/Receiver.kt +++ b/app/src/main/java/com/bintianqi/owndroid/Receiver.kt @@ -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()) + 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()} } } diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/ApplicationManage.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/ApplicationManage.kt index b9d8542..8922642 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/ApplicationManage.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/ApplicationManage.kt @@ -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))