Commit 02aabea1 authored by Sebastian Kaspari's avatar Sebastian Kaspari Committed by Emily Kager
Browse files

Update to new feature-media API.

parent cd7c2c4b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -213,6 +213,9 @@
            android:exported="false"
            android:theme="@style/Theme.AppCompat.DayNight.DarkActionBar"/>

        <service android:name=".media.MediaService"
            android:exported="false" />

        <service
            android:name=".customtabs.CustomTabsService"
            android:exported="true"
+0 −14
Original line number Diff line number Diff line
@@ -10,20 +10,6 @@ object FeatureFlags {
     */
    const val pullToRefreshEnabled = false

    /**
     * Integration of media features provided by `feature-media` component:
     * - Background playback without the app getting killed
     * - Media notification with play/pause controls
     * - Audio Focus handling (pausing/resuming in agreement with other media apps)
     * - Support for hardware controls to toggle play/pause (e.g. buttons on a headset)
     *
     * Behind nightly flag until all related Android Components issues are fixed and QA has signed
     * off.
     *
     * https://github.com/mozilla-mobile/fenix/issues/4431
     */
    const val mediaIntegration = true

    /**
     * Allows Progressive Web Apps to be installed to the device home screen.
     */
+14 −5
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ import androidx.navigation.fragment.navArgs
import kotlinx.android.synthetic.main.fragment_create_collection.view.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import mozilla.components.browser.session.SessionManager
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
import mozilla.components.lib.state.ext.consumeFrom
import org.mozilla.fenix.R
@@ -45,10 +46,11 @@ class CollectionCreationFragment : DialogFragment() {
        val args: CollectionCreationFragmentArgs by navArgs()

        val sessionManager = requireComponents.core.sessionManager
        val store = requireComponents.core.store
        val publicSuffixList = requireComponents.publicSuffixList
        val tabs = sessionManager.getTabs(args.tabIds, publicSuffixList)
        val tabs = sessionManager.getTabs(args.tabIds, store, publicSuffixList)
        val selectedTabs = if (args.selectedTabIds != null) {
            sessionManager.getTabs(args.selectedTabIds, publicSuffixList).toSet()
            sessionManager.getTabs(args.selectedTabIds, store, publicSuffixList).toSet()
        } else {
            if (tabs.size == 1) setOf(tabs.first()) else emptySet()
        }
@@ -80,7 +82,10 @@ class CollectionCreationFragment : DialogFragment() {
                viewLifecycleOwner.lifecycleScope
            )
        )
        collectionCreationView = CollectionCreationView(view.createCollectionWrapper, collectionCreationInteractor)
        collectionCreationView = CollectionCreationView(
            view.createCollectionWrapper,
            collectionCreationInteractor
        )

        return view
    }
@@ -108,9 +113,13 @@ class CollectionCreationFragment : DialogFragment() {
}

@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
fun SessionManager.getTabs(tabIds: Array<String>?, publicSuffixList: PublicSuffixList): List<Tab> {
fun SessionManager.getTabs(
    tabIds: Array<String>?,
    store: BrowserStore,
    publicSuffixList: PublicSuffixList
): List<Tab> {
    return tabIds
        ?.mapNotNull { this.findSessionById(it) }
        ?.map { it.toTab(publicSuffixList) }
        ?.map { it.toTab(store, publicSuffixList) }
        ?: emptyList()
}
+16 −3
Original line number Diff line number Diff line
@@ -20,8 +20,20 @@ import androidx.transition.AutoTransition
import androidx.transition.Transition
import androidx.transition.TransitionManager
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.component_collection_creation.*
import kotlinx.android.synthetic.main.component_collection_creation.view.*
import kotlinx.android.synthetic.main.component_collection_creation.back_button
import kotlinx.android.synthetic.main.component_collection_creation.collection_constraint_layout
import kotlinx.android.synthetic.main.component_collection_creation.name_collection_edittext
import kotlinx.android.synthetic.main.component_collection_creation.save_button
import kotlinx.android.synthetic.main.component_collection_creation.select_all_button
import kotlinx.android.synthetic.main.component_collection_creation.view.bottom_bar_icon_button
import kotlinx.android.synthetic.main.component_collection_creation.view.bottom_bar_text
import kotlinx.android.synthetic.main.component_collection_creation.view.bottom_button_bar_layout
import kotlinx.android.synthetic.main.component_collection_creation.view.collection_constraint_layout
import kotlinx.android.synthetic.main.component_collection_creation.view.collections_list
import kotlinx.android.synthetic.main.component_collection_creation.view.name_collection_edittext
import kotlinx.android.synthetic.main.component_collection_creation.view.select_all_button
import kotlinx.android.synthetic.main.component_collection_creation.view.tab_list
import mozilla.components.browser.state.state.MediaState
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.support.ktx.android.view.hideKeyboard
import mozilla.components.support.ktx.android.view.showKeyboard
@@ -253,7 +265,8 @@ class CollectionCreationView(
                    tab.id.toString(),
                    tab.url,
                    tab.url.toShortUrl(view.context.components.publicSuffixList),
                    tab.title
                    tab.title,
                    mediaState = MediaState.State.NONE
                )
            }.let { tabs ->
                collectionCreationTabListAdapter.updateData(tabs, tabs.toSet(), true)
+8 −12
Original line number Diff line number Diff line
@@ -27,9 +27,8 @@ import mozilla.components.concept.engine.Engine
import mozilla.components.concept.engine.mediaquery.PreferredColorScheme
import mozilla.components.concept.fetch.Client
import mozilla.components.feature.customtabs.store.CustomTabsServiceStore
import mozilla.components.feature.media.MediaFeature
import mozilla.components.feature.media.RecordingDevicesNotificationFeature
import mozilla.components.feature.media.state.MediaStateMachine
import mozilla.components.feature.media.middleware.MediaMiddleware
import mozilla.components.feature.pwa.ManifestStorage
import mozilla.components.feature.pwa.WebAppShortcutManager
import mozilla.components.feature.session.HistoryDelegate
@@ -44,6 +43,7 @@ import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.media.MediaService
import org.mozilla.fenix.test.Mockable
import java.util.concurrent.TimeUnit

@@ -66,7 +66,7 @@ class Core(private val context: Context) {
            preferredColorScheme = getPreferredColorScheme(),
            automaticFontSizeAdjustment = context.settings().shouldUseAutoSize,
            fontInflationEnabled = context.settings().shouldUseAutoSize,
            suspendMediaWhenInactive = !FeatureFlags.mediaIntegration,
            suspendMediaWhenInactive = false,
            forceUserScalableContent = context.settings().forceEnableZoom
        )

@@ -97,7 +97,11 @@ class Core(private val context: Context) {
     * The [BrowserStore] holds the global [BrowserState].
     */
    val store by lazy {
        BrowserStore()
        BrowserStore(
            middleware = listOf(
                MediaMiddleware(context, MediaService::class.java)
            )
        )
    }

    /**
@@ -150,14 +154,6 @@ class Core(private val context: Context) {
                    .whenSessionsChange()
            }

            if (FeatureFlags.mediaIntegration) {
                MediaStateMachine.start(sessionManager)

                // Enable media features like showing an ongoing notification with media controls when
                // media in web content is playing.
                MediaFeature(context).enable()
            }

            WebNotificationFeature(
                context, engine, icons, R.drawable.ic_status_logo,
                HomeActivity::class.java
Loading