diff --git a/WordPress/src/main/java/org/wordpress/android/ui/accounts/login/applicationpassword/ApplicationPasswordDialogActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/accounts/login/applicationpassword/ApplicationPasswordDialogActivity.kt
index b0c76490ee7e..cb570fb14c36 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/accounts/login/applicationpassword/ApplicationPasswordDialogActivity.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/accounts/login/applicationpassword/ApplicationPasswordDialogActivity.kt
@@ -8,6 +8,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Lock
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
+import androidx.compose.material3.TextButton
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
@@ -17,8 +18,6 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
import androidx.compose.ui.unit.dp
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
@@ -69,8 +68,12 @@ abstract class ApplicationPasswordDialogActivity : ComponentActivity() {
setContent {
AppThemeM3 {
- ApplicationPasswordReauthenticateDialog(
- viewModel = viewModel,
+ val isLoading = viewModel.isLoading.collectAsState()
+ ApplicationPasswordDialog(
+ title = stringResource(getTitleResource()),
+ description = getDescriptionString(),
+ buttonText = getButtonTextResource(),
+ isLoading = isLoading.value,
onDismiss = {
finish()
},
@@ -86,100 +89,93 @@ abstract class ApplicationPasswordDialogActivity : ComponentActivity() {
protected abstract fun getDescriptionString(): String
protected abstract fun getButtonTextResource(): Int
- @Composable
- fun ApplicationPasswordReauthenticateDialog(
- viewModel: ApplicationPasswordDialogViewModel,
- onDismiss: () -> Unit,
- onConfirm: () -> Unit,
- ) {
- val isLoading = viewModel.isLoading.collectAsState()
- AlertDialog(
- onDismissRequest = onDismiss,
- icon = {
- Icon(
- imageVector = Icons.Outlined.Lock,
- contentDescription = null
- )
- },
- title = { Text(text = stringResource(getTitleResource())) },
- text = {
- Column(
- modifier = androidx.compose.ui.Modifier.verticalScroll(rememberScrollState())
- ) {
- Text(text = getDescriptionString())
- }
- },
- confirmButton = {
- Button(
- onClick = {
- onConfirm()
- },
- enabled = !isLoading.value
- ) {
- if (isLoading.value) {
- CircularProgressIndicator(
- modifier = androidx.compose.ui.Modifier.size(16.dp),
- strokeWidth = 2.dp
- )
- } else {
- Text(text = stringResource(getButtonTextResource()))
- }
- }
- }
- )
- }
-
- @Preview
- @Preview(uiMode = UI_MODE_NIGHT_YES)
- @Composable
- fun ApplicationPasswordReauthenticateDialogPreview() {
- AppThemeM3 {
- ApplicationPasswordReauthenticateDialogPreviewContent()
- }
+ companion object {
+ const val EXTRA_SITE_URL = "site_url_arg"
}
+}
- @Composable
- private fun ApplicationPasswordReauthenticateDialogPreviewContent() {
- val isLoading = remember { mutableStateOf(false) }
-
- AlertDialog(
- onDismissRequest = {},
- icon = {
- Icon(
- imageVector = Icons.Outlined.Lock,
- contentDescription = null
- )
- },
- title = { Text(text = stringResource(R.string.application_password_invalid)) },
- text = {
- Column(
- modifier = androidx.compose.ui.Modifier.verticalScroll(rememberScrollState())
- ) {
- Text(text = stringResource(R.string.application_password_invalid_description))
- }
- },
- confirmButton = {
- Button(
- onClick = {
- isLoading.value = !isLoading.value
- },
- enabled = !isLoading.value
- ) {
- if (isLoading.value) {
- CircularProgressIndicator(
- modifier = androidx.compose.ui.Modifier.size(16.dp),
- strokeWidth = 2.dp
- )
- } else {
- Text(text = stringResource(R.string.log_in))
- }
+@Composable
+fun ApplicationPasswordDialog(
+ title: String,
+ description: String,
+ buttonText: Int,
+ isLoading: Boolean,
+ onDismiss: () -> Unit,
+ onConfirm: () -> Unit,
+) {
+ AlertDialog(
+ onDismissRequest = onDismiss,
+ icon = {
+ Icon(
+ imageVector = Icons.Outlined.Lock,
+ contentDescription = null
+ )
+ },
+ title = { Text(text = title) },
+ text = {
+ Column(
+ modifier = androidx.compose.ui.Modifier.verticalScroll(rememberScrollState())
+ ) {
+ Text(text = description)
+ }
+ },
+ dismissButton = {
+ TextButton(
+ onClick = onDismiss,
+ enabled = !isLoading
+ ) {
+ Text(text = stringResource(R.string.cancel))
+ }
+ },
+ confirmButton = {
+ Button(
+ onClick = {
+ onConfirm()
+ },
+ enabled = !isLoading
+ ) {
+ if (isLoading) {
+ CircularProgressIndicator(
+ modifier = androidx.compose.ui.Modifier.size(16.dp),
+ strokeWidth = 2.dp
+ )
+ } else {
+ Text(text = stringResource(buttonText))
}
}
+ }
+ )
+}
+
+@Preview(showBackground = true)
+@Preview(showBackground = true, uiMode = UI_MODE_NIGHT_YES)
+@Composable
+fun ApplicationPasswordDialogPreview() {
+ AppThemeM3 {
+ ApplicationPasswordDialog(
+ title = "Application Password Required",
+ description = "To use this feature, you need to create an application password. " +
+ "This is a secure way to authenticate without using your main password.",
+ buttonText = R.string.get_started,
+ isLoading = false,
+ onDismiss = {},
+ onConfirm = {}
)
}
+}
- companion object {
- const val EXTRA_SITE_URL = "site_url_arg"
+@Preview(showBackground = true)
+@Composable
+fun ApplicationPasswordDialogLoadingPreview() {
+ AppThemeM3 {
+ ApplicationPasswordDialog(
+ title = "Application Password Required",
+ description = "To use this feature, you need to create an application password. " +
+ "This is a secure way to authenticate without using your main password.",
+ buttonText = R.string.get_started,
+ isLoading = true,
+ onDismiss = {},
+ onConfirm = {}
+ )
}
}
-
diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml
index e0aa2ff29618..85e1ac466e62 100644
--- a/WordPress/src/main/res/values/strings.xml
+++ b/WordPress/src/main/res/values/strings.xml
@@ -5058,7 +5058,7 @@ translators: %s: Select control option value e.g: "Auto, 25%". -->
Authenticate using Application Password
The provided site does not support Application Password authentication.
Invalid Application Password
- Your application password no longer exists. Please sign in again to create a new application password
+ Your application password no longer exists. Please sign in again to create a new application password.
Application Password Required
Application passwords are a more secure way to connect to your self-hosted site, and enable support for features like %1$s.
Block Editor