Commit 480380d1 authored by James Hugman's avatar James Hugman Committed by jhugman
Browse files

Fixes 1877 - Override pending intent extras and data with intent derived from session

parent adfd9ce8
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -6,9 +6,11 @@

package mozilla.components.feature.customtabs

import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Color
import android.graphics.drawable.BitmapDrawable
import android.net.Uri
import android.support.annotation.VisibleForTesting
import android.support.v4.content.ContextCompat
import mozilla.components.browser.menu.BrowserMenuBuilder
@@ -63,11 +65,11 @@ class CustomTabsToolbarFeature(
            // Add navigation close action
            addCloseButton(config.closeButtonIcon)
            // Add action button
            addActionButton(config.actionButtonConfig)
            addActionButton(session, config.actionButtonConfig)
            // Show share button
            if (config.showShareMenuItem) addShareButton(session)
            // Add menu items
            if (config.menuItems.isNotEmpty()) addMenuItems(config.menuItems)
            if (config.menuItems.isNotEmpty()) addMenuItems(session, config.menuItems)

            // Explicitly set the title regardless of the customTabConfig settings
            toolbar.titleTextSize = TITLE_TEXT_SIZE
@@ -109,14 +111,18 @@ class CustomTabsToolbarFeature(
    }

    @VisibleForTesting
    internal fun addActionButton(buttonConfig: CustomTabActionButtonConfig?) {
    internal fun addActionButton(session: Session, buttonConfig: CustomTabActionButtonConfig?) {
        buttonConfig?.let { config ->
            val button = Toolbar.ActionButton(
                BitmapDrawable(context.resources, config.icon),
                config.description
            ) {
                emitActionButtonFact()
                config.pendingIntent.send()
                config.pendingIntent.send(
                    context,
                    0,
                    Intent(null, Uri.parse(session.url))
                )
            }

            toolbar.addBrowserAction(button)
@@ -138,9 +144,15 @@ class CustomTabsToolbarFeature(
    }

    @VisibleForTesting
    internal fun addMenuItems(menuItems: List<CustomTabMenuItem>) {
    internal fun addMenuItems(session: Session, menuItems: List<CustomTabMenuItem>) {
        menuItems.map {
            SimpleBrowserMenuItem(it.name) { it.pendingIntent.send() }
            SimpleBrowserMenuItem(it.name) {
                it.pendingIntent.send(
                    context,
                    0,
                    Intent(null, Uri.parse(session.url))
                )
            }
        }.also { items ->
            val combinedItems = menuBuilder?.let { builder -> builder.items + items } ?: items
            val combinedExtras = menuBuilder?.let {
+9 −8
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ class CustomTabsToolbarFeatureTest {

        feature.initialize(session)

        verify(feature).addActionButton(null)
        verify(feature).addActionButton(any(), any())
    }

    @Test
@@ -229,8 +229,9 @@ class CustomTabsToolbarFeatureTest {
        val pendingIntent: PendingIntent = mock()

        `when`(session.customTabConfig).thenReturn(customTabConfig)
        `when`(session.url).thenReturn("https://example.com")

        feature.addActionButton(null)
        feature.addActionButton(session, null)

        verify(toolbar, never()).addBrowserAction(any())

@@ -240,13 +241,13 @@ class CustomTabsToolbarFeatureTest {
        `when`(actionConfig.pendingIntent).thenReturn(pendingIntent)
        `when`(actionConfig.icon).thenReturn(closeButtonIcon)

        feature.addActionButton(actionConfig)
        feature.addActionButton(session, actionConfig)

        verify(toolbar).addBrowserAction(captor.capture())

        val button = captor.value.createView(FrameLayout(RuntimeEnvironment.application))
        button.performClick()
        verify(pendingIntent).send()
        verify(pendingIntent).send(any(), anyInt(), any())
    }

    @Test
@@ -261,13 +262,13 @@ class CustomTabsToolbarFeatureTest {

        feature.initialize(session)

        verify(feature, never()).addMenuItems(anyList())
        verify(feature, never()).addMenuItems(any(), anyList())

        `when`(customTabConfig.menuItems).thenReturn(listOf(CustomTabMenuItem("Share", mock())))

        feature.initialize(session)

        verify(feature).addMenuItems(anyList())
        verify(feature).addMenuItems(any(), anyList())
    }

    @Test
@@ -281,7 +282,7 @@ class CustomTabsToolbarFeatureTest {
        `when`(session.customTabConfig).thenReturn(customTabConfig)
        `when`(customTabConfig.menuItems).thenReturn(emptyList())

        feature.addMenuItems(listOf(CustomTabMenuItem("Share", mock())))
        feature.addMenuItems(session, listOf(CustomTabMenuItem("Share", mock())))

        verify(toolbar).setMenuBuilder(captor.capture())
        assertEquals(1, captor.value.items.size)
@@ -299,7 +300,7 @@ class CustomTabsToolbarFeatureTest {
        `when`(customTabConfig.menuItems).thenReturn(emptyList())
        `when`(builder.items).thenReturn(listOf(mock(), mock()))

        feature.addMenuItems(listOf(CustomTabMenuItem("Share", mock())))
        feature.addMenuItems(session, listOf(CustomTabMenuItem("Share", mock())))

        verify(toolbar).setMenuBuilder(captor.capture())

+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ permalink: /changelog/

* **feature-customtabs**
  * Added fact emitting.
  * Bugfix to call with app-contributed pending intents from menu items and action buttons.

# 0.50.0