diff --git a/.nuget/Nuget.Config b/.nuget/Nuget.Config new file mode 100644 index 0000000..57427d3 --- /dev/null +++ b/.nuget/Nuget.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.tfignore b/.tfignore new file mode 100644 index 0000000..38b87bf --- /dev/null +++ b/.tfignore @@ -0,0 +1,2 @@ +\packages +!\packages\repositories.config \ No newline at end of file diff --git a/KBS.App.TaxonFinder.sln b/KBS.App.TaxonFinder.sln new file mode 100644 index 0000000..456e84d --- /dev/null +++ b/KBS.App.TaxonFinder.sln @@ -0,0 +1,213 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29230.61 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KBS.App.TaxonFinder", "KBS.Xamarin.TaxonFinder\KBS.Xamarin.TaxonFinder\KBS.App.TaxonFinder.csproj", "{C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KBS.App.TaxonFinder.Droid", "KBS.Xamarin.TaxonFinder\KBS.Xamarin.TaxonFinder.Droid\KBS.App.TaxonFinder.Droid.csproj", "{56CF43F1-068F-428D-91A9-267EF24BAB3B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KBS.App.TaxonFinder.iOS", "KBS.Xamarin.TaxonFinder\KBS.Xamarin.TaxonFinder.iOS\KBS.App.TaxonFinder.iOS.csproj", "{0C749AF1-530A-423D-A96B-315025FE23F4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Ad-Hoc|Any CPU = Ad-Hoc|Any CPU + Ad-Hoc|ARM = Ad-Hoc|ARM + Ad-Hoc|iPhone = Ad-Hoc|iPhone + Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator + Ad-Hoc|x64 = Ad-Hoc|x64 + Ad-Hoc|x86 = Ad-Hoc|x86 + AppStore|Any CPU = AppStore|Any CPU + AppStore|ARM = AppStore|ARM + AppStore|iPhone = AppStore|iPhone + AppStore|iPhoneSimulator = AppStore|iPhoneSimulator + AppStore|x64 = AppStore|x64 + AppStore|x86 = AppStore|x86 + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|iPhone = Debug|iPhone + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|iPhone = Release|iPhone + Release|iPhoneSimulator = Release|iPhoneSimulator + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|Any CPU.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|ARM.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|ARM.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|iPhone.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|x64.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|x64.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|x86.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.AppStore|x86.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|ARM.ActiveCfg = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|ARM.Build.0 = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|iPhone.Build.0 = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|x64.ActiveCfg = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|x64.Build.0 = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|x86.ActiveCfg = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Debug|x86.Build.0 = Debug|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|Any CPU.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|ARM.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|ARM.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|iPhone.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|iPhone.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|x64.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|x64.Build.0 = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|x86.ActiveCfg = Release|Any CPU + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B}.Release|x86.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|ARM.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|iPhone.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|x64.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Ad-Hoc|x86.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|Any CPU.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|Any CPU.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|ARM.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|ARM.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|ARM.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|iPhone.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|iPhone.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|iPhoneSimulator.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|x64.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|x64.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|x64.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|x86.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|x86.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.AppStore|x86.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|ARM.ActiveCfg = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|ARM.Build.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|ARM.Deploy.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|iPhone.Build.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|iPhone.Deploy.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|x64.ActiveCfg = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|x64.Build.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|x64.Deploy.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|x86.ActiveCfg = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|x86.Build.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Debug|x86.Deploy.0 = Debug|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|Any CPU.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|ARM.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|ARM.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|ARM.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|iPhone.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|iPhone.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|iPhone.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|x64.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|x64.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|x64.Deploy.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|x86.ActiveCfg = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|x86.Build.0 = Release|Any CPU + {56CF43F1-068F-428D-91A9-267EF24BAB3B}.Release|x86.Deploy.0 = Release|Any CPU + {0C749AF1-530A-423D-A96B-315025FE23F4}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.Ad-Hoc|x64.ActiveCfg = Ad-Hoc|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.AppStore|ARM.ActiveCfg = AppStore|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.AppStore|iPhone.ActiveCfg = AppStore|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.AppStore|iPhone.Build.0 = AppStore|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.AppStore|x64.ActiveCfg = AppStore|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.AppStore|x86.ActiveCfg = AppStore|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.Debug|ARM.ActiveCfg = Debug|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Debug|iPhone.ActiveCfg = Debug|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Debug|iPhone.Build.0 = Debug|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.Debug|x64.ActiveCfg = Debug|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Debug|x86.ActiveCfg = Debug|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Release|Any CPU.ActiveCfg = Release|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Release|ARM.ActiveCfg = Release|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Release|iPhone.ActiveCfg = Release|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Release|iPhone.Build.0 = Release|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {0C749AF1-530A-423D-A96B-315025FE23F4}.Release|x64.ActiveCfg = Release|iPhone + {0C749AF1-530A-423D-A96B-315025FE23F4}.Release|x86.ActiveCfg = Release|iPhone + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {96C05586-16FE-4C46-9770-B98EBB73CD45} + EndGlobalSection + GlobalSection(TeamFoundationVersionControl) = preSolution + SccNumberOfProjects = 4 + SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} + SccTeamFoundationServer = http://tfs2013:8080/tfs/naturkundeprojekte + SccLocalPath0 = . + SccProjectUniqueName1 = KBS.Xamarin.TaxonFinder\\KBS.Xamarin.TaxonFinder.Droid\\KBS.App.TaxonFinder.Droid.csproj + SccProjectName1 = KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid + SccLocalPath1 = KBS.Xamarin.TaxonFinder\\KBS.Xamarin.TaxonFinder.Droid + SccProjectUniqueName2 = KBS.Xamarin.TaxonFinder\\KBS.Xamarin.TaxonFinder.iOS\\KBS.App.TaxonFinder.iOS.csproj + SccProjectName2 = KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.iOS + SccLocalPath2 = KBS.Xamarin.TaxonFinder\\KBS.Xamarin.TaxonFinder.iOS + SccProjectUniqueName3 = KBS.Xamarin.TaxonFinder\\KBS.Xamarin.TaxonFinder\\KBS.App.TaxonFinder.csproj + SccProjectName3 = KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder + SccLocalPath3 = KBS.Xamarin.TaxonFinder\\KBS.Xamarin.TaxonFinder + EndGlobalSection +EndGlobal diff --git a/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Api/Mobile.cs b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Api/Mobile.cs new file mode 100644 index 0000000..ede0955 --- /dev/null +++ b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Api/Mobile.cs @@ -0,0 +1,438 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +// +// This code was auto-generated by SlSvcUtil, version 5.0.61118.0 +// + +namespace KBS.App.TaxonFinder.Droid.Api +{ + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace = "", ConfigurationName = "Mobile")] + public interface Mobile + { + + [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "urn:Mobile/Register", ReplyAction = "urn:Mobile/RegisterResponse")] + System.IAsyncResult BeginRegister(string username, string password, string deviceId, System.AsyncCallback callback, object asyncState); + + string EndRegister(System.IAsyncResult result); + + [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "urn:Mobile/AddNewUser", ReplyAction = "urn:Mobile/AddNewUserResponse")] + System.IAsyncResult BeginAddNewUser(string givenname, string surname, string mail, string password, string comment, string source, System.AsyncCallback callback, object asyncState); + + string EndAddNewUser(System.IAsyncResult result); + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + public interface MobileChannel : Mobile, System.ServiceModel.IClientChannel + { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + public partial class RegisterCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs + { + + private object[] results; + + public RegisterCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) + { + this.results = results; + } + + public string Result + { + get + { + base.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + public partial class AddNewUserCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs + { + + private object[] results; + + public AddNewUserCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) + { + this.results = results; + } + + public string Result + { + get + { + base.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + public partial class MobileClient : System.ServiceModel.ClientBase, Mobile + { + + private BeginOperationDelegate onBeginRegisterDelegate; + + private EndOperationDelegate onEndRegisterDelegate; + + private System.Threading.SendOrPostCallback onRegisterCompletedDelegate; + + private BeginOperationDelegate onBeginAddNewUserDelegate; + + private EndOperationDelegate onEndAddNewUserDelegate; + + private System.Threading.SendOrPostCallback onAddNewUserCompletedDelegate; + + private BeginOperationDelegate onBeginOpenDelegate; + + private EndOperationDelegate onEndOpenDelegate; + + private System.Threading.SendOrPostCallback onOpenCompletedDelegate; + + private BeginOperationDelegate onBeginCloseDelegate; + + private EndOperationDelegate onEndCloseDelegate; + + private System.Threading.SendOrPostCallback onCloseCompletedDelegate; + + public MobileClient() + { + } + + public MobileClient(string endpointConfigurationName) : + base(endpointConfigurationName) + { + } + + public MobileClient(string endpointConfigurationName, string remoteAddress) : + base(endpointConfigurationName, remoteAddress) + { + } + + public MobileClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : + base(endpointConfigurationName, remoteAddress) + { + } + + public MobileClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) + { + } + + public System.Net.CookieContainer CookieContainer + { + get + { + System.ServiceModel.Channels.IHttpCookieContainerManager httpCookieContainerManager = this.InnerChannel.GetProperty(); + if ((httpCookieContainerManager != null)) + { + return httpCookieContainerManager.CookieContainer; + } + else + { + return null; + } + } + set + { + System.ServiceModel.Channels.IHttpCookieContainerManager httpCookieContainerManager = this.InnerChannel.GetProperty(); + if ((httpCookieContainerManager != null)) + { + httpCookieContainerManager.CookieContainer = value; + } + else + { + throw new System.InvalidOperationException("Unable to set the CookieContainer. Please make sure the binding contains an HttpC" + + "ookieContainerBindingElement."); + } + } + } + + public event System.EventHandler RegisterCompleted; + + public event System.EventHandler AddNewUserCompleted; + + public event System.EventHandler OpenCompleted; + + public event System.EventHandler CloseCompleted; + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + System.IAsyncResult Mobile.BeginRegister(string username, string password, string deviceId, System.AsyncCallback callback, object asyncState) + { + return base.Channel.BeginRegister(username, password, deviceId, callback, asyncState); + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + string Mobile.EndRegister(System.IAsyncResult result) + { + return base.Channel.EndRegister(result); + } + + private System.IAsyncResult OnBeginRegister(object[] inValues, System.AsyncCallback callback, object asyncState) + { + string username = ((string)(inValues[0])); + string password = ((string)(inValues[1])); + string deviceId = ((string)(inValues[2])); + return ((Mobile)(this)).BeginRegister(username, password, deviceId, callback, asyncState); + } + + private object[] OnEndRegister(System.IAsyncResult result) + { + string retVal = ((Mobile)(this)).EndRegister(result); + return new object[] { + retVal}; + } + + private void OnRegisterCompleted(object state) + { + if ((this.RegisterCompleted != null)) + { + InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state)); + this.RegisterCompleted(this, new RegisterCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState)); + } + } + + public void RegisterAsync(string username, string password, string deviceId) + { + this.RegisterAsync(username, password, deviceId, null); + } + + public void RegisterAsync(string username, string password, string deviceId, object userState) + { + if ((this.onBeginRegisterDelegate == null)) + { + this.onBeginRegisterDelegate = new BeginOperationDelegate(this.OnBeginRegister); + } + if ((this.onEndRegisterDelegate == null)) + { + this.onEndRegisterDelegate = new EndOperationDelegate(this.OnEndRegister); + } + if ((this.onRegisterCompletedDelegate == null)) + { + this.onRegisterCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnRegisterCompleted); + } + base.InvokeAsync(this.onBeginRegisterDelegate, new object[] { + username, + password, + deviceId}, this.onEndRegisterDelegate, this.onRegisterCompletedDelegate, userState); + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + System.IAsyncResult Mobile.BeginAddNewUser(string givenname, string surname, string mail, string password, string comment, string source, System.AsyncCallback callback, object asyncState) + { + return base.Channel.BeginAddNewUser(givenname, surname, mail, password, comment, source, callback, asyncState); + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + string Mobile.EndAddNewUser(System.IAsyncResult result) + { + return base.Channel.EndAddNewUser(result); + } + + private System.IAsyncResult OnBeginAddNewUser(object[] inValues, System.AsyncCallback callback, object asyncState) + { + string givenname = ((string)(inValues[0])); + string surname = ((string)(inValues[1])); + string mail = ((string)(inValues[2])); + string password = ((string)(inValues[3])); + string comment = ((string)(inValues[4])); + string source = ((string)(inValues[5])); + return ((Mobile)(this)).BeginAddNewUser(givenname, surname, mail, password, comment, source, callback, asyncState); + } + + private object[] OnEndAddNewUser(System.IAsyncResult result) + { + string retVal = ((Mobile)(this)).EndAddNewUser(result); + return new object[] { + retVal}; + } + + private void OnAddNewUserCompleted(object state) + { + if ((this.AddNewUserCompleted != null)) + { + InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state)); + this.AddNewUserCompleted(this, new AddNewUserCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState)); + } + } + + public void AddNewUserAsync(string givenname, string surname, string mail, string password, string comment, string source) + { + this.AddNewUserAsync(givenname, surname, mail, password, comment, source, null); + } + + public void AddNewUserAsync(string givenname, string surname, string mail, string password, string comment, string source, object userState) + { + if ((this.onBeginAddNewUserDelegate == null)) + { + this.onBeginAddNewUserDelegate = new BeginOperationDelegate(this.OnBeginAddNewUser); + } + if ((this.onEndAddNewUserDelegate == null)) + { + this.onEndAddNewUserDelegate = new EndOperationDelegate(this.OnEndAddNewUser); + } + if ((this.onAddNewUserCompletedDelegate == null)) + { + this.onAddNewUserCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnAddNewUserCompleted); + } + base.InvokeAsync(this.onBeginAddNewUserDelegate, new object[] { + givenname, + surname, + mail, + password, + comment, + source}, this.onEndAddNewUserDelegate, this.onAddNewUserCompletedDelegate, userState); + } + + private System.IAsyncResult OnBeginOpen(object[] inValues, System.AsyncCallback callback, object asyncState) + { + return ((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(callback, asyncState); + } + + private object[] OnEndOpen(System.IAsyncResult result) + { + ((System.ServiceModel.ICommunicationObject)(this)).EndOpen(result); + return null; + } + + private void OnOpenCompleted(object state) + { + if ((this.OpenCompleted != null)) + { + InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state)); + this.OpenCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState)); + } + } + + public void OpenAsync() + { + this.OpenAsync(null); + } + + public void OpenAsync(object userState) + { + if ((this.onBeginOpenDelegate == null)) + { + this.onBeginOpenDelegate = new BeginOperationDelegate(this.OnBeginOpen); + } + if ((this.onEndOpenDelegate == null)) + { + this.onEndOpenDelegate = new EndOperationDelegate(this.OnEndOpen); + } + if ((this.onOpenCompletedDelegate == null)) + { + this.onOpenCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnOpenCompleted); + } + base.InvokeAsync(this.onBeginOpenDelegate, null, this.onEndOpenDelegate, this.onOpenCompletedDelegate, userState); + } + + private System.IAsyncResult OnBeginClose(object[] inValues, System.AsyncCallback callback, object asyncState) + { + return ((System.ServiceModel.ICommunicationObject)(this)).BeginClose(callback, asyncState); + } + + private object[] OnEndClose(System.IAsyncResult result) + { + ((System.ServiceModel.ICommunicationObject)(this)).EndClose(result); + return null; + } + + private void OnCloseCompleted(object state) + { + if ((this.CloseCompleted != null)) + { + InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state)); + this.CloseCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState)); + } + } + + public void CloseAsync() + { + this.CloseAsync(null); + } + + public void CloseAsync(object userState) + { + if ((this.onBeginCloseDelegate == null)) + { + this.onBeginCloseDelegate = new BeginOperationDelegate(this.OnBeginClose); + } + if ((this.onEndCloseDelegate == null)) + { + this.onEndCloseDelegate = new EndOperationDelegate(this.OnEndClose); + } + if ((this.onCloseCompletedDelegate == null)) + { + this.onCloseCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnCloseCompleted); + } + base.InvokeAsync(this.onBeginCloseDelegate, null, this.onEndCloseDelegate, this.onCloseCompletedDelegate, userState); + } + + protected override Mobile CreateChannel() + { + return new MobileClientChannel(this); + } + + private class MobileClientChannel : ChannelBase, Mobile + { + + public MobileClientChannel(System.ServiceModel.ClientBase client) : + base(client) + { + } + + public System.IAsyncResult BeginRegister(string username, string password, string deviceId, System.AsyncCallback callback, object asyncState) + { + object[] _args = new object[3]; + _args[0] = username; + _args[1] = password; + _args[2] = deviceId; + System.IAsyncResult _result = base.BeginInvoke("Register", _args, callback, asyncState); + return _result; + } + + public string EndRegister(System.IAsyncResult result) + { + object[] _args = new object[0]; + string _result = ((string)(base.EndInvoke("Register", _args, result))); + return _result; + } + + public System.IAsyncResult BeginAddNewUser(string givenname, string surname, string mail, string password, string comment, string source, System.AsyncCallback callback, object asyncState) + { + object[] _args = new object[6]; + _args[0] = givenname; + _args[1] = surname; + _args[2] = mail; + _args[3] = password; + _args[4] = comment; + _args[5] = source; + System.IAsyncResult _result = base.BeginInvoke("AddNewUser", _args, callback, asyncState); + return _result; + } + + public string EndAddNewUser(System.IAsyncResult result) + { + object[] _args = new object[0]; + string _result = ((string)(base.EndInvoke("AddNewUser", _args, result))); + return _result; + } + } + } +} \ No newline at end of file diff --git a/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Assets/FontAwesome.ttf b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Assets/FontAwesome.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Assets/FontAwesome.ttf differ diff --git a/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/KBS.App.TaxonFinder.Droid.csproj b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/KBS.App.TaxonFinder.Droid.csproj new file mode 100644 index 0000000..45e6403 --- /dev/null +++ b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/KBS.App.TaxonFinder.Droid.csproj @@ -0,0 +1,299 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {56CF43F1-068F-428D-91A9-267EF24BAB3B} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + KBS.App.TaxonFinder.Droid + KBS.App.TaxonFinder.Droid + 512 + true + Resources\Resource.Designer.cs + Off + Properties\AndroidManifest.xml + False + v10.0 + armeabi,armeabi-v7a,x86 + + + + + + + SAK + SAK + SAK + SAK + false + P:\VA - Venga\VengaApp\Keystore\kbs leipzig\kbs leipzig.keystore + kbs123 + kbs123 + kbs leipzig + + + True + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + None + true + false + False + 512m + Xamarin + false + false + False + armeabi-v7a;x86;arm64-v8a + false + false + apk + d8 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 3 + False + Full + 512m + armeabi-v7a;x86;x86_64;arm64-v8a + false + false + false + True + False + false + True + Xamarin + False + false + d8 + + true + apk + r8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + Always + + + Always + + + + + + Always + + + + + + + + Designer + + + + + + + Designer + Always + + + + + {C5CBEE88-9BCC-4901-B3AB-3AF7ABCE682B} + KBS.App.TaxonFinder + + + + + + + + Always + + + + + Always + + + + + Always + + + + + + + + Always + + + + + + + + + + + + + 1.1.0 + + + + + 1.7.335 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4.8.0.1560 + + + + + 2.1.41 + + + + + Always + + + + + Always + + + + + Always + + + + + Always + + + + + + + + + + + + \ No newline at end of file diff --git a/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/MainActivity.cs b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/MainActivity.cs new file mode 100644 index 0000000..00ffedb --- /dev/null +++ b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/MainActivity.cs @@ -0,0 +1,47 @@ + +using Android.App; +using Android.Content.PM; +using Android.OS; +using Android.Runtime; +using Plugin.CurrentActivity; +using Plugin.Permissions; + +namespace KBS.App.TaxonFinder.Droid +{ + [Activity(Label = "BODENTIER hoch 4", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = false, ScreenOrientation = ScreenOrientation.Portrait, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] + public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity + { + protected override void OnCreate(Bundle bundle) + { + TabLayoutResource = Resource.Layout.Tabbar; + ToolbarResource = Resource.Layout.Toolbar; + + base.OnCreate(bundle); + CrossCurrentActivity.Current.Init(this, bundle); + Xamarin.Essentials.Platform.Init(this, bundle); + global::Xamarin.Forms.Forms.Init(this, bundle); + Xamarin.FormsMaps.Init(this, bundle); + + LoadApplication(new App()); + + } + public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) + { + PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults); + Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); + } + public override void OnBackPressed() + { + if (App.Current.MainPage.Navigation.NavigationStack.Count > 1) + { + base.OnBackPressed(); + } + else + { + this.FinishAffinity(); + } + } + + } +} + diff --git a/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Properties/AndroidManifest.xml b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Properties/AndroidManifest.xml new file mode 100644 index 0000000..b1b175d --- /dev/null +++ b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Properties/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Properties/AssemblyInfo.cs b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d2bcd27 --- /dev/null +++ b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Properties/AssemblyInfo.cs @@ -0,0 +1,34 @@ +using Android.App; +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("KBS.App.TaxonFinder.Droid")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Bodentier hoch 4")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +// Add some common permissions, these can be removed if not needed +[assembly: UsesPermission(Android.Manifest.Permission.Internet)] +[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] +[assembly: UsesPermission(Android.Manifest.Permission.Camera)] diff --git a/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Renderer/ExtendedMapRenderer.cs b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Renderer/ExtendedMapRenderer.cs new file mode 100644 index 0000000..09291a8 --- /dev/null +++ b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Renderer/ExtendedMapRenderer.cs @@ -0,0 +1,125 @@ +using Android.Content; +using Android.Gms.Maps; +using Android.Gms.Maps.Model; +using KBS.App.TaxonFinder.CustomRenderers; +using KBS.App.TaxonFinder.Droid.Renderer; +using System; +using System.Collections.ObjectModel; +using Xamarin.Forms; +using Xamarin.Forms.Maps; +using Xamarin.Forms.Maps.Android; +using Xamarin.Forms.Platform.Android; +using Polygon = Android.Gms.Maps.Model.Polygon; +using Polyline = Android.Gms.Maps.Model.Polyline; + +[assembly: ExportRenderer(typeof(ExtendedMap), typeof(ExtendedMapRenderer))] +namespace KBS.App.TaxonFinder.Droid.Renderer +{ + public class ExtendedMapRenderer : MapRenderer, IOnMapReadyCallback + { + private bool _mapDrawn; + private Polygon _polygon; + private Polyline _polyline; + private ObservableCollection _shapeCoordinates; + private ObservableCollection _routeCoordinates; + + public ExtendedMapRenderer(Context context) : base(context) + { + _shapeCoordinates = new ObservableCollection(); + _routeCoordinates = new ObservableCollection(); + } + + protected override void OnMapReady(GoogleMap map) + { + if (_mapDrawn) return; + base.OnMapReady(map); + map.MapClick += GoogleMap_MapClick; + map.CameraMoveStarted += GoogleMap_MapPush; + map.CameraIdle += GoogleMap_MapStopPush; + + DrawElements(); + _mapDrawn = true; + } + private void DrawElements() + { + if (((ExtendedMap)Element).MapPositionOption != Data.PositionInfo.PositionOption.Pin) + { + NativeMap.Clear(); + _shapeCoordinates = ((ExtendedMap)Element).TempShapeCoordinates; + if (_shapeCoordinates.Count > 0) + DrawPolygon(); + _routeCoordinates = ((ExtendedMap)Element).TempRouteCoordinates; + if (_routeCoordinates.Count > 0) + DrawPolyline(); + } + else + { + _polyline?.Remove(); + _polygon?.Remove(); + } + } + + private void DrawPolygon() + { + PolygonOptions polygonOptions = GetPolygoneRenderer(); + foreach (var position in _shapeCoordinates) + { + polygonOptions.Add(new LatLng(position.Latitude, position.Longitude)); + } + _polygon = NativeMap.AddPolygon(polygonOptions); + } + + private static PolygonOptions GetPolygoneRenderer() + { + var polygonOptions = new PolygonOptions(); + polygonOptions.InvokeFillColor(0x66FF0000); + polygonOptions.InvokeStrokeColor(0x66FF0000); + polygonOptions.InvokeStrokeWidth(10.0f); + return polygonOptions; + } + + private void DrawPolyline() + { + PolylineOptions polylineOptions = GetPolylineRenderer(); + foreach (var position in _routeCoordinates) + { + polylineOptions.Add(new LatLng(position.Latitude, position.Longitude)); + } + _polyline = NativeMap.AddPolyline(polylineOptions); + } + + private static PolylineOptions GetPolylineRenderer() + { + var polylineOptions = new PolylineOptions(); + polylineOptions.InvokeColor(0x66FF0000); + polylineOptions.InvokeWidth(10.0f); + return polylineOptions; + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + if (NativeMap != null) + NativeMap.MapClick -= GoogleMap_MapClick; + + base.OnElementChanged(e); + + Control?.GetMapAsync(this); + } + + private void GoogleMap_MapClick(object sender, GoogleMap.MapClickEventArgs e) + { + ((ExtendedMap)Element).OnTap(new Position(e.Point.Latitude, e.Point.Longitude)); + DrawElements(); + } + + private void GoogleMap_MapPush(object sender, GoogleMap.CameraMoveStartedEventArgs e) + { + DrawElements(); + } + + private void GoogleMap_MapStopPush(object sender, EventArgs e) + { + DrawElements(); + } + } +} \ No newline at end of file diff --git a/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Renderer/HtmlLabelRenderer.cs b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Renderer/HtmlLabelRenderer.cs new file mode 100644 index 0000000..721c946 --- /dev/null +++ b/KBS.Xamarin.TaxonFinder/KBS.Xamarin.TaxonFinder.Droid/Renderer/HtmlLabelRenderer.cs @@ -0,0 +1,176 @@ +using Android.Content; +using Android.Graphics; +using Android.Text; +using Android.Text.Method; +using Android.Text.Style; +using Android.Util; +using Android.Views; +using Android.Widget; +using Java.Util.Regex; +using KBS.App.TaxonFinder.CustomRenderers; +using KBS.App.TaxonFinder.Data; +using KBS.App.TaxonFinder.Droid.Renderer; +using System; +using System.ComponentModel; +using System.Linq; +using Xamarin.Essentials; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Android; + +[assembly: ExportRenderer(typeof(HtmlLabel), typeof(HtmlLabelRenderer))] +namespace KBS.App.TaxonFinder.Droid.Renderer +{ + public class TaxonMovementMethod : LinkMovementMethod + { + public event EventHandler LinkClicked; + + private RectF _touchedLineBounds = new RectF(); + + + public override bool OnTouchEvent(TextView widget, ISpannable buffer, MotionEvent e) + { + if (e.Action == MotionEventActions.Up) + { + int touchX = (int)e.GetX(); + int touchY = (int)e.GetY(); + + var layout = widget.Layout; + + int touchedLine = widget.Layout.GetLineForVertical(touchY); + int touchOffset = widget.Layout.GetOffsetForHorizontal(touchedLine, touchX); + + _touchedLineBounds.Left = layout.GetLineLeft(touchedLine); + _touchedLineBounds.Top = layout.GetLineTop(touchedLine); + _touchedLineBounds.Right = layout.GetLineWidth(touchedLine) + _touchedLineBounds.Left; + _touchedLineBounds.Bottom = layout.GetLineBottom(touchedLine); + + if (_touchedLineBounds.Contains(touchX, touchY)) + { + + object[] spans = buffer.GetSpans(touchOffset, touchOffset, Java.Lang.Class.FromType(typeof(ClickableSpan))); + foreach (object span in spans) + { + if (span is URLSpan) + { + var spanTarget = (URLSpan)span; + if (LinkClicked != null) + { + switch (spanTarget.URL.Split(':')[0]) + { + case "taxonid": + LinkClicked(widget, new TaxonLinkClickedEventArgs() { TaxonId = int.Parse(spanTarget.URL.Replace("taxonid://", "")) }); + break; + case "http": + case "https": + Launcher.OpenAsync(new Uri(spanTarget.URL)); + break; + } + return true; + } + } + } + + } + + return base.OnTouchEvent(widget, buffer, e); + } + else + { + return false; + } + } + } + + + public class HtmlLabelRenderer : LabelRenderer + { + public HtmlLabelRenderer(Context context) : base(context) + { + + } + private TaxonMovementMethod mm; + + protected override void OnElementChanged(ElementChangedEventArgs