Loading app/src/main/AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -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" Loading app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +0 −14 Original line number Diff line number Diff line Loading @@ -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. */ Loading app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt +14 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() } Loading Loading @@ -80,7 +82,10 @@ class CollectionCreationFragment : DialogFragment() { viewLifecycleOwner.lifecycleScope ) ) collectionCreationView = CollectionCreationView(view.createCollectionWrapper, collectionCreationInteractor) collectionCreationView = CollectionCreationView( view.createCollectionWrapper, collectionCreationInteractor ) return view } Loading Loading @@ -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() } app/src/main/java/org/mozilla/fenix/collections/CollectionCreationView.kt +16 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading app/src/main/java/org/mozilla/fenix/components/Core.kt +8 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 ) Loading Loading @@ -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) ) ) } /** Loading Loading @@ -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 Loading
app/src/main/AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -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" Loading
app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +0 −14 Original line number Diff line number Diff line Loading @@ -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. */ Loading
app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt +14 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() } Loading Loading @@ -80,7 +82,10 @@ class CollectionCreationFragment : DialogFragment() { viewLifecycleOwner.lifecycleScope ) ) collectionCreationView = CollectionCreationView(view.createCollectionWrapper, collectionCreationInteractor) collectionCreationView = CollectionCreationView( view.createCollectionWrapper, collectionCreationInteractor ) return view } Loading Loading @@ -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() }
app/src/main/java/org/mozilla/fenix/collections/CollectionCreationView.kt +16 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading
app/src/main/java/org/mozilla/fenix/components/Core.kt +8 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 ) Loading Loading @@ -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) ) ) } /** Loading Loading @@ -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