diff --git a/example/app.json b/example/app.json index 445654c6..2f3051a1 100644 --- a/example/app.json +++ b/example/app.json @@ -103,6 +103,7 @@ "@use-voltra/android-client", { "enableNotifications": true, + "widgetConfigurationRoute": "voltraui/android-widget-config", "widgets": [ { "id": "voltra", diff --git a/example/app/voltraui/[activityName].tsx b/example/app/voltraui/[activityName].tsx index 6531ec73..5feb48e5 100644 --- a/example/app/voltraui/[activityName].tsx +++ b/example/app/voltraui/[activityName].tsx @@ -1,13 +1,49 @@ import { useLocalSearchParams, useRouter } from 'expo-router' -import { StyleSheet, Text, View } from 'react-native' +import { useState } from 'react' +import { Alert, StyleSheet, Text, TextInput, View } from 'react-native' +import { + cancelWidgetConfiguration, + completeWidgetConfiguration, + setWidgetInstanceConfiguration, +} from '@use-voltra/android-client' import { Button } from '~/components/Button' export default function DeepLinkIndexScreen() { - const { activityName } = useLocalSearchParams<{ activityName: string }>() + const { activityName, appWidgetId, widgetId } = useLocalSearchParams<{ + activityName: string + appWidgetId?: string + widgetId?: string + }>() const router = useRouter() + const isWidgetConfig = activityName === 'android-widget-config' + const parsedAppWidgetId = typeof appWidgetId === 'string' ? Number(appWidgetId) : Number.NaN + const [label, setLabel] = useState('Hello') + const [saving, setSaving] = useState(false) + + const saveWidgetConfiguration = async () => { + if (!Number.isFinite(parsedAppWidgetId)) { + Alert.alert('Missing widget id', 'The configuration activity did not receive a valid appWidgetId.') + return + } + + setSaving(true) + try { + await setWidgetInstanceConfiguration(parsedAppWidgetId, 'label', label) + await completeWidgetConfiguration(parsedAppWidgetId) + } catch (error: any) { + Alert.alert('Error', error?.message || String(error)) + } finally { + setSaving(false) + } + } const goBack = () => { + if (isWidgetConfig) { + cancelWidgetConfiguration().catch(() => {}) + return + } + if (router.canGoBack()) { router.back() } else { @@ -15,6 +51,34 @@ export default function DeepLinkIndexScreen() { } } + if (isWidgetConfig) { + return ( + + + Configure widget instance + Widget type: {widgetId} + Instance: #{appWidgetId} + + + env.configuration.label + + + + +