Closes #17174: Remove the New Media Session API Feature Flag (#17863)

upstream-sync
Roger Yang 3 years ago committed by GitHub
parent 0defc54449
commit 993cf74e72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -26,12 +26,6 @@ object FeatureFlags {
*/
val nimbusExperiments = Config.channel.isNightlyOrDebug
/**
* Enables the new MediaSession API.
*/
@Suppress("MayBeConst")
val newMediaSessionApi = true
/**
* Enables WebAuthn support.
*/

@ -128,7 +128,6 @@ import mozilla.components.feature.media.fullscreen.MediaFullscreenOrientationFea
import mozilla.components.feature.session.behavior.EngineViewBrowserToolbarBehavior
import mozilla.components.feature.webauthn.WebAuthnFeature
import mozilla.components.support.base.feature.ActivityResultHandler
import org.mozilla.fenix.FeatureFlags.newMediaSessionApi
import mozilla.components.feature.session.behavior.ToolbarPosition as MozacToolbarPosition
/**
@ -410,25 +409,14 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
view = view
)
if (newMediaSessionApi) {
fullScreenMediaSessionFeature.set(
feature = MediaSessionFullscreenFeature(
requireActivity(),
context.components.core.store
),
owner = this,
view = view
)
} else {
fullScreenMediaFeature.set(
feature = MediaFullscreenOrientationFeature(
requireActivity(),
context.components.core.store
),
owner = this,
view = view
)
}
fullScreenMediaSessionFeature.set(
feature = MediaSessionFullscreenFeature(
requireActivity(),
context.components.core.store
),
owner = this,
view = view
)
val shareDownloadFeature = ShareDownloadFeature(
context = context.applicationContext,

@ -34,7 +34,6 @@ import mozilla.components.feature.customtabs.store.CustomTabsServiceStore
import mozilla.components.feature.downloads.DownloadMiddleware
import mozilla.components.feature.logins.exceptions.LoginExceptionStorage
import mozilla.components.feature.media.MediaSessionFeature
import mozilla.components.feature.media.middleware.MediaMiddleware
import mozilla.components.feature.media.middleware.RecordingDevicesMiddleware
import mozilla.components.feature.pwa.ManifestStorage
import mozilla.components.feature.pwa.WebAppShortcutManager
@ -62,7 +61,6 @@ import mozilla.components.support.locale.LocaleManager
import org.mozilla.fenix.AppRequestInterceptor
import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.Config
import org.mozilla.fenix.FeatureFlags.newMediaSessionApi
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.TelemetryMiddleware
@ -70,7 +68,6 @@ import org.mozilla.fenix.components.search.SearchMigration
import org.mozilla.fenix.downloads.DownloadService
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.media.MediaService
import org.mozilla.fenix.media.MediaSessionService
import org.mozilla.fenix.perf.StrictModeManager
import org.mozilla.fenix.perf.lazyMonitored
@ -199,10 +196,6 @@ class Core(
RecordingDevicesMiddleware(context)
)
if (!newMediaSessionApi) {
middlewareList.add(MediaMiddleware(context, MediaService::class.java))
}
BrowserStore(
middleware = middlewareList + EngineMiddleware.create(engine, ::findSessionById)
)
@ -250,9 +243,7 @@ class Core(
permissionStorage.permissionsStorage, HomeActivity::class.java
)
if (newMediaSessionApi) {
MediaSessionFeature(context, MediaSessionService::class.java, store).start()
}
MediaSessionFeature(context, MediaSessionService::class.java, store).start()
}
}

@ -7,10 +7,8 @@ package org.mozilla.fenix.home.intent
import android.content.Intent
import androidx.navigation.NavController
import mozilla.components.browser.state.selector.findTab
import mozilla.components.feature.media.service.AbstractMediaService
import mozilla.components.feature.media.service.AbstractMediaSessionService
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.FeatureFlags.newMediaSessionApi
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.ext.components
@ -44,17 +42,9 @@ class OpenSpecificTabIntentProcessor(
}
private fun getAction(): String {
return if (newMediaSessionApi) {
AbstractMediaSessionService.Companion.ACTION_SWITCH_TAB
} else {
AbstractMediaService.Companion.ACTION_SWITCH_TAB
}
return AbstractMediaSessionService.Companion.ACTION_SWITCH_TAB
}
private fun getTabId(): String {
return if (newMediaSessionApi) {
AbstractMediaSessionService.Companion.EXTRA_TAB_ID
} else {
AbstractMediaService.Companion.EXTRA_TAB_ID
}
return AbstractMediaSessionService.Companion.EXTRA_TAB_ID
}

@ -36,12 +36,6 @@ import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.ext.showAndEnable
import org.mozilla.fenix.ext.toShortUrl
import kotlin.math.max
import mozilla.components.browser.state.state.MediaState
import mozilla.components.feature.media.ext.pauseIfPlaying
import mozilla.components.feature.media.ext.playIfPaused
import org.mozilla.fenix.FeatureFlags.newMediaSessionApi
import org.mozilla.fenix.ext.getMediaStateForSession
import org.mozilla.fenix.utils.Do
/**
* A RecyclerView ViewHolder implementation for "tab" items.
@ -99,94 +93,46 @@ class TabTrayViewHolder(
// Media state
playPauseButtonView.increaseTapArea(PLAY_PAUSE_BUTTON_EXTRA_DPS)
if (newMediaSessionApi) {
with(playPauseButtonView) {
invalidate()
val sessionState = store.state.findTabOrCustomTab(tab.id)
when (sessionState?.mediaSessionState?.playbackState) {
MediaSession.PlaybackState.PAUSED -> {
showAndEnable()
contentDescription =
context.getString(R.string.mozac_feature_media_notification_action_play)
setImageDrawable(
AppCompatResources.getDrawable(context, R.drawable.media_state_play)
)
}
MediaSession.PlaybackState.PLAYING -> {
showAndEnable()
contentDescription =
context.getString(R.string.mozac_feature_media_notification_action_pause)
setImageDrawable(
AppCompatResources.getDrawable(context, R.drawable.media_state_pause)
)
}
else -> {
removeTouchDelegate()
removeAndDisable()
}
with(playPauseButtonView) {
invalidate()
val sessionState = store.state.findTabOrCustomTab(tab.id)
when (sessionState?.mediaSessionState?.playbackState) {
MediaSession.PlaybackState.PAUSED -> {
showAndEnable()
contentDescription =
context.getString(R.string.mozac_feature_media_notification_action_play)
setImageDrawable(
AppCompatResources.getDrawable(context, R.drawable.media_state_play)
)
}
setOnClickListener {
when (sessionState?.mediaSessionState?.playbackState) {
MediaSession.PlaybackState.PLAYING -> {
metrics.track(Event.TabMediaPause)
sessionState.mediaSessionState?.controller?.pause()
}
MediaSession.PlaybackState.PAUSED -> {
metrics.track(Event.TabMediaPlay)
sessionState.mediaSessionState?.controller?.play()
}
else -> throw AssertionError(
"Play/Pause button clicked without play/pause state."
)
}
MediaSession.PlaybackState.PLAYING -> {
showAndEnable()
contentDescription =
context.getString(R.string.mozac_feature_media_notification_action_pause)
setImageDrawable(
AppCompatResources.getDrawable(context, R.drawable.media_state_pause)
)
}
}
} else {
with(playPauseButtonView) {
invalidate()
Do exhaustive when (store.state.getMediaStateForSession(tab.id)) {
MediaState.State.PAUSED -> {
showAndEnable()
contentDescription =
context.getString(R.string.mozac_feature_media_notification_action_play)
setImageDrawable(
AppCompatResources.getDrawable(context, R.drawable.media_state_play)
)
}
MediaState.State.PLAYING -> {
showAndEnable()
contentDescription =
context.getString(R.string.mozac_feature_media_notification_action_pause)
setImageDrawable(
AppCompatResources.getDrawable(context, R.drawable.media_state_pause)
)
}
MediaState.State.NONE -> {
removeTouchDelegate()
removeAndDisable()
}
else -> {
removeTouchDelegate()
removeAndDisable()
}
}
playPauseButtonView.setOnClickListener {
Do exhaustive when (store.state.getMediaStateForSession(tab.id)) {
MediaState.State.PLAYING -> {
setOnClickListener {
when (sessionState?.mediaSessionState?.playbackState) {
MediaSession.PlaybackState.PLAYING -> {
metrics.track(Event.TabMediaPause)
store.state.media.pauseIfPlaying()
sessionState.mediaSessionState?.controller?.pause()
}
MediaState.State.PAUSED -> {
MediaSession.PlaybackState.PAUSED -> {
metrics.track(Event.TabMediaPlay)
store.state.media.playIfPaused()
sessionState.mediaSessionState?.controller?.play()
}
MediaState.State.NONE -> throw AssertionError(
else -> throw AssertionError(
"Play/Pause button clicked without play/pause state."
)
}

@ -23,7 +23,6 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.FeatureFlags.newMediaSessionApi
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@ -81,13 +80,8 @@ class OpenSpecificTabIntentProcessorTest {
@Test
fun `GIVEN an intent with correct action and extra string WHEN it is processed THEN session should be selected and openToBrowser should be called`() {
val intent = Intent().apply {
if (newMediaSessionApi) {
action = AbstractMediaSessionService.Companion.ACTION_SWITCH_TAB
putExtra(AbstractMediaSessionService.Companion.EXTRA_TAB_ID, TEST_SESSION_ID)
} else {
action = AbstractMediaService.Companion.ACTION_SWITCH_TAB
putExtra(AbstractMediaService.Companion.EXTRA_TAB_ID, TEST_SESSION_ID)
}
action = AbstractMediaSessionService.Companion.ACTION_SWITCH_TAB
putExtra(AbstractMediaSessionService.Companion.EXTRA_TAB_ID, TEST_SESSION_ID)
}
val store = BrowserStore(BrowserState(tabs = listOf(createTab(id = TEST_SESSION_ID, url = "https:mozilla.org"))))
val tabUseCases: TabsUseCases = mockk(relaxed = true)

@ -17,7 +17,6 @@ import io.mockk.verify
import mozilla.components.browser.state.state.BrowserState
import mozilla.components.browser.state.state.ContentState
import mozilla.components.browser.state.state.MediaSessionState
import mozilla.components.browser.state.state.MediaState
import mozilla.components.browser.state.state.SessionState
import mozilla.components.browser.state.state.TabSessionState
import mozilla.components.browser.state.store.BrowserStore
@ -31,7 +30,6 @@ import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.FeatureFlags.newMediaSessionApi
import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@ -83,31 +81,20 @@ class TabTrayViewHolderTest {
url = "https://example.com"
)
if (newMediaSessionApi) {
state = state.copy(
tabs = listOf(
TabSessionState(
id = "123",
content = ContentState(
url = "https://example.com",
searchTerms = "search terms"
),
mediaSessionState = mediaSessionState
)
state = state.copy(
tabs = listOf(
TabSessionState(
id = "123",
content = ContentState(
url = "https://example.com",
searchTerms = "search terms"
),
mediaSessionState = mediaSessionState
)
)
)
every { mediaSessionState.playbackState } answers { MediaSession.PlaybackState.PAUSED }
} else {
state = state.copy(
media = MediaState(
aggregate = MediaState.Aggregate(
activeTabId = "123",
state = MediaState.State.PAUSED
)
)
)
}
every { mediaSessionState.playbackState } answers { MediaSession.PlaybackState.PAUSED }
tabViewHolder.bind(tab, false, mockk(), mockk())
@ -124,31 +111,20 @@ class TabTrayViewHolderTest {
url = "https://example.com"
)
if (newMediaSessionApi) {
state = state.copy(
tabs = listOf(
TabSessionState(
id = "123",
content = ContentState(
url = "https://example.com",
searchTerms = "search terms"
),
mediaSessionState = mediaSessionState
)
state = state.copy(
tabs = listOf(
TabSessionState(
id = "123",
content = ContentState(
url = "https://example.com",
searchTerms = "search terms"
),
mediaSessionState = mediaSessionState
)
)
)
every { mediaSessionState.playbackState } answers { MediaSession.PlaybackState.PLAYING }
} else {
state = state.copy(
media = MediaState(
aggregate = MediaState.Aggregate(
activeTabId = "123",
state = MediaState.State.PLAYING
)
)
)
}
every { mediaSessionState.playbackState } answers { MediaSession.PlaybackState.PLAYING }
tabViewHolder.bind(tab, false, mockk(), mockk())

Loading…
Cancel
Save