jrshikoku/components/Settings/SettingTopPage.js
harukin-expo-dev-env 0a364021ce 6.0.2 release
2025-03-25 07:26:58 +00:00

200 lines
6.2 KiB
JavaScript

import React from "react";
import {
View,
Text,
TouchableOpacity,
ScrollView,
Linking,
Image,
Platform,
} from "react-native";
import * as Updates from "expo-updates";
import { useWindowDimensions } from "react-native";
import { useNavigation } from "@react-navigation/native";
import { ListItem } from "@rneui/themed";
import TouchableScale from "react-native-touchable-scale";
import { SwitchArea } from "../atom/SwitchArea";
import { useNotification } from "../../stateBox/useNotifications";
import { SheetHeaderItem } from "@/components/atom/SheetHeaderItem";
const versionCode = "6.0.2";
export const SettingTopPage = ({
testNFC,
startPage,
setStartPage,
updateAndReload,
}) => {
const { width } = useWindowDimensions();
const { expoPushToken } = useNotification();
const navigation = useNavigation();
return (
<View style={{ height: "100%", backgroundColor: "#0099CC" }}>
<SheetHeaderItem title="アプリの設定画面" LeftItem={{
title: "閉じる",
onPress: () => navigation.goBack(),
}} />
<ScrollView style={{ flex: 1, backgroundColor: "#f8f8fc" }}>
<View style={{ height: 300, padding: 10 }}>
<View style={{ flex: 1 }} />
<Image
source={require("../../assets/Header.png")}
style={{
aspectRatio: 8.08,
height: undefined,
width: width - 20,
borderRadius: 5,
}}
/>
<View style={{ flexDirection: "row", paddingTop: 10 }}>
<View style={{ flex: 1 }} />
<Text>内部バージョン: {versionCode}</Text>
<View style={{ flex: 1 }} />
</View>
<View style={{ flexDirection: "row", paddingBottom: 10 }}>
<View style={{ flex: 1 }} />
<Text>ReleaseChannel: {Updates.channel}</Text>
<View style={{ flex: 1 }} />
</View>
<View style={{ flex: 1 }} />
<Text
style={{
fontSize: 14,
fontStyle: "italic",
}}
>
このアプリは四国旅客鉄道株式会社の提供する列車走行位置表示システムを利用しHARUKIN/Xprocessにより一部の機能を拡張したものです
</Text>
<Text
style={{
fontSize: 14,
fontStyle: "italic",
}}
>
このアプリに関するお問い合わせはHARUKIN/Xprocessにお願いしますくれぐれも四国旅客鉄道株式会社にはお問い合わせしないようにお願いします
</Text>
</View>
<View style={{ flex: 1, borderTopWidth: 1, borderColor: "gray" }}>
<SwitchArea
str="起動時に表示する画面"
bool={startPage}
setBool={setStartPage}
falseImage={require("../../assets/configuration/showSetting0.jpg")}
trueImage={require("../../assets/configuration/showSetting1.jpg")}
falseText={"リンクメニュー"}
trueText={"列車位置情報"}
/>
<SettingList
string="お気に入り登録の並び替え"
onPress={() =>
navigation.navigate("setting", { screen: "FavoriteSettings" })
}
/>
<SettingList
string={`通知設定${
expoPushToken == "" ? "(通知設定をオンにしてください)" : "(β)"
}`}
onPress={() =>
navigation.navigate("setting", { screen: "NotificationSettings" })
}
disabled={expoPushToken == ""}
/>
<SettingList
string="レイアウト設定"
onPress={() =>
navigation.navigate("setting", { screen: "LayoutSettings" })
}
/>
{Platform.OS === "android" ? (
<SettingList
string="ウィジェット設定"
onPress={() =>
navigation.navigate("setting", { screen: "WidgetSettings" })
}
/>
) : null}
<SettingList
string="アイコン設定"
onPress={() =>
navigation.navigate("setting", { screen: "LauncherIconSettings" })
}
/>
<SettingList
string="プライバシーポリシー"
onPress={() =>
Linking.openURL(
"https://nexcloud.haruk.in/sites/press-harukin/JRShikokuApps/policy"
)
}
/>
<SettingList
string="開発情報"
onPress={() =>
Linking.openURL("https://nexcloud.haruk.in/s/2WFEN5oLPGtrRqT")
}
/>
<SettingList
string="運営Twitter"
onPress={() => Linking.openURL("https://twitter.com/Xprocess_main")}
/>
{/* <ListItem style={{ flexDirection: "row" }} onPress={() => testNFC()}>
<Text
style={{
fontSize: 20,
alignItems: "center",
alignContent: "center",
textAlign: "center",
textAlignVertical: "center",
}}
>
testNFC
</Text>
<View style={{ flex: 1 }} />
</ListItem> */}
</View>
</ScrollView>
<TouchableOpacity
style={{
padding: 10,
flexDirection: "row",
borderColor: "white",
borderWidth: 1,
margin: 10,
borderRadius: 5,
alignItems: "center",
}}
onPress={updateAndReload}
>
<View style={{ flex: 1 }} />
<Text style={{ fontSize: 25, fontWeight: "bold", color: "white" }}>
設定を保存して再読み込み
</Text>
<View style={{ flex: 1 }} />
</TouchableOpacity>
</View>
);
};
const SettingList = ({ string, onPress, disabled }) => {
return (
<ListItem
activeScale={0.95}
Component={TouchableScale}
bottomDivider
onPress={onPress}
disabled={disabled}
>
<ListItem.Content>
<ListItem.Title>{string}</ListItem.Title>
</ListItem.Content>
<ListItem.Chevron />
</ListItem>
);
};