Add errorMessage implementation for custom tab launch error

pull/1461/head
TM 1 year ago
parent f5673d4b8e
commit 6831c549a7

@ -39,6 +39,7 @@ import com.google.samples.apps.nowinandroid.ui.interests2pane.interestsListDetai
fun NiaNavHost(
appState: NiaAppState,
onShowSnackbar: suspend (String, String?) -> Boolean,
errorHandler: (String) -> Unit,
modifier: Modifier = Modifier,
startDestination: String = FOR_YOU_ROUTE,
) {
@ -57,6 +58,7 @@ fun NiaNavHost(
onBackClick = navController::popBackStack,
onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) },
onTopicClick = navController::navigateToInterests,
errorHandler = errorHandler,
)
interestsListDetailScreen()
}

@ -232,6 +232,7 @@ internal fun NiaApp(
duration = Short,
) == ActionPerformed
},
errorHandler = { message -> appState.addErrorMessage(message) }
)
}
}

@ -16,6 +16,7 @@
package com.google.samples.apps.nowinandroid.core.ui
import android.content.ActivityNotFoundException
import android.content.Context
import android.net.Uri
import androidx.annotation.ColorInt
@ -52,6 +53,7 @@ fun LazyStaggeredGridScope.newsFeed(
onNewsResourceViewed: (String) -> Unit,
onTopicClick: (String) -> Unit,
onExpandedCardClick: () -> Unit = {},
onLaunchFailed: () -> Unit = {},
) {
when (feedState) {
NewsFeedUiState.Loading -> Unit
@ -73,7 +75,7 @@ fun LazyStaggeredGridScope.newsFeed(
analyticsHelper.logNewsResourceOpened(
newsResourceId = userNewsResource.id,
)
launchCustomChromeTab(context, Uri.parse(userNewsResource.url), backgroundColor)
launchCustomChromeTab(context, Uri.parse(userNewsResource.url), backgroundColor, onLaunchFailed)
onNewsResourceViewed(userNewsResource.id)
},
@ -94,14 +96,18 @@ fun LazyStaggeredGridScope.newsFeed(
}
}
fun launchCustomChromeTab(context: Context, uri: Uri, @ColorInt toolbarColor: Int) {
fun launchCustomChromeTab(context: Context, uri: Uri, @ColorInt toolbarColor: Int, onLaunchFailed: () -> Unit) {
val customTabBarColor = CustomTabColorSchemeParams.Builder()
.setToolbarColor(toolbarColor).build()
val customTabsIntent = CustomTabsIntent.Builder()
.setDefaultColorSchemeParams(customTabBarColor)
.build()
try {
customTabsIntent.launchUrl(context, uri)
} catch (e: ActivityNotFoundException) {
onLaunchFailed()
}
}
/**

@ -38,6 +38,7 @@ fun LazyListScope.userNewsResourceCardItems(
onToggleBookmark: (item: UserNewsResource) -> Unit,
onNewsResourceViewed: (String) -> Unit,
onTopicClick: (String) -> Unit,
onLaunchFailed: () -> Unit = {},
itemModifier: Modifier = Modifier,
) = items(
items = items,
@ -57,7 +58,7 @@ fun LazyListScope.userNewsResourceCardItems(
analyticsHelper.logNewsResourceOpened(
newsResourceId = userNewsResource.id,
)
launchCustomChromeTab(context, resourceUrl, backgroundColor)
launchCustomChromeTab(context, resourceUrl, backgroundColor, onLaunchFailed)
onNewsResourceViewed(userNewsResource.id)
},
onTopicClick = onTopicClick,

@ -101,10 +101,14 @@ internal fun SearchRoute(
onTopicClick: (String) -> Unit,
modifier: Modifier = Modifier,
searchViewModel: SearchViewModel = hiltViewModel(),
errorHandler: (String) -> Unit,
) {
val recentSearchQueriesUiState by searchViewModel.recentSearchQueriesUiState.collectAsStateWithLifecycle()
val searchResultUiState by searchViewModel.searchResultUiState.collectAsStateWithLifecycle()
val searchQuery by searchViewModel.searchQuery.collectAsStateWithLifecycle()
val launchFailedString = stringResource(id = searchR.string.feature_search_custom_tab_activity_not_found)
SearchScreen(
modifier = modifier,
searchQuery = searchQuery,
@ -119,6 +123,7 @@ internal fun SearchRoute(
onBackClick = onBackClick,
onInterestsClick = onInterestsClick,
onTopicClick = onTopicClick,
onLaunchFailed = { errorHandler(launchFailedString) },
)
}
@ -137,6 +142,7 @@ internal fun SearchScreen(
onBackClick: () -> Unit = {},
onInterestsClick: () -> Unit = {},
onTopicClick: (String) -> Unit = {},
onLaunchFailed: () -> Unit = {},
) {
TrackScreenViewEvent(screenName = "Search")
Column(modifier = modifier) {
@ -193,6 +199,7 @@ internal fun SearchScreen(
onNewsResourcesCheckedChanged = onNewsResourcesCheckedChanged,
onNewsResourceViewed = onNewsResourceViewed,
onFollowButtonClick = onFollowButtonClick,
onLaunchFailed = onLaunchFailed,
)
}
}
@ -287,6 +294,7 @@ private fun SearchResultBody(
onNewsResourcesCheckedChanged: (String, Boolean) -> Unit,
onNewsResourceViewed: (String) -> Unit,
onFollowButtonClick: (String, Boolean) -> Unit,
onLaunchFailed: () -> Unit,
) {
val state = rememberLazyStaggeredGridState()
Box(
@ -361,6 +369,9 @@ private fun SearchResultBody(
onExpandedCardClick = {
onSearchTriggered(searchQuery)
},
onLaunchFailed = {
onLaunchFailed()
}
)
}
}

@ -30,6 +30,7 @@ fun NavGraphBuilder.searchScreen(
onBackClick: () -> Unit,
onInterestsClick: () -> Unit,
onTopicClick: (String) -> Unit,
errorHandler: (String) -> Unit,
) {
// TODO: Handle back stack for each top-level destination. At the moment each top-level
// destination may have own search screen's back stack.
@ -38,6 +39,7 @@ fun NavGraphBuilder.searchScreen(
onBackClick = onBackClick,
onInterestsClick = onInterestsClick,
onTopicClick = onTopicClick,
errorHandler = errorHandler
)
}
}

Loading…
Cancel
Save