Merge remote-tracking branch 'upstream/master' into fork

pull/21/head
Adam Novak 4 years ago
commit d2a82b8de3

@ -29,6 +29,8 @@ import org.mozilla.fenix.ui.robots.DeepLinkRobot
* - fenix://urls_bookmarks — take the user to the bookmarks list
* - fenix://settings_logins — take the user to the settings page to do with logins (not the saved logins).
**/
@Ignore("All tests perma-failing, see: https://github.com/mozilla-mobile/fenix/issues/13491")
class DeepLinkTest {
private val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
private lateinit var mockWebServer: MockWebServer

@ -5,6 +5,7 @@
import android.content.Context
import android.os.Bundle
import mozilla.components.browser.engine.gecko.autofill.GeckoLoginDelegateWrapper
import mozilla.components.browser.engine.gecko.ext.toContentBlockingSetting
import mozilla.components.browser.engine.gecko.glean.GeckoAdapter
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.concept.storage.LoginsStorage
@ -50,8 +51,7 @@ object GeckoProvider {
val runtimeSettings = builder
.crashHandler(CrashHandlerService::class.java)
.telemetryDelegate(GeckoAdapter())
// TODO: Fix me!
// .contentBlocking(policy.toContentBlockingSetting())
.contentBlocking(policy.toContentBlockingSetting())
.aboutConfigEnabled(true)
.debugLogging(Config.channel.isDebug)
.build()

@ -28,7 +28,14 @@ class AppRequestInterceptor(private val context: Context) : RequestInterceptor {
): RequestInterceptor.InterceptionResponse? {
return context.components.services.appLinksInterceptor
.onLoadRequest(
engineSession, uri, lastUri, hasUserGesture, isSameDomain, isRedirect, isDirectNavigation, isSubframeRequest
engineSession,
uri,
lastUri,
hasUserGesture,
isSameDomain,
isRedirect,
isDirectNavigation,
isSubframeRequest
)
}

@ -252,10 +252,12 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
lifecycleScope.launch(IO) {
if (
settings().isDefaultBrowser() &&
settings().wasDefaultBrowserOnLastPause != settings().isDefaultBrowser()
settings().wasDefaultBrowserOnLastResume != settings().isDefaultBrowser()
) {
metrics.track(Event.ChangedToDefaultBrowser)
}
settings().wasDefaultBrowserOnLastResume = settings().isDefaultBrowser()
}
}
@ -264,11 +266,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE)
}
if (settings().wasDefaultBrowserOnLastPause != settings().isDefaultBrowser()
) {
settings().wasDefaultBrowserOnLastPause = settings().isDefaultBrowser()
}
super.onPause()
// Every time the application goes into the background, it is possible that the user

@ -42,7 +42,6 @@ import mozilla.components.browser.state.selector.findTabOrCustomTabOrSelectedTab
import mozilla.components.browser.state.state.SessionState
import mozilla.components.browser.state.state.content.DownloadState
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.browser.thumbnails.BrowserThumbnails
import mozilla.components.concept.engine.prompt.ShareData
import mozilla.components.feature.accounts.FxaCapability
import mozilla.components.feature.accounts.FxaWebChannelFeature
@ -101,6 +100,7 @@ import org.mozilla.fenix.ext.getPreferenceKey
import org.mozilla.fenix.ext.accessibilityManager
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.enterToImmersiveMode
import org.mozilla.fenix.ext.getPreferenceKey
import org.mozilla.fenix.ext.hideToolbar
import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.ext.nav
@ -140,7 +140,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
private val appLinksFeature = ViewBoundFeatureWrapper<AppLinksFeature>()
private val promptsFeature = ViewBoundFeatureWrapper<PromptFeature>()
private val findInPageIntegration = ViewBoundFeatureWrapper<FindInPageIntegration>()
private val thumbnailsFeature = ViewBoundFeatureWrapper<BrowserThumbnails>()
private val toolbarIntegration = ViewBoundFeatureWrapper<ToolbarIntegration>()
private val sitePermissionsFeature = ViewBoundFeatureWrapper<SitePermissionsFeature>()
private val fullScreenFeature = ViewBoundFeatureWrapper<FullScreenFeature>()
@ -281,12 +280,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
lifecycleOwner = viewLifecycleOwner
)
thumbnailsFeature.set(
feature = BrowserThumbnails(context, view.engineView, store),
owner = this,
view = view
)
toolbarIntegration.set(
feature = browserToolbarView.toolbarIntegration,
owner = this,
@ -594,7 +587,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
.ifChanged { it.content.firstContentfulPaint }
.collect {
val showEngineView =
it.content.firstContentfulPaint || it.content.progress == 100
it.content.firstContentfulPaint || it.content.progress == LOADING_PROGRESS_COMPLETE
if (showEngineView) {
engineView?.asView()?.isVisible = true
@ -812,11 +805,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
}
override fun onBackLongPressed(): Boolean {
if (FeatureFlags.tabHistory) {
findNavController().navigate(R.id.action_global_tabHistoryDialogFragment)
return true
}
return false
findNavController().navigate(R.id.action_global_tabHistoryDialogFragment)
return true
}
/**
@ -1082,6 +1072,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1
private const val REQUEST_CODE_PROMPT_PERMISSIONS = 2
private const val REQUEST_CODE_APP_PERMISSIONS = 3
private const val LOADING_PROGRESS_COMPLETE = 100
}
override fun onAccessibilityStateChanged(enabled: Boolean) {

@ -42,7 +42,7 @@ class BrowserAnimator(
if (unwrappedSwipeRefresh?.context?.settings()?.waitToShowPageUntilFirstPaint == true) {
if (firstContentfulHappened()) {
viewLifecycleScope.get()?.launch {
delay(100)
delay(ANIMATION_DELAY)
unwrappedEngineView?.asView()?.visibility = View.VISIBLE
unwrappedSwipeRefresh?.background = null
unwrappedSwipeRefresh?.alpha = 1f
@ -91,6 +91,8 @@ class BrowserAnimator(
}
companion object {
private const val ANIMATION_DELAY = 100L
fun getToolbarNavOptions(context: Context): NavOptions {
val navOptions = NavOptions.Builder()

@ -21,6 +21,7 @@ import kotlinx.android.synthetic.main.fragment_browser.view.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import mozilla.components.browser.session.Session
import mozilla.components.browser.state.selector.findTab
import mozilla.components.browser.thumbnails.BrowserThumbnails
import mozilla.components.browser.toolbar.BrowserToolbar
import mozilla.components.feature.app.links.AppLinksUseCases
import mozilla.components.feature.contextmenu.ContextMenuCandidate
@ -55,6 +56,7 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
private val windowFeature = ViewBoundFeatureWrapper<WindowFeature>()
private val searchFeature = ViewBoundFeatureWrapper<SearchFeature>()
private val thumbnailsFeature = ViewBoundFeatureWrapper<BrowserThumbnails>()
private var readerModeAvailable = false
@ -107,6 +109,12 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
browserToolbarView.view.addPageAction(readerModeAction)
thumbnailsFeature.set(
feature = BrowserThumbnails(context, view.engineView, components.core.store),
owner = this,
view = view
)
readerViewFeature.set(
feature = StrictMode.allowThreadDiskReads().resetPoliciesAfter {
ReaderViewFeature(

@ -35,6 +35,7 @@ import kotlin.math.min
* Handles intercepting touch events on the toolbar for swipe gestures and executes the
* necessary animations.
*/
@Suppress("LargeClass", "TooManyFunctions")
class ToolbarGestureHandler(
private val activity: Activity,
private val contentLayout: View,
@ -76,6 +77,7 @@ class ToolbarGestureHandler(
GestureDirection.LEFT_TO_RIGHT
}
@Suppress("ComplexCondition")
return if (
!activity.window.decorView.isKeyboardVisible() &&
start.isInToolbar() &&

@ -95,6 +95,7 @@ class LeanplumMetricsService(
deviceId
}
@Suppress("ComplexMethod")
override fun start() {
if (!application.settings().isMarketingTelemetryEnabled) return
@ -255,7 +256,7 @@ class LeanplumMetricsService(
"jpn" // Japanese
)
private val PREFERENCE_NAME = "LEANPLUM_PREFERENCES"
private val DEVICE_ID_KEY = "LP_DEVICE_ID"
private const val PREFERENCE_NAME = "LEANPLUM_PREFERENCES"
private const val DEVICE_ID_KEY = "LP_DEVICE_ID"
}
}

@ -140,6 +140,7 @@ internal class ReleaseMetricController(
MetricServiceType.Marketing -> isMarketingDataTelemetryEnabled()
}
@Suppress("LongMethod")
private fun Fact.toEvent(): Event? = when (Pair(component, item)) {
Component.FEATURE_PROMPTS to LoginDialogFacts.Items.DISPLAY -> Event.LoginDialogPromptDisplayed
Component.FEATURE_PROMPTS to LoginDialogFacts.Items.CANCEL -> Event.LoginDialogPromptCancelled

@ -23,7 +23,6 @@ import mozilla.components.concept.engine.prompt.ShareData
import mozilla.components.feature.session.SessionFeature
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import mozilla.components.support.ktx.kotlin.isUrl
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.NavGraphDirections
import org.mozilla.fenix.R
@ -204,14 +203,18 @@ class DefaultBrowserToolbarController(
trackToolbarItemInteraction(item)
Do exhaustive when (item) {
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke(currentSession)
is ToolbarMenu.Item.Back -> {
if (item.viewHistory) {
navController.navigate(R.id.action_global_tabHistoryDialogFragment)
} else {
sessionUseCases.goBack.invoke(currentSession)
}
}
is ToolbarMenu.Item.Forward -> {
if (FeatureFlags.tabHistory && item.viewHistory) {
if (item.viewHistory) {
navController.navigate(R.id.action_global_tabHistoryDialogFragment)
} else if (!item.viewHistory) {
sessionUseCases.goForward.invoke(currentSession)
} else {
// Do nothing if tab history feature flag is off and item.viewHistory is true
sessionUseCases.goForward.invoke(currentSession)
}
}
is ToolbarMenu.Item.Reload -> {
@ -383,7 +386,7 @@ class DefaultBrowserToolbarController(
@Suppress("ComplexMethod")
private fun trackToolbarItemInteraction(item: ToolbarMenu.Item) {
val eventItem = when (item) {
ToolbarMenu.Item.Back -> Event.BrowserMenuItemTapped.Item.BACK
is ToolbarMenu.Item.Back -> Event.BrowserMenuItemTapped.Item.BACK
is ToolbarMenu.Item.Forward -> Event.BrowserMenuItemTapped.Item.FORWARD
is ToolbarMenu.Item.Reload -> Event.BrowserMenuItemTapped.Item.RELOAD
ToolbarMenu.Item.Stop -> Event.BrowserMenuItemTapped.Item.STOP

@ -250,8 +250,10 @@ class BrowserToolbarView(
private const val TOOLBAR_ELEVATION = 16
}
@Suppress("ComplexCondition")
private fun ToolbarMenu.Item.performHapticIfNeeded(view: View) {
if (this is ToolbarMenu.Item.Reload && this.bypassCache ||
this is ToolbarMenu.Item.Back && this.viewHistory ||
this is ToolbarMenu.Item.Forward && this.viewHistory
) {
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)

@ -74,6 +74,20 @@ class DefaultToolbarMenu(
}
override val menuToolbar by lazy {
val back = BrowserMenuItemToolbar.TwoStateButton(
primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_back,
primaryContentDescription = context.getString(R.string.browser_menu_back),
primaryImageTintResource = primaryTextColor(),
isInPrimaryState = {
session?.canGoBack ?: true
},
secondaryImageTintResource = ThemeManager.resolveAttribute(R.attr.disabled, context),
disableInSecondaryState = true,
longClickListener = { onItemTapped.invoke(ToolbarMenu.Item.Back(viewHistory = true)) }
) {
onItemTapped.invoke(ToolbarMenu.Item.Back(viewHistory = false))
}
val forward = BrowserMenuItemToolbar.TwoStateButton(
primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_forward,
primaryContentDescription = context.getString(R.string.browser_menu_forward),
@ -135,7 +149,7 @@ class DefaultToolbarMenu(
onItemTapped.invoke(ToolbarMenu.Item.Bookmark)
}
BrowserMenuItemToolbar(listOf(bookmark, share, forward, refresh))
BrowserMenuItemToolbar(listOf(back, forward, bookmark, share, refresh))
}
// Predicates that need to be repeatedly called as the session changes

@ -13,7 +13,7 @@ interface ToolbarMenu {
data class RequestDesktop(val isChecked: Boolean) : Item()
object FindInPage : Item()
object Share : Item()
object Back : Item()
data class Back(val viewHistory: Boolean) : Item()
data class Forward(val viewHistory: Boolean) : Item()
data class Reload(val bypassCache: Boolean) : Item()
object Stop : Item()

@ -59,9 +59,10 @@ class CustomTabToolbarMenu(
R.attr.disabled,
context
),
disableInSecondaryState = true
disableInSecondaryState = true,
longClickListener = { onItemTapped.invoke(ToolbarMenu.Item.Back(viewHistory = true)) }
) {
onItemTapped.invoke(ToolbarMenu.Item.Back)
onItemTapped.invoke(ToolbarMenu.Item.Back(viewHistory = false))
}
val forward = BrowserMenuItemToolbar.TwoStateButton(

@ -232,7 +232,10 @@ class DefaultSessionControlController(
}
override fun handleCollectionShareTabsClicked(collection: TabCollection) {
showShareFragment(collection.tabs.map { ShareData(url = it.url, title = it.title) })
showShareFragment(
collection.title,
collection.tabs.map { ShareData(url = it.url, title = it.title) }
)
metrics.track(Event.CollectionShared)
}
@ -366,8 +369,9 @@ class DefaultSessionControlController(
showTabTrayCollectionCreation()
}
private fun showShareFragment(data: List<ShareData>) {
private fun showShareFragment(shareSubject: String, data: List<ShareData>) {
val directions = HomeFragmentDirections.actionGlobalShareFragment(
shareSubject = shareSubject,
data = data.toTypedArray()
)
navController.nav(R.id.homeFragment, directions)

@ -302,8 +302,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
private fun setupPreferences() {
val leakKey = getPreferenceKey(R.string.pref_key_leakcanary)
val debuggingKey = getPreferenceKey(R.string.pref_key_remote_debugging)
val externalDownloadManagerKey = getPreferenceKey(R.string.pref_key_external_download_manager)
val preferenceExternalDownloadManager = findPreference<Preference>(externalDownloadManagerKey)
val preferenceExternalDownloadManager = requirePreference<Preference>(R.string.pref_key_make_default_browser)
val preferenceLeakCanary = findPreference<Preference>(leakKey)
val preferenceRemoteDebugging = findPreference<Preference>(debuggingKey)
val preferenceMakeDefaultBrowser = requirePreference<Preference>(R.string.pref_key_make_default_browser)
@ -316,7 +315,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
}
}
preferenceExternalDownloadManager?.isVisible = FeatureFlags.externalDownloadManager
preferenceExternalDownloadManager.isVisible = FeatureFlags.externalDownloadManager
preferenceRemoteDebugging?.setOnPreferenceChangeListener<Boolean> { preference, newValue ->
preference.context.settings().preferences.edit()
.putBoolean(preference.key, newValue).apply()

@ -55,6 +55,7 @@ interface ShareController {
* Default behavior of [ShareController]. Other implementations are possible.
*
* @param context [Context] used for various Android interactions.
* @param shareSubject desired message subject used when sharing through 3rd party apps, like email clients.
* @param shareData the list of [ShareData]s that can be shared.
* @param sendTabUseCases instance of [SendTabUseCases] which allows sending tabs to account devices.
* @param snackbar - instance of [FenixSnackbar] for displaying styled snackbars
@ -64,6 +65,7 @@ interface ShareController {
@Suppress("TooManyFunctions")
class DefaultShareController(
private val context: Context,
private val shareSubject: String?,
private val shareData: List<ShareData>,
private val sendTabUseCases: SendTabUseCases,
private val snackbar: FenixSnackbar,
@ -90,7 +92,7 @@ class DefaultShareController(
val intent = Intent(ACTION_SEND).apply {
putExtra(EXTRA_TEXT, getShareText())
putExtra(EXTRA_SUBJECT, shareData.map { it.title }.joinToString(", "))
putExtra(EXTRA_SUBJECT, getShareSubject())
type = "text/plain"
flags = FLAG_ACTIVITY_NEW_TASK
setClassName(app.packageName, app.activityName)
@ -189,6 +191,9 @@ class DefaultShareController(
}
}
@VisibleForTesting
internal fun getShareSubject() = shareSubject ?: shareData.map { it.title }.joinToString(", ")
// Navigation between app fragments uses ShareTab as arguments. SendTabUseCases uses TabData.
@VisibleForTesting
internal fun List<ShareData>.toTabData() = map { data ->

@ -67,6 +67,7 @@ class ShareFragment : AppCompatDialogFragment() {
shareInteractor = ShareInteractor(
DefaultShareController(
context = requireContext(),
shareSubject = args.shareSubject,
shareData = shareData,
snackbar = FenixSnackbar.make(
view = requireActivity().getRootView()!!,

@ -34,18 +34,25 @@ class TabHistoryView(
private val adapter = TabHistoryAdapter(interactor)
private val layoutManager = object : LinearLayoutManager(containerView.context) {
private var shouldScrollToSelected = true
override fun onLayoutCompleted(state: RecyclerView.State?) {
super.onLayoutCompleted(state)
currentIndex?.let { index ->
// Force expansion of the dialog, otherwise scrolling to the current history item
// won't work when its position is near the bottom of the recyclerview.
expandDialog.invoke()
// Also, attempt to center the current history item.
val itemView = tabHistoryRecyclerView.findViewHolderForLayoutPosition(
findFirstCompletelyVisibleItemPosition()
)?.itemView
val offset = tabHistoryRecyclerView.height / 2 - (itemView?.height ?: 0) / 2
scrollToPositionWithOffset(index, offset)
// Attempt to center the current history item after the first layout is completed,
// but not after subsequent layouts
if (shouldScrollToSelected) {
// Force expansion of the dialog, otherwise scrolling to the current history item
// won't work when its position is near the bottom of the recyclerview.
expandDialog.invoke()
val itemView = tabHistoryRecyclerView.findViewHolderForLayoutPosition(
findFirstCompletelyVisibleItemPosition()
)?.itemView
val offset = tabHistoryRecyclerView.height / 2 - (itemView?.height ?: 0) / 2
scrollToPositionWithOffset(index, offset)
shouldScrollToSelected = false
}
}
}
}.apply {

@ -33,7 +33,9 @@ class TabHistoryViewHolder(
history_layout.loadFavicon(item.url)
if (item.isSelected) {
history_layout.setBackgroundColor(history_layout.context.getColorFromAttr(R.attr.tabHistoryItemSelectedBackground))
history_layout.setBackgroundColor(
history_layout.context.getColorFromAttr(R.attr.tabHistoryItemSelectedBackground)
)
} else {
history_layout.background = null
}

@ -8,7 +8,11 @@ import mozilla.components.support.ktx.android.content.PreferencesHolder
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
fun featureFlagPreference(key: String, default: Boolean, featureFlag: Boolean): ReadWriteProperty<PreferencesHolder, Boolean> =
fun featureFlagPreference(
key: String,
default: Boolean,
featureFlag: Boolean
): ReadWriteProperty<PreferencesHolder, Boolean> =
FeatureFlagPreferencePreference(key, default, featureFlag)
private class FeatureFlagPreferencePreference(

@ -340,7 +340,7 @@ class Settings(private val appContext: Context) : PreferencesHolder {
* Caches the last known "is default browser" state when the app was paused.
* For an up to do date state use `isDefaultBrowser` instead.
*/
var wasDefaultBrowserOnLastPause by booleanPreference(
var wasDefaultBrowserOnLastResume by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_default_browser),
default = isDefaultBrowser()
)

@ -53,7 +53,8 @@
app:layout_constraintStart_toEndOf="@id/icon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/url"
app:layout_constraintVertical_chainStyle="packed"/>
app:layout_constraintVertical_chainStyle="packed"
app:layout_goneMarginEnd="@dimen/library_item_icon_margin_horizontal" />
<TextView
android:id="@+id/url"
@ -69,7 +70,8 @@
app:layout_constraintEnd_toStartOf="@id/overflow_menu"
app:layout_constraintStart_toEndOf="@id/icon"
app:layout_constraintTop_toBottomOf="@+id/title"
app:layout_constraintBottom_toBottomOf="parent" />
app:layout_constraintBottom_toBottomOf="parent"
app:layout_goneMarginEnd="@dimen/library_item_icon_margin_horizontal" />
<ImageButton
android:id="@+id/overflow_menu"

@ -677,6 +677,11 @@
android:defaultValue="null"
app:argType="string"
app:nullable="true" />
<argument
android:name="shareSubject"
android:defaultValue="@null"
app:argType="string"
app:nullable="true" />
</dialog>
<dialog
android:id="@+id/quickSettingsSheetDialogFragment"

@ -2,7 +2,7 @@
<resources>
<!-- App name for private browsing mode. The first parameter is the name of the app defined in app_name (for example: Fenix)-->
<string name="app_name_private_5">Privado %s</string>
<string name="app_name_private_5">%s privado</string>
<!-- App name for private browsing mode. The first parameter is the name of the app defined in app_name (for example: Fenix)-->
<string name="app_name_private_4">%s (Privado)</string>
<!-- Home Fragment -->

@ -27,6 +27,9 @@
<!-- Message announced to the user when tab tray is selected with 0 or 2+ tabs -->
<string name="open_tab_tray_plural">%1$s pestañas abiertas. Tocar para cambiar de pestaña.</string>
<!-- Content description for checkmark while tab is selected while in multiselect mode in tab tray. The first parameter is the title of the tab selected -->
<string name="tab_tray_item_selected_multiselect_content_description">%1$s seleccionado</string>
<!-- About content. The first parameter is the name of the application. (For example: Fenix) -->
<string name="about_content">%1$s es producido por Mozilla.</string>

@ -40,6 +40,8 @@
<string name="tab_tray_collection_button_multiselect_content_description">Tallenna valitut välilehdet kokoelmaan</string>
<!-- Content description for checkmark while tab is selected while in multiselect mode in tab tray. The first parameter is the title of the tab selected -->
<string name="tab_tray_item_selected_multiselect_content_description">Valittu %1$s</string>
<!-- Content description when tab is unselected while in multiselect mode in tab tray. The first parameter is the title of the tab unselected -->
<string name="tab_tray_item_unselected_multiselect_content_description">Kumottu valinta %1$s</string>
<!-- Content description announcement when exiting multiselect mode in tab tray -->
<string name="tab_tray_exit_multiselect_content_description">Poistuttiin monivalintatilasta</string>
<!-- Content description announcement when entering multiselect mode in tab tray -->

@ -37,9 +37,18 @@
<string name="tab_tray_close_multiselect_content_description">मल्टीसेलेक्ट मोड से बाहर निकलें</string>
<!-- Content description for save to collection button while in multiselect mode in tab tray -->
<string name="tab_tray_collection_button_multiselect_content_description">चुने गए टैब को संग्रह में सहेजें</string>
<!-- Content description for checkmark while tab is selected while in multiselect mode in tab tray. The first parameter is the title of the tab selected -->
<string name="tab_tray_item_selected_multiselect_content_description">%1$s चयनित</string>
<!-- Content description when tab is unselected while in multiselect mode in tab tray. The first parameter is the title of the tab unselected -->
<string name="tab_tray_item_unselected_multiselect_content_description">%1$s अचयनित</string>
<!-- Content description announcement when exiting multiselect mode in tab tray -->
<string name="tab_tray_exit_multiselect_content_description">मल्टीसेलेक्ट मोड से बाहर निकल चुके</string>
<!-- Content description announcement when entering multiselect mode in tab tray -->
<string name="tab_tray_enter_multiselect_content_description">मल्टीसेलेक्ट मोड में दाखिल, संग्रह में सहेजने के लिए टैबों को चुनें</string>
<!-- Content description on checkmark while tab is selected in multiselect mode in tab tray -->
<string name="tab_tray_multiselect_selected_content_description">चयनित</string>
<!-- About content. The first parameter is the name of the application. (For example: Fenix) -->
<string name="about_content">%1$s को Mozilla द्वारा निर्मित किया गया है।</string>
@ -165,8 +174,8 @@
<!-- Search Fragment -->
<!-- Button in the search view that lets a user search by scanning a QR code -->
<string name="search_scan_button">स्कैन करें</string>
<!-- Button in the search view that lets a user search by using a shortcut -->
<string name="search_engines_shortcut_button">खोज इंजन</string>
<!-- Button in the search view that lets a user change their search engine -->
<string name="search_engine_button">खोज इंजन</string>
<!-- Button in the search view when shortcuts are displayed that takes a user to the search engine settings -->
<string name="search_shortcuts_engine_settings">खोज इंजन सेटिंग्स</string>
<!-- Header displayed when selecting a shortcut search engine -->
@ -597,6 +606,8 @@
<string name="bookmark_select_folder">फ़ोल्डर चुनें</string>
<!-- Confirmation message for a dialog confirming if the user wants to delete the selected folder -->
<string name="bookmark_delete_folder_confirmation_dialog">क्या आप वाकई इस फ़ोल्डर को हटाना चाहते हैं?</string>
<!-- Confirmation message for a dialog confirming if the user wants to delete multiple items including folders. Parameter will be replaced by app name. -->
<string name="bookmark_delete_multiple_folders_confirmation_dialog">%s चयनित वस्तुओं को मिटा देगा।</string>
<!-- Snackbar title shown after a folder has been deleted. This first parameter is the name of the deleted folder -->
<string name="bookmark_delete_folder_snackbar">%1$s मिटाया गया</string>
<!-- Screen title for adding a bookmarks folder -->
@ -655,6 +666,8 @@
<!-- Bookmark snackbar message on deleting multiple bookmarks not including folders-->
<string name="bookmark_deletion_multiple_snackbar_message_2">बुकमार्क मिटा दिए गए</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks including folders-->
<string name="bookmark_deletion_multiple_snackbar_message_3">चयनित फोल्डर मिटाए जा रहे हैं</string>
<!-- Bookmark undo button for deletion snackbar action -->
<string name="bookmark_undo_deletion">पूर्ववत करें</string>
@ -860,6 +873,8 @@
<string name="tab_collection_dialog_message">क्या आप वाकई %1$s को हटाना चाहते हैं?</string>
<!-- Collection and tab deletion prompt dialog message. This will show when the last tab from a collection is deleted -->
<string name="delete_tab_and_collection_dialog_message">इस टैब को हटाने से संपूर्ण संग्रह मिट जाएगा। आप किसी भी समय नए संग्रह बना सकते हैं।</string>
<!-- Collection and tab deletion prompt dialog title. Placeholder will be replaced with the collection name. This will show when the last tab from a collection is deleted -->
<string name="delete_tab_and_collection_dialog_title">%1$s को मिटाएं?</string>
<!-- Tab collection deletion prompt dialog option to delete the collection -->
<string name="tab_collection_dialog_positive">मिटाएं</string>
<!-- Tab collection deletion prompt dialog option to cancel deleting the collection -->
@ -1269,6 +1284,8 @@
<string name="preferences_passwords_exceptions_description_empty">लॉगिन और पासवर्ड जो सहेजे नहीं गए हैं उन्हें यहां दिखाये जायेंगे।</string>
<!-- Description of list of login exceptions that we never save logins for -->
<string name="preferences_passwords_exceptions_description">इन साइटों के लिए लॉगिन और पासवर्ड सहेजे नहीं जाएंगे।</string>
<!-- Text on button to remove all saved login exceptions -->
<string name="preferences_passwords_exceptions_remove_all">सभी अपवादों को मिटाएं</string>
<!-- Hint for search box in logins list -->
<string name="preferences_passwords_saved_logins_search">लॉगिन खोजें</string>
<!-- Option to sort logins list A-Z, alphabetically -->
@ -1472,9 +1489,7 @@
<string name="saved_login_duplicate">एक लॉगिन इस उपयोगकर्ता नाम के साथ मौजूद है</string>
<!-- Synced Tabs -->
<!-- Text displayed when user is not logged into a Firefox Account -->
<string name="synced_tabs_connect_to_sync_account">Firefox खाते से कनेक्ट करें।</string>
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<string name="synced_tabs_connect_another_device">अन्य डिवाइस कनेक्ट करें</string>
<!-- Text displayed asking user to re-authenticate -->
<string name="synced_tabs_reauth">कृपया पुनः प्रमाणित करें।</string>
@ -1495,13 +1510,4 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">ठीक है, समझ गए</string>
<!-- DEPRECATED STRINGS -->
<!-- Button in the search view that lets a user search by using a shortcut -->
<string name="search_shortcuts_button">शॉर्टकट</string>
<!-- DEPRECATED: Header displayed when selecting a shortcut search engine -->
<string name="search_shortcuts_search_with">के साथ खोजें</string>
<!-- Header displayed when selecting a shortcut search engine -->
<string name="search_shortcuts_search_with_2">इस बार, इसके साथ खोजें:</string>
<!-- Preference title for switch preference to show search shortcuts -->
<string name="preferences_show_search_shortcuts">खोज शॉर्टकट्स दिखाएं</string>
</resources>

@ -734,7 +734,7 @@
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
<string name="collection_menu_button_content_description">Gyűjtemény menü</string>
<!-- No Open Tabs Message Header -->
<string name="no_collections_header1">Gyűjtsd össze a számára fontos dolgokat</string>
<string name="no_collections_header1">Gyűjtse össze az Önnek fontos dolgokat</string>
<!-- Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Csoportosítsa a hasonló kereséseket, webhelyeket és lapokat a későbbi gyors elérés érdekében.</string>
<!-- Title for the "select tabs" step of the collection creator -->

@ -27,6 +27,29 @@
<!-- Message announced to the user when tab tray is selected with 0 or 2+ tabs -->
<string name="open_tab_tray_plural">%1$s tab terbuka. Ketuk untuk beralih tab.</string>
<!-- Tab tray multi select title in app bar. The first parameter is the number of tabs selected -->
<string name="tab_tray_multi_select_title">%1$d terpilih</string>
<!-- Label of button in create collection dialog for creating a new collection -->
<string name="tab_tray_add_new_collection">Tambah koleksi baru</string>
<!-- Label of editable text in create collection dialog for naming a new collection -->
<string name="tab_tray_add_new_collection_name">Nama</string>
<!-- Label of button in save to collection dialog for selecting a current collection -->
<string name="tab_tray_select_collection">Pilih koleksi</string>
<!-- Content description for close button while in multiselect mode in tab tray -->
<string name="tab_tray_close_multiselect_content_description">Keluar mode seleksi ganda</string>
<!-- Content description for save to collection button while in multiselect mode in tab tray -->
<string name="tab_tray_collection_button_multiselect_content_description">Simpan tab terpilih ke koleksi</string>
<!-- Content description for checkmark while tab is selected while in multiselect mode in tab tray. The first parameter is the title of the tab selected -->
<string name="tab_tray_item_selected_multiselect_content_description">%1$s dipilih</string>
<!-- Content description when tab is unselected while in multiselect mode in tab tray. The first parameter is the title of the tab unselected -->
<string name="tab_tray_item_unselected_multiselect_content_description">%1$s tidak dipilih</string>
<!-- Content description announcement when exiting multiselect mode in tab tray -->
<string name="tab_tray_exit_multiselect_content_description">Keluar dari mode seleksi ganda</string>
<!-- Content description announcement when entering multiselect mode in tab tray -->
<string name="tab_tray_enter_multiselect_content_description">Memasuki mode seleksi ganda, pilih tab untuk menyimpannya ke koleksi</string>
<!-- Content description on checkmark while tab is selected in multiselect mode in tab tray -->
<string name="tab_tray_multiselect_selected_content_description">Terpilih</string>
<!-- About content. The first parameter is the name of the application. (For example: Fenix) -->
<string name="about_content">%1$s diproduksi oleh Mozilla.</string>
@ -152,15 +175,13 @@
<!-- Search Fragment -->
<!-- Button in the search view that lets a user search by scanning a QR code -->
<string name="search_scan_button">Pindai</string>
<!-- Button in the search view that lets a user search by using a shortcut -->
<string name="search_shortcuts_button">Pintasan</string>
<!-- Button in the search view that lets a user change their search engine -->
<string name="search_engine_button">Mesin pencari</string>
<!-- Button in the search view when shortcuts are displayed that takes a user to the search engine settings -->
<string name="search_shortcuts_engine_settings">Setelan mesin pencari</string>
<!-- DEPRECATED: Header displayed when selecting a shortcut search engine -->
<string name="search_shortcuts_search_with">Cari dengan</string>
<!-- Header displayed when selecting a shortcut search engine -->
<string name="search_shortcuts_search_with_2">Kali ini, cari lewat:</string>
<string name="search_engines_search_with">Saat ini, cari dengan:</string>
<!-- Button in the search view that lets a user navigate to the site in their clipboard -->
<string name="awesomebar_clipboard_title">Isi tautan dari papan klip</string>
@ -270,8 +291,8 @@
<string name="developer_tools_category">Perangkat pengembang</string>
<!-- Preference for developers -->
<string name="preferences_remote_debugging">Pengawakutuan jarak jauh melalui USB</string>
<!-- Preference title for switch preference to show search shortcuts -->
<string name="preferences_show_search_shortcuts">Tampilkan pintasan pencarian</string>
<!-- Preference title for switch preference to show search engines -->
<string name="preferences_show_search_engines">Tampilkan mesin pencari</string>
<!-- Preference title for switch preference to show search suggestions -->
<string name="preferences_show_search_suggestions">Tampilkan saran pencarian</string>
<!-- Preference title for switch preference to show voice search button -->
@ -525,6 +546,9 @@
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (Mode Privat)</string>
<!-- Button in the current tab tray header in multiselect mode. Saved the selected tabs to a collection when pressed. -->
<string name="tab_tray_save_to_collection">Simpan</string>
<!-- History -->
<!-- Text for the button to clear all history -->
<string name="history_delete_all">Hapus riwayat</string>
@ -592,6 +616,8 @@
<string name="bookmark_select_folder">Pilih folder</string>
<!-- Confirmation message for a dialog confirming if the user wants to delete the selected folder -->
<string name="bookmark_delete_folder_confirmation_dialog">Yakin akan menghapus folder ini?</string>
<!-- Confirmation message for a dialog confirming if the user wants to delete multiple items including folders. Parameter will be replaced by app name. -->
<string name="bookmark_delete_multiple_folders_confirmation_dialog">%s akan menghapus item terpilih.</string>
<!-- Snackbar title shown after a folder has been deleted. This first parameter is the name of the deleted folder -->
<string name="bookmark_delete_folder_snackbar">%1$s terhapus</string>
<!-- Screen title for adding a bookmarks folder -->
@ -646,8 +672,10 @@
<!-- Bookmark snackbar message on deletion
The first parameter is the host part of the URL of the bookmark deleted, if any -->
<string name="bookmark_deletion_snackbar_message">%1$s terhapus</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks -->
<!-- Bookmark snackbar message on deleting multiple bookmarks not including folders-->
<string name="bookmark_deletion_multiple_snackbar_message_2">Markah dihapus</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks including folders-->
<string name="bookmark_deletion_multiple_snackbar_message_3">Menghapus folder terpilih</string>
<!-- Bookmark undo button for deletion snackbar action -->
<string name="bookmark_undo_deletion">URUNGKAN</string>
@ -743,6 +771,8 @@
<string name="create_collection_save_to_collection_tab_selected">%d tab dipilih</string>
<!-- Text shown in snackbar when multiple tabs have been saved in a collection -->
<string name="create_collection_tabs_saved">Tab disimpan!</string>
<!-- Text shown in snackbar when one or multiple tabs have been saved in a new collection -->
<string name="create_collection_tabs_saved_new_collection">Koleksi disimpan!</string>
<!-- Text shown in snackbar when one tab has been saved in a collection -->
<string name="create_collection_tab_saved">Tab disimpan!</string>
<!-- Content description (not visible, for screen readers etc.): button to close the collection creator -->
@ -849,6 +879,10 @@
<string name="qr_scanner_dialog_negative">TOLAK</string>
<!-- Tab collection deletion prompt dialog message. Placeholder will be replaced with the collection name -->
<string name="tab_collection_dialog_message">Yakin ingin menghapus %1$s?</string>
<!-- Collection and tab deletion prompt dialog message. This will show when the last tab from a collection is deleted -->
<string name="delete_tab_and_collection_dialog_message">Menghapus tab ini akan menghapus keseluruhan koleksi. Kamu dapat membuat koleksi baru kapan saja.</string>
<!-- Collection and tab deletion prompt dialog title. Placeholder will be replaced with the collection name. This will show when the last tab from a collection is deleted -->
<string name="delete_tab_and_collection_dialog_title">Hapus %1$s?</string>
<!-- Tab collection deletion prompt dialog option to delete the collection -->
<string name="tab_collection_dialog_positive">Hapus</string>
<!-- Tab collection deletion prompt dialog option to cancel deleting the collection -->
@ -1249,6 +1283,8 @@
<string name="preferences_passwords_exceptions_description_empty">Info masuk dan kata sandi yang tidak disimpan akan ditampilkan di sini.</string>
<!-- Description of list of login exceptions that we never save logins for -->
<string name="preferences_passwords_exceptions_description">Info masuk dan kata sandi tidak akan disimpan untuk situs-situs ini.</string>
<!-- Text on button to remove all saved login exceptions -->
<string name="preferences_passwords_exceptions_remove_all">Hapus semua pengecualian</string>
<!-- Hint for search box in logins list -->
<string name="preferences_passwords_saved_logins_search">Cari log masuk</string>
<!-- Option to sort logins list A-Z, alphabetically -->
@ -1287,6 +1323,8 @@
<string name="saved_login_copy_username">Salin nama pengguna</string>
<!-- Content Description (for screenreaders etc) read for the button to copy a site in logins -->
<string name="saved_login_copy_site">Salin situs</string>
<!-- Content Description (for screenreaders etc) read for the button to open a site in logins -->
<string name="saved_login_open_site">Buka situs di peramban</string>
<!-- Content Description (for screenreaders etc) read for the button to reveal a password in logins -->
<string name="saved_login_reveal_password">Tampilkan sandi</string>
<!-- Content Description (for screenreaders etc) read for the button to hide a password in logins -->
@ -1437,9 +1475,7 @@
<string name="saved_login_duplicate">Sebuah info masuk dengan nama pengguna tersebut sudah ada</string>
<!-- Synced Tabs -->
<!-- Text displayed when user is not logged into a Firefox Account -->
<string name="synced_tabs_connect_to_sync_account">Hubungkan dengan Firefox Account.</string>
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<string name="synced_tabs_connect_another_device">Hubungkan perangkat lain</string>
<!-- Text displayed asking user to re-authenticate -->
<string name="synced_tabs_reauth">Harap autentikasi ulang.</string>

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- App name for private browsing mode, only the "Private" portion should be localized. -->
<string name="app_name_private_2">သီးသန့် Firefox အကြိုမြင်ကွင်း</string>
<!-- App name for private browsing mode, only the "Private" portion should be localized. -->
<string name="app_name_private_3">Firefox Preview (သီးသန့်)</string>
<!-- App name for private browsing mode. The first parameter is the name of the app defined in app_name (for example: Fenix)-->
<string name="app_name_private_5">သီးသန့် %s</string>
<!-- App name for private browsing mode. The first parameter is the name of the app defined in app_name (for example: Fenix)-->
<string name="app_name_private_4">%s (သီးသန့်)</string>
<!-- Home Fragment -->
<!-- Content description (not visible, for screen readers etc.): "Three dot" menu button. -->
<string name="content_description_menu">ရွေးချယ်စရာများ</string>
@ -14,23 +14,40 @@
<string name="content_description_disable_private_browsing_button">သီးသန့်ရှာဖွေမှုကို ပိတ်ပါ</string>
<!-- Placeholder text shown in the search bar before a user enters text -->
<string name="search_hint">လိပ်စာရှာဖွေ သို့ ရိုက်ထည့်ပါ</string>
<!-- No Open Tabs Message Header -->
<string name="no_open_tabs_header_2">ဖွင့်ထားသည့်တပ်ဗ်များ မရှိပါ</string>
<!-- No Open Tabs Message Description -->
<string name="no_open_tabs_description">သင့်ဖွင့်ထားသည့်တက်ဗ်များကို ဤနေရာတွင် ပြမည်။</string>
<!-- No Private Tabs Message Description -->
<string name="no_private_tabs_description">သင်၏ သီးသန့် တက်ဗ်များ ဤနေရာမှာ ပြရန်။</string>
<!-- Message announced to the user when tab tray is selected with 1 tab -->
<string name="open_tab_tray_single">ဖွင့်ထားသော တက်ဗ် 1 ခု။ တက်ဗ်များ ပြောင်းရန် ထိပါ။</string>
<!-- Message announced to the user when tab tray is selected with 0 or 2+ tabs -->
<string name="open_tab_tray_plural">ဖွင့်ထားသော တက်ဗ် %1$s ခု။ တက်ဗ်များ ပြောင်းရန် ထိပါ။</string>
<!-- Tab tray multi select title in app bar. The first parameter is the number of tabs selected -->
<string name="tab_tray_multi_select_title">%1$d ခု ရွေးချယ်ထားပြီး</string>
<!-- Label of button in create collection dialog for creating a new collection -->
<string name="tab_tray_add_new_collection">စုဆောင်းမှု အသစ် သို့ ထည့်ရန်</string>
<!-- Label of editable text in create collection dialog for naming a new collection -->
<string name="tab_tray_add_new_collection_name">အမည်</string>
<!-- Label of button in save to collection dialog for selecting a current collection -->
<string name="tab_tray_select_collection">စုဆောင်းမှု ကို ရွေးချယ်ရန်</string>
<!-- Content description for close button while in multiselect mode in tab tray -->
<string name="tab_tray_close_multiselect_content_description">multiselect mode ကိုပိတ်ပါ</string>
<!-- Content description for save to collection button while in multiselect mode in tab tray -->
<string name="tab_tray_collection_button_multiselect_content_description">စုဆောင်းမှု သို့ တက်ဗ်များ သိမ်းရန်</string>
<!-- About content. The first parameter is the name of the application. (For example: Fenix) -->
<string name="about_content">%1$s ကို Mozilla မှ ထုတ်လုပ်သည်။</string>
<!-- Private Browsing -->
<!-- Title for private session option -->
<string name="private_browsing_title">သင် ကိုယ်ပိုင်အပိုင်းထဲတွင် ရှိနေသည်။</string>
<!-- Explanation for private browsing displayed to users on home view when they first enable private mode
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="private_browsing_placeholder_description">% 1 $ s သည်သင်အက်ပ်မှထွက်သောအခါသို့မဟုတ်သီးသန့် tabs အားလုံးပိတ်သောအခါသင်၏ရှာဖွေခြင်းနှင့်ရှာဖွေခြင်းရာဇဝင်ကိုရှင်းလင်းသည်။ ၎င်းသည်သင့်အားဝက်ဘ်ဆိုက်များသို့မဟုတ်သင်၏အင်တာနက် န်ဆောင်မှုပေးသူများအတွက်အမည်မသိစေသော်လည်း၎င်းကိုပြုလုပ်သည်
        သင်အွန်လိုင်းလုပ်တာကိုဒီကိရိယာကိုအသုံးပြုတဲ့သူတိုင်းထံမှလျှို့ဝှက်ထားရန်ပိုလွယ်ကူသည်။</string>
<string name="private_browsing_common_myths">ပုဂ္ဂလိက browsing ဆိုင်ရာ အမြင်မှားများ</string>
<!-- Delete session button to erase your history in a private session -->
<string name="private_browsing_delete_session">အပိုင်း ကိုဖျက်ပါ</string>
<!-- Private mode shortcut "contextual feature recommender" (CFR) -->
<!-- Private mode shortcut "contextual feature recommendation" (CFR) -->
<!-- Text for the main message -->
<string name="cfr_message">သင့်မူလမြင်ကွင်းမှ သီးသန့်တဗ်များကိုဖွင့်ရန် ဖြတ်လမ်းလုပ်ပါ</string>
<!-- Text for the positive button -->
@ -38,6 +55,9 @@
<!-- Text for the negative button -->
<string name="cfr_neg_button_text">နေပါစေ</string>
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">ယခု မဟုတ်</string>
<!-- Home screen icons - Long press shortcuts -->
<!-- Shortcut action to open new tab -->
<string name="home_screen_shortcut_open_new_tab_2">တပ်ဗ် အသစ်</string>
@ -45,6 +65,9 @@
<!-- Shortcut action to open new private tab -->
<string name="home_screen_shortcut_open_new_private_tab_2">တစ်ကိုယ်ရေသုံး တပ်ဗ်အသစ်</string>
<!-- Heading for the Top Sites block -->
<string name="home_screen_top_sites_heading">ထိပ်တန်း ဆိုက်များ</string>
<!-- Browser Fragment -->
<!-- Content description (not visible, for screen readers etc.): Navigate to open tabs -->
<string name="browser_tabs_button">တပ်ဗ်များကို ဖွင့်ပါ</string>
@ -87,8 +110,6 @@
<string name="browser_menu_new_tab">တပ်ဗ် အသစ်</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">စုဆောင်းမှုသို့သိမ်းဆည်းပါ</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">ဆိုဘ်ပြဿနာကိုတင်ပြပါ</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">မျှဝေ</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -102,7 +123,7 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">%1$s က ထောက်ပံ့ပေးထားတယ်</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">စာဖတ်သူမြင်ကွင်း</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">အက်ပ်ထဲတွင်ဖွင့်ပါ</string>
@ -123,14 +144,8 @@
<!-- Search Fragment -->
<!-- Button in the search view that lets a user search by scanning a QR code -->
<string name="search_scan_button">စစ်ဆေးပါ</string>
<!-- Button in the search view that lets a user search by using a shortcut -->
<string name="search_shortcuts_button">လမ်းတိုများ</string>
<!-- Button in the search view when shortcuts are displayed that takes a user to the search engine settings -->
<string name="search_shortcuts_engine_settings">အင်ဂျင်အပြင်အဆင် ရှာဖွေပါ</string>
<!-- DEPRECATED: Header displayed when selecting a shortcut search engine -->
<string name="search_shortcuts_search_with">ရှာပါ</string>
<!-- Header displayed when selecting a shortcut search engine -->
<string name="search_shortcuts_search_with_2">ဤတစ်ကြိမ်တွင်ရှာဖွေပါ -</string>
<!-- Button in the search view that lets a user navigate to the site in their clipboard -->
<string name="awesomebar_clipboard_title">ကလစ်ဘုတ်မှ လင့်ခ်ကိုဖြည့်စွက်ပါ</string>
<!-- Button in the search suggestions onboarding that allows search suggestions in private sessions -->
@ -150,6 +165,9 @@
<!-- Text preview for larger sized widgets -->
<string name="search_widget_text_long">ဝဘ်တွင် ရှာဖွေပါ</string>
<!-- Content description (not visible, for screen readers etc.): Voice search -->
<string name="search_widget_voice">အသံဖြင့် ရှာရန်</string>
<!-- Preferences -->
<!-- Title for the settings page-->
<string name="settings">အပြင်အဆင်များ</string>
@ -227,10 +245,12 @@
<!-- Preference for developers -->
<string name="preferences_remote_debugging">USB မှတဆင့် Remote debugging</string>
<!-- Preference title for switch preference to show search shortcuts -->
<string name="preferences_show_search_shortcuts">ရှာဖွေမှုဖြတ်လမ်းများကိုပြပါ</string>
<!-- Preference title for switch preference to show search engines -->
<string name="preferences_show_search_engines">ရှာဖွေရေး အင်ဂျင်များပြရန်</string>
<!-- Preference title for switch preference to show search suggestions -->
<string name="preferences_show_search_suggestions">ရှာဖွေရေး အကြံပြုချက်များကို ဖေါ်ပြပါ</string>
<!-- Preference title for switch preference to show voice search button -->
<string name="preferences_show_voice_search">အသံရှာ ဖွေမှု ပြရန်</string>
<!-- Preference title for switch preference to show search suggestions also in private mode -->
<string name="preferences_show_search_suggestions_in_private">ကိုယ်ပိုင်သီးသန့်အပိုင်းများတွင်ပြပါ</string>
<!-- Preference title for switch preference to show a clipboard suggestion when searching -->
@ -257,6 +277,8 @@
<string name="preferences_sync_bookmarks">စာမှတ်များ</string>
<!-- Preference for syncing logins -->
<string name="preferences_sync_logins">ဝင်ရောက်မှုများ</string>
<!-- Preference for syncing tabs -->
<string name="preferences_sync_tabs_2">ပွင့်နေသော တက်ဗ်များ</string>
<!-- Preference for signing out -->
<string name="preferences_sign_out">ထွက်ရန်</string>
<!-- Preference displays and allows changing current FxA device name -->
@ -278,7 +300,7 @@
<!-- Text for displaying the default device name.
The first parameter is the application name, the second is the device manufacturer name
and the third is the device model. -->
<string name="default_device_name">%s %s အပေါ် %s</string>
<string name="default_device_name_2">%1$s သည် %2$s %3$s တွင်</string>
<!-- Send Tab -->
<!-- Name of the "receive tabs" notification channel. Displayed in the "App notifications" system settings for the app -->
@ -348,7 +370,7 @@
<!-- Pairing Feature strings -->
<!-- Instructions on how to access pairing -->
<string name="pair_instructions"><![CDATA[ကျူအာကုတ်ရရှိရန် သင့်ကွန်ပျူတာပေါ်မှ Firefox တွင် <b>firefox.com/pair</b> သို့လည်ပတ်ပါ။]]></string>
<string name="pair_instructions_2"><![CDATA[<b>firefox.com/pair</b> တွင်ပြနေသော QR ကုဒ်ကို ဖတ်ပါ]]></string>
<!-- Button to open camera for pairing -->
<string name="pair_open_camera">ကင်မရာဖွင့်ပါ</string>
<!-- Button to cancel pairing -->
@ -393,8 +415,6 @@
<string name="library_reading_list">စာဖတ်စာရင်း</string>
<!-- Menu Item Label for Search in Library -->
<string name="library_search">ရှာပါ</string>
<!-- Library Page Title -->
<string name="library_title">စာကြည့်တိုက်</string>
<!-- Settings Page Title -->
<string name="settings_title">အပြင်အဆင်များ</string>
<!-- Content description (not visible, for screen readers etc.): "Menu icon for items on a history item" -->
@ -412,6 +432,24 @@
<string name="tabs_header_private_tabs_title">သီးသန့် တဗ် များ</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">တက်ဗ် ထည့်ပါ</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">သီးသန့် တက်ဗ် ထည့်</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">သီးသန့်</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">ပွင့်နေသည့် တက်ဗ်များ</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">စုစည်းမှု ထဲသို့ သိမ်းရန်</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">တက်ဗ်များ အားလုံး မျှဝေရန်</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">တက်ဗ်များ အားလုံး ပိတ်ရန်</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">တက်ဗ် အသစ်</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">မူလ သို့ သွားရန်</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">စုစည်းမှု ထဲမှ တက်ဗ် ကို ဖယ်ရှားရန်</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
<string name="close_tab">တပ်ဗ်ကို ပိတ်ရန်</string>
<!-- Content description (not visible, for screen readers etc.): Close tab <title> button. First parameter is tab title -->
@ -423,7 +461,7 @@
<!-- Open tabs menu item to share all tabs -->
<string name="tabs_menu_share_tabs">တပ်ဗ်များကို မျှဝေပါ</string>
<!-- Open tabs menu item to save tabs to collection -->
<string name="tabs_menu_save_to_collection">စုဆောင်းမှုသို့သိမ်းဆည်းပါ</string>
<string name="tabs_menu_save_to_collection1">စုဆောင်းမှု သို့ တက်ဗ်များ သိမ်းရန်</string>
<!-- Content description (not visible, for screen readers etc.): Opens the tab menu when pressed -->
<string name="tab_menu">တဗ်မန်နူး</string>
<!-- Tab menu item to share the tab -->
@ -447,13 +485,24 @@
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">ဖယ်ရှားပါ</string>
<!-- Button in the current tab tray header in multiselect mode. Saved the selected tabs to a collection when pressed. -->
<string name="tab_tray_save_to_collection">သိမ်းရန်</string>
<!-- History -->
<!-- Text for the button to clear all history -->
<string name="history_delete_all">မှတ်တမ်းကို ဖျက်ပါ</string>
<!-- Text for the dialog to confirm clearing all history -->
<string name="history_delete_all_dialog">သင့် မှတ်တမ်းကို ဖျက်ပစ်မှာ သေချာပြီလား?</string>
<!-- Text for the snackbar to confirm that multiple browsing history items has been deleted -->
<string name="history_delete_multiple_items_snackbar">မှတ်တမ်း ကို ဖျက်ပြီး</string>
<!-- Text for the snackbar to confirm that a single browsing history item has been deleted. The first parameter is the shortened URL of the deleted history item. -->
<string name="history_delete_single_item_snackbar">%1$s ခု ဖျက်ပြီး</string>
<!-- Text for positive action to delete history in deleting history dialog -->
<string name="history_clear_dialog">ရှင်းလင်းပါ</string>
<!-- History overflow menu copy button -->
<string name="history_menu_copy_button">ကူးရန်</string>
<!-- History overflow menu share button -->
<string name="history_menu_share_button">မျှဝေရန်</string>
<!-- Text for the button to delete a single history item -->
<string name="history_delete_item">ဖျက်ပါ</string>
<!-- History multi select title in app bar
@ -554,8 +603,6 @@
<!-- Bookmark snackbar message on deletion
The first parameter is the host part of the URL of the bookmark deleted, if any -->
<string name="bookmark_deletion_snackbar_message">%1$s ဖျက်ပြီး</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks -->
<string name="bookmark_deletion_multiple_snackbar_message">ရွေးချယ်ထားသည့်အမှတ်အသားများကိုဖျက်ပစ်သည်</string>
<!-- Bookmark undo button for deletion snackbar action -->
<string name="bookmark_undo_deletion">မလုပ်တော့ပါ</string>
@ -618,16 +665,14 @@
<string name="delete_browsing_data_quit_off">ပိတ်ပါ</string>
<!-- Collections -->
<!-- Label to describe what collections are to a new user without any collections -->
<string name="collections_description">သင့်အတွက်အရေးကြီးတဲ့အရာတွေကိုစုဆောင်းပါ။ စတင်ရန်စုဆောင်းမှုအသစ်တစ်ခုရရှိရန်ဖွင့်ထားသောတဗ်များကိုသိမ်းဆည်းပါ။</string>
<!-- Collections header on home fragment -->
<string name="collections_header">စုဆည်းမှုများ</string>
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
<string name="collection_menu_button_content_description">စုဆောင်းခြင်းမီနူး</string>
<!-- No Open Tabs Message Header -->
<string name="no_collections_header">စုစည်းမှု မရှိပါ</string>
<!-- No Open Tabs Message Description -->
<string name="no_collections_description">သင်၏ စုစည်းမှုများကိုဤနေရာတွင်ပြလိမ့်မည်။</string>
<string name="no_collections_header1">သင် အတွက် အရေးပါသည်များ ကို စုစည်းပါ</string>
<!-- Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">ရှာဖွေခြင်းများ၊ ဆိုက်များ နှင့် တက်ဗ်များ ကို အမျိုးအစားတူစုခြင်းဖြင့် နောင်တွင် မြန်မြန် ရယူနိုင်လိမ့်မည်။</string>
<!-- Title for the "select tabs" step of the collection creator -->
<string name="create_collection_select_tabs">တက်ပ်များကိုရွေးပါ</string>
<!-- Title for the "select collection" step of the collection creator -->
@ -651,6 +696,8 @@
<string name="create_collection_save_to_collection_tab_selected">% d tabs ကိုရွေးချယ်ထားပါသည်</string>
<!-- Text shown in snackbar when multiple tabs have been saved in a collection -->
<string name="create_collection_tabs_saved">တဗ်များကိုသိမ်းထားပြီး</string>
<!-- Text shown in snackbar when one or multiple tabs have been saved in a new collection -->
<string name="create_collection_tabs_saved_new_collection">စုစည်းမှု သိမ်းပြီး။</string>
<!-- Text shown in snackbar when one tab has been saved in a collection -->
<string name="create_collection_tab_saved">တဗ်ကိုသိမ်းထားပြီး</string>
<!-- Content description (not visible, for screen readers etc.): button to close the collection creator -->
@ -658,6 +705,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">သိမ်းပါ</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">မြင်ကွင်း</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">စုဆည်းမှု %d</string>
@ -752,6 +802,10 @@
<string name="qr_scanner_dialog_negative">Deny</string>
<!-- Tab collection deletion prompt dialog message. Placeholder will be replaced with the collection name -->
<string name="tab_collection_dialog_message">%1$s ကိုသင်ဖျက်လိုသလား။</string>
<!-- Collection and tab deletion prompt dialog message. This will show when the last tab from a collection is deleted -->
<string name="delete_tab_and_collection_dialog_message">ဤ တက်ဗ် ကို ဖျက်ခြင်း ကြောင့် ဤ စုစည်းမှုတစ်ခုလုံး ပျက်သွားလိမ့်မည်။ သင် သည် စုစည်းမှု အသစ် ကိုအချိန်မရွေး ပြုလုပ်နိုင်ပါသည်။</string>
<!-- Collection and tab deletion prompt dialog title. Placeholder will be replaced with the collection name. This will show when the last tab from a collection is deleted -->
<string name="delete_tab_and_collection_dialog_title">%1$s ကိုဖျက်မှာလား?</string>
<!-- Tab collection deletion prompt dialog option to delete the collection -->
<string name="tab_collection_dialog_positive">ဖျက်ပါ</string>
<!-- Tab collection deletion prompt dialog option to cancel deleting the collection -->
@ -768,16 +822,11 @@
<!-- Title for Accessibility Text Size Scaling Preference -->
<string name="preference_accessibility_font_size_title">စာလုံးအရွယ်အစား</string>
<!-- Title for Accessibility Text Automatic Size Scaling Preference -->
<string name="preference_accessibility_auto_size">အလိုအလျောက်စာလုံးအရွယ်အစား</string>
<!-- Summary for Accessibility Text Automatic Size Scaling Preference -->
<string name="preference_accessibility_auto_size_summary">စာလုံးအရွယ်အစားသည်သင်၏ဖုန်းနှင့်ကိုက်ညီပါလိမ့်မည်။ဤနေရာတွင်ဖောင့်အရွယ်အစားကိုစီမံခန့်ခွဲရန်ကိုပိတ်ပါ။</string>
<!-- Title for the Delete browsing data preference -->
<string name="preferences_delete_browsing_data">ကြည့်ရှုမှုအချက်အလက်များ ဖျက်ပါ</string>
<!-- Title for the tabs item in Delete browsing data -->
<string name="preferences_delete_browsing_data_tabs_title">တပ်ဗ်များကို ဖွင့်ပါ</string>
<!-- Subtitle for the tabs item in Delete browsing data, parameter will be replaced with the number of open tabs -->
<string name="preferences_delete_browsing_data_tabs_subtitle">%d တဗ်များ</string>
<!-- Title for the data and history items in Delete browsing data -->
@ -809,8 +858,6 @@
<string name="preference_summary_delete_browsing_data_on_quit">ပင်မမန်နူးမှ \&quot;Quit\&quot; ကိုသင်ရွေးလျှင် ရှာဖွေအချက်အလက်များကိုအလိုအလျောက်ဖျက်ပါမည်။</string>
<!-- Summary for the Delete browsing data on quit preference. "Quit" translation should match delete_browsing_data_on_quit_action translation. -->
<string name="preference_summary_delete_browsing_data_on_quit_2">ပင်မမန်နူးမှ \&quot;Quit\&quot; ကိုသင်ရွေးလျှင် ရှာဖွေအချက်အလက်များကိုအလိုအလျောက်ဖျက်ပါမည်။</string>
<!-- Category for history items to delete on quit in delete browsing data on quit -->
<string name="preferences_delete_browsing_data_on_quit_browsing_history">ရှာဖွေကြည့်ရှုမှု မှတ်တမ်း</string>
<!-- Action item in menu for the Delete browsing data on quit feature -->
<string name="delete_browsing_data_on_quit_action">ထွက်ရန်</string>
@ -862,20 +909,9 @@
<string name="onboarding_firefox_account_sync_is_on">ထပ်တူပြုခြင်းဖွင့်ထားသည်</string>
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">ဝင်ရောက်ရန်မအောင်မြင်ပါ</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">သင့်ကိုယ်သင်ကာကွယ်ပါ</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">သင့်ကိုအွန်လိုင်းပေါ်တွင် ခြေရာခံခြင်းမှ %s မှ ဆိုက်များကိုရပ်ဆိုင်းပြီးကူညီလိမ့်မည်။</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">စံ</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">ခြေရာခံသူများကိုပိတ်သော်လည်း စာမျက်နှာများကိုပုံမှန်ဆွဲတင်ခွင့်ပြုပါ။</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">တင်းကြပ်စွာ (အကြံပြုသည်)</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">ပိုမိုကောင်းမွန်သောကာကွယ်မှုနှင့်စွမ်းဆောင်ရည်အတွက်ခြေရာခံသူများကိုပိုမိုပိတ်ဆို့ထားသောကြောင့်အချို့သောဆိုဒ်များကိုအလုပ်မလုပ်နိုင်ပါ</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -959,33 +995,15 @@
<string name="preference_enhanced_tracking_protection_explanation">သင့်ရဲ့အချက်အလက်များကိုသင်ကိုယ်တိုင်သိမ်းထားပါ။ %s သည်အွန်လိုင်းတွင်လုပ်ဆောင်သောအသုံးပြုမှုများကို ခြေရာခံမှုများမှသင့်အားကာကွယ်ပေးသည်။</string>
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">ပိုမိုလေ့လာရန်</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">စံ</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">စံ (အကြံပြုချက်)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">လုံခြုံရေးနှင့် စွမ်းဆောင်ရည်ကို ဟန်ချက်ညီစေရန် ပြုလုပ်ထားသည်။</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">စာမျက်နှာများသည်ပုံမှန်အားဖြင့်ဆွဲတင်လိမ့်မည်၊ သို့သော် ခြေရာခံတွေကိုပိတ်လိမ့်မည်။</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">စံချိန်မြင့်ခြေရာခံကာကွယ်ခြင်းက ဘာတွေကိုပိတ်ဆို့မလဲ</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">တင်းကျပ်ပါ</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">တင်းကျပ်ရန် (ပုံမှန်)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">ပိုမိုအားကောင်းသည့်ခြေရာခံကာကွယ်ခြင်းနှင့်ပိုမိုမြန်ဆန်သောစွမ်းဆောင်နိုင်မှုများရှိသော်လည်းအချို့သောဆိုဒ်များမှာအလုပ်မလုပ်နိုင်ပါ။</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">တင်းကြပ်စွာ (အကြံပြုသည်)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">ပိုမိုလုံခြုံသောကာကွယ်မှုဖြစ်သော်လည်းအချို့သောဆိုဒ်များသို့မဟုတ်ပါဝင်သည့်အရာများအားပျက်စီးစေနိုင်သည်။</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">ကန့်သတ်ခြေရာခံကာကွယ်ခြင်းက ဘာတွေကိုပိတ်ဆို့မလဲ</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">စိတ်ကြိုက်</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">ပိတ်ဆို့ရန် ခြေရာခံသူများနှင့် scriptsများကို ရွေးချယ်ပါ။</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">စိတ်ကြိုက်ခြေရာခံကာကွယ်ခြင်းက ဘာတွေကိုပိတ်ဆို့မလဲ</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1035,8 +1053,6 @@
<string name="etp_tracking_content_title">နောက်ယောင်ခံသည့် အရာများ</string>
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">ခြေရာခံခြင်းကုဒ်ပါရှိခြင်းကြောင့်အပြင်ဘက်ကြော်ငြာများ၊ဗွီဒီယိုများနှင့်အခြားအကြောင်းအရာများကိုတားမြစ်သည်။ အချို့သော ဆိုက်၏လုပ်ဆောင်နိုင်စွမ်းကိုအကျိုးသက်ရောက်နိုင်သည်။</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">စိတ်မချရ၍ %s သည် ခြေရာခံသူများကိုဤဆိုက်ပေါ်တွင်ပိတ်ဆို့ထားသည်။ ဘာတွေကိုပိတ်ဆို့ထားလဲနှိပ်၍ကြည့်ပါ။</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">ဤဆိုက်အတွက် ကာကွယ်မှုဖွင့်ထားသည်။</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
@ -1284,4 +1300,5 @@
<string name="login_deletion_confirmation">ဤဝင်ရောက်မှုကိုဖျက်မှာသေချာပါသလား။</string>
<!-- Positive action of a dialog asking to delete -->
<string name="dialog_delete_positive">ဖျက်ပါ</string>
</resources>
</resources>

@ -25,6 +25,8 @@
<!-- Message announced to the user when tab tray is selected with 0 or 2+ tabs -->
<string name="open_tab_tray_plural">Odprtih zavihkov: %1$s. Tapnite za preklop zavihkov.</string>
<!-- Tab tray multi select title in app bar. The first parameter is the number of tabs selected -->
<string name="tab_tray_multi_select_title">%1$d izbranih</string>
<!-- Label of button in create collection dialog for creating a new collection -->
<string name="tab_tray_add_new_collection">Dodaj novo zbirko</string>
<!-- Label of editable text in create collection dialog for naming a new collection -->

@ -217,7 +217,7 @@ class DefaultBrowserToolbarControllerTest {
@Test
fun handleToolbarBackPress() = runBlockingTest {
val item = ToolbarMenu.Item.Back
val item = ToolbarMenu.Item.Back(false)
val controller = createController(scope = this)
controller.handleToolbarItemInteraction(item)
@ -226,6 +226,17 @@ class DefaultBrowserToolbarControllerTest {
verify { sessionUseCases.goBack(currentSession) }
}
@Test
fun handleToolbarBackLongPress() = runBlockingTest {
val item = ToolbarMenu.Item.Back(true)
val controller = createController(scope = this)
controller.handleToolbarItemInteraction(item)
verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.BACK)) }
verify { navController.navigate(R.id.action_global_tabHistoryDialogFragment) }
}
@Test
fun handleToolbarForwardPress() = runBlockingTest {
val item = ToolbarMenu.Item.Forward(false)

@ -212,6 +212,7 @@ class DefaultSessionControlControllerTest {
fun handleCollectionShareTabsClicked() {
val collection = mockk<TabCollection> {
every { tabs } returns emptyList()
every { title } returns ""
}
controller.handleCollectionShareTabsClicked(collection)

@ -48,6 +48,7 @@ class ShareControllerTest {
// Need a valid context to retrieve Strings for example, but we also need it to return our "metrics"
private val context: Context = spyk(testContext)
private val metrics: MetricController = mockk(relaxed = true)
private val shareSubject = "shareSubject"
private val shareData = listOf(
ShareData(url = "url0", title = "title0"),
ShareData(url = "url1", title = "title1")
@ -65,7 +66,7 @@ class ShareControllerTest {
private val dismiss = mockk<(ShareController.Result) -> Unit>(relaxed = true)
private val recentAppStorage = mockk<RecentAppsStorage>(relaxed = true)
private val controller = DefaultShareController(
context, shareData, sendTabUseCases, snackbar, navController,
context, shareSubject, shareData, sendTabUseCases, snackbar, navController,
recentAppStorage, testCoroutineScope, dismiss
)
@ -91,8 +92,8 @@ class ShareControllerTest {
// needed for capturing the actual Intent used the `slot` one doesn't have this flag so we
// need to use an Activity Context.
val activityContext: Context = mockk<Activity>()
val testController = DefaultShareController(activityContext, shareData, mockk(), mockk(), mockk(),
recentAppStorage, testCoroutineScope, dismiss)
val testController = DefaultShareController(activityContext, shareSubject, shareData, mockk(),
mockk(), mockk(), recentAppStorage, testCoroutineScope, dismiss)
every { activityContext.startActivity(capture(shareIntent)) } just Runs
every { recentAppStorage.updateRecentApp(appShareOption.activityName) } just Runs
@ -101,6 +102,7 @@ class ShareControllerTest {
// Check that the Intent used for querying apps has the expected structure
assertTrue(shareIntent.isCaptured)
assertEquals(Intent.ACTION_SEND, shareIntent.captured.action)
assertEquals(shareSubject, shareIntent.captured.extras!![Intent.EXTRA_SUBJECT])
assertEquals(textToShare, shareIntent.captured.extras!![Intent.EXTRA_TEXT])
assertEquals("text/plain", shareIntent.captured.type)
assertEquals(Intent.FLAG_ACTIVITY_NEW_TASK, shareIntent.captured.flags)
@ -124,8 +126,8 @@ class ShareControllerTest {
// needed for capturing the actual Intent used the `slot` one doesn't have this flag so we
// need to use an Activity Context.
val activityContext: Context = mockk<Activity>()
val testController = DefaultShareController(activityContext, shareData, mockk(), snackbar,
mockk(), mockk(), testCoroutineScope, dismiss)
val testController = DefaultShareController(activityContext, shareSubject, shareData, mockk(),
snackbar, mockk(), mockk(), testCoroutineScope, dismiss)
every { activityContext.startActivity(capture(shareIntent)) } throws SecurityException()
every { activityContext.getString(R.string.share_error_snackbar) } returns "Cannot share to this app"
@ -247,6 +249,7 @@ class ShareControllerTest {
fun `getSuccessMessage should return different strings depending on the number of shared tabs`() {
val controllerWithOneSharedTab = DefaultShareController(
context,
shareSubject,
listOf(ShareData(url = "url0", title = "title0")),
mockk(),
mockk(),
@ -280,7 +283,7 @@ class ShareControllerTest {
ShareData(url = "url1")
)
val controller = DefaultShareController(
context, shareData, sendTabUseCases, snackbar, navController,
context, shareSubject, shareData, sendTabUseCases, snackbar, navController,
recentAppStorage, testCoroutineScope, dismiss
)
@ -288,6 +291,21 @@ class ShareControllerTest {
assertEquals(expectedShareText, controller.getShareText())
}
@Test
fun `getShareSubject will return "shareSubject" if that is non null`() {
assertEquals(shareSubject, controller.getShareSubject())
}
@Test
fun `getShareSubject will return a concatenation of tab titles if "shareSubject" is null`() {
val controller = DefaultShareController(
context, null, shareData, sendTabUseCases, snackbar, navController,
recentAppStorage, testCoroutineScope, dismiss
)
assertEquals("title0, title1", controller.getShareSubject())
}
@Test
fun `ShareTab#toTabData maps a list of ShareTab to a TabData list`() {
var tabData: List<TabData>

@ -3,5 +3,5 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
object AndroidComponents {
const val VERSION = "54.0.20200810074539"
const val VERSION = "54.0.20200812130143"
}

@ -76,7 +76,7 @@ complexity:
# https://github.com/mozilla-mobile/fenix/issues/4861
threshold: 75
LongParameterList:
active: trued
active: true
excludes: "**/*Controller.kt, **/*Integration.kt"
functionThreshold: 6
constructorThreshold: 7

Loading…
Cancel
Save