├── .github └── workflows │ └── codeql-analysis.yml ├── .gitignore ├── Documents └── Images │ ├── Cart.png │ ├── Home.png │ ├── Login.png │ ├── Menu.png │ ├── Mobile.png │ ├── Product.png │ ├── ProductList.png │ └── Splash.png ├── LICENSE ├── README.md ├── SECURITY.md └── Source ├── TailwindTraders.Mobile ├── CodeAnalysis │ ├── CodeAnalysis.ruleset │ ├── Menees.Analyzers.Settings.xml │ ├── Menees.Analyzers.Settings.xsd │ └── XamlStylerSettings.json ├── Directory.Build.props ├── Directory.Build.targets ├── Resources │ ├── AR │ │ ├── guide │ │ │ ├── .gitignore │ │ │ ├── generate_tfrecord.py │ │ │ ├── guide.txt │ │ │ └── xml_to_csv.py │ │ └── hardhat │ │ │ ├── detect.tflite │ │ │ └── labels_list.txt │ ├── Fonts │ │ ├── BrandonGrotesque-Light.otf │ │ ├── BrandonGrotesque-Medium.otf │ │ └── Gin-Regular.otf │ └── Images │ │ ├── header.jpg │ │ ├── recommended_bathrooms.jpg │ │ ├── recommended_lighting.jpg │ │ ├── recommended_plants.jpg │ │ └── recommended_powertools.jpg ├── TailwindTraders.Mobile.Android │ ├── Assets │ │ └── AboutAssets.txt │ ├── Features │ │ └── Scanning │ │ │ ├── CameraPreviewRenderer.cs │ │ │ └── Photo │ │ │ ├── GalleryService.cs │ │ │ └── PlatformService.cs │ ├── Helpers │ │ └── PathHelper.cs │ ├── Libs │ │ └── EmguTF │ │ │ ├── .gitignore │ │ │ ├── arm64-v8a │ │ │ └── libtfliteextern.so │ │ │ ├── armeabi-v7a │ │ │ └── libtfliteextern.so │ │ │ ├── build_tf_lite_android.sh │ │ │ ├── readme.txt │ │ │ ├── x86 │ │ │ └── libtfliteextern.so │ │ │ └── x86_64 │ │ │ └── libtfliteextern.so │ ├── MainActivity.cs │ ├── MainApplication.cs │ ├── Properties │ │ ├── AndroidManifest.xml │ │ └── AssemblyInfo.cs │ ├── Resources │ │ ├── AboutResources.txt │ │ ├── Resource.designer.cs │ │ ├── drawable-hdpi │ │ │ ├── capture.png │ │ │ ├── cart.png │ │ │ ├── close.png │ │ │ ├── filters.png │ │ │ ├── free_shipping.png │ │ │ ├── ia.png │ │ │ ├── logo_header_b.png │ │ │ ├── logo_horizontal_b.png │ │ │ ├── logo_vertical_w.png │ │ │ ├── photo.png │ │ │ ├── search.png │ │ │ ├── splash_screen.jpg │ │ │ └── star.png │ │ ├── drawable-mdpi │ │ │ ├── capture.png │ │ │ ├── cart.png │ │ │ ├── close.png │ │ │ ├── filters.png │ │ │ ├── free_shipping.png │ │ │ ├── ia.png │ │ │ ├── logo_header_b.png │ │ │ ├── logo_horizontal_b.png │ │ │ ├── logo_vertical_w.png │ │ │ ├── photo.png │ │ │ ├── search.png │ │ │ ├── splash_background.xml │ │ │ ├── splash_screen.jpg │ │ │ └── star.png │ │ ├── drawable-xhdpi │ │ │ ├── capture.png │ │ │ ├── cart.png │ │ │ ├── close.png │ │ │ ├── filters.png │ │ │ ├── free_shipping.png │ │ │ ├── ia.png │ │ │ ├── logo_header_b.png │ │ │ ├── logo_horizontal_b.png │ │ │ ├── logo_vertical_w.png │ │ │ ├── photo.png │ │ │ ├── search.png │ │ │ ├── splash_screen.jpg │ │ │ └── star.png │ │ ├── drawable-xxhdpi │ │ │ ├── capture.png │ │ │ ├── cart.png │ │ │ ├── close.png │ │ │ ├── filters.png │ │ │ ├── free_shipping.png │ │ │ ├── ia.png │ │ │ ├── logo_header_b.png │ │ │ ├── logo_horizontal_b.png │ │ │ ├── logo_vertical_w.png │ │ │ ├── photo.png │ │ │ ├── search.png │ │ │ ├── splash_screen.jpg │ │ │ └── star.png │ │ ├── drawable-xxxhdpi │ │ │ └── INTENTIONALLY_EMPTY.txt │ │ ├── layout │ │ │ ├── Tabbar.axml │ │ │ └── Toolbar.axml │ │ ├── mipmap-hdpi │ │ │ └── Icon.png │ │ ├── mipmap-mdpi │ │ │ └── icon.png │ │ ├── mipmap-xhdpi │ │ │ └── Icon.png │ │ ├── mipmap-xxhdpi │ │ │ └── Icon.png │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ └── themes.xml │ │ └── xml │ │ │ └── file_paths.xml │ ├── SplashActivity.cs │ ├── TailwindTraders.Mobile.Android.csproj │ ├── ThirdParties │ │ ├── Camera │ │ │ ├── AutoFitTextureView.cs │ │ │ ├── CameraState.cs │ │ │ ├── ColorUnion.cs │ │ │ ├── CompareSizesByArea.cs │ │ │ ├── ICamera.cs │ │ │ ├── Listeners │ │ │ │ ├── CameraCaptureSessionCallback.cs │ │ │ │ ├── CameraStateListener.cs │ │ │ │ ├── CameraSurfaceTextureListener.cs │ │ │ │ └── ImageAvailableListener.cs │ │ │ └── readme.txt │ │ └── Touch │ │ │ └── TouchEffect.cs │ ├── appcenter-post-build.sh │ ├── appcenter-post-clone.sh │ ├── appcenter-pre-build.sh │ └── environment.txt ├── TailwindTraders.Mobile.iOS │ ├── AppDelegate.cs │ ├── Application.cs │ ├── Assets.xcassets │ │ ├── 3bar.imageset │ │ │ ├── 3bar.png │ │ │ ├── 3bar@2x.png │ │ │ └── Contents.json │ │ ├── app_icon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon1024.png │ │ │ ├── Icon120.png │ │ │ └── Icon180.png │ │ ├── capture.imageset │ │ │ ├── Contents.json │ │ │ ├── capture.png │ │ │ ├── capture@2x.png │ │ │ └── capture@3x.png │ │ ├── cart.imageset │ │ │ ├── Contents.json │ │ │ ├── cart.png │ │ │ ├── cart@2x.png │ │ │ └── cart@3x.png │ │ ├── close.imageset │ │ │ ├── Contents.json │ │ │ ├── close.png │ │ │ ├── close@2x.png │ │ │ └── close@3x.png │ │ ├── filters.imageset │ │ │ ├── Contents.json │ │ │ ├── filters.png │ │ │ ├── filters@2x.png │ │ │ └── filters@3x.png │ │ ├── free_shipping.imageset │ │ │ ├── Contents.json │ │ │ ├── free_shipping.png │ │ │ ├── free_shipping@2x.png │ │ │ └── free_shipping@3x.png │ │ ├── ia.imageset │ │ │ ├── Contents.json │ │ │ ├── ia.png │ │ │ ├── ia@2x.png │ │ │ └── ia@3x.png │ │ ├── logo_header_b.imageset │ │ │ ├── Contents.json │ │ │ ├── logo_header_b.png │ │ │ ├── logo_header_b@2x.png │ │ │ └── logo_header_b@3x.png │ │ ├── logo_horizontal_b.imageset │ │ │ ├── Contents.json │ │ │ ├── logo_horizontal-b.png │ │ │ ├── logo_horizontal-b@2x.png │ │ │ └── logo_horizontal-b@3x.png │ │ ├── logo_vertical_w.imageset │ │ │ ├── Contents.json │ │ │ ├── logo_vertical_w.png │ │ │ ├── logo_vertical_w@2x.png │ │ │ └── logo_vertical_w@3x.png │ │ ├── photo.imageset │ │ │ ├── Contents.json │ │ │ ├── photo.png │ │ │ ├── photo@2x.png │ │ │ └── photo@3x.png │ │ ├── search.imageset │ │ │ ├── Contents.json │ │ │ ├── search.png │ │ │ ├── search@2x.png │ │ │ └── search@3x.png │ │ ├── splash_screen.imageset │ │ │ ├── Contents.json │ │ │ ├── Splash_screen.jpg │ │ │ ├── Splash_screen@2x.jpg │ │ │ └── Splash_screen@3x.jpg │ │ └── star.imageset │ │ │ ├── Contents.json │ │ │ ├── star.png │ │ │ ├── star@2x.png │ │ │ └── star@3x.png │ ├── Effects │ │ └── MultilineButtonEffect.cs │ ├── Entitlements.plist │ ├── Features │ │ ├── LogIn │ │ │ └── BorderlessEntryEffect.cs │ │ └── Scanning │ │ │ ├── CameraPreviewRenderer.cs │ │ │ └── Photo │ │ │ ├── GalleryService.cs │ │ │ └── PlatformService.cs │ ├── Info.plist │ ├── Libs │ │ └── EmguTF │ │ │ ├── .gitignore │ │ │ ├── build_tf_lite_ios.sh │ │ │ ├── libtfliteextern.a │ │ │ └── readme.txt │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Resources │ │ └── LaunchScreen.storyboard │ ├── TailwindTraders.Mobile.iOS.csproj │ ├── ThirdParties │ │ ├── Camera │ │ │ ├── CameraManager.cs │ │ │ ├── VideoCaptureDelegate.cs │ │ │ └── readme.txt │ │ └── Touch │ │ │ ├── TouchEffect.cs │ │ │ └── TouchRecognizer.cs │ ├── appcenter-post-build.sh │ ├── appcenter-post-clone.sh │ └── appcenter-pre-build.sh ├── TailwindTraders.Mobile.sln ├── TailwindTraders.Mobile │ ├── App.xaml │ ├── App.xaml.cs │ ├── Colors.xaml │ ├── Colors.xaml.cs │ ├── ControlTemplates.xaml │ ├── ControlTemplates.xaml.cs │ ├── Controls │ │ └── FixedRatioCarouselViewControl.cs │ ├── Converters.xaml │ ├── Converters.xaml.cs │ ├── Effects │ │ ├── BorderlessEntryEffect.cs │ │ └── MultilineButtonEffect.cs │ ├── Features │ │ ├── Common │ │ │ ├── FakeRestPoolService.cs │ │ │ ├── IRestPoolService.cs │ │ │ └── RestPoolService.cs │ │ ├── Home │ │ │ ├── FakeHomeAPI.cs │ │ │ ├── FreeShippingBanner.xaml │ │ │ ├── FreeShippingBanner.xaml.cs │ │ │ ├── HomePage.xaml │ │ │ ├── HomePage.xaml.cs │ │ │ ├── HomeViewModel.cs │ │ │ ├── IHomeAPI.cs │ │ │ ├── LandingDTO.cs │ │ │ ├── RecommendedItemTemplate.xaml │ │ │ ├── RecommendedItemTemplate.xaml.cs │ │ │ └── UppercaseConverter.cs │ │ ├── Localization │ │ │ ├── Resources.Designer.cs │ │ │ └── Resources.resx │ │ ├── LogIn │ │ │ ├── AuthenticationService.cs │ │ │ ├── FakeAuthenticationService.cs │ │ │ ├── FakeLoginAPI.cs │ │ │ ├── FakeProfilesAPI.cs │ │ │ ├── IAuthenticationService.cs │ │ │ ├── ILoginAPI.cs │ │ │ ├── IProfilesAPI.cs │ │ │ ├── LogInPage.xaml │ │ │ ├── LogInPage.xaml.cs │ │ │ ├── LoginRequestDTO.cs │ │ │ ├── LoginResponseDTO.cs │ │ │ ├── LoginViewModel.cs │ │ │ └── ProfileDTO.cs │ │ ├── Logging │ │ │ ├── AppCenterLoggingService.cs │ │ │ ├── DebugLoggingService.cs │ │ │ └── ILoggingService.cs │ │ ├── Product │ │ │ ├── BrandDTO.cs │ │ │ ├── Cart │ │ │ │ ├── FakeProductCartAPI.cs │ │ │ │ ├── IProductCartAPI.cs │ │ │ │ ├── ProductCartLineDTO.cs │ │ │ │ ├── ProductCartLineItemTemplate.xaml │ │ │ │ ├── ProductCartLineItemTemplate.xaml.cs │ │ │ │ ├── ProductCartPage.xaml │ │ │ │ ├── ProductCartPage.xaml.cs │ │ │ │ └── ProductCartViewModel.cs │ │ │ ├── Category │ │ │ │ ├── ProductCategoryPage.xaml │ │ │ │ ├── ProductCategoryPage.xaml.cs │ │ │ │ ├── ProductCategoryViewModel.cs │ │ │ │ ├── ProductView.xaml │ │ │ │ ├── ProductView.xaml.cs │ │ │ │ ├── TwoProductsItemTemplate.xaml │ │ │ │ └── TwoProductsItemTemplate.xaml.cs │ │ │ ├── Detail │ │ │ │ ├── FeatureItemTemplate.xaml │ │ │ │ ├── FeatureItemTemplate.xaml.cs │ │ │ │ ├── PictureItemTemplate.xaml │ │ │ │ ├── PictureItemTemplate.xaml.cs │ │ │ │ ├── ProductDetailPage.xaml │ │ │ │ ├── ProductDetailPage.xaml.cs │ │ │ │ └── ProductDetailViewModel.cs │ │ │ ├── FakeProducts.cs │ │ │ ├── FakeProducts.json │ │ │ ├── FakeProductsAPI.cs │ │ │ ├── FakeSimilarProductsAPI.cs │ │ │ ├── FeatureDTO.cs │ │ │ ├── IProductsAPI.cs │ │ │ ├── ISimilarProductsAPI.cs │ │ │ ├── PopularItemTemplate.xaml │ │ │ ├── PopularItemTemplate.xaml.cs │ │ │ ├── PreviouslySeenItemTemplate.xaml │ │ │ ├── PreviouslySeenItemTemplate.xaml.cs │ │ │ ├── ProductDTO.cs │ │ │ ├── ProductViewModel.cs │ │ │ ├── ProductsPerTypeDTO.cs │ │ │ └── TypeDTO.cs │ │ ├── Scanning │ │ │ ├── AR │ │ │ │ ├── CameraPreviewPage.xaml │ │ │ │ ├── CameraPreviewPage.xaml.cs │ │ │ │ ├── CameraPreviewViewModel.cs │ │ │ │ ├── DetectionMessage.cs │ │ │ │ ├── DrawingHelper.cs │ │ │ │ ├── InputTensorMessage.cs │ │ │ │ └── MathHelper.cs │ │ │ ├── CameraPreview.cs │ │ │ ├── Photo │ │ │ │ ├── CameraPage.xaml │ │ │ │ ├── CameraPage.xaml.cs │ │ │ │ ├── CameraPreviewTakePhotoPage.xaml │ │ │ │ ├── CameraPreviewTakePhotoPage.xaml.cs │ │ │ │ ├── CameraPreviewTakePhotoViewModel.cs │ │ │ │ ├── CameraViewModel.cs │ │ │ │ ├── ExtendedLabel.cs │ │ │ │ ├── GalleryImageTemplate.xaml │ │ │ │ ├── GalleryImageTemplate.xaml.cs │ │ │ │ ├── GalleryImageViewModel.cs │ │ │ │ ├── IGalleryService.cs │ │ │ │ ├── IPlatformService.cs │ │ │ │ ├── IVisionService.cs │ │ │ │ ├── PhotoSize.cs │ │ │ │ └── VisionService.cs │ │ │ ├── PhotoService.cs │ │ │ ├── RecommendedItem.xaml │ │ │ ├── RecommendedItem.xaml.cs │ │ │ └── TensorflowLiteService.cs │ │ ├── Settings │ │ │ ├── DefaultSettings.cs │ │ │ ├── SettingsPage.xaml │ │ │ ├── SettingsPage.xaml.cs │ │ │ └── SettingsViewModel.cs │ │ └── Shell │ │ │ ├── FlyoutHeader.xaml │ │ │ ├── FlyoutHeader.xaml.cs │ │ │ ├── TheShell.xaml │ │ │ ├── TheShell.xaml.cs │ │ │ └── TheShellViewModel.cs │ ├── FontStyles.xaml │ ├── FontStyles.xaml.cs │ ├── Framework │ │ ├── AsyncCommand.cs │ │ ├── BaseContentPage.cs │ │ ├── BaseStateAwareContentPage.cs │ │ ├── BaseStateAwareViewModel.cs │ │ ├── BaseViewModel.cs │ │ ├── ConnectivityService.cs │ │ ├── IConnectivityService.cs │ │ └── TaskHelper.cs │ ├── GlobalStyles.xaml │ ├── GlobalStyles.xaml.cs │ ├── Helpers │ │ ├── EmbeddedResourceHelper.cs │ │ ├── EventArgsT.cs │ │ ├── FakeNetwork.cs │ │ ├── HttpClientFactory.cs │ │ └── IEnumerableExtensions.cs │ ├── Sizes.xaml │ ├── Sizes.xaml.cs │ ├── Styles.xaml │ ├── Styles.xaml.cs │ ├── TailwindTraders.Mobile.csproj │ ├── TheConverters │ │ ├── DebugConverter.cs │ │ ├── DoubleToHalfFloatConverter.cs │ │ ├── IsNotNullConverter.cs │ │ └── NotConverter.cs │ └── ThirdParties │ │ ├── BindableStackLayout.cs │ │ └── Touch │ │ ├── TouchActionEventArgs.cs │ │ ├── TouchActionType.cs │ │ ├── TouchEffect.cs │ │ └── readme.txt ├── TailwindTraders.UITests │ ├── AppManager.cs │ ├── BasePage.cs │ ├── BaseTestFixture.cs │ ├── Pages │ │ ├── ApplianceDetailPage.cs │ │ ├── HomeAppliancesListPage.cs │ │ ├── HomePage.cs │ │ ├── LoginPage.cs │ │ └── SettingsPage.cs │ ├── PlatformQuery.cs │ ├── TailwindTraders.UITests.csproj │ ├── Tests │ │ └── Tests.cs │ └── TestsSettings.cs ├── ThirdParties │ ├── Emgu.TF.Lite │ │ ├── Emgu.TF.Lite.csproj │ │ ├── EmguTF │ │ │ ├── BuildinOpResolver.cs │ │ │ ├── Constants.cs │ │ │ ├── DisposableObject.cs │ │ │ ├── FlatBufferModel.cs │ │ │ ├── IOpResolver.cs │ │ │ ├── Interpreter.cs │ │ │ ├── MonoPInvokeCallbackAttribute.cs │ │ │ ├── Status.cs │ │ │ ├── Tensor.cs │ │ │ ├── TfLiteDllImport.cs │ │ │ ├── TfLiteDllImportXamarinIOS.cs │ │ │ ├── TfLiteInvoke.cs │ │ │ └── UnmanagedObject.cs │ │ └── readme.txt │ └── Sharpnado.Forms.HorizontalListView │ │ ├── Sharpnado.Infrastructure.dll │ │ ├── Sharpnado.Infrastructure.pdb │ │ ├── Sharpnado.Presentation.Forms.Droid.dll │ │ ├── Sharpnado.Presentation.Forms.Droid.pdb │ │ ├── Sharpnado.Presentation.Forms.dll │ │ ├── Sharpnado.Presentation.Forms.iOS.dll │ │ ├── Sharpnado.Presentation.Forms.iOS.pdb │ │ ├── Sharpnado.Presentation.Forms.pdb │ │ └── readme.txt └── UnitTests │ ├── Assets │ └── Vision │ │ ├── Test │ │ ├── Multitool │ │ │ └── Multitool1.jpg │ │ ├── RechargeableScrewdriver │ │ │ └── RechargeableScrewdriver1.jpg │ │ └── YellowHardHat │ │ │ └── YellowHardHat1.jpg │ │ └── Train │ │ ├── Multitool │ │ ├── 10066255_m.jpg │ │ └── 9320441_m.jpg │ │ ├── RechargeableScrewdriver │ │ ├── 6760844_m.jpg │ │ └── 6909989_m.jpg │ │ └── YellowHardHat │ │ ├── 11080373_m.jpg │ │ └── 5486059_m.jpg │ ├── Constants.cs │ ├── Features │ ├── Common │ │ └── RestPoolServiceTests.cs │ ├── Home │ │ └── HomeAPITests.cs │ ├── LogIn │ │ ├── LoginAPITests.cs │ │ └── ProfilesAPITests.cs │ └── Product │ │ └── ProductsAPITests.cs │ ├── Framework │ ├── BaseAPITest.cs │ └── BaseContentPageTests.cs │ └── UnitTests.csproj └── Tools └── XamlStyler ├── XamlStyler.Console ├── CommandLine.dll ├── Irony.dll ├── Newtonsoft.Json.dll ├── Options │ └── DefaultSettings.json ├── XamlStyler.Core.dll ├── xstyler.exe └── xstyler.exe.config ├── readme.txt └── run.sh /Documents/Images/Cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Documents/Images/Cart.png -------------------------------------------------------------------------------- /Documents/Images/Home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Documents/Images/Home.png -------------------------------------------------------------------------------- /Documents/Images/Login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Documents/Images/Login.png -------------------------------------------------------------------------------- /Documents/Images/Menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Documents/Images/Menu.png -------------------------------------------------------------------------------- /Documents/Images/Mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Documents/Images/Mobile.png -------------------------------------------------------------------------------- /Documents/Images/Product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Documents/Images/Product.png -------------------------------------------------------------------------------- /Documents/Images/ProductList.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Documents/Images/ProductList.png -------------------------------------------------------------------------------- /Documents/Images/Splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Documents/Images/Splash.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. All rights reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/CodeAnalysis/Menees.Analyzers.Settings.xml: -------------------------------------------------------------------------------- 1 |  2 | 4 | 120 5 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | false 6 | 7 | 8 | 9 | $(MSBuildThisFileDirectory)\CodeAnalysis\CodeAnalysis.ruleset 10 | 11 | 12 | 13 | 7.1 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Directory.Build.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | all 6 | runtime; build; native; contentfiles; analyzers 7 | 8 | 9 | 10 | all 11 | runtime; build; native; contentfiles; analyzers 12 | 13 | 14 | 15 | all 16 | runtime; build; native; contentfiles; analyzers 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/AR/guide/.gitignore: -------------------------------------------------------------------------------- 1 | csv/ 2 | images/ 3 | records/ 4 | train/ 5 | inference_graph/ 6 | net/ 7 | guide_training.txt 8 | pipeline.config -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/AR/guide/guide.txt: -------------------------------------------------------------------------------- 1 | In Windows 10: 2 | 3 | labelImg -> https://github.com/tzutalin/labelImg/files/2638199/windows_v1.8.1.zip 4 | Python -> https://www.python.org/ftp/python/3.7.2/python-3.7.2-amd64.exe 5 | 6 | pip install tensorflow 7 | pip install pandas 8 | pip install Pillow 9 | 10 | Create csv/label_map.csv with the following content: 11 | class_text,class_label 12 | hardhat,1 13 | 14 | python xml_to_csv.py 15 | python generate_tfrecord.py 16 | 17 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/AR/guide/xml_to_csv.py: -------------------------------------------------------------------------------- 1 | import os 2 | import glob 3 | import pandas as pd 4 | import xml.etree.ElementTree as ET 5 | 6 | 7 | def xml_to_csv(path): 8 | xml_list = [] 9 | for xml_file in glob.glob(path + '/*.xml'): 10 | tree = ET.parse(xml_file) 11 | root = tree.getroot() 12 | for member in root.findall('object'): 13 | value = (root.find('filename').text, 14 | member[0].text, 15 | int(member[4][0].text), 16 | int(member[4][1].text), 17 | int(member[4][2].text), 18 | int(member[4][3].text) 19 | ) 20 | xml_list.append(value) 21 | column_name = ['filename', 'class_text', 'xmin', 'ymin', 'xmax', 'ymax'] 22 | xml_df = pd.DataFrame(xml_list, columns=column_name) 23 | return xml_df 24 | 25 | 26 | def main(): 27 | if not os.path.exists('csv'): 28 | os.makedirs('csv') 29 | 30 | for directory in ['train','test']: 31 | image_path = os.path.join(os.getcwd(), 'images/{}'.format(directory)) 32 | xml_df = xml_to_csv(image_path) 33 | xml_df.to_csv('csv/{}.csv'.format(directory), index=None) 34 | print('Successfully converted xml to {}.csv'.format(directory)) 35 | 36 | main() -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/AR/hardhat/detect.tflite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/Resources/AR/hardhat/detect.tflite -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/AR/hardhat/labels_list.txt: -------------------------------------------------------------------------------- 1 | ??? 2 | hardhat -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/Fonts/BrandonGrotesque-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/Resources/Fonts/BrandonGrotesque-Light.otf -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/Fonts/BrandonGrotesque-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/Resources/Fonts/BrandonGrotesque-Medium.otf -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/Fonts/Gin-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/Resources/Fonts/Gin-Regular.otf -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/Images/header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/Resources/Images/header.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/Images/recommended_bathrooms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/Resources/Images/recommended_bathrooms.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/Images/recommended_lighting.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/Resources/Images/recommended_lighting.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/Images/recommended_plants.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/Resources/Images/recommended_plants.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/Resources/Images/recommended_powertools.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/Resources/Images/recommended_powertools.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Assets/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories) and given a Build Action of "AndroidAsset". 3 | 4 | These files will be deployed with you package and will be accessible using Android's 5 | AssetManager, like this: 6 | 7 | public class ReadAsset : Activity 8 | { 9 | protected override void OnCreate (Bundle bundle) 10 | { 11 | base.OnCreate (bundle); 12 | 13 | InputStream input = Assets.Open ("my_asset.txt"); 14 | } 15 | } 16 | 17 | Additionally, some Android functions will automatically load asset files: 18 | 19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); 20 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Features/Scanning/Photo/GalleryService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using Android.Provider; 4 | using Plugin.CurrentActivity; 5 | using TailwindTraders.Mobile.Droid.Features.Scanning.Photo; 6 | using TailwindTraders.Mobile.Features.Scanning.Photo; 7 | using Xamarin.Forms; 8 | 9 | [assembly: Dependency(typeof(GalleryService))] 10 | 11 | namespace TailwindTraders.Mobile.Droid.Features.Scanning.Photo 12 | { 13 | public class GalleryService : IGalleryService 14 | { 15 | public Task> GetGalleryPhotosAsync(int photoCount) 16 | { 17 | var galleryList = new List(); 18 | 19 | var projection = new[] { MediaStore.Images.Media.InterfaceConsts.Data }; 20 | var orderBy = MediaStore.Images.Media.InterfaceConsts.DateModified + " DESC"; 21 | 22 | var cursor = CrossCurrentActivity.Current.Activity.ContentResolver.Query( 23 | MediaStore.Images.Media.ExternalContentUri, 24 | projection, 25 | null, 26 | null, 27 | orderBy); 28 | if (cursor == null || !cursor.MoveToFirst()) 29 | { 30 | return Task.FromResult(new List()); 31 | } 32 | 33 | var photoIndex = 0; 34 | do 35 | { 36 | var path = cursor.GetString(cursor.GetColumnIndex(MediaStore.Images.Media.InterfaceConsts.Data)); 37 | if (!string.IsNullOrEmpty(path)) 38 | { 39 | galleryList.Add(path); 40 | } 41 | 42 | photoIndex++; 43 | } 44 | while (cursor.MoveToNext() && photoIndex < photoCount); 45 | 46 | return Task.FromResult(galleryList); 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Helpers/PathHelper.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace TailwindTraders.Mobile.Droid.Helpers 4 | { 5 | public static class PathHelper 6 | { 7 | public static string CopyToFilesDirAndGetPath(string path) 8 | { 9 | var cleanPath = path.Replace("/", "_"); 10 | 11 | // https://kimsereyblog.blogspot.com/2016/11/differences-between-internal-and.html 12 | var absoluteFilePath = System.IO.Path.Combine( 13 | Android.App.Application.Context.FilesDir.AbsolutePath, 14 | cleanPath); 15 | 16 | var assets = Android.App.Application.Context.Assets; 17 | using (var f = assets.Open(path)) 18 | { 19 | using (var dest = new FileStream(absoluteFilePath, FileMode.OpenOrCreate)) 20 | { 21 | f.CopyTo(dest); 22 | } 23 | } 24 | 25 | return absoluteFilePath; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/.gitignore: -------------------------------------------------------------------------------- 1 | tensorflow/ -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/arm64-v8a/libtfliteextern.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/arm64-v8a/libtfliteextern.so -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/armeabi-v7a/libtfliteextern.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/armeabi-v7a/libtfliteextern.so -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/build_tf_lite_android.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | pushd tensorflow/tensorflow 4 | 5 | bazel build -c opt \ 6 | --cpu=$1\ 7 | --cxxopt='--std=c++11' \ 8 | --crosstool_top=external:android/crosstool \ 9 | --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \ 10 | //tensorflow/tfliteextern:libtfliteextern.so 11 | popd 12 | 13 | cp tensorflow/bazel-bin/tensorflow/tfliteextern/*.so $1 14 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/readme.txt: -------------------------------------------------------------------------------- 1 | Instructions to build libtfliteextern for Android in Ubuntu: 2 | 3 | Prerequisites: 4 | android-ndk-r12b 5 | Bazel 6 | 7 | -From current dir execute the following commands: 8 | 9 | git clone https://github.com/emgucv/tensorflow.git 10 | pushd tensorflow 11 | git checkout v1.12.0-emgu 12 | popd 13 | 14 | chmod +x build_tf_lite_android.sh 15 | 16 | ./build_tf_lite_android.sh x86 17 | ./build_tf_lite_android.sh x86_64 18 | ./build_tf_lite_android.sh armeabi-v7a 19 | 20 | In "tensorflow/tensorflow/contrib/lite/kernels/internal/BUILD" remove "//tensorflow:android_arm64": ["-mfloat-abi=softfp"], from the HARD_FP_FLAGS_IF_APPLICABLE flags 21 | 22 | ./build_tf_lite_android.sh arm64-v8a 23 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/x86/libtfliteextern.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/x86/libtfliteextern.so -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/x86_64/libtfliteextern.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Libs/EmguTF/x86_64/libtfliteextern.so -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/MainApplication.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Android.App; 3 | using Android.Runtime; 4 | using Plugin.CurrentActivity; 5 | using TailwindTraders.Mobile.Features.Settings; 6 | 7 | [assembly: Xamarin.Forms.ResolutionGroupName(nameof(TailwindTraders))] 8 | 9 | namespace TailwindTraders.Mobile.Droid 10 | { 11 | [Application(Debuggable = DefaultSettings.AndroidDebuggable)] 12 | public class MainApplication : Application 13 | { 14 | public MainApplication(IntPtr handle, JniHandleOwnership transer) 15 | : base(handle, transer) 16 | { 17 | } 18 | 19 | public override void OnCreate() 20 | { 21 | base.OnCreate(); 22 | 23 | CrossCurrentActivity.Current.Init(this); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | using Android.App; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("TailwindTraders.Mobile.Android")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("TailwindTraders.Mobile.Android")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | [assembly: ComVisible(false)] 17 | 18 | // Version information for an assembly consists of the following four values: 19 | // 20 | // Major Version 21 | // Minor Version 22 | // Build Number 23 | // Revision 24 | // 25 | // You can specify all the values or you can default the Build and Revision Numbers 26 | // by using the '*' as shown below: 27 | // [assembly: AssemblyVersion("1.0.*")] 28 | [assembly: AssemblyVersion("1.0.0.0")] 29 | [assembly: AssemblyFileVersion("1.0.0.0")] 30 | 31 | // Add some common permissions, these can be removed if not needed 32 | [assembly: UsesPermission(Android.Manifest.Permission.Internet)] 33 | [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] 34 | [assembly: UsesPermission(Android.Manifest.Permission.ReadExternalStorage)] 35 | 36 | [assembly: UsesFeature("android.hardware.camera", Required = false)] 37 | [assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)] -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/capture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/capture.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/cart.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/close.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/filters.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/free_shipping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/free_shipping.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/ia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/ia.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/logo_header_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/logo_header_b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/logo_horizontal_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/logo_horizontal_b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/logo_vertical_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/logo_vertical_w.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/photo.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/search.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/splash_screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/splash_screen.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-hdpi/star.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/capture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/capture.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/cart.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/close.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/filters.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/free_shipping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/free_shipping.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/ia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/ia.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/logo_header_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/logo_header_b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/logo_horizontal_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/logo_horizontal_b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/logo_vertical_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/logo_vertical_w.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/photo.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/search.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/splash_background.xml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/splash_screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/splash_screen.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-mdpi/star.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/capture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/capture.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/cart.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/close.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/filters.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/free_shipping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/free_shipping.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/ia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/ia.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/logo_header_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/logo_header_b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/logo_horizontal_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/logo_horizontal_b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/logo_vertical_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/logo_vertical_w.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/photo.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/search.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/splash_screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/splash_screen.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xhdpi/star.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/capture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/capture.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/cart.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/close.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/filters.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/free_shipping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/free_shipping.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/ia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/ia.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/logo_header_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/logo_header_b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/logo_horizontal_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/logo_horizontal_b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/logo_vertical_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/logo_vertical_w.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/photo.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/search.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/splash_screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/splash_screen.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxhdpi/star.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/drawable-xxxhdpi/INTENTIONALLY_EMPTY.txt: -------------------------------------------------------------------------------- 1 | Dear Developer, 2 | 3 | Since some resources are available in xxxhdpi but some others not, we won't use such —having into account too our 4 | target's a technical demo. 5 | 6 | Thanks, 7 | 8 | —A Developer -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/layout/Tabbar.axml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/layout/Toolbar.axml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/mipmap-hdpi/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/mipmap-hdpi/Icon.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/mipmap-mdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/mipmap-mdpi/icon.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/mipmap-xhdpi/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/mipmap-xhdpi/Icon.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/mipmap-xxhdpi/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/mipmap-xxhdpi/Icon.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #2F4B66 4 | @android:color/white 5 | @android:color/white 6 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/values/strings.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | Tailwind Traders 4 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/values/themes.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 19 | 20 | 25 | 26 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/Resources/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/SplashActivity.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Content; 3 | using Android.Content.PM; 4 | using Android.OS; 5 | 6 | namespace TailwindTraders.Mobile.Droid 7 | { 8 | [Activity( 9 | Label = "@string/appName", 10 | Icon = "@mipmap/icon", 11 | Theme = "@style/SplashTheme", 12 | MainLauncher = true, 13 | NoHistory = true, 14 | ScreenOrientation = ScreenOrientation.Portrait)] 15 | public class SplashActivity : Activity 16 | { 17 | protected override void OnCreate(Bundle savedInstanceState) 18 | { 19 | base.OnCreate(savedInstanceState); 20 | 21 | var intent = new Intent(this, typeof(MainActivity)); 22 | StartActivity(intent); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/ThirdParties/Camera/CameraState.cs: -------------------------------------------------------------------------------- 1 | namespace TailwindTraders.Mobile.Droid.ThirdParties.Camera 2 | { 3 | public enum CameraState : int 4 | { 5 | // Camera state: Showing camera preview. 6 | STATE_PREVIEW = 0, 7 | 8 | // Camera state: Waiting for the focus to be locked. 9 | STATE_WAITING_LOCK = 1, 10 | 11 | // Camera state: Waiting for the exposure to be precapture state. 12 | STATE_WAITING_PRECAPTURE = 2, 13 | 14 | // Camera state: Waiting for the exposure state to be something other than precapture. 15 | STATE_WAITING_NON_PRECAPTURE = 3, 16 | 17 | // Camera state: Picture was taken. 18 | STATE_PICTURE_TAKEN = 4, 19 | } 20 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/ThirdParties/Camera/CompareSizesByArea.cs: -------------------------------------------------------------------------------- 1 | using Android.Util; 2 | using Java.Lang; 3 | using Java.Util; 4 | 5 | namespace TailwindTraders.Mobile.Droid.ThirdParties.Camera 6 | { 7 | public class CompareSizesByArea : Java.Lang.Object, IComparator 8 | { 9 | public int Compare(Object lhs, Object rhs) 10 | { 11 | var lhsSize = (Size)lhs; 12 | var rhsSize = (Size)rhs; 13 | 14 | // We cast here to ensure the multiplications won't overflow 15 | return Long.Signum(((long)lhsSize.Width * lhsSize.Height) - ((long)rhsSize.Width * rhsSize.Height)); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/ThirdParties/Camera/ICamera.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Hardware.Camera2; 3 | using Android.OS; 4 | using Java.Util.Concurrent; 5 | 6 | namespace TailwindTraders.Mobile.Droid.ThirdParties.Camera 7 | { 8 | public interface ICamera 9 | { 10 | Semaphore mCameraOpenCloseLock { get; set; } 11 | 12 | CameraDevice mCameraDevice { get; set; } 13 | 14 | Activity Activity { get; set; } 15 | 16 | Handler mBackgroundHandler { get; set; } 17 | 18 | CameraCaptureSession mCaptureSession { get; set; } 19 | 20 | CaptureRequest.Builder mPreviewRequestBuilder { get; set; } 21 | 22 | CaptureRequest mPreviewRequest { get; set; } 23 | 24 | void CreateCameraPreviewSession(); 25 | 26 | void OpenCamera(int width, int height); 27 | 28 | void OnCaptureComplete(string path); 29 | 30 | int GetOrientation(); 31 | } 32 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/ThirdParties/Camera/Listeners/CameraStateListener.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Hardware.Camera2; 3 | 4 | namespace TailwindTraders.Mobile.Droid.ThirdParties.Camera.Listeners 5 | { 6 | public class CameraStateListener : CameraDevice.StateCallback 7 | { 8 | private readonly ICamera owner; 9 | 10 | public CameraStateListener(ICamera owner) 11 | { 12 | if (owner == null) 13 | { 14 | throw new System.ArgumentNullException("owner"); 15 | } 16 | 17 | this.owner = owner; 18 | } 19 | 20 | public override void OnOpened(CameraDevice cameraDevice) 21 | { 22 | // This method is called when the camera is opened. We start camera preview here. 23 | owner.mCameraOpenCloseLock.Release(); 24 | owner.mCameraDevice = cameraDevice; 25 | owner.CreateCameraPreviewSession(); 26 | } 27 | 28 | public override void OnDisconnected(CameraDevice cameraDevice) 29 | { 30 | owner.mCameraOpenCloseLock.Release(); 31 | cameraDevice.Close(); 32 | owner.mCameraDevice = null; 33 | } 34 | 35 | public override void OnError(CameraDevice cameraDevice, CameraError error) 36 | { 37 | owner.mCameraOpenCloseLock.Release(); 38 | cameraDevice.Close(); 39 | owner.mCameraDevice = null; 40 | if (owner == null) 41 | { 42 | return; 43 | } 44 | 45 | Activity activity = owner.Activity; 46 | if (activity != null) 47 | { 48 | activity.Finish(); 49 | } 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/ThirdParties/Camera/Listeners/CameraSurfaceTextureListener.cs: -------------------------------------------------------------------------------- 1 | using Android.Views; 2 | 3 | namespace TailwindTraders.Mobile.Droid.ThirdParties.Camera.Listeners 4 | { 5 | public class CameraSurfaceTextureListener : Java.Lang.Object, TextureView.ISurfaceTextureListener 6 | { 7 | private readonly ICamera owner; 8 | 9 | public CameraSurfaceTextureListener(ICamera owner) 10 | { 11 | if (owner == null) 12 | { 13 | throw new System.ArgumentNullException("owner"); 14 | } 15 | 16 | this.owner = owner; 17 | } 18 | 19 | public void OnSurfaceTextureAvailable(Android.Graphics.SurfaceTexture surface, int width, int height) 20 | { 21 | owner.OpenCamera(width, height); 22 | } 23 | 24 | public bool OnSurfaceTextureDestroyed(Android.Graphics.SurfaceTexture surface) 25 | { 26 | return true; 27 | } 28 | 29 | public void OnSurfaceTextureSizeChanged(Android.Graphics.SurfaceTexture surface, int width, int height) 30 | { 31 | } 32 | 33 | public void OnSurfaceTextureUpdated(Android.Graphics.SurfaceTexture surface) 34 | { 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/ThirdParties/Camera/readme.txt: -------------------------------------------------------------------------------- 1 | Modified version of Camera2Basic sample from here: 2 | 3 | https://github.com/Microsoft/ConferenceVision/tree/master/ConferenceVision/ConferenceVision.Android/Camera2Basic -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/appcenter-post-clone.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ######################################################################################################################## 4 | # XAML policies 5 | ######################################################################################################################## 6 | 7 | PROJECTPATH="$APPCENTER_SOURCE_DIRECTORY/Source/TailwindTraders.Mobile" 8 | 9 | echo "Verifying XAML policies:" 10 | 11 | pushd $PROJECTPATH 12 | mono ../Tools/XamlStyler/XamlStyler.Console/xstyler.exe -c ./CodeAnalysis/XamlStylerSettings.json -d . -r true -v 13 | 14 | if [[ $? -eq 0 ]] 15 | then 16 | echo 17 | echo "Every XAML follows defined policies :-)" 18 | else 19 | echo 20 | echo "Not every XAML follows defined policies :-(" 21 | exit 1 22 | fi 23 | 24 | popd -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.Android/environment.txt: -------------------------------------------------------------------------------- 1 | # Decrease Mono logging - https://www.mono-project.com/docs/advanced/runtime/logging-runtime-events/ 2 | MONO_LOG_LEVEL=error -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Application.cs: -------------------------------------------------------------------------------- 1 | using UIKit; 2 | 3 | namespace TailwindTraders.Mobile.IOS 4 | { 5 | public class Application 6 | { 7 | // This is the main entry point of the application. 8 | public static void Main(string[] args) 9 | { 10 | // if you want to use a different Application Delegate class from "AppDelegate" 11 | // you can specify it here. 12 | UIApplication.Main(args, null, "AppDelegate"); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/3bar.imageset/3bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/3bar.imageset/3bar.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/3bar.imageset/3bar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/3bar.imageset/3bar@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/3bar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "3bar.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "3bar@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "scale": "3x", 15 | "idiom": "universal" 16 | } 17 | ], 18 | "info": { 19 | "version": 1, 20 | "author": "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/app_icon.appiconset/Icon1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/app_icon.appiconset/Icon1024.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/app_icon.appiconset/Icon120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/app_icon.appiconset/Icon120.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/app_icon.appiconset/Icon180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/app_icon.appiconset/Icon180.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/capture.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "scale": "1x", 5 | "idiom": "iphone", 6 | "filename": "capture.png" 7 | }, 8 | { 9 | "scale": "2x", 10 | "idiom": "iphone", 11 | "filename": "capture@2x.png" 12 | }, 13 | { 14 | "scale": "3x", 15 | "idiom": "iphone", 16 | "filename": "capture@3x.png" 17 | } 18 | ], 19 | "properties": {}, 20 | "info": { 21 | "version": 1, 22 | "author": "" 23 | } 24 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/capture.imageset/capture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/capture.imageset/capture.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/capture.imageset/capture@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/capture.imageset/capture@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/capture.imageset/capture@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/capture.imageset/capture@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/cart.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "cart.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "cart@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "cart@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/cart.imageset/cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/cart.imageset/cart.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/cart.imageset/cart@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/cart.imageset/cart@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/cart.imageset/cart@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/cart.imageset/cart@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "scale": "1x", 5 | "idiom": "iphone", 6 | "filename": "close.png" 7 | }, 8 | { 9 | "scale": "2x", 10 | "idiom": "iphone", 11 | "filename": "close@2x.png" 12 | }, 13 | { 14 | "scale": "3x", 15 | "idiom": "iphone", 16 | "filename": "close@3x.png" 17 | } 18 | ], 19 | "properties": {}, 20 | "info": { 21 | "version": 1, 22 | "author": "" 23 | } 24 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/close.imageset/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/close.imageset/close.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/close.imageset/close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/close.imageset/close@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/close.imageset/close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/close.imageset/close@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/filters.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "filters.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "filters@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "filters@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/filters.imageset/filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/filters.imageset/filters.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/filters.imageset/filters@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/filters.imageset/filters@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/filters.imageset/filters@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/filters.imageset/filters@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/free_shipping.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "free_shipping.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "free_shipping@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "free_shipping@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/free_shipping.imageset/free_shipping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/free_shipping.imageset/free_shipping.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/free_shipping.imageset/free_shipping@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/free_shipping.imageset/free_shipping@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/free_shipping.imageset/free_shipping@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/free_shipping.imageset/free_shipping@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/ia.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "ia.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "ia@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "ia@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/ia.imageset/ia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/ia.imageset/ia.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/ia.imageset/ia@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/ia.imageset/ia@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/ia.imageset/ia@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/ia.imageset/ia@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_header_b.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "logo_header_b.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "logo_header_b@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "logo_header_b@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_header_b.imageset/logo_header_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_header_b.imageset/logo_header_b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_header_b.imageset/logo_header_b@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_header_b.imageset/logo_header_b@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_header_b.imageset/logo_header_b@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_header_b.imageset/logo_header_b@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_horizontal_b.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "logo_horizontal-b.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "logo_horizontal-b@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "logo_horizontal-b@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_horizontal_b.imageset/logo_horizontal-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_horizontal_b.imageset/logo_horizontal-b.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_horizontal_b.imageset/logo_horizontal-b@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_horizontal_b.imageset/logo_horizontal-b@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_horizontal_b.imageset/logo_horizontal-b@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_horizontal_b.imageset/logo_horizontal-b@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_vertical_w.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "logo_vertical_w.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "logo_vertical_w@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "logo_vertical_w@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_vertical_w.imageset/logo_vertical_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_vertical_w.imageset/logo_vertical_w.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_vertical_w.imageset/logo_vertical_w@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_vertical_w.imageset/logo_vertical_w@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_vertical_w.imageset/logo_vertical_w@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/logo_vertical_w.imageset/logo_vertical_w@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/photo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "photo.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "photo@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "photo@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/photo.imageset/photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/photo.imageset/photo.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/photo.imageset/photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/photo.imageset/photo@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/photo.imageset/photo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/photo.imageset/photo@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/search.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "search.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "search@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "search@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/search.imageset/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/search.imageset/search.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/search.imageset/search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/search.imageset/search@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/search.imageset/search@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/search.imageset/search@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/splash_screen.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "Splash_screen.jpg", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "Splash_screen@2x.jpg", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "Splash_screen@3x.jpg", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/splash_screen.imageset/Splash_screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/splash_screen.imageset/Splash_screen.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/splash_screen.imageset/Splash_screen@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/splash_screen.imageset/Splash_screen@2x.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/splash_screen.imageset/Splash_screen@3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/splash_screen.imageset/Splash_screen@3x.jpg -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/star.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "star.png", 5 | "scale": "1x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "filename": "star@2x.png", 10 | "scale": "2x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "filename": "star@3x.png", 15 | "scale": "3x", 16 | "idiom": "universal" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/star.imageset/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/star.imageset/star.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/star.imageset/star@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/star.imageset/star@2x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/star.imageset/star@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Assets.xcassets/star.imageset/star@3x.png -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Effects/MultilineButtonEffect.cs: -------------------------------------------------------------------------------- 1 | using TailwindTraders.Mobile.Effects; 2 | using UIKit; 3 | using Xamarin.Forms; 4 | using Xamarin.Forms.Platform.iOS; 5 | 6 | [assembly: ExportEffect( 7 | typeof(TailwindTraders.Mobile.IOS.Effects.MultilineButtonEffect), nameof(MultilineButtonEffect))] 8 | 9 | namespace TailwindTraders.Mobile.IOS.Effects 10 | { 11 | public class MultilineButtonEffect : PlatformEffect 12 | { 13 | protected override void OnAttached() 14 | { 15 | var button = Control as UIButton; 16 | button.TitleLabel.LineBreakMode = UILineBreakMode.WordWrap; 17 | } 18 | 19 | protected override void OnDetached() 20 | { 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | keychain-access-groups 6 | 7 | $(AppIdentifierPrefix)com.microsoft.tailwindtraders 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Features/LogIn/BorderlessEntryEffect.cs: -------------------------------------------------------------------------------- 1 | using CoreGraphics; 2 | using TailwindTraders.Mobile.Effects; 3 | using UIKit; 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Platform.iOS; 6 | 7 | [assembly: ExportEffect( 8 | typeof(TailwindTraders.Mobile.IOS.Features.LogIn.BorderlessEntryEffect), nameof(BorderlessEntryEffect))] 9 | 10 | namespace TailwindTraders.Mobile.IOS.Features.LogIn 11 | { 12 | public class BorderlessEntryEffect : PlatformEffect 13 | { 14 | protected override void OnAttached() 15 | { 16 | var textField = Control as UITextField; 17 | textField.BorderStyle = UITextBorderStyle.None; 18 | 19 | var layer = textField.Layer; 20 | var primaryColor = (Color)App.Current.Resources["PrimaryColor"]; 21 | layer.BackgroundColor = primaryColor.ToCGColor(); 22 | var accentColor = (Color)App.Current.Resources["AccentColor"]; 23 | layer.ShadowColor = accentColor.ToCGColor(); 24 | layer.ShadowOffset = new CGSize(0, 2); 25 | layer.ShadowOpacity = 1; 26 | layer.ShadowRadius = 0; 27 | } 28 | 29 | protected override void OnDetached() 30 | { 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Libs/EmguTF/.gitignore: -------------------------------------------------------------------------------- 1 | tensorflow/ -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Libs/EmguTF/build_tf_lite_ios.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | pushd tensorflow/tensorflow/contrib/lite/tools/make 4 | ./download_dependencies.sh 5 | popd 6 | 7 | ./tensorflow/tensorflow/contrib/lite/tools/make/build_ios_universal_lib.sh 8 | 9 | cp tensorflow/tensorflow/contrib/lite/tools/make/gen/lib/libtensorflow-lite.a libtfliteextern.a 10 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Libs/EmguTF/libtfliteextern.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/TailwindTraders-Mobile/ce79771ddc326caeb907239185e2810af752ff86/Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Libs/EmguTF/libtfliteextern.a -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Libs/EmguTF/readme.txt: -------------------------------------------------------------------------------- 1 | Instructions to build libtfliteextern for iOS in OSX: 2 | 3 | Prerequisites: 4 | xcode 5 | 6 | -From current dir execute the following commands: 7 | 8 | git clone https://github.com/emgucv/tensorflow.git 9 | pushd tensorflow 10 | git checkout v1.12.0-emgu 11 | popd 12 | chmod +x build_tf_lite_ios.sh 13 | ./build_tf_lite_ios.sh -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("TailwindTraders.Mobile.IOS")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("TailwindTraders.Mobile.IOS")] 12 | [assembly: AssemblyCopyright("Copyright © 2014")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/ThirdParties/Camera/readme.txt: -------------------------------------------------------------------------------- 1 | Modified version of CameraManager.cs from here: 2 | 3 | https://github.com/Microsoft/ConferenceVision/blob/master/ConferenceVision/ConferenceVision.iOS/Utils/CameraManager.cs -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile.iOS/appcenter-post-clone.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ######################################################################################################################## 4 | # XAML policies 5 | ######################################################################################################################## 6 | 7 | PROJECTPATH="$APPCENTER_SOURCE_DIRECTORY/Source/TailwindTraders.Mobile" 8 | 9 | echo "Verifying XAML policies:" 10 | 11 | pushd $PROJECTPATH 12 | mono ../Tools/XamlStyler/XamlStyler.Console/xstyler.exe -c ./CodeAnalysis/XamlStylerSettings.json -d . -r true -v 13 | 14 | if [[ $? -eq 0 ]] 15 | then 16 | echo 17 | echo "Every XAML follows defined policies :-)" 18 | else 19 | echo 20 | echo "Not every XAML follows defined policies :-(" 21 | exit 1 22 | fi 23 | 24 | popd -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/App.xaml: -------------------------------------------------------------------------------- 1 |  2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Colors.xaml: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 17 | 18 | #2F4B66 19 | 20 | #673C4F 21 | 22 | White 23 | 24 | 25 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Colors.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace TailwindTraders.Mobile 2 | { 3 | public partial class Colors 4 | { 5 | public Colors() 6 | { 7 | InitializeComponent(); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/ControlTemplates.xaml: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/ControlTemplates.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace TailwindTraders.Mobile 2 | { 3 | public partial class ControlTemplates 4 | { 5 | public ControlTemplates() 6 | { 7 | InitializeComponent(); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Controls/FixedRatioCarouselViewControl.cs: -------------------------------------------------------------------------------- 1 | using CarouselView.FormsPlugin.Abstractions; 2 | using Xamarin.Forms; 3 | 4 | namespace TailwindTraders.Mobile.Controls 5 | { 6 | public class FixedRatioCarouselViewControl : CarouselViewControl 7 | { 8 | protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint) => 9 | new SizeRequest(new Size(widthConstraint, widthConstraint * 1.27f)); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Converters.xaml: -------------------------------------------------------------------------------- 1 |  2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Converters.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace TailwindTraders.Mobile 2 | { 3 | public partial class Converters 4 | { 5 | public Converters() 6 | { 7 | InitializeComponent(); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Effects/BorderlessEntryEffect.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms; 2 | 3 | namespace TailwindTraders.Mobile.Effects 4 | { 5 | public class BorderlessEntryEffect : RoutingEffect 6 | { 7 | public BorderlessEntryEffect() 8 | : base($"{nameof(TailwindTraders)}.{nameof(BorderlessEntryEffect)}") 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Effects/MultilineButtonEffect.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms; 2 | 3 | namespace TailwindTraders.Mobile.Effects 4 | { 5 | public class MultilineButtonEffect : RoutingEffect 6 | { 7 | public MultilineButtonEffect() 8 | : base($"{nameof(TailwindTraders)}.{nameof(MultilineButtonEffect)}") 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Common/FakeRestPoolService.cs: -------------------------------------------------------------------------------- 1 | using TailwindTraders.Mobile.Features.Home; 2 | using TailwindTraders.Mobile.Features.LogIn; 3 | using TailwindTraders.Mobile.Features.Product; 4 | using TailwindTraders.Mobile.Features.Product.Cart; 5 | 6 | namespace TailwindTraders.Mobile.Features.Common 7 | { 8 | public class FakeRestPoolService : IRestPoolService 9 | { 10 | public IProfilesAPI ProfilesAPI { get; } = new FakeProfilesAPI(); 11 | 12 | public IHomeAPI HomeAPI { get; } = new FakeHomeAPI(); 13 | 14 | public IProductsAPI ProductsAPI { get; } = new FakeProductsAPI(); 15 | 16 | public ILoginAPI LoginAPI { get; } = new FakeLoginAPI(); 17 | 18 | public ISimilarProductsAPI SimilarProductsAPI { get; } = new FakeSimilarProductsAPI(); 19 | 20 | public IProductCartAPI ProductCartAPI { get; } = new FakeProductCartAPI(); 21 | 22 | public void UpdateApiUrl(string newApiUrl) 23 | { 24 | // Intentionally blank 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Common/IRestPoolService.cs: -------------------------------------------------------------------------------- 1 | using TailwindTraders.Mobile.Features.Home; 2 | using TailwindTraders.Mobile.Features.LogIn; 3 | using TailwindTraders.Mobile.Features.Product; 4 | using TailwindTraders.Mobile.Features.Product.Cart; 5 | 6 | namespace TailwindTraders.Mobile.Features.Common 7 | { 8 | public interface IRestPoolService 9 | { 10 | IProfilesAPI ProfilesAPI { get; } 11 | 12 | IHomeAPI HomeAPI { get; } 13 | 14 | IProductsAPI ProductsAPI { get; } 15 | 16 | ILoginAPI LoginAPI { get; } 17 | 18 | ISimilarProductsAPI SimilarProductsAPI { get; } 19 | 20 | IProductCartAPI ProductCartAPI { get; } 21 | 22 | void UpdateApiUrl(string newApiUrl); 23 | } 24 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Common/RestPoolService.cs: -------------------------------------------------------------------------------- 1 | using Refit; 2 | using TailwindTraders.Mobile.Features.Home; 3 | using TailwindTraders.Mobile.Features.LogIn; 4 | using TailwindTraders.Mobile.Features.Product; 5 | using TailwindTraders.Mobile.Features.Product.Cart; 6 | using TailwindTraders.Mobile.Features.Settings; 7 | using TailwindTraders.Mobile.Helpers; 8 | 9 | namespace TailwindTraders.Mobile.Features.Common 10 | { 11 | public class RestPoolService : IRestPoolService 12 | { 13 | public IProfilesAPI ProfilesAPI { get; private set; } 14 | 15 | public IHomeAPI HomeAPI { get; private set; } 16 | 17 | public IProductsAPI ProductsAPI { get; private set; } 18 | 19 | public ILoginAPI LoginAPI { get; private set; } 20 | 21 | public ISimilarProductsAPI SimilarProductsAPI { get; private set; } 22 | 23 | // There is no real API for products cart, meanwhile must use a faked one 24 | public IProductCartAPI ProductCartAPI => new FakeProductCartAPI(); 25 | 26 | public RestPoolService() 27 | { 28 | UpdateApiUrl(DefaultSettings.RootApiUrl); 29 | } 30 | 31 | public void UpdateApiUrl(string newApiUrl) 32 | { 33 | LoginAPI = RestService.For( 34 | HttpClientFactory.Create(newApiUrl)); 35 | ProfilesAPI = RestService.For( 36 | HttpClientFactory.Create(DefaultSettings.RootWebApiUrl)); 37 | HomeAPI = RestService.For( 38 | HttpClientFactory.Create(newApiUrl)); 39 | ProductsAPI = RestService.For( 40 | HttpClientFactory.Create(newApiUrl)); 41 | SimilarProductsAPI = RestService.For( 42 | HttpClientFactory.Create(newApiUrl)); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Home/FakeHomeAPI.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using Refit; 3 | using TailwindTraders.Mobile.Features.Product; 4 | using TailwindTraders.Mobile.Features.Settings; 5 | using TailwindTraders.Mobile.Helpers; 6 | 7 | namespace TailwindTraders.Mobile.Features.Home 8 | { 9 | public class FakeHomeAPI : IHomeAPI 10 | { 11 | public Task GetAsync([Header(DefaultSettings.ApiAuthorizationHeader)] string authorizationHeader) 12 | => FakeNetwork.ReturnAsync(new LandingDTO { PopularProducts = FakeProducts.Fakes, }); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Home/FreeShippingBanner.xaml: -------------------------------------------------------------------------------- 1 |  2 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 19 | 20 | 21 | 24 | 25 | 30 | 31 | 38 | 39 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Home/FreeShippingBanner.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace TailwindTraders.Mobile.Features.Home 2 | { 3 | public partial class FreeShippingBanner 4 | { 5 | public FreeShippingBanner() 6 | { 7 | InitializeComponent(); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Home/HomePage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Xamarin.Forms; 3 | 4 | namespace TailwindTraders.Mobile.Features.Home 5 | { 6 | public partial class HomePage 7 | { 8 | public HomePage() 9 | { 10 | InitializeComponent(); 11 | 12 | BindingContext = new HomeViewModel(); 13 | } 14 | 15 | internal override IEnumerable GetStateAwareVisualElements() => new VisualElement[] 16 | { 17 | refreshButton, 18 | stateAwareStackLayout, 19 | }; 20 | } 21 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Home/IHomeAPI.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using Refit; 3 | using TailwindTraders.Mobile.Features.Settings; 4 | 5 | namespace TailwindTraders.Mobile.Features.Home 6 | { 7 | public interface IHomeAPI 8 | { 9 | [Get("/products/landing")] 10 | Task GetAsync([Header(DefaultSettings.ApiAuthorizationHeader)] string authorizationHeader); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Home/LandingDTO.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using TailwindTraders.Mobile.Features.Product; 3 | 4 | namespace TailwindTraders.Mobile.Features.Home 5 | { 6 | public class LandingDTO 7 | { 8 | public IEnumerable PopularProducts { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /Source/TailwindTraders.Mobile/TailwindTraders.Mobile/Features/Home/RecommendedItemTemplate.xaml: -------------------------------------------------------------------------------- 1 |  2 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 28 | 29 |