From d3b99535f23dada6c8c575cdf174795045f84e1e Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Wed, 6 Mar 2024 03:05:31 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=A6=E3=82=A3?= =?UTF-8?q?=E3=82=B8=E3=82=A7=E3=83=83=E3=83=88=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.json | 29 ++++++++++----- components/AndroidWidget/HelloWidget.jsx | 26 +++++++++++++ .../HelloWidgetPreviewScreen.jsx | 25 +++++++++++++ .../AndroidWidget/widget-task-handler.jsx | 37 +++++++++++++++++++ index.js | 11 ++++++ package.json | 3 +- yarn.lock | 5 +++ 7 files changed, 126 insertions(+), 10 deletions(-) create mode 100644 components/AndroidWidget/HelloWidget.jsx create mode 100644 components/AndroidWidget/HelloWidgetPreviewScreen.jsx create mode 100644 components/AndroidWidget/widget-task-handler.jsx create mode 100644 index.js diff --git a/app.json b/app.json index 19aa076..2f736cb 100644 --- a/app.json +++ b/app.json @@ -3,9 +3,24 @@ "name": "JR四国運行状況", "slug": "jrshikoku", "privacy": "public", - "platforms": [ - "ios", - "android" + "platforms": ["ios", "android"], + "plugins": [ + [ + "react-native-android-widget", + { + "widgets": [ + { + "name": "JR四国運行状況", + "label": "My Hello Widget", + "minWidth": "320dp", + "minHeight": "120dp", + "description": "This is my first widget", + "previewImage": "./assets/icon.png", + "updatePeriodMillis": 1800000 + } + ] + } + ] ], "version": "4.6", "orientation": "default", @@ -19,9 +34,7 @@ "fallbackToCacheTimeout": 0, "url": "https://u.expo.dev/398abf60-57a7-11e9-970c-8f04356d08bf" }, - "assetBundlePatterns": [ - "**/*" - ], + "assetBundlePatterns": ["**/*"], "ios": { "buildNumber": "31", "supportsTablet": true, @@ -33,9 +46,7 @@ "android": { "package": "jrshikokuinfo.xprocess.hrkn", "versionCode": 20, - "permissions": [ - "ACCESS_FINE_LOCATION" - ], + "permissions": ["ACCESS_FINE_LOCATION"], "googleServicesFile": "./google-services.json", "config": { "googleMaps": { diff --git a/components/AndroidWidget/HelloWidget.jsx b/components/AndroidWidget/HelloWidget.jsx new file mode 100644 index 0000000..af64fe1 --- /dev/null +++ b/components/AndroidWidget/HelloWidget.jsx @@ -0,0 +1,26 @@ +import React from "react"; +import { FlexWidget, TextWidget } from "react-native-android-widget"; + +export function HelloWidget() { + return ( + + + + ); +} diff --git a/components/AndroidWidget/HelloWidgetPreviewScreen.jsx b/components/AndroidWidget/HelloWidgetPreviewScreen.jsx new file mode 100644 index 0000000..c2fa761 --- /dev/null +++ b/components/AndroidWidget/HelloWidgetPreviewScreen.jsx @@ -0,0 +1,25 @@ +import * as React from "react"; +import { StyleSheet, View } from "react-native"; +import { WidgetPreview } from "react-native-android-widget"; + +import { HelloWidget } from "./HelloWidget"; + +export function HelloWidgetPreviewScreen() { + return ( + + } + width={320} + height={200} + /> + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: "center", + justifyContent: "center", + }, +}); diff --git a/components/AndroidWidget/widget-task-handler.jsx b/components/AndroidWidget/widget-task-handler.jsx new file mode 100644 index 0000000..e4c371a --- /dev/null +++ b/components/AndroidWidget/widget-task-handler.jsx @@ -0,0 +1,37 @@ +import React from "react"; +import { HelloWidget } from "./HelloWidget"; + +const nameToWidget = { + // Hello will be the **name** with which we will reference our widget. + Hello: HelloWidget, +}; + +export async function widgetTaskHandler(props) { + const widgetInfo = props.widgetInfo; + const Widget = nameToWidget[widgetInfo.widgetName]; + + switch (props.widgetAction) { + case "WIDGET_ADDED": + props.renderWidget(); + break; + + case "WIDGET_UPDATE": + // Not needed for now + break; + + case "WIDGET_RESIZED": + // Not needed for now + break; + + case "WIDGET_DELETED": + // Not needed for now + break; + + case "WIDGET_CLICK": + // Not needed for now + break; + + default: + break; + } +} diff --git a/index.js b/index.js new file mode 100644 index 0000000..9f717eb --- /dev/null +++ b/index.js @@ -0,0 +1,11 @@ +import { registerRootComponent } from "expo"; +import { registerWidgetTaskHandler } from "react-native-android-widget"; + +import App from "./App"; +import { widgetTaskHandler } from "./components/AndroidWidget/widget-task-handler"; + +// registerRootComponent calls AppRegistry.registerComponent('main', () => App); +// It also ensures that whether you load the app in Expo Go or in a native build, +// the environment is set up appropriately +registerRootComponent(App); +registerWidgetTaskHandler(widgetTaskHandler); diff --git a/package.json b/package.json index bb9b5d2..a581036 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "main": "node_modules/expo/AppEntry.js", + "main": "index.js", "scripts": { "start": "expo start", "android": "expo start --android", @@ -31,6 +31,7 @@ "react": "18.2.0", "react-native": "0.72.6", "react-native-actions-sheet": "0.8.21", + "react-native-android-widget": "^0.11.2", "react-native-auto-height-image": "^3.2.4", "react-native-elements": "^3.4.2", "react-native-gesture-handler": "~2.12.0", diff --git a/yarn.lock b/yarn.lock index f14e0f2..a62d5b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8684,6 +8684,11 @@ react-native-actions-sheet@0.8.21: resolved "https://registry.yarnpkg.com/react-native-actions-sheet/-/react-native-actions-sheet-0.8.21.tgz#d9175e7d5d862217f990b2ccc8a216fb4fc35b06" integrity sha512-WUtrGbPSlY8YuVSxKVJ36f3PrVMGMOQ5Cp5dtpurc71Uih4LEGGhEEk8yme/QOquiGsu77be0sZT4CrSUOSXag== +react-native-android-widget@^0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/react-native-android-widget/-/react-native-android-widget-0.11.2.tgz#541cc4931f6cf362b533d0e079a740ee595cd88e" + integrity sha512-Ro4inoMaXFtcMX/9p+O+e/Cm0ckg6tkbIB/PFdF+xX90+B/2sWjXDL9qgGRAsFN7Auj38hMqTl8bWBlImFCC2A== + react-native-auto-height-image@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/react-native-auto-height-image/-/react-native-auto-height-image-3.2.4.tgz#c7a95d4d9701055c680c8dc02076def1107f9522"