Bug 1856970 - Translations UI Preference Screen Never Translate
parent
8c02de0307
commit
d18fff8e62
@ -0,0 +1,72 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.fenix.translations.preferences.nevertranslatesite
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.AlertDialog
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.compose.annotation.LightDarkPreview
|
||||
import org.mozilla.fenix.compose.button.TextButton
|
||||
import org.mozilla.fenix.theme.FirefoxTheme
|
||||
|
||||
/**
|
||||
* Firefox Preference: Never Translate Dialog compose view.
|
||||
*
|
||||
* @param websiteUrl Title of the dialog that should be display.
|
||||
* @param onConfirmDelete Invoked when the user clicks on the "Delete" dialog button.
|
||||
* @param onCancel Invoked when the user clicks on the "Cancel" dialog button.
|
||||
*/
|
||||
@Composable
|
||||
fun NeverTranslateSiteDialogPreference(
|
||||
websiteUrl: String,
|
||||
onConfirmDelete: () -> Unit,
|
||||
onCancel: () -> Unit,
|
||||
) {
|
||||
AlertDialog(
|
||||
onDismissRequest = {},
|
||||
modifier = Modifier.background(
|
||||
color = FirefoxTheme.colors.layer2,
|
||||
shape = RoundedCornerShape(8.dp),
|
||||
),
|
||||
title = {
|
||||
Text(
|
||||
text = stringResource(R.string.never_translate_site_dialog_title_preference, websiteUrl),
|
||||
color = FirefoxTheme.colors.textPrimary,
|
||||
style = FirefoxTheme.typography.headline7,
|
||||
)
|
||||
},
|
||||
confirmButton = {
|
||||
TextButton(
|
||||
text = stringResource(id = R.string.never_translate_site_dialog_confirm_delete_preference),
|
||||
onClick = { onConfirmDelete() },
|
||||
)
|
||||
},
|
||||
dismissButton = {
|
||||
TextButton(
|
||||
text = stringResource(id = R.string.never_translate_site_dialog_cancel_preference),
|
||||
onClick = { onCancel() },
|
||||
)
|
||||
},
|
||||
backgroundColor = FirefoxTheme.colors.layer2,
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
@LightDarkPreview
|
||||
private fun NeverTranslateSiteDialogPreferencePreview() {
|
||||
FirefoxTheme {
|
||||
NeverTranslateSiteDialogPreference(
|
||||
websiteUrl = "wikipedia.com",
|
||||
onConfirmDelete = {},
|
||||
onCancel = {},
|
||||
)
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.fenix.translations.preferences.nevertranslatesite
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import org.mozilla.fenix.theme.FirefoxTheme
|
||||
|
||||
/**
|
||||
* A dialog fragment displaying the Firefox Preference: never translate site item.
|
||||
*/
|
||||
class NeverTranslateSiteDialogPreferenceFragment : DialogFragment() {
|
||||
|
||||
private val args by navArgs<NeverTranslateSiteDialogPreferenceFragmentArgs>()
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
|
||||
super.onCreateDialog(savedInstanceState).apply {
|
||||
setOnShowListener {
|
||||
setCanceledOnTouchOutside(false)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?,
|
||||
): View = ComposeView(requireContext()).apply {
|
||||
setContent {
|
||||
FirefoxTheme {
|
||||
NeverTranslateSiteDialogPreference(
|
||||
websiteUrl = args.websiteUrl,
|
||||
onConfirmDelete = { findNavController().popBackStack() },
|
||||
onCancel = { findNavController().popBackStack() },
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.fenix.translations.preferences.nevertranslatesite
|
||||
|
||||
/**
|
||||
* NeverTranslateSiteListItemPreference that will appear on [NeverTranslateSitePreferenceFragment] screens.
|
||||
*
|
||||
* @property websiteUrl The text that will appear on the item list.
|
||||
*/
|
||||
data class NeverTranslateSiteListItemPreference(val websiteUrl: String)
|
@ -0,0 +1,104 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.fenix.translations.preferences.nevertranslatesite
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.Role
|
||||
import androidx.compose.ui.semantics.clearAndSetSemantics
|
||||
import androidx.compose.ui.semantics.contentDescription
|
||||
import androidx.compose.ui.semantics.heading
|
||||
import androidx.compose.ui.semantics.role
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
import androidx.compose.ui.unit.dp
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.compose.annotation.LightDarkPreview
|
||||
import org.mozilla.fenix.compose.list.TextListItem
|
||||
import org.mozilla.fenix.theme.FirefoxTheme
|
||||
|
||||
/**
|
||||
* Firefox Preference: Never Translate Site preference screen.
|
||||
*
|
||||
* @param neverTranslateSiteListPreferences List of [NeverTranslateSiteListItemPreference]s to display.
|
||||
* @param onItemClick Invoked when the user clicks on the a item from the list.
|
||||
*/
|
||||
@Composable
|
||||
fun NeverTranslateSitePreference(
|
||||
neverTranslateSiteListPreferences: List<NeverTranslateSiteListItemPreference>,
|
||||
onItemClick: (NeverTranslateSiteListItemPreference) -> Unit,
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.background(
|
||||
color = FirefoxTheme.colors.layer1,
|
||||
),
|
||||
) {
|
||||
TextListItem(
|
||||
label = stringResource(R.string.never_translate_site_header_preference),
|
||||
modifier = Modifier
|
||||
.padding(
|
||||
start = 56.dp,
|
||||
)
|
||||
.semantics { heading() },
|
||||
maxLabelLines = Int.MAX_VALUE,
|
||||
)
|
||||
|
||||
LazyColumn {
|
||||
items(neverTranslateSiteListPreferences) { item: NeverTranslateSiteListItemPreference ->
|
||||
val itemContentDescription = stringResource(
|
||||
id = R.string.never_translate_site_item_list_content_description_preference,
|
||||
item.websiteUrl,
|
||||
)
|
||||
TextListItem(
|
||||
label = item.websiteUrl,
|
||||
modifier = Modifier
|
||||
.padding(
|
||||
start = 56.dp,
|
||||
)
|
||||
.clearAndSetSemantics {
|
||||
role = Role.Button
|
||||
contentDescription = itemContentDescription
|
||||
},
|
||||
onClick = { onItemClick(item) },
|
||||
iconPainter = painterResource(R.drawable.mozac_ic_delete_24),
|
||||
onIconClick = { onItemClick(item) },
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
internal fun getNeverTranslateListItemsPreference(): List<NeverTranslateSiteListItemPreference> {
|
||||
return mutableListOf<NeverTranslateSiteListItemPreference>().apply {
|
||||
add(
|
||||
NeverTranslateSiteListItemPreference(
|
||||
websiteUrl = "expedia.ca",
|
||||
),
|
||||
)
|
||||
add(
|
||||
NeverTranslateSiteListItemPreference(
|
||||
websiteUrl = "wikipedia.com",
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@LightDarkPreview
|
||||
private fun NeverTranslateSitePreferencePreview() {
|
||||
FirefoxTheme {
|
||||
NeverTranslateSitePreference(
|
||||
neverTranslateSiteListPreferences = getNeverTranslateListItemsPreference(),
|
||||
) {}
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.fenix.translations.preferences.nevertranslatesite
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.ext.showToolbar
|
||||
import org.mozilla.fenix.theme.FirefoxTheme
|
||||
|
||||
/**
|
||||
* A fragment displaying the Firefox Preference never translate site items list.
|
||||
*/
|
||||
class NeverTranslateSitePreferenceFragment : Fragment() {
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
showToolbar(getString(R.string.never_translate_site_toolbar_title_preference))
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?,
|
||||
): View = ComposeView(requireContext()).apply {
|
||||
setContent {
|
||||
FirefoxTheme {
|
||||
NeverTranslateSitePreference(
|
||||
neverTranslateSiteListPreferences = getNeverTranslateListItemsPreference(),
|
||||
onItemClick = {
|
||||
findNavController().navigate(
|
||||
NeverTranslateSitePreferenceFragmentDirections
|
||||
.actionNeverTranslateSitePreferenceFragmentToNeverTranslateSiteDialogPreferenceFragment(
|
||||
it.websiteUrl,
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue