diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:35:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:35:49 +0000 |
commit | d8bbc7858622b6d9c278469aab701ca0b609cddf (patch) | |
tree | eff41dc61d9f714852212739e6b3738b82a2af87 /mobile/android/android-components/components/feature/media/src | |
parent | Releasing progress-linux version 125.0.3-1~progress7.99u1. (diff) | |
download | firefox-d8bbc7858622b6d9c278469aab701ca0b609cddf.tar.xz firefox-d8bbc7858622b6d9c278469aab701ca0b609cddf.zip |
Merging upstream version 126.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mobile/android/android-components/components/feature/media/src')
146 files changed, 8017 insertions, 0 deletions
diff --git a/mobile/android/android-components/components/feature/media/src/main/AndroidManifest.xml b/mobile/android/android-components/components/feature/media/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..ba25f83356 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/AndroidManifest.xml @@ -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/. --> +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> + + <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> + <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/> + <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> + + <application /> + +</manifest> diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/MediaSessionFeature.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/MediaSessionFeature.kt new file mode 100644 index 0000000000..dcc4013fda --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/MediaSessionFeature.kt @@ -0,0 +1,108 @@ +/* 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 mozilla.components.feature.media + +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.ServiceConnection +import android.os.IBinder +import androidx.annotation.VisibleForTesting +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.distinctUntilChangedBy +import kotlinx.coroutines.flow.map +import mozilla.components.browser.state.state.SessionState +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.engine.mediasession.MediaSession.PlaybackState.PAUSED +import mozilla.components.concept.engine.mediasession.MediaSession.PlaybackState.PLAYING +import mozilla.components.feature.media.ext.findActiveMediaTab +import mozilla.components.feature.media.service.MediaServiceBinder +import mozilla.components.feature.media.service.MediaSessionDelegate +import mozilla.components.lib.state.ext.flowScoped + +/** + * Feature implementation that handles MediaSession state changes and controls showing a notification + * reflecting the media states. + * + * @param applicationContext the application's [Context]. + * @param mediaServiceClass the media service class will handle the media playback state + * @param store Reference to the browser store where tab state is located. + */ +class MediaSessionFeature( + val applicationContext: Context, + val mediaServiceClass: Class<*>, + val store: BrowserStore, +) { + @VisibleForTesting + internal var scope: CoroutineScope? = null + + @VisibleForTesting + internal var mediaService: MediaSessionDelegate? = null + + @VisibleForTesting + internal val mediaServiceConnection = object : ServiceConnection { + override fun onServiceConnected(className: ComponentName, binder: IBinder) { + val serviceBinder = binder as MediaServiceBinder + mediaService = serviceBinder.getMediaService() + // The service is bound when media starts playing. Ensure in-progress media status is correctly shown. + store.state.findActiveMediaTab()?.let { + showMediaStatus(it) + } + } + + override fun onServiceDisconnected(className: ComponentName?) { + mediaService = null + } + } + + /** + * Starts the feature. + */ + fun start() { + scope = store.flowScoped { flow -> + flow.map { state -> state.findActiveMediaTab() } + .distinctUntilChangedBy { tab -> tab?.mediaSessionState } + .collect { state -> showMediaStatus(state) } + } + } + + /** + * Stops the feature. + */ + fun stop() { + scope?.cancel() + scope = null + } + + @VisibleForTesting + internal fun showMediaStatus(sessionState: SessionState?) { + if (sessionState == null) { + mediaService?.let { + it.handleNoMedia() + applicationContext.unbindService(mediaServiceConnection) + mediaService = null + } + + return + } + + when (sessionState.mediaSessionState?.playbackState) { + PLAYING -> { + if (mediaService == null) { + applicationContext.bindService( + Intent(applicationContext, mediaServiceClass), + mediaServiceConnection, + Context.BIND_AUTO_CREATE, + ) + } + + mediaService?.handleMediaPlaying(sessionState) + } + PAUSED -> mediaService?.handleMediaPaused(sessionState) + else -> mediaService?.handleMediaStopped(sessionState) + } + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/ext/MediaSessionState.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/ext/MediaSessionState.kt new file mode 100644 index 0000000000..fe0825a648 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/ext/MediaSessionState.kt @@ -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 mozilla.components.feature.media.ext + +import android.support.v4.media.session.PlaybackStateCompat +import mozilla.components.browser.state.state.MediaSessionState +import mozilla.components.concept.engine.mediasession.MediaSession + +/** + * Turns the [MediaSessionState] into a [PlaybackStateCompat] to be used with a `MediaSession`. + */ +internal fun MediaSessionState.toPlaybackState() = + PlaybackStateCompat.Builder() + .setActions( + PlaybackStateCompat.ACTION_PLAY_PAUSE or + PlaybackStateCompat.ACTION_PLAY or + PlaybackStateCompat.ACTION_PAUSE, + ) + .setState( + when (playbackState) { + MediaSession.PlaybackState.PLAYING -> PlaybackStateCompat.STATE_PLAYING + MediaSession.PlaybackState.PAUSED -> PlaybackStateCompat.STATE_PAUSED + else -> PlaybackStateCompat.STATE_NONE + }, + // Time state not exposed yet: + // https://github.com/mozilla-mobile/android-components/issues/2458 + PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN, + when (playbackState) { + // The actual playback speed is not exposed yet: + // https://github.com/mozilla-mobile/android-components/issues/2459 + MediaSession.PlaybackState.PLAYING -> 1.0f + else -> 0.0f + }, + ) + .build() + +/** + * If this state is [MediaSession.PlaybackState.PLAYING] then return true, else return false. + */ +fun MediaSessionState.playing(): Boolean { + return when (playbackState) { + MediaSession.PlaybackState.PLAYING -> true + else -> false + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/ext/SessionState.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/ext/SessionState.kt new file mode 100644 index 0000000000..4ee0099417 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/ext/SessionState.kt @@ -0,0 +1,49 @@ +/* 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 mozilla.components.feature.media.ext + +import android.content.Context +import android.graphics.Bitmap +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.SessionState +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.feature.media.R + +internal fun SessionState?.getTitleOrUrl(context: Context, title: String? = null): String = when { + this == null -> context.getString(R.string.mozac_feature_media_notification_private_mode) + content.private -> context.getString(R.string.mozac_feature_media_notification_private_mode) + title != null -> title + content.title.isNotEmpty() -> content.title + else -> content.url +} + +internal fun SessionState?.getArtistOrUrl(artist: String? = null): String = when { + this == null || content.private -> "" + artist != null -> artist + else -> content.url +} + +@Suppress("TooGenericExceptionCaught") +internal suspend fun SessionState?.getNonPrivateIcon( + getArtwork: (suspend () -> Bitmap?)?, +): Bitmap? = when { + this == null -> null + content.private -> null + getArtwork != null -> getArtwork() ?: content.icon + else -> content.icon +} + +/** + * Finds the [SessionState] (tab or custom tab) that has an active media session. Returns `null` if + * no tab has a media session attached. + */ +fun BrowserState.findActiveMediaTab(): SessionState? { + return (tabs.asSequence() + customTabs.asSequence()).filter { tab -> + tab.mediaSessionState != null && + tab.mediaSessionState!!.playbackState != MediaSession.PlaybackState.UNKNOWN + }.sortedByDescending { tab -> + tab.mediaSessionState + }.firstOrNull() +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/facts/MediaFacts.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/facts/MediaFacts.kt new file mode 100644 index 0000000000..f70253d9d6 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/facts/MediaFacts.kt @@ -0,0 +1,50 @@ +/* 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 mozilla.components.feature.media.facts + +import mozilla.components.support.base.Component +import mozilla.components.support.base.facts.Action +import mozilla.components.support.base.facts.Fact +import mozilla.components.support.base.facts.collect + +/** + * Facts emitted for telemetry related to [MediaFeature] + */ +class MediaFacts { + /** + * Items that specify which portion of the [MediaFeature] was interacted with + */ + object Items { + const val NOTIFICATION = "notification" + const val STATE = "state" + } +} + +internal fun emitNotificationPlayFact() = emitNotificationFact(Action.PLAY) +internal fun emitNotificationPauseFact() = emitNotificationFact(Action.PAUSE) + +internal fun emitStatePlayFact() = emitStateFact(Action.PLAY) +internal fun emitStatePauseFact() = emitStateFact(Action.PAUSE) +internal fun emitStateStopFact() = emitStateFact(Action.STOP) + +private fun emitStateFact( + action: Action, +) { + Fact( + Component.FEATURE_MEDIA, + action, + MediaFacts.Items.STATE, + ).collect() +} + +private fun emitNotificationFact( + action: Action, +) { + Fact( + Component.FEATURE_MEDIA, + action, + MediaFacts.Items.NOTIFICATION, + ).collect() +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocus.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocus.kt new file mode 100644 index 0000000000..cb232d8909 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocus.kt @@ -0,0 +1,116 @@ +/* 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 mozilla.components.feature.media.focus + +import android.media.AudioManager +import android.os.Build +import mozilla.components.browser.state.selector.findTabOrCustomTab +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.support.base.log.logger.Logger + +/** + * Class responsible for request audio focus and reacting to audio focus changes. + * + * https://developer.android.com/guide/topics/media-apps/audio-focus + */ +internal class AudioFocus( + audioManager: AudioManager, + val store: BrowserStore, +) : AudioManager.OnAudioFocusChangeListener { + private val logger = Logger("AudioFocus") + private var playDelayed = false + private var resumeOnFocusGain = false + private var sessionId: String? = null + + private val audioFocusController = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + AudioFocusControllerV26(audioManager, this) + } else { + AudioFocusControllerV21(audioManager, this) + } + + @Synchronized + fun request(tabId: String?) { + sessionId = tabId + val result = audioFocusController.request() + processAudioFocusResult(result) + } + + @Synchronized + fun abandon() { + audioFocusController.abandon() + sessionId = null + playDelayed = false + resumeOnFocusGain = false + } + + private fun processAudioFocusResult(result: Int) { + logger.debug("processAudioFocusResult($result)") + val sessionState = sessionId?.let { + store.state.findTabOrCustomTab(it) + } + + when (result) { + AudioManager.AUDIOFOCUS_REQUEST_GRANTED -> { + // Granted: Gecko already started playing media. + playDelayed = false + resumeOnFocusGain = false + } + AudioManager.AUDIOFOCUS_REQUEST_FAILED -> { + // Failed: Pause media since we didn't get audio focus. + sessionState?.mediaSessionState?.controller?.pause() + playDelayed = false + resumeOnFocusGain = false + } + AudioManager.AUDIOFOCUS_REQUEST_DELAYED -> { + // Delayed: Pause media until we gain focus via callback + sessionState?.mediaSessionState?.controller?.pause() + playDelayed = true + resumeOnFocusGain = false + } + else -> throw IllegalStateException("Unknown audio focus request response: $result") + } + } + + @Synchronized + @Suppress("ComplexMethod") + override fun onAudioFocusChange(focusChange: Int) { + logger.debug("onAudioFocusChange($focusChange)") + val sessionState = sessionId?.let { + store.state.findTabOrCustomTab(it) + } + + when (focusChange) { + AudioManager.AUDIOFOCUS_GAIN -> { + if (playDelayed || resumeOnFocusGain) { + sessionState?.mediaSessionState?.controller?.play() + playDelayed = false + resumeOnFocusGain = false + } + } + + AudioManager.AUDIOFOCUS_LOSS -> { + sessionState?.mediaSessionState?.controller?.pause() + resumeOnFocusGain = false + playDelayed = false + } + + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> { + sessionState?.mediaSessionState?.controller?.pause() + resumeOnFocusGain = sessionState?.mediaSessionState?.playbackState == MediaSession.PlaybackState.PLAYING + + playDelayed = false + } + + else -> { + logger.debug("Unhandled focus change: $focusChange") + } + + // We do not handle any ducking related focus change here. On API 26+ the system should + // duck and restore the volume automatically + // https://github.com/mozilla-mobile/android-components/issues/3936 + } + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocusController.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocusController.kt new file mode 100644 index 0000000000..d8da73b916 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocusController.kt @@ -0,0 +1,13 @@ +/* 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 mozilla.components.feature.media.focus + +/** + * A controller that knows how to request and abandon audio focus. + */ +internal interface AudioFocusController { + fun request(): Int + fun abandon() +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocusControllerV21.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocusControllerV21.kt new file mode 100644 index 0000000000..b409dd9bb4 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocusControllerV21.kt @@ -0,0 +1,28 @@ +/* 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 mozilla.components.feature.media.focus + +import android.media.AudioManager + +/** + * [AudioFocusController] implementation for Android API 21+. + */ +@Suppress("DEPRECATION") +internal class AudioFocusControllerV21( + private val audioManager: AudioManager, + private val listener: AudioManager.OnAudioFocusChangeListener, +) : AudioFocusController { + override fun request(): Int { + return audioManager.requestAudioFocus( + listener, + AudioManager.STREAM_MUSIC, + AudioManager.AUDIOFOCUS_GAIN, + ) + } + + override fun abandon() { + audioManager.abandonAudioFocus(listener) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocusControllerV26.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocusControllerV26.kt new file mode 100644 index 0000000000..814cfb0857 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/focus/AudioFocusControllerV26.kt @@ -0,0 +1,39 @@ +/* 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 mozilla.components.feature.media.focus + +import android.annotation.TargetApi +import android.media.AudioAttributes +import android.media.AudioFocusRequest +import android.media.AudioManager +import android.os.Build + +/** + * [AudioFocusController] implementation for Android API 26+. + */ +@TargetApi(Build.VERSION_CODES.O) +internal class AudioFocusControllerV26( + private val audioManager: AudioManager, + listener: AudioManager.OnAudioFocusChangeListener, +) : AudioFocusController { + private val request = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN) + .setAudioAttributes( + AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(), + ) + .setWillPauseWhenDucked(false) + .setOnAudioFocusChangeListener(listener) + .build() + + override fun request(): Int { + return audioManager.requestAudioFocus(request) + } + + override fun abandon() { + audioManager.abandonAudioFocusRequest(request) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/fullscreen/MediaSessionFullscreenFeature.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/fullscreen/MediaSessionFullscreenFeature.kt new file mode 100644 index 0000000000..01bff9dfb5 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/fullscreen/MediaSessionFullscreenFeature.kt @@ -0,0 +1,99 @@ +/* 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 mozilla.components.feature.media.fullscreen + +import android.app.Activity +import android.content.pm.ActivityInfo +import android.os.Build +import android.view.WindowManager +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import mozilla.components.browser.state.selector.findCustomTabOrSelectedTab +import mozilla.components.browser.state.state.SessionState +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.lib.state.ext.flowScoped +import mozilla.components.support.base.feature.LifecycleAwareFeature + +/** + * Feature that will auto-rotate the device to the correct orientation for the media aspect ratio. + */ +class MediaSessionFullscreenFeature( + private val activity: Activity, + private val store: BrowserStore, + private val tabId: String?, +) : LifecycleAwareFeature { + + private var scope: CoroutineScope? = null + + override fun start() { + scope = store.flowScoped { flow -> + flow.map { + it.tabs + it.customTabs + }.map { tab -> + tab.firstOrNull { it.mediaSessionState?.fullscreen == true } + }.distinctUntilChanged { old, new -> + old.hasSameOrientationInformationAs(new) + }.collect { state -> + // There should only be one fullscreen session. + if (state == null) { + activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER + activity.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + return@collect + } + + if (store.state.findCustomTabOrSelectedTab(tabId)?.id == state.id) { + setOrientationForTabState(state) + } + setDeviceSleepModeForTabState(state) + } + } + } + + @Suppress("SourceLockedOrientationActivity") // We deliberately want to lock the orientation here. + private fun setOrientationForTabState(activeTabState: SessionState) { + when (activeTabState.mediaSessionState?.elementMetadata?.portrait) { + true -> + activity.requestedOrientation = + ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT + + false -> + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && activity.isInPictureInPictureMode) { + activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED + } else { + activity.requestedOrientation = + ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + } + + null -> activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER + } + } + + private fun setDeviceSleepModeForTabState(activeTabState: SessionState) { + activeTabState.mediaSessionState?.let { + when (activeTabState.mediaSessionState?.playbackState) { + MediaSession.PlaybackState.PLAYING -> { + activity.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + + else -> { + activity.window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + } + } + } + + private fun SessionState?.hasSameOrientationInformationAs(other: SessionState?): Boolean = + this?.mediaSessionState?.fullscreen == other?.mediaSessionState?.fullscreen && + this?.mediaSessionState?.playbackState == other?.mediaSessionState?.playbackState && + this?.mediaSessionState?.elementMetadata == other?.mediaSessionState?.elementMetadata && + this?.content?.pictureInPictureEnabled == other?.content?.pictureInPictureEnabled + + override fun stop() { + scope?.cancel() + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/LastMediaAccessMiddleware.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/LastMediaAccessMiddleware.kt new file mode 100644 index 0000000000..16eda03bde --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/LastMediaAccessMiddleware.kt @@ -0,0 +1,38 @@ +/* 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 mozilla.components.feature.media.middleware + +import mozilla.components.browser.state.action.BrowserAction +import mozilla.components.browser.state.action.LastAccessAction +import mozilla.components.browser.state.action.MediaSessionAction +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.TabSessionState +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.lib.state.Middleware +import mozilla.components.lib.state.MiddlewareContext + +/** + * [Middleware] that updates [TabSessionState.lastMediaAccessState] everytime the user starts playing media or + * the [MediaSession] gets deactivated as when the user navigates to other URL or starts playing media + * in another tab. + */ +class LastMediaAccessMiddleware : Middleware<BrowserState, BrowserAction> { + @Suppress("ComplexCondition") + override fun invoke( + context: MiddlewareContext<BrowserState, BrowserAction>, + next: (BrowserAction) -> Unit, + action: BrowserAction, + ) { + next(action) + + if (action is MediaSessionAction.UpdateMediaPlaybackStateAction && + action.playbackState == MediaSession.PlaybackState.PLAYING + ) { + context.dispatch(LastAccessAction.UpdateLastMediaAccessAction(action.tabId)) + } else if (action is MediaSessionAction.DeactivatedMediaSessionAction) { + context.dispatch(LastAccessAction.ResetLastMediaSessionAction(action.tabId)) + } + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/RecordingDevicesMiddleware.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/RecordingDevicesMiddleware.kt new file mode 100644 index 0000000000..67b7922b24 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/RecordingDevicesMiddleware.kt @@ -0,0 +1,253 @@ +/* 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 mozilla.components.feature.media.middleware + +import android.app.PendingIntent +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.Binder +import androidx.annotation.VisibleForTesting +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat +import androidx.core.content.ContextCompat +import mozilla.components.browser.state.action.BrowserAction +import mozilla.components.browser.state.action.ContentAction +import mozilla.components.browser.state.action.CustomTabListAction +import mozilla.components.browser.state.action.TabListAction +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.concept.engine.media.RecordingDevice +import mozilla.components.feature.media.R +import mozilla.components.feature.media.notification.MediaNotificationChannel +import mozilla.components.lib.state.Middleware +import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.support.base.android.NotificationsDelegate +import mozilla.components.support.base.android.OnPermissionGranted +import mozilla.components.support.base.ids.SharedIdsHelper +import mozilla.components.support.utils.PendingIntentUtils +import mozilla.components.support.utils.ThreadUtils +import mozilla.components.support.utils.ext.registerReceiverCompat +import mozilla.components.ui.icons.R as iconsR + +private const val NOTIFICATION_TAG = "mozac.feature.media.recordingDevices" +private const val NOTIFICATION_ID = 1 +private const val PENDING_INTENT_TAG = "mozac.feature.media.pendingintent" +private const val ACTION_RECORDING_DEVICES_NOTIFICATION_DISMISSED = + "mozac.feature.media.recordingDevices.notificationDismissed" +private const val NOTIFICATION_REMINDER_DELAY_MS = 5 * 60 * 1000L // 5 minutes + +/** + * Middleware for displaying an ongoing notification while recording devices (camera, microphone) + * are used by web content. + */ +class RecordingDevicesMiddleware( + private val context: Context, + private val notificationsDelegate: NotificationsDelegate, +) : Middleware<BrowserState, BrowserAction> { + private var isShowingNotification: Boolean = false + + override fun invoke( + context: MiddlewareContext<BrowserState, BrowserAction>, + next: (BrowserAction) -> Unit, + action: BrowserAction, + ) { + next(action) + + // Whenever the recording devices of a tab change or tabs get added/removed then process + // the current list and show/hide the notification. + if ( + action is ContentAction.SetRecordingDevices || + action is TabListAction || + action is CustomTabListAction + ) { + process(context, false) + } + } + + private fun process( + middlewareContext: MiddlewareContext<BrowserState, BrowserAction>, + isReminder: Boolean, + ) { + val devices = middlewareContext.state.tabs + .map { tab -> tab.content.recordingDevices } + .flatten() + .filter { device -> device.status == RecordingDevice.Status.RECORDING } + .distinctBy { device -> device.type } + + val isUsingCamera = devices.find { it.type == RecordingDevice.Type.CAMERA } != null + val isUsingMicrophone = devices.find { it.type == RecordingDevice.Type.MICROPHONE } != null + + val recordingState = when { + isUsingCamera && isUsingMicrophone -> RecordingState.CameraAndMicrophone + isUsingCamera -> RecordingState.Camera + isUsingMicrophone -> RecordingState.Microphone + else -> RecordingState.None + } + + updateNotification( + recordingState, + isReminder, + processRecordingState = { + isShowingNotification = false + process(middlewareContext, true) + }, + ) + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + internal fun updateNotification( + recordingState: RecordingState, + isReminder: Boolean = false, + processRecordingState: () -> Unit = {}, + ) { + if (recordingState.isRecording && !isShowingNotification) { + showNotification( + context, + recordingState, + notificationsDelegate, + isReminder, + processRecordingState, + ) { + isShowingNotification = true + } + } else if (!recordingState.isRecording && isShowingNotification) { + hideNotification() + isShowingNotification = false + } + } + + private fun hideNotification() { + NotificationManagerCompat.from(context) + .cancel(NOTIFICATION_TAG, NOTIFICATION_ID) + } + + private fun showNotification( + context: Context, + recordingState: RecordingState, + notificationsDelegate: NotificationsDelegate, + isReminder: Boolean = false, + processRecordingState: () -> Unit, + onPermissionGranted: OnPermissionGranted, + ) { + val channelId = MediaNotificationChannel.ensureChannelExists(context) + + val intent = + context.packageManager.getLaunchIntentForPackage(context.packageName)?.apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK + } ?: throw IllegalStateException("Package has no launcher intent") + + val pendingIntent = PendingIntent.getActivity( + context, + SharedIdsHelper.getIdForTag(context, PENDING_INTENT_TAG), + intent, + PendingIntentUtils.defaultFlags or PendingIntent.FLAG_UPDATE_CURRENT, + ) + + val dismissPendingIntent = PendingIntent.getBroadcast( + context, + 0, + Intent(ACTION_RECORDING_DEVICES_NOTIFICATION_DISMISSED), + PendingIntentUtils.defaultFlags, + ) + + val broadcastReceiver = NotificationDismissedReceiver(processRecordingState) + + context.registerReceiverCompat( + broadcastReceiver, + IntentFilter(ACTION_RECORDING_DEVICES_NOTIFICATION_DISMISSED), + ContextCompat.RECEIVER_EXPORTED, + ) + + val textResource = if (isReminder) { + context.getString( + recordingState.reminderTextResource, + context.packageManager.getApplicationLabel(context.applicationInfo).toString(), + ) + } else { + context.getString(recordingState.textResource) + } + + val notification = NotificationCompat.Builder(context, channelId) + .setSmallIcon(recordingState.iconResource) + .setContentTitle(context.getString(recordingState.titleResource)) + .setContentText(textResource) + .setPriority(NotificationCompat.PRIORITY_MAX) + .setCategory(NotificationCompat.CATEGORY_CALL) + .setContentIntent(pendingIntent) + .setOngoing(true) + .setDeleteIntent(dismissPendingIntent) + .build() + + notificationsDelegate.notify( + NOTIFICATION_TAG, + NOTIFICATION_ID, + notification, + onPermissionGranted = onPermissionGranted, + ) + } + + internal class NotificationDismissedReceiver( + private val processRecordingState: () -> Unit, + ) : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + val callingAppInfo = context.packageManager.getNameForUid(Binder.getCallingUid()) + if (callingAppInfo.equals(context.packageName)) { + ThreadUtils.postToMainThreadDelayed( + { + processRecordingState.invoke() + }, + NOTIFICATION_REMINDER_DELAY_MS, + ) + } + } + } +} + +internal sealed class RecordingState { + abstract val iconResource: Int + abstract val titleResource: Int + abstract val textResource: Int + abstract val reminderTextResource: Int + + val isRecording + get() = this !is None + + object CameraAndMicrophone : RecordingState() { + override val iconResource = iconsR.drawable.mozac_ic_camera_24 + override val titleResource = R.string.mozac_feature_media_sharing_camera_and_microphone + override val textResource = R.string.mozac_feature_media_sharing_camera_and_microphone_text + override val reminderTextResource = + R.string.mozac_feature_media_sharing_camera_and_microphone_reminder_text_2 + } + + object Camera : RecordingState() { + override val iconResource = iconsR.drawable.mozac_ic_camera_24 + override val titleResource = R.string.mozac_feature_media_sharing_camera + override val textResource = R.string.mozac_feature_media_sharing_camera_text + override val reminderTextResource = + R.string.mozac_feature_media_sharing_camera_reminder_text + } + + object Microphone : RecordingState() { + override val iconResource = iconsR.drawable.mozac_ic_microphone_24 + override val titleResource = R.string.mozac_feature_media_sharing_microphone + override val textResource = R.string.mozac_feature_media_sharing_microphone_text + override val reminderTextResource = + R.string.mozac_feature_media_sharing_microphone_reminder_text_2 + } + + object None : RecordingState() { + override val iconResource: Int + get() = throw UnsupportedOperationException() + + override val titleResource: Int + get() = throw UnsupportedOperationException() + override val textResource: Int + get() = throw UnsupportedOperationException() + override val reminderTextResource: Int + get() = throw UnsupportedOperationException() + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/notification/MediaNotification.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/notification/MediaNotification.kt new file mode 100644 index 0000000000..9f678df609 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/notification/MediaNotification.kt @@ -0,0 +1,155 @@ +/* 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 mozilla.components.feature.media.notification + +import android.app.Notification +import android.app.PendingIntent +import android.app.PendingIntent.FLAG_UPDATE_CURRENT +import android.content.Context +import android.graphics.Bitmap +import android.os.Build +import android.support.v4.media.session.MediaSessionCompat +import androidx.annotation.DrawableRes +import androidx.core.app.NotificationCompat +import androidx.media.app.NotificationCompat.MediaStyle +import mozilla.components.browser.state.state.CustomTabSessionState +import mozilla.components.browser.state.state.SessionState +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.feature.media.R +import mozilla.components.feature.media.ext.getArtistOrUrl +import mozilla.components.feature.media.ext.getNonPrivateIcon +import mozilla.components.feature.media.ext.getTitleOrUrl +import mozilla.components.feature.media.service.AbstractMediaSessionService +import mozilla.components.support.base.ids.SharedIdsHelper +import mozilla.components.support.utils.PendingIntentUtils +import java.util.Locale + +/** + * Helper to display a notification for web content playing media. + */ +internal class MediaNotification( + private val context: Context, + private val cls: Class<*>, +) { + /** + * Creates a new [Notification] for the given [sessionState]. + */ + suspend fun create(sessionState: SessionState?, mediaSessionCompat: MediaSessionCompat): Notification { + val data = sessionState?.toNotificationData(context, cls) ?: NotificationData() + + return buildNotification(data, mediaSessionCompat, sessionState !is CustomTabSessionState) + } + + private fun buildNotification( + data: NotificationData, + mediaSession: MediaSessionCompat, + isCustomTab: Boolean, + ): Notification { + val channel = MediaNotificationChannel.ensureChannelExists(context) + val style = MediaStyle().setMediaSession(mediaSession.sessionToken) + val builder = NotificationCompat.Builder(context, channel) + .setSmallIcon(data.icon) + .setContentTitle(data.title) + .setContentText(data.description) + .setLargeIcon(data.largeIcon) + .setPriority(NotificationCompat.PRIORITY_LOW) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + + if (data.action != null) { + builder.addAction(data.action) + style.setShowActionsInCompactView(0) + } + + // There is a known OEM crash with Huawei Devices on lollipop with setting a style + // see https://github.com/mozilla-mobile/android-components/issues/7468 and + // https://issuetracker.google.com/issues/37078372 + val huaweiOnLollipop = + Build.MANUFACTURER.lowercase(Locale.getDefault()).contains("huawei") && + Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1 + if (!huaweiOnLollipop) { + builder.setStyle(style) + } + + if (isCustomTab) { + // We only set a content intent if this media notification is not for an "external app" + // like a custom tab. Currently we can't route the user to that particular activity: + // https://github.com/mozilla-mobile/android-components/issues/3986 + builder.setContentIntent(data.contentIntent) + } + + return builder.build() + } +} + +private suspend fun SessionState.toNotificationData( + context: Context, + cls: Class<*>, +): NotificationData { + val intent = context.packageManager.getLaunchIntentForPackage(context.packageName)?.also { + it.action = AbstractMediaSessionService.ACTION_SWITCH_TAB + } + + return when (mediaSessionState?.playbackState) { + MediaSession.PlaybackState.PLAYING -> NotificationData( + title = getTitleOrUrl(context, mediaSessionState?.metadata?.title), + description = getArtistOrUrl(mediaSessionState?.metadata?.artist), + icon = R.drawable.mozac_feature_media_playing, + largeIcon = getNonPrivateIcon(mediaSessionState?.metadata?.getArtwork), + action = NotificationCompat.Action.Builder( + R.drawable.mozac_feature_media_action_pause, + context.getString(R.string.mozac_feature_media_notification_action_pause), + PendingIntent.getService( + context, + 0, + AbstractMediaSessionService.pauseIntent(context, cls), + getNotificationFlag(), + ), + ).build(), + contentIntent = PendingIntent.getActivity( + context, + SharedIdsHelper.getIdForTag(context, AbstractMediaSessionService.PENDING_INTENT_TAG), + intent?.apply { putExtra(AbstractMediaSessionService.EXTRA_TAB_ID, id) }, + getUpdateNotificationFlag(), + ), + ) + MediaSession.PlaybackState.PAUSED -> NotificationData( + title = getTitleOrUrl(context, mediaSessionState?.metadata?.title), + description = getArtistOrUrl(mediaSessionState?.metadata?.artist), + icon = R.drawable.mozac_feature_media_paused, + largeIcon = getNonPrivateIcon(mediaSessionState?.metadata?.getArtwork), + action = NotificationCompat.Action.Builder( + R.drawable.mozac_feature_media_action_play, + context.getString(R.string.mozac_feature_media_notification_action_play), + PendingIntent.getService( + context, + 0, + AbstractMediaSessionService.playIntent(context, cls), + getNotificationFlag(), + ), + ).build(), + contentIntent = PendingIntent.getActivity( + context, + SharedIdsHelper.getIdForTag(context, AbstractMediaSessionService.PENDING_INTENT_TAG), + intent?.apply { putExtra(AbstractMediaSessionService.EXTRA_TAB_ID, id) }, + getUpdateNotificationFlag(), + ), + ) + // Dummy notification used of all other media states. + else -> NotificationData() + } +} + +private data class NotificationData( + val title: String = "", + val description: String = "", + @DrawableRes val icon: Int = R.drawable.mozac_feature_media_playing, + val largeIcon: Bitmap? = null, + val action: NotificationCompat.Action? = null, + val contentIntent: PendingIntent? = null, +) + +private fun getNotificationFlag() = PendingIntentUtils.defaultFlags + +private fun getUpdateNotificationFlag() = PendingIntentUtils.defaultFlags or FLAG_UPDATE_CURRENT diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/notification/MediaNotificationChannel.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/notification/MediaNotificationChannel.kt new file mode 100644 index 0000000000..bd07ed2d2a --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/notification/MediaNotificationChannel.kt @@ -0,0 +1,45 @@ +/* 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 mozilla.components.feature.media.notification + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.os.Build +import androidx.core.app.NotificationCompat +import mozilla.components.feature.media.R + +private const val NOTIFICATION_CHANNEL_ID = "mozac.feature.media.generic" +private const val LEGACY_NOTIFICATION_CHANNEL_ID = "Media" + +internal object MediaNotificationChannel { + /** + * Make sure a notification channel for media notification exists. + * + * Returns the channel id to be used for media notifications. + */ + fun ensureChannelExists(context: Context): String { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val notificationManager: NotificationManager = context.getSystemService( + Context.NOTIFICATION_SERVICE, + ) as NotificationManager + + val channel = NotificationChannel( + NOTIFICATION_CHANNEL_ID, + context.getString(R.string.mozac_feature_media_notification_channel), + NotificationManager.IMPORTANCE_LOW, + ) + channel.setShowBadge(false) + channel.lockscreenVisibility = NotificationCompat.VISIBILITY_PUBLIC + + notificationManager.createNotificationChannel(channel) + + // We can't just change a channel. So we had to re-create the channel with a new name. + notificationManager.deleteNotificationChannel(LEGACY_NOTIFICATION_CHANNEL_ID) + } + + return NOTIFICATION_CHANNEL_ID + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/service/AbstractMediaSessionService.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/service/AbstractMediaSessionService.kt new file mode 100644 index 0000000000..6299ea039c --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/service/AbstractMediaSessionService.kt @@ -0,0 +1,103 @@ +/* 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 mozilla.components.feature.media.service + +import android.app.Service +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.os.Binder +import android.os.IBinder +import androidx.annotation.VisibleForTesting +import mozilla.components.browser.state.state.SessionState +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.base.crash.CrashReporting +import mozilla.components.support.base.android.NotificationsDelegate +import java.lang.ref.WeakReference + +/** + * [Binder] offering access to this service and all operations it can perform. + */ +internal class MediaServiceBinder(delegate: MediaSessionDelegate) : Binder() { + // Necessary to prevent the delegate leaking Context when the MediaService is destroyed. + @get:VisibleForTesting internal val service = WeakReference(delegate) + + /** + * Get an instance of [MediaSessionDelegate] which supports showing/hiding and updating + * a media notification based on the passed in [SessionState]. + */ + fun getMediaService(): MediaSessionDelegate? = service.get() +} + +/** + * A foreground service that will keep the process alive while we are playing media (with the app possibly in the + * background) and shows an ongoing notification indicating the current media playing status. + */ +abstract class AbstractMediaSessionService : Service() { + protected abstract val store: BrowserStore + protected abstract val crashReporter: CrashReporting? + protected abstract val notificationsDelegate: NotificationsDelegate + + @VisibleForTesting + internal var binder: MediaServiceBinder? = null + + @VisibleForTesting + internal var delegate: MediaSessionServiceDelegate? = null + + override fun onCreate() { + super.onCreate() + + delegate = MediaSessionServiceDelegate( + context = this, + service = this, + store = store, + crashReporter = crashReporter, + notificationsDelegate = notificationsDelegate, + ).also { + binder = MediaServiceBinder(it) + } + + delegate?.onCreate() + } + + override fun onDestroy() { + delegate?.onDestroy() + binder = null + delegate = null + + super.onDestroy() + } + + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + delegate?.onStartCommand(intent) + return START_NOT_STICKY + } + + override fun onTaskRemoved(rootIntent: Intent?) { + delegate?.onTaskRemoved() + } + + override fun onBind(intent: Intent?): IBinder? { + return binder + } + + companion object { + internal const val ACTION_PLAY = "mozac.feature.mediasession.service.PLAY" + internal const val ACTION_PAUSE = "mozac.feature.mediasession.service.PAUSE" + + const val NOTIFICATION_TAG = "mozac.feature.mediasession.foreground-service" + const val PENDING_INTENT_TAG = "mozac.feature.mediasession.pendingintent" + const val ACTION_SWITCH_TAB = "mozac.feature.mediasession.SWITCH_TAB" + const val EXTRA_TAB_ID = "mozac.feature.mediasession.TAB_ID" + + internal fun playIntent(context: Context, cls: Class<*>): Intent = Intent(ACTION_PLAY).apply { + component = ComponentName(context, cls) + } + + internal fun pauseIntent(context: Context, cls: Class<*>): Intent = Intent(ACTION_PAUSE).apply { + component = ComponentName(context, cls) + } + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/service/MediaSessionDelegate.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/service/MediaSessionDelegate.kt new file mode 100644 index 0000000000..0a26fd4a07 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/service/MediaSessionDelegate.kt @@ -0,0 +1,32 @@ +/* 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 mozilla.components.feature.media.service + +import mozilla.components.browser.state.state.SessionState + +/** + * A delegate for handling all possible media states of a [SessionState]. + */ +interface MediaSessionDelegate { + /** + * Handle media playing in the passed in [sessionState]. + */ + fun handleMediaPlaying(sessionState: SessionState) + + /** + * Handle media being paused in the passed in [sessionState]. + */ + fun handleMediaPaused(sessionState: SessionState) + + /** + * Handle media being stopped in the passed in [sessionState]. + */ + fun handleMediaStopped(sessionState: SessionState) + + /** + * Handle no media available. + */ + fun handleNoMedia() +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/service/MediaSessionServiceDelegate.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/service/MediaSessionServiceDelegate.kt new file mode 100644 index 0000000000..f2e4323f01 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/service/MediaSessionServiceDelegate.kt @@ -0,0 +1,298 @@ +/* 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 mozilla.components.feature.media.service + +import android.app.ForegroundServiceStartNotAllowedException +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.media.AudioManager +import android.os.Build +import android.support.v4.media.MediaMetadataCompat +import android.support.v4.media.session.MediaSessionCompat +import androidx.annotation.VisibleForTesting +import androidx.core.content.ContextCompat +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel +import kotlinx.coroutines.launch +import mozilla.components.browser.state.state.SessionState +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.base.crash.CrashReporting +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.feature.media.ext.getArtistOrUrl +import mozilla.components.feature.media.ext.getNonPrivateIcon +import mozilla.components.feature.media.ext.getTitleOrUrl +import mozilla.components.feature.media.ext.toPlaybackState +import mozilla.components.feature.media.facts.emitNotificationPauseFact +import mozilla.components.feature.media.facts.emitNotificationPlayFact +import mozilla.components.feature.media.facts.emitStatePauseFact +import mozilla.components.feature.media.facts.emitStatePlayFact +import mozilla.components.feature.media.facts.emitStateStopFact +import mozilla.components.feature.media.focus.AudioFocus +import mozilla.components.feature.media.notification.MediaNotification +import mozilla.components.feature.media.session.MediaSessionCallback +import mozilla.components.support.base.android.NotificationsDelegate +import mozilla.components.support.base.ids.SharedIdsHelper +import mozilla.components.support.base.log.logger.Logger +import mozilla.components.support.utils.ext.registerReceiverCompat +import mozilla.components.support.utils.ext.stopForegroundCompat +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext + +@VisibleForTesting +internal class BecomingNoisyReceiver(private val controller: MediaSession.Controller?) : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent) { + if (AudioManager.ACTION_AUDIO_BECOMING_NOISY == intent.action) { + controller?.pause() + } + } + + @VisibleForTesting + fun deviceIsBecomingNoisy(context: Context) { + val becomingNoisyIntent = Intent(AudioManager.ACTION_AUDIO_BECOMING_NOISY) + onReceive(context, becomingNoisyIntent) + } +} + +/** + * Delegate handling callbacks from an [AbstractMediaSessionService]. + * + * The implementation was moved from [AbstractMediaSessionService] to this delegate for better testability. + */ +internal class MediaSessionServiceDelegate( + @get:VisibleForTesting internal var context: Context, + @get:VisibleForTesting internal val service: AbstractMediaSessionService, + @get:VisibleForTesting internal val store: BrowserStore, + @get:VisibleForTesting internal val crashReporter: CrashReporting?, + @get:VisibleForTesting internal val notificationsDelegate: NotificationsDelegate, +) : MediaSessionDelegate { + private val logger = Logger("MediaSessionService") + + @VisibleForTesting + internal var notificationHelper = MediaNotification(context, service::class.java) + + @VisibleForTesting + internal var mediaSession = MediaSessionCompat(context, "MozacMediaSession") + + @VisibleForTesting + internal var audioFocus = AudioFocus(context.getSystemService(Context.AUDIO_SERVICE) as AudioManager, store) + + @VisibleForTesting + internal val notificationId by lazy { + SharedIdsHelper.getIdForTag(context, AbstractMediaSessionService.NOTIFICATION_TAG) + } + + @VisibleForTesting + internal var controller: MediaSession.Controller? = null + + @VisibleForTesting + internal var notificationScope: CoroutineScope? = null + + @VisibleForTesting + internal val intentFilter = IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY) + + @VisibleForTesting + internal var noisyAudioStreamReceiver: BecomingNoisyReceiver? = null + + @VisibleForTesting + internal var isForegroundService: Boolean = false + + fun onCreate() { + logger.debug("Service created") + mediaSession.setCallback(MediaSessionCallback(store)) + notificationScope = MainScope() + } + + fun onDestroy() { + notificationScope?.cancel() + notificationScope = null + audioFocus.abandon() + logger.debug("Service destroyed") + } + + fun onStartCommand(intent: Intent?) { + logger.debug("Command received: ${intent?.action}") + + when (intent?.action) { + AbstractMediaSessionService.ACTION_PLAY -> { + controller?.play() + emitNotificationPlayFact() + } + AbstractMediaSessionService.ACTION_PAUSE -> { + controller?.pause() + emitNotificationPauseFact() + } + else -> logger.debug("Can't process action: ${intent?.action}") + } + } + + fun onTaskRemoved() { + /* no need to do this for custom tabs */ + store.state.tabs.forEach { + it.mediaSessionState?.controller?.stop() + } + + shutdown() + } + + override fun handleMediaPlaying(sessionState: SessionState) { + emitStatePlayFact() + + updateMediaSession(sessionState) + registerBecomingNoisyListenerIfNeeded(sessionState) + audioFocus.request(sessionState.id) + controller = sessionState.mediaSessionState?.controller + + if (isForegroundService) { + updateNotification(sessionState) + } else { + startForeground(sessionState) + } + } + + override fun handleMediaPaused(sessionState: SessionState) { + emitStatePauseFact() + + updateMediaSession(sessionState) + unregisterBecomingNoisyListenerIfNeeded() + stopForeground() + + updateNotification(sessionState) + } + + override fun handleMediaStopped(sessionState: SessionState) { + emitStateStopFact() + + updateMediaSession(sessionState) + unregisterBecomingNoisyListenerIfNeeded() + stopForeground() + + updateNotification(sessionState) + } + + override fun handleNoMedia() { + shutdown() + } + + @VisibleForTesting + internal fun updateNotification(sessionState: SessionState) { + notificationScope?.launch { + val notification = notificationHelper.create(sessionState, mediaSession) + notificationsDelegate.notify( + notificationId = notificationId, + notification = notification, + ) + } + } + + @VisibleForTesting + @Suppress("TooGenericExceptionCaught") + internal fun startForeground( + sessionState: SessionState, + coroutineContext: CoroutineContext = EmptyCoroutineContext, + ) { + notificationScope?.launch(coroutineContext) { + val notification = notificationHelper.create(sessionState, mediaSession) + try { + service.startForeground(notificationId, notification) + } catch (e: Exception) { + if ( + Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && + e is ForegroundServiceStartNotAllowedException + ) { + // We should not encounter this exception if `android:foregroundServiceType="mediaPlayback"` + // is added to the service. The crash reporter loses the stack trace for this + // exception so we want to be able to track this crash independently to ensure + // this case is fixed and be able to determine if there are other cases where we + // might be trying to start foreground services from the background. + // https://bugzilla.mozilla.org/show_bug.cgi?id=1802620 + crashReporter?.submitCaughtException(e) + } else { + throw e + } + } + + isForegroundService = true + } + } + + @VisibleForTesting + internal fun updateMediaSession(sessionState: SessionState) { + mediaSession.setPlaybackState(sessionState.mediaSessionState?.toPlaybackState()) + mediaSession.isActive = true + notificationScope?.launch { + mediaSession.setMetadata( + MediaMetadataCompat.Builder() + .putString( + MediaMetadataCompat.METADATA_KEY_TITLE, + sessionState.getTitleOrUrl(context, sessionState.mediaSessionState?.metadata?.title), + ) + .putString( + MediaMetadataCompat.METADATA_KEY_ARTIST, + sessionState.getArtistOrUrl(sessionState.mediaSessionState?.metadata?.artist), + ) + .putBitmap( + MediaMetadataCompat.METADATA_KEY_ART, + sessionState.getNonPrivateIcon(sessionState.mediaSessionState?.metadata?.getArtwork), + ) + .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, -1) + .build(), + ) + } + } + + @VisibleForTesting + internal fun stopForeground() { + service.stopForegroundCompat(false) + isForegroundService = false + } + + @VisibleForTesting + internal fun registerBecomingNoisyListenerIfNeeded(state: SessionState) { + if (noisyAudioStreamReceiver != null) { + return + } + + noisyAudioStreamReceiver = BecomingNoisyReceiver(state.mediaSessionState?.controller) + noisyAudioStreamReceiver?.let { + registerBecomingNoisyListener(it) + } + } + + @VisibleForTesting + internal fun registerBecomingNoisyListener(broadcastReceiver: BroadcastReceiver) { + context.registerReceiverCompat( + broadcastReceiver, + intentFilter, + ContextCompat.RECEIVER_NOT_EXPORTED, + ) + } + + @VisibleForTesting + internal fun unregisterBecomingNoisyListenerIfNeeded() { + noisyAudioStreamReceiver?.let { + context.unregisterReceiver(noisyAudioStreamReceiver) + noisyAudioStreamReceiver = null + } + } + + @VisibleForTesting + internal fun shutdown() { + mediaSession.release() + // Explicitly cancel media notification. + // Otherwise, when media is paused, with [STOP_FOREGROUND_DETACH] notification behavior, + // the notification will persist even after service is stopped and destroyed. + notificationsDelegate.notificationManagerCompat.cancel(notificationId) + unregisterBecomingNoisyListenerIfNeeded() + service.stopSelf() + } + + @VisibleForTesting + internal fun deviceBecomingNoisy(context: Context) { + noisyAudioStreamReceiver?.deviceIsBecomingNoisy(context) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/session/MediaSessionCallback.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/session/MediaSessionCallback.kt new file mode 100644 index 0000000000..b7cc67d5a9 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/session/MediaSessionCallback.kt @@ -0,0 +1,28 @@ +/* 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 mozilla.components.feature.media.session + +import android.support.v4.media.session.MediaSessionCompat +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.feature.media.ext.findActiveMediaTab +import mozilla.components.support.base.log.logger.Logger + +internal class MediaSessionCallback( + private val store: BrowserStore, +) : MediaSessionCompat.Callback() { + private val logger = Logger("MediaSessionCallback") + + override fun onPlay() { + logger.debug("play()") + + store.state.findActiveMediaTab()?.mediaSessionState?.controller?.play() + } + + override fun onPause() { + logger.debug("pause()") + + store.state.findActiveMediaTab()?.mediaSessionState?.controller?.pause() + } +} diff --git a/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_action_pause.xml b/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_action_pause.xml new file mode 100644 index 0000000000..b7dd2e228a --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_action_pause.xml @@ -0,0 +1,13 @@ +<!-- 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/. --> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FFFFFF" + android:pathData="M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z"/> +</vector> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_action_play.xml b/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_action_play.xml new file mode 100644 index 0000000000..45efe8d2a1 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_action_play.xml @@ -0,0 +1,13 @@ +<!-- 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/. --> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FFFFFF" + android:pathData="M8,5v14l11,-7z"/> +</vector> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_paused.xml b/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_paused.xml new file mode 100644 index 0000000000..c60abeb67f --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_paused.xml @@ -0,0 +1,13 @@ +<!-- 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/. --> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FFFFFF" + android:pathData="M7,9v6h4l5,5V4l-5,5H7z"/> +</vector> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_playing.xml b/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_playing.xml new file mode 100644 index 0000000000..c8bedcd89f --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/drawable/mozac_feature_media_playing.xml @@ -0,0 +1,13 @@ +<!-- 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/. --> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FFFFFF" + android:pathData="M3,9v6h4l5,5L12,4L7,9L3,9zM16.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v8.05c1.48,-0.73 2.5,-2.25 2.5,-4.02zM14,3.23v2.06c2.89,0.86 5,3.54 5,6.71s-2.11,5.85 -5,6.71v2.06c4.01,-0.91 7,-4.49 7,-8.77s-2.99,-7.86 -7,-8.77z"/> +</vector> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-am/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-am/strings.xml new file mode 100644 index 0000000000..2a38313c9e --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-am/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">ሚዲያ</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">ካሜራ በርቷል</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">ማይክሮፎን በርቷል</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">ካሜራ እና ማይክሮፎን በርተዋል</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">ካሜራዎን የሚጠቀመውን ትር ለመክፈት መታ ያድርጉ።</string> + + + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">ማይክሮፎንዎን የሚጠቀመውን ትር ለመክፈት መታ ያድርጉ።</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">የእርስዎን ማይክሮፎን እና ካሜራ የሚጠቀመውን ትር ለመክፈት መታ ያድርጉ።</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">ማስታወሻ፦ %1$s አሁንም ካሜራዎን እየተጠቀመ ነው። ትሩን ለመክፈት መታ ያድርጉ።</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">ማስታወሻ፦ %1$s አሁንም ማይክሮፎንዎን እየተጠቀመ ነው። ትሩን ለመክፈት መታ ያድርጉ</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">ማስታወሻ፦ %1$s አሁንም የእርስዎን ማይክሮፎን እየተጠቀመ ነው። ትሩን ለመክፈት መታ ያድርጉ።</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">ማስታወሻ፦ %1$s አሁንም የእርስዎን ማይክሮፎን እና ካሜራ እየተጠቀመ ነው። ትሩን ለመክፈት መታ ያድርጉ</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">ማስታወሻ፦ %1$s አሁንም የእርስዎን ማይክሮፎን እና ካሜራ እየተጠቀመ ነው። ትሩን ለመክፈት መታ ያድርጉ።</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">አጫውት</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">ባለበት አቁም</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">አንድ ድረ-ገፅ ሚዲያ እየተጫወተ ነው።</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-an/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-an/strings.xml new file mode 100644 index 0000000000..adb8660128 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-an/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medios</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La camara ye activa</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Lo microfono ye activo</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La camara y lo microfono son activos</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproducir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausar</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un puesto ye reproducindo mosica</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ar/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ar/strings.xml new file mode 100644 index 0000000000..74685ebf0f --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ar/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">الوسائط</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">الكمرة مُشغّلة</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">الميكروفون مُشغّل</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">الكمرة و الميكروفون مُشغّلان</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">شغّل</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">ألبِث</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">أحد المواقع يشغّل الوسائط</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ast/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ast/strings.xml new file mode 100644 index 0000000000..1a41a186b8 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ast/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Conteníu multimedia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La cámara ta activada</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">El micrófonu ta activáu</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La cámara ya\'l micrófonu tán activaos</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproducir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Posar</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sitiu ta reproduciendo conteníu multimedia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-az/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-az/strings.xml new file mode 100644 index 0000000000..0db58f34e9 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-az/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera açıqdır</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon açıqdır</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera və mikrofon açıqdır</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Oynat</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Fasilə</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Sayt media oynadır</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-azb/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-azb/strings.xml new file mode 100644 index 0000000000..341d39582a --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-azb/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">مدیا</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">کامئرا آچیق</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">میکروفون آچیق</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">کامئرا و میکروفون آچیق</string> + + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">کامئرازدان ایستیفاده ائدن تاغی آچماق اوچون توخونون.</string> + + + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">میکروفونوزدان ایستیفاده ائدن تاغی آچماق اوچون توخونون.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">کامئرا و میکروفونوزدان ایستیفاده ائدن تاغی آچماق اوچون توخونون.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">یادا سالما: %1$s هلهده کامئرانیزدان ایستیفاده ائدیر. تاغی آچماق اوچون توخونون.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">یادا سالما: %1$s هلهده میکروفونوزدان ایستیفاده ائدیر. تاغی آچماق اوچون توخونون.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">یادا سالما: %1$s هلهده میکروفونوزدان ایستیفاده ائدیر. تاغی آچماق اوچون توخونون.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">یادا سالما: %1$s هلهده کامئرا و میکروفونوزدان ایستیفاده ائدیر. تاغی آچماق اوچون توخونون</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">یادا سالما: %1$s هلهده کامئرا و میکروفونوزدان ایستیفاده ائدیر. تاغی آچماق اوچون توخونون.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">اوینات</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">دایاندیر</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">بیر سایت مدیا اوینادیر</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-be/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-be/strings.xml new file mode 100644 index 0000000000..1a501ddef1 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-be/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Медыя</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Камера ўключана</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Мікрафон уключаны</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Камера і мікрафон уключаны</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Прайграць</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Прыпыніць</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Сайт прайгравае медыя</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-bg/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-bg/strings.xml new file mode 100644 index 0000000000..b319aa2333 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-bg/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Медия</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Камерата работи</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Микрофонът работи</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Камерата и микрофонът работят</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Докоснете, за да отворите раздела, който използва вашата камера.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Докоснете, за да отворите раздела, който използва вашия микрофон.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Докоснете, за да отворите раздела, който използва вашите микрофон и камера.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Напомняне: %1$s все още използва камерата ви. Докоснете, за да отворите раздела.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Напомняне: %1$s все още използва микрофона ви. Докоснете, за да отворите раздела</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Напомняне: %1$s все още използва микрофона ви. Докоснете, за да отворите раздела.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Напомняне: %1$s все още използва микрофона и камерата ви. Докоснете, за да отворите раздела</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Напомняне: %1$s все още използва микрофона и камерата ви. Докоснете, за да отворите раздела.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Изпълняване</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Пауза</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Сайтът възпроизвежда медия</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-bn/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-bn/strings.xml new file mode 100644 index 0000000000..84e460c77a --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-bn/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">মিডিয়া</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">ক্যামেরা চালু আছে</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">মাইক্রোফোন চালু আছে</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">ক্যামেরা এবং মাইক্রোফোন চালু রয়েছে</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">চালু করুন</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">বিরতি দিন</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">একটি সাইটে মিডিয়া চলছে</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-br/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-br/strings.xml new file mode 100644 index 0000000000..58beef7ee1 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-br/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Gweredekaet eo ar cʼhamera</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Gweredekaet eo ar glevell</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Gweredekaet eo ar cʼhamera hag ar glevell</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Lenn</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Ehan</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Emañ ul lecʼhienn o lenn ur pezh media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-bs/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-bs/strings.xml new file mode 100644 index 0000000000..25f1b10a39 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-bs/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Mediji</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera je uključena</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon je uključen</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera i mikrofon su uključeni</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Dodirnite da otvorite tab koji koristi vašu kameru.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Dodirnite da otvorite tab koji koristi vaš mikrofon.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Dodirnite da otvorite tab koji koristi vaš mikrofon i kameru.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Podsjetnik: %1$s još uvijek koristi vašu kameru. Dodirnite da otvorite tab.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Podsjetnik: %1$s još uvijek koristi vaš mikrofon. Dodirnite da otvorite tab</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Podsjetnik: %1$s još uvijek koristi vaš mikrofon. Dodirnite da otvorite tab.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Podsjetnik: %1$s još uvijek koristi vaš mikrofon i kameru. Dodirnite da otvorite tab</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Podsjetnik: %1$s još uvijek koristi vaš mikrofon i kameru. Dodirnite da otvorite tab.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Pokreni</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pauza</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Stranica reprodukuje medije</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ca/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ca/strings.xml new file mode 100644 index 0000000000..dc962103cb --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ca/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimèdia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La càmera està activada</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">El micròfon està activat</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La càmera i el micròfon estan activats</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Toqueu per a obrir la pestanya que usa la càmera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Toqueu per a obrir la pestanya que usa el micròfon.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Toqueu per a obrir la pestanya que usa el micròfon i la càmera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Recordatori: %1$s encara usa la càmera. Toqueu per a obrir la pestanya.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatori: %1$s encara usa el micròfon. Toqueu per a obrir la pestanya</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Recordatori: %1$s encara usa el micròfon. Toqueu per a obrir la pestanya.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatori: %1$s encara usa el micròfon i la càmera. Toqueu per a obrir la pestanya</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Recordatori: %1$s encara usa el micròfon i la càmera. Toqueu per a obrir la pestanya.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reprodueix</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un lloc està reproduint multimèdia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-cak/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-cak/strings.xml new file mode 100644 index 0000000000..1fd18fea2c --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-cak/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">K\'ïy k\'oxom</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Tzijïl ri elesäy wachib\'äl</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Tzijïl ri q\'asäy ch\'ab\'äl</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">E tzijïl ri elesäy wachib\'äl chuqa\' ri q\'asäy ch\'ab\'äl</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tachapa\' richin najäq ri ruwi\' nrokisaj ri elesäy awachib\'äl.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tachapa\' richin nijaq ri ruwi\' nrokisaj ri q\'asäy ach\'ab\'äl.</string> + + + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tachapa\' richin najäq ri ruwi\' nrokisaj ri q\'asäy ach\'ab\'äl chuqa\' ri elesäy awachib\'al.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Runataxik: %1$s tajin nrokisaj na ri elesäy awachib\'al. Tachapa\' richin najäq ri ruwi\'.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Runataxik: %1$s tajin nrokisaj na ri q\'asäy ach\'ab\'äl. Tachapa\' richin najäq ri ruwi\'.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Runataxik: %1$s tajin nrokisaj na ri q\'asäy ach\'ab\'äl. Tachapa\' richin najäq ri ruwi\'.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Runataxik: %1$s tajin nrokisaj na ri q\'asäy ach\'ab\'äl chuqa\' elesäy awachib\'al. Tachapa\' richin najäq ri ruwi\'</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Runataxik: %1$s tajin nrokisaj na ri q\'asäy ach\'ab\'äl chuqa\' elesäy awachib\'al. Tachapa\' richin najäq ri ruwi\'.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Titzij</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Tuxlan</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Jun ruxaq yerutzij k\'ïy taq k\'oxom</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ceb/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ceb/strings.xml new file mode 100644 index 0000000000..6e1c048651 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ceb/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Camera ga-andar</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Microphone ga-andar</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Camera ug microphone ga-andar</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Play</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Usa ka-site nagpatukar ug media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ckb/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ckb/strings.xml new file mode 100644 index 0000000000..dd39756271 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ckb/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">میدیا</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">کامێرا کارایە</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">مایکرۆفۆن کارایە</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">کامێرا و مایکرۆفۆن کاران</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">لێدان</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">وچان</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">ماڵپەڕی میدیا لێدەدات</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-co/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-co/strings.xml new file mode 100644 index 0000000000..cffda386cb --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-co/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimedià</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">L’apparechju-fotò hè attivatu</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">U microfonu hè attivatu</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">L’apparechju-fotò è u microfonu sò attivati</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Picchichjà per apre l’unghjetta chì impiegheghja u vostru apparechju-fotò.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Picchichjà per apre l’unghjetta chì impiegheghja u vostru microfonu.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Picchichjà per apre l’unghjetta chì impiegheghja i vostri microfonu è apparechju-fotò.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Ramentu : %1$s impiegheghja sempre u vostru apparechju-fotò. Picchichjà per apre l’unghjetta.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Ramentu : %1$s impiegheghja sempre u vostru microfonu. Picchichjà per apre l’unghjetta</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Ramentu : %1$s impiegheghja sempre u vostru microfonu. Picchichjà per apre l’unghjetta.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Ramentu : %1$s impiegheghja sempre i vostri microfonu è apparechju-fotò. Picchichjà per apre l’unghjetta</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Ramentu : %1$s impiegheghja sempre i vostri microfonu è apparechju-fotò. Picchichjà per apre l’unghjetta.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Lettura</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un situ leghje un elementu multimedià</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-cs/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-cs/strings.xml new file mode 100644 index 0000000000..97c59e828d --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-cs/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Média</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera je zapnuta</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon je zapnut</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera a mikrofon jsou zapnuty</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Klepnutím otevřete panel, který používá fotoaparát.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Klepnutím otevřete panel, který používá mikrofon.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Klepnutím otevřete panel, který používá váš mikrofon a fotoaparát.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Připomínka: %1$s stále používá váš fotoaparát. Klepnutím otevřete panel.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Připomínka: %1$s stále používá váš mikrofon. Klepnutím otevřete panel</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Připomínka: %1$s stále používá váš mikrofon. Klepnutím otevřete panel.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Připomínka: %1$s stále používá váš mikrofon a kameru. Klepnutím otevřete panel</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Připomínka: %1$s stále používá váš mikrofon a kameru. Klepnutím otevřete panel.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Přehrát</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pozastavit</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Stránka přehrává média</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-cy/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-cy/strings.xml new file mode 100644 index 0000000000..f8095ccf66 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-cy/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Cyfrwng</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Camera ymlaen</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Microffon ymlaen</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Camera a meicroffon ymlaen</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tapiwch i agor y tab sy\'n defnyddio\'ch camera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tapiwch i agor y tab sy\'n defnyddio\'ch meicroffon.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tapiwch i agor y tab sy\'n defnyddio\'ch meicroffon a\'ch camera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Nodyn atgoffa: Mae %1$s yn dal i ddefnyddio\'ch camera. Tapiwch i agor y tab.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Nodyn atgoffa: Mae %1$s yn dal i ddefnyddio\'ch meicroffon. Tapiwch i agor y tab</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Nodyn atgoffa: Mae %1$s yn dal i ddefnyddio\'ch meicroffon. Tapiwch i agor y tab.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Nodyn atgoffa: Mae %1$s yn dal i ddefnyddio\'ch meicroffon a\'ch camera. Tapiwch i agor y tab</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Nodyn atgoffa: Mae %1$s yn dal i ddefnyddio\'ch meicroffon a\'ch camera. Tapiwch i agor y tab.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Chwarae</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Oedi</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Mae gwefan yn chwarae cyfryngau</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-da/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-da/strings.xml new file mode 100644 index 0000000000..28a62989b3 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-da/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medieindhold</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kameraet er tændt</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofonen er tændt</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera og mikrofon er tændte</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tryk for at åbne fanebladet, der bruger dit kamera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tryk for at åbne fanebladet, der bruger din mikrofon.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tryk for at åbne fanebladet, der bruger din mikrofon og dit kamera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Påmindelse: %1$s bruger stadig dit kamera. Tryk for at åbne fanebladet.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Påmindelse: %1$s bruger stadig din mikrofon. Tryk for at åbne fanebladet.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Påmindelse: %1$s bruger stadig din mikrofon. Tryk for at åbne fanebladet.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Påmindelse: %1$s bruger stadig din mikrofon og dit kamera. Tryk for at åbne fanebladet</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Påmindelse: %1$s bruger stadig din mikrofon og dit kamera. Tryk for at åbne fanebladet.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Afspil</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Et websted afspiller mediefiler</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-de/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-de/strings.xml new file mode 100644 index 0000000000..6d14a70d33 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-de/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medien</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera ist aktiv</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon ist aktiv</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera und Mikrofon sind aktiv</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Antippen, um den Tab zu öffnen, der Ihre Kamera verwendet.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Antippen, um den Tab zu öffnen, der Ihr Mikrofon verwendet.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Antippen, um den Tab zu öffnen, der Ihr Mikrofon und Ihre Kamera verwendet.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Erinnerung: %1$s verwendet noch Ihre Kamera. Antippen, um den Tab zu öffnen.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Erinnerung: %1$s verwendet noch Ihr Mikrofon. Antippen, um den Tab zu öffnen</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Erinnerung: %1$s verwendet weiterhin Ihr Mikrofon. Antippen, um den Tab zu öffnen.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Erinnerung: %1$s verwendet noch Ihr Mikrofon und Ihre Kamera. Antippen, um den Tab zu öffnen</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Erinnerung: %1$s verwendet weiterhin Ihr Mikrofon und Ihre Kamera. Antippen, um den Tab zu öffnen.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Wiedergeben</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Eine Website spielt Medien ab</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-dsb/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-dsb/strings.xml new file mode 100644 index 0000000000..5cc1b64ec4 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-dsb/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medije</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera jo zašaltowana</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon jo zašaltowany</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera a mikrofon stej zašaltowanej</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Pótusniśo, aby rejtarik wócynił, kótaryž wašu kameru wužywa. </string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Pótusniśo, aby rejtarik wócynił, kótaryž waš mikrofon wužywa. </string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Pótusniśo, aby rejtarik wócynił, kótaryž waš mikrofon a wašu kameru wužywa. </string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Glědajśo: %1$s wašu kameru južo wužywa. Pótusniśo, aby rejtarik wócynił.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Glědajśo: %1$s waš mikrofon južo wužywa. Pótusniśo, aby rejtarik wócynił</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Glědajśo: %1$s waš mikrofon južo wužywa. Pótusniśo, aby rejtarik wócynił.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Glědajśo: %1$s waš mikrofon a wašu kameru južo wužywa. Pótusniśo, aby rejtarik wócynił</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Glědajśo: %1$s waš mikrofon a wašu kameru južo wužywa. Pótusniśo, aby rejtarik wócynił.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Wótgraś</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Zastajiś</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Sedło medije wótgrawa</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-el/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-el/strings.xml new file mode 100644 index 0000000000..9d9c1eb674 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-el/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Πολυμέσα</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Η κάμερα είναι ενεργή</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Το μικρόφωνο είναι ενεργό</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Η κάμερα και το μικρόφωνο είναι ενεργά</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Πατήστε για άνοιγμα της καρτέλας που χρησιμοποιεί την κάμερά σας.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Πατήστε για άνοιγμα της καρτέλας που χρησιμοποιεί το μικρόφωνό σας.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Πατήστε για άνοιγμα της καρτέλας που χρησιμοποιεί το μικρόφωνο και την κάμερά σας.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Υπενθύμιση: Το %1$s χρησιμοποιεί ακόμα την κάμερά σας. Πατήστε για άνοιγμα της καρτέλας.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Υπενθύμιση: Το %1$s χρησιμοποιεί ακόμα το μικρόφωνό σας. Πατήστε για άνοιγμα της καρτέλας</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Υπενθύμιση: Το %1$s χρησιμοποιεί ακόμα το μικρόφωνό σας. Πατήστε για άνοιγμα της καρτέλας.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Υπενθύμιση: Το %1$s χρησιμοποιεί ακόμα το μικρόφωνο και την κάμερά σας. Πατήστε για άνοιγμα της καρτέλας</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Υπενθύμιση: Το %1$s χρησιμοποιεί ακόμα το μικρόφωνο και την κάμερά σας. Πατήστε για άνοιγμα της καρτέλας.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Αναπαραγωγή</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Παύση</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Ένας ιστότοπος αναπαράγει πολυμέσα</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-en-rCA/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000..1961f7bdbe --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-en-rCA/strings.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Camera is on</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Microphone is on</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Camera and microphone are on</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tap to open the tab that’s using your camera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tap to open the tab that’s using your microphone.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tap to open the tab that’s using your microphone and camera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Reminder: %1$s is still using your camera. Tap to open the tab.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Reminder: %1$s is still using your microphone. Tap to open the tab</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Reminder: %1$s is still using your microphone. Tap to open the tab.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Reminder: %1$s is still using your microphone and camera. Tap to open the tab</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Reminder: %1$s is still using your microphone and camera. Tap to open the tab.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Play</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">A site is playing media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-en-rGB/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-en-rGB/strings.xml new file mode 100644 index 0000000000..c794d4a237 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-en-rGB/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Camera is on</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Microphone is on</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Camera and microphone are on</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tap to open the tab that’s using your camera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tap to open the tab that’s using your microphone.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tap to open the tab that’s using your microphone and camera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Reminder: %1$s is still using your camera. Tap to open the tab.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Reminder: %1$s is still using your microphone. Tap to open the tab</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Reminder: %1$s is still using your microphone. Tap to open the tab.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Reminder: %1$s is still using your microphone and camera. Tap to open the tab</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Reminder: %1$s is still using your microphone and camera. Tap to open the tab.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Play</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">A site is playing media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-eo/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-eo/strings.xml new file mode 100644 index 0000000000..7c98f55eec --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-eo/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Aŭdvidaĵo</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Filmilo ŝaltita</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofono ŝaltita</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Filmilo kaj mikrofono ŝaltitaj</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tuŝetu por malfermi la langeton kiu uzas vian filmilon.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tuŝetu por malfermi la langeton kiu uzas vian mikrofonon.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tuŝetu por malfermi la langeton kiu uzas vian filmilon kaj mikrofonon.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Memorigo: %1$s ankoraŭ uzas vian filmilon. Tuŝetu por malfermi la langeton.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Memorigo: %1$s ankoraŭ uzas vian mikrofonon. Tuŝetu por malfermi la langeton.</string> + + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Memorigo: %1$s ankoraŭ uzas vian mikrofonon. Tuŝetu por malfermi la langeton.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Memorigo: %1$s ankoraŭ uzas vian mikrofonon kaj filmilon. Tuŝetu por malfermi la langeton.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Memorigo: %1$s ankoraŭ uzas vian mikrofonon kaj filmilon. Tuŝetu por malfermi la langeton.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Ludi</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Paŭzigi</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Aŭdvidaĵo ludata de retejo</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-es-rAR/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-es-rAR/strings.xml new file mode 100644 index 0000000000..e89920b721 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-es-rAR/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medios</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La cámara está encendida</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">El micrófono está encendido</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La cámara y el micrófono están encendidos</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tocá para abrir la pestaña que está usando tu cámara.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tocá para abrir la pestaña que está usando tu micrófono.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tocá para abrir la pestaña que está usando tu micrófono y tu cámara.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Recordatorio: %1$s todavía está usando tu cámara. Tocá para abrir la pestaña.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s todavía está usando tu micrófono. Tocá para abrir la pestaña</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Recordatorio: %1$s todavía está usando tu micrófono. Tocá para abrir la pestaña.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s todavía está usando tu micrófono y tu cámara. Tocá para abrir la pestaña</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Recordatorio: %1$s todavía está usando tu micrófono y tu cámara. Tocá para abrir la pestaña.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproducir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausar</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sitio está reproduciendo medios</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-es-rCL/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-es-rCL/strings.xml new file mode 100644 index 0000000000..cb20dbf5c7 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-es-rCL/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medios</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Cámara encendida</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Micrófono encendido</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Cámara y micrófono encendidos</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Toca para abrir la pestaña que está usando tu cámara.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Toca para abrir la pestaña que está usando tu micrófono.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Toca para abrir la pestaña que está usando tu micrófono y cámara.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Recordatorio: %1$s todavía está usando tu cámara. Toca para abrir la pestaña.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s todavía está usando tu micrófono. Toca para abrir la pestaña</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Recordatorio: %1$s todavía está usando tu micrófono. Toca para abrir la pestaña.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s todavía está usando tu micrófono y cámara. Toca para abrir la pestaña</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Recordatorio: %1$s todavía está usando tu micrófono y cámara. Toca para abrir la pestaña.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproducir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausar</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sitio está reproduciendo medios</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-es-rES/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-es-rES/strings.xml new file mode 100644 index 0000000000..71bef26954 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimedia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La cámara está activada</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">El micrófono está activado</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La cámara y el micrófono están activados</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Toca para abrir la pestaña que está usando tu cámara.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Toca para abrir la pestaña que está usando tu micrófono.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Toca para abrir la pestaña que está usando tu micrófono y tu cámara.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Recordatorio: %1$s todavía está usando tu cámara. Toca para abrir la pestaña.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s todavía está usando tu micrófono. Toca para abrir la pestaña</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Recordatorio: %1$s todavía está usando tu micrófono. Toca para abrir la pestaña.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s todavía está usando tu micrófono y tu cámara. Toca para abrir la pestaña</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Recordatorio: %1$s todavía está usando tu micrófono y tu cámara. Toca para abrir la pestaña.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproducir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausar</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sitio está reproduciendo contenido multimedia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-es-rMX/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-es-rMX/strings.xml new file mode 100644 index 0000000000..b7f5e8358e --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-es-rMX/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimedia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La cámara está activada</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Micrófono encendido</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Cámara y micrófono encendidos</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproducir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausar</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sitio está reproduciendo contenido multimedia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-es/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-es/strings.xml new file mode 100644 index 0000000000..71bef26954 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-es/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimedia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La cámara está activada</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">El micrófono está activado</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La cámara y el micrófono están activados</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Toca para abrir la pestaña que está usando tu cámara.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Toca para abrir la pestaña que está usando tu micrófono.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Toca para abrir la pestaña que está usando tu micrófono y tu cámara.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Recordatorio: %1$s todavía está usando tu cámara. Toca para abrir la pestaña.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s todavía está usando tu micrófono. Toca para abrir la pestaña</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Recordatorio: %1$s todavía está usando tu micrófono. Toca para abrir la pestaña.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s todavía está usando tu micrófono y tu cámara. Toca para abrir la pestaña</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Recordatorio: %1$s todavía está usando tu micrófono y tu cámara. Toca para abrir la pestaña.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproducir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausar</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sitio está reproduciendo contenido multimedia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-et/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-et/strings.xml new file mode 100644 index 0000000000..de103560f6 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-et/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Meedia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kaamera on sisse lülitatud</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon on sisse lülitatud</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kaamera ja mikrofon on sisse lülitatud</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Puuduta kaamerat kasutava kaardi avamiseks.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Puuduta mikrofoni kasutava kaardi avamiseks.</string> + + + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Puuduta mikrofoni ja kaamerat kasutava kaardi avamiseks.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Meeldetuletus: %1$s kasutab endiselt kaamerat. Puuduta kaardi avamiseks.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Meeldetuletus: %1$s kasutab endiselt mikrofoni. Puuduta kaardi avamiseks.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Meeldetuletus: %1$s kasutab endiselt mikrofoni. Puuduta kaardi avamiseks.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Meeldetuletus: %1$s kasutab endiselt mikrofoni ja kaamerat. Puuduta kaardi avamiseks.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Meeldetuletus: %1$s kasutab endiselt mikrofoni ja kaamerat. Puuduta kaardi avamiseks.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Esita</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Paus</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Sait esitab meediat</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-eu/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-eu/strings.xml new file mode 100644 index 0000000000..12d9fb39a8 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-eu/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera piztuta dago</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofonoa piztuta dago</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera eta mikrofonoa piztuta daude</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Sakatu zure kamera erabiltzen ari den fitxa irekitzeko.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Sakatu zure mikrofonoa erabiltzen ari den fitxa irekitzeko.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Sakatu zure mikrofono eta kamera erabiltzen ari den fitxa irekitzeko.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Gogorarazlea: %1$s zure kamera ari da erabiltzen oraindik. Sakatu fitxa irekitzeko.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Gogorarazlea: %1$s zure mikrofonoa ari da erabiltzen oraindik. Sakatu fitxa irekitzeko</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Gogorarazlea: %1$s zure mikrofonoa ari da erabiltzen oraindik. Sakatu fitxa irekitzeko.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Gogorarazlea: %1$s zure mikrofono eta kamera ari da erabiltzen oraindik. Sakatu fitxa irekitzeko</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Gogorarazlea: %1$s zure mikrofono eta kamera ari da erabiltzen oraindik. Sakatu fitxa irekitzeko.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Erreproduzitu</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausatu</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Gune bat multimedia erreproduzitzen ari da</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-fa/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-fa/strings.xml new file mode 100644 index 0000000000..6529864cad --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-fa/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">رسانه</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">دوربین روشن است</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">صدابَر وصل است</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">دوربین و صدابَر وصل هستند</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">پخش</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">مکث</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">پایگاهی در حال پخش رسانه است</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ff/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ff/strings.xml new file mode 100644 index 0000000000..9b3cabee15 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ff/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Mejaaje</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kameraa ena huɓɓi</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikkoroo ena huɓɓi</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kameraa e mikkoroo ena kuɓɓi</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Tar</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Sabbo</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Lowre ina tara mejaaje</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-fi/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-fi/strings.xml new file mode 100644 index 0000000000..713dcededf --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-fi/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera on päällä</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofoni on päällä</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera ja mikrofoni ovat päällä</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Napauta avataksesi välilehden, joka käyttää kameraa.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Napauta avataksesi välilehden, joka käyttää mikrofonia.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Napauta avataksesi välilehden, joka käyttää mikrofonia ja kameraa.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Muistutus: %1$s käyttää edelleen kameraasi. Avaa välilehti napauttamalla.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Muistutus: %1$s käyttää edelleen mikrofoniasi. Avaa välilehti napauttamalla</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Muistutus: %1$s käyttää edelleen mikrofoniasi. Avaa välilehti napauttamalla.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Muistutus: %1$s käyttää edelleen mikrofoniasi ja kameraasi. Avaa välilehti napauttamalla</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Muistutus: %1$s käyttää edelleen mikrofoniasi ja kameraasi. Avaa välilehti napauttamalla.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Toista</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Tauko</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Sivusto toistaa mediaa</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-fr/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-fr/strings.xml new file mode 100644 index 0000000000..6f02a1be94 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-fr/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimédia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La caméra est activée</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Le microphone est activé</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La caméra et le microphone sont activés</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Appuyez pour ouvrir l’onglet qui utilise votre appareil photo.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Appuyez pour ouvrir l’onglet qui utilise votre microphone.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Appuyez pour ouvrir l’onglet qui utilise votre microphone et votre appareil photo.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Rappel : %1$s utilise toujours votre appareil photo. Appuyez pour ouvrir l’onglet.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Rappel : %1$s utilise toujours votre microphone. Appuyez pour ouvrir l’onglet</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Rappel : %1$s utilise toujours votre microphone. Appuyez pour ouvrir l’onglet.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Rappel : %1$s utilise toujours votre microphone et votre appareil photo. Appuyez pour ouvrir l’onglet</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Rappel : %1$s utilise toujours votre microphone et votre appareil photo. Appuyez pour ouvrir l’onglet.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Lecture</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un site lit un élément multimédia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-fur/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-fur/strings.xml new file mode 100644 index 0000000000..898cc3292c --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-fur/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimedia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La fotocjamare e je ative</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Il microfon al è atîf</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La fotocjamare e il microfon a son atîfs</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tocje par vierzi la schede che e sta doprant la fotocjamare.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tocje par vierzi la schede che e sta doprant il microfon.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tocje par vierzi la schede che e sta doprant il microfon e la fotocjamare.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Promemoria: %1$s al sta ancjemò doprant la fotocjamare. Tocje parvierzi la schede.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Promemoria: %1$s al sta ancjemò doprant il microfon. Tocje par vierzi la schede</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Pro memoria: %1$s al sta ancjemò doprant il to microfon. Tocje par vierzi la schede.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Promemoria: %1$s al sta ancjemò doprant il microfon e la fotocjamare. Tocje par vierzi la schede</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Pro memoria: %1$s al sta ancjemò doprant il microfon e la fotocjamare. Tocje par vierzi la schede.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Riprodûs</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Met in pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sît al sta riprodusint contignûts multimediâi</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-fy-rNL/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-fy-rNL/strings.xml new file mode 100644 index 0000000000..a04d2a4bd6 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-fy-rNL/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera is oan</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofoan is oan</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera en mikrofoan binne oan</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tik om it ljepblêd dat jo kamera brûkt te iepenjen.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tik om it ljepblêd dat jo mikrofoan brûkt te iepenjen.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tik om it ljepblêd dat jo mikrofoan en kamera brûkt te iepenjen.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Oantinken: %1$s brûkt jo kamera noch hieltyd. Tik om it ljepblêd te iepenjen.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Oantinken: %1$s brûkt jo mikrofoan noch hieltyd. Tik om it ljepblêd te iepenjen.</string> + + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Oantinken: %1$s brûkt jo mikrofoan noch hieltyd. Tik om it ljepblêd te iepenjen.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Oantinken: %1$s brûkt jo mikrofoan en kamera noch hieltyd. Tik om it ljepblêd te iepenjen.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Oantinken: %1$s brûkt jo mikrofoan en kamera noch hieltyd. Tik om it ljepblêd te iepenjen.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Ofspylje</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pauzearje</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">In website spilet media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ga-rIE/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ga-rIE/strings.xml new file mode 100644 index 0000000000..329388b6df --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ga-rIE/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Meáin</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Tá an ceamara ar siúl</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Tá an micreafón ar siúl</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Tá an ceamara agus an micreafón ar siúl</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Seinn</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Sos</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Tá suíomh ag seinm meáin</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-gd/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-gd/strings.xml new file mode 100644 index 0000000000..ba6e495c30 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-gd/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Meadhanan</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Tha an camara air</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Tha am micreofon air</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Tha an camara ’s am micreofon air</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Cluich</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Cuir na stad</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Tha làrach a’ cluich meadhanan</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-gl/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-gl/strings.xml new file mode 100644 index 0000000000..c313ca9711 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-gl/strings.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimedia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">A cámara está activada</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">O micrófono está activado</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">A cámara e o micrófono están activados</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Toque para abrir a lapela que está a usar a súa cámara.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Toque para abrir a lapela que está a usar o seu micrófono.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Toque para abrir a lapela que está a usar o seu micrófono e a súa cámara.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Recordatorio: %1$s aínda está usando a súa cámara. Toque para abrir a pestana.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s aínda está usando o seu micrófono. Toque para abrir a pestana</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Recordatorio: %1$s aínda está usando o seu micrófono. Toque para abrir a pestana.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Recordatorio: %1$s aínda está usando o seu micrófono e a súa cámara. Toque para abrir a pestana</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Recordatorio: %1$s aínda está usando o seu micrófono e a súa cámara. Toque para abrir a pestana.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproducir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sitio está a reproducir multimedia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-gn/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-gn/strings.xml new file mode 100644 index 0000000000..5db9c58387 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-gn/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Momaranduha</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Ta’ãnganohẽha hendy</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Ñe’ẽatãha hendy</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Ta’ãnganohẽha ha ñe’ẽatãha hendy</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Eikutu embojuruja hag̃ua tendayke oiporúva ne ta’ãnganohẽha.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Eikutu embojuruja hag̃ua tendayke oiporúva ne ñe’ẽatãha.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Eikutu embojuruja hag̃ua tendayke oiporúva ne ñe’ẽatãha ha ta’ãnganohẽha.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Mandu’arã: %1$s oiporu gueteri ne ta’ãnganohẽha. Eikutu embojuruja hag̃ua tendayke.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Mandu’arã: %1$s oiporu gueteri ne ñe’ẽatãha. Eikutu embojuruja hag̃ua tendayke.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Mandu’arã: %1$s oiporu gueteri ne ñe’ẽatãha. Eikutu embojuruja hag̃ua tendayke.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Mandu’arã: %1$s oiporu gueteri ne ñe’ẽatãha ha ta’ãnganohẽha. Eikutu embojuruja hag̃ua tendayke.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Mandu’arã: %1$s oiporu gueteri ne ñe’ẽatãha ha ta’ãnganohẽha. Eikutu embojuruja hag̃ua tendayke.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Mboheta</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Mombyta</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Ko tenda omboheta momaranduha retepy</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-gu-rIN/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-gu-rIN/strings.xml new file mode 100644 index 0000000000..cdcc023586 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-gu-rIN/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">મીડિયા</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">કૅમેરા ચાલુ છે</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">માઇક્રોફોન ચાલુ છે</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">કૅમેરા અને માઇક્રોફોન ચાલુ છે</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">શરુ કરો</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">અટકાવો</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">એક સાઇટ મીડિયા ચલાવી રહી છે</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-hi-rIN/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-hi-rIN/strings.xml new file mode 100644 index 0000000000..c949bc34ba --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-hi-rIN/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">मीडिया</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">कैमरा चालू है</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">माइक्रोफोन चालू है</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">कैमरा और माइक्रोफोन चालू हैं</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">चलाएं</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">रोकें</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">एक साइट मीडिया चला रहा है</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-hil/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-hil/strings.xml new file mode 100644 index 0000000000..371dc144a3 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-hil/strings.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medya</string> + + + </resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-hr/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-hr/strings.xml new file mode 100644 index 0000000000..25d6fa1646 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-hr/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Mediji</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera je uključena</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon je uključen</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera i mikrofon su uključeni</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Pokreni</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pauziraj</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Jedna web-stranica reproducira medije</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-hsb/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-hsb/strings.xml new file mode 100644 index 0000000000..b623f57322 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-hsb/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medije</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera je zapinjena</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon je zapinjeny</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera a mikrofon stej zapinjenej</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Podótkńće so, zo byšće rajtark wočinił, kotryž wašu kameru wužiwa. </string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Podótkńće so, zo byšće rajtark wočinił, kotryž waš mikrofon wužiwa. </string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Podótkńće so, zo byšće rajtark wočinił, kotryž waš mikrofon a wašu kameru wužiwa. </string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Kedźbu: %1$s wašu kameru hižo wužiwa. Podótkńće so, zo byšće rajtark wočinił.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Kedźbu: %1$s waš mikrofon hižo wužiwa. Podótkńće so, zo byšće rajtark wočinił</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Kedźbu: %1$s waš mikrofon hižo wužiwa. Podótkńće so, zo byšće rajtark wočinił.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Kedźbu: %1$s waš mikrofon a wašu kameru hižo wužiwa. Podótkńće so, zo byšće rajtark wočinił</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Kedźbu: %1$s waš mikrofon a wašu kameru hižo wužiwa. Podótkńće so, zo byšće rajtark wočinił.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Wothrać</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Přestawka</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Sydło medije wothrawa</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-hu/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-hu/strings.xml new file mode 100644 index 0000000000..81de265e5b --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-hu/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Média</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera be</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon be</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera és mikrofon be</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Koppintson a kamerát használó lap megnyitásához.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Koppintson a mikrofont használó lap megnyitásához.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Koppintson a mikrofont és kamerát használó lap megnyitásához.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Emlékeztető: A %1$s még mindig használja a kameráját. Koppintson a lap megnyitásához.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Emlékeztető: A %1$s még mindig használja a mikrofonját. Koppintson a lap megnyitásához.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Emlékeztető: A %1$s még mindig használja a mikrofonját. Koppintson a lap megnyitásához.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Emlékeztető: A %1$s még mindig használja a mikrofonját és kameráját. Koppintson a lap megnyitásához.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Emlékeztető: A %1$s még mindig használja a mikrofonját és kameráját. Koppintson a lap megnyitásához.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Lejátszás</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Szünet</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Egy webhely médialejátszást folytat</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-hy-rAM/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-hy-rAM/strings.xml new file mode 100644 index 0000000000..67280dbc3d --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-hy-rAM/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Մեդիա</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Տեսախցիկը միացված է</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Խոսափողը միացված է</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Տեսախցիկը և խոսափողը միացված են</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Հպեք՝ Ձեր տեսախցիկից օգտվող ներդիրը բացելու համար:</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Հպեք՝ Ձեր խոսափողից օգտվող ներդիրը բացելու համար:</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Հպեք՝ Ձեր խոսափողից և տեսախցիկից օգտվող ներդիրը բացելու համար:</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Հիշեցում. %1$s-ը դեռ օգտվում է Ձեր տեսախցիկից: Հպեք՝ ներդիրը բացելու համար:</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Հիշեցում. %1$s-ը դեռ օգտվում է Ձեր խոսափողից: Հպեք՝ ներդիրը բացելու համար:</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Հիշեցում. %1$s-ը դեռ օգտվում է Ձեր խոսափողից: Հպեք՝ ներդիրը բացելու համար:</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Հիշեցում. %1$s-ը դեռ օգտվում է Ձեր խոսափողից և տեսախցիկից: Հպեք՝ ներդիրը բացելու համար:</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Հիշեցում. %1$s-ը դեռ օգտվում է Ձեր խոսափողից և տեսախցիկից: Հպեք՝ ներդիրը բացելու համար:</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Նվագարկել</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Դադարեցնել</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Կայքը նվագարկում է մեդիա</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ia/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ia/strings.xml new file mode 100644 index 0000000000..8103d9133c --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ia/strings.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medios</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Le camera es activate</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Le microphono es activate</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Camera e microphono es activate</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tocca pro aperir le scheda que usa tu camera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tocca pro aperir le scheda que usa tu microphono.</string> + + + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tocca pro aperir le scheda que usa tu microphono e tu camera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Memento: %1$s ancora usa tu camera. Tocca pro aperir le scheda.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Memento: %1$s ancora usa tu microphono. Tocca pro aperir le scheda.</string> + + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Memento: %1$s ancora usa tu microphono. Tocca pro aperir le scheda.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Memento: %1$s ancora usa tu microphono e camera. Tocca pro aperir le scheda.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Memento: %1$s ancora usa tu microphono e camera. Tocca pro aperir le scheda.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproducer</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausar</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sito reproduce contentos multimedial </string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-in/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-in/strings.xml new file mode 100644 index 0000000000..ed5de8a69d --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-in/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera aktif</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon aktif</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera dan mikrofon aktif</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Mainkan</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Jeda</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Situs sedang memutar media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-is/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-is/strings.xml new file mode 100644 index 0000000000..5d54639a35 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-is/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Miðill</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kveikt er á myndavél</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Kveikt er á hljóðnema</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kveikt er á myndavél og hljóðnema</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Ýttu á til að opna flipann sem notar myndavélina þína.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Ýttu á til að opna flipann sem notar hljóðnemann þinn.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Ýttu á til að opna flipann sem notar hljóðnemann og myndavélina.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Áminning: %1$s er enn að nota myndavélina þína. Ýttu á til að opna flipann.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Áminning: %1$s er enn að nota hljóðnemann þinn. Ýttu á til að opna flipann</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Áminning: %1$s er enn að nota hljóðnemann þinn. Ýttu á til að opna flipann.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Áminning: %1$s er enn að nota hljóðnemann og myndavélina. Ýttu á til að opna flipann</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Áminning: %1$s er enn að nota hljóðnemann og myndavélina. Ýttu á til að opna flipann.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Spila</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Setja í bið</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Vefsvæði er að spila miðil</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-it/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-it/strings.xml new file mode 100644 index 0000000000..3a2f06de81 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-it/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La fotocamera è attiva</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Il microfono è attivo</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La fotocamera e il microfono sono attivi</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tocca per aprire la scheda che sta utilizzando la fotocamera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tocca per aprire la scheda che sta utilizzando il microfono.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tocca per aprire la scheda che sta utilizzando il microfono e la fotocamera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Promemoria: %1$s sta ancora utilizzando la fotocamera. Tocca per aprire la scheda.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Promemoria: %1$s sta ancora utilizzando il microfono. Tocca per aprire la scheda</string> + + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Promemoria: %1$s sta ancora utilizzando il microfono. Tocca per aprire la scheda.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Promemoria: %1$s sta ancora utilizzando il microfono e la fotocamera. Tocca per aprire la scheda</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Promemoria: %1$s sta ancora utilizzando il microfono e la fotocamera. Tocca per aprire la scheda.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Riproduci</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Metti in pausa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un sito sta riproducendo contenuti multimediali</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-iw/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-iw/strings.xml new file mode 100644 index 0000000000..b8d89869a3 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-iw/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">מדיה</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">המצלמה פעילה</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">המיקרופון פעיל</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">המצלמה והמיקרופון פעילים</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">יש להקיש כדי לפתוח את הלשונית שמשתמשת במצלמה שלך.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">יש להקיש כדי לפתוח את הלשונית שמשתמשת במיקרופון שלך.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">יש להקיש כדי לפתוח את הלשונית שמשתמשת במיקרופון ובמצלמה שלך.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">תזכורת: %1$s עדיין משתמש במצלמה שלך. יש להקיש כדי לפתוח את הלשונית.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">תזכורת: %1$s עדיין משתמש במיקרופון שלך. יש להקיש כדי לפתוח את הלשונית.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">תזכורת: %1$s עדיין משתמש במיקרופון שלך. יש להקיש כדי לפתוח את הלשונית.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">תזכורת: %1$s עדיין משתמש במיקרופון ובמצלמה שלך. יש להקיש כדי לפתוח את הלשונית</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">תזכורת: %1$s עדיין משתמש במיקרופון ובמצלמה שלך. יש להקיש כדי לפתוח את הלשונית.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">ניגון</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">השהייה</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">אתר מנגן מדיה</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ja/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ja/strings.xml new file mode 100644 index 0000000000..c1cfbc4c7d --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ja/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">メディア</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">カメラを共有中</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">マイクを共有中</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">カメラとマイクを共有中</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">タップしてカメラを使用しているタブを開いてください。</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">タップしてマイクを使用しているタブを開いてください。</string> + + + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">タップしてマイクとカメラを使用しているタブを開いてください。</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">通知: %1$s がまだカメラを使用しています。タップしてタブを開いてください。</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">通知: %1$s がまだマイクを使用しています。タップしてタブを開いてください。</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">通知: %1$s がまだマイクを使用しています。タップしてタブを開いてください。</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">通知: %1$s がまだマイクとカメラを使用しています。タップしてタブを開いてください。</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">通知: %1$s がまだマイクとカメラを使用しています。タップしてタブを開いてください。</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">再生</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">一時停止</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">サイトがメディアを再生しています</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ka/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ka/strings.xml new file mode 100644 index 0000000000..792398b0f5 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ka/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">ფაილები</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">კამერა ჩართულია</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">მიკროფონი ჩართულია</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">კამერა და მიკროფონი ჩართულია</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">გაშვება</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">შეჩერება</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">საიტზე გაშვებულია ფაილი</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-kaa/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-kaa/strings.xml new file mode 100644 index 0000000000..3b164f0b99 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-kaa/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera qosılǵan</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon qosılǵan</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera hám mikrofon qosılǵan</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Baslaw</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pauza</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Saytta media qoyılıp tur</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-kab/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-kab/strings.xml new file mode 100644 index 0000000000..a823f58c8a --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-kab/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Allalen n teywalt</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Takamirat tetteddu</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Asawaḍ itteddu</string> + + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Takamiṛat akked usawaḍ tteddun</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Urar</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Asteɛfu</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Asmel yaqqaṛ aferdis aget midya</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-kk/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-kk/strings.xml new file mode 100644 index 0000000000..03ebec011a --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-kk/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Медиа</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Камера іске қосулы тұр</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Микрофон іске қосулы тұр</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Камера және микрофон іске қосулы тұр</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Камераңызды пайдаланып тұрған бетті ашу үшін шертіңіз.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Микрофоныңызды пайдаланып тұрған бетті ашу үшін шертіңіз.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Микрофоныңыз бер камераңызды пайдаланып тұрған бетті ашу үшін шертіңіз.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Еске салу: %1$s әлі де камераңызды пайдалануда. Бетті ашу үшін шертіңіз.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Еске салу: %1$s әлі де микрофоныңызды пайдалануда. Бетті ашу үшін шертіңіз</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Еске салу: %1$s әлі де микрофоныңызды пайдалануда. Бетті ашу үшін шертіңіз.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Еске салу: %1$s әлі де микрофоныңыз бен камераңызды пайдалануда. Бетті ашу үшін шертіңіз</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Еске салу: %1$s әлі де микрофоныңыз бен камераңызды пайдалануда. Бетті ашу үшін шертіңіз.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Ойнату</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Аялдату</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Сайт медианы ойнап жатыр</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-kmr/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-kmr/strings.xml new file mode 100644 index 0000000000..65c7577f45 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-kmr/strings.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medya</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera vekirî ye</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mîkrofon vekirî ye</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera û mîkrofon vekirî ne</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Ji bo vekirina hilpekîna ku kameraya te bi kar tîne, bitikîne.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Ji bo vekirina hilpekîna ku mîkrofona te bi kar tîne, bitikîne.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Ji bo vekirina hilpekîna ku mîkrofon û kameraya te bi kar tîne, bitikîne.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Bibîrxistin: %1$s hê jî kameraya te bi kar tîne. Ji bo vekirina hilpekînê bitikîne.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Bibîrxistin: %1$s hê jî mîkrofona te bi kar tîne. Ji bo vekirina hilpekînê bitikîne</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Bibîrxistin: %1$s hê jî mîkrofona te bi kar tîne. Ji bo vekirina hilpekînê bitikîne.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Bibîrxistin: %1$s hê jî mîkrofon û kameraya te bi kar tîne. Ji bo vekirina hilpekînê bitikîne</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Bibîrxistin: %1$s hê jî mîkrofon kameraya te bi kar tîne. Ji bo vekirina hilpekînê bitikîne.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Lêde</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Bisekinîne</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Malperek li medyayê dide</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-kn/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-kn/strings.xml new file mode 100644 index 0000000000..431fea19d4 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-kn/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">ಮಾಧ್ಯಮ</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">ಕ್ಯಾಮೆರಾ ಚಾಲನೆಗೊಂಡಿದೆ</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">ಮೈಕ್ರೊಫೋನ್ ಚಾಲನೆಯಲ್ಲಿದೆ</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">ಕ್ಯಾಮೆರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ಚಾಲನೆಯಲ್ಲಿವೆ</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">ಪ್ಲೇ ಮಾಡು</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">ವಿರಾಮ</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">ಒಂದು ಸೈಟ್ ಮಾಧ್ಯಮವನ್ನು ಆಡುತ್ತಿದೆ</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ko/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ko/strings.xml new file mode 100644 index 0000000000..7c97ebc40b --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ko/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">미디어</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">카메라가 켜저 있음</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">마이크가 켜져 있음</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">카메라와 마이크가 켜저 있음</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">카메라를 사용하고 있는 탭을 열려면 누르세요.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">마이크를 사용하고 있는 탭을 열려면 누르세요.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">마이크와 카메라를 사용하고 있는 탭을 열려면 누르세요.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">미리 알림: %1$s가 아직 카메라를 사용하고 있습니다. 탭을 열려면 누르세요.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">미리 알림: %1$s가 아직 마이크를 사용하고 있습니다. 탭을 열려면 누르세요.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">미리 알림: %1$s가 아직 마이크를 사용하고 있습니다. 탭을 열려면 누르세요.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">미리 알림: %1$s가 아직 마이크와 카메라를 사용하고 있습니다. 탭을 열려면 누르세요.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">미리 알림: %1$s가 아직 마이크와 카메라를 사용하고 있습니다. 탭을 열려면 누르세요.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">재생</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">중지</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">사이트가 미디어를 재생하고 있습니다</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-lij/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-lij/strings.xml new file mode 100644 index 0000000000..31b5a789e1 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-lij/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Fòtocamera averta</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Micròfono açeizo</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Fòtocamera e micròdfono açeixi</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Riproduçion</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pösa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un scito o fâ anâ di media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-lo/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-lo/strings.xml new file mode 100644 index 0000000000..be8ef3d643 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-lo/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">ມີເດຍ</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">ກ້ອງເປີດຢູ່</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">ໄມໂຄຣໂຟນເປີດຢູ່</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">ກ້ອງ ແລະ ໄມໂຄຣໂຟນເປີດຢູ່</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">ຫຼິ້ນ</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">ຢຸດ</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">ເວັບໄຊທກຳລັງເປີດມີເດຍຢູ່</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-lt/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-lt/strings.xml new file mode 100644 index 0000000000..843481b530 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-lt/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medija</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Naudojama kamera</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Naudojamas mikrofonas</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Naudojama kamera ir mikrofonas</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Groti</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pristabdyti</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Svetainėje groja medija</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-mix/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-mix/strings.xml new file mode 100644 index 0000000000..b2e7807f07 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-mix/strings.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Kunchatu</string> + + </resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ml/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ml/strings.xml new file mode 100644 index 0000000000..71c1789ca9 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ml/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">മീഡിയ</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">ക്യാമറ ഓണാണ്</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">മൈക്രോഫോൺ ഓണാണ്</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">ക്യാമറയും മൈക്രോഫോണും ഓണാണ്</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">പ്ലേ ചെയ്യുക</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">തല്ക്കാലത്തേക്ക് നിര്ത്തുക</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">ഒരു സൈറ്റ് മീഡിയ പ്ലേ ചെയ്യുന്നുണ്ട്</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-mr/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-mr/strings.xml new file mode 100644 index 0000000000..365495f4a4 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-mr/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">मिडीया</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">कॅमेरा चालू आहे</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">मायक्रोफोन चालू आहे</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">कॅमेरा आणि मायक्रोफोन चालू आहेत</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">चालवा</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">थांबवा</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">एक साईट मिडिया चालवत आहे</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-my/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-my/strings.xml new file mode 100644 index 0000000000..ebf3b77f22 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-my/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">မီဒီယာ</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">ကင်မရာဖွင့်ထားသည်</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">မိုက်ခရိုဖုန်းဖွင့်နေသည်</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">ကင်မရာနှင့်မိုက်ကရိုဖုန်းဖွင့်ထားသည်</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">ဖွင့်ပါ</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">ခေတ္တရပ်တန့်ပါ</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">ဆိုဘ် တစ်ခုကမီဒီယာကိုဖွင့်နေသည်</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-nb-rNO/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-nb-rNO/strings.xml new file mode 100644 index 0000000000..0ec9fd943a --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-nb-rNO/strings.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medier</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera er på</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon er på</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera og mikrofon er på</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Trykk for å åpne fanen som bruker kameraet ditt.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Trykk for å åpne fanen som bruker mikrofonen din.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Trykk for å åpne fanen som bruker mikrofonen og kameraet ditt.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Påminnelse: %1$s bruker fortsatt kameraet ditt. Trykk for å åpne fanen.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Påminnelse: %1$s bruker fortsatt mikrofonen din. Trykk for å åpne fanen</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Påminnelse: %1$s bruker fortsatt mikrofonen din. Trykk for å åpne fanen.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Påminnelse: %1$s bruker fortsatt mikrofonen og kameraet ditt. Trykk for å åpne fanen</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Påminnelse: %1$s bruker fortsatt mikrofonen og kameraet ditt. Trykk for å åpne fanen.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Spill av</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Et nettsted spiller av medium</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ne-rNP/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ne-rNP/strings.xml new file mode 100644 index 0000000000..fa0b126376 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ne-rNP/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">मिडिया</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">क्यामरा खुल्ला छ</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">माइक्रोफोन खुल्ला छ</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">क्यामरा र माइक्रोफोन दुबै खुल्ला छन्</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">बजाउनुहोस्</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">रोक्नुहोस्</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">एउटा साइटले मिडिया बजाइरहेको छ</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-nl/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-nl/strings.xml new file mode 100644 index 0000000000..69af62dea2 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-nl/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Camera is aan</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Microfoon is aan</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Camera en microfoon zijn aan</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tik om het tabblad dat uw camera gebruikt te openen.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tik om het tabblad dat uw microfoon gebruikt te openen.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tik om het tabblad dat uw microfoon en camera gebruikt te openen.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Herinnering: %1$s gebruikt uw camera nog steeds. Tik om het tabblad te openen.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Herinnering: %1$s gebruikt uw microfoon nog steeds. Tik om het tabblad te openen.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Herinnering: %1$s gebruikt uw microfoon nog steeds. Tik om het tabblad te openen.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Herinnering: %1$s gebruikt uw microfoon en camera nog steeds. Tik om het tabblad te openen.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Herinnering: %1$s gebruikt uw microfoon en camera nog steeds. Tik om het tabblad te openen.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Afspelen</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pauzeren</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Een website speelt media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-nn-rNO/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-nn-rNO/strings.xml new file mode 100644 index 0000000000..54a2f5bb49 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-nn-rNO/strings.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medium</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kameraet er på</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofonen er på</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera og mikrofon er på</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Trykk for å opne fana som brukar kameraet ditt.</string> + + + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Trykk for å opne fana som brukar mikrofonen din.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Trykk for å opne fana som brukar mikrofonen og kameraet ditt.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Påminning: %1$s brukar framleis kameraet ditt. Trykk for å opne fana.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Påminning: %1$s brukar framleis mikrofonen din. Trykk for å opne fana</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Påminning: %1$s brukar framleis mikrofonen din. Trykk for å opne fana.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Spel av</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Ein nettstad spelar av medium</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-oc/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-oc/strings.xml new file mode 100644 index 0000000000..4d177d34e2 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-oc/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Mèdias</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La camèra es activa</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Lo microfòn es actiu</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La camèra e lo microfòn son actius</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tocatz per dobrir l’onglet qu’es a utilizar la camèra.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tocatz per dobrir l’onglet qu’es a utilizar lo microfòn.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tocatz per dobrir l’onglet qu’es a utilizar la camèra e lo microfòn.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Rapèl : %1$s utiliza encara la camèra. Tocatz per dobrir l’onglet.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Rapèl : %1$s utiliza encara lo microfòn. Tocatz per dobrir l’onglet.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Rapèl : %1$s utiliza encara lo microfòn. Tocatz per dobrir l’onglet.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Rapèl : %1$s utiliza encara la camèra e lo microfòn. Tocatz per dobrir l’onglet.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Rapèl : %1$s utiliza encara la camèra e lo microfòn. Tocatz per dobrir l’onglet.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Lectura</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un site jòga un element multimèdia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-or/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-or/strings.xml new file mode 100644 index 0000000000..3df7c6ed41 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-or/strings.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">ମିଡ଼ିଆ</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">କ୍ୟାମେରା ଅନ ଅଛି</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">ମାଇକ୍ରୋଫୋନ ଅନ ଅଛି</string> + + + </resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-pa-rIN/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-pa-rIN/strings.xml new file mode 100644 index 0000000000..530ee56bc4 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-pa-rIN/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">ਮੀਡਿਆ</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">ਕੈਮਰਾ ਚਾਲੂ ਹੈ</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">ਮਾਈਕਰੋਫੋਨ ਚਾਲੂ ਹੈ</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">ਕੈਮਰਾ ਤੇ ਮਾਈਕਰੋਫ਼ੋਨ ਚਾਲ ਹਨ</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">ਤੁਹਾਡੇ ਕੈਮਰੇ ਨੂੰ ਵਰਤਣ ਵਾਲੀ ਟੈਬ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਛੂਹੋ।</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">ਤੁਹਾਡੇ ਮਾਈਕਰੋਫ਼ੋਨ ਨੂੰ ਵਰਤਣ ਵਾਲੀ ਟੈਬ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਛੂਹੋ।</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">ਤੁਹਾਡੇ ਮਾਈਕਰੋਫ਼ੋਨ ਅਤੇ ਕੈਮਰੇ ਨੂੰ ਵਰਤਣ ਵਾਲੀ ਟੈਬ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਛੂਹੋ।</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">ਰੀਮਾਈਂਡਰ: %1$s ਹਾਲੇ ਵੀ ਤੁਹਾਡੇ ਕੈਮਰੇ ਨੂੰ ਵਰਤ ਰਹੀ ਹੈ। ਟੈਬ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਛੂਹੋ।</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">ਰੀਮਾਈਂਡਰ: %1$s ਹਾਲੇ ਵੀ ਤੁਹਾਡੇ ਮਾਈਕਰੋਫ਼ੋਨ ਨੂੰ ਵਰਤ ਰਹੀ ਹੈ। ਟੈਬ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਛੂਹੋ।</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">ਰੀਮਾਈਂਡਰ: %1$s ਹਾਲੇ ਵੀ ਤੁਹਾਡੇ ਮਾਈਕਰੋਫ਼ੋਨ ਨੂੰ ਵਰਤ ਰਹੀ ਹੈ। ਟੈਬ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਛੂਹੋ।</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">ਰੀਮਾਈਂਡਰ: %1$s ਹਾਲੇ ਵੀ ਤੁਹਾਡੇ ਮਾਈਕਰੋਫ਼ੋਨ ਅਤੇ ਕੈਮਰੇ ਨੂੰ ਵਰਤ ਰਹੀ ਹੈ। ਟੈਬ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਛੂਹੋ।</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">ਰੀਮਾਈਂਡਰ: %1$s ਹਾਲੇ ਵੀ ਤੁਹਾਡੇ ਮਾਈਕਰੋਫ਼ੋਨ ਅਤੇ ਕੈਮਰੇ ਨੂੰ ਵਰਤ ਰਹੀ ਹੈ। ਟੈਬ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਛੂਹੋ।</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">ਚਲਾਓ</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">ਵਿਰਾਮ</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">ਸਾਈਟ ਮੀਡਿਆ ਚਲਾ ਰਹੀ ਹੈ</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-pa-rPK/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-pa-rPK/strings.xml new file mode 100644 index 0000000000..a1f77acea8 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-pa-rPK/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">میڈیا</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">کیمرہ چالو اے</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">مائیکروفون چالو اے</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">کیمرہ تے مائیکروفون چالو ہن</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">چلاؤ</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">روکو</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">اک سائٹ میڈیا چلا رہی اے</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-pl/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-pl/strings.xml new file mode 100644 index 0000000000..9c22f9a90b --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-pl/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimedia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Aparat jest włączony</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon jest włączony</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Aparat i mikrofon są włączone</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Stuknij, aby otworzyć kartę korzystającą z aparatu.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Stuknij, aby otworzyć kartę korzystającą z mikrofonu.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Stuknij, aby otworzyć kartę korzystającą z mikrofonu i aparatu.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Przypomnienie: %1$s nadal korzysta z aparatu. Stuknij, aby otworzyć kartę.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Przypomnienie: %1$s nadal korzysta z mikrofonu. Stuknij, aby otworzyć kartę</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Przypomnienie: %1$s nadal korzysta z mikrofonu. Stuknij, aby otworzyć kartę.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Przypomnienie: %1$s nadal korzysta z mikrofonu i aparatu. Stuknij, aby otworzyć kartę</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Przypomnienie: %1$s nadal korzysta z mikrofonu i aparatu. Stuknij, aby otworzyć kartę.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Odtwórz</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Wstrzymaj</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Witryna odtwarza multimedia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-pt-rBR/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..90ba3f4b26 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Mídia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Câmera ligada</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Microfone ligado</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Câmera e microfone ligados</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Toque para abrir a aba que está usando sua câmera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Toque para abrir a aba que está usando seu microfone.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Toque para abrir a aba que usa seu microfone e câmera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Lembrete: O %1$s ainda está usando sua câmera. Toque para abrir a aba.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Lembrete: O %1$s ainda está usando seu microfone. Toque para abrir a aba</string> + + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Lembrete: O %1$s ainda está usando seu microfone. Toque para abrir a aba.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Lembrete: O %1$s ainda está usando seu microfone e câmera. Toque para abrir a aba</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Lembrete: O %1$s ainda está usando seu microfone e câmera. Toque para abrir a aba.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproduzir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausar</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Um site está reproduzindo mídia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-pt-rPT/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..86658e844c --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Multimédia</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Câmara ligada</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Microfone ligado</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Câmara e microfone ligados</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Toque para abrir o separador que está a utilizar a sua câmara.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Toque para abrir o separador que está a utilizar o seu microfone.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Toque para abrir o separador que está a utilizar o seu microfone e câmara.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Lembrete: %1$s ainda está a utilizar a sua câmara. Toque para abrir o separador.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Lembrete: %1$s ainda está a utilizar o seu microfone. Toque para abrir o separador</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Lembrete: %1$s ainda está a utilizar o seu microfone. Toque para abrir o separador.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Lembrete: %1$s ainda está a utilizar o seu microfone e câmara. Toque para abrir o separador</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Lembrete: %1$s ainda está a utilizar o seu microfone e câmara. Toque para abrir o separador.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reproduzir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Um site está a reproduzir multimédia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-rm/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-rm/strings.xml new file mode 100644 index 0000000000..5564d78211 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-rm/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Medias</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">La camera è activa</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Il microfon è activ</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">La camera ed il microfon èn activs</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tutgar per avrir il tab che utilisescha tia camera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tutgar per avrir il tab che utilisescha tes microfon.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tutgar per avrir il tab che utilisescha tes microfon e tia camera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Promemoria: %1$s utilisescha anc adina tia camera. Tutgar per avrir il tab.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Promemoria: %1$s utilisescha anc adina tes microfon. Tutgar per avrir il tab</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Promemoria: %1$s utilisescha anc adina tes microfon. Tutgar per avrir il tab.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Promemoria: %1$s utilisescha anc adina tes microfon e tia camera. Tutgar per avrir il tab</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Promemoria: %1$s utilisescha anc adina tes microfon e tia camera. Tutgar per avrir il tab.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Far ir</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Ina website fa ir multimedia</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ro/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ro/strings.xml new file mode 100644 index 0000000000..1d2be5f664 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ro/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Conținut media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Camera este pornită</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Microfonul este pornit</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Camera și microfonul sunt pornite</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Redare</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pauză</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Un site redă conținut media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ru/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ru/strings.xml new file mode 100644 index 0000000000..3c45e590bc --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ru/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Медиа</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Камера включена</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Микрофон включён</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Камера и микрофон включены</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Нажмите, чтобы открыть вкладку, использующую вашу камеру.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Нажмите, чтобы открыть вкладку, использующую ваш микрофон.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Нажмите, чтобы открыть вкладку, использующую ваш микрофон и камеру.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Напоминание: %1$s всё ещё использует вашу камеру. Нажмите, чтобы открыть вкладку.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Напоминание: %1$s всё ещё использует ваш микрофон. Нажмите, чтобы открыть вкладку</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Напоминание: %1$s всё ещё использует ваш микрофон. Нажмите, чтобы открыть вкладку.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Напоминание: %1$s всё ещё использует ваш микрофон и камеру. Нажмите, чтобы открыть вкладку</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Напоминание: %1$s всё ещё использует ваш микрофон и камеру. Нажмите, чтобы открыть вкладку.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Воспроизвести</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Приостановить</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Сайт воспроизводит звук и/или видео</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-sat/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-sat/strings.xml new file mode 100644 index 0000000000..25449c1766 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-sat/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">ᱢᱤᱰᱤᱭᱟ</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">ᱠᱮᱢᱨᱟ ᱪᱟᱹᱞᱩ ᱢᱮᱱᱟᱜ-ᱟ</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">ᱢᱟᱭᱠᱨᱚᱯᱷᱚᱱ ᱪᱟᱹᱞᱩ ᱢᱮᱱᱟᱜ-ᱟ</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">ᱠᱮᱢᱨᱟ ᱟᱨ ᱢᱟᱭᱠᱨᱚᱯᱷᱚᱱ ᱚᱱ ᱢᱮᱱᱟᱜ-ᱟ</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">ᱟᱢᱟᱜ ᱠᱟᱢᱨᱟ ᱵᱮᱵᱷᱟᱨᱮᱫ ᱴᱮᱵᱽ ᱠᱷᱩᱞᱟᱹ ᱞᱟᱹᱜᱤᱫ ᱴᱤᱯᱟᱹᱣ ᱢᱮ ᱾</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">ᱟᱢᱟᱜ ᱢᱟᱭᱤᱠ ᱵᱮᱵᱷᱟᱨᱮᱫ ᱴᱮᱵᱽ ᱠᱷᱩᱞᱟᱹ ᱞᱟᱹᱜᱤᱫ ᱴᱤᱯᱟᱹᱣ ᱢᱮ ᱾</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">ᱟᱢᱟᱜ ᱢᱟᱭᱤᱠ ᱟᱨ ᱠᱮᱢᱨᱟ ᱵᱮᱵᱷᱟᱨᱮᱫ ᱴᱮᱵᱽ ᱠᱷᱩᱞᱟᱹ ᱞᱟᱹᱜᱤᱫ ᱴᱤᱯᱟᱹᱣ ᱢᱮ ᱾</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">ᱩᱭᱦᱟ.ᱨ ᱚᱪᱚ : %1$s ᱱᱤᱛᱦᱚᱸ ᱟᱢᱟᱜ ᱠᱮᱢᱨᱟ ᱵᱮᱵᱷᱟᱨ ᱮᱫᱟᱭ ᱾ ᱴᱮᱵᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱴᱮᱵᱽ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ ᱾</string> + + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">ᱩᱭᱦᱟ.ᱨ ᱚᱪᱚ : %1$s ᱱᱤᱛᱦᱚᱸ ᱟᱢᱟᱜ ᱢᱟᱭᱤᱠ ᱵᱮᱵᱷᱟᱨ ᱮᱫᱟᱭ ᱾ ᱴᱮᱵᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱴᱮᱵᱽ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ ᱾</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">ᱩᱭᱦᱟ.ᱨ ᱚᱪᱚ : %1$s ᱱᱤᱛᱦᱚᱸ ᱟᱢᱟᱜ ᱢᱟᱭᱤᱠ ᱵᱮᱵᱷᱟᱨ ᱮᱫᱟᱭ ᱾ ᱴᱮᱵᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱴᱮᱵᱽ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ ᱾</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">ᱩᱭᱦᱟ.ᱨ ᱚᱪᱚ : %1$s ᱱᱤᱛᱦᱚᱸ ᱟᱢᱟᱜ ᱢᱟᱭᱤᱠ ᱟᱨ ᱠᱮᱢᱨᱟ ᱵᱮᱵᱷᱟᱨ ᱮᱫᱟᱭ ᱾ ᱴᱮᱵᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱴᱮᱵᱽ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ ᱾</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">ᱩᱭᱦᱟ.ᱨ ᱚᱪᱚ : %1$s ᱱᱤᱛᱦᱚᱸ ᱟᱢᱟᱜ ᱢᱟᱭᱤᱠ ᱟᱨ ᱠᱮᱢᱨᱟ ᱵᱮᱵᱷᱟᱨ ᱮᱫᱟᱭ ᱾ ᱴᱮᱵᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱴᱮᱵᱽ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ ᱾</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">ᱮᱱᱮᱡ ᱢᱮ</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">ᱛᱷᱩᱠᱩᱢ ᱢᱮ</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">ᱢᱤᱫᱴᱟᱝ ᱥᱟᱭᱤᱴ ᱢᱤᱰᱤᱭᱟ ᱮᱱᱮᱡ ᱫᱟᱭ</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-sc/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-sc/strings.xml new file mode 100644 index 0000000000..6bce4ac7b3 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-sc/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Cuntenutos multimediales</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Càmera ativa</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Micròfonu ativu</string> + + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Sa càmera e su micròfonu sunt ativos</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Toca pro abèrrere s’ischeda chi est impreende sa càmera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Toca pro abèrrere s’ischeda chi est impreende su micròfonu.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Toca pro abèrrere s’ischeda chi est impreende sa càmera e su micròfonu.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Regorda: %1$s est ancora impreende sa càmera. Toca pro abèrrere s’ischeda.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Regorda: %1$s est ancora impreende su micròfonu. Toca pro abèrrere s’ischeda</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Regorda: %1$s est ancora impreende su micròfonu. Toca pro abèrrere s’ischeda.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Regorda: %1$s est ancora impreende sa càmera e su micròfonu. Toca pro abèrrere s’ischeda</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Regorda: %1$s est ancora impreende sa càmera e su micròfonu. Toca pro abèrrere s’ischeda.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Reprodue</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pàusa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Unu situ est riproduente cuntenutu multimediale</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-si/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-si/strings.xml new file mode 100644 index 0000000000..41edbc1ea9 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-si/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">මාධ්ය</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">රූගතය සක්රියයි</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">ශබ්දවාහිනිය සක්රියයි</string> + + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">රූගතය හා ශබ්දවාහිනිය සක්රියයි</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">ඔබගේ රූගතය භාවිතා කරන පටිත්ත ඇරීමට තට්ටු කරන්න.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">ඔබගේ ශබ්දවාහිනිය භාවිතා කරන පටිත්ත ඇරීමට තට්ටු කරන්න.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">ඔබගේ ශබ්දවාහිනිය හා රූගතය භාවිතා කරන පටිත්ත ඇරීමට තට්ටු කරන්න.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">සටහන: %1$s තවමත් ඔබගේ රූගතය භාවිතා කරයි. පටිත්ත ඇරීමට තට්ටු කරන්න.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">සටහන: %1$s තවමත් ඔබගේ ශබ්දවාහිනිය භාවිතා කරයි. පටිත්ත ඇරීමට තට්ටු කරන්න</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">සටහන: %1$s තවමත් ඔබගේ ශබ්දවාහිනිය භාවිතා කරයි. පටිත්ත ඇරීමට තට්ටු කරන්න.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">සටහන: %1$s තවමත් ඔබගේ ශබ්දවාහිනිය හා රූගතය භාවිතා කරයි. පටිත්ත ඇරීමට තට්ටු කරන්න</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">සටහන: %1$s තවමත් ඔබගේ ශබ්දවාහිනිය හා රූගතය භාවිතා කරයි. පටිත්ත ඇරීමට තට්ටු කරන්න.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">වාදනය</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">විරාමයක්</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">අඩවියක් මාධ්ය වාදනය කරයි</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-sk/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-sk/strings.xml new file mode 100644 index 0000000000..a895411f72 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-sk/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Médiá</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera je zapnutá</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofón je zapnutý</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera a mikrofón sú zapnuté</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Ťuknutím otvoríte kartu, ktorá používa vašu kameru.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Ťuknutím otvoríte kartu, ktorá používa váš mikrofón.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Ťuknutím otvoríte kartu, ktorá používa váš mikrofón a kameru.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Pripomenutie: %1$s stále používa vašu kameru. Ťuknutím otvoríte kartu.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Pripomenutie: %1$s stále používa váš mikrofón. Ťuknutím otvoríte kartu.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Pripomenutie: %1$s stále používa váš mikrofón. Ťuknutím otvoríte kartu.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Pripomenutie: %1$s stále používa váš mikrofón a kameru. Ťuknutím otvoríte kartu.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Pripomenutie: %1$s stále používa váš mikrofón a kameru. Ťuknutím otvoríte kartu.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Prehrať</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pozastaviť</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Stránka prehráva médiá</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-skr/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-skr/strings.xml new file mode 100644 index 0000000000..727fd7df6b --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-skr/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">میڈیا</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">کیمرہ چالو ہے</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">مائیکروفون چالو ہے</string> + + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">کیمرہ تے مائیکروفون چالو ہن</string> + + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">تُہاݙے کیمرے کوں استعمال کرݨ آلے ٹیب کوں کھولݨ کِیتے دباؤ۔</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">تُہاݙے مائیکرو فون کوں استعمال کرݨ آلے ٹیب کوں کھولݨ کِیتے دباؤ۔</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">تُہاݙے مائیکرو فون اَتے کیمرے کوں استعمال کرݨ آلے ٹیب کوں کھولݨ کِیتے دباؤ۔</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">یاد دہانی: %1$s ہالی وی تُہاݙا کیمرہ استعمال کرین٘دا پِیا ہِے۔ ٹیب کھولݨ کِیتے دباؤ۔</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">یاد دہانی: %1$s ہالی وی تُہاݙا مائیکرو فون استعمال کرین٘دا پِیا ہِے۔ ٹیب کھولݨ کِیتے دباؤ۔</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">یاد دہانی: %1$s ہالی وی تُہاݙا مائیکرو فون استعمال کرین٘دا پِیا ہِے۔ ٹیب کھولݨ کِیتے دباؤ۔</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">یاد دہانی: %1$s ہالی وی تُہاݙا مائیکرو فون اَتے کیمرہ استعمال کرین٘دا پِیا ہِے۔ ٹیب کھولݨ کِیتے دباؤ۔</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">یاد دہانی: %1$s ہالی وی تُہاݙا مائیکرو فون اَتے کیمرہ استعمال کرین٘دا پِیا ہِے۔ ٹیب کھولݨ کِیتے دباؤ۔</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">چلاؤ</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">ذرا روکو</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">سائٹ میڈیا چلیندی پئی ہے۔</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-sl/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-sl/strings.xml new file mode 100644 index 0000000000..8482100ccc --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-sl/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Predstavnost</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera je vključena</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon je vključen</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera in mikrofon sta vključena</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tapnite, da odprete zavihek, ki uporablja kamero.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tapnite, da odprete zavihek, ki uporablja mikrofon.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tapnite, da odprete zavihek, ki uporablja mikrofon in kamero.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Opomnik: %1$s še vedno uporablja kamero. Tapnite, da odprete zavihek.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Opomnik: %1$s še vedno uporablja mikrofon. Tapnite, da odprete zavihek</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Opomnik: %1$s še vedno uporablja mikrofon. Tapnite, da odprete zavihek.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Opomnik: %1$s še vedno uporablja mikrofon in kamero. Tapnite, da odprete zavihek</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Opomnik: %1$s še vedno uporablja mikrofon in kamero. Tapnite, da odprete zavihek.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Predvajaj</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Premor</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Stran predvaja predstavnost</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-sq/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-sq/strings.xml new file mode 100644 index 0000000000..dc685d267b --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-sq/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera është e hapur</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofoni është i hapur</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera dhe mikrofoni janë të hapur</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Prekeni, që të hapet skeda që po përdor kamerën tuaj.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Prekeni, që të hapet skeda që po përdor mikrofonin tuaj.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Prekeni, që të hapet skeda që po përdor mikrofonin dhe kamerën tuaj.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Kujtues: %1$s ende po përdor kamerën tuaj. Prekeni që të hapet skeda.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Kujtues: %1$s ende po përdor mikrofonin tuaj. Prekeni që të hapet skeda</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Kujtues: %1$s ende po përdor mikrofonin tuaj. Prekeni që të hapet skeda.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Kujtues: %1$s ende po përdor mikrofonin dhe skedën tuaj. Prekeni që të hapet skeda</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Kujtues: %1$s ende po përdor mikrofonin dhe skedën tuaj. Prekeni që të hapet skeda.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Luaje</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Ndalesë</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Një sajt po luan media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-sr/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-sr/strings.xml new file mode 100644 index 0000000000..e38818ee75 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-sr/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Мултимедија</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Камера је укључена</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Микрофон је укључен</string> + + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Камера и микрофон су укључени</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Репродукуј</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Паузирај</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Страница репродукује мултимедију</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-su/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-su/strings.xml new file mode 100644 index 0000000000..36d6141e58 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-su/strings.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Média</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kaméra hurung</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikropon hurung</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kaméra jeung mikropon hurung</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Toél pikeun muka tab anu maké kaméra anjeun.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Toél pikeun muka tab anu maké mikropon anjeun.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Toél pikeun muka tab anu maké mikropon jeung kaméra anjeun.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Panginget: %1$s maké kénéh kaméra anjeun. Toél pikeun muka tabna.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text">Panginget: %1$s maké kénéh mikropon anjeun. Toél pikeun muka tabna</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text">Panginget: %1$s maké kénéh mikropon jeung kaméra anjeun. Toél pikeun muka tabna</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Ulinkeun</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Reureuh</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Loka nuju maén média</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-sv-rSE/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 0000000000..e629afb3f9 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kameran är på</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofonen är på</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kameran och mikrofonen är på</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tryck för att öppna fliken som använder kameran.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tryck för att öppna fliken som använder mikrofonen.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tryck för att öppna fliken som använder din mikrofon och kamera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Påminnelse: %1$s använder fortfarande din kamera. Tryck här för att öppna fliken.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Påminnelse: %1$s använder fortfarande din mikrofon. Tryck här för att öppna fliken</string> + + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Påminnelse: %1$s använder fortfarande din mikrofon. Tryck här för att öppna fliken.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Påminnelse: %1$s använder fortfarande din mikrofon och kamera. Tryck här för att öppna fliken</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Påminnelse: %1$s använder fortfarande din mikrofon och kamera. Tryck här för att öppna fliken.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Spela</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pausa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">En webbplats spelar media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ta/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ta/strings.xml new file mode 100644 index 0000000000..eeb18cf012 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ta/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">ஊடகம்</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">படக்கருவி செயல்பாட்டில் உள்ளது</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">ஒலிவாங்கி செயல்பாட்டில் உள்ளது</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">படக்கருவி மற்றும் ஒலிவாங்கி பயன்பாட்டில் உள்ளது</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">இயக்கு</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">இடைநிறுத்து</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">தளம் ஊடகத்தை இயக்கிக் கொண்டிருக்கிறது</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-te/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-te/strings.xml new file mode 100644 index 0000000000..caaa153ff5 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-te/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">మాధ్యమాలు</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">కెమెరా నడుస్తోంది</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">మైక్రోఫోను నడుస్తోంది</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">కెమెరా, మైక్రోఫోను నడుస్తున్నాయి</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">ఆడించు</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">నిలుపు</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">ఒక సైటు మాధ్యమాన్ని ఆడిస్తోంది</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-tg/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-tg/strings.xml new file mode 100644 index 0000000000..a725b8155e --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-tg/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Расона</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Камера фаъол аст</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Микрофон фаъол аст</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Камера ва микрофон фаъол мебошанд</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Барои кушодани варақае, ки аз камераи шумо истифода мебарад, дар ин ҷой зер кунед.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Барои кушодани варақае, ки аз микрофони шумо истифода мебарад, дар ин ҷой зер кунед.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Барои кушодани варақае, ки аз микрофон ва камераи шумо истифода мебарад, дар ин ҷой зер кунед.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Ёдоварӣ: %1$s то ҳол аз камераи шумо истифода мебарад. Барои кушодани варақа дар ин ҷой зер кунед.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Ёдоварӣ: %1$s то ҳол аз микрофони шумо истифода мебарад. Барои кушодани варақа дар ин ҷой зер кунед.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Ёдоварӣ: %1$s то ҳол аз микрофони шумо истифода мебарад. Барои кушодани варақа дар ин ҷой зер кунед.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Ёдоварӣ: %1$s то ҳол аз микрофон ва камераи шумо истифода мебарад. Барои кушодани варақа дар ин ҷой зер кунед.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Ёдоварӣ: %1$s то ҳол аз микрофон ва камераи шумо истифода мебарад. Барои кушодани варақа дар ин ҷой зер кунед.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Пахш кардан</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Таваққуф кардан</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Сомона расонаро пахш карда истодааст</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-th/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-th/strings.xml new file mode 100644 index 0000000000..bae10ac0c5 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-th/strings.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">สื่อ</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">กล้องเปิดอยู่</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">ไมโครโฟนเปิดอยู่</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">กล้องและไมโครโฟนเปิดอยู่</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">แตะเพื่อเปิดแท็บที่กำลังใช้กล้องของคุณ</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">แตะเพื่อเปิดแท็บที่กำลังใช้ไมโครโฟนของคุณ</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">แตะเพื่อเปิดแท็บที่กำลังใช้ไมโครโฟนและกล้องของคุณ</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">คำเตือน: %1$s ยังใช้กล้องของคุณอยู่ แตะเพื่อเปิดแท็บ</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">คำเตือน: %1$s ยังใช้ไมโครโฟนของคุณอยู่ แตะเพื่อเปิดแท็บ</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">คำเตือน: %1$s ยังใช้ไมโครโฟนของคุณอยู่ แตะเพื่อเปิดแท็บ</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">คำเตือน: %1$s ยังใช้ไมโครโฟนและกล้องของคุณอยู่ แตะเพื่อเปิดแท็บ</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">คำเตือน: %1$s ยังใช้ไมโครโฟนและกล้องของคุณอยู่ แตะเพื่อเปิดแท็บ</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">เล่น</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">หยุดชั่วคราว</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">ไซต์กำลังเล่นสื่อ</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-tl/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-tl/strings.xml new file mode 100644 index 0000000000..947e1323ac --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-tl/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Nakabukas ang camera</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Nakabukas ang mikropono</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Nakabukas ang camera at mikropono</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Paandarin</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">i-Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">May site na nagpapaandar ng media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-tr/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-tr/strings.xml new file mode 100644 index 0000000000..b4c583a831 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-tr/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Ortam</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera açık</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon açık</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera ve mikrofon açık</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Kameranızı kullanan sekmeyi açmak için dokunun.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Mikrofonunuzu kullanan sekmeyi açmak için dokunun.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Mikrofonunuzu ve kameranızı kullanan sekmeyi açmak için dokunun.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Anımsatma: %1$s hâlâ kameranızı kullanıyor. Sekmeyi açmak için dokunun.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Anımsatma: %1$s hâlâ mikrofonunuzu kullanıyor. Sekmeyi açmak için dokunun.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Anımsatma: %1$s hâlâ mikrofonunuzu kullanıyor. Sekmeyi açmak için dokunun.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Anımsatma: %1$s hâlâ mikrofonunuzu ve kameranızı kullanıyor. Sekmeyi açmak için dokunun.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Anımsatma: %1$s hâlâ mikrofonunuzu ve kameranızı kullanıyor. Sekmeyi açmak için dokunun.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Oynat</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Duraklat</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Bir site medya oynatıyor</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-trs/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-trs/strings.xml new file mode 100644 index 0000000000..8914665e6a --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-trs/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Sa gīni\'io\' gā\'min\'</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Ngà nanûn sa nari ñanj dū\'uô\'</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Nga nanûn aga\' uxun nanèe</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Ngà nanûn sa nari ñanj dū\'uô\' ngà aga\' uxun nanèe</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Dūguachrá</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Dūnikïn\' akuan\'</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Huā \'ngō sitiô nari sa ni\'io\'</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-tt/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-tt/strings.xml new file mode 100644 index 0000000000..607ca4f88f --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-tt/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Медиа</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Камера кабызылган</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Микрофон кабызылган</string> + + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Камера һәм микрофон кабынган</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Уйнату</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Туктату</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Сайтта бер медиа уйный</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-tzm/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-tzm/strings.xml new file mode 100644 index 0000000000..ce30606e0c --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-tzm/strings.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Amidya</string> + + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Yuɣ umikṛu</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Ɣer</string> + + </resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ug/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ug/strings.xml new file mode 100644 index 0000000000..87924ebdc3 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ug/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">ۋاسىتە</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">كامېرا ئېچىلدى</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">مىكروفون ئېچىلدى</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">كامېرا ۋە مىكروفون ئوچۇق</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">چېكىلسە كامېرانى ئىشلىتىۋاتقان بەتكۈچنى ئاچىدۇ.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">چېكىلسە مىكروفوننى ئىشلىتىۋاتقان بەتكۈچنى ئاچىدۇ.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">چېكىلسە مىكروفون ۋە كامېرانى ئىشلىتىۋاتقان بەتكۈچنى ئاچىدۇ.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">ئەسكەرتىش: %1$s كامېرايىڭىزنى ئىشلىتىۋاتىدۇ. چېكىلسە بەتكۈچنى ئاچىدۇ.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">ئەسكەرتىش: %1$s مېكروفونىڭىزنى ئىشلىتىۋاتىدۇ. چېكىلسە بەتكۈچنى ئاچىدۇ</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">ئەسكەرتىش: %1$s مېكروفونىڭىزنى ئىشلىتىۋاتىدۇ. چېكىلسە بەتكۈچنى ئاچىدۇ.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">ئەسكەرتىش: %1$s مېكروفون ۋە كامېرايىڭىزنى ئىشلىتىۋاتىدۇ. چېكىلسە بەتكۈچنى ئاچىدۇ</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">ئەسكەرتىش: %1$s مېكروفون ۋە كامېرايىڭىزنى ئىشلىتىۋاتىدۇ. چېكىلسە بەتكۈچنى ئاچىدۇ.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">باشلاش</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">توختىتىش</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">بېكەت ۋاسىتە قويۇۋاتىدۇ</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-uk/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-uk/strings.xml new file mode 100644 index 0000000000..b2b982a78e --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-uk/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Медіа</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Камера увімкнена</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Мікрофон увімкнений</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Камера та мікрофон увімкнені</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Торкніться, щоб відкрити вкладку, яка використовує вашу камеру.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Торкніться, щоб відкрити вкладку, яка використовує ваш мікрофон.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Торкніться, щоб відкрити вкладку, яка використовує ваші мікрофон і камеру.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Нагадування: %1$s досі використовує вашу камеру. Торкніться, щоб відкрити вкладку.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Нагадування: %1$s досі використовує ваш мікрофон. Торкніться, щоб відкрити вкладку.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Нагадування: %1$s досі використовує ваш мікрофон. Торкніться, щоб відкрити вкладку.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Нагадування: %1$s досі використовує ваші мікрофон і камеру. Торкніться, щоб відкрити вкладку.</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Нагадування: %1$s досі використовує ваші мікрофон і камеру. Торкніться, щоб відкрити вкладку.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Відтворити</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Призупинити</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Сайт відтворює медіа</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-ur/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-ur/strings.xml new file mode 100644 index 0000000000..d0b64b45f6 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-ur/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">میڈیا</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">کیمرہ چالو ہے</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">مائیکروفون چالو ہے</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">کیمرہ اور مائیکروفون چالو ہیں</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">چلائیں</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">توقف کریں</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">کوئی سائٹ میڈیا چلا رہی ہے</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-uz/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-uz/strings.xml new file mode 100644 index 0000000000..75a455e474 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-uz/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Kamera yoniq</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Mikrofon yoniq</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Kamera va mikrofon yoniq</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Boshlash</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pauza</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Saytda media qoʻyilmoqda</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-vec/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-vec/strings.xml new file mode 100644 index 0000000000..2918f0285b --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-vec/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Ƚa machineta fotografica ƚa xe ativa</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">El microfono el xe ativo</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Ƚa teƚecamera e el microfono ƚa xe ativa</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Riproduxi</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Meti en pauxa</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">On sito el xe drio riprodure contenudi multimediaƚi</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-vi/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-vi/strings.xml new file mode 100644 index 0000000000..7fa420995f --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-vi/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Đa phương tiện</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Đã bật máy ảnh</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Đã bật micrô</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Đã bật máy ảnh và micrô</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Nhấn để mở thẻ đang sử dụng máy ảnh của bạn.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Nhấn để mở thẻ đang sử dụng micrô của bạn.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Nhấn để mở thẻ đang sử dụng micrô và máy ảnh của bạn.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Lời nhắc: %1$s vẫn đang sử dụng máy ảnh của bạn. Nhấn để mở thẻ.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Nhắc nhở: %1$s vẫn đang sử dụng micrô của bạn. Nhấn để mở thẻ</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Nhắc nhở: %1$s vẫn đang sử dụng micrô của bạn. Chạm để mở thẻ.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Nhắc nhở: %1$s vẫn đang sử dụng micrô và máy ảnh của bạn. Nhấn để mở thẻ</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Nhăc nhở: %1$s vẫn đang sử dụng micrô và máy ảnh của bạn. Chạm để mở thẻ.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Phát</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Tạm dừng</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Một trang web đang phát phương tiện</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-yo/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-yo/strings.xml new file mode 100644 index 0000000000..addb0ebe59 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-yo/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Ìkànnì</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Ẹ̀rọ̀-ìyàwọ̀rán wà ní títàn</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Ẹ̀rọ̀-ìgbóhùn wà ní títàn</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Ẹ̀rọ-ìyàwọ̀rán àti ẹ̀rọ-ìgbóhùn wà ní títàn</string> + + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Bẹ̀rẹ̀</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Dúró-díẹ̀</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">Sáìtì kán tan ìkànnì</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-zh-rCN/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..954fa795a5 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">媒体</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">摄像头已开</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">麦克风已开</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">摄像头和麦克风已开</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">点按可打开正在使用您相机的标签页。</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">点按可打开正在使用您麦克风的标签页。</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">点按可打开正在使用您麦克风和相机的标签页。</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">提醒:%1$s 仍在使用您的相机。点按可打开相关标签页。</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">提醒:%1$s 仍在使用您的麦克风。点按可打开相关标签页。</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">提醒:%1$s 仍在使用您的麦克风。点按可打开相关标签页。</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">提醒:%1$s 仍在使用您的麦克风和相机。点按可打开相关标签页。</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">提醒:%1$s 仍在使用您的麦克风和相机。点按可打开相关标签页。</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">播放</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">暂停</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">网站正在播放媒体</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-zh-rTW/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000..f2cc374801 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">媒體</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">已開啟攝影機</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">已開啟麥克風</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">已開啟攝影機與麥克風</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">點擊此處即可開啟正在使用您攝影機的分頁。</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">點擊此處即可開啟正在使用您麥克風的分頁。</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">點擊此處即可開啟正在使用您麥克風與攝影機的分頁。</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">提醒:%1$s 正在使用您的攝影機,點擊此處即可開啟該分頁。</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">提醒:%1$s 正在使用您的麥克風,點擊此處即可開啟該分頁。</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">提醒:%1$s 正在使用您的麥克風,點擊此處即可開啟該分頁。</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">提醒:%1$s 正在使用您的麥克風與攝影機,點擊此處即可開啟該分頁。</string> + + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">提醒:%1$s 正在使用您的麥克風與攝影機,點擊此處即可開啟該分頁。</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">播放</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">暫停</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">有網站正在播放媒體內容</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values/strings.xml new file mode 100644 index 0000000000..0e94f2df7a --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/main/res/values/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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/. --> +<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools"> + <!-- Name of the "notification channel" used for displaying media notification. See https://developer.android.com/training/notify-user/channels --> + <string name="mozac_feature_media_notification_channel">Media</string> + + <!-- Title of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera">Camera is on</string> + <!-- Title of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone">Microphone is on</string> + <!-- Title of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone">Camera and microphone are on</string> + + <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_text">Tap to open the tab that’s using your camera.</string> + <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_microphone_text">Tap to open the tab that’s using your microphone.</string> + <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) --> + <string name="mozac_feature_media_sharing_camera_and_microphone_text">Tap to open the tab that’s using your microphone and camera.</string> + + + <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_reminder_text">Reminder: %1$s is still using your camera. Tap to open the tab.</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Reminder: %1$s is still using your microphone. Tap to open the tab</string> + <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Reminder: %1$s is still using your microphone. Tap to open the tab.</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Reminder: %1$s is still using your microphone and camera. Tap to open the tab</string> + <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name--> + <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Reminder: %1$s is still using your microphone and camera. Tap to open the tab.</string> + + <!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_play">Play</string> + + <!--This is the title of the "pause" action shown in the media notification while web content is playing media. Clicking it will pause currently playing media. On most modern Android system only an icon is visible. But screen readers may read this title. --> + <string name="mozac_feature_media_notification_action_pause">Pause</string> + + <!-- Neutral title of the media notification for when a website that is open in private mode. --> + <string name="mozac_feature_media_notification_private_mode">A site is playing media</string> +</resources> diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/MediaSessionFeatureTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/MediaSessionFeatureTest.kt new file mode 100644 index 0000000000..f42ff3b5e6 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/MediaSessionFeatureTest.kt @@ -0,0 +1,358 @@ +/* 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 mozilla.components.feature.media + +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import androidx.test.ext.junit.runners.AndroidJUnit4 +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import mozilla.components.browser.state.action.MediaSessionAction +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.MediaSessionState +import mozilla.components.browser.state.state.createCustomTab +import mozilla.components.browser.state.state.createTab +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.engine.mediasession.MediaSession.PlaybackState +import mozilla.components.feature.media.service.MediaServiceBinder +import mozilla.components.feature.media.service.MediaSessionDelegate +import mozilla.components.feature.media.service.MediaSessionServiceDelegate +import mozilla.components.support.test.any +import mozilla.components.support.test.argumentCaptor +import mozilla.components.support.test.eq +import mozilla.components.support.test.libstate.ext.waitUntilIdle +import mozilla.components.support.test.mock +import mozilla.components.support.test.rule.MainCoroutineRule +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.anyInt +import org.mockito.Mockito.doReturn +import org.mockito.Mockito.verify + +@RunWith(AndroidJUnit4::class) +class MediaSessionFeatureTest { + + @get:Rule + val coroutinesTestRule = MainCoroutineRule() + + @Test + fun `WHEN the feature starts THEN it starts observing the store`() { + val store: BrowserStore = mock() + val feature = MediaSessionFeature( + mock(), + MediaSessionServiceDelegate::class.java, + store, + ) + assertNull(feature.scope) + + feature.start() + + assertNotNull(feature.scope) + } + + @Test + fun `GIVEN a started feature WHEN it is stopped THEN the store is not observed for updates anymore`() { + val feature = MediaSessionFeature( + mock(), + MediaSessionServiceDelegate::class.java, + mock(), + ) + feature.scope = CoroutineScope(Dispatchers.Default) + + feature.stop() + + assertNull(feature.scope) + } + + @Test + fun `WHEN the media service is bound THEN store this and show the current media playing status`() { + val mediaTab = getMediaTab(PlaybackState.PLAYING) + val initialState = BrowserState(tabs = listOf(mediaTab)) + val store = BrowserStore(initialState) + val mediaServiceClass = MediaSessionServiceDelegate::class.java + val feature = MediaSessionFeature( + mock(), + mediaServiceClass, + store, + ) + val mediaService: MediaSessionServiceDelegate = mock() + val binder = MediaServiceBinder(mediaService) + + feature.mediaServiceConnection.onServiceConnected(mock(), binder) + + assertEquals(mediaService, feature.mediaService) + verify(feature.mediaService)!!.handleMediaPlaying(mediaTab) + } + + @Test + fun `GIVEN media service is bound WHEN the service is disconnected THEN cleanup local properties`() { + val mediaService: ComponentName = mock() + val feature = MediaSessionFeature(mock(), mediaService.javaClass, mock()) + feature.mediaService = mock() + + feature.mediaServiceConnection.onServiceDisconnected(mediaService) + + assertNull(feature.mediaService) + } + + @Test + fun `GIVEN feature is started but media service is not WHEN media starts playing THEN bind to the media service and show the playing status`() { + val mockApplicationContext: Context = mock() + val mediaTab = getMediaTab(PlaybackState.PLAYING) + val initialState = BrowserState(tabs = listOf(mediaTab)) + val store = BrowserStore(initialState) + val mediaServiceClass = MediaSessionServiceDelegate::class.java + val feature = MediaSessionFeature( + mockApplicationContext, + mediaServiceClass, + store, + ) + doReturn(true).`when`(mockApplicationContext).bindService( + any<Intent>(), + any(), + anyInt(), + ) + val mediaServiceIntentCaptor = argumentCaptor<Intent>() + + feature.start() + + verify(mockApplicationContext).bindService( + mediaServiceIntentCaptor.capture(), + any(), + eq(Context.BIND_AUTO_CREATE), + ) + assertEquals(mediaServiceClass.name, mediaServiceIntentCaptor.value.component!!.className) + } + + @Test + fun `GIVEN feature and media service are started WHEN media starts playing in a normal tab THEN handle showing the new playing status`() { + val mediaTab = getMediaTab(PlaybackState.PLAYING) + val initialState = BrowserState( + tabs = listOf(mediaTab), + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mock(), + MediaSessionServiceDelegate::class.java, + store, + ) + feature.mediaService = mock() + + feature.start() + + verify(feature.mediaService)!!.handleMediaPlaying(mediaTab) + } + + @Test + fun `GIVEN feature and media service are started WHEN media starts playing in a custom tab THEN handle showing the new playing status`() { + val mediaTab = getCustomTabWithMedia(PlaybackState.PLAYING) + val initialState = BrowserState( + customTabs = listOf(mediaTab), + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mock(), + MediaSessionServiceDelegate::class.java, + store, + ) + feature.mediaService = mock() + + feature.start() + + verify(feature.mediaService)!!.handleMediaPlaying(mediaTab) + } + + @Test + fun `GIVEN feature and media service are started WHEN media is paused in a normal tab THEN handle showing the new playing status`() { + val mediaTab = getMediaTab(PlaybackState.PAUSED) + val initialState = BrowserState( + tabs = listOf(mediaTab), + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mock(), + MediaSessionServiceDelegate::class.java, + store, + ) + feature.mediaService = mock() + + feature.start() + + verify(feature.mediaService)!!.handleMediaPaused(mediaTab) + } + + @Test + fun `GIVEN feature and media service are started WHEN media is paused in a custom tab THEN handle showing the new playing status`() { + val mediaTab = getCustomTabWithMedia(PlaybackState.PAUSED) + val initialState = BrowserState( + customTabs = listOf(mediaTab), + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mock(), + MediaSessionServiceDelegate::class.java, + store, + ) + feature.mediaService = mock() + + feature.start() + + verify(feature.mediaService)!!.handleMediaPaused(mediaTab) + } + + @Test + fun `GIVEN feature and media service are started WHEN media is stopped in a normal tab THEN handle showing the new playing status`() { + val mediaTab = getMediaTab(PlaybackState.STOPPED) + val initialState = BrowserState( + tabs = listOf(mediaTab), + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mock(), + MediaSessionServiceDelegate::class.java, + store, + ) + feature.mediaService = mock() + + feature.start() + + verify(feature.mediaService)!!.handleMediaStopped(mediaTab) + } + + @Test + fun `GIVEN feature and media service are started WHEN media is stopped in a custom tab THEN handle showing the new playing status`() { + val mediaTab = getCustomTabWithMedia(PlaybackState.STOPPED) + val initialState = BrowserState( + customTabs = listOf(mediaTab), + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mock(), + MediaSessionServiceDelegate::class.java, + store, + ) + feature.mediaService = mock() + + feature.start() + + verify(feature.mediaService)!!.handleMediaStopped(mediaTab) + } + + @Test + fun `GIVEN feature and media service are started WHEN the media status is unknown THEN disconnect the media service and cleanup`() { + val mockApplicationContext: Context = mock() + val mediaTab = getMediaTab(PlaybackState.UNKNOWN) + val initialState = BrowserState( + tabs = listOf(mediaTab), + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mockApplicationContext, + MediaSessionServiceDelegate::class.java, + store, + ) + val mediaService: MediaSessionDelegate = mock() + feature.mediaService = mediaService + + feature.start() + + verify(mediaService).handleNoMedia() + verify(mockApplicationContext).unbindService(feature.mediaServiceConnection) + assertNull(feature.mediaService) + } + + @Test + fun `GIVEN feature and media service are started WHEN there is no media tab THEN stop the media service and cleanup`() { + val mockApplicationContext: Context = mock() + val initialState = BrowserState() + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mockApplicationContext, + MediaSessionServiceDelegate::class.java, + store, + ) + val mediaService: MediaSessionDelegate = mock() + feature.mediaService = mediaService + + feature.start() + + verify(mediaService).handleNoMedia() + verify(mockApplicationContext).unbindService(feature.mediaServiceConnection) + assertNull(feature.mediaService) + } + + @Test + fun `GIVEN a normal tab is playing media WHEN media is deactivated THEN stop the media service and cleanup`() { + val mockApplicationContext: Context = mock() + val mediaTab = getMediaTab(PlaybackState.PLAYING) + val initialState = BrowserState( + tabs = listOf(mediaTab), + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mockApplicationContext, + MediaSessionServiceDelegate::class.java, + store, + ) + val mediaService: MediaSessionDelegate = mock() + feature.mediaService = mediaService + feature.start() + + store.dispatch(MediaSessionAction.DeactivatedMediaSessionAction(store.state.tabs[0].id)) + store.waitUntilIdle() + + verify(mediaService).handleNoMedia() + verify(mockApplicationContext).unbindService(feature.mediaServiceConnection) + assertNull(feature.mediaService) + } + + @Test + fun `GIVEN a custom tab is playing media WHEN media is deactivated THEN stop the media service and cleanup`() { + val mockApplicationContext: Context = mock() + val mediaTab = getMediaTab(PlaybackState.UNKNOWN) + val customTabWithMedia = getCustomTabWithMedia(PlaybackState.PLAYING) + val initialState = BrowserState( + tabs = listOf(mediaTab), + customTabs = listOf(customTabWithMedia), + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFeature( + mockApplicationContext, + MediaSessionServiceDelegate::class.java, + store, + ) + val mediaService: MediaSessionDelegate = mock() + feature.mediaService = mediaService + feature.start() + + store.dispatch(MediaSessionAction.DeactivatedMediaSessionAction(store.state.customTabs[0].id)) + store.waitUntilIdle() + + verify(mediaService).handleNoMedia() + verify(mockApplicationContext).unbindService(feature.mediaServiceConnection) + assertNull(feature.mediaService) + } + + private fun getMediaTab(playbackState: PlaybackState = PlaybackState.PLAYING) = createTab( + "https://www.mozilla.org", + mediaSessionState = MediaSessionState( + mock(), + playbackState = playbackState, + ), + ) + + private fun getCustomTabWithMedia(playbackState: PlaybackState = PlaybackState.PLAYING) = createCustomTab( + "https://www.mozilla.org", + mediaSessionState = MediaSessionState( + mock(), + playbackState = playbackState, + ), + ) +} diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/ext/SessionStateKtTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/ext/SessionStateKtTest.kt new file mode 100644 index 0000000000..34ecf97c0b --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/ext/SessionStateKtTest.kt @@ -0,0 +1,188 @@ +/* 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 mozilla.components.feature.media.ext + +import android.graphics.Bitmap +import androidx.test.ext.junit.runners.AndroidJUnit4 +import kotlinx.coroutines.test.runTest +import mozilla.components.browser.state.state.ContentState +import mozilla.components.browser.state.state.SessionState +import mozilla.components.support.test.mock +import mozilla.components.support.test.robolectric.testContext +import mozilla.components.support.test.whenever +import org.junit.Assert.assertEquals +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class SessionStateKtTest { + private val bitmap: Bitmap = mock() + private val getArtwork: (suspend () -> Bitmap?) = { bitmap } + private val getArtworkNull: (suspend () -> Bitmap?) = { null } + + @Test + fun `getNonPrivateIcon returns null when in private mode`() = runTest { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(true) + + val result = sessionState.getNonPrivateIcon(getArtwork) + + assertEquals(result, null) + } + + @Test + fun `getNonPrivateIcon returns bitmap when not in private mode`() = runTest { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(false) + + val result = sessionState.getNonPrivateIcon(getArtwork) + + assertEquals(result, bitmap) + } + + @Test + fun `getNonPrivateIcon returns content icon when not in private mode`() = runTest { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + val icon: Bitmap = mock() + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(false) + whenever(contentState.icon).thenReturn(icon) + + val result = sessionState.getNonPrivateIcon(null) + + assertEquals(result, icon) + } + + @Test + fun `getNonPrivateIcon returns content icon when getArtwork return null`() = runTest { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + val icon: Bitmap = mock() + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(false) + whenever(contentState.icon).thenReturn(icon) + + val result = sessionState.getNonPrivateIcon(getArtworkNull) + + assertEquals(result, icon) + } + + @Test + fun `getTitleOrUrl returns null when in private mode`() { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(true) + + val result = sessionState.getTitleOrUrl(testContext, "test") + + assertEquals(result, "A site is playing media") + } + + @Test + fun `getTitleOrUrl returns metadata title when not in private mode`() { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(false) + + val result = sessionState.getTitleOrUrl(testContext, "test") + + assertEquals(result, "test") + } + + @Test + fun `getTitleOrUrl returns title when not in private mode`() { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + val contentTitle = "content title" + val contentUrl = "content url" + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(false) + whenever(contentState.title).thenReturn(contentTitle) + whenever(contentState.url).thenReturn(contentUrl) + + val result = sessionState.getTitleOrUrl(testContext, null) + + assertEquals(result, contentTitle) + } + + @Test + fun `getTitleOrUrl returns url when not in private mode`() { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + val contentTitle = "" + val contentUrl = "content url" + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(false) + whenever(contentState.title).thenReturn(contentTitle) + whenever(contentState.url).thenReturn(contentUrl) + + val result = sessionState.getTitleOrUrl(testContext, null) + + assertEquals(result, contentUrl) + } + + @Test + fun `getArtistOrUrl returns artist when not in private mode`() { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + val artist = "test artist" + val contentUrl = "content url" + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(false) + whenever(contentState.url).thenReturn(contentUrl) + + val result = sessionState.getArtistOrUrl(artist) + + assertEquals(result, artist) + } + + @Test + fun `getArtistOrUrl returns null when in private mode`() { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + val artist = "test artist" + val contentUrl = "content url" + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(true) + whenever(contentState.url).thenReturn(contentUrl) + + val result = sessionState.getArtistOrUrl(artist) + + assertEquals(result, "") + } + + @Test + fun `getArtistOrUrl returns url when not in private mode and no artist`() { + val sessionState: SessionState = mock() + val contentState: ContentState = mock() + val artist = null + val contentUrl = "content url" + + whenever(sessionState.content).thenReturn(contentState) + whenever(contentState.private).thenReturn(false) + whenever(contentState.url).thenReturn(contentUrl) + + val result = sessionState.getArtistOrUrl(artist) + + assertEquals(result, contentUrl) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/focus/AudioFocusTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/focus/AudioFocusTest.kt new file mode 100644 index 0000000000..c206d99520 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/focus/AudioFocusTest.kt @@ -0,0 +1,363 @@ +/* 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 mozilla.components.feature.media.focus + +import android.media.AudioManager +import androidx.test.ext.junit.runners.AndroidJUnit4 +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.MediaSessionState +import mozilla.components.browser.state.state.createTab +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.base.crash.CrashReporting +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.feature.media.service.AbstractMediaSessionService +import mozilla.components.feature.media.service.MediaSessionServiceDelegate +import mozilla.components.support.base.android.NotificationsDelegate +import mozilla.components.support.test.any +import mozilla.components.support.test.mock +import mozilla.components.support.test.robolectric.testContext +import mozilla.components.support.test.rule.MainCoroutineRule +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.doReturn +import org.mockito.Mockito.never +import org.mockito.Mockito.verify +import org.mockito.Mockito.verifyNoMoreInteractions + +@RunWith(AndroidJUnit4::class) +class AudioFocusTest { + private lateinit var audioManager: AudioManager + + @get:Rule + val coroutinesTestRule = MainCoroutineRule() + + @Before + fun setUp() { + audioManager = mock() + } + + @Test + fun `Successful request will not change media session in state`() { + doReturn(AudioManager.AUDIOFOCUS_REQUEST_GRANTED) + .`when`(audioManager).requestAudioFocus(any()) + + val controller: MediaSession.Controller = mock() + val mediaSessionState = MediaSessionState( + controller, + playbackState = MediaSession.PlaybackState.PLAYING, + ) + val tabSession = createTab( + "https://www.mozilla.org", + mediaSessionState = mediaSessionState, + ) + val initialState = BrowserState( + tabs = listOf(tabSession), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, notificationsDelegate) + + delegate.onCreate() + + val audioFocus = AudioFocus(audioManager, store) + audioFocus.request(tabSession.id) + + verify(audioManager).requestAudioFocus(any()) + verifyNoMoreInteractions(mediaSessionState.controller) + } + + @Test + fun `Failed request will pause media session`() { + doReturn(AudioManager.AUDIOFOCUS_REQUEST_FAILED) + .`when`(audioManager).requestAudioFocus(any()) + + val controller: MediaSession.Controller = mock() + val mediaSessionState = MediaSessionState( + controller, + playbackState = MediaSession.PlaybackState.PLAYING, + ) + val tabSession = createTab( + "https://www.mozilla.org", + mediaSessionState = mediaSessionState, + ) + val initialState = BrowserState( + tabs = listOf(tabSession), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, notificationsDelegate) + + delegate.onCreate() + + val audioFocus = AudioFocus(audioManager, store) + audioFocus.request(tabSession.id) + + verify(audioManager).requestAudioFocus(any()) + verify(mediaSessionState.controller).pause() + } + + @Test + fun `Delayed request will pause media`() { + doReturn(AudioManager.AUDIOFOCUS_REQUEST_DELAYED) + .`when`(audioManager).requestAudioFocus(any()) + + val controller: MediaSession.Controller = mock() + val mediaSessionState = MediaSessionState( + controller, + playbackState = MediaSession.PlaybackState.PLAYING, + ) + val tabSession = createTab( + "https://www.mozilla.org", + mediaSessionState = mediaSessionState, + ) + val initialState = BrowserState( + tabs = listOf(tabSession), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, notificationsDelegate) + + delegate.onCreate() + + val audioFocus = AudioFocus(audioManager, store) + audioFocus.request(tabSession.id) + + verify(audioManager).requestAudioFocus(any()) + verify(mediaSessionState.controller).pause() + } + + @Test + fun `Will pause and resume playing media on and after transient focus loss`() { + doReturn(AudioManager.AUDIOFOCUS_REQUEST_GRANTED) + .`when`(audioManager).requestAudioFocus(any()) + + val controller: MediaSession.Controller = mock() + val mediaSessionState = MediaSessionState( + controller, + playbackState = MediaSession.PlaybackState.PLAYING, + ) + val tabSession = createTab( + "https://www.mozilla.org", + mediaSessionState = mediaSessionState, + ) + val initialState = BrowserState( + tabs = listOf(tabSession), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, notificationsDelegate) + + delegate.onCreate() + + val audioFocus = AudioFocus(audioManager, store) + audioFocus.request(tabSession.id) + + verify(audioManager).requestAudioFocus(any()) + verifyNoMoreInteractions(mediaSessionState.controller) + + audioFocus.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) + + verify(mediaSessionState.controller).pause() + verifyNoMoreInteractions(mediaSessionState.controller) + + audioFocus.onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN) + + verify(mediaSessionState.controller).play() + verifyNoMoreInteractions(mediaSessionState.controller) + } + + @Test + fun `Will not resume paused media after transient focus loss`() { + doReturn(AudioManager.AUDIOFOCUS_REQUEST_GRANTED) + .`when`(audioManager).requestAudioFocus(any()) + + val controller: MediaSession.Controller = mock() + val mediaSessionState = MediaSessionState( + controller, + playbackState = MediaSession.PlaybackState.PAUSED, + ) + val tabSession = createTab( + "https://www.mozilla.org", + mediaSessionState = mediaSessionState, + ) + val initialState = BrowserState( + tabs = listOf(tabSession), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, notificationsDelegate) + + delegate.onCreate() + + val audioFocus = AudioFocus(audioManager, store) + audioFocus.request(tabSession.id) + + verify(audioManager).requestAudioFocus(any()) + verifyNoMoreInteractions(mediaSessionState.controller) + + audioFocus.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) + + verify(mediaSessionState.controller).pause() + verifyNoMoreInteractions(mediaSessionState.controller) + + audioFocus.onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN) + + verify(mediaSessionState.controller, never()).play() + verifyNoMoreInteractions(mediaSessionState.controller) + } + + @Test + fun `Will resume media sessio nplayback when gaining focus after being delayed`() { + doReturn(AudioManager.AUDIOFOCUS_REQUEST_DELAYED) + .`when`(audioManager).requestAudioFocus(any()) + + val controller: MediaSession.Controller = mock() + val mediaSessionState = MediaSessionState( + controller, + playbackState = MediaSession.PlaybackState.PLAYING, + ) + val tabSession = createTab( + "https://www.mozilla.org", + mediaSessionState = mediaSessionState, + ) + val initialState = BrowserState( + tabs = listOf(tabSession), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, notificationsDelegate) + + delegate.onCreate() + + val audioFocus = AudioFocus(audioManager, store) + audioFocus.request(tabSession.id) + + verify(audioManager).requestAudioFocus(any()) + verify(mediaSessionState.controller).pause() + + audioFocus.onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN) + + verify(mediaSessionState.controller).play() + verifyNoMoreInteractions(mediaSessionState.controller) + } + + @Test(expected = IllegalStateException::class) + fun `An unknown audio focus response will throw an exception`() { + doReturn(-1).`when`(audioManager).requestAudioFocus(any()) + + val controller: MediaSession.Controller = mock() + val mediaSessionState = MediaSessionState( + controller, + playbackState = MediaSession.PlaybackState.PLAYING, + ) + val tabSession = createTab( + "https://www.mozilla.org", + mediaSessionState = mediaSessionState, + ) + val initialState = BrowserState( + tabs = listOf(tabSession), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, notificationsDelegate) + + delegate.onCreate() + + val audioFocus = AudioFocus(audioManager, store) + audioFocus.request(tabSession.id) + } + + @Test + fun `An unknown focus change event will be ignored`() { + doReturn(AudioManager.AUDIOFOCUS_REQUEST_GRANTED) + .`when`(audioManager).requestAudioFocus(any()) + + val controller: MediaSession.Controller = mock() + val mediaSessionState = MediaSessionState( + controller, + playbackState = MediaSession.PlaybackState.PLAYING, + ) + val tabSession = createTab( + "https://www.mozilla.org", + mediaSessionState = mediaSessionState, + ) + val initialState = BrowserState( + tabs = listOf(tabSession), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, notificationsDelegate) + + delegate.onCreate() + + val audioFocus = AudioFocus(audioManager, store) + audioFocus.request(tabSession.id) + + verify(audioManager).requestAudioFocus(any()) + verifyNoMoreInteractions(mediaSessionState.controller) + + audioFocus.onAudioFocusChange(999) + verifyNoMoreInteractions(mediaSessionState.controller) + } + + @Test + fun `An audio focus loss will pause media and regain will not resume automatically`() { + doReturn(AudioManager.AUDIOFOCUS_REQUEST_GRANTED) + .`when`(audioManager).requestAudioFocus(any()) + + val controller: MediaSession.Controller = mock() + val mediaSessionState = MediaSessionState( + controller, + playbackState = MediaSession.PlaybackState.PLAYING, + ) + val tabSession = createTab( + "https://www.mozilla.org", + mediaSessionState = mediaSessionState, + ) + val initialState = BrowserState( + tabs = listOf(tabSession), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, notificationsDelegate) + + delegate.onCreate() + + val audioFocus = AudioFocus(audioManager, store) + audioFocus.request(tabSession.id) + + verify(audioManager).requestAudioFocus(any()) + verifyNoMoreInteractions(mediaSessionState.controller) + + audioFocus.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS) + + verify(mediaSessionState.controller).pause() + verifyNoMoreInteractions(mediaSessionState.controller) + + audioFocus.onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN) + verify(mediaSessionState.controller, never()).play() + verifyNoMoreInteractions(mediaSessionState.controller) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/fullscreen/MediaSessionFullscreenFeatureTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/fullscreen/MediaSessionFullscreenFeatureTest.kt new file mode 100644 index 0000000000..b6f055af7d --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/fullscreen/MediaSessionFullscreenFeatureTest.kt @@ -0,0 +1,479 @@ +/* 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 mozilla.components.feature.media.fullscreen + +import android.app.Activity +import android.content.pm.ActivityInfo +import android.os.Build +import android.view.Window +import android.view.WindowManager +import androidx.test.ext.junit.runners.AndroidJUnit4 +import mozilla.components.browser.state.action.ContentAction +import mozilla.components.browser.state.action.CustomTabListAction +import mozilla.components.browser.state.action.MediaSessionAction +import mozilla.components.browser.state.action.TabListAction +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.MediaSessionState +import mozilla.components.browser.state.state.SessionState +import mozilla.components.browser.state.state.createCustomTab +import mozilla.components.browser.state.state.createTab +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.support.test.ext.joinBlocking +import mozilla.components.support.test.libstate.ext.waitUntilIdle +import mozilla.components.support.test.mock +import mozilla.components.support.test.rule.MainCoroutineRule +import mozilla.components.support.test.whenever +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.clearInvocations +import org.mockito.Mockito.never +import org.mockito.Mockito.verify +import org.robolectric.Robolectric +import org.robolectric.annotation.Config + +@RunWith(AndroidJUnit4::class) +class MediaSessionFullscreenFeatureTest { + + @get:Rule + val coroutinesTestRule = MainCoroutineRule() + + @Test + fun `GIVEN the currently selected tab is not in fullscreen WHEN the feature is running THEN orientation is set to default`() { + val activity: Activity = mock() + val elementMetadata = MediaSession.ElementMetadata() + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = false, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + + feature.start() + + verify(activity).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER) + } + + @Test + fun `GIVEN the currently selected tab plays portrait media WHEN the feature is running THEN orientation is set to portrait`() { + val activity: Activity = mock() + val window: Window = mock() + whenever(activity.window).thenReturn(window) + + val elementMetadata = MediaSession.ElementMetadata(width = 360, height = 640) + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = true, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + + feature.start() + + verify(activity).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT) + } + + @Test + fun `GIVEN the currently selected tab plays landscape media WHEN it enters fullscreen THEN set orientation to landscape`() { + val activity: Activity = mock() + val window: Window = mock() + whenever(activity.window).thenReturn(window) + + val elementMetadata = MediaSession.ElementMetadata(width = 640, height = 360) + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = true, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + + feature.start() + + verify(activity).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE) + } + + @Suppress("Deprecation") + @Test + @Config(sdk = [Build.VERSION_CODES.N]) + fun `GIVEN the currently selected tab plays landscape media WHEN it enters pip mode THEN set orientation to unspecified`() { + val activity = Robolectric.buildActivity(Activity::class.java).setup().get() + val elementMetadata = MediaSession.ElementMetadata() + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = true, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + + feature.start() + activity.enterPictureInPictureMode() + store.waitUntilIdle() + + assertTrue(activity.isInPictureInPictureMode) + store.dispatch(ContentAction.PictureInPictureChangedAction("tab1", true)) + store.waitUntilIdle() + + assertEquals(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, activity.requestedOrientation) + } + + @Suppress("Deprecation") + @Test + @Config(sdk = [Build.VERSION_CODES.N]) + fun `GIVEN the currently selected tab is in pip mode WHEN an external intent arrives THEN set orientation to default`() { + val activity = Robolectric.buildActivity(Activity::class.java).setup().get() + val elementMetadata = MediaSession.ElementMetadata() + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = true, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + + feature.start() + activity.enterPictureInPictureMode() + store.waitUntilIdle() + store.dispatch(ContentAction.PictureInPictureChangedAction("tab1", true)) + store.waitUntilIdle() + assertEquals(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, activity.requestedOrientation) + + val tab2 = createTab( + url = "https://firefox.com", + id = "tab2", + ) + store.dispatch(TabListAction.AddTabAction(tab2, select = true)) + store.dispatch( + MediaSessionAction.UpdateMediaFullscreenAction( + store.state.tabs[0].id, + false, + MediaSession.ElementMetadata(), + ), + ) + store.waitUntilIdle() + assertEquals(ActivityInfo.SCREEN_ORIENTATION_USER, activity.requestedOrientation) + assertEquals(tab2.id, store.state.selectedTabId) + } + + @Suppress("Deprecation") + @Test + @Config(sdk = [Build.VERSION_CODES.N]) + fun `GIVEN the currently selected tab is in pip mode WHEN it exits pip mode THEN set orientation to default`() { + val activity = Robolectric.buildActivity(Activity::class.java).setup().get() + val elementMetadata = MediaSession.ElementMetadata() + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = true, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + + feature.start() + activity.enterPictureInPictureMode() + store.waitUntilIdle() + + assertTrue(activity.isInPictureInPictureMode) + store.dispatch(ContentAction.PictureInPictureChangedAction("tab1", true)) + store.waitUntilIdle() + + assertEquals(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, activity.requestedOrientation) + + store.dispatch( + MediaSessionAction.UpdateMediaFullscreenAction( + store.state.tabs[0].id, + false, + MediaSession.ElementMetadata(), + ), + ) + store.waitUntilIdle() + + assertEquals(ActivityInfo.SCREEN_ORIENTATION_USER, activity.requestedOrientation) + } + + @Suppress("Deprecation") + @Test + @Config(sdk = [Build.VERSION_CODES.N]) + fun `GIVEN the currently selected tab is in pip mode WHEN a custom tab loads THEN display custom tab in device's current orientation`() { + val activity = Robolectric.buildActivity(Activity::class.java).setup().get() + val elementMetadata = MediaSession.ElementMetadata() + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = true, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + + feature.start() + activity.enterPictureInPictureMode() + store.waitUntilIdle() + + store.dispatch(ContentAction.PictureInPictureChangedAction("tab1", true)) + store.waitUntilIdle() + assertEquals(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, activity.requestedOrientation) + + val customTab = createCustomTab( + "https://www.mozilla.org", + source = SessionState.Source.Internal.CustomTab, + id = "tab2", + ) + store.dispatch(CustomTabListAction.AddCustomTabAction(customTab)).joinBlocking() + val externalActivity = Robolectric.buildActivity(Activity::class.java).setup().get() + assertEquals(1, store.state.customTabs.size) + store.waitUntilIdle() + val featureForExternalAppBrowser = MediaSessionFullscreenFeature( + externalActivity, + store, + "tab2", + ) + featureForExternalAppBrowser.start() + + assertNotEquals(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, externalActivity.requestedOrientation) + } + + @Test + fun `GIVEN the selected tab in fullscreen mode WHEN the media is paused or stopped THEN release the wake lock of the device`() { + val activity: Activity = mock() + val window: Window = mock() + + whenever(activity.window).thenReturn(window) + + val elementMetadata = MediaSession.ElementMetadata() + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = true, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + feature.start() + verify(activity.window).addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + + store.dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction("tab1", MediaSession.PlaybackState.PAUSED)) + store.waitUntilIdle() + verify(activity.window).clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + + clearInvocations(activity.window) + + store.dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction("tab1", MediaSession.PlaybackState.PLAYING)) + store.waitUntilIdle() + verify(activity.window).addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + + store.dispatch(MediaSessionAction.DeactivatedMediaSessionAction("tab1")) + store.waitUntilIdle() + verify(activity.window).clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + + @Test + fun `GIVEN the selected tab is not in fullscreen mode WHEN it enters fullscreen THEN lock the wake lock of the device`() { + val activity: Activity = mock() + val window: Window = mock() + + whenever(activity.window).thenReturn(window) + + val elementMetadata = MediaSession.ElementMetadata() + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = false, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + feature.start() + verify(activity.window, never()).addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + + store.dispatch(MediaSessionAction.UpdateMediaFullscreenAction("tab1", true, elementMetadata)) + store.waitUntilIdle() + verify(activity.window).addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + + clearInvocations(activity.window) + + store.dispatch(MediaSessionAction.UpdateMediaFullscreenAction("tab1", false, elementMetadata)) + store.waitUntilIdle() + verify(activity.window).clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + + @Test + fun `GIVEN the selected tab in fullscreen mode WHEN the active tab is changed to no media tab THEN release the wake lock of the device`() { + val activity: Activity = mock() + val window: Window = mock() + + whenever(activity.window).thenReturn(window) + + val elementMetadata = MediaSession.ElementMetadata() + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "tab1", + mediaSessionState = MediaSessionState( + mock(), + elementMetadata = elementMetadata, + playbackState = MediaSession.PlaybackState.PLAYING, + fullscreen = true, + ), + ), + ), + selectedTabId = "tab1", + ) + val store = BrowserStore(initialState) + + val feature = MediaSessionFullscreenFeature( + activity, + store, + null, + ) + feature.start() + verify(activity.window).addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + + val tab2 = createTab( + url = "https://firefox.com", + id = "tab2", + ) + clearInvocations(activity.window) + store.dispatch(TabListAction.AddTabAction(tab2, select = true)) + store.dispatch(MediaSessionAction.UpdateMediaFullscreenAction(store.state.tabs[0].id, false, elementMetadata)) + store.waitUntilIdle() + verify(activity.window).clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + assertEquals(tab2.id, store.state.selectedTabId) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/middleware/LastMediaAccessMiddlewareTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/middleware/LastMediaAccessMiddlewareTest.kt new file mode 100644 index 0000000000..347ad5a6db --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/middleware/LastMediaAccessMiddlewareTest.kt @@ -0,0 +1,287 @@ +/* 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 mozilla.components.feature.media.middleware + +import mozilla.components.browser.state.action.MediaSessionAction +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.ContentState +import mozilla.components.browser.state.state.LastMediaAccessState +import mozilla.components.browser.state.state.TabSessionState +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.support.test.ext.joinBlocking +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +class LastMediaAccessMiddlewareTest { + + @Test + fun `GIVEN a normal tab WHEN media started playing THEN then lastMediaAccess is updated`() { + val mediaTabId = "42" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState(content = ContentState("https://mozilla.org/1", private = true)), + TabSessionState( + content = ContentState(mediaTabUrl, private = false), + id = mediaTabId, + ), + TabSessionState(content = ContentState("https://mozilla.org/3", private = false)), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction(mediaTabId, MediaSession.PlaybackState.PLAYING)) + .joinBlocking() + + val updatedMediaState = store.state.tabs[1].lastMediaAccessState + assertTrue( + "expected lastMediaAccess (${updatedMediaState.lastMediaAccess}) > 0", + updatedMediaState.lastMediaAccess > 0, + ) + assertEquals(mediaTabUrl, updatedMediaState.lastMediaUrl) + } + + @Test + fun `GIVEN a private tab WHEN media started playing THEN then lastMediaAccess is updated`() { + val mediaTabId = "43" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState(content = ContentState("https://mozilla.org/1", private = true)), + TabSessionState( + content = ContentState(mediaTabUrl, private = true), + id = mediaTabId, + ), + TabSessionState(content = ContentState("https://mozilla.org/3", private = false)), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction(mediaTabId, MediaSession.PlaybackState.PLAYING)) + .joinBlocking() + + val updatedMediaState = store.state.tabs[1].lastMediaAccessState + assertTrue( + "expected lastMediaAccess (${updatedMediaState.lastMediaAccess}) > 0", + updatedMediaState.lastMediaAccess > 0, + ) + assertEquals(mediaTabUrl, updatedMediaState.lastMediaUrl) + } + + @Test + fun `GIVEN a normal tab WHEN media is paused THEN then lastMediaAccess is not changed`() { + val mediaTabId = "42" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState( + content = ContentState(mediaTabUrl, private = false), + id = mediaTabId, + lastMediaAccessState = LastMediaAccessState(mediaTabUrl, 222), + ), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction(mediaTabId, MediaSession.PlaybackState.PAUSED)) + .joinBlocking() + + assertEquals(222, store.state.tabs[0].lastMediaAccessState.lastMediaAccess) + } + + @Test + fun `GIVEN a private tab WHEN media is paused THEN then lastMediaAccess is not changed`() { + val mediaTabId = "43" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState( + content = ContentState(mediaTabUrl, private = true), + id = mediaTabId, + lastMediaAccessState = LastMediaAccessState(mediaTabUrl, 333), + ), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction(mediaTabId, MediaSession.PlaybackState.PAUSED)) + .joinBlocking() + + assertEquals(333, store.state.tabs[0].lastMediaAccessState.lastMediaAccess) + } + + @Test + fun `GIVEN a normal tab WHEN media is stopped THEN then lastMediaAccess is not changed`() { + val mediaTabId = "42" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState( + content = ContentState(mediaTabUrl, private = false), + id = mediaTabId, + lastMediaAccessState = LastMediaAccessState(mediaTabUrl, 222), + ), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction(mediaTabId, MediaSession.PlaybackState.STOPPED)) + .joinBlocking() + + assertEquals(222, store.state.tabs[0].lastMediaAccessState.lastMediaAccess) + } + + @Test + fun `GIVEN a private tab WHEN media is stopped THEN then lastMediaAccess is not changed`() { + val mediaTabId = "43" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState( + content = ContentState(mediaTabUrl, private = true), + id = mediaTabId, + lastMediaAccessState = LastMediaAccessState(mediaTabUrl, 333), + ), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction(mediaTabId, MediaSession.PlaybackState.STOPPED)) + .joinBlocking() + + assertEquals(333, store.state.tabs[0].lastMediaAccessState.lastMediaAccess) + } + + @Test + fun `GIVEN a normal tab WHEN media status is unknown THEN then lastMediaAccess is not changed`() { + val mediaTabId = "42" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState( + content = ContentState(mediaTabUrl, private = false), + id = mediaTabId, + lastMediaAccessState = LastMediaAccessState(mediaTabUrl, 222), + ), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction(mediaTabId, MediaSession.PlaybackState.UNKNOWN)) + .joinBlocking() + + assertEquals(222, store.state.tabs[0].lastMediaAccessState.lastMediaAccess) + } + + @Test + fun `GIVEN a private tab WHEN media status is unknown THEN then lastMediaAccess is not changed`() { + val mediaTabId = "43" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState( + content = ContentState(mediaTabUrl, private = true), + id = mediaTabId, + lastMediaAccessState = LastMediaAccessState(mediaTabUrl, 333), + ), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.UpdateMediaPlaybackStateAction(mediaTabId, MediaSession.PlaybackState.UNKNOWN)) + .joinBlocking() + + assertEquals(333, store.state.tabs[0].lastMediaAccessState.lastMediaAccess) + } + + @Test + fun `GIVEN lastMediaAccess is set for a normal tab WHEN media session is deactivated THEN reset mediaSessionActive to false`() { + val mediaTabId = "42" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState( + content = ContentState(mediaTabUrl, private = false), + id = mediaTabId, + lastMediaAccessState = LastMediaAccessState(mediaTabUrl, 222, true), + ), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.DeactivatedMediaSessionAction(mediaTabId)) + .joinBlocking() + + assertEquals(mediaTabUrl, store.state.tabs[0].lastMediaAccessState.lastMediaUrl) + assertEquals(222, store.state.tabs[0].lastMediaAccessState.lastMediaAccess) + assertFalse(store.state.tabs[0].lastMediaAccessState.mediaSessionActive) + } + + @Test + fun `GIVEN lastMediaAccess is set for a private tab WHEN media session is deactivated THEN reset lastMediaAccess to 0`() { + val mediaTabId = "43" + val mediaTabUrl = "https://mozilla.org/2" + val browserState = BrowserState( + tabs = listOf( + TabSessionState( + content = ContentState(mediaTabUrl, private = true), + id = mediaTabId, + lastMediaAccessState = LastMediaAccessState(mediaTabUrl, 333, true), + ), + ), + ) + val store = BrowserStore( + initialState = browserState, + middleware = listOf(LastMediaAccessMiddleware()), + ) + + store + .dispatch(MediaSessionAction.DeactivatedMediaSessionAction(mediaTabId)) + .joinBlocking() + + assertEquals(mediaTabUrl, store.state.tabs[0].lastMediaAccessState.lastMediaUrl) + assertEquals(333, store.state.tabs[0].lastMediaAccessState.lastMediaAccess) + assertFalse(store.state.tabs[0].lastMediaAccessState.mediaSessionActive) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/middleware/RecordingDevicesMiddlewareTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/middleware/RecordingDevicesMiddlewareTest.kt new file mode 100644 index 0000000000..36916a49b3 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/middleware/RecordingDevicesMiddlewareTest.kt @@ -0,0 +1,138 @@ +/* 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 mozilla.components.feature.media.middleware + +import android.app.NotificationManager +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import androidx.core.app.NotificationManagerCompat +import androidx.test.ext.junit.runners.AndroidJUnit4 +import mozilla.components.browser.state.action.ContentAction +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.createTab +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.engine.media.RecordingDevice +import mozilla.components.support.base.android.NotificationsDelegate +import mozilla.components.support.test.ext.joinBlocking +import mozilla.components.support.test.libstate.ext.waitUntilIdle +import mozilla.components.support.test.robolectric.testContext +import mozilla.components.support.test.whenever +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito +import org.robolectric.Shadows + +@RunWith(AndroidJUnit4::class) +class RecordingDevicesMiddlewareTest { + private lateinit var notificationsDelegate: NotificationsDelegate + + @Before + fun setup() { + // Prepare the PackageManager to answer getLaunchIntentForPackage call. + val applicationManager = Shadows.shadowOf(testContext.packageManager) + + val activityComponent = ComponentName(testContext.packageName, "Test") + applicationManager.addActivityIfNotPresent(activityComponent) + + applicationManager.addIntentFilterForActivity( + activityComponent, + IntentFilter(Intent.ACTION_MAIN).apply { addCategory(Intent.CATEGORY_INFO) }, + ) + + val notificationManagerCompat: NotificationManagerCompat = Mockito.spy( + NotificationManagerCompat.from( + testContext, + ), + ) + + notificationsDelegate = NotificationsDelegate(notificationManagerCompat) + + whenever(notificationManagerCompat.areNotificationsEnabled()).thenReturn(true) + } + + @Test + fun `updateNotification should show notification once when recording`() { + val realNotificationManager = testContext.getSystemService(Context.NOTIFICATION_SERVICE) + as NotificationManager + val notificationManager = Shadows.shadowOf(realNotificationManager) + + assertEquals(0, notificationManager.size()) + + val middleware = RecordingDevicesMiddleware(testContext, notificationsDelegate) + + middleware.updateNotification(RecordingState.Camera) + + assertEquals(1, notificationManager.size()) + + // Another update with the same state to ensure that the notification is shown once. + middleware.updateNotification(RecordingState.CameraAndMicrophone) + + assertEquals(1, notificationManager.size()) + } + + @Test + fun `updateNotification hides notification when it has shown notification`() { + val realNotificationManager = testContext.getSystemService(Context.NOTIFICATION_SERVICE) + as NotificationManager + val notificationManager = Shadows.shadowOf(realNotificationManager) + + assertEquals(0, notificationManager.size()) + + val middleware = RecordingDevicesMiddleware(testContext, notificationsDelegate) + + middleware.updateNotification(RecordingState.Camera) + + assertEquals(1, notificationManager.size()) + + middleware.updateNotification(RecordingState.None) + + assertEquals(0, notificationManager.size()) + } + + @Test + fun `middleware shows notification when tab has a recording device then hides when recording devices become inactive`() { + val realNotificationManager = testContext.getSystemService(Context.NOTIFICATION_SERVICE) + as NotificationManager + val notificationManager = Shadows.shadowOf(realNotificationManager) + + val middleware = RecordingDevicesMiddleware(testContext, notificationsDelegate) + val store = BrowserStore( + initialState = BrowserState( + tabs = listOf( + createTab("https://www.mozilla.org", id = "mozilla"), + ), + ), + middleware = listOf(middleware), + ) + + store.waitUntilIdle() + + assertEquals(0, notificationManager.size()) + + store.dispatch( + ContentAction.SetRecordingDevices( + sessionId = "mozilla", + devices = listOf( + RecordingDevice(RecordingDevice.Type.CAMERA, RecordingDevice.Status.RECORDING), + ), + ), + ).joinBlocking() + + assertEquals(1, notificationManager.size()) + + store.dispatch( + ContentAction.SetRecordingDevices( + sessionId = "mozilla", + devices = emptyList(), + ), + ).joinBlocking() + + assertEquals(0, notificationManager.size()) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/notification/MediaNotificationTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/notification/MediaNotificationTest.kt new file mode 100644 index 0000000000..09715c7e8f --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/notification/MediaNotificationTest.kt @@ -0,0 +1,208 @@ +/* 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 mozilla.components.feature.media.notification + +import android.app.Notification +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import androidx.core.app.NotificationCompat +import androidx.test.ext.junit.runners.AndroidJUnit4 +import kotlinx.coroutines.test.runTest +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.MediaSessionState +import mozilla.components.browser.state.state.createTab +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.feature.media.R +import mozilla.components.feature.media.service.AbstractMediaSessionService +import mozilla.components.support.test.mock +import mozilla.components.support.test.robolectric.testContext +import mozilla.components.support.test.whenever +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers +import org.mockito.Mockito.doReturn +import org.mockito.Mockito.spy + +@RunWith(AndroidJUnit4::class) +class MediaNotificationTest { + private lateinit var context: Context + + @Before + fun setUp() { + context = spy(testContext).also { + val packageManager: PackageManager = mock() + doReturn(Intent()).`when`(packageManager).getLaunchIntentForPackage(ArgumentMatchers.anyString()) + doReturn(packageManager).`when`(it).packageManager + } + } + + @Test + fun `media session notification for playing state`() = runTest { + val state = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "test-tab", + title = "Mozilla", + mediaSessionState = MediaSessionState(mock(), playbackState = MediaSession.PlaybackState.PLAYING), + ), + ), + ) + + val notification = MediaNotification(context, AbstractMediaSessionService::class.java).create(state.tabs[0], mock()) + + assertEquals("https://www.mozilla.org", notification.text) + assertEquals("Mozilla", notification.title) + assertEquals(R.drawable.mozac_feature_media_playing, notification.iconResource) + } + + @Test + fun `media session notification for paused state`() = runTest { + val state = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "test-tab", + title = "Mozilla", + mediaSessionState = MediaSessionState(mock(), playbackState = MediaSession.PlaybackState.PAUSED), + ), + ), + ) + + val notification = MediaNotification(context, AbstractMediaSessionService::class.java).create(state.tabs[0], mock()) + + assertEquals("https://www.mozilla.org", notification.text) + assertEquals("Mozilla", notification.title) + assertEquals(R.drawable.mozac_feature_media_paused, notification.iconResource) + } + + @Test + fun `media session notification for stopped state`() = runTest { + val state = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "test-tab", + title = "Mozilla", + mediaSessionState = MediaSessionState(mock(), playbackState = MediaSession.PlaybackState.STOPPED), + ), + ), + ) + + val notification = MediaNotification(context, AbstractMediaSessionService::class.java).create(state.tabs[0], mock()) + + assertEquals("", notification.text) + assertEquals("", notification.title) + } + + @Test + fun `media session notification for playing state in private mode`() = runTest { + val state = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "test-tab", + title = "Mozilla", + private = true, + mediaSessionState = MediaSessionState(mock(), playbackState = MediaSession.PlaybackState.PLAYING), + ), + ), + ) + + val notification = MediaNotification(context, AbstractMediaSessionService::class.java).create(state.tabs[0], mock()) + + assertEquals("", notification.text) + assertEquals("A site is playing media", notification.title) + assertEquals(R.drawable.mozac_feature_media_playing, notification.iconResource) + } + + @Test + fun `media session notification for paused state in private mode`() = runTest { + val state = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "test-tab", + title = "Mozilla", + private = true, + mediaSessionState = MediaSessionState(mock(), playbackState = MediaSession.PlaybackState.PAUSED), + ), + ), + ) + + val notification = MediaNotification(context, AbstractMediaSessionService::class.java).create(state.tabs[0], mock()) + + assertEquals("", notification.text) + assertEquals("A site is playing media", notification.title) + assertEquals(R.drawable.mozac_feature_media_paused, notification.iconResource) + } + + @Test + fun `media session notification with metadata in non private mode`() = runTest { + val mediaSessionState: MediaSessionState = mock() + val metadata: MediaSession.Metadata = mock() + whenever(mediaSessionState.metadata).thenReturn(metadata) + whenever(mediaSessionState.playbackState).thenReturn(MediaSession.PlaybackState.PAUSED) + whenever(metadata.title).thenReturn("test title") + + val state = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "test-tab", + title = "Mozilla", + private = false, + mediaSessionState = mediaSessionState, + ), + ), + ) + + val notification = MediaNotification(context, AbstractMediaSessionService::class.java).create(state.tabs[0], mock()) + + assertEquals("https://www.mozilla.org", notification.text) + assertEquals("test title", notification.title) + assertEquals(R.drawable.mozac_feature_media_paused, notification.iconResource) + } + + @Test + fun `media session notification with metadata in private mode`() = runTest { + val mediaSessionState: MediaSessionState = mock() + val metadata: MediaSession.Metadata = mock() + whenever(mediaSessionState.metadata).thenReturn(metadata) + whenever(mediaSessionState.playbackState).thenReturn(MediaSession.PlaybackState.PAUSED) + whenever(metadata.title).thenReturn("test title") + + val state = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + id = "test-tab", + title = "Mozilla", + private = true, + mediaSessionState = mediaSessionState, + ), + ), + ) + + val notification = MediaNotification(context, AbstractMediaSessionService::class.java).create(state.tabs[0], mock()) + + assertEquals("", notification.text) + assertEquals("A site is playing media", notification.title) + assertEquals(R.drawable.mozac_feature_media_paused, notification.iconResource) + } +} + +private val Notification.text: String? + get() = extras.getString(NotificationCompat.EXTRA_TEXT) + +private val Notification.title: String? + get() = extras.getString(NotificationCompat.EXTRA_TITLE) + +private val Notification.iconResource: Int + @Suppress("DEPRECATION") + get() = icon diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/service/AbstractMediaSessionServiceTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/service/AbstractMediaSessionServiceTest.kt new file mode 100644 index 0000000000..a89d852f2f --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/service/AbstractMediaSessionServiceTest.kt @@ -0,0 +1,100 @@ +/* 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 mozilla.components.feature.media.service + +import android.app.Service.START_NOT_STICKY +import android.content.ComponentName +import android.content.Intent +import androidx.test.ext.junit.runners.AndroidJUnit4 +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.base.crash.CrashReporting +import mozilla.components.support.base.android.NotificationsDelegate +import mozilla.components.support.test.mock +import mozilla.components.support.test.robolectric.testContext +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.verify +import org.robolectric.Robolectric + +@RunWith(AndroidJUnit4::class) +class AbstractMediaSessionServiceTest { + private val service = Robolectric.buildService(FakeMediaService::class.java).get() + + @Test + fun `WHEN the service is created THEN it initialize all needed properties`() { + service.onCreate() + + assertNotNull(service.binder) + assertEquals(MediaSessionServiceDelegate::class.java, service.delegate!!.javaClass) + assertEquals(service, service.delegate!!.context) + assertEquals(service, service.delegate!!.service) + assertEquals(service.store, service.delegate!!.store) + } + + @Test + fun `WHEN the service is destroyed THEN clean all internal properties`() { + service.delegate = mock() + service.binder = mock() + + service.onDestroy() + + assertNull(service.delegate) + assertNull(service.binder) + } + + @Test + fun `WHEN the service receives a new Intent THEN send it to the delegate and set the service to not be automatically restarted`() { + service.delegate = mock() + val intent: Intent = mock() + + val result = service.onStartCommand(intent, 33, 22) + + verify(service.delegate)!!.onStartCommand(intent) + assertEquals(START_NOT_STICKY, result) + } + + @Test + fun `GIVEN the service is running WHEN a task in the application is removed THEN inform the delegate`() { + service.delegate = mock() + + service.onTaskRemoved(null) + + verify(service.delegate)!!.onTaskRemoved() + } + + @Test + fun `WHEN the service is bound THEN return the current binder instance`() { + service.binder = mock() + + val result = service.onBind(null) + + assertEquals(service.binder, result) + } + + @Test + fun `WHEN the play intent is asked for THEN it is set with an action to play media`() { + val intent = AbstractMediaSessionService.playIntent(testContext, FakeMediaService::class.java) + + assertEquals(AbstractMediaSessionService.ACTION_PLAY, intent.action) + assertEquals(ComponentName(testContext, FakeMediaService::class.java), intent.component) + } + + @Test + fun `WHEN the play intent is asked for THEN it is set with an action to pause media`() { + val intent = AbstractMediaSessionService.pauseIntent(testContext, FakeMediaService::class.java) + + assertEquals(AbstractMediaSessionService.ACTION_PAUSE, intent.action) + assertEquals(ComponentName(testContext, FakeMediaService::class.java), intent.component) + } +} + +class FakeMediaService : AbstractMediaSessionService() { + public override val store: BrowserStore = mock() + public override val crashReporter: CrashReporting = mock() + public override val notificationsDelegate: NotificationsDelegate = mock() +} diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/service/MediaServiceBinderTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/service/MediaServiceBinderTest.kt new file mode 100644 index 0000000000..5da01da91d --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/service/MediaServiceBinderTest.kt @@ -0,0 +1,30 @@ +/* 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 mozilla.components.feature.media.service + +import mozilla.components.support.test.mock +import org.junit.Assert.assertSame +import org.junit.Test + +class MediaServiceBinderTest { + @Test + fun `GIVEN a constructed instance THEN the internal service is kept as a weak reference`() { + val delegate: MediaSessionDelegate = mock() + + val binder = MediaServiceBinder(delegate) + + assertSame(delegate, binder.service.get()) + } + + @Test + fun `GIVEN a constructed instance WHEN the media service is asked for THEN return the initially provided instance`() { + val delegate: MediaSessionDelegate = mock() + val binder = MediaServiceBinder(delegate) + + val result = binder.getMediaService() + + assertSame(delegate, result) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/service/MediaSessionServiceDelegateTest.kt b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/service/MediaSessionServiceDelegateTest.kt new file mode 100644 index 0000000000..8880f60296 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/java/mozilla/components/feature/media/service/MediaSessionServiceDelegateTest.kt @@ -0,0 +1,581 @@ +/* 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 mozilla.components.feature.media.service + +import android.app.ForegroundServiceStartNotAllowedException +import android.app.Notification +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.graphics.Bitmap +import android.os.Build +import android.support.v4.media.MediaMetadataCompat +import android.support.v4.media.session.MediaSessionCompat +import android.support.v4.media.session.PlaybackStateCompat +import androidx.core.app.NotificationManagerCompat +import androidx.test.ext.junit.runners.AndroidJUnit4 +import kotlinx.coroutines.CoroutineExceptionHandler +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.MediaSessionState +import mozilla.components.browser.state.state.createTab +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.base.crash.CrashReporting +import mozilla.components.concept.engine.mediasession.MediaSession +import mozilla.components.concept.engine.mediasession.MediaSession.Metadata +import mozilla.components.concept.engine.mediasession.MediaSession.PlaybackState +import mozilla.components.feature.media.ext.toPlaybackState +import mozilla.components.feature.media.facts.MediaFacts +import mozilla.components.feature.media.notification.MediaNotification +import mozilla.components.feature.media.session.MediaSessionCallback +import mozilla.components.support.base.Component +import mozilla.components.support.base.android.NotificationsDelegate +import mozilla.components.support.base.facts.Action +import mozilla.components.support.base.facts.processor.CollectionProcessor +import mozilla.components.support.base.ids.SharedIdsHelper +import mozilla.components.support.test.any +import mozilla.components.support.test.argumentCaptor +import mozilla.components.support.test.coMock +import mozilla.components.support.test.eq +import mozilla.components.support.test.mock +import mozilla.components.support.test.robolectric.testContext +import mozilla.components.support.test.rule.MainCoroutineRule +import mozilla.components.support.test.rule.runTestOnMain +import mozilla.components.support.test.whenever +import mozilla.components.support.utils.ext.stopForegroundCompat +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull +import org.junit.Assert.assertSame +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.anyInt +import org.mockito.Mockito.doReturn +import org.mockito.Mockito.doThrow +import org.mockito.Mockito.never +import org.mockito.Mockito.spy +import org.mockito.Mockito.verify +import org.robolectric.util.ReflectionHelpers.setStaticField +import kotlin.reflect.jvm.javaField +import android.media.session.PlaybackState as AndroidPlaybackState + +@RunWith(AndroidJUnit4::class) +class MediaSessionServiceDelegateTest { + + @get:Rule + val coroutinesTestRule = MainCoroutineRule() + + private val notificationId = SharedIdsHelper.getIdForTag(testContext, AbstractMediaSessionService.NOTIFICATION_TAG) + + @Test + fun `WHEN the service is created THEN create a new notification scope audio focus manager`() { + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + delegate.mediaSession = mock() + val mediaCallbackCaptor = argumentCaptor<MediaSessionCallback>() + + delegate.onCreate() + + verify(delegate.mediaSession).setCallback(mediaCallbackCaptor.capture()) + assertNotNull(delegate.notificationScope) + } + + @Test + fun `WHEN the service is destroyed THEN stop notification updates and abandon audio focus`() { + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + delegate.audioFocus = mock() + + delegate.onDestroy() + + verify(delegate.audioFocus)!!.abandon() + verify(delegate.service, never()).stopSelf() + assertNull(delegate.notificationScope) + } + + @Test + fun `GIVEN media playing started WHEN a new play command is received THEN resume media and emit telemetry`() { + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + delegate.controller = mock() // simulate media already started playing + + CollectionProcessor.withFactCollection { facts -> + delegate.onStartCommand(Intent(AbstractMediaSessionService.ACTION_PLAY)) + + verify(delegate.controller)!!.play() + assertEquals(1, facts.size) + with(facts[0]) { + assertEquals(Component.FEATURE_MEDIA, component) + assertEquals(Action.PLAY, action) + assertEquals(MediaFacts.Items.NOTIFICATION, item) + } + } + } + + @Test + fun `GIVEN media playing started WHEN a new pause command is received THEN pause media and emit telemetry`() { + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + delegate.controller = mock() // simulate media already started playing + + CollectionProcessor.withFactCollection { facts -> + delegate.onStartCommand(Intent(AbstractMediaSessionService.ACTION_PAUSE)) + + verify(delegate.controller)!!.pause() + assertEquals(1, facts.size) + with(facts[0]) { + assertEquals(Component.FEATURE_MEDIA, component) + assertEquals(Action.PAUSE, action) + assertEquals(MediaFacts.Items.NOTIFICATION, item) + } + } + } + + @Test + fun `WHEN the task is removed THEN stop media in all tabs and shutdown`() { + val notificationManagerCompat: NotificationManagerCompat = mock() + val notificationsDelegate: NotificationsDelegate = mock() + whenever(notificationsDelegate.notificationManagerCompat).thenReturn(notificationManagerCompat) + + val mediaTab1 = getMediaTab() + val mediaTab2 = getMediaTab(PlaybackState.PAUSED) + val store = BrowserStore( + BrowserState( + tabs = listOf(mediaTab1, mediaTab2), + ), + ) + val delegate = MediaSessionServiceDelegate(testContext, mock(), store, mock(), notificationsDelegate) + delegate.mediaSession = mock() + + delegate.onTaskRemoved() + + verify(mediaTab1.mediaSessionState!!.controller).stop() + verify(mediaTab2.mediaSessionState!!.controller).stop() + verify(delegate.mediaSession).release() + verify(delegate.service).stopSelf() + } + + @Test + fun `WHEN handling playing media THEN emit telemetry`() { + val mediaTab = getMediaTab() + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + delegate.audioFocus = mock() + + CollectionProcessor.withFactCollection { facts -> + delegate.handleMediaPlaying(mediaTab) + + assertEquals(1, facts.size) + with(facts[0]) { + assertEquals(Component.FEATURE_MEDIA, component) + assertEquals(Action.PLAY, action) + assertEquals(MediaFacts.Items.STATE, item) + } + } + } + + @Test + fun `WHEN handling playing media THEN setup internal properties`() { + val mediaTab = getMediaTab() + val delegate = spy(MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock())) + delegate.audioFocus = mock() + + delegate.handleMediaPlaying(mediaTab) + + verify(delegate).updateMediaSession(mediaTab) + verify(delegate).registerBecomingNoisyListenerIfNeeded(mediaTab) + assertSame(mediaTab.mediaSessionState!!.controller, delegate.controller) + } + + @Test + fun `GIVEN the service is already in foreground WHEN handling playing media THEN setup internal properties`() = runTestOnMain { + val mediaTab = getMediaTab() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), notificationsDelegate) + delegate.onCreate() + delegate.audioFocus = mock() + delegate.isForegroundService = true + + delegate.handleMediaPlaying(mediaTab) + + verify(notificationsDelegate).notify(any(), eq(delegate.notificationId), any(), any(), any(), eq(false)) + } + + @Test + fun `GIVEN the service is not in foreground WHEN handling playing media THEN start the media service as foreground`() { + val mediaTab = getMediaTab() + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + delegate.onCreate() + delegate.audioFocus = mock() + delegate.isForegroundService = false + + delegate.handleMediaPlaying(mediaTab) + + verify(delegate.service).startForeground(eq(delegate.notificationId), any()) + assertTrue(delegate.isForegroundService) + } + + @Test + fun `WHEN updating the notification for a new media state THEN post a new notification`() = runTestOnMain { + val mediaTab = getMediaTab() + val notificationsDelegate: NotificationsDelegate = mock() + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), notificationsDelegate) + delegate.onCreate() + val notification: Notification = mock() + delegate.notificationHelper = coMock { + doReturn(notification).`when`(this).create(mediaTab, delegate.mediaSession) + } + + delegate.updateNotification(mediaTab) + + verify(notificationsDelegate).notify(any(), eq(delegate.notificationId), eq(notification), any(), any(), eq(false)) + } + + @Test + fun `WHEN starting the service as foreground THEN use start with a new notification for the current media state`() = runTestOnMain { + val mediaTab = getMediaTab() + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + delegate.onCreate() + val notification: Notification = mock() + delegate.notificationHelper = coMock { + doReturn(notification).`when`(this).create(mediaTab, delegate.mediaSession) + } + + delegate.startForeground(mediaTab) + + verify(delegate.service).startForeground(eq(delegate.notificationId), eq(notification)) + assertTrue(delegate.isForegroundService) + } + + @Test + fun `GIVEN media is paused WHEN media is handling resuming media THEN resume the right session`() { + val mediaTab1 = getMediaTab() + val mediaTab2 = getMediaTab(PlaybackState.PAUSED) + val store = BrowserStore( + BrowserState( + tabs = listOf(mediaTab1, mediaTab2), + ), + ) + val service: AbstractMediaSessionService = mock() + val crashReporter: CrashReporting = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, crashReporter, mock()) + val mediaSessionCallback = MediaSessionCallback(store) + delegate.onCreate() + + mediaSessionCallback.onPause() + verify(mediaTab1.mediaSessionState!!.controller).pause() + + mediaSessionCallback.onPlay() + verify(mediaTab1.mediaSessionState!!.controller).play() + } + + @Test + fun `WHEN handling paused media THEN emit telemetry`() { + val mediaTab = getMediaTab(PlaybackState.PAUSED) + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + + CollectionProcessor.withFactCollection { facts -> + delegate.handleMediaPaused(mediaTab) + + assertEquals(1, facts.size) + with(facts[0]) { + assertEquals(Component.FEATURE_MEDIA, component) + assertEquals(Action.PAUSE, action) + assertEquals(MediaFacts.Items.STATE, item) + } + } + } + + @Test + fun `WHEN handling paused media THEN update internal state and notification and stop the service`() = runTestOnMain { + val mediaTab = getMediaTab(PlaybackState.PAUSED) + val notificationManagerCompat = spy(NotificationManagerCompat.from(testContext)) + val notificationsDelegate = spy(NotificationsDelegate(notificationManagerCompat)) + doReturn(true).`when`(notificationManagerCompat).areNotificationsEnabled() + + val notificationHelper: MediaNotification = mock() + val notification: Notification = mock() + val mediaSession: MediaSessionCompat = mock() + val notificationId = SharedIdsHelper.getIdForTag(testContext, AbstractMediaSessionService.NOTIFICATION_TAG) + + val delegate = spy(MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), notificationsDelegate)) + delegate.isForegroundService = true + delegate.mediaSession = mediaSession + delegate.notificationHelper = notificationHelper + + doReturn(notification).`when`(notificationHelper).create(mediaTab, mediaSession) + + delegate.onCreate() + + delegate.handleMediaPaused(mediaTab) + + verify(delegate).updateMediaSession(mediaTab) + verify(delegate).unregisterBecomingNoisyListenerIfNeeded() + verify(delegate.service).stopForegroundCompat(false) + verify(notificationsDelegate).notify(null, notificationId, notification) + assertFalse(delegate.isForegroundService) + } + + @Test + fun `WHEN handling stopped media THEN emit telemetry`() { + val mediaTab = getMediaTab(PlaybackState.STOPPED) + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + + CollectionProcessor.withFactCollection { facts -> + delegate.handleMediaStopped(mediaTab) + + assertEquals(1, facts.size) + with(facts[0]) { + assertEquals(Component.FEATURE_MEDIA, component) + assertEquals(Action.STOP, action) + assertEquals(MediaFacts.Items.STATE, item) + } + } + } + + @Test + fun `WHEN handling stopped media THEN update internal state and notification and stop the service`() = runTestOnMain { + val mediaTab = getMediaTab(PlaybackState.STOPPED) + val notificationsDelegate: NotificationsDelegate = mock() + + val delegate = spy(MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), notificationsDelegate)) + delegate.isForegroundService = true + delegate.onCreate() + + delegate.handleMediaStopped(mediaTab) + + verify(delegate).updateMediaSession(mediaTab) + verify(delegate).unregisterBecomingNoisyListenerIfNeeded() + verify(delegate.service).stopForegroundCompat(false) + verify(notificationsDelegate).notify(any(), eq(notificationId), any(), any(), any(), eq(false)) + assertFalse(delegate.isForegroundService) + } + + @Test + fun `WHEN there is no media playing THEN stop the media service`() { + val notificationManagerCompat: NotificationManagerCompat = mock() + val notificationsDelegate: NotificationsDelegate = mock() + whenever(notificationsDelegate.notificationManagerCompat).thenReturn(notificationManagerCompat) + + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), notificationsDelegate) + delegate.audioFocus = mock() + delegate.mediaSession = mock() + + delegate.handleNoMedia() + + verify(delegate.mediaSession).release() + verify(delegate.service).stopSelf() + } + + @Suppress("Deprecation") + @Test + fun `WHEN updating the media session THEN use the values from the current media session`() { + val bitmap: Bitmap = mock() + val getArtwork: (suspend () -> Bitmap?) = { bitmap } + val metadata = Metadata("title", "artist", "album", getArtwork) + + val mediaTab = createTab( + title = "Mozilla", + url = "https://www.mozilla.org", + mediaSessionState = MediaSessionState(mock(), metadata = metadata), + ) + + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + delegate.mediaSession = mock() + delegate.onCreate() + val metadataCaptor = argumentCaptor<MediaMetadataCompat>() + // Need to capture method arguments and manually check for equality + val playbackStateCaptor = argumentCaptor<PlaybackStateCompat>() + val expectedPlaybackState = mediaTab.mediaSessionState!!.toPlaybackState() + + delegate.updateMediaSession(mediaTab) + + verify(delegate.mediaSession).isActive = true + verify(delegate.mediaSession).setPlaybackState(playbackStateCaptor.capture()) + assertEquals(expectedPlaybackState.state, playbackStateCaptor.value.state) + assertEquals( + (expectedPlaybackState.playbackState as AndroidPlaybackState).state, + (playbackStateCaptor.value.playbackState as AndroidPlaybackState).state, + ) + assertEquals( + (expectedPlaybackState.playbackState as AndroidPlaybackState).position, + (playbackStateCaptor.value.playbackState as AndroidPlaybackState).position, + ) + assertEquals( + (expectedPlaybackState.playbackState as AndroidPlaybackState).playbackSpeed, + (playbackStateCaptor.value.playbackState as AndroidPlaybackState).playbackSpeed, + ) + assertEquals( + (expectedPlaybackState.playbackState as AndroidPlaybackState).actions, + (playbackStateCaptor.value.playbackState as AndroidPlaybackState).actions, + ) + assertEquals( + (expectedPlaybackState.playbackState as AndroidPlaybackState).customActions, + (playbackStateCaptor.value.playbackState as AndroidPlaybackState).customActions, + ) + assertEquals(expectedPlaybackState.playbackSpeed, playbackStateCaptor.value.playbackSpeed) + assertEquals(expectedPlaybackState.actions, playbackStateCaptor.value.actions) + assertEquals(expectedPlaybackState.position, playbackStateCaptor.value.position) + verify(delegate.mediaSession).setMetadata(metadataCaptor.capture()) + assertEquals(metadata.title, metadataCaptor.value.bundle.getString(MediaMetadataCompat.METADATA_KEY_TITLE)) + assertEquals(metadata.artist, metadataCaptor.value.bundle.getString(MediaMetadataCompat.METADATA_KEY_ARTIST)) + assertEquals(bitmap, metadataCaptor.value.bundle.getParcelable(MediaMetadataCompat.METADATA_KEY_ART)) + assertEquals(-1L, metadataCaptor.value.bundle.getLong(MediaMetadataCompat.METADATA_KEY_DURATION)) + } + + @Test + fun `WHEN stopping running in foreground THEN stop the foreground service`() { + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock()) + delegate.isForegroundService = true + + delegate.stopForeground() + + verify(delegate.service).stopForegroundCompat(false) + assertFalse(delegate.isForegroundService) + } + + @Test + fun `GIVEN a audio noisy receiver is already registered WHEN trying to register a new one THEN return early`() { + val context = spy(testContext) + val delegate = MediaSessionServiceDelegate(context, mock(), mock(), mock(), mock()) + delegate.noisyAudioStreamReceiver = mock() + + delegate.registerBecomingNoisyListenerIfNeeded(mock()) + + verify(context, never()).registerReceiver(any(), any(), eq(Context.RECEIVER_NOT_EXPORTED)) + } + + @Test + fun `GIVEN a audio noisy receiver is not already registered WHEN trying to register a new one THEN register it`() { + val delegate = spy(MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), mock())) + val receiverCaptor = argumentCaptor<BroadcastReceiver>() + + delegate.registerBecomingNoisyListenerIfNeeded(mock()) + + verify(delegate).registerBecomingNoisyListener(receiverCaptor.capture()) + assertEquals(BecomingNoisyReceiver::class.java, receiverCaptor.value.javaClass) + } + + @Test + fun `GIVEN a audio noisy receiver is already registered WHEN trying to unregister one THEN unregister it`() { + val context = spy(testContext) + val delegate = MediaSessionServiceDelegate(context, mock(), mock(), mock(), mock()) + delegate.noisyAudioStreamReceiver = mock() + context.registerReceiver( + delegate.noisyAudioStreamReceiver, + delegate.intentFilter, + Context.RECEIVER_NOT_EXPORTED, + ) + val receiverCaptor = argumentCaptor<BroadcastReceiver>() + + delegate.unregisterBecomingNoisyListenerIfNeeded() + + verify(context).unregisterReceiver(receiverCaptor.capture()) + assertEquals(BecomingNoisyReceiver::class.java, receiverCaptor.value.javaClass) + assertNull(delegate.noisyAudioStreamReceiver) + } + + @Test + fun `GIVEN a audio noisy receiver is not already registered WHEN trying to unregister one THEN return early`() { + val context = spy(testContext) + val delegate = MediaSessionServiceDelegate(context, mock(), mock(), mock(), mock()) + + delegate.unregisterBecomingNoisyListenerIfNeeded() + + verify(context, never()).unregisterReceiver(any()) + } + + @Test + fun `WHEN the delegate is shutdown THEN cleanup resources and stop the media service`() { + val notificationManagerCompat: NotificationManagerCompat = mock() + val notificationsDelegate: NotificationsDelegate = mock() + whenever(notificationsDelegate.notificationManagerCompat).thenReturn(notificationManagerCompat) + + val delegate = MediaSessionServiceDelegate(testContext, mock(), mock(), mock(), notificationsDelegate) + delegate.mediaSession = mock() + + delegate.shutdown() + + verify(delegate.mediaSession).release() + verify(delegate.service).stopSelf() + assertNull(delegate.noisyAudioStreamReceiver) + } + + @Test + fun `when device is becoming noisy, playback is paused`() { + val controller: MediaSession.Controller = mock() + val initialState = BrowserState( + tabs = listOf( + createTab( + "https://www.mozilla.org", + mediaSessionState = MediaSessionState(controller, playbackState = PlaybackState.PLAYING), + ), + ), + ) + val store = BrowserStore(initialState) + val service: AbstractMediaSessionService = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, store, mock(), mock()) + delegate.onCreate() + delegate.handleMediaPlaying(initialState.tabs[0]) + + delegate.deviceBecomingNoisy(testContext) + + verify(controller).pause() + } + + @Test + fun `GIVEN device is at least API level 31 WHEN startForeground throws an exception THEN catch and pass the exception to the crash reporter`() = runTestOnMain { + val crashReporter: CrashReporting = mock() + val service: AbstractMediaSessionService = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, mock(), crashReporter, mock()) + delegate.onCreate() + val notification: Notification = mock() + delegate.notificationHelper = coMock { + doReturn(notification).`when`(this).create(mock(), delegate.mediaSession) + } + + val exception = ForegroundServiceStartNotAllowedException("Test thrown exception") + doThrow(exception).`when`(service).startForeground(anyInt(), any()) + setSdkInt(31) + + delegate.startForeground(mock()) + + verify(crashReporter).submitCaughtException(exception) + } + + @Test(expected = ForegroundServiceStartNotAllowedException::class) + fun `GIVEN device is less than 31 WHEN startForeground throws an exception THEN rethrow the exception`() { + var throwable: Throwable? = null + val exceptionHandler = CoroutineExceptionHandler { _, t -> + throwable = t + } + + runTestOnMain { + val crashReporter: CrashReporting = mock() + val service: AbstractMediaSessionService = mock() + val delegate = MediaSessionServiceDelegate(testContext, service, mock(), crashReporter, mock()) + delegate.onCreate() + val notification: Notification = mock() + delegate.notificationHelper = coMock { + doReturn(notification).`when`(this).create(mock(), delegate.mediaSession) + } + + val exception = ForegroundServiceStartNotAllowedException("Test thrown exception") + doThrow(exception).`when`(service).startForeground(anyInt(), any()) + setSdkInt(30) + + delegate.startForeground(mock(), exceptionHandler) + } + + throwable?.let { throw it } + } + + private fun getMediaTab(playbackState: PlaybackState = PlaybackState.PLAYING) = createTab( + title = "Mozilla", + url = "https://www.mozilla.org", + mediaSessionState = MediaSessionState(mock(), playbackState = playbackState), + ) + + private fun setSdkInt(sdkVersion: Int) { + setStaticField(Build.VERSION::SDK_INT.javaField, sdkVersion) + } +} diff --git a/mobile/android/android-components/components/feature/media/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/mobile/android/android-components/components/feature/media/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000000..cf1c399ea8 --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1,2 @@ +mock-maker-inline +// This allows mocking final classes (classes are final by default in Kotlin) diff --git a/mobile/android/android-components/components/feature/media/src/test/resources/robolectric.properties b/mobile/android/android-components/components/feature/media/src/test/resources/robolectric.properties new file mode 100644 index 0000000000..932b01b9eb --- /dev/null +++ b/mobile/android/android-components/components/feature/media/src/test/resources/robolectric.properties @@ -0,0 +1 @@ +sdk=28 |