From 6a15decadd174665d2ac79637f2f263fb45f3381 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Wed, 15 May 2024 10:12:49 +0000 Subject: [PATCH 01/25] =?UTF-8?q?=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.js | 2 ++ .../EachTrainInfo/TrainDataView.js | 6 ++-- .../EachTrainInfoCore.js | 35 +++++++------------ stateBox/useCurrentTrain.js | 6 +++- 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/App.js b/App.js index 6ba4a20..f8e7f4b 100644 --- a/App.js +++ b/App.js @@ -63,6 +63,8 @@ export function AppContainer() { { const { width, height } = useWindowDimensions(); const { isLandscape } = useDeviceOrientationChange(); - const { webview, getCurrentTrain } = useCurrentTrain(); + const { webview, getCurrentTrain, inject } = useCurrentTrain(); const [mapsStationData, setMapsStationData] = useState(undefined); useEffect(() => { getStationList2().then(setMapsStationData); @@ -51,10 +51,10 @@ export const TrainDataView = ({ } }); if (!test.length) return; - webview.current?.injectJavaScript( + navigate("Apps"); + inject( `MoveDisplayStation('${test[0].line}_${test[0].station.MyStation}_${test[0].station.Station_JP}');setStrings();` ); - navigate("Apps"); SheetManager.hide("EachTrainInfo"); }} > diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js index 0b99ec1..7b693a6 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore.js +++ b/components/ActionSheetComponents/EachTrainInfoCore.js @@ -235,12 +235,17 @@ export const EachTrainInfoCore = ({ } else { SheetManager.hide("EachTrainInfo").then(() => { //0.1秒待機してから開く - setTimeout(() => { - SheetManager.show("EachTrainInfo", { payload }); - }, 2); + setTimeout(() => SheetManager.show("EachTrainInfo", { payload }), 2); }); } }; + const headerItem = { + currentTrainData, + currentPosition, + nearTrainIDList, + openTrainInfo, + navigate, + }; return ( - } - longHeader={ - - } + shortHeader={} + longHeader={} topStickyContent={ } @@ -376,11 +365,11 @@ export const EachTrainInfoCore = ({ ) )} {tailStation.length != 0 && - tailStation.map((i, index) => + tailStation.map(({ station, dia }, index) => showTailStation.findIndex((d) => d == index) == -1 ? ( { - const array = openBackTrainInfo(i.station, trainData, i.dia); + const array = openBackTrainInfo(station, trainData, dia); if (!array) return; setTrainData(array); diff --git a/stateBox/useCurrentTrain.js b/stateBox/useCurrentTrain.js index 7a96cfb..73e91ac 100644 --- a/stateBox/useCurrentTrain.js +++ b/stateBox/useCurrentTrain.js @@ -38,7 +38,7 @@ export const CurrentTrainProvider = ({ children }) => { setCurrentTrainLoading("success"); }) .catch(() => { - alert("現在の全在線列車取得エラー/再取得します"); + //alert("現在の全在線列車取得エラー/再取得します"); fetch( "https://script.google.com/macros/s/AKfycby9Y2-Bm75J_WkbZimi7iS8v5r9wMa9wtzpdwES9sOGF4i6HIYEJOM60W6gM1gXzt1o/exec", HeaderConfig @@ -57,6 +57,9 @@ export const CurrentTrainProvider = ({ children }) => { }); }); }; + const inject = (i) => { + webview.current?.injectJavaScript(i); + }; useEffect(getCurrentTrain, []); //初回だけ現在の全在線列車取得 @@ -72,6 +75,7 @@ export const CurrentTrainProvider = ({ children }) => { currentTrainLoading, setCurrentTrainLoading, getCurrentTrain, + inject, }} > {children} From 644c08f4c62be58fe3cfe38a1586b659a33f1085 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Wed, 15 May 2024 10:39:48 +0000 Subject: [PATCH 02/25] =?UTF-8?q?=E7=8F=BE=E5=9C=A8=E5=9C=B0=E7=94=B1?= =?UTF-8?q?=E6=9D=A5=E3=81=AE=E8=A1=A8=E7=A4=BA=E3=81=AB=E5=B0=82=E7=94=A8?= =?UTF-8?q?=E3=82=A2=E3=82=A4=E3=82=B3=E3=83=B3=E3=82=92=E4=BB=98=E4=B8=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/駅名表/Sign.js | 86 ++++++++++++++++++++++-------------- menu.js | 1 + 2 files changed, 53 insertions(+), 34 deletions(-) diff --git a/components/駅名表/Sign.js b/components/駅名表/Sign.js index 38bc62f..391bfdd 100644 --- a/components/駅名表/Sign.js +++ b/components/駅名表/Sign.js @@ -1,6 +1,7 @@ import React, { useRef, useState, useEffect, useLayoutEffect } from "react"; import { View, Text, TouchableOpacity } from "react-native"; import { widthPercentageToDP as wp } from "react-native-responsive-screen"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; import LottieView from "lottie-react-native"; import { useInterval } from "../../lib/useInterval"; import { AS } from "../../storageControl"; @@ -9,7 +10,13 @@ import { useFavoriteStation } from "../../stateBox/useFavoriteStation"; import lineColorList from "../../assets/originData/lineColorList"; export default function Sign(props) { - const { currentStation, originalStationList, oP, oLP } = props; + const { + currentStation, + originalStationList, + oP, + oLP, + isCurrentStation = false, + } = props; const { favoriteStation, setFavoriteStation } = useFavoriteStation(); const [nexPrePosition, setNexPrePosition] = useState(0); @@ -92,39 +99,50 @@ export default function Sign(props) { - { - if (testButtonStatus) { - const otherData = favoriteStation.filter((d) => { - const compare = JSON.stringify(d); - const current = JSON.stringify(currentStation); - if (compare !== current) { - return true; - } else { - return false; - } - }); - AS.setItem("favoriteStation", JSON.stringify(otherData)); - setFavoriteStation(otherData); - } else { - let ret = favoriteStation; - ret.push(currentStation); - AS.setItem("favoriteStation", JSON.stringify(ret)); - setFavoriteStation(ret); - } - setTestButtonStatus(!testButtonStatus); - }} - > - - + {isCurrentStation ? ( + + + + ) : ( + { + if (testButtonStatus) { + const otherData = favoriteStation.filter((d) => { + const compare = JSON.stringify(d); + const current = JSON.stringify(currentStation); + if (compare !== current) { + return true; + } else { + return false; + } + }); + AS.setItem("favoriteStation", JSON.stringify(otherData)); + setFavoriteStation(otherData); + } else { + let ret = favoriteStation; + ret.push(currentStation); + AS.setItem("favoriteStation", JSON.stringify(ret)); + setFavoriteStation(ret); + } + setTestButtonStatus(!testButtonStatus); + }} + > + + + )} JR diff --git a/menu.js b/menu.js index 1606d78..929d182 100644 --- a/menu.js +++ b/menu.js @@ -172,6 +172,7 @@ export default function Menu({ getCurrentTrain }) { { const payload = { currentStation: From 1131101eb680f68cbdfae30b005c8389847474a3 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sat, 18 May 2024 15:42:18 +0000 Subject: [PATCH 03/25] =?UTF-8?q?=E7=8F=BE=E5=9C=A8=E5=9C=B0=E3=81=AE?= =?UTF-8?q?=E8=B5=B0=E8=A1=8C=E6=96=B9=E5=90=91=E3=81=AE=E5=B8=B3=E5=B0=BB?= =?UTF-8?q?=E5=90=88=E3=82=8F=E3=81=9B=E3=81=A8LED=E3=81=AE=E7=8F=BE?= =?UTF-8?q?=E5=9C=A8=E5=9C=B0=E8=A1=A8=E8=A8=98=E3=80=81=E9=81=8B=E8=A1=8C?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E3=81=AE=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=AE=E6=B6=88=E6=BB=85=E5=87=A6=E7=90=86=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EachTrainInfo/StateBox.js | 4 +- .../EachTrainInfo/TrainDataView.js | 4 +- .../EachTrainInfoCore.js | 42 ++++++++++++++++--- components/発車時刻表/LED_vidion.js | 27 ++++++++++-- lib/eachTrainInfoCoreLib/getStationData.js | 14 ++++++- stateBox/useCurrentTrain.js | 11 ++++- 6 files changed, 88 insertions(+), 14 deletions(-) diff --git a/components/ActionSheetComponents/EachTrainInfo/StateBox.js b/components/ActionSheetComponents/EachTrainInfo/StateBox.js index c26f41b..3258cc0 100644 --- a/components/ActionSheetComponents/EachTrainInfo/StateBox.js +++ b/components/ActionSheetComponents/EachTrainInfo/StateBox.js @@ -17,7 +17,9 @@ export const StateBox = ({ text, title, style, mode }) => ( {text.split("~")[0]} - + + {mode == 2 ? "→" : "↓"} + {text.split("~")[1]} diff --git a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js index 2f0ff15..9781b1d 100644 --- a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js +++ b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js @@ -66,11 +66,11 @@ export const TrainDataView = ({ ? `${ currentTrainData?.Pos.replace("(下り)", "") .replace("(上り)", "") - .split("~")[0] + .split("~")[currentTrainData?.Direction == 1 ? 0 : 1] }~${ currentTrainData?.Pos.replace("(下り)", "") .replace("(上り)", "") - .split("~")[1] + .split("~")[currentTrainData?.Direction == 1 ? 1 : 0] }` : currentTrainData?.Pos } diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js index 7b693a6..828e66e 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore.js +++ b/components/ActionSheetComponents/EachTrainInfoCore.js @@ -7,6 +7,7 @@ import { StyleSheet, useWindowDimensions, BackHandler, + Linking, } from "react-native"; import { Ionicons } from "@expo/vector-icons"; import { SheetManager } from "react-native-actions-sheet"; @@ -25,7 +26,7 @@ import { DynamicHeaderScrollView } from "../DynamicHeaderScrollView"; import { LongHeader } from "./EachTrainInfo/LongHeader"; import { ShortHeader } from "./EachTrainInfo/ShortHeader"; import { ScrollStickyContent } from "./EachTrainInfo/ScrollStickyContent"; -import { getStationData } from "../../lib/eachTrainInfoCoreLib/getStationData"; +import { getStationID } from "../../lib/eachTrainInfoCoreLib/getStationData"; import { findReversalPoints } from "../../lib/eachTrainInfoCoreLib/findReversalPoints"; import { migrateTrainName } from "../../lib/eachTrainInfoCoreLib/migrateTrainName"; import { getType } from "../../lib/eachTrainInfoCoreLib/getType"; @@ -193,12 +194,20 @@ export const EachTrainInfoCore = ({ const pos = currentTrainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~"); - setCurrentPosition([ - getStationData(pos[0], stationList), - getStationData(pos[1], stationList), - ]); + const direction = parseInt(currentTrainData?.Direction) || 0; + if (direction == 0) { + setCurrentPosition([ + getStationID(pos[1], stationList), + getStationID(pos[0], stationList), + ]); + } else { + setCurrentPosition([ + getStationID(pos[0], stationList), + getStationID(pos[1], stationList), + ]); + } } else { - setCurrentPosition([getStationData(currentTrainData?.Pos, stationList)]); + setCurrentPosition([getStationID(currentTrainData?.Pos, stationList)]); } }, [currentTrainData]); @@ -239,6 +248,7 @@ export const EachTrainInfoCore = ({ }); } }; + const headerItem = { currentTrainData, currentPosition, @@ -350,6 +360,26 @@ export const EachTrainInfoCore = ({ trainList={trainList} trueTrainID={trueTrainID} /> + {!trainData.length && ( + + Linking.openURL(`https://twitter.com/search?q=${data.trainNum}`) + } + style={{ + padding: 10, + flexDirection: "row", + borderColor: "blue", + borderWidth: 1, + margin: 10, + borderRadius: 5, + alignItems: "center", + }} + > + + Twitterで検索 + + + )} {trainData.map((i, index) => i.split(",")[1] == "提" ? ( diff --git a/components/発車時刻表/LED_vidion.js b/components/発車時刻表/LED_vidion.js index e34d69f..c7b5596 100644 --- a/components/発車時刻表/LED_vidion.js +++ b/components/発車時刻表/LED_vidion.js @@ -164,14 +164,20 @@ export default function LED_vision(props) { true ); useEffect(() => { - if (!areaInfo) return () => {}; + if (!areaInfo) { + setAreaString(""); + return () => {}; + } setAreaString( areaInfo.substring(move, areaInfo.length) + areaInfo.substring(0, move) ); }, [move]); useEffect(() => { - if (!areaInfo) return () => {}; + if (!areaInfo) { + setAreaStringLength(0); + return () => {}; + } setAreaStringLength(areaInfo.length); }, [areaInfo]); @@ -336,10 +342,24 @@ const EachData = ({ setTrain(customTrainDataDetector(d.train)); }, [currentTrain, d.train, trainDescriptionSwitch]); // 土讃線複数存在対策 + const currentTrainData = checkDuplicateTrainData( + currentTrain.filter((a) => a.num == d.train) + ); const trainDelayStatus = getTrainDelayStatus( - checkDuplicateTrainData(currentTrain.filter((a) => a.num == d.train)), + currentTrainData, station.Station_JP ); + const trainPositionText = currentTrainData?.Pos.match("~") + ? `現在地:${ + currentTrainData?.Pos.replace("(下り)", "") + .replace("(上り)", "") + .split("~")[currentTrainData?.Direction == 1 ? 0 : 1] + }→${ + currentTrainData?.Pos.replace("(下り)", "") + .replace("(上り)", "") + .split("~")[currentTrainData?.Direction == 1 ? 1 : 0] + }間を走行中` + : `現在地:${currentTrainData?.Pos}`; return ( <> + {trainDescriptionSwitch && } {trainDescriptionSwitch && !!train.info && ( )} diff --git a/lib/eachTrainInfoCoreLib/getStationData.js b/lib/eachTrainInfoCoreLib/getStationData.js index 20b386a..35e4631 100644 --- a/lib/eachTrainInfoCoreLib/getStationData.js +++ b/lib/eachTrainInfoCoreLib/getStationData.js @@ -1,7 +1,7 @@ // 駅名から駅情報を取得する //stationName: 駅名 //stationList: 駅情報リスト -export const getStationData = (stationName, stationList) => { +export const getStationID = (stationName, stationList) => { const Stations = stationList.map((a) => a.filter((d) => d.StationName == stationName) ); @@ -13,3 +13,15 @@ export const getStationData = (stationName, stationList) => { if (!Station[0]) return []; return Station.map((d) => d.StationNumber)[0]; }; +export const getStationName = (stationId, stationList) => { + const Stations = stationList.map((a) => + a.filter((d) => d.StationNumber == stationId) + ); + const Station = + Stations && + Stations.reduce((newArray, e) => { + return newArray.concat(e); + }, []); + if (!Station[0]) return []; + return Station.map((d) => d.StaitonName)[0]; +}; diff --git a/stateBox/useCurrentTrain.js b/stateBox/useCurrentTrain.js index 73e91ac..e49290a 100644 --- a/stateBox/useCurrentTrain.js +++ b/stateBox/useCurrentTrain.js @@ -31,7 +31,16 @@ export const CurrentTrainProvider = ({ children }) => { .then((response) => response.json()) .then((d) => d.data) .then((d) => - d.map((x) => ({ num: x.TrainNum, delay: x.delay, Pos: x.Pos })) + d.map((x) => ({ + Index: x.Index, + num: x.TrainNum, + delay: x.delay, + Pos: x.Pos, + PosNum: x.PosNum, + Direction: x.Direction, + Type: x.Type, + Line: x.Line, + })) ) .then((d) => { setCurrentTrain(d); From f85c79ab2c511e0c63c89b50b49ce95f74f889bb Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 21 May 2024 10:06:08 +0000 Subject: [PATCH 04/25] =?UTF-8?q?=E3=82=A6=E3=82=A3=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=81=AE=E3=82=B3=E3=82=A2=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/AndroidWidget/InfoWidget.jsx | 95 +++++++++++++++ .../AndroidWidget/widget-task-handler.jsx | 37 +++++- components/Settings/WidgetSettings.js | 111 ++++++++++++------ 3 files changed, 201 insertions(+), 42 deletions(-) create mode 100644 components/AndroidWidget/InfoWidget.jsx diff --git a/components/AndroidWidget/InfoWidget.jsx b/components/AndroidWidget/InfoWidget.jsx new file mode 100644 index 0000000..8badfd2 --- /dev/null +++ b/components/AndroidWidget/InfoWidget.jsx @@ -0,0 +1,95 @@ +import React from "react"; +import { + FlexWidget, + TextWidget, + ListWidget, +} from "react-native-android-widget"; + +export function InfoWidget({ time, delayString }) { + return ( + + + + + + + + {delayString ? ( + + + + ) : ( + + )} + + + ); +} + +const FlexText = ({ flex, text }) => ( + + + +); diff --git a/components/AndroidWidget/widget-task-handler.jsx b/components/AndroidWidget/widget-task-handler.jsx index 5b7ae14..5f81036 100644 --- a/components/AndroidWidget/widget-task-handler.jsx +++ b/components/AndroidWidget/widget-task-handler.jsx @@ -2,10 +2,30 @@ import React from "react"; import { TraInfoEXWidget } from "./TraInfoEXWidget"; import dayjs from "dayjs"; import { ToastAndroid } from "react-native"; +import { InfoWidget } from "./InfoWidget"; +import { AS } from "../../storageControl"; export const nameToWidget = { // Hello will be the **name** with which we will reference our widget. JR_shikoku_train_info: TraInfoEXWidget, + Info_Widget: InfoWidget, +}; + +export const getInfoString = async () => { + // Fetch data from the server + const time = dayjs().format("HH:mm"); + const text = await fetch( + "https://script.google.com/macros/s/AKfycbz80LcaEUrhnlEsLkJy0LG2IRO3DBVQhfNmN1d_0f_HvtsujNQpxM90SrV9yKWH_JG1Ww/exec" + ) + .then((response) => response.text()) + .then((data) => { + if (data !== "") { + return data.split("^"); + } + return null; + }); + ToastAndroid.show(`${text}`, ToastAndroid.SHORT); + return { time, text }; }; export const getDelayData = async () => { @@ -25,20 +45,29 @@ export const getDelayData = async () => { return { time, delayString }; }; export async function widgetTaskHandler(props) { - const widgetInfo = props.widgetInfo; - const Widget = nameToWidget[widgetInfo.widgetName]; + const WidgetName = await AS.getItem( + `widgetType/${props.widgetInfo.widgetId}` + ).catch((e) => "JR_shikoku_train_info"); ToastAndroid.show( `Widget Action: ${JSON.stringify(props.widgetInfo.widgetId)}`, ToastAndroid.SHORT ); - const { time, delayString } = await getDelayData(); + ToastAndroid.show(`Widget Name: ${WidgetName}`, ToastAndroid.SHORT); switch (props.widgetAction) { case "WIDGET_ADDED": case "WIDGET_UPDATE": case "WIDGET_CLICK": case "WIDGET_RESIZED": // Not needed for now - props.renderWidget(); + if (WidgetName === "JR_shikoku_train_info") { + const Widget = nameToWidget[WidgetName]; + const { time, delayString } = await getDelayData(); + props.renderWidget(); + } else if (WidgetName === "Info_Widget") { + const Widget = nameToWidget[WidgetName]; + const { time, text } = await getInfoString(); + props.renderWidget(); + } break; diff --git a/components/Settings/WidgetSettings.js b/components/Settings/WidgetSettings.js index 5b08b0c..38633b2 100644 --- a/components/Settings/WidgetSettings.js +++ b/components/Settings/WidgetSettings.js @@ -5,13 +5,16 @@ import { CheckBox } from "react-native-elements"; import { TripleSwitchArea } from "../atom/TripleSwitchArea"; import { getWidgetInfo, WidgetPreview } from "react-native-android-widget"; import { TraInfoEXWidget } from "../AndroidWidget/TraInfoEXWidget"; +import { AS } from "../../storageControl"; import { getDelayData, nameToWidget, + getInfoString, } from "../AndroidWidget/widget-task-handler"; import { ListItem } from "native-base"; export const WidgetSettings = ({ navigate }) => { + const { JR_shikoku_train_info, Info_Widget } = nameToWidget; const [widgetList, setWidgetList] = useState([]); useEffect(() => { const d = []; @@ -28,14 +31,18 @@ export const WidgetSettings = ({ navigate }) => { }); setWidgetList(d); }, []); - const [time, setTime] = useState(time); const [delayString, setDelayString] = useState(delayString); + const [trainInfo, setTrainInfo] = useState(); useEffect(() => { getDelayData().then(({ time, delayString }) => { setTime(time); setDelayString(delayString); }); + getInfoString().then(({ time, text }) => { + setTime(time); + setTrainInfo(text); + }); }, []); return ( @@ -90,18 +97,31 @@ export const WidgetSettings = ({ navigate }) => { margin: 10, }} > - {Object.keys(nameToWidget).map((Name) => { - const Data = nameToWidget[Name]; - return ( - ( - - )} - width={400} - height={250} - /> - ); - })} + ( + + )} + width={400} + height={250} + /> + + + ( + + )} + width={400} + height={250} + /> @@ -129,33 +149,48 @@ export const WidgetSettings = ({ navigate }) => { 名前 - {widgetList.map((widget) => ( - - { + return ( + { + //widget.widgetNameで定義されてないもう一つのウィジェットを選択する + if (widget.widgetName === "Info_Widget") { + AS.setItem( + `widgetType/${widget.widgetId}`, + "JR_shikoku_train_info" + ); + } else { + AS.setItem(`widgetType/${widget.widgetId}`, "Info_Widget"); + } }} > - {widget.widgetId} - - - {widget.widgetName} - - - ))} + + {widget.widgetId} + + + {widget.widgetName} + + + ); + })} Date: Tue, 21 May 2024 10:16:31 +0000 Subject: [PATCH 05/25] =?UTF-8?q?AS=E3=81=AEremove=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=80=81=E3=82=A6=E3=82=A3=E3=82=B8=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=83=88=E3=82=92=E5=8B=95=E7=9A=84=E3=81=A7=E3=81=AA=E3=81=8F?= =?UTF-8?q?=E9=9D=99=E7=9A=84=E3=81=AB=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/AndroidWidget/widget-task-handler.jsx | 12 +++++------- storageControl.js | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/components/AndroidWidget/widget-task-handler.jsx b/components/AndroidWidget/widget-task-handler.jsx index 5f81036..d6b811d 100644 --- a/components/AndroidWidget/widget-task-handler.jsx +++ b/components/AndroidWidget/widget-task-handler.jsx @@ -6,7 +6,6 @@ import { InfoWidget } from "./InfoWidget"; import { AS } from "../../storageControl"; export const nameToWidget = { - // Hello will be the **name** with which we will reference our widget. JR_shikoku_train_info: TraInfoEXWidget, Info_Widget: InfoWidget, }; @@ -58,21 +57,20 @@ export async function widgetTaskHandler(props) { case "WIDGET_UPDATE": case "WIDGET_CLICK": case "WIDGET_RESIZED": - // Not needed for now if (WidgetName === "JR_shikoku_train_info") { - const Widget = nameToWidget[WidgetName]; const { time, delayString } = await getDelayData(); - props.renderWidget(); + props.renderWidget( + + ); } else if (WidgetName === "Info_Widget") { - const Widget = nameToWidget[WidgetName]; const { time, text } = await getInfoString(); - props.renderWidget(); + props.renderWidget(); } break; case "WIDGET_DELETED": - // Not needed for now + AS.removeItem(`widgetType/${props.widgetInfo.widgetId}`); break; default: break; diff --git a/storageControl.js b/storageControl.js index 4f43140..939a943 100644 --- a/storageControl.js +++ b/storageControl.js @@ -11,4 +11,5 @@ export const AS = { // if set to null, then it will never expire. expires: null, }), + removeItem: (key) => storage.remove({ key }), }; From 170bc36afa0fb9a6e9eecd6ec74fec337067dc2e Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 21 May 2024 10:19:09 +0000 Subject: [PATCH 06/25] =?UTF-8?q?props=E7=B5=B1=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AndroidWidget/widget-task-handler.jsx | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/components/AndroidWidget/widget-task-handler.jsx b/components/AndroidWidget/widget-task-handler.jsx index d6b811d..7878f6f 100644 --- a/components/AndroidWidget/widget-task-handler.jsx +++ b/components/AndroidWidget/widget-task-handler.jsx @@ -44,33 +44,38 @@ export const getDelayData = async () => { return { time, delayString }; }; export async function widgetTaskHandler(props) { + const { + widgetInfo, + widgetAction, + renderWidget, + clickAction, + clickActionData, + } = props; const WidgetName = await AS.getItem( - `widgetType/${props.widgetInfo.widgetId}` + `widgetType/${widgetInfo.widgetId}` ).catch((e) => "JR_shikoku_train_info"); ToastAndroid.show( - `Widget Action: ${JSON.stringify(props.widgetInfo.widgetId)}`, + `Widget Action: ${JSON.stringify(widgetInfo.widgetId)}`, ToastAndroid.SHORT ); ToastAndroid.show(`Widget Name: ${WidgetName}`, ToastAndroid.SHORT); - switch (props.widgetAction) { + switch (widgetAction) { case "WIDGET_ADDED": case "WIDGET_UPDATE": case "WIDGET_CLICK": case "WIDGET_RESIZED": if (WidgetName === "JR_shikoku_train_info") { const { time, delayString } = await getDelayData(); - props.renderWidget( - - ); + renderWidget(); } else if (WidgetName === "Info_Widget") { const { time, text } = await getInfoString(); - props.renderWidget(); + renderWidget(); } break; case "WIDGET_DELETED": - AS.removeItem(`widgetType/${props.widgetInfo.widgetId}`); + AS.removeItem(`widgetType/${widgetInfo.widgetId}`); break; default: break; From 9447678f85ede9671ff67c17a3767dac9033ccfe Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 21 May 2024 10:23:51 +0000 Subject: [PATCH 07/25] =?UTF-8?q?switch=E3=81=AB=E5=88=86=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AndroidWidget/widget-task-handler.jsx | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/components/AndroidWidget/widget-task-handler.jsx b/components/AndroidWidget/widget-task-handler.jsx index 7878f6f..eab1997 100644 --- a/components/AndroidWidget/widget-task-handler.jsx +++ b/components/AndroidWidget/widget-task-handler.jsx @@ -64,12 +64,26 @@ export async function widgetTaskHandler(props) { case "WIDGET_UPDATE": case "WIDGET_CLICK": case "WIDGET_RESIZED": - if (WidgetName === "JR_shikoku_train_info") { - const { time, delayString } = await getDelayData(); - renderWidget(); - } else if (WidgetName === "Info_Widget") { - const { time, text } = await getInfoString(); - renderWidget(); + switch (WidgetName) { + case "JR_shikoku_train_info": { + const { time, delayString } = await getDelayData(); + renderWidget( + + ); + break; + } + case "Info_Widget": { + const { time, text } = await getInfoString(); + renderWidget(); + break; + } + default: { + const { time, delayString } = await getDelayData(); + renderWidget( + + ); + break; + } } break; From 9df3d0c62ad4a32b9aec825c9c86147fa5def8dc Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 21 May 2024 10:25:10 +0000 Subject: [PATCH 08/25] =?UTF-8?q?=E5=90=8D=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/AndroidWidget/InfoWidget.jsx | 6 +++--- components/AndroidWidget/widget-task-handler.jsx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/components/AndroidWidget/InfoWidget.jsx b/components/AndroidWidget/InfoWidget.jsx index 8badfd2..7363143 100644 --- a/components/AndroidWidget/InfoWidget.jsx +++ b/components/AndroidWidget/InfoWidget.jsx @@ -5,7 +5,7 @@ import { ListWidget, } from "react-native-android-widget"; -export function InfoWidget({ time, delayString }) { +export function InfoWidget({ time, text }) { return ( - {delayString ? ( + {text ? ( - + ) : ( ); + renderWidget(); break; } default: { From 1fafe1649c1cacd270760cf16fbcaf732638feb5 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 21 May 2024 10:33:41 +0000 Subject: [PATCH 09/25] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E6=95=B4?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/AndroidWidget/InfoWidget.jsx | 19 ++++++++ components/AndroidWidget/TraInfoEXWidget.jsx | 18 ++++++++ .../AndroidWidget/widget-task-handler.jsx | 46 ++----------------- components/Settings/WidgetSettings.js | 13 ++---- 4 files changed, 44 insertions(+), 52 deletions(-) diff --git a/components/AndroidWidget/InfoWidget.jsx b/components/AndroidWidget/InfoWidget.jsx index 7363143..f70c8cc 100644 --- a/components/AndroidWidget/InfoWidget.jsx +++ b/components/AndroidWidget/InfoWidget.jsx @@ -4,6 +4,25 @@ import { TextWidget, ListWidget, } from "react-native-android-widget"; +import dayjs from "dayjs"; +import { ToastAndroid } from "react-native"; + +export const getInfoString = async () => { + // Fetch data from the server + const time = dayjs().format("HH:mm"); + const text = await fetch( + "https://script.google.com/macros/s/AKfycbz80LcaEUrhnlEsLkJy0LG2IRO3DBVQhfNmN1d_0f_HvtsujNQpxM90SrV9yKWH_JG1Ww/exec" + ) + .then((response) => response.text()) + .then((data) => { + if (data !== "") { + return data.split("^"); + } + return null; + }); + ToastAndroid.show(`${text}`, ToastAndroid.SHORT); + return { time, text }; +}; export function InfoWidget({ time, text }) { return ( diff --git a/components/AndroidWidget/TraInfoEXWidget.jsx b/components/AndroidWidget/TraInfoEXWidget.jsx index d55cb43..3cfc161 100644 --- a/components/AndroidWidget/TraInfoEXWidget.jsx +++ b/components/AndroidWidget/TraInfoEXWidget.jsx @@ -4,7 +4,25 @@ import { TextWidget, ListWidget, } from "react-native-android-widget"; +import dayjs from "dayjs"; +import { ToastAndroid } from "react-native"; +export const getDelayData = async () => { + // Fetch data from the server + const time = dayjs().format("HH:mm"); + const delayString = await fetch( + "https://script.google.com/macros/s/AKfycbyKxch7z7l8e07LXulRHqxjVoIiB13kcgvoToLE-rqlxLmLSKdlmqz0FI1F2EuA7Zfg/exec" + ) + .then((response) => response.text()) + .then((data) => { + if (data !== "") { + return data.split("^"); + } + return null; + }); + ToastAndroid.show(`${delayString}`, ToastAndroid.SHORT); + return { time, delayString }; +}; export function TraInfoEXWidget({ time, delayString }) { return ( { - // Fetch data from the server - const time = dayjs().format("HH:mm"); - const text = await fetch( - "https://script.google.com/macros/s/AKfycbz80LcaEUrhnlEsLkJy0LG2IRO3DBVQhfNmN1d_0f_HvtsujNQpxM90SrV9yKWH_JG1Ww/exec" - ) - .then((response) => response.text()) - .then((data) => { - if (data !== "") { - return data.split("^"); - } - return null; - }); - ToastAndroid.show(`${text}`, ToastAndroid.SHORT); - return { time, text }; -}; - -export const getDelayData = async () => { - // Fetch data from the server - const time = dayjs().format("HH:mm"); - const delayString = await fetch( - "https://script.google.com/macros/s/AKfycbyKxch7z7l8e07LXulRHqxjVoIiB13kcgvoToLE-rqlxLmLSKdlmqz0FI1F2EuA7Zfg/exec" - ) - .then((response) => response.text()) - .then((data) => { - if (data !== "") { - return data.split("^"); - } - return null; - }); - ToastAndroid.show(`${delayString}`, ToastAndroid.SHORT); - return { time, delayString }; -}; export async function widgetTaskHandler(props) { const { widgetInfo, @@ -65,18 +31,12 @@ export async function widgetTaskHandler(props) { case "WIDGET_CLICK": case "WIDGET_RESIZED": switch (WidgetName) { - case "JR_shikoku_train_info": { - const { time, delayString } = await getDelayData(); - renderWidget( - - ); - break; - } case "Info_Widget": { const { time, text } = await getInfoString(); renderWidget(); break; } + case "JR_shikoku_train_info": default: { const { time, delayString } = await getDelayData(); renderWidget( diff --git a/components/Settings/WidgetSettings.js b/components/Settings/WidgetSettings.js index 38633b2..20077d3 100644 --- a/components/Settings/WidgetSettings.js +++ b/components/Settings/WidgetSettings.js @@ -4,13 +4,10 @@ import { SwitchArea } from "../atom/SwitchArea"; import { CheckBox } from "react-native-elements"; import { TripleSwitchArea } from "../atom/TripleSwitchArea"; import { getWidgetInfo, WidgetPreview } from "react-native-android-widget"; -import { TraInfoEXWidget } from "../AndroidWidget/TraInfoEXWidget"; +import { getDelayData } from "../AndroidWidget/TraInfoEXWidget"; +import { getInfoString } from "../AndroidWidget/InfoWidget"; import { AS } from "../../storageControl"; -import { - getDelayData, - nameToWidget, - getInfoString, -} from "../AndroidWidget/widget-task-handler"; +import { nameToWidget } from "../AndroidWidget/widget-task-handler"; import { ListItem } from "native-base"; export const WidgetSettings = ({ navigate }) => { @@ -116,9 +113,7 @@ export const WidgetSettings = ({ navigate }) => { }} > ( - - )} + renderWidget={() => } width={400} height={250} /> From 29593b497c6f19b2807c79a8aefce44e66855eb9 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 21 May 2024 14:07:06 +0000 Subject: [PATCH 10/25] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E7=94=BB=E9=9D=A2?= =?UTF-8?q?=E3=81=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/Settings/WidgetSettings.js | 122 ++++++++++++++------------ 1 file changed, 65 insertions(+), 57 deletions(-) diff --git a/components/Settings/WidgetSettings.js b/components/Settings/WidgetSettings.js index 20077d3..c4fb501 100644 --- a/components/Settings/WidgetSettings.js +++ b/components/Settings/WidgetSettings.js @@ -12,25 +12,21 @@ import { ListItem } from "native-base"; export const WidgetSettings = ({ navigate }) => { const { JR_shikoku_train_info, Info_Widget } = nameToWidget; + const [time, setTime] = useState(); + const [delayString, setDelayString] = useState(); + const [trainInfo, setTrainInfo] = useState(); const [widgetList, setWidgetList] = useState([]); - useEffect(() => { + const reload = async () => { const d = []; - Object.keys(nameToWidget).forEach((element) => { - const widgetInfo = getWidgetInfo(element); - widgetInfo.then((s) => { - if (s.length > 0) { - s.forEach((elem) => { - console.log(elem); - d.push(elem); - }); - } - }); + const data = await getWidgetInfo("JR_shikoku_train_info"); + data.forEach((elem) => { + d.push(elem.widgetId); }); setWidgetList(d); - }, []); - const [time, setTime] = useState(time); - const [delayString, setDelayString] = useState(delayString); - const [trainInfo, setTrainInfo] = useState(); + }; + + useEffect(reload, []); + useEffect(() => { getDelayData().then(({ time, delayString }) => { setTime(time); @@ -144,48 +140,9 @@ export const WidgetSettings = ({ navigate }) => { 名前 - {widgetList.map((widget) => { - return ( - { - //widget.widgetNameで定義されてないもう一つのウィジェットを選択する - if (widget.widgetName === "Info_Widget") { - AS.setItem( - `widgetType/${widget.widgetId}`, - "JR_shikoku_train_info" - ); - } else { - AS.setItem(`widgetType/${widget.widgetId}`, "Info_Widget"); - } - }} - > - - {widget.widgetId} - - - {widget.widgetName} - - - ); - })} + {widgetList.map((id) => ( + + ))} ( /> ); +const WidgetList = ({ id }) => { + const [widgetConfig, setWidgetConfig] = useState(""); + const reload = () => { + AS.getItem(`widgetType/${id}`) + .then((widgetType) => { + setWidgetConfig(widgetType); + }) + .catch((e) => { + setWidgetConfig("JR_shikoku_train_info"); + }); + }; + useEffect(reload, [id]); + return ( + { + //widget.widgetNameで定義されてないもう一つのウィジェットを選択する + if (widgetConfig === "Info_Widget") { + AS.setItem(`widgetType/${id}`, "JR_shikoku_train_info"); + } else { + AS.setItem(`widgetType/${id}`, "Info_Widget"); + } + reload(); + }} + > + + {id} + + + {widgetConfig} + + + ); +}; From 69f9f1279f2ed61e252629093e1a569f5011365a Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 21 May 2024 14:44:30 +0000 Subject: [PATCH 11/25] =?UTF-8?q?=E3=83=88=E3=82=B0=E3=83=AB=E3=82=B9?= =?UTF-8?q?=E3=82=A4=E3=83=83=E3=83=81=E3=81=AE=E5=9B=BA=E5=AE=9A=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/発車時刻表/LED_vidion.js | 47 ++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/components/発車時刻表/LED_vidion.js b/components/発車時刻表/LED_vidion.js index c7b5596..aeff31a 100644 --- a/components/発車時刻表/LED_vidion.js +++ b/components/発車時刻表/LED_vidion.js @@ -13,6 +13,7 @@ import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData"; import { useCurrentTrain } from "../../stateBox/useCurrentTrain"; import { useAreaInfo } from "../../stateBox/useAreaInfo"; import { SheetManager } from "react-native-actions-sheet"; +import { AS } from "../../storageControl"; /** * @@ -59,6 +60,31 @@ export default function LED_vision(props) { const [trainDescriptionSwitch, setTrainDescriptionSwitch] = useState(false); const { areaInfo } = useAreaInfo(); + useEffect(() => { + AS.getItem("LEDSettings/trainIDSwitch").then((data) => { + console.log(data); + if (data == "true") { + setTrainIDSwitch(true); + } else { + setTrainIDSwitch(false); + } + }); + AS.getItem("LEDSettings/trainDescriptionSwitch").then((data) => { + if (data == "true") { + setTrainDescriptionSwitch(true); + } else { + setTrainDescriptionSwitch(false); + } + }); + AS.getItem("LEDSettings/finalSwitch").then((data) => { + if (data == "true") { + setFinalSwitch(true); + } else { + setFinalSwitch(false); + } + }); + }, []); + useEffect(() => { // 現在の駅に停車するダイヤを作成する副作用[列車ダイヤと現在駅情報] if (!trainDiagram) { @@ -288,16 +314,31 @@ const Footer = (props) => { return ( 種別名 / 列番 - + { + AS.setItem("LEDSettings/trainIDSwitch", value.toString()); + setTrainIDSwitch(value); + }} + /> 列車情報 { + AS.setItem("LEDSettings/trainDescriptionSwitch", value.toString()); + setTrainDescriptionSwitch(value); + }} /> 当駅止表示 - + { + AS.setItem("LEDSettings/finalSwitch", value.toString()); + setFinalSwitch(value); + }} + /> ); }; From 0dad51cda22e6fe2311a0dbddcf61094ff67639b Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Wed, 22 May 2024 08:00:44 +0000 Subject: [PATCH 12/25] =?UTF-8?q?Android=E3=81=A7=E3=82=82=E5=8D=B3?= =?UTF-8?q?=E6=99=82=E6=9B=B4=E6=96=B0=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/ActionSheetComponents/EachTrainInfo/TrainDataView.js | 2 +- components/FavoriteList.js | 2 +- components/trainMenu.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js index 9781b1d..6b84549 100644 --- a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js +++ b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js @@ -53,7 +53,7 @@ export const TrainDataView = ({ if (!test.length) return; navigate("Apps"); inject( - `MoveDisplayStation('${test[0].line}_${test[0].station.MyStation}_${test[0].station.Station_JP}');setStrings();` + `MoveDisplayStation('${test[0].line}_${test[0].station.MyStation}_${test[0].station.Station_JP}');document.getElementById("disp").insertAdjacentHTML("afterbegin", "
");` ); SheetManager.hide("EachTrainInfo"); }} diff --git a/components/FavoriteList.js b/components/FavoriteList.js index 1d1a054..67f3710 100644 --- a/components/FavoriteList.js +++ b/components/FavoriteList.js @@ -45,7 +45,7 @@ export default function FavoriteList({ stationData }) { webview.current?.injectJavaScript( `MoveDisplayStation('${lineName}_${currentStation[0].MyStation}_${currentStation[0].Station_JP}'); - setStrings();` + document.getElementById("disp").insertAdjacentHTML("afterbegin", "
");` ); navigate("Apps"); }} diff --git a/components/trainMenu.js b/components/trainMenu.js index ebba80f..a7feba6 100644 --- a/components/trainMenu.js +++ b/components/trainMenu.js @@ -221,7 +221,7 @@ const MapPin = ({ index, indexBase, latlng, D, d, navigate, webview }) => { onPress={() => { webview.current?.injectJavaScript( `MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}'); - setStrings();` + document.getElementById("disp").insertAdjacentHTML("afterbegin", "
");` ); if (navigate) navigate("Apps"); }} From 58dcc277042d12355e0d4d6b868dddb649fb6516 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Fri, 24 May 2024 03:11:26 +0000 Subject: [PATCH 13/25] =?UTF-8?q?=E3=82=A6=E3=82=A3=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=81=AE=E3=83=90=E3=82=B0=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/AndroidWidget/InfoWidget.jsx | 16 +++++++--------- components/AndroidWidget/widget-task-handler.jsx | 4 +++- components/Settings/WidgetSettings.js | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/components/AndroidWidget/InfoWidget.jsx b/components/AndroidWidget/InfoWidget.jsx index f70c8cc..db3a556 100644 --- a/components/AndroidWidget/InfoWidget.jsx +++ b/components/AndroidWidget/InfoWidget.jsx @@ -81,17 +81,15 @@ export function InfoWidget({ time, text }) { }} > {text ? ( - - - + clickAction="OPEN_APP" + text={text} + /> ) : ( ); + renderWidget( + + ); break; } case "JR_shikoku_train_info": diff --git a/components/Settings/WidgetSettings.js b/components/Settings/WidgetSettings.js index c4fb501..b58e4c5 100644 --- a/components/Settings/WidgetSettings.js +++ b/components/Settings/WidgetSettings.js @@ -34,7 +34,7 @@ export const WidgetSettings = ({ navigate }) => { }); getInfoString().then(({ time, text }) => { setTime(time); - setTrainInfo(text); + setTrainInfo(text.toString()); }); }, []); return ( From 43b911c23fdd5c466c9b517bdb82785056563d73 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Mon, 27 May 2024 16:38:14 +0000 Subject: [PATCH 14/25] =?UTF-8?q?=E7=8F=BE=E5=9C=A8=E5=9C=B0=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E3=82=92=E5=BC=B7=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- menu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu.js b/menu.js index 929d182..64db365 100644 --- a/menu.js +++ b/menu.js @@ -52,7 +52,7 @@ export default function Menu({ getCurrentTrain }) { const makeCurrentStation = (location) => { if (!originalStationList) return () => {}; const findStationEachLine = (selectLine) => { - const searchArea = 0.0015; + const searchArea = 0.002; const _calcDistance = (from, to) => { let lat = Math.abs(from.lat - to.lat); let lng = Math.abs(from.lng - to.lng); From c05824c3d093d1aa24b9257c26da834183eb5347 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Mon, 27 May 2024 16:39:15 +0000 Subject: [PATCH 15/25] =?UTF-8?q?=E5=9C=B0=E5=9B=B3=E3=81=AE=E8=B7=AF?= =?UTF-8?q?=E7=B7=9A=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=B0=E6=A9=9F=E8=83=BD=E3=81=AE=E5=BC=B7=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.js | 9 +- Top.js | 3 +- .../TrainMenuLineSelector.js | 147 ++++++++++++++++++ components/ActionSheetComponents/sheets.js | 2 + components/trainMenu.js | 128 +++++++++------ stateBox/useTrainMenu.js | 31 ++++ 6 files changed, 267 insertions(+), 53 deletions(-) create mode 100644 components/ActionSheetComponents/TrainMenuLineSelector.js create mode 100644 stateBox/useTrainMenu.js diff --git a/App.js b/App.js index f8e7f4b..aa15106 100644 --- a/App.js +++ b/App.js @@ -19,6 +19,7 @@ import "./components/ActionSheetComponents/sheets.js"; import { TrainDelayDataProvider } from "./stateBox/useTrainDelayData.js"; import { SafeAreaProvider } from "react-native-safe-area-context"; import { DeviceOrientationChangeProvider } from "./stateBox/useDeviceOrientationChange.js"; +import { TrainMenuProvider } from "./stateBox/useTrainMenu.js"; LogBox.ignoreLogs([ "ViewPropTypes will be removed", "ColorPropType will be removed", @@ -42,9 +43,11 @@ export default function App() { - - - + + + + + diff --git a/Top.js b/Top.js index 76556d5..5f3438d 100644 --- a/Top.js +++ b/Top.js @@ -14,6 +14,7 @@ import { optionData } from "./lib/stackOption.js"; import { useNavigation } from "@react-navigation/native"; import { useCurrentTrain } from "./stateBox/useCurrentTrain.js"; import { AS } from "./storageControl.js"; +import { useTrainMenu } from "./stateBox/useTrainMenu"; const Stack = createStackNavigator(); export const Top = ({ navigationRef }) => { const { webview, getCurrentTrain } = useCurrentTrain(); @@ -21,7 +22,7 @@ export const Top = ({ navigationRef }) => { const { navigate, addListener } = navigation; //地図用 - const [mapsStationData, setMapsStationData] = useState(undefined); + const { mapsStationData, setMapsStationData } = useTrainMenu(); useEffect(() => { getStationList2().then(setMapsStationData); diff --git a/components/ActionSheetComponents/TrainMenuLineSelector.js b/components/ActionSheetComponents/TrainMenuLineSelector.js new file mode 100644 index 0000000..77562de --- /dev/null +++ b/components/ActionSheetComponents/TrainMenuLineSelector.js @@ -0,0 +1,147 @@ +import React, { useEffect, useRef } from "react"; +import { + View, + LayoutAnimation, + ScrollView, + Linking, + Text, + TouchableOpacity, + Platform, + BackHandler, +} from "react-native"; +import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; +import ActionSheet, { + SheetManager, + useScrollHandlers, +} from "react-native-actions-sheet"; +import LottieView from "lottie-react-native"; +import { useSafeAreaInsets } from "react-native-safe-area-context"; +import ViewShot from "react-native-view-shot"; +import * as Sharing from "expo-sharing"; +import { useTrainDelayData } from "../../stateBox/useTrainDelayData"; +import { useTrainMenu } from "../../stateBox/useTrainMenu"; +import lineColorList from "../../assets/originData/lineColorList"; +import { stationIDPair } from "../../lib/getStationList2"; +import { lineListPair } from "../../lib/getStationList"; + +export const TrainMenuLineSelector = () => { + const { getTime, delayData, loadingDelayData, setLoadingDelayData } = + useTrainDelayData(); + const { + selectedLine, + setSelectedLine, + mapsStationData: stationData, + setMapsStationData, + } = useTrainMenu(); + const actionSheetRef = useRef(null); + const scrollHandlers = useScrollHandlers("scrollview-1", actionSheetRef); + const insets = useSafeAreaInsets(); + const viewShot = useRef(null); + const platformIs = Platform.OS == "android"; + return ( + } + ref={actionSheetRef} + isModal={Platform.OS == "ios"} + containerStyle={platformIs ? { paddingBottom: insets.bottom } : {}} + useBottomSafeAreaPadding={platformIs} + > + + + + + + + {Object.keys(stationData).map((d) => ( + { + SheetManager.hide("TrainMenuLineSelector"); + setSelectedLine(selectedLine == d ? undefined : d); + }} + > + + + + + {stationIDPair[d]} + + + + + + + + {lineListPair[stationIDPair[d]]} + + + + + ))} + + ); +}; +const Handler = () => { + useEffect(() => { + const backAction = () => { + SheetManager.hide("TrainMenuLineSelector"); + return true; + }; + const backHandler = BackHandler.addEventListener( + "hardwareBackPress", + backAction + ); + return () => backHandler.remove(); + }, []); + return <>; +}; diff --git a/components/ActionSheetComponents/sheets.js b/components/ActionSheetComponents/sheets.js index da95b04..eaa7427 100644 --- a/components/ActionSheetComponents/sheets.js +++ b/components/ActionSheetComponents/sheets.js @@ -2,9 +2,11 @@ import { registerSheet } from "react-native-actions-sheet"; import { EachTrainInfo } from "./EachTrainInfo"; import { JRSTraInfo } from "./JRSTraInfo"; import { StationDeteilView } from "./StationDeteilView"; +import { TrainMenuLineSelector } from "./TrainMenuLineSelector"; registerSheet("EachTrainInfo", EachTrainInfo); registerSheet("JRSTraInfo", JRSTraInfo); registerSheet("StationDetailView", StationDeteilView); +registerSheet("TrainMenuLineSelector", TrainMenuLineSelector); export {}; diff --git a/components/trainMenu.js b/components/trainMenu.js index a7feba6..659ee7e 100644 --- a/components/trainMenu.js +++ b/components/trainMenu.js @@ -1,18 +1,21 @@ import React, { useRef, useState, useEffect } from "react"; -import { View, Text, TouchableOpacity, Linking } from "react-native"; +import { View, Text, TouchableOpacity, Linking, Platform } from "react-native"; import MapView, { Marker } from "react-native-maps"; -import { MaterialCommunityIcons } from "@expo/vector-icons"; +import Constants from "expo-constants"; +import { MaterialCommunityIcons, Ionicons } from "@expo/vector-icons"; import { useCurrentTrain } from "../stateBox/useCurrentTrain"; import { useNavigation } from "@react-navigation/native"; import lineColorList from "../assets/originData/lineColorList"; import { stationIDPair } from "../lib/getStationList2"; import { lineListPair } from "../lib/getStationList"; +import { SheetManager } from "react-native-actions-sheet"; +import { useTrainMenu } from "../stateBox/useTrainMenu"; export default function TrainMenu({ stationData, style }) { const { webview } = useCurrentTrain(); const mapRef = useRef(); const { navigate } = useNavigation(); const [stationPin, setStationPin] = useState([]); - const [selectedLine, setSelectedLine] = useState(undefined); + const { selectedLine, setSelectedLine } = useTrainMenu(); useEffect(() => { const stationPinData = []; Object.keys(stationData).map((d, indexBase) => @@ -40,32 +43,6 @@ export default function TrainMenu({ stationData, style }) { }, [stationPin]); return ( - {selectedLine && ( - - - {selectedLine ? lineListPair[stationIDPair[selectedLine]] : "全線"} - - - )} - + SheetManager.show("TrainMenuLineSelector")} + > + + {selectedLine + ? lineListPair[stationIDPair[selectedLine]] + : "ここを押して路線をフィルタリングできます  ▲"} + + 路線記号からフィルタリング @@ -116,8 +121,12 @@ export default function TrainMenu({ stationData, style }) { padding: 5, margin: 2, borderRadius: 10, + borderColor: "white", + borderWidth: 1, + borderStyle: "solid", alignItems: "center", opacity: selectedLine == d ? 1 : !selectedLine ? 1 : 0.5, + zIndex: 10, }} onPress={() => setSelectedLine(selectedLine == d ? undefined : d)} > @@ -166,26 +175,11 @@ export default function TrainMenu({ stationData, style }) { )} - {navigate && ( - navigate("Apps")} - > - - - 閉じる - - - - )} + navigate("Apps")} + top={Platform.OS == "ios" ? Constants.statusBarHeight : 0} + mapSwitch={"flex"} + /> ); } @@ -228,3 +222,39 @@ const MapPin = ({ index, indexBase, latlng, D, d, navigate, webview }) => { > ); }; + +const MapsButton = ({ onPress, top, mapSwitch }) => { + const styles = { + touch: { + position: "absolute", + top, + left: 10, + width: 50, + height: 50, + backgroundColor: "#0099CC", + borderColor: "white", + borderStyle: "solid", + borderWidth: 1, + borderRadius: 50, + alignContent: "center", + alignSelf: "center", + alignItems: "center", + display: mapSwitch, + }, + text: { + textAlign: "center", + width: "auto", + height: "auto", + textAlignVertical: "center", + fontWeight: "bold", + color: "white", + }, + }; + return ( + + + + + + ); +}; diff --git a/stateBox/useTrainMenu.js b/stateBox/useTrainMenu.js new file mode 100644 index 0000000..da93ada --- /dev/null +++ b/stateBox/useTrainMenu.js @@ -0,0 +1,31 @@ +import React, { createContext, useContext, useState } from "react"; +const initialState = { + selectedLine: undefined, + setSelectedLine: () => {}, + mapsStationData: undefined, + setMapsStationData: () => {}, +}; + +const TrainMenuContext = createContext(initialState); + +export const useTrainMenu = () => { + return useContext(TrainMenuContext); +}; + +export const TrainMenuProvider = ({ children }) => { + const [selectedLine, setSelectedLine] = useState(undefined); + const [mapsStationData, setMapsStationData] = useState(undefined); + + return ( + + {children} + + ); +}; From 2b41cbb0b0fb43cee4af9663f07e4dd4a20b4e82 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 28 May 2024 00:35:27 +0000 Subject: [PATCH 16/25] =?UTF-8?q?=E8=B7=AF=E7=B7=9A=E5=90=8D=E3=81=AE?= =?UTF-8?q?=E8=A1=A8=E8=A8=98=E3=82=86=E3=82=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StationDeteilView.js | 4 ++-- components/駅名表/Sign.js | 4 ++-- lib/getStationList.js | 20 +++++++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/components/ActionSheetComponents/StationDeteilView.js b/components/ActionSheetComponents/StationDeteilView.js index 686b0c4..91cdf49 100644 --- a/components/ActionSheetComponents/StationDeteilView.js +++ b/components/ActionSheetComponents/StationDeteilView.js @@ -262,9 +262,9 @@ const NexPreStationLine = ({ currentStation, originalStationList }) => { "土讃線(多度津-高知間)[D]", "土讃線(高知-窪川間)[K]", "高徳線(高松-徳島間)[T]", - "徳島線(徳島-阿波池田)[B]", + "徳島線(徳島-阿波池田間)[B]", "鳴門線(池谷-鳴門間)[N]", - "瀬戸大橋線(宇多津-児島間)[M]", + "瀬戸大橋線(児島-宇多津間)[M]", ]; let returnData; lineList.forEach((d) => { diff --git a/components/駅名表/Sign.js b/components/駅名表/Sign.js index 391bfdd..84ee25e 100644 --- a/components/駅名表/Sign.js +++ b/components/駅名表/Sign.js @@ -75,9 +75,9 @@ export default function Sign(props) { "土讃線(多度津-高知間)[D]", "土讃線(高知-窪川間)[K]", "高徳線(高松-徳島間)[T]", - "徳島線(徳島-阿波池田)[B]", + "徳島線(徳島-阿波池田間)[B]", "鳴門線(池谷-鳴門間)[N]", - "瀬戸大橋線(宇多津-児島間)[M]", + "瀬戸大橋線(児島-宇多津間)[M]", ]; let returnData; lineList.forEach((d) => { diff --git a/lib/getStationList.js b/lib/getStationList.js index 06bb601..dcad90e 100644 --- a/lib/getStationList.js +++ b/lib/getStationList.js @@ -25,9 +25,9 @@ export const lineList = [ "土讃線(多度津-高知間)[D]", "土讃線(高知-窪川間)[K]", "高徳線(高松-徳島間)[T]", - "徳島線(徳島-阿波池田)[B]", + "徳島線(徳島-阿波池田間)[B]", "鳴門線(池谷-鳴門間)[N]", - "瀬戸大橋線(宇多津-児島間)[M]", + "瀬戸大橋線(児島-宇多津間)[M]", ]; export const lineListPair = { Y: "予讃線(高松-松山間)[Y]", @@ -36,9 +36,9 @@ export const lineListPair = { D: "土讃線(多度津-高知間)[D]", K: "土讃線(高知-窪川間)[K]", T: "高徳線(高松-徳島間)[T]", - B: "徳島線(徳島-阿波池田)[B]", + B: "徳島線(徳島-阿波池田間)[B]", N: "鳴門線(池谷-鳴門間)[N]", - M: "瀬戸大橋線(宇多津-児島間)[M]", + M: "瀬戸大橋線(児島-宇多津間)[M]", }; export const getStationList = async (props) => { @@ -65,9 +65,9 @@ export const getStationList = async (props) => { stationList["土讃線(多度津-高知間)[D]"], stationList["土讃線(高知-窪川間)[K]"], stationList["高徳線(高松-徳島間)[T]"], - stationList["徳島線(徳島-阿波池田)[B]"], + stationList["徳島線(徳島-阿波池田間)[B]"], stationList["鳴門線(池谷-鳴門間)[N]"], - stationList["瀬戸大橋線(宇多津-児島間)[M]"], + stationList["瀬戸大橋線(児島-宇多津間)[M]"], stationList.駅間リスト, stationList.日英対応表, ] = values; @@ -160,16 +160,16 @@ export const getStationList = async (props) => { stationList.日英対応表 ); const tokushimaCurrent = addStationPosition( - concatBetweenStations(stationList["徳島線(徳島-阿波池田)[B]"]), + concatBetweenStations(stationList["徳島線(徳島-阿波池田間)[B]"]), 徳島線, stationList.日英対応表 ); - stationList["徳島線(徳島-阿波池田)[B]"] = [ + stationList["徳島線(徳島-阿波池田間)[B]"] = [ tokushimaCurrent[tokushimaCurrent.length - 1], ...tokushimaCurrent, ]; - stationList["徳島線(徳島-阿波池田)[B]"].pop(); - stationList["瀬戸大橋線(宇多津-児島間)[M]"] = [ + stationList["徳島線(徳島-阿波池田間)[B]"].pop(); + stationList["瀬戸大橋線(児島-宇多津間)[M]"] = [ { Station_JP: "坂出", Station_EN: "Sakaide", From 9094ec331d6a1f863b6a6ad80708898439f93634 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 28 May 2024 00:35:56 +0000 Subject: [PATCH 17/25] =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E3=81=AE=E8=B7=AF=E7=B7=9A=E3=81=AB=E3=83=A1=E3=83=8B=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E3=81=AE=E8=A1=A8=E7=A4=BA=E3=81=8C=E8=BF=BD=E5=BE=93?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apps.js | 12 +++++++++++- components/trainMenu.js | 14 ++++++++++++-- lib/getStationList2.js | 12 ++++++++++++ lib/webViewInjectjavascript.js | 6 +++++- 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/Apps.js b/Apps.js index ffc568d..c7031f3 100644 --- a/Apps.js +++ b/Apps.js @@ -14,7 +14,7 @@ import * as Updates from "expo-updates"; import { AS } from "./storageControl"; import { news } from "./config/newsUpdate"; -import { getStationList, lineList } from "./lib/getStationList"; +import { getStationList, lineList, lineListPair } from "./lib/getStationList"; import { injectJavascriptData } from "./lib/webViewInjectjavascript"; import { checkDuplicateTrainData } from "./lib/checkDuplicateTrainData"; import { useFavoriteStation } from "./stateBox/useFavoriteStation"; @@ -25,6 +25,8 @@ import TrainMenu from "./components/trainMenu"; import { EachTrainInfoCore } from "./components/ActionSheetComponents/EachTrainInfoCore"; import { useNavigation } from "@react-navigation/native"; +import { useTrainMenu } from "./stateBox/useTrainMenu"; +import { stationNamePair } from "./lib/getStationList2"; /* import StatusbarDetect from './StatusbarDetect'; var Status = StatusbarDetect(); */ @@ -37,6 +39,7 @@ export default function Apps({ stationData }) { const { favoriteStation } = useFavoriteStation(); const { isLandscape, setIsLandscape } = useDeviceOrientationChange(); const handleLayout = () => {}; + const { setSelectedLine } = useTrainMenu(); //画面表示関連 const [iconSetting, setIconSetting] = useState(undefined); @@ -164,6 +167,13 @@ export default function Apps({ stationData }) { }); return; } + case "currentLines": { + const lineInfo = dataSet.currentLines.split("\n")[0]; + const lineID = stationNamePair[lineInfo]; + + setSelectedLine(lineID); + return; + } default: { return; } diff --git a/components/trainMenu.js b/components/trainMenu.js index 659ee7e..0894e8e 100644 --- a/components/trainMenu.js +++ b/components/trainMenu.js @@ -38,7 +38,7 @@ export default function TrainMenu({ stationData, style }) { latitude: parseFloat(latlng[0]), longitude: parseFloat(latlng[1]), })), - { edgePadding: { top: 100, bottom: 50, left: 50, right: 50 } } // Add margin values here + { edgePadding: { top: 100, bottom: 100, left: 50, right: 50 } } // Add margin values here ); }, [stationPin]); return ( @@ -97,6 +97,16 @@ export default function TrainMenu({ stationData, style }) { }} onPress={() => SheetManager.show("TrainMenuLineSelector")} > + + ▲  ここを押して路線をフィルタリングできます  ▲ + {selectedLine ? lineListPair[stationIDPair[selectedLine]] - : "ここを押して路線をフィルタリングできます  ▲"} + : "JR四国 対象全駅"} diff --git a/lib/getStationList2.js b/lib/getStationList2.js index 11397b8..e554828 100644 --- a/lib/getStationList2.js +++ b/lib/getStationList2.js @@ -32,3 +32,15 @@ export const stationIDPair = { naruto: "N", seto: "M", }; + +export const stationNamePair = { + "予讃線(高松 - 松山)": "yosan", + "予讃線・内子線(松山 - 内子 - 宇和島)": "uwajima", + "予讃線・伊予灘線(向井原 - 伊予大洲)": "uwajima2", + "土讃線(多度津 - 高知)": "dosan", + "土讃線(高知 - 窪川)": "dosan2", + "高徳線(高松 - 徳島)": "koutoku", + "徳島線(徳島 - 阿波池田)": "tokushima", + "鳴門線(池谷 - 鳴門)": "naruto", + "瀬戸大橋線(児島 - 宇多津)": "seto", +}; diff --git a/lib/webViewInjectjavascript.js b/lib/webViewInjectjavascript.js index 27a218d..b1ff812 100644 --- a/lib/webViewInjectjavascript.js +++ b/lib/webViewInjectjavascript.js @@ -696,7 +696,11 @@ const setStrings = () =>{ } catch (e) {} } -const textInsert = new MutationObserver( (mutations) => setStrings()); +const textInsert = new MutationObserver( (mutations) =>{ + setStrings(); + const currentLines = document.querySelector('#topHeader div').innerText; + window.ReactNativeWebView.postMessage(JSON.stringify({type:"currentLines",currentLines})); +}); // 監視を開始 textInsert.observe(document.getElementById('disp'), { From 4194a83c8ef3482506f023c7315f1cf2017981a2 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Tue, 28 May 2024 02:52:24 +0000 Subject: [PATCH 18/25] =?UTF-8?q?CSS=E3=81=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrainMenuLineSelector.js | 31 +++++++------------ components/trainMenu.js | 6 +--- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/components/ActionSheetComponents/TrainMenuLineSelector.js b/components/ActionSheetComponents/TrainMenuLineSelector.js index 77562de..c983da4 100644 --- a/components/ActionSheetComponents/TrainMenuLineSelector.js +++ b/components/ActionSheetComponents/TrainMenuLineSelector.js @@ -48,26 +48,17 @@ export const TrainMenuLineSelector = () => { useBottomSafeAreaPadding={platformIs} > - - - - + + {Object.keys(stationData).map((d) => ( )} - navigate("Apps")} - top={Platform.OS == "ios" ? Constants.statusBarHeight : 0} - mapSwitch={"flex"} - /> + navigate("Apps")} top={0} mapSwitch={"flex"} /> ); } From d07c05e523870b78fa7eb47148d6b19b24b225cd Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Thu, 30 May 2024 13:09:08 +0000 Subject: [PATCH 19/25] =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E3=81=A8=E5=9C=B0=E5=9B=B3=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF?= =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=B0=E6=A9=9F=E8=83=BD=E3=81=AE=E5=8D=94?= =?UTF-8?q?=E8=AA=BF=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apps.js | 7 +++++-- Top.js | 18 ++++++++++++++---- components/trainMenu.js | 30 ++++++++++++++++++++++++------ stateBox/useTrainMenu.js | 5 +++++ 4 files changed, 48 insertions(+), 12 deletions(-) diff --git a/Apps.js b/Apps.js index c7031f3..0e358f3 100644 --- a/Apps.js +++ b/Apps.js @@ -39,7 +39,7 @@ export default function Apps({ stationData }) { const { favoriteStation } = useFavoriteStation(); const { isLandscape, setIsLandscape } = useDeviceOrientationChange(); const handleLayout = () => {}; - const { setSelectedLine } = useTrainMenu(); + const { setSelectedLine, setInjectJavaScript } = useTrainMenu(); //画面表示関連 const [iconSetting, setIconSetting] = useState(undefined); @@ -332,7 +332,10 @@ export default function Apps({ stationData }) { )} {isLandscape || ( navigate("trainMenu", { webview })} + onPress={() => { + setInjectJavaScript(""); + navigate("trainMenu", { webview }); + }} top={Platform.OS == "ios" ? Constants.statusBarHeight : 0} mapSwitch={mapSwitch == "true" ? "flex" : "none"} /> diff --git a/Top.js b/Top.js index 5f3438d..02fc198 100644 --- a/Top.js +++ b/Top.js @@ -17,12 +17,17 @@ import { AS } from "./storageControl.js"; import { useTrainMenu } from "./stateBox/useTrainMenu"; const Stack = createStackNavigator(); export const Top = ({ navigationRef }) => { - const { webview, getCurrentTrain } = useCurrentTrain(); + const { webview } = useCurrentTrain(); const navigation = useNavigation(); const { navigate, addListener } = navigation; //地図用 - const { mapsStationData, setMapsStationData } = useTrainMenu(); + const { + mapsStationData, + setMapsStationData, + injectJavaScript, + setInjectJavaScript, + } = useTrainMenu(); useEffect(() => { getStationList2().then(setMapsStationData); @@ -48,15 +53,20 @@ export const Top = ({ navigationRef }) => { if (navigationRef.current?.getCurrentRoute().name == "Apps") { if (mapSwitch == "true") { navigation.navigate("trainMenu"); + setInjectJavaScript(""); } else { webview.current?.injectJavaScript(`AccordionClassEvent()`); } } else { + if (mapSwitch == "true") { + if (injectJavaScript) + webview.current?.injectJavaScript(injectJavaScript); + } navigation.navigate("Apps"); } }); return unsubscribe; - }, [navigation, mapSwitch]); + }, [navigation, mapSwitch, injectJavaScript]); return ( @@ -85,7 +95,7 @@ export const Top = ({ navigationRef }) => { } + children={() => } /> { const stationPinData = []; - Object.keys(stationData).map((d, indexBase) => + Object.keys(stationData).map((d, indexBase) => { stationData[d].map((D, index) => { if (!D.StationMap) return null; if (selectedLine && selectedLine != d) return; @@ -27,9 +33,14 @@ export default function TrainMenu({ stationData, style }) { "" ).split(","); if (latlng.length == 0) return null; + if (index == 0 && stationPin.length > 0) { + setInjectJavaScript( + `MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}');` + ); + } stationPinData.push({ D, d, latlng, indexBase: 0, index }); - }) - ); + }); + }); setStationPin(stationPinData); }, [stationData, selectedLine]); useEffect(() => { @@ -185,7 +196,14 @@ export default function TrainMenu({ stationData, style }) { )} - navigate("Apps")} top={0} mapSwitch={"flex"} /> + { + navigate("Apps"); + webview.current?.injectJavaScript(injectJavaScript); + }} + top={0} + mapSwitch={"flex"} + /> ); } diff --git a/stateBox/useTrainMenu.js b/stateBox/useTrainMenu.js index da93ada..efbc979 100644 --- a/stateBox/useTrainMenu.js +++ b/stateBox/useTrainMenu.js @@ -4,6 +4,8 @@ const initialState = { setSelectedLine: () => {}, mapsStationData: undefined, setMapsStationData: () => {}, + injectJavaScript: "", + setInjectJavaScript: () => {}, }; const TrainMenuContext = createContext(initialState); @@ -15,6 +17,7 @@ export const useTrainMenu = () => { export const TrainMenuProvider = ({ children }) => { const [selectedLine, setSelectedLine] = useState(undefined); const [mapsStationData, setMapsStationData] = useState(undefined); + const [injectJavaScript, setInjectJavaScript] = useState(); return ( { setSelectedLine, mapsStationData, setMapsStationData, + injectJavaScript, + setInjectJavaScript, }} > {children} From 03a677ce6713d588fb3626c21b8886f48b81782a Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Fri, 31 May 2024 07:31:32 +0000 Subject: [PATCH 20/25] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=E8=A6=81?= =?UTF-8?q?=E7=B4=A0=E3=81=AE=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apps.js | 8 ++++++-- Top.js | 14 +++++--------- components/FavoriteList.js | 4 +++- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Apps.js b/Apps.js index 0e358f3..bb77de6 100644 --- a/Apps.js +++ b/Apps.js @@ -31,7 +31,7 @@ import { stationNamePair } from "./lib/getStationList2"; import StatusbarDetect from './StatusbarDetect'; var Status = StatusbarDetect(); */ -export default function Apps({ stationData }) { +export default function Apps() { const { webview, currentTrain } = useCurrentTrain(); const { height, width } = useWindowDimensions(); const { navigate } = useNavigation(); @@ -39,7 +39,11 @@ export default function Apps({ stationData }) { const { favoriteStation } = useFavoriteStation(); const { isLandscape, setIsLandscape } = useDeviceOrientationChange(); const handleLayout = () => {}; - const { setSelectedLine, setInjectJavaScript } = useTrainMenu(); + const { + setSelectedLine, + setInjectJavaScript, + mapsStationData: stationData, + } = useTrainMenu(); //画面表示関連 const [iconSetting, setIconSetting] = useState(undefined); diff --git a/Top.js b/Top.js index 02fc198..51ac96d 100644 --- a/Top.js +++ b/Top.js @@ -22,12 +22,8 @@ export const Top = ({ navigationRef }) => { const { navigate, addListener } = navigation; //地図用 - const { - mapsStationData, - setMapsStationData, - injectJavaScript, - setInjectJavaScript, - } = useTrainMenu(); + const { setMapsStationData, injectJavaScript, setInjectJavaScript } = + useTrainMenu(); useEffect(() => { getStationList2().then(setMapsStationData); @@ -77,7 +73,7 @@ export const Top = ({ navigationRef }) => { gestureEnabled: true, headerTransparent: true, }} - children={() => } + component={Apps} /> { } + component={TrainMenu} /> } + component={FavoriteList} /> ); diff --git a/components/FavoriteList.js b/components/FavoriteList.js index 67f3710..e46b613 100644 --- a/components/FavoriteList.js +++ b/components/FavoriteList.js @@ -5,11 +5,13 @@ import Icon from "react-native-vector-icons/Entypo"; import { useFavoriteStation } from "../stateBox/useFavoriteStation"; import { useCurrentTrain } from "../stateBox/useCurrentTrain"; import { useNavigation } from "@react-navigation/native"; +import { useTrainMenu } from "../stateBox/useTrainMenu"; import { FavoriteListItem } from "./atom/FavoriteListItem"; -export default function FavoriteList({ stationData }) { +export default function FavoriteList() { const { favoriteStation } = useFavoriteStation(); const { webview } = useCurrentTrain(); const { navigate, goBack } = useNavigation(); + const { mapsStationData: stationData } = useTrainMenu(); return ( From 00aaaeff208b64faa89f6397c63499c8f14a307a Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Fri, 31 May 2024 11:52:31 +0000 Subject: [PATCH 21/25] =?UTF-8?q?=E4=B8=89=E3=82=92=E2=89=A1=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apps.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Apps.js b/Apps.js index bb77de6..4358702 100644 --- a/Apps.js +++ b/Apps.js @@ -484,12 +484,13 @@ const MapsButton = ({ onPress, top, mapSwitch }) => { textAlignVertical: "center", fontWeight: "bold", color: "white", + fontSize: 20, }, }; return ( - + ); From 08abc1de7ee40fb87c30f847280e3ce60c5024a7 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Fri, 31 May 2024 11:53:26 +0000 Subject: [PATCH 22/25] =?UTF-8?q?=E5=9C=B0=E5=9B=B3=E3=82=92=E3=83=94?= =?UTF-8?q?=E3=83=B3=E3=81=8B=E3=82=89=E3=82=8C=E3=81=A3=E3=81=A1=E3=82=83?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/reccha-small.png | Bin 0 -> 4677 bytes assets/reccha.png | Bin 0 -> 130756 bytes components/trainMenu.js | 3 ++- 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 assets/reccha-small.png create mode 100644 assets/reccha.png diff --git a/assets/reccha-small.png b/assets/reccha-small.png new file mode 100644 index 0000000000000000000000000000000000000000..99447068452d68b6b9af1344276d47056aa83f72 GIT binary patch literal 4677 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 Hu0mjfjhhCv literal 0 HcmV?d00001 diff --git a/assets/reccha.png b/assets/reccha.png new file mode 100644 index 0000000000000000000000000000000000000000..b7bf2e52f7662d1a327093e51685cdef6b745525 GIT binary patch literal 130756 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

y?e+3zD`P4or80yqb{oe`sHa(#QumM<2U87 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 z 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 { ); if (navigate) navigate("Apps"); }} + image={require("../assets/reccha-small.png")} > ); }; From eae47cae846c216098bcb6e264496c7abf72faf3 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sat, 1 Jun 2024 02:51:34 +0000 Subject: [PATCH 23/25] =?UTF-8?q?=E7=B4=B0=E3=81=8B=E3=81=84=E3=83=90?= =?UTF-8?q?=E3=82=B0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Top.js | 4 +++- components/trainMenu.js | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Top.js b/Top.js index 51ac96d..046b2c0 100644 --- a/Top.js +++ b/Top.js @@ -55,8 +55,10 @@ export const Top = ({ navigationRef }) => { } } else { if (mapSwitch == "true") { - if (injectJavaScript) + if (injectJavaScript) { webview.current?.injectJavaScript(injectJavaScript); + setInjectJavaScript(""); + } } navigation.navigate("Apps"); } diff --git a/components/trainMenu.js b/components/trainMenu.js index d11279e..e95df18 100644 --- a/components/trainMenu.js +++ b/components/trainMenu.js @@ -35,7 +35,8 @@ export default function TrainMenu({ style }) { if (latlng.length == 0) return null; if (index == 0 && stationPin.length > 0) { setInjectJavaScript( - `MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}');` + `MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}'); + document.getElementById("disp").insertAdjacentHTML("afterbegin", "

");` ); } stationPinData.push({ D, d, latlng, indexBase: 0, index }); From 8a610a60417b15359aa47f5f74f33bdbba3d1d7f Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Mon, 3 Jun 2024 12:13:06 +0000 Subject: [PATCH 24/25] =?UTF-8?q?=E3=83=AA=E3=83=AA=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E7=94=A8=E5=B0=81=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/App.js b/App.js index aa15106..1b954ea 100644 --- a/App.js +++ b/App.js @@ -66,7 +66,7 @@ export function AppContainer() { Date: Mon, 3 Jun 2024 12:15:20 +0000 Subject: [PATCH 25/25] =?UTF-8?q?5.4=E3=83=AA=E3=83=AA=E3=83=BC=E3=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.json | 2 +- components/Settings/SettingTopPage.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app.json b/app.json index 7a27a91..faae236 100644 --- a/app.json +++ b/app.json @@ -44,7 +44,7 @@ }, "assetBundlePatterns": ["**/*"], "ios": { - "buildNumber": "33", + "buildNumber": "34", "supportsTablet": true, "bundleIdentifier": "jrshikokuinfo.xprocess.hrkn", "config": { diff --git a/components/Settings/SettingTopPage.js b/components/Settings/SettingTopPage.js index 8ebd75a..3b540d8 100644 --- a/components/Settings/SettingTopPage.js +++ b/components/Settings/SettingTopPage.js @@ -12,7 +12,7 @@ import * as Updates from "expo-updates"; import { useWindowDimensions } from "react-native"; import { ListItem } from "native-base"; -const versionCode = "5.2"; +const versionCode = "5.3"; export const SettingTopPage = ({ navigate, testNFC, updateAndReload }) => { const { width } = useWindowDimensions();