Commit 2ccbdddd authored by shigemi miura's avatar shigemi miura

Merge origin/feature-gps2 into develop

parents 13ed1e3f f89be70e
......@@ -88,6 +88,9 @@
D52D213A2AEBAC0500324D58 /* HttpRequestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D21392AEBAC0500324D58 /* HttpRequestType.swift */; };
D52D213F2AEBB7D700324D58 /* RegisteredEca.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D213E2AEBB7D700324D58 /* RegisteredEca.swift */; };
D52D21412AEDE18F00324D58 /* EcaCoordinatesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D21402AEDE18F00324D58 /* EcaCoordinatesTable.swift */; };
D5384AFC2B306CEF006228C6 /* TermsView.html in Resources */ = {isa = PBXBuildFile; fileRef = D5384AFB2B306CEF006228C6 /* TermsView.html */; };
D5384AFE2B3121F2006228C6 /* PrivacyView.html in Resources */ = {isa = PBXBuildFile; fileRef = D5384AFD2B3121F2006228C6 /* PrivacyView.html */; };
D5384B012B312F2D006228C6 /* MenuLocalHtmlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5384B002B312F2D006228C6 /* MenuLocalHtmlView.swift */; };
D545FC742B09C74300F206D0 /* AlertManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D545FC732B09C74300F206D0 /* AlertManager.swift */; };
D545FC762B09C81300F206D0 /* PushNotificationTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D545FC752B09C81300F206D0 /* PushNotificationTypes.swift */; };
D55135202B15B030007B66B1 /* SetEcaArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = D551351F2B15B030007B66B1 /* SetEcaArea.swift */; };
......@@ -240,6 +243,9 @@
D52D21392AEBAC0500324D58 /* HttpRequestType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HttpRequestType.swift; path = Sailassist/Http/HttpRequestType.swift; sourceTree = SOURCE_ROOT; };
D52D213E2AEBB7D700324D58 /* RegisteredEca.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RegisteredEca.swift; path = Sailassist/ECA/RegisteredEca.swift; sourceTree = SOURCE_ROOT; };
D52D21402AEDE18F00324D58 /* EcaCoordinatesTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = EcaCoordinatesTable.swift; path = Sailassist/ECA/EcaCoordinatesTable.swift; sourceTree = SOURCE_ROOT; };
D5384AFB2B306CEF006228C6 /* TermsView.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = TermsView.html; path = SailAssist/html/TermsView.html; sourceTree = SOURCE_ROOT; };
D5384AFD2B3121F2006228C6 /* PrivacyView.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = PrivacyView.html; path = SailAssist/html/PrivacyView.html; sourceTree = SOURCE_ROOT; };
D5384B002B312F2D006228C6 /* MenuLocalHtmlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MenuLocalHtmlView.swift; path = Sailassist/Menu/View/MenuLocalHtmlView.swift; sourceTree = SOURCE_ROOT; };
D53ACA752B0AECF8008DCB18 /* Sailassist.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Sailassist.entitlements; path = Sailassist/Sailassist.entitlements; sourceTree = "<group>"; };
D545FC732B09C74300F206D0 /* AlertManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AlertManager.swift; path = Sailassist/VoiceManager/AlertManager.swift; sourceTree = SOURCE_ROOT; };
D545FC752B09C81300F206D0 /* PushNotificationTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PushNotificationTypes.swift; path = Sailassist/DataSource/PushNotificationTypes.swift; sourceTree = SOURCE_ROOT; };
......@@ -328,6 +334,7 @@
020B98122AD8C3140029DE4C /* SailAssist */ = {
isa = PBXGroup;
children = (
D5384AFF2B3121FA006228C6 /* html */,
D545FC722B09C6DA00F206D0 /* VoiceManager */,
D51AA4052B099F6D00EBBDD4 /* DataSource */,
D51AA4022B099DA600EBBDD4 /* SignalR */,
......@@ -597,6 +604,7 @@
D5E008732B2ADD3F00C4070A /* MenuManualECDISView.swift */,
D5E008752B2ADD5900C4070A /* MenuManualRADARView.swift */,
D5E008772B2B022200C4070A /* MenuAboutAppView.swift */,
D5384B002B312F2D006228C6 /* MenuLocalHtmlView.swift */,
);
path = View;
sourceTree = "<group>";
......@@ -690,6 +698,15 @@
path = ECA;
sourceTree = "<group>";
};
D5384AFF2B3121FA006228C6 /* html */ = {
isa = PBXGroup;
children = (
D5384AFB2B306CEF006228C6 /* TermsView.html */,
D5384AFD2B3121F2006228C6 /* PrivacyView.html */,
);
path = html;
sourceTree = "<group>";
};
D545FC722B09C6DA00F206D0 /* VoiceManager */ = {
isa = PBXGroup;
children = (
......@@ -833,6 +850,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D5384AFE2B3121F2006228C6 /* PrivacyView.html in Resources */,
D5384AFC2B306CEF006228C6 /* TermsView.html in Resources */,
020B981B2AD8C3190029DE4C /* Preview Assets.xcassets in Resources */,
020B98182AD8C3190029DE4C /* Assets.xcassets in Resources */,
);
......@@ -1009,6 +1028,7 @@
D5E008762B2ADD5900C4070A /* MenuManualRADARView.swift in Sources */,
D59908C62B19EA70000E13DD /* ResPushHistory.swift in Sources */,
020B986C2ADD3E810029DE4C /* InTextLib.swift in Sources */,
D5384B012B312F2D006228C6 /* MenuLocalHtmlView.swift in Sources */,
02C3E5D12AFCC16800AF7837 /* ChatTitleView.swift in Sources */,
024EDE1D2B0C42F70013BAC8 /* MenuGpsSelectView.swift in Sources */,
020B98472AD8FEE30029DE4C /* ColorSet.swift in Sources */,
......@@ -1195,8 +1215,8 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UIRequiresFullScreen = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
IPHONEOS_DEPLOYMENT_TARGET = 16.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
......@@ -1238,8 +1258,8 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UIRequiresFullScreen = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
IPHONEOS_DEPLOYMENT_TARGET = 16.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
......@@ -1424,8 +1444,8 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UIRequiresFullScreen = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
IPHONEOS_DEPLOYMENT_TARGET = 16.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
......
{
"images" : [
{
"filename" : "h1_signin.svg",
"filename" : "logo_b.svg",
"idiom" : "universal",
"scale" : "1x"
},
......@@ -12,7 +12,7 @@
"value" : "dark"
}
],
"filename" : "h1_signin_Dark.svg",
"filename" : "logo_w.svg",
"idiom" : "universal",
"scale" : "1x"
},
......
<?xml version="1.0" encoding="UTF-8"?><svg id="_レイヤー_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 21.94"><defs><style>.cls-1{stroke-width:0px;}</style></defs><g id="_レイヤー_3"><path class="cls-1" d="m94.41,13.96l1.33-1.33c1.98,1.52,3.88,2.27,6.52,2.27s4.24-1.15,4.24-2.73v-.05c0-1.49-.95-2.34-4.94-3.05-4.37-.8-6.38-2-6.38-4.64v-.05c0-2.53,2.63-4.39,6.25-4.39,2.77,0,4.75.67,6.68,1.97l-1.25,1.4c-1.77-1.22-3.53-1.74-5.49-1.74-2.47,0-4.05,1.15-4.05,2.59v.05c0,1.52.98,2.36,5.16,3.12,4.24.78,6.19,2.09,6.19,4.55v.05c0,2.76-2.72,4.55-6.49,4.55-3.01,0-5.49-.85-7.77-2.57Z"/><path class="cls-1" d="m113.82,16.69h-2.09V2.09l2.09,1.14v13.46Zm2.09-9.82s1.38-.89,3.8-.89c3.4,0,5.38,1.83,5.38,4.29v6.42h-2.09v-6.04c0-1.92-1.41-3.12-3.88-3.12s-3.2,1.1-3.2,1.1v-1.76Z"/><path class="cls-1" d="m171.99,17.56h-2.17l-8.18-16.19h2.39l6.76,13.84,1.19,2.34Zm-.04-4.75l5.64-11.44h2.31l-6.94,13.63-1-2.19Z"/><path class="cls-1" d="m194.78,16.68c1.93,0,3.29-.58,4.43-1.46l1.3.86c-1.41,1.16-3.12,1.94-5.79,1.94-3.86,0-7.01-2.18-7.01-5.4,0-3,2.98-5.4,6.86-5.4,4.16,0,6.77,2.44,6.77,5.48,0,.14,0,.3-.03.54h-8.98l-.6-1.24h7.49c-.24-1.88-1.93-3.48-4.7-3.48s-4.88,2.01-4.88,4.07,2.11,4.09,5.14,4.09Z"/><path class="cls-1" d="m232.15,16.61c1.93,0,3.29-.58,4.43-1.46,0,0,.44,1.03.59,1.39-1.28.86-2.84,1.41-5.08,1.41-3.86,0-7.01-2.18-7.01-5.4,0-3,2.98-5.4,6.86-5.4,4.16,0,6.77,2.44,6.77,5.48,0,.14,0,.3-.03.54h-9.05l-.53-1.24h7.49c-.24-1.88-1.93-3.48-4.7-3.48s-4.88,2.01-4.88,4.07,2.11,4.09,5.14,4.09Z"/><path class="cls-1" d="m209.52,17.79h-2l-4.92-10.42h2.23l4.68,10.42Zm9.3,0h-1.87l-3.78-8.16-2.66,5.68-.84-2.12,2.64-5.86h1.74l4.78,10.46Zm.12-4.58l2.6-5.84h2.17l-3.85,7.96-.92-2.12Z"/><path class="cls-1" d="m129.64,7.32h2.09v9.34h-2.09V7.32Z"/><path class="cls-1" d="m138.02,21.94h-2.09V7.26l2.09,1.05v13.64Zm2.1-8.25s1.73,2.11,5.38,2.11c3.02,0,4.74-1.4,4.74-3.58s-1.77-3.89-4.62-3.89c-3.05,0-3.78,1.08-3.78,1.08l-1.81-.71s1.24-1.92,5.77-1.92c3.9,0,6.53,2.42,6.53,5.42s-2.63,5.14-6.89,5.14c-3.02,0-5.32-1.67-5.32-1.67v-1.99Z"/><path class="cls-1" d="m0,14.58l1.33-1.33c1.99,1.52,3.89,2.28,6.53,2.28s4.24-1.15,4.24-2.74v-.05c0-1.49-.95-2.35-4.95-3.06C2.77,8.87.76,7.68.76,5.03v-.05C.76,2.46,3.4.6,7.02.6c2.78,0,4.76.67,6.69,1.98l-1.25,1.4c-1.77-1.22-3.54-1.75-5.5-1.75-2.48,0-4.05,1.15-4.05,2.6v.05c0,1.52.98,2.37,5.17,3.13,4.24.78,6.2,2.09,6.2,4.55v.05c0,2.76-2.72,4.55-6.5,4.55-3.02,0-5.5-.85-7.78-2.58Z"/><path class="cls-1" d="m19.92,17.36h-2.09V7l2.09,1.06v9.3Zm1.93-8.82s1.01-.68,3.27-.68,3.75.9,4.52,2.06c1.01-1.14,2.5-2.06,4.95-2.06,3.24,0,5.22,1.6,5.22,4.17v5.34h-2.09v-4.98c0-2-1.36-3.13-3.65-3.13-2.12,0-3.89,1.16-3.89,3.2v4.9h-2.07v-5.02c0-1.94-1.15-3.08-3.38-3.08-.88,0-1.17.13-1.17.13l-1.71-.85Z"/><path class="cls-1" d="m62.47,12.46c0-4.48,4.44-5.29,5.1-5.29l2.73,1.31h-.16c-3.07,0-5.58,1.62-5.58,4.75v4.13h-2.09v-4.9Z"/><path class="cls-1" d="m242.16,12.73c0-4.48,4.44-5.29,5.1-5.29l2.73,1.31h-.16c-3.07,0-5.58,1.62-5.58,4.75v4.13h-2.09v-4.9Z"/><path class="cls-1" d="m55.21,8v1.8c-.95-1.26-2.91-2-5.06-2-3.56,0-6.45,2.02-6.45,4.87s2.91,4.89,6.45,4.89c2.12,0,4.11-.74,5.06-2.02v.8l2.08,1.03.02-8.31-2.1-1.05Zm-4.91,8.01c-2.5,0-4.53-1.49-4.53-3.34s2.03-3.34,4.53-3.34,4.53,1.49,4.53,3.34-2.03,3.34-4.53,3.34Z"/><path class="cls-1" d="m79.06,17.36h-2.1v-8.88h-2.08l-3.17-1.55h5.25v-2.66l2.1,1.02v1.64l2.06.03,3.13,1.51h-5.2s0,8.88,0,8.88Z"/><path class="cls-1" d="m182,8.44h2.09v9.34h-2.09v-9.34Z"/><circle class="cls-1" cx="130.75" cy="4.18" r="1.65"/><circle class="cls-1" cx="183.16" cy="4.18" r="1.65"/></g></svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_レイヤー_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 21.94" fill="#fff">
<defs>
<style>.cls-1{stroke-width:0px;}</style>
</defs>
<g id="_レイヤー_3">
<path class="cls-1"
d="m94.41,13.96l1.33-1.33c1.98,1.52,3.88,2.27,6.52,2.27s4.24-1.15,4.24-2.73v-.05c0-1.49-.95-2.34-4.94-3.05-4.37-.8-6.38-2-6.38-4.64v-.05c0-2.53,2.63-4.39,6.25-4.39,2.77,0,4.75.67,6.68,1.97l-1.25,1.4c-1.77-1.22-3.53-1.74-5.49-1.74-2.47,0-4.05,1.15-4.05,2.59v.05c0,1.52.98,2.36,5.16,3.12,4.24.78,6.19,2.09,6.19,4.55v.05c0,2.76-2.72,4.55-6.49,4.55-3.01,0-5.49-.85-7.77-2.57Z" />
<path class="cls-1"
d="m113.82,16.69h-2.09V2.09l2.09,1.14v13.46Zm2.09-9.82s1.38-.89,3.8-.89c3.4,0,5.38,1.83,5.38,4.29v6.42h-2.09v-6.04c0-1.92-1.41-3.12-3.88-3.12s-3.2,1.1-3.2,1.1v-1.76Z" />
<path class="cls-1"
d="m171.99,17.56h-2.17l-8.18-16.19h2.39l6.76,13.84,1.19,2.34Zm-.04-4.75l5.64-11.44h2.31l-6.94,13.63-1-2.19Z" />
<path class="cls-1"
d="m194.78,16.68c1.93,0,3.29-.58,4.43-1.46l1.3.86c-1.41,1.16-3.12,1.94-5.79,1.94-3.86,0-7.01-2.18-7.01-5.4,0-3,2.98-5.4,6.86-5.4,4.16,0,6.77,2.44,6.77,5.48,0,.14,0,.3-.03.54h-8.98l-.6-1.24h7.49c-.24-1.88-1.93-3.48-4.7-3.48s-4.88,2.01-4.88,4.07,2.11,4.09,5.14,4.09Z" />
<path class="cls-1"
d="m232.15,16.61c1.93,0,3.29-.58,4.43-1.46,0,0,.44,1.03.59,1.39-1.28.86-2.84,1.41-5.08,1.41-3.86,0-7.01-2.18-7.01-5.4,0-3,2.98-5.4,6.86-5.4,4.16,0,6.77,2.44,6.77,5.48,0,.14,0,.3-.03.54h-9.05l-.53-1.24h7.49c-.24-1.88-1.93-3.48-4.7-3.48s-4.88,2.01-4.88,4.07,2.11,4.09,5.14,4.09Z" />
<path class="cls-1"
d="m209.52,17.79h-2l-4.92-10.42h2.23l4.68,10.42Zm9.3,0h-1.87l-3.78-8.16-2.66,5.68-.84-2.12,2.64-5.86h1.74l4.78,10.46Zm.12-4.58l2.6-5.84h2.17l-3.85,7.96-.92-2.12Z" />
<path class="cls-1" d="m129.64,7.32h2.09v9.34h-2.09V7.32Z" />
<path class="cls-1"
d="m138.02,21.94h-2.09V7.26l2.09,1.05v13.64Zm2.1-8.25s1.73,2.11,5.38,2.11c3.02,0,4.74-1.4,4.74-3.58s-1.77-3.89-4.62-3.89c-3.05,0-3.78,1.08-3.78,1.08l-1.81-.71s1.24-1.92,5.77-1.92c3.9,0,6.53,2.42,6.53,5.42s-2.63,5.14-6.89,5.14c-3.02,0-5.32-1.67-5.32-1.67v-1.99Z" />
<path class="cls-1"
d="m0,14.58l1.33-1.33c1.99,1.52,3.89,2.28,6.53,2.28s4.24-1.15,4.24-2.74v-.05c0-1.49-.95-2.35-4.95-3.06C2.77,8.87.76,7.68.76,5.03v-.05C.76,2.46,3.4.6,7.02.6c2.78,0,4.76.67,6.69,1.98l-1.25,1.4c-1.77-1.22-3.54-1.75-5.5-1.75-2.48,0-4.05,1.15-4.05,2.6v.05c0,1.52.98,2.37,5.17,3.13,4.24.78,6.2,2.09,6.2,4.55v.05c0,2.76-2.72,4.55-6.5,4.55-3.02,0-5.5-.85-7.78-2.58Z" />
<path class="cls-1"
d="m19.92,17.36h-2.09V7l2.09,1.06v9.3Zm1.93-8.82s1.01-.68,3.27-.68,3.75.9,4.52,2.06c1.01-1.14,2.5-2.06,4.95-2.06,3.24,0,5.22,1.6,5.22,4.17v5.34h-2.09v-4.98c0-2-1.36-3.13-3.65-3.13-2.12,0-3.89,1.16-3.89,3.2v4.9h-2.07v-5.02c0-1.94-1.15-3.08-3.38-3.08-.88,0-1.17.13-1.17.13l-1.71-.85Z" />
<path class="cls-1"
d="m62.47,12.46c0-4.48,4.44-5.29,5.1-5.29l2.73,1.31h-.16c-3.07,0-5.58,1.62-5.58,4.75v4.13h-2.09v-4.9Z" />
<path class="cls-1"
d="m242.16,12.73c0-4.48,4.44-5.29,5.1-5.29l2.73,1.31h-.16c-3.07,0-5.58,1.62-5.58,4.75v4.13h-2.09v-4.9Z" />
<path class="cls-1"
d="m55.21,8v1.8c-.95-1.26-2.91-2-5.06-2-3.56,0-6.45,2.02-6.45,4.87s2.91,4.89,6.45,4.89c2.12,0,4.11-.74,5.06-2.02v.8l2.08,1.03.02-8.31-2.1-1.05Zm-4.91,8.01c-2.5,0-4.53-1.49-4.53-3.34s2.03-3.34,4.53-3.34,4.53,1.49,4.53,3.34-2.03,3.34-4.53,3.34Z" />
<path class="cls-1"
d="m79.06,17.36h-2.1v-8.88h-2.08l-3.17-1.55h5.25v-2.66l2.1,1.02v1.64l2.06.03,3.13,1.51h-5.2s0,8.88,0,8.88Z" />
<path class="cls-1" d="m182,8.44h2.09v9.34h-2.09v-9.34Z" />
<circle class="cls-1" cx="130.75" cy="4.18" r="1.65" />
<circle class="cls-1" cx="183.16" cy="4.18" r="1.65" />
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200.58 28.83">
<defs>
<style>.cls-1{stroke-width:0px;}</style>
</defs>
<g>
<path class="cls-1" d="m17.32,16c-.76-.58-1.58-1.06-2.46-1.44-.88-.38-1.73-.69-2.53-.93-1.74-.5-3.12-1-4.13-1.52-1.01-.51-1.73-1.06-2.16-1.64-.43-.58-.64-1.22-.64-1.91,0-.81.37-1.54,1.11-2.19.74-.65,1.93-.98,3.55-.98,1.17,0,2.16.19,2.98.57.81.38,1.5.87,2.08,1.46.57.59,1.04,1.2,1.41,1.82l3.12-1.5c-.49-.88-1.16-1.72-2.01-2.52-.86-.8-1.89-1.45-3.1-1.96-1.21-.51-2.63-.77-4.26-.77s-3.18.28-4.5.84c-1.31.56-2.34,1.33-3.08,2.3-.74.98-1.11,2.08-1.11,3.32,0,1.14.26,2.1.79,2.89.53.79,1.21,1.45,2.03,1.98.83.54,1.7.98,2.61,1.32.91.34,1.74.62,2.48.84,1.14.33,2.22.71,3.23,1.12,1.01.42,1.83.96,2.46,1.62.63.67.94,1.56.94,2.68s-.49,2.08-1.46,2.82c-.97.74-2.25,1.11-3.85,1.11-1.2,0-2.27-.21-3.21-.64-.94-.43-1.79-1.02-2.55-1.78-.76-.76-1.48-1.64-2.16-2.64l-2.91,1.64c.66,1.09,1.5,2.12,2.55,3.09,1.04.96,2.25,1.74,3.64,2.32,1.38.58,2.89.87,4.52.87,1.2,0,2.35-.17,3.45-.5s2.08-.81,2.95-1.43c.87-.62,1.56-1.37,2.05-2.25.5-.88.75-1.87.75-2.96s-.24-2.12-.73-2.94c-.49-.82-1.11-1.52-1.86-2.11Z"/>
<rect class="cls-1" x="51.84" y="11.46" width="3.42" height="16.41"/>
<rect class="cls-1" x="64.61" width="3.42" height="27.83"/>
<path class="cls-1" d="m127.4,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<path class="cls-1" d="m147.93,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<path class="cls-1" d="m181.88,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<polygon class="cls-1" points="200.58 11.42 197.37 11.42 197.37 6.71 193.95 5.71 193.95 11.42 190.74 11.42 190.74 14.09 193.95 14.09 193.95 27.83 197.37 28.83 197.37 14.09 200.58 14.09 200.58 11.42"/>
<path class="cls-1" d="m39.45,13.34c-1.53-1.41-3.56-2.28-5.8-2.28-4.73,0-8.56,3.83-8.56,8.56s3.83,8.56,8.56,8.56c2.24,0,4.27-.87,5.8-2.28v.97l3.4,1V11.75l-3.4-1v2.59Zm-5.8,11.85c-3.07,0-5.56-2.49-5.56-5.56s2.49-5.56,5.56-5.56,5.56,2.49,5.56,5.56-2.49,5.56-5.56,5.56Z"/>
<path class="cls-1" d="m86.12,26.43l3.37,1.76,3.87-7.38h10.9l3.87,7.38,3.37-1.76-12.68-24.21-12.68,24.21Zm8.8-8.62l3.88-7.41,3.88,7.41h-7.76Z"/>
<circle class="cls-1" cx="53.65" cy="5.18" r="2.5"/>
<rect class="cls-1" x="158.84" y="11.46" width="3.42" height="16.41"/>
<path class="cls-1" d="m160.65,2.31c-1.38,0-2.5,1.12-2.5,2.5,0,.06.01.12.02.18,0,.06-.02.12-.02.18,0,1.38,1.12,2.5,2.5,2.5s2.5-1.12,2.5-2.5c0-.06-.01-.12-.02-.18,0-.06.02-.12.02-.18,0-1.38-1.12-2.5-2.5-2.5Z"/>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200.58 28.83">
<defs>
<style>.cls-1{fill:#fff;stroke-width:0px;}</style>
</defs>
<g>
<path class="cls-1" d="m17.32,16c-.76-.58-1.58-1.06-2.46-1.44-.88-.38-1.73-.69-2.53-.93-1.74-.5-3.12-1-4.13-1.52-1.01-.51-1.73-1.06-2.16-1.64-.43-.58-.64-1.22-.64-1.91,0-.81.37-1.54,1.11-2.19.74-.65,1.93-.98,3.55-.98,1.17,0,2.16.19,2.98.57.81.38,1.5.87,2.08,1.46.57.59,1.04,1.2,1.41,1.82l3.12-1.5c-.49-.88-1.16-1.72-2.01-2.52-.86-.8-1.89-1.45-3.1-1.96-1.21-.51-2.63-.77-4.26-.77s-3.18.28-4.5.84c-1.31.56-2.34,1.33-3.08,2.3-.74.98-1.11,2.08-1.11,3.32,0,1.14.26,2.1.79,2.89.53.79,1.21,1.45,2.03,1.98.83.54,1.7.98,2.61,1.32.91.34,1.74.62,2.48.84,1.14.33,2.22.71,3.23,1.12,1.01.42,1.83.96,2.46,1.62.63.67.94,1.56.94,2.68s-.49,2.08-1.46,2.82c-.97.74-2.25,1.11-3.85,1.11-1.2,0-2.27-.21-3.21-.64-.94-.43-1.79-1.02-2.55-1.78-.76-.76-1.48-1.64-2.16-2.64l-2.91,1.64c.66,1.09,1.5,2.12,2.55,3.09,1.04.96,2.25,1.74,3.64,2.32,1.38.58,2.89.87,4.52.87,1.2,0,2.35-.17,3.45-.5s2.08-.81,2.95-1.43c.87-.62,1.56-1.37,2.05-2.25.5-.88.75-1.87.75-2.96s-.24-2.12-.73-2.94c-.49-.82-1.11-1.52-1.86-2.11Z"/>
<rect class="cls-1" x="51.84" y="11.46" width="3.42" height="16.41"/>
<rect class="cls-1" x="64.61" width="3.42" height="27.83"/>
<path class="cls-1" d="m127.4,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<path class="cls-1" d="m147.93,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<path class="cls-1" d="m181.88,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<polygon class="cls-1" points="200.58 11.42 197.37 11.42 197.37 6.71 193.95 5.71 193.95 11.42 190.74 11.42 190.74 14.09 193.95 14.09 193.95 27.83 197.37 28.83 197.37 14.09 200.58 14.09 200.58 11.42"/>
<path class="cls-1" d="m39.45,13.34c-1.53-1.41-3.56-2.28-5.8-2.28-4.73,0-8.56,3.83-8.56,8.56s3.83,8.56,8.56,8.56c2.24,0,4.27-.87,5.8-2.28v.97l3.4,1V11.75l-3.4-1v2.59Zm-5.8,11.85c-3.07,0-5.56-2.49-5.56-5.56s2.49-5.56,5.56-5.56,5.56,2.49,5.56,5.56-2.49,5.56-5.56,5.56Z"/>
<path class="cls-1" d="m86.12,26.43l3.37,1.76,3.87-7.38h10.9l3.87,7.38,3.37-1.76-12.68-24.21-12.68,24.21Zm8.8-8.62l3.88-7.41,3.88,7.41h-7.76Z"/>
<circle class="cls-1" cx="53.65" cy="5.18" r="2.5"/>
<rect class="cls-1" x="158.84" y="11.46" width="3.42" height="16.41"/>
<path class="cls-1" d="m160.65,2.31c-1.38,0-2.5,1.12-2.5,2.5,0,.06.01.12.02.18,0,.06-.02.12-.02.18,0,1.38,1.12,2.5,2.5,2.5s2.5-1.12,2.5-2.5c0-.06-.01-.12-.02-.18,0-.06.02-.12.02-.18,0-1.38-1.12-2.5-2.5-2.5Z"/>
</g>
</svg>
\ No newline at end of file
{
"images" : [
{
"filename" : "logo_signin.svg",
"filename" : "img_b.svg",
"idiom" : "universal",
"scale" : "1x"
},
......@@ -12,7 +12,7 @@
"value" : "dark"
}
],
"filename" : "logo_signin_Dark.svg",
"filename" : "img_w.svg",
"idiom" : "universal",
"scale" : "1x"
},
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 485 201" style="enable-background:new 0 0 485 201;" xml:space="preserve">
<g>
<path d="M0,170.8c146-6.9,275.9-18.1,389.8-33.6C241.9,153.1,114.4,165.4,7,162L0,170.8L0,170.8z"/>
<polygon points="71.5,125.9 229,64.1 228.8,77.8 "/>
<path d="M416,170l69-87c-76.3-10.9-148.8-9-230,5l-6.4,21.7L40,144l221-20l10-21c52.6-10,104.3-13.3,155-9
C416.9,122,413.2,147.5,416,170z"/>
<polygon points="414,184 35,190 429,201 "/>
<polygon points="229,24 55,115 55,136 62,114 229,0 "/>
<polygon points="234,7 234,24 370,39 370,70 360,30 "/>
<path d="M31,132.8c-0.8,0-1.5-0.7-1.5-1.5V67.8c0-0.2,0-0.4,0.1-0.7l5.6-11.5c0.2-0.5,0.8-0.8,1.3-0.8h78.8c0.8,0,1.5,0.7,1.5,1.5
v11.5c0,0.8-0.7,1.5-1.5,1.5s-1.5-0.7-1.5-1.5v-10H37.5l-5,10.3v63.2C32.5,132.1,31.8,132.8,31,132.8z"/>
<rect x="50.5" y="67" width="3.5" height="3"/>
<path d="M84.4,70h-7.6v-3h7.6V70z M69.2,70h-7.6v-3h7.6V70z"/>
<rect x="92" y="67" width="3.5" height="3"/>
<rect x="50.5" y="76" width="3.5" height="3"/>
<path d="M84.4,79h-7.6v-3h7.6V79z M69.2,79h-7.6v-3h7.6V79z"/>
<rect x="92" y="76" width="3.5" height="3"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 485 201" style="enable-background:new 0 0 485 201;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M0,170.8c146-6.9,275.9-18.1,389.8-33.6C241.9,153.1,114.4,165.4,7,162L0,170.8L0,170.8z"/>
<polygon class="st0" points="71.5,125.9 229,64.1 228.8,77.8 "/>
<path class="st0" d="M416,170l69-87c-76.3-10.9-148.8-9-230,5l-6.4,21.7L40,144l221-20l10-21c52.6-10,104.3-13.3,155-9
C416.9,122,413.2,147.5,416,170z"/>
<polygon class="st0" points="414,184 35,190 429,201 "/>
<polygon class="st0" points="229,24 55,115 55,136 62,114 229,0 "/>
<polygon class="st0" points="234,7 234,24 370,39 370,70 360,30 "/>
<path class="st0" d="M31,132.8c-0.8,0-1.5-0.7-1.5-1.5V67.8c0-0.2,0-0.4,0.1-0.7l5.6-11.5c0.2-0.5,0.8-0.8,1.3-0.8h78.8
c0.8,0,1.5,0.7,1.5,1.5v11.5c0,0.8-0.7,1.5-1.5,1.5s-1.5-0.7-1.5-1.5v-10H37.5l-5,10.3v63.2C32.5,132.1,31.8,132.8,31,132.8z"/>
<rect x="50.5" y="67" class="st0" width="3.5" height="3"/>
<path class="st0" d="M84.4,70h-7.6v-3h7.6V70z M69.2,70h-7.6v-3h7.6V70z"/>
<rect x="92" y="67" class="st0" width="3.5" height="3"/>
<rect x="50.5" y="76" class="st0" width="3.5" height="3"/>
<path class="st0" d="M84.4,79h-7.6v-3h7.6V79z M69.2,79h-7.6v-3h7.6V79z"/>
<rect x="92" y="76" class="st0" width="3.5" height="3"/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8"?><svg id="_レイヤー_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 135 66.85"><defs><style>.cls-1{stroke-width:0px;}</style></defs><g id="_レイヤー_3"><path class="cls-1" d="m76.98,16.14C44.95,3.88,28.77,9.65,6.32,26.43c26.59-14.38,41.57-16.83,70.66-10.3Z"/><path class="cls-1" d="m12.26,12.7C27.08-.15,28.19-4.7,57.15,5.89,29.09-.04,28.66,2.56,12.26,12.7Z"/><path class="cls-1" d="m110.48,53.56c8.34-9.48,15.04-26.48,17.05-34.65-14.49-2.18-58.08,2.56-127.54,20.38C61.62,17.88,113.64,10.44,135,15.89c-2.62,6.78-14.38,32.69-24.52,37.67Z"/><path class="cls-1" d="m21.56,59.86c9.2-1.3,18.54,1.26,23.92,3.03,7.27,2.39,20.12,2.98,24.24,2.8-1.92.79-16.73,2.43-25.2-.53-6.12-2.14-15.55-5.32-22.96-5.3Z"/><path class="cls-1" d="m9.37,47.57c27.02-1.31,47.29,5.67,63.41,8.5,29.86,5.25,58.99.82,59.27.65-.51.4-32.02,6.89-61.23,2.07-22.45-3.7-39.66-11.66-61.45-11.22Z"/></g></svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_レイヤー_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 135 66.85" fill="#fff">
<defs>
<style>.cls-1{stroke-width:0px;}</style>
</defs>
<g id="_レイヤー_3">
<path class="cls-1"
d="m76.98,16.14C44.95,3.88,28.77,9.65,6.32,26.43c26.59-14.38,41.57-16.83,70.66-10.3Z" />
<path class="cls-1"
d="m12.26,12.7C27.08-.15,28.19-4.7,57.15,5.89,29.09-.04,28.66,2.56,12.26,12.7Z" />
<path class="cls-1"
d="m110.48,53.56c8.34-9.48,15.04-26.48,17.05-34.65-14.49-2.18-58.08,2.56-127.54,20.38C61.62,17.88,113.64,10.44,135,15.89c-2.62,6.78-14.38,32.69-24.52,37.67Z" />
<path class="cls-1"
d="m21.56,59.86c9.2-1.3,18.54,1.26,23.92,3.03,7.27,2.39,20.12,2.98,24.24,2.8-1.92.79-16.73,2.43-25.2-.53-6.12-2.14-15.55-5.32-22.96-5.3Z" />
<path class="cls-1"
d="m9.37,47.57c27.02-1.31,47.29,5.67,63.41,8.5,29.86,5.25,58.99.82,59.27.65-.51.4-32.02,6.89-61.23,2.07-22.45-3.7-39.66-11.66-61.45-11.22Z" />
</g>
</svg>
\ No newline at end of file
......@@ -16,8 +16,6 @@ struct ContentView: View {
@EnvironmentObject private var sceneDelegate: SceneDelegate
let selectedTabModel = SelectedTabModel()
let signalRService = SignalRService()
let locationViewModel = LocationViewModel()
var body: some View {
MainTabView()
......@@ -39,7 +37,7 @@ struct ContentView: View {
selectedTabModel.activeTab = .task
}, content: {
LoginView(isLogin: $loginViewModel.isLogin)
.environmentObject(locationViewModel)
.environmentObject(selectedTabModel)
})
}
}
......
......@@ -8,7 +8,7 @@
import Foundation
import CoreLocation
#if false
#if true
//ECA Coordinates China
var chinaShore:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 39.82805556, longitude: 124.16833333),
......@@ -96,8 +96,8 @@ var chinaHainan:[CLLocationCoordinate2D] = [
]
var chinaYangtziShuifuYunnan:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 28.63858333, longitude: 104.40744444),
CLLocationCoordinate2D(latitude: 28.64013889, longitude: 104.40858333)
CLLocationCoordinate2D(latitude: 28.63331667, longitude: 104.40085000),
CLLocationCoordinate2D(latitude: 28.65005667, longitude: 104.40801667)
]
var chinaYangtziLiuhekouJiangsu1:[CLLocationCoordinate2D] = [
......@@ -111,13 +111,13 @@ var chinaYangtziLiuhekouJiangsu2:[CLLocationCoordinate2D] = [
]
var chinaXijiangNanningGuangxi:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 22.80719444, longitude: 108.30938889),
CLLocationCoordinate2D(latitude: 22.80947222, longitude: 108.30750000)
CLLocationCoordinate2D(latitude: 22.80305000, longitude: 108.31303333),
CLLocationCoordinate2D(latitude: 22.81383333, longitude: 108.29880000)
]
var chinaXijiangNanningGuangdong:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 23.14583333, longitude: 112.80833333),
CLLocationCoordinate2D(latitude: 23.13361111, longitude: 112.78861111)
CLLocationCoordinate2D(latitude: 23.12575000, longitude: 112.77791667),
CLLocationCoordinate2D(latitude: 23.13218333, longitude: 112.81671667)
]
//ECA Coordinates Iceland
......@@ -4083,9 +4083,9 @@ var unitesStatesCaribbean:[CLLocationCoordinate2D] = [
]
var northSea1:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 62.00000000, longitude: 4.99708333),
CLLocationCoordinate2D(latitude: 58.56666667, longitude: -4.00000000),
CLLocationCoordinate2D(latitude: 62.00000000, longitude: -4.00000000)
CLLocationCoordinate2D(latitude: 62.00000000, longitude: -4.00000000),
CLLocationCoordinate2D(latitude: 62.00000000, longitude: 4.99708333)
]
var northSea2:[CLLocationCoordinate2D] = [
......@@ -4313,26 +4313,26 @@ class EcaCoordinatesTable : NSObject {
}
var ecaDataTable:[ecaData] = [
// ecaData(id: 1, name: "Iceland", table: iceland),
// ecaData(id: 11, name: "North American Atlantic Coasts", table: northAmericanAtlanticCoasts),
// ecaData(id: 12, name: "North American Hawai", table: northAmericanHawai),
// ecaData(id: 13, name: "North American Pacific Coasts", table: northAmericanPacificCoasts),
// ecaData(id: 21, name: "North Sea 1", table: northSea1), //err
// ecaData(id: 22, name: "North Sea 2", table: northSea2),
// ecaData(id: 31, name: "Unites States Caribbean", table: unitesStatesCaribbean),
// ecaData(id: 41, name: "China Shore", table: chinaShore),
// ecaData(id: 42, name: "China Hainan", table: chinaHainan),
// ecaData(id: 43, name: "China Yangtzi Shuifu,Yunnan", table: chinaYangtziShuifuYunnan), //err
// ecaData(id: 44, name: "China Yangtzi Liuhekou,Jiangsu1", table: chinaYangtziLiuhekouJiangsu1),
// ecaData(id: 45, name: "China Yangtzi Liuhekou,Jiangsu2", table: chinaYangtziLiuhekouJiangsu2),
// ecaData(id: 46, name: "China Xijiang Nanning,Guangxi", table: chinaXijiangNanningGuangxi), //err
// ecaData(id: 47, name: "China Xijiang Zhaoqing,Guangdong", table: chinaXijiangNanningGuangdong), //err
// ecaData(id: 51, name: "Korea Incheon, PyeongtaekDangjin Port", table: incheonPyeongtaekDanjinPort),
// ecaData(id: 52, name: "Korea Yeosu, Gwangyang Port", table: yeosuGwangyangPort),
// ecaData(id: 53, name: "Korea Busan Port", table: koreaBusanPort),
// ecaData(id: 54, name: "Korea Busan Port West", table: koreaBusanPortWest),
// ecaData(id: 55, name: "Korea Ulsan Port", table: koreaUlsanPort),
// ecaData(id: 61, name: "Panama Canal Atlantic Entrance", table: panamaCanalAtlanticEntrance),
ecaData(id: 1, name: "Iceland", table: iceland),
ecaData(id: 11, name: "North American Atlantic Coasts", table: northAmericanAtlanticCoasts),
ecaData(id: 12, name: "North American Hawai", table: northAmericanHawai),
ecaData(id: 13, name: "North American Pacific Coasts", table: northAmericanPacificCoasts),
ecaData(id: 21, name: "North Sea 1", table: northSea1),
ecaData(id: 22, name: "North Sea 2", table: northSea2),
ecaData(id: 31, name: "Unites States Caribbean", table: unitesStatesCaribbean),
ecaData(id: 41, name: "China Shore", table: chinaShore),
ecaData(id: 42, name: "China Hainan", table: chinaHainan),
ecaData(id: 43, name: "China Yangtzi Shuifu,Yunnan", table: chinaYangtziShuifuYunnan),
ecaData(id: 44, name: "China Yangtzi Liuhekou,Jiangsu1", table: chinaYangtziLiuhekouJiangsu1),
ecaData(id: 45, name: "China Yangtzi Liuhekou,Jiangsu2", table: chinaYangtziLiuhekouJiangsu2),
ecaData(id: 46, name: "China Xijiang Nanning,Guangxi", table: chinaXijiangNanningGuangxi),
ecaData(id: 47, name: "China Xijiang Zhaoqing,Guangdong", table: chinaXijiangNanningGuangdong),
ecaData(id: 51, name: "Korea Incheon, PyeongtaekDangjin Port", table: incheonPyeongtaekDanjinPort),
ecaData(id: 52, name: "Korea Yeosu, Gwangyang Port", table: yeosuGwangyangPort),
ecaData(id: 53, name: "Korea Busan Port", table: koreaBusanPort),
ecaData(id: 54, name: "Korea Busan Port West", table: koreaBusanPortWest),
ecaData(id: 55, name: "Korea Ulsan Port", table: koreaUlsanPort),
ecaData(id: 61, name: "Panama Canal Atlantic Entrance", table: panamaCanalAtlanticEntrance),
ecaData(id: 62, name: "Panama Canal Pacific Entrance", table: panamaCanalPacificEntrance)
]
......
......@@ -37,7 +37,7 @@ class GetEcaList {
value.isRunning = false
value.status = EcaState.register
}
ecaData.ecaArea.updateValue(value, forKey: ecaList.taskName)
ecaData.setEcaArea(key: ecaList.taskName, value: value)
}
}
}
......
......@@ -10,11 +10,11 @@ import Foundation
// TODO: サイトのアドレスを変更
#if CANARY
enum HttpRequestType : String {
case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D"
// case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D"
case RegisterLogin = "https://ssv-canary-web.azurewebsites.net/sailassistlogin"
case SitePolicy = "https://ssv-canary-web.azurewebsites.net/sitepolicy"
case CookiePolicy = "https://ssv-canary-web.azurewebsites.net/cookiepolicy"
case PrivacyPolicy = "https://ssv-canary-web.azurewebsites.net/inapp?" //+バージョン番号
// case PrivacyPolicy = "https://ssv-canary-web.azurewebsites.net/inapp?" //+バージョン番号
case TaskList = "https://ssv-canary-web.azurewebsites.net/api/sailassist/tasklist/XXXXX"
case EcaArea = "https://ssv-canary-web.azurewebsites.net/api/sailassist/ecaarea/XXXXX"
case ShipStatus = "https://ssv-canary-web.azurewebsites.net/api/sailassist/shipstatus/XXXXX"
......@@ -27,14 +27,16 @@ enum HttpRequestType : String {
case HubName = "ssv-canary-sailassist-notification"
case storage = "https://ssvcanarystorage.z1.web.core.windows.net/"
case GetManualUrl = "https://ssv-canary-web.azurewebsites.net/api/constantdata/manual?filter=SailAssist"
case ContactPage = "https://www.jmarinecloud.com/eng/contact.php?type=ssv_mobile"
case ApachLicens = "https://raw.githubusercontent.com/Azure/azure-notificationhubs-ios/main/LICENSE"
}
#elseif QC
enum HttpRequestType : String {
case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D"
// case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D"
case RegisterLogin = "https://ssv-qc-web.azurewebsites.net/sailassistlogin"
case SitePolicy = "https://ssv-qc-web.azurewebsites.net/sitepolicy"
case CookiePolicy = "https://ssv-qc-web.azurewebsites.net/cookiepolicy"
case PrivacyPolicy = "https://ssv-qc-web.azurewebsites.net/inapp?" //+バージョン番号
// case PrivacyPolicy = "https://ssv-qc-web.azurewebsites.net/inapp?" //+バージョン番号
case TaskList = "https://ssv-qc-web.azurewebsites.net/api/sailassist/tasklist/XXXXX"
case EcaArea = "https://ssv-qc-web.azurewebsites.net/api/sailassist/ecaarea"
case ShipStatus = "https://ssv-qc-web.azurewebsites.net/api/sailassist/shipstatus/XXXXX"
......@@ -47,15 +49,17 @@ enum HttpRequestType : String {
case HubName = "ssv-qc-sailassist-notification"
case storage = "https://tacmiquaritycheckstorage.z31.web.core.windows.net/"
case GetManualUrl = "https://ssv-qc-web.azurewebsites.net/api/constantdata/manual?filter=SailAssist"
case ContactPage = "https://www.jmarinecloud.com/eng/contact.php?type=ssv_mobile"
case ApachLicens = "https://raw.githubusercontent.com/Azure/azure-notificationhubs-ios/main/LICENSE"
}
#else
//MARK: 運用サーバー用
enum HttpRequestType : String {
case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D"
// case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D"
case RegisterLogin = "https://ssv.jmarinecloud.com/sailassistlogin"
case SitePolicy = "https://ssv.jmarinecloud.com/sitepolicy"
case CookiePolicy = "https://ssv.jmarinecloud.com/cookiepolicy"
case PrivacyPolicy = "https://ssv.jmarinecloud.com/inapp?" //+バージョン番号
// case PrivacyPolicy = "https://ssv.jmarinecloud.com/inapp?" //+バージョン番号
case TaskList = "https://ssv.jmarinecloud.com/api/sailassist/tasklist/XXXXX"
case EcaArea = "https://ssv.jmarinecloud.com/api/sailassist/ecaarea"
case ShipStatus = "https://ssv.jmarinecloud.com/api/sailassist/shipstatus/XXXXX"
......@@ -68,5 +72,7 @@ enum HttpRequestType : String {
case HubName = "ssv-sailassist-notification"
case storage = "https://tacmistorage.z31.web.core.windows.net/"
case GetManualUrl = "https://ssv.jmarinecloud.com/api/constantdata/manual?filter=SailAssist"
case ContactPage = "https://www.jmarinecloud.com/eng/contact.php?type=ssv_mobile"
case ApachLicens = "https://raw.githubusercontent.com/Azure/azure-notificationhubs-ios/main/LICENSE"
}
#endif
......@@ -9,7 +9,8 @@ import CoreLocation
class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
@Published var authorizationStatus: CLAuthorizationStatus
@Published var lastSeenLocation: CLLocation?
var lastSeenLocation: CLLocation?
var serverLocationInterval: Int64 = 0
private let locationManager: CLLocationManager
let ecaTask = EcaTask()
......@@ -21,9 +22,8 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
super.init()
}
func requestPermission() -> (alert: Bool, type: AlertType) {
var alert = false
let type: AlertType = .gpsPermission
func requestPermission() -> Bool {
var alert = true
locationManager.requestWhenInUseAuthorization()
locationManager.requestAlwaysAuthorization() // バックグラウンド実行中も座標取得する場合はこちら
......@@ -31,16 +31,16 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
let status = CLLocationManager().authorizationStatus
switch status {
case .authorizedAlways :
print(debug: "authorizationStatus : .authorizedAlways")
alert = false
print(debug: "authorizationStatus : .authorizedAlways") //常に利用許可
case .notDetermined:
alert = true
print(debug: "authorizationStatus : .notDetermined")
print(debug: "authorizationStatus : .notDetermined") //一度だけ許可
case .restricted:
print(debug: "authorizationStatus : .restricted")
print(debug: "authorizationStatus : .restricted") //ペアレンタルコントロールなどの影響で制限中
case .denied:
print(debug: "authorizationStatus : .denied")
print(debug: "authorizationStatus : .denied") //利用拒否
case .authorizedWhenInUse:
print(debug: "authorizationStatus : .authorizedWhenInUse")
print(debug: "authorizationStatus : .authorizedWhenInUse") //使用中のみ利用許可
@unknown default:
print(debug: "authorizationStatus : Unknown")
}
......@@ -59,7 +59,7 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
locationManager.startUpdatingLocation()
}
return(alert, type)
return alert
}
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
......@@ -85,10 +85,13 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
}
if Preferences.LocationType == 1 {
if serverLocationInterval <= DateTextLib.Date2UnixTime(date: Date()) {
let eca = EcaTask()
eca.start()
ecaTask.checkEca()
self.ecaTask.checkEca()
serverLocationInterval = DateTextLib.Date2UnixTime(date: Date()) + Int64(TimerInterval)
}
}
}
......
......@@ -18,8 +18,9 @@ enum LoginViewMode: String{
enum AlertType: String {
case loginFailure
case QrFailure
case ClientError
case Expired
case gpsPermission
}
class LoginViewParam: ObservableObject{
......@@ -33,6 +34,7 @@ let TimerInterval = 60.0 * 10.0
struct LoginView: View {
@ObservedObject var scannerViewModel = ScannerViewModel()
@EnvironmentObject var locationViewModel: LocationViewModel
@EnvironmentObject var selectedTabModel: SelectedTabModel
@Binding var isLogin: Bool
@State var isQrRead: Bool = false
@State var viewMode: LoginViewMode = .SelectType
......@@ -85,7 +87,10 @@ struct LoginView: View {
if !isProgressView {
Link("Site policy", destination: URL(string: HttpRequestType.SitePolicy.rawValue)!)
Link("Cookie policy", destination: URL(string: HttpRequestType.CookiePolicy.rawValue)!)
Link("Privacy policy", destination: URL(string: HttpRequestType.PrivacyPolicy.rawValue)!)
if let htmlPath = Bundle.main.path(forResource: "PrivacyView", ofType: "html") {
Link("Privacy policy", destination: URL(fileURLWithPath: htmlPath))
}
// Link("Privacy policy", destination: URL(string: HttpRequestType.CookiePolicy.rawValue)!)
} else {
EmptyView()
}
......@@ -101,20 +106,25 @@ struct LoginView: View {
.alert(isPresented: $isAlert) {
switch alertType {
case .loginFailure:
return Alert(title: Text("error"),
return Alert(title: Text("Error"),
message: Text("Ship ID or Password is incorrect."),
dismissButton: .default(Text("OK"), action: {viewMode = .SelectType})
)
case .QrFailure:
return Alert(title: Text("Error"),
message: Text("QR code is incorrect."),
dismissButton: .default(Text("OK"), action: {viewMode = .SelectType})
)
case .ClientError:
return Alert(title: Text("Error"),
message: Text("Not connected to network."),
dismissButton: .default(Text("OK"), action: {viewMode = .SelectType})
)
case .Expired:
return Alert(title: Text("error"),
return Alert(title: Text("Error"),
message: Text("Expired."),
dismissButton: .default(Text("OK"), action: {viewMode = .SelectType})
)
case .gpsPermission:
return Alert(title: Text("location"),
message: Text("Allow use of location information."),
dismissButton: .default(Text("Next"), action: {locationViewModel.requestPermission()})
)
}
}
}
......@@ -125,9 +135,7 @@ struct LoginView: View {
})
.onAppear() {
LoginCheck()
let result = locationViewModel.requestPermission()
isAlert = result.alert
alertType = result.type
selectedTabModel.isLocationAlert = locationViewModel.requestPermission()
}
.preferredColorScheme(.dark)
}
......@@ -168,6 +176,9 @@ struct LoginView: View {
SharingData.my.mmsi = res.mmsi
Preferences.shipId = res.shipId
let notificationTags = NotificationTags()
notificationTags.addTags()
}
Preferences.lastLoginDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
......@@ -197,9 +208,16 @@ struct LoginView: View {
case .failure(let errorCode):
print(debug: errorCode)
switch errorCode {
case .clientError:
alertType = .ClientError
case .serverError:
alertType = .QrFailure
default:
alertType = .QrFailure
}
isLogin = false
isAlert = true
alertType = .loginFailure
break
}
isProgressView = false
......@@ -218,6 +236,9 @@ struct LoginView: View {
SharingData.my.mmsi = res.mmsi
Preferences.shipId = res.shipId
let notificationTags = NotificationTags()
notificationTags.addTags()
}
Preferences.lastLoginDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
......@@ -247,9 +268,16 @@ struct LoginView: View {
case .failure(let errorCode):
print(debug: errorCode)
switch errorCode {
case .clientError:
alertType = .ClientError
case .serverError:
alertType = .loginFailure
default:
alertType = .loginFailure
}
isLogin = false
isAlert = true
alertType = .loginFailure
break
}
isProgressView = false
......@@ -270,4 +298,5 @@ fileprivate struct Triangle: Shape{
#Preview {
LoginView(isLogin: .constant(false))
.environmentObject(SelectedTabModel())
}
......@@ -86,7 +86,7 @@ struct InputIdPassWordView: View {
.background(ColorSet.LoginBk01.color)
})
.alert(isPresented: $isIdPassWordEmpty, content: {
Alert(title: Text("error"),
Alert(title: Text("Error"),
message: Text("Ship ID or Password is incorrect.")
)
})
......@@ -110,6 +110,9 @@ struct InputIdPassWordView: View {
SharingData.my.mmsi = res.mmsi
Preferences.shipId = res.shipId
let notificationTags = NotificationTags()
notificationTags.addTags()
}
Preferences.lastLoginDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
......@@ -139,9 +142,16 @@ struct InputIdPassWordView: View {
case .failure(let errorCode):
print(debug: errorCode)
switch errorCode {
case .clientError:
alertType = .ClientError
case .serverError:
alertType = .loginFailure
default:
alertType = .loginFailure
}
isLogin = false
isAlert = true
alertType = .loginFailure
break
}
isProgressView = false
......
......@@ -61,7 +61,7 @@ struct InputUserNameView: View {
.background(ColorSet.LoginBk01.color)
})
.alert(isPresented: $isEmptyAlert) {
return Alert(title: Text("error"),
return Alert(title: Text("Error"),
message: Text("User Nmae not entered.")
)
}
......
......@@ -35,8 +35,11 @@ struct EcaSettingView: View {
Divider()
.frame(height: 1)
.background(ColorSet.LineColor04.color)
Button(action: {
SharingData.eca.editEcaArea(key: edittingEca.name, value: edittingEca, type: EcaOperation.Change)
var ecaData = edittingEca
ecaData.isEnable = true
SharingData.eca.editEcaArea(key: edittingEca.name, value: ecaData, type: EcaOperation.Change)
isShowSettingEca = false
}, label: {
Text("Register")
......
......@@ -82,10 +82,10 @@ struct TaskSwitchingMenuView: View {
.alert(isPresented: $isEcaAlert) {
switch ecaAlertType {
case .ecaDelete:
return Alert(title: Text("delete"),
message: Text("Do you delete " + eca.name),
primaryButton: .default(Text("cancel")),
secondaryButton: .cancel(Text("delete"), action: {
return Alert(title: Text("Delete"),
message: Text("Do you delete " + eca.name + "?"),
primaryButton: .default(Text("No")),
secondaryButton: .cancel(Text("Yes"), action: {
if let ecaArea = taskViewModel.edittingEcaArea {
var newData = ecaArea
newData.isEnable = false
......@@ -97,10 +97,10 @@ struct TaskSwitchingMenuView: View {
taskViewModel.edittingEcaArea = nil
}))
case .ecaRunningStop:
return Alert(title: Text("stop"),
message: Text("Do you want to stop " + eca.name),
primaryButton: .default(Text("cancel")),
secondaryButton: .cancel(Text("stop"), action: {
return Alert(title: Text("Stop"),
message: Text("Do you want to stop " + eca.name + "?"),
primaryButton: .default(Text("Cancel")),
secondaryButton: .cancel(Text("Stop"), action: {
if let ecaArea = taskViewModel.edittingEcaArea {
var newData = ecaArea
newData.isRunning = false
......
......@@ -184,6 +184,14 @@ struct MenuView: View {
}else if goto == .AboutApp{
MenuAboutAppView(path: $path)
.navigationBarHidden(true)
}else if goto == .TermsOfUse{
MenuLocalHtmlView(path: $path)
.navigationBarHidden(true)
}else if goto == .PrivacyStatement{
MenuLocalHtmlView(path: $path)
.navigationBarHidden(true)
}else if goto == .ContactUs{
WebView(isLoading: .constant(false), url: HttpRequestType.ContactPage.rawValue)
}else{
VStack(spacing: 0) {
MenuTitleView(path: $path, title: goto.title)
......@@ -199,17 +207,15 @@ struct MenuView: View {
}
}
.alert(isPresented: $isSignout) {
return Alert(title: Text("Sign Out"),
message: Text("Are you sure?"),
primaryButton: .default(Text("No")), secondaryButton: .cancel(Text("Yes"), action: {
.alert("Sign Out", isPresented: $isSignout) {
Button("Yes") {
Preferences.Id = ""
Preferences.Password = ""
Preferences.UserName = ""
loginViewModel.isLogin = false
sceneDelegate.tabWindow?.isHidden = true
}))
}
Button("No") {}
} message: { Text("Are you sure?") }
}
}
}
......
......@@ -18,11 +18,11 @@ struct MenuAboutAppView: View {
HStack {
VStack(alignment: .leading, spacing: 10){
Text("Version")
.font(FontStyle.EmphasisText.font)
.font(FontStyle.SupplementText.font)
.foregroundColor(ColorSet.BodyDescriptiion.color)
#if CANARY
Text("\(version)" + " Canary")
.font(FontStyle.EmphasisText.font)
.font(FontStyle.SupplementText.font)
.foregroundColor(ColorSet.Body.color)
#elseif QC
Text("\(version)" + " QC")
......@@ -44,7 +44,7 @@ struct MenuAboutAppView: View {
Spacer().frame(height: 50)
Text("Policy")
.font(FontStyle.EmphasisText.font)
.font(FontStyle.SupplementText.font)
.foregroundColor(ColorSet.BodyDescriptiion.color)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.leading, 30)
......@@ -64,7 +64,7 @@ struct MenuAboutAppView: View {
Spacer().frame(height: 50)
Text("Open Source Licenses")
.font(FontStyle.EmphasisText.font)
.font(FontStyle.SupplementText.font)
.foregroundColor(ColorSet.BodyDescriptiion.color)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.leading, 30)
......@@ -77,6 +77,11 @@ struct MenuAboutAppView: View {
.foregroundColor(ColorSet.Body.color)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.leading, 30)
VStack(spacing: 30) {
Link("https://github.com/Azure/azure-notificationhubs-ios/blob/main/LICENSE", destination: URL(string: HttpRequestType.ApachLicens.rawValue)!)
}
.font(FontStyle.RadioButtonText.font)
.foregroundColor(ColorSet.Body.color)
Spacer()
}
.background(ColorSet.BackgroundPrimary.color)
......
//
// MenuLocalHtmlView.swift
// Sailassist
//
// Created by 三浦薫巳 on 2023/12/19.
//
import Foundation
import SwiftUI
struct MenuLocalHtmlView: View {
@State var isAlert: Bool = false
@Binding var path : [MenuPath]
var body: some View {
VStack{
let aaa = path
MenuTitleView(path: $path, title: MenuPath.ManualRADAR.title)
// if content.rawValue != "TermsOfUse" {
// if let htmlPath = Bundle.main.path(forResource: "TermsView", ofType: "html") {
// WebView(isLoading: .constant(false), url: htmlPath)
// }
// } else if content.rawValue != "PrivacyStatement" {
// if let htmlPath = Bundle.main.path(forResource: "PrivacyView", ofType: "html") {
// WebView(isLoading: .constant(false), url: htmlPath)
// }
// }
Spacer()
}
.background(ColorSet.BackgroundPrimary.color)
.alert("delete", isPresented: $isAlert) {
Button(role: .destructive) {
} label: {
Text("delete")
}
} message: {
Text("eca delete")
}
}
}
#Preview {
MenuLocalHtmlView(path: .constant([.ManualRADAR]))
}
......@@ -15,12 +15,16 @@ struct SailassistApp: App {
@State private var isTermsAgree = Preferences.termsAgreeDate != nil
@State private var isPrivAgree = Preferences.privacyPolicyAgreeDate != nil
let locationViewModel = LocationViewModel()
let signalRService = SignalRService()
var body: some Scene {
WindowGroup {
if !isTermsAgree{
VStack(spacing: 0){
WebView(isLoading: .constant(false), url: HttpRequestType.Terms.rawValue)
if let htmlPath = Bundle.main.path(forResource: "TermsView", ofType: "html") {
WebView(isLoading: .constant(false), url: htmlPath)
}
YesNoButtons(yesTitle: "Accept", noTitle: "Cancel") {
Preferences.termsAgreeDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
......@@ -33,7 +37,9 @@ struct SailassistApp: App {
}else if !isPrivAgree{
VStack(spacing: 0){
WebView(isLoading: .constant(false), url: HttpRequestType.Terms.rawValue)
if let htmlPath = Bundle.main.path(forResource: "PrivacyView", ofType: "html") {
WebView(isLoading: .constant(false), url: htmlPath)
}
YesNoButtons(yesTitle: "Accept", noTitle: "Cancel") {
Preferences.privacyPolicyAgreeDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
......@@ -49,6 +55,7 @@ struct SailassistApp: App {
.onAppear(perform: {
getManualUrl()
})
.environmentObject(locationViewModel)
}
}
......@@ -76,19 +83,19 @@ struct SailassistApp: App {
}
}
//class notificationTags: NSObject {
// func addTags() {
// if Preferences.shipId != 0 {
// let shipId = String(Preferences.shipId)
// let testTag = "aaa"
// let routeTag = "route-" + shipId
// let bamTag = "bam-" + shipId
// let taskAlertTag = "taskalert-" + shipId
// let sailassistTag = "sailassist-" + shipId
// MSNotificationHub.addTags([testTag, routeTag, bamTag, taskAlertTag, sailassistTag])
// }
// }
//}
class NotificationTags: NSObject {
func addTags() {
if Preferences.shipId != 0 {
let shipId = String(Preferences.shipId)
let routeTag = "route-" + shipId
let bamTag = "bam-" + shipId
let taskAlertTag = "taskalert-" + shipId
let sailassistTag = "sailassist-" + shipId
MSNotificationHub.addTags([routeTag, bamTag, taskAlertTag, sailassistTag])
}
}
}
class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, MSInstallationLifecycleDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
......@@ -105,7 +112,6 @@ class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, M
MSNotificationHub.setDelegate(self)
MSNotificationHub.start(connectionString: HttpRequestType.ConnectionString.rawValue, hubName: HttpRequestType.HubName.rawValue)
self.addTags()
}
}
application.registerForRemoteNotifications()
......@@ -120,19 +126,6 @@ class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, M
return config
}
func addTags() {
if Preferences.shipId != 0 {
let shipId = String(Preferences.shipId)
// let shipId = "10000083"
let routeTag = "route-" + shipId
let bamTag = "bam-" + shipId
let taskAlertTag = "taskalert-" + shipId
let sailassistTag = "sailassist-" + shipId
MSNotificationHub.addTags([routeTag, bamTag, taskAlertTag, sailassistTag])
MSNotificationHub.addTags([routeTag])
}
}
// Push通知を受信した時(サイレントプッシュ)
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print(debug: "called \(userInfo)")
......
......@@ -8,7 +8,9 @@
import SwiftUI
enum Tab: String, CaseIterable{
#if CANARY
case chat = "tab_chat"
#endif
case task = "tab_task"
case alert = "tab_notification"
case menu = "tab_menu"
......@@ -36,9 +38,10 @@ struct MainTabView: View {
@State var isTabShow: Bool = sceneDelegate.tabWindow != nil
@State var isTaskSel: Bool = selectedTabModel.activeTab == .task
TabView(selection: $selectedTabModel.activeTab){
#if CANARY
ChatView()
.tag(Tab.chat)
#endif
MapRepresentable()
.ignoresSafeArea()
.tag(Tab.task)
......@@ -65,6 +68,8 @@ struct MainTabView: View {
struct CustomTabBar: View {
@EnvironmentObject private var selectedTabModel: SelectedTabModel
@State var isLocationAlert = false
var body: some View {
VStack(spacing: 0){
Divider()
......@@ -105,6 +110,12 @@ struct CustomTabBar: View {
} message: {
Text("Do you change an emargency mode?")
}
.alert("location", isPresented: $selectedTabModel.isLocationAlert) {
Button("OK") {
}
} message: {
Text("To use ECA,set the permission to use location information to ALWAYS.")
}
}
}
......
......@@ -11,4 +11,5 @@ import SwiftUI
class SelectedTabModel: ObservableObject {
@Published var activeTab: Tab = .task
@Published var isShowChangeEmrMode: Bool = false
@Published var isLocationAlert: Bool = false
}
......@@ -13,7 +13,13 @@ struct WebView: UIViewRepresentable {
var url : String
func makeUIView(context: Context) -> WKWebView {
let request = URLRequest(url: URL(string: url)!)
var address: URL
if url.contains("https://") {
address = URL(string: url)!
} else {
address = URL(fileURLWithPath: url)
}
let request = URLRequest(url: address)
let webView = WKWebView()
webView.navigationDelegate = context.coordinator
webView.load(request)
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Privacy Statement</title>
</head>
<body>
<h1>Privacy Statement</h1>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment