Files
app_Settings/src/com/android/settings/spa/app/appinfo/AppCreateButton.kt
Ankita Vyas 0da1131343 Display toast for clone app creation and completion in App Info page.
Bug: 271990959
Test: manual
Change-Id: I93641c1bf675ac531fbf8201203d5141aafd39cc
2023-03-08 10:55:37 +00:00

81 lines
3.4 KiB
Kotlin

/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.spa.app.appinfo
import android.app.settings.SettingsEnums
import android.content.pm.ApplicationInfo
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Add
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.rememberCoroutineScope
import com.android.settings.R
import com.android.settings.applications.manageapplications.CloneBackend
import com.android.settings.overlay.FeatureFactory
import com.android.settings.spa.app.appinfo.AppInfoSettingsProvider.getRoute
import com.android.settingslib.spa.framework.compose.LocalNavController
import com.android.settingslib.spa.widget.button.ActionButton
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import android.widget.Toast;
class AppCreateButton(packageInfoPresenter: PackageInfoPresenter) {
private val context = packageInfoPresenter.context
val enabledState = mutableStateOf(true)
@Composable
fun getActionButton(app: ApplicationInfo): ActionButton? {
return createButton(app)
}
@Composable
private fun createButton(app: ApplicationInfo): ActionButton {
val coroutineScope = rememberCoroutineScope()
val navController = LocalNavController.current
return ActionButton(
text = context.getString(R.string.create),
imageVector = Icons.Outlined.Add,
enabled = enabledState.value,
)
{
val cloneBackend = CloneBackend.getInstance(context)
FeatureFactory.getFactory(context).metricsFeatureProvider.action(context,
SettingsEnums.ACTION_CREATE_CLONE_APP)
val appLabel = app.loadLabel(context.packageManager)
Toast.makeText(context, context.getString(R.string.cloned_app_creation_toast_summary,
appLabel),Toast.LENGTH_SHORT).show()
coroutineScope.launch {
enabledState.value = false
val result = installCloneApp(app, cloneBackend)
if (result == CloneBackend.SUCCESS) {
Toast.makeText(context,
context.getString(R.string.cloned_app_created_toast_summary, appLabel),
Toast.LENGTH_SHORT).show()
navController.navigate(getRoute(app.packageName, cloneBackend.cloneUserId),
/* popUpCurrent*/ true)
} else {
enabledState.value = true
}
}
}
}
private suspend fun installCloneApp(app: ApplicationInfo, cloneBackend: CloneBackend): Int = withContext(Dispatchers.IO) {
cloneBackend.installCloneApp(app.packageName)
}
}