Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d3ea2ab authored by Chaohui Wang's avatar Chaohui Wang
Browse files

tryStartMultiPaneDeepLink: Start search result deep link in same task

Change I91f9e5096ad02bd87e43bae03a2b3e69256be651 introduce
getTrampolineIntentForSearchResult() to fix search result issue.
But not update tryStartMultiPaneDeepLink(), this cl updates
tryStartMultiPaneDeepLink() accordingly.

Bug: 381127948
Flag: EXEMPT bug fix
Test: manual - search mobile data with multi panels
Change-Id: I7a4531280639047fac856dc302b8318c3143d3fa
parent 60ba7361
Loading
Loading
Loading
Loading
+23 −17
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.settings.activityembedding

import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
@@ -36,29 +35,36 @@ object EmbeddedDeepLinkUtils {
    private const val TAG = "EmbeddedDeepLinkUtils"

    @JvmStatic
    fun Context.tryStartMultiPaneDeepLink(
    @JvmOverloads
    fun tryStartMultiPaneDeepLink(
        context: Context,
        intent: Intent,
        highlightMenuKey: String? = null,
        isSearch: Boolean = false,
    ): Boolean {
        intent.putExtra(
            SettingsActivity.EXTRA_INITIAL_CALLING_PACKAGE,
            PasswordUtils.getCallingAppPackageName(activityToken),
            PasswordUtils.getCallingAppPackageName(context.activityToken),
        )
        val trampolineIntent: Intent
        if (intent.getBooleanExtra(SettingsActivity.EXTRA_IS_FROM_SLICE, false)) {
        val trampolineIntent =
            if (isSearch) {
                getTrampolineIntentForSearchResult(context, intent, highlightMenuKey)
            } else if (intent.getBooleanExtra(SettingsActivity.EXTRA_IS_FROM_SLICE, false)) {
                // Get menu key for slice deep link case.
            var sliceHighlightMenuKey: String? = intent.getStringExtra(
                var sliceHighlightMenuKey: String? =
                    intent.getStringExtra(
                        Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY
                    )
                if (sliceHighlightMenuKey.isNullOrEmpty()) {
                    sliceHighlightMenuKey = highlightMenuKey
                }
            trampolineIntent = getTrampolineIntent(intent, sliceHighlightMenuKey)
            trampolineIntent.setClass(this, DeepLinkHomepageActivityInternal::class.java)
                getTrampolineIntent(intent, sliceHighlightMenuKey).apply {
                    setClass(context, DeepLinkHomepageActivityInternal::class.java)
                }
            } else {
            trampolineIntent = getTrampolineIntent(intent, highlightMenuKey)
                getTrampolineIntent(intent, highlightMenuKey)
            }
        return startTrampolineIntent(trampolineIntent)
        return context.startTrampolineIntent(trampolineIntent)
    }

    /**
+13 −3
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Intent
import com.android.settings.activityembedding.ActivityEmbeddingUtils
import com.android.settings.activityembedding.EmbeddedDeepLinkUtils.tryStartMultiPaneDeepLink
import com.android.settingslib.spa.framework.util.SESSION_EXTERNAL
import com.android.settingslib.spa.framework.util.SESSION_SEARCH
import com.android.settingslib.spa.framework.util.appendSpaParams

data class SpaDestination(
@@ -31,15 +32,24 @@ data class SpaDestination(
    val highlightMenuKey: String? = null,
) {
    fun startFromExportedActivity(context: Context) {
        start(context, isSearch = false)
    }

    fun startFromSearch(context: Context) {
        start(context, isSearch = true)
    }

    private fun start(context: Context, isSearch: Boolean) {
        val intent =
            Intent(context, SpaActivity::class.java)
                .appendSpaParams(
                    destination = destination,
                    highlightItemKey = highlightItemKey,
                    sessionName = SESSION_EXTERNAL,
                    sessionName = if (isSearch) SESSION_SEARCH else SESSION_EXTERNAL,
                )
        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context) ||
            !context.tryStartMultiPaneDeepLink(intent, highlightMenuKey)
        if (
            !ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context) ||
                !tryStartMultiPaneDeepLink(context, intent, highlightMenuKey, isSearch)
        ) {
            context.startActivity(intent)
        }
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ class SettingsSpaSearchLandingActivity : SpaSearchLandingActivity() {

    override fun startSpaPage(destination: String, highlightItemKey: String) {
        SpaDestination(destination = destination, highlightItemKey = highlightItemKey)
            .startFromExportedActivity(this)
            .startFromSearch(this)
    }

    override fun startFragment(fragmentName: String, arguments: Bundle) {
+22 −2
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ class SpaDestinationTest {
        }

    @Test
    fun startFromExportedActivity() {
    fun startFromExportedActivity_hasCorrectDestination() {
        val spaDestination = SpaDestination(destination = DESTINATION)

        spaDestination.startFromExportedActivity(context)
@@ -48,7 +48,7 @@ class SpaDestinationTest {
    }

    @Test
    fun startFromExportedActivity_with() {
    fun startFromExportedActivity_withHighlightItemKey() {
        val spaDestination =
            SpaDestination(destination = DESTINATION, highlightItemKey = HIGHLIGHT_ITEM_KEY)

@@ -58,6 +58,26 @@ class SpaDestinationTest {
            .startActivity(argThat { getStringExtra(KEY_HIGHLIGHT_ITEM_KEY) == HIGHLIGHT_ITEM_KEY })
    }

    @Test
    fun startFromSearch_hasCorrectDestination() {
        val spaDestination = SpaDestination(destination = DESTINATION)

        spaDestination.startFromSearch(context)

        verify(context).startActivity(argThat { getStringExtra(KEY_DESTINATION) == DESTINATION })
    }

    @Test
    fun startFromSearch_withHighlightItemKey() {
        val spaDestination =
            SpaDestination(destination = DESTINATION, highlightItemKey = HIGHLIGHT_ITEM_KEY)

        spaDestination.startFromSearch(context)

        verify(context)
            .startActivity(argThat { getStringExtra(KEY_HIGHLIGHT_ITEM_KEY) == HIGHLIGHT_ITEM_KEY })
    }

    private companion object {
        const val DESTINATION = "Destination"
        const val HIGHLIGHT_ITEM_KEY = "highlight_item_key"